1 // We want to control preemption here.
2 //@compile-flags: -Zmiri-preemption-rate=0
4 use std::thread::spawn;
7 struct EvilSend<T>(pub T);
9 unsafe impl<T> Send for EvilSend<T> {}
10 unsafe impl<T> Sync for EvilSend<T> {}
13 fn __rust_dealloc(ptr: *mut u8, size: usize, align: usize);
17 // Shared atomic pointer
18 let pointer: *mut usize = Box::into_raw(Box::new(0usize));
19 let ptr = EvilSend(pointer);
22 let j1 = spawn(move || {
26 let j2 = spawn(move || {
28 //~^ ERROR: Data race detected between Deallocate on thread `<unnamed>` and Read on thread `<unnamed>`
30 std::mem::size_of::<usize>(),
31 std::mem::align_of::<usize>(),