2 use std::sync::atomic::{AtomicPtr, Ordering};
7 // `compare_exchange_weak` testing
8 let x = AtomicPtr::new(ptr);
10 // Allowed ordering combos
11 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Relaxed);
12 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Acquire);
13 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::SeqCst);
14 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Relaxed);
15 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Acquire);
16 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::SeqCst);
17 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Relaxed);
18 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::Acquire);
19 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::SeqCst);
20 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Relaxed);
21 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Acquire);
22 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::SeqCst);
23 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Relaxed);
24 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Acquire);
25 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::SeqCst);
27 // AcqRel is always forbidden as a failure ordering
28 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Relaxed, Ordering::AcqRel);
29 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
30 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::AcqRel);
31 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
32 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::AcqRel);
33 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
34 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::AcqRel);
35 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
36 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::SeqCst, Ordering::AcqRel);
37 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
39 // Release is always forbidden as a failure ordering
40 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Release);
41 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
42 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Release);
43 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
44 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Release);
45 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
46 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Release);
47 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
48 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Release);
49 //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`