diff options
| author | Ralf Jung <post@ralfj.de> | 2020-09-02 10:00:08 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2020-09-05 17:24:22 +0200 |
| commit | 35068326b5966530225c8fc01bcdaa0fb4041138 (patch) | |
| tree | 4a6a9296adef239d2e56c40359ffeedd8a480588 | |
| parent | cff5f56886b60bab024d51d26866e99a293da56b (diff) | |
| download | rust-35068326b5966530225c8fc01bcdaa0fb4041138.tar.gz rust-35068326b5966530225c8fc01bcdaa0fb4041138.zip | |
document remaining unsafety in maybe_uninit.rs
| -rw-r--r-- | library/core/src/mem/maybe_uninit.rs | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/library/core/src/mem/maybe_uninit.rs b/library/core/src/mem/maybe_uninit.rs index f770df61d9c..b64abf68c5e 100644 --- a/library/core/src/mem/maybe_uninit.rs +++ b/library/core/src/mem/maybe_uninit.rs @@ -3,8 +3,6 @@ use crate::fmt; use crate::intrinsics; use crate::mem::ManuallyDrop; -// ignore-tidy-undocumented-unsafe - /// A wrapper type to construct uninitialized instances of `T`. /// /// # Initialization invariant @@ -355,6 +353,7 @@ impl<T> MaybeUninit<T> { #[rustc_diagnostic_item = "maybe_uninit_zeroed"] pub fn zeroed() -> MaybeUninit<T> { let mut u = MaybeUninit::<T>::uninit(); + // SAFETY: `u.as_mut_ptr()` points to allocated memory. unsafe { u.as_mut_ptr().write_bytes(0u8, 1); } @@ -368,10 +367,9 @@ impl<T> MaybeUninit<T> { #[unstable(feature = "maybe_uninit_extra", issue = "63567")] #[inline(always)] pub fn write(&mut self, val: T) -> &mut T { - unsafe { - self.value = ManuallyDrop::new(val); - self.assume_init_mut() - } + *self = MaybeUninit::new(val); + // SAFETY: We just initialized this value. + unsafe { self.assume_init_mut() } } /// Gets a pointer to the contained value. Reading from this pointer or turning it |
