about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2019-07-16 09:17:35 +0200
committerSimon Sapin <simon.sapin@exyr.org>2019-08-16 17:11:18 +0200
commit1141136b90663cf9d5ee6325b2f9e47f02e70746 (patch)
tree50adf3d58f4e732b4767df192dd8315e03ca7714 /src/liballoc
parentdab967afdc76904c971d5ac5f5f46e31272a9827 (diff)
downloadrust-1141136b90663cf9d5ee6325b2f9e47f02e70746.tar.gz
rust-1141136b90663cf9d5ee6325b2f9e47f02e70746.zip
Use ManuallyDrop instead of mem::forget
Per https://github.com/rust-lang/rust/pull/62451#discussion_r303197278
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/rc.rs8
-rw-r--r--src/liballoc/sync.rs8
2 files changed, 4 insertions, 12 deletions
diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs
index 70911790be2..c76c4b50c64 100644
--- a/src/liballoc/rc.rs
+++ b/src/liballoc/rc.rs
@@ -495,10 +495,8 @@ impl<T> Rc<mem::MaybeUninit<T>> {
     #[unstable(feature = "new_uninit", issue = "0")]
     #[inline]
     pub unsafe fn assume_init(self) -> Rc<T> {
-        let ptr = self.ptr.cast();
-        mem::forget(self);
         Rc {
-            ptr,
+            ptr: mem::ManuallyDrop::new(self).ptr.cast(),
             phantom: PhantomData,
         }
     }
@@ -541,10 +539,8 @@ impl<T> Rc<[mem::MaybeUninit<T>]> {
     #[unstable(feature = "new_uninit", issue = "0")]
     #[inline]
     pub unsafe fn assume_init(self) -> Rc<[T]> {
-        let ptr = NonNull::new_unchecked(self.ptr.as_ptr() as _);
-        mem::forget(self);
         Rc {
-            ptr,
+            ptr: NonNull::new_unchecked(mem::ManuallyDrop::new(self).ptr.as_ptr() as _),
             phantom: PhantomData,
         }
     }
diff --git a/src/liballoc/sync.rs b/src/liballoc/sync.rs
index 901d2d831d1..bc3acd27e8b 100644
--- a/src/liballoc/sync.rs
+++ b/src/liballoc/sync.rs
@@ -479,10 +479,8 @@ impl<T> Arc<mem::MaybeUninit<T>> {
     #[unstable(feature = "new_uninit", issue = "0")]
     #[inline]
     pub unsafe fn assume_init(self) -> Arc<T> {
-        let ptr = self.ptr.cast();
-        mem::forget(self);
         Arc {
-            ptr,
+            ptr: mem::ManuallyDrop::new(self).ptr.cast(),
             phantom: PhantomData,
         }
     }
@@ -525,10 +523,8 @@ impl<T> Arc<[mem::MaybeUninit<T>]> {
     #[unstable(feature = "new_uninit", issue = "0")]
     #[inline]
     pub unsafe fn assume_init(self) -> Arc<[T]> {
-        let ptr = NonNull::new_unchecked(self.ptr.as_ptr() as _);
-        mem::forget(self);
         Arc {
-            ptr,
+            ptr: NonNull::new_unchecked(mem::ManuallyDrop::new(self).ptr.as_ptr() as _),
             phantom: PhantomData,
         }
     }