diff options
| author | Oliver Scherer <github35764891676564198441@oli-obk.de> | 2019-09-20 12:40:57 +0200 |
|---|---|---|
| committer | Oliver Scherer <github35764891676564198441@oli-obk.de> | 2019-10-11 10:43:54 +0200 |
| commit | 2fc257ca8144ad6a41b053a01f977afce7a23c95 (patch) | |
| tree | 1d02aa71409433b0699fde9962785927fb31b6ec /src/libstd | |
| parent | 9c1ad0ff2fe64c02a91c1daf0ce6670b1eaf75f6 (diff) | |
| download | rust-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.rs | 1 | ||||
| -rw-r--r-- | src/libstd/panicking.rs | 6 |
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()); } } } |
