Skip to content

Commit

Permalink
Suggest mem::forget if mem::ManuallyDrop::new isn't used
Browse files Browse the repository at this point in the history
I think this communicates the intent better, and is shorter anyway.
  • Loading branch information
scottmcm committed Aug 25, 2020
1 parent c30341d commit f302407
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 3 deletions.
6 changes: 5 additions & 1 deletion library/core/src/mem/manually_drop.rs
Expand Up @@ -74,8 +74,12 @@ impl<T> ManuallyDrop<T> {
///
/// ```rust
/// use std::mem::ManuallyDrop;
/// ManuallyDrop::new(Box::new(()));
/// let mut x = ManuallyDrop::new(String::from("Hello World!"));
/// x.truncate(5); // You can still safely operate on the value
/// assert_eq!(*x, "Hello");
/// // But `Drop` will not be run here
/// ```
#[must_use = "if you don't need the wrapper, you can use `mem::forget` instead"]
#[stable(feature = "manually_drop", since = "1.20.0")]
#[rustc_const_stable(feature = "const_manually_drop", since = "1.36.0")]
#[inline(always)]
Expand Down
2 changes: 1 addition & 1 deletion library/core/src/mem/mod.rs
Expand Up @@ -145,7 +145,7 @@ pub use crate::intrinsics::transmute;
#[rustc_const_stable(feature = "const_forget", since = "1.46.0")]
#[stable(feature = "rust1", since = "1.0.0")]
pub const fn forget<T>(t: T) {
ManuallyDrop::new(t);
let _ = ManuallyDrop::new(t);
}

/// Like [`forget`], but also accepts unsized values.
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/lazy.rs
Expand Up @@ -293,7 +293,7 @@ impl<T> SyncOnceCell<T> {

// Don't drop this `SyncOnceCell`. We just moved out one of the fields, but didn't set
// the state to uninitialized.
mem::ManuallyDrop::new(self);
mem::forget(self);
inner
}

Expand Down

0 comments on commit f302407

Please sign in to comment.