diff options
| -rw-r--r-- | library/core/src/option.rs | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/library/core/src/option.rs b/library/core/src/option.rs index ff48575e2c0..7b550936942 100644 --- a/library/core/src/option.rs +++ b/library/core/src/option.rs @@ -120,20 +120,22 @@ //! //! Rust guarantees to optimize the following types `T` such that //! [`Option<T>`] has the same size, alignment, and [function call ABI] as `T`. In some -//! of these cases, Rust further guarantees that -//! `transmute::<_, Option<T>>([0u8; size_of::<T>()])` is sound and -//! produces `Option::<T>::None`. These cases are identified by the -//! second column: -//! -//! | `T` | `transmute::<_, Option<T>>([0u8; size_of::<T>()])` sound? | -//! |---------------------------------------------------------------------|----------------------------------------------------------------------| -//! | [`Box<U>`] (specifically, only `Box<U, Global>`) | when `U: Sized` | -//! | `&U` | when `U: Sized` | -//! | `&mut U` | when `U: Sized` | -//! | `fn`, `extern "C" fn`[^extern_fn] | always | -//! | [`num::NonZero*`] | always | -//! | [`ptr::NonNull<U>`] | when `U: Sized` | -//! | `#[repr(transparent)]` struct around one of the types in this list. | when it holds for the inner type | +//! of these cases, Rust further guarantees the following: +//! - `transmute::<_, Option<T>>([0u8; size_of::<T>()])` is sound and produces +//! `Option::<T>::None` +//! - `transmute::<_, [u8; size_of::<T>()]>(Option::<T>::None)` is sound and produces +//! `[0u8; size_of::<T>()]` +//! These cases are identified by the second column: +//! +//! | `T` | Transmuting between `[0u8; size_of::<T>()]` and `Option::<T>::None` sound? | +//! |---------------------------------------------------------------------|----------------------------------------------------------------------------| +//! | [`Box<U>`] (specifically, only `Box<U, Global>`) | when `U: Sized` | +//! | `&U` | when `U: Sized` | +//! | `&mut U` | when `U: Sized` | +//! | `fn`, `extern "C" fn`[^extern_fn] | always | +//! | [`num::NonZero*`] | always | +//! | [`ptr::NonNull<U>`] | when `U: Sized` | +//! | `#[repr(transparent)]` struct around one of the types in this list. | when it holds for the inner type | //! //! [^extern_fn]: this remains true for any argument/return types and any other ABI: `extern "abi" fn` (_e.g._, `extern "system" fn`) //! |
