Skip to content

Commit 5e3ad00

Browse files
committed
Claw back VaArgSafe
1 parent c999cef commit 5e3ad00

5 files changed

Lines changed: 26 additions & 18 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 = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
322322
unsafe impl VaArgSafe for i16 {}
323-
#[stable(feature = "c_variadic", since = "1.99.0")]
323+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
348348
unsafe impl VaArgSafe for i32 {}
349-
#[stable(feature = "c_variadic", since = "1.99.0")]
349+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
350350
unsafe impl VaArgSafe for i64 {}
351-
#[stable(feature = "c_variadic", since = "1.99.0")]
351+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
355355
unsafe impl VaArgSafe for u32 {}
356-
#[stable(feature = "c_variadic", since = "1.99.0")]
356+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
357357
unsafe impl VaArgSafe for u64 {}
358-
#[stable(feature = "c_variadic", since = "1.99.0")]
358+
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
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 = "162911", implied_by = "c_variadic")]
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,

src/bootstrap/stdlib-semver-check-stamp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ Change this file to explicitly acknowledge making a breaking change to the Rust
22
If this file is modified in the same PR as the breaking change, then CI will not fail due to the
33
breaking change being detected by cargo-semver-checks.
44

5-
Last change is for: https://github.com/rust-lang/rust/pull/162374
5+
Last change is for: https://github.com/rust-lang/rust/pull/162909

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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//@ build-fail
2-
2+
#![feature(c_variadic_va_arg_safe)]
33
#![feature(const_c_variadic)]
44
#![feature(const_trait_impl)]
55
#![feature(const_destruct)]

0 commit comments

Comments
 (0)