about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorOliver Scherer <github35764891676564198441@oli-obk.de>2019-09-20 12:40:57 +0200
committerOliver Scherer <github35764891676564198441@oli-obk.de>2019-10-11 10:43:54 +0200
commit2fc257ca8144ad6a41b053a01f977afce7a23c95 (patch)
tree1d02aa71409433b0699fde9962785927fb31b6ec /src/libstd
parent9c1ad0ff2fe64c02a91c1daf0ce6670b1eaf75f6 (diff)
downloadrust-2fc257ca8144ad6a41b053a01f977afce7a23c95.tar.gz
rust-2fc257ca8144ad6a41b053a01f977afce7a23c95.zip
Prefer `ManuallyDrop::{take,new}` over `ptr::{read,write}`
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/lib.rs1
-rw-r--r--src/libstd/panicking.rs6
2 files changed, 4 insertions, 3 deletions
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 5ff32d7adaf..8e3e02586a6 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -275,6 +275,7 @@
 #![feature(link_args)]
 #![feature(linkage)]
 #![feature(log_syntax)]
+#![feature(manually_drop_take)]
 #![feature(maybe_uninit_ref)]
 #![feature(maybe_uninit_slice)]
 #![feature(mem_take)]
diff --git a/src/libstd/panicking.rs b/src/libstd/panicking.rs
index 296f2a59bb8..2dde81bb0ec 100644
--- a/src/libstd/panicking.rs
+++ b/src/libstd/panicking.rs
@@ -13,7 +13,6 @@ use crate::any::Any;
 use crate::fmt;
 use crate::intrinsics;
 use crate::mem::{self, ManuallyDrop};
-use crate::ptr;
 use crate::raw;
 use crate::sync::atomic::{AtomicBool, Ordering};
 use crate::sys::stdio::panic_output;
@@ -283,8 +282,9 @@ pub unsafe fn r#try<R, F: FnOnce() -> R>(f: F) -> Result<R, Box<dyn Any + Send>>
     fn do_call<F: FnOnce() -> R, R>(data: *mut u8) {
         unsafe {
             let data = data as *mut Data<F, R>;
-            let f = ptr::read(&mut *(*data).f);
-            ptr::write(&mut *(*data).r, f());
+            let data = &mut (*data);
+            let f = ManuallyDrop::take(&mut data.f);
+            data.r = ManuallyDrop::new(f());
         }
     }
 }