mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Rollup merge of #126927 - workingjubilee:vaargsafe-is-unsafe, r=joboet
core: VaArgSafe is an unsafe trait `T: VaArgSafe` is relied on for soundness. Safe impls promise nothing. Therefore this must be an unsafe trait. Slightly pedantic, as only core can impl this, but we *could* choose to unseal the trait. That would allow soundly (but unsafely) implementing this for e.g. a `#[repr(C)] struct` that should be passable by varargs. Relates to https://github.com/rust-lang/rust/issues/44930
This commit is contained in:
commit
3795c56bd1
@ -484,7 +484,7 @@ mod sealed_trait {
|
||||
all supported platforms",
|
||||
issue = "44930"
|
||||
)]
|
||||
pub trait VaArgSafe {}
|
||||
pub unsafe trait VaArgSafe {}
|
||||
}
|
||||
|
||||
macro_rules! impl_va_arg_safe {
|
||||
@ -494,7 +494,7 @@ macro_rules! impl_va_arg_safe {
|
||||
reason = "the `c_variadic` feature has not been properly tested on \
|
||||
all supported platforms",
|
||||
issue = "44930")]
|
||||
impl sealed_trait::VaArgSafe for $t {}
|
||||
unsafe impl sealed_trait::VaArgSafe for $t {}
|
||||
)+
|
||||
}
|
||||
}
|
||||
@ -509,14 +509,15 @@ impl_va_arg_safe! {f64}
|
||||
all supported platforms",
|
||||
issue = "44930"
|
||||
)]
|
||||
impl<T> sealed_trait::VaArgSafe for *mut T {}
|
||||
unsafe impl<T> sealed_trait::VaArgSafe for *mut T {}
|
||||
|
||||
#[unstable(
|
||||
feature = "c_variadic",
|
||||
reason = "the `c_variadic` feature has not been properly tested on \
|
||||
all supported platforms",
|
||||
issue = "44930"
|
||||
)]
|
||||
impl<T> sealed_trait::VaArgSafe for *const T {}
|
||||
unsafe impl<T> sealed_trait::VaArgSafe for *const T {}
|
||||
|
||||
#[unstable(
|
||||
feature = "c_variadic",
|
||||
|
Loading…
Reference in New Issue
Block a user