diff --git a/tests/compile-fail/data_race/alloc_write_race.rs b/tests/compile-fail/data_race/alloc_write_race.rs index d9f5af396a2d..becebe6a122a 100644 --- a/tests/compile-fail/data_race/alloc_write_race.rs +++ b/tests/compile-fail/data_race/alloc_write_race.rs @@ -1,4 +1,5 @@ // ignore-windows: Concurrency on Windows is not supported yet. +#![feature(new_uninit)] use std::thread::spawn; use std::ptr::null_mut; @@ -10,11 +11,6 @@ struct EvilSend(pub T); unsafe impl Send for EvilSend {} unsafe impl Sync for EvilSend {} -extern "C" { - fn malloc(size: usize) -> *mut u8; - fn free(ptr: *mut u8); -} - pub fn main() { // Shared atomic pointer let pointer = AtomicPtr::new(null_mut::()); @@ -33,7 +29,7 @@ pub fn main() { // Uses relaxed semantics to not generate // a release sequence. let pointer = &*ptr.0; - pointer.store(malloc(std::mem::size_of::()) as *mut usize, Ordering::Relaxed); + pointer.store(Box::into_raw(Box::::new_uninit()) as *mut usize, Ordering::Relaxed); }); let j2 = spawn(move || { @@ -45,6 +41,6 @@ pub fn main() { j2.join().unwrap(); // Clean up memory, will never be executed - free(pointer.load(Ordering::Relaxed) as *mut _); + drop(Box::from_raw(pointer.load(Ordering::Relaxed))); } }