diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-06-25 21:33:43 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-25 21:33:43 +0200 |
| commit | 3795c56bd1ba32f99ccefb89f8b6111f89f5e87d (patch) | |
| tree | 7d11c73cb8254610116ac5d163d15d261ea4fd7f | |
| parent | 6077c0ed9dab8925d9b19ff4c1d06cf263ffea88 (diff) | |
| parent | 050595a82619515614674b6e5dfe16a123dab9c2 (diff) | |
| download | rust-3795c56bd1ba32f99ccefb89f8b6111f89f5e87d.tar.gz rust-3795c56bd1ba32f99ccefb89f8b6111f89f5e87d.zip | |
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
| -rw-r--r-- | library/core/src/ffi/mod.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/library/core/src/ffi/mod.rs b/library/core/src/ffi/mod.rs index 618897b3aba..6d1f10f5211 100644 --- a/library/core/src/ffi/mod.rs +++ b/library/core/src/ffi/mod.rs @@ -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", |
