Skip to content

Commit b90e121

Browse files
committed
Claw back VaArgSafe
1 parent c999cef commit b90e121

5 files changed

Lines changed: 103 additions & 94 deletions

File tree

library/core/src/ffi/va_list.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ const impl<'f> Drop for VaList<'f> {
308308
// types with a non-scalar layout. Inline assembly can be used to accept unsupported types in the
309309
// meantime.
310310
#[lang = "va_arg_safe"]
311-
#[stable(feature = "c_variadic", since = "1.99.0")]
311+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
312312
#[rustc_dyn_incompatible_trait]
313313
pub impl(self) unsafe trait VaArgSafe {}
314314

@@ -318,9 +318,9 @@ crate::cfg_select! {
318318
//
319319
// - i8 is implicitly promoted to c_int in C, and cannot implement `VaArgSafe`.
320320
// - u8 is implicitly promoted to c_uint in C, and cannot implement `VaArgSafe`.
321-
#[stable(feature = "c_variadic", since = "1.99.0")]
321+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
322322
unsafe impl VaArgSafe for i16 {}
323-
#[stable(feature = "c_variadic", since = "1.99.0")]
323+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
324324
unsafe impl VaArgSafe for u16 {}
325325
}
326326
_ => {
@@ -334,7 +334,7 @@ crate::cfg_select! {
334334
crate::cfg_select! {
335335
target_arch = "avr" => {
336336
// c_double is f32 on this target.
337-
#[stable(feature = "c_variadic", since = "1.99.0")]
337+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
338338
unsafe impl VaArgSafe for f32 {}
339339
}
340340
_ => {
@@ -344,18 +344,18 @@ crate::cfg_select! {
344344
}
345345
}
346346

347-
#[stable(feature = "c_variadic", since = "1.99.0")]
347+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
348348
unsafe impl VaArgSafe for i32 {}
349-
#[stable(feature = "c_variadic", since = "1.99.0")]
349+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
350350
unsafe impl VaArgSafe for i64 {}
351-
#[stable(feature = "c_variadic", since = "1.99.0")]
351+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
352352
unsafe impl VaArgSafe for isize {}
353353

354-
#[stable(feature = "c_variadic", since = "1.99.0")]
354+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
355355
unsafe impl VaArgSafe for u32 {}
356-
#[stable(feature = "c_variadic", since = "1.99.0")]
356+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
357357
unsafe impl VaArgSafe for u64 {}
358-
#[stable(feature = "c_variadic", since = "1.99.0")]
358+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
359359
unsafe impl VaArgSafe for usize {}
360360

361361
// Implement `VaArgSafe` for 128-bit integers on targets where clang provides `__int128`.
@@ -413,12 +413,12 @@ cfg_select! {
413413
}
414414
}
415415

416-
#[stable(feature = "c_variadic", since = "1.99.0")]
416+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
417417
unsafe impl VaArgSafe for f64 {}
418418

419-
#[stable(feature = "c_variadic", since = "1.99.0")]
419+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
420420
unsafe impl<T> VaArgSafe for *mut T {}
421-
#[stable(feature = "c_variadic", since = "1.99.0")]
421+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
422422
unsafe impl<T> VaArgSafe for *const T {}
423423

424424
// Check that relevant `core::ffi` types implement `VaArgSafe`.

library/std/src/ffi/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,12 @@
164164
#[stable(feature = "c_str_module", since = "1.88.0")]
165165
pub mod c_str;
166166

167+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "44930")]
168+
pub use core::ffi::VaArgSafe;
169+
#[stable(feature = "c_variadic", since = "1.99.0")]
170+
pub use core::ffi::VaList;
167171
#[stable(feature = "core_c_void", since = "1.30.0")]
168172
pub use core::ffi::c_void;
169-
#[stable(feature = "c_variadic", since = "1.99.0")]
170-
pub use core::ffi::{VaArgSafe, VaList};
171173
#[stable(feature = "core_ffi_c", since = "1.64.0")]
172174
pub use core::ffi::{
173175
c_char, c_double, c_float, c_int, c_long, c_longlong, c_schar, c_short, c_uchar, c_uint,

tests/ui/c-variadic/roundtrip.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
//@ run-pass
22
//@ ignore-backends: gcc
3-
#![feature(const_c_variadic, c_variadic_int128, const_destruct, const_raw_ptr_comparison)]
3+
#![feature(
4+
const_c_variadic,
5+
c_variadic_va_arg_safe,
6+
c_variadic_int128,
7+
const_destruct,
8+
const_raw_ptr_comparison
9+
)]
410
#![allow(unused_features)] // c_variadic_int128 is only used on 64-bit targets.
511

612
use std::ffi::*;

tests/ui/consts/const-eval/c-variadic-fail.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#![feature(const_trait_impl)]
55
#![feature(const_destruct)]
66
#![feature(const_clone)]
7+
#![feature(c_variadic_va_arg_safe)]
78

89
use std::ffi::{VaList, c_char, c_void};
910
use std::mem::MaybeUninit;

0 commit comments

Comments
 (0)