]> git.proxmox.com Git - rustc.git/blame - src/tools/clippy/tests/ui/atomic_ordering_exchange_weak.rs
New upstream version 1.55.0+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / atomic_ordering_exchange_weak.rs
CommitLineData
f20569fa
XL
1#![warn(clippy::invalid_atomic_ordering)]
2
3use std::sync::atomic::{AtomicPtr, Ordering};
4
5fn main() {
6 let ptr = &mut 5;
7 let ptr2 = &mut 10;
8 // `compare_exchange_weak` testing
9 let x = AtomicPtr::new(ptr);
10
11 // Allowed ordering combos
12 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Relaxed);
13 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Acquire);
14 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Relaxed);
15 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Relaxed);
16 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Acquire);
17 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Relaxed);
18 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Relaxed);
19 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Acquire);
20 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::SeqCst);
21
22 // AcqRel is always forbidden as a failure ordering
23 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Relaxed, Ordering::AcqRel);
24 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::AcqRel);
25 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::AcqRel);
26 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::AcqRel);
27 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::SeqCst, Ordering::AcqRel);
28
29 // Release is always forbidden as a failure ordering
30 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Release);
31 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Release);
32 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Release);
33 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Release);
34 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Release);
35
36 // Release success order forbids failure order of Acquire or SeqCst
37 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::Acquire);
38 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::SeqCst);
39
40 // Relaxed success order also forbids failure order of Acquire or SeqCst
41 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::SeqCst);
42 let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Acquire);
43
44 // Acquire/AcqRel forbids failure order of SeqCst
45 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::SeqCst);
46 let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::SeqCst);
47}