Rollup merge of #114800 - RalfJung:transparent, r=cuviper
std: add some missing repr(transparent) For some types we don't want to stably guarantee this, so hide the `repr` from rustdoc. This nice approach was suggested by `@thomcc.`
This commit is contained in:
@@ -16,14 +16,20 @@ pub struct WasiFd {
|
||||
fn iovec<'a>(a: &'a mut [IoSliceMut<'_>]) -> &'a [wasi::Iovec] {
|
||||
assert_eq!(mem::size_of::<IoSliceMut<'_>>(), mem::size_of::<wasi::Iovec>());
|
||||
assert_eq!(mem::align_of::<IoSliceMut<'_>>(), mem::align_of::<wasi::Iovec>());
|
||||
// SAFETY: `IoSliceMut` and `IoVec` have exactly the same memory layout
|
||||
// SAFETY: `IoSliceMut` and `IoVec` have exactly the same memory layout.
|
||||
// We decorate our `IoSliceMut` with `repr(transparent)` (see `io.rs`), and
|
||||
// `crate::io::IoSliceMut` is a `repr(transparent)` wrapper around our type, so this is
|
||||
// guaranteed.
|
||||
unsafe { mem::transmute(a) }
|
||||
}
|
||||
|
||||
fn ciovec<'a>(a: &'a [IoSlice<'_>]) -> &'a [wasi::Ciovec] {
|
||||
assert_eq!(mem::size_of::<IoSlice<'_>>(), mem::size_of::<wasi::Ciovec>());
|
||||
assert_eq!(mem::align_of::<IoSlice<'_>>(), mem::align_of::<wasi::Ciovec>());
|
||||
// SAFETY: `IoSlice` and `CIoVec` have exactly the same memory layout
|
||||
// SAFETY: `IoSlice` and `CIoVec` have exactly the same memory layout.
|
||||
// We decorate our `IoSlice` with `repr(transparent)` (see `io.rs`), and
|
||||
// `crate::io::IoSlice` is a `repr(transparent)` wrapper around our type, so this is
|
||||
// guaranteed.
|
||||
unsafe { mem::transmute(a) }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user