Prefer `ManuallyDrop::{take,new}` over `ptr::{read,write}`

This commit is contained in:
Oliver Scherer 2019-09-20 12:40:57 +02:00
parent 9c1ad0ff2f
commit 2fc257ca81
2 changed files with 4 additions and 3 deletions

View File

@ -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)]

View File

@ -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());
}
}
}