]> git.proxmox.com Git - rustc.git/blob - src/tools/clippy/tests/ui/atomic_ordering_uint.rs
New upstream version 1.55.0+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / atomic_ordering_uint.rs
1 #![warn(clippy::invalid_atomic_ordering)]
2
3 use std::sync::atomic::{AtomicU16, AtomicU32, AtomicU64, AtomicU8, AtomicUsize, Ordering};
4
5 fn main() {
6 // `AtomicU8` test cases
7 let x = AtomicU8::new(0);
8
9 // Allowed load ordering modes
10 let _ = x.load(Ordering::Acquire);
11 let _ = x.load(Ordering::SeqCst);
12 let _ = x.load(Ordering::Relaxed);
13
14 // Disallowed load ordering modes
15 let _ = x.load(Ordering::Release);
16 let _ = x.load(Ordering::AcqRel);
17
18 // Allowed store ordering modes
19 x.store(1, Ordering::Release);
20 x.store(1, Ordering::SeqCst);
21 x.store(1, Ordering::Relaxed);
22
23 // Disallowed store ordering modes
24 x.store(1, Ordering::Acquire);
25 x.store(1, Ordering::AcqRel);
26
27 // `AtomicU16` test cases
28 let x = AtomicU16::new(0);
29
30 let _ = x.load(Ordering::Acquire);
31 let _ = x.load(Ordering::SeqCst);
32 let _ = x.load(Ordering::Relaxed);
33 let _ = x.load(Ordering::Release);
34 let _ = x.load(Ordering::AcqRel);
35
36 x.store(1, Ordering::Release);
37 x.store(1, Ordering::SeqCst);
38 x.store(1, Ordering::Relaxed);
39 x.store(1, Ordering::Acquire);
40 x.store(1, Ordering::AcqRel);
41
42 // `AtomicU32` test cases
43 let x = AtomicU32::new(0);
44
45 let _ = x.load(Ordering::Acquire);
46 let _ = x.load(Ordering::SeqCst);
47 let _ = x.load(Ordering::Relaxed);
48 let _ = x.load(Ordering::Release);
49 let _ = x.load(Ordering::AcqRel);
50
51 x.store(1, Ordering::Release);
52 x.store(1, Ordering::SeqCst);
53 x.store(1, Ordering::Relaxed);
54 x.store(1, Ordering::Acquire);
55 x.store(1, Ordering::AcqRel);
56
57 // `AtomicU64` test cases
58 let x = AtomicU64::new(0);
59
60 let _ = x.load(Ordering::Acquire);
61 let _ = x.load(Ordering::SeqCst);
62 let _ = x.load(Ordering::Relaxed);
63 let _ = x.load(Ordering::Release);
64 let _ = x.load(Ordering::AcqRel);
65
66 x.store(1, Ordering::Release);
67 x.store(1, Ordering::SeqCst);
68 x.store(1, Ordering::Relaxed);
69 x.store(1, Ordering::Acquire);
70 x.store(1, Ordering::AcqRel);
71
72 // `AtomicUsize` test cases
73 let x = AtomicUsize::new(0);
74
75 let _ = x.load(Ordering::Acquire);
76 let _ = x.load(Ordering::SeqCst);
77 let _ = x.load(Ordering::Relaxed);
78 let _ = x.load(Ordering::Release);
79 let _ = x.load(Ordering::AcqRel);
80
81 x.store(1, Ordering::Release);
82 x.store(1, Ordering::SeqCst);
83 x.store(1, Ordering::Relaxed);
84 x.store(1, Ordering::Acquire);
85 x.store(1, Ordering::AcqRel);
86 }