Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions library/core/src/ffi/va_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ const impl<'f> Drop for VaList<'f> {
// types with a non-scalar layout. Inline assembly can be used to accept unsupported types in the
// meantime.
#[lang = "va_arg_safe"]
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
#[rustc_dyn_incompatible_trait]
pub impl(self) unsafe trait VaArgSafe {}

Expand All @@ -318,9 +318,9 @@ crate::cfg_select! {
//
// - i8 is implicitly promoted to c_int in C, and cannot implement `VaArgSafe`.
// - u8 is implicitly promoted to c_uint in C, and cannot implement `VaArgSafe`.
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for i16 {}
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for u16 {}
}
_ => {
Expand All @@ -334,7 +334,7 @@ crate::cfg_select! {
crate::cfg_select! {
target_arch = "avr" => {
// c_double is f32 on this target.
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for f32 {}
}
_ => {
Expand All @@ -344,18 +344,18 @@ crate::cfg_select! {
}
}

#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for i32 {}
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for i64 {}
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for isize {}

#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for u32 {}
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for u64 {}
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for usize {}

// Implement `VaArgSafe` for 128-bit integers on targets where clang provides `__int128`.
Expand Down Expand Up @@ -413,12 +413,12 @@ cfg_select! {
}
}

#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl VaArgSafe for f64 {}

#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl<T> VaArgSafe for *mut T {}
#[stable(feature = "c_variadic", since = "1.99.0")]
#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
unsafe impl<T> VaArgSafe for *const T {}

// Check that relevant `core::ffi` types implement `VaArgSafe`.
Expand Down
6 changes: 4 additions & 2 deletions library/std/src/ffi/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,12 @@
#[stable(feature = "c_str_module", since = "1.88.0")]
pub mod c_str;

#[unstable(feature = "c_variadic_va_arg_safe", issue = "162911", implied_by = "c_variadic")]
pub use core::ffi::VaArgSafe;
#[stable(feature = "c_variadic", since = "1.99.0")]
pub use core::ffi::VaList;
#[stable(feature = "core_c_void", since = "1.30.0")]
pub use core::ffi::c_void;
#[stable(feature = "c_variadic", since = "1.99.0")]
pub use core::ffi::{VaArgSafe, VaList};
#[stable(feature = "core_ffi_c", since = "1.64.0")]
pub use core::ffi::{
c_char, c_double, c_float, c_int, c_long, c_longlong, c_schar, c_short, c_uchar, c_uint,
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/stdlib-semver-check-stamp
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ Change this file to explicitly acknowledge making a breaking change to the Rust
If this file is modified in the same PR as the breaking change, then CI will not fail due to the
breaking change being detected by cargo-semver-checks.

Last change is for: https://github.com/rust-lang/rust/pull/162374
Last change is for: https://github.com/rust-lang/rust/pull/162909
8 changes: 7 additions & 1 deletion tests/ui/c-variadic/roundtrip.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
//@ run-pass
//@ ignore-backends: gcc
#![feature(const_c_variadic, c_variadic_int128, const_destruct, const_raw_ptr_comparison)]
#![feature(
const_c_variadic,
c_variadic_va_arg_safe,
c_variadic_int128,
const_destruct,
const_raw_ptr_comparison
)]
#![allow(unused_features)] // c_variadic_int128 is only used on 64-bit targets.

use std::ffi::*;
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/consts/const-eval/c-variadic-fail.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//@ build-fail

#![feature(c_variadic_va_arg_safe)]
#![feature(const_c_variadic)]
#![feature(const_trait_impl)]
#![feature(const_destruct)]
Expand Down
Loading