1 // We want to control preemption here.
2 //@compile-flags: -Zmiri-preemption-rate=0
4 use std::sync::atomic::{AtomicUsize, Ordering};
5 use std::thread::spawn;
8 struct EvilSend<T>(pub T);
10 unsafe impl<T> Send for EvilSend<T> {}
11 unsafe impl<T> Sync for EvilSend<T> {}
14 let mut a = AtomicUsize::new(0);
15 let b = &mut a as *mut AtomicUsize;
18 let j1 = spawn(move || {
19 *(c.0 as *mut usize) = 32;
22 let j2 = spawn(move || {
23 (&*c.0).load(Ordering::SeqCst) //~ ERROR: Data race detected between Atomic Load on thread `<unnamed>` and Write on thread `<unnamed>`