]> git.proxmox.com Git - rustc.git/blob - src/test/ui/lint/lint-invalid-atomic-ordering-exchange.rs
New upstream version 1.64.0+dfsg1
[rustc.git] / src / test / ui / lint / lint-invalid-atomic-ordering-exchange.rs
1 // only-x86_64
2 use std::sync::atomic::{AtomicUsize, Ordering};
3
4 fn main() {
5 // `compare_exchange` (not weak) testing
6 let x = AtomicUsize::new(0);
7
8 // Allowed ordering combos
9 let _ = x.compare_exchange(0, 0, Ordering::Relaxed, Ordering::Relaxed);
10 let _ = x.compare_exchange(0, 0, Ordering::Relaxed, Ordering::Acquire);
11 let _ = x.compare_exchange(0, 0, Ordering::Relaxed, Ordering::SeqCst);
12 let _ = x.compare_exchange(0, 0, Ordering::Acquire, Ordering::Relaxed);
13 let _ = x.compare_exchange(0, 0, Ordering::Acquire, Ordering::Acquire);
14 let _ = x.compare_exchange(0, 0, Ordering::Acquire, Ordering::SeqCst);
15 let _ = x.compare_exchange(0, 0, Ordering::Release, Ordering::Relaxed);
16 let _ = x.compare_exchange(0, 0, Ordering::Release, Ordering::Acquire);
17 let _ = x.compare_exchange(0, 0, Ordering::Release, Ordering::SeqCst);
18 let _ = x.compare_exchange(0, 0, Ordering::AcqRel, Ordering::Relaxed);
19 let _ = x.compare_exchange(0, 0, Ordering::AcqRel, Ordering::Acquire);
20 let _ = x.compare_exchange(0, 0, Ordering::AcqRel, Ordering::SeqCst);
21 let _ = x.compare_exchange(0, 0, Ordering::SeqCst, Ordering::Relaxed);
22 let _ = x.compare_exchange(0, 0, Ordering::SeqCst, Ordering::Acquire);
23 let _ = x.compare_exchange(0, 0, Ordering::SeqCst, Ordering::SeqCst);
24
25 // AcqRel is always forbidden as a failure ordering
26 let _ = x.compare_exchange(0, 0, Ordering::Relaxed, Ordering::AcqRel);
27 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
28 let _ = x.compare_exchange(0, 0, Ordering::Acquire, Ordering::AcqRel);
29 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
30 let _ = x.compare_exchange(0, 0, Ordering::Release, Ordering::AcqRel);
31 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
32 let _ = x.compare_exchange(0, 0, Ordering::AcqRel, Ordering::AcqRel);
33 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
34 let _ = x.compare_exchange(0, 0, Ordering::SeqCst, Ordering::AcqRel);
35 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
36
37 // Release is always forbidden as a failure ordering
38 let _ = x.compare_exchange(0, 0, Ordering::Relaxed, Ordering::Release);
39 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
40 let _ = x.compare_exchange(0, 0, Ordering::Acquire, Ordering::Release);
41 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
42 let _ = x.compare_exchange(0, 0, Ordering::Release, Ordering::Release);
43 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
44 let _ = x.compare_exchange(0, 0, Ordering::AcqRel, Ordering::Release);
45 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
46 let _ = x.compare_exchange(0, 0, Ordering::SeqCst, Ordering::Release);
47 //~^ ERROR `compare_exchange`'s failure ordering may not be `Release` or `AcqRel`
48 }