]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/lint/lint-invalid-atomic-ordering-exchange.rs
2 use std
::sync
::atomic
::{AtomicUsize, Ordering}
;
5 // `compare_exchange` (not weak) testing
6 let x
= AtomicUsize
::new(0);
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
);
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`
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`