Skip to content

Commit

Permalink
Auto merge of #85758 - petertodd:2021-revert-manuallydrop-clone-from,…
Browse files Browse the repository at this point in the history
… r=m-ou-se

Revert #85176 addition of `clone_from` for `ManuallyDrop`

Forwarding `clone_from` to the inner value changes the observable behavior, as previously the inner value would *not* be dropped by the default implementation.

Frankly, this is a super-niche case, so #85176 is welcome to argue the behavior should be otherwise! But if we overrride it, IMO documenting the behavior would be good.

Example: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=c5d0856686fa850c1d7ee16891014efb
  • Loading branch information
bors committed Jun 14, 2021
2 parents 1483156 + 5b2076f commit 7510b0c
Showing 1 changed file with 1 addition and 14 deletions.
15 changes: 1 addition & 14 deletions library/core/src/mem/manually_drop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ use crate::ptr;
/// [`MaybeUninit<T>`]: crate::mem::MaybeUninit
#[stable(feature = "manually_drop", since = "1.20.0")]
#[lang = "manually_drop"]
#[derive(Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct ManuallyDrop<T: ?Sized> {
value: T,
Expand Down Expand Up @@ -160,16 +160,3 @@ impl<T: ?Sized> DerefMut for ManuallyDrop<T> {
&mut self.value
}
}

#[stable(feature = "manually_drop", since = "1.20.0")]
impl<T: Clone> Clone for ManuallyDrop<T> {
#[inline]
fn clone(&self) -> ManuallyDrop<T> {
ManuallyDrop { value: self.value.clone() }
}

#[inline]
fn clone_from(&mut self, other: &Self) {
self.value.clone_from(&other.value)
}
}

0 comments on commit 7510b0c

Please sign in to comment.