]> git.proxmox.com Git - rustc.git/blob - src/test/ui/lint/lint-invalid-atomic-ordering-uint.rs
New upstream version 1.56.0~beta.4+dfsg1
[rustc.git] / src / test / ui / lint / lint-invalid-atomic-ordering-uint.rs
1 // only-x86_64
2 use std::sync::atomic::{AtomicU16, AtomicU32, AtomicU64, AtomicU8, AtomicUsize, Ordering};
3
4 fn main() {
5 // `AtomicU8` test cases
6 let x = AtomicU8::new(0);
7
8 // Allowed load ordering modes
9 let _ = x.load(Ordering::Acquire);
10 let _ = x.load(Ordering::SeqCst);
11 let _ = x.load(Ordering::Relaxed);
12
13 // Allowed store ordering modes
14 x.store(1, Ordering::Release);
15 x.store(1, Ordering::SeqCst);
16 x.store(1, Ordering::Relaxed);
17
18 // Disallowed load ordering modes
19 let _ = x.load(Ordering::Release);
20 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
21 let _ = x.load(Ordering::AcqRel);
22 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
23
24 // Disallowed store ordering modes
25 x.store(1, Ordering::Acquire);
26 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
27 x.store(1, Ordering::AcqRel);
28 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
29
30 // `AtomicU16` test cases
31 let x = AtomicU16::new(0);
32
33 // Allowed load ordering modes
34 let _ = x.load(Ordering::Acquire);
35 let _ = x.load(Ordering::SeqCst);
36 let _ = x.load(Ordering::Relaxed);
37
38 // Allowed store ordering modes
39 x.store(1, Ordering::Release);
40 x.store(1, Ordering::SeqCst);
41 x.store(1, Ordering::Relaxed);
42
43 // Disallowed load ordering modes
44 let _ = x.load(Ordering::Release);
45 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
46 let _ = x.load(Ordering::AcqRel);
47 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
48
49 // Disallowed store ordering modes
50 x.store(1, Ordering::Acquire);
51 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
52 x.store(1, Ordering::AcqRel);
53 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
54
55 // `AtomicU32` test cases
56 let x = AtomicU32::new(0);
57
58 // Allowed load ordering modes
59 let _ = x.load(Ordering::Acquire);
60 let _ = x.load(Ordering::SeqCst);
61 let _ = x.load(Ordering::Relaxed);
62
63 // Allowed store ordering modes
64 x.store(1, Ordering::Release);
65 x.store(1, Ordering::SeqCst);
66 x.store(1, Ordering::Relaxed);
67
68 // Disallowed load ordering modes
69 let _ = x.load(Ordering::Release);
70 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
71 let _ = x.load(Ordering::AcqRel);
72 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
73
74 // Disallowed store ordering modes
75 x.store(1, Ordering::Acquire);
76 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
77 x.store(1, Ordering::AcqRel);
78 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
79
80 // `AtomicU64` test cases
81 let x = AtomicU64::new(0);
82
83 // Allowed load ordering modes
84 let _ = x.load(Ordering::Acquire);
85 let _ = x.load(Ordering::SeqCst);
86 let _ = x.load(Ordering::Relaxed);
87
88 // Allowed store ordering modes
89 x.store(1, Ordering::Release);
90 x.store(1, Ordering::SeqCst);
91 x.store(1, Ordering::Relaxed);
92
93 // Disallowed load ordering modes
94 let _ = x.load(Ordering::Release);
95 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
96 let _ = x.load(Ordering::AcqRel);
97 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
98
99 // Disallowed store ordering modes
100 x.store(1, Ordering::Acquire);
101 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
102 x.store(1, Ordering::AcqRel);
103 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
104
105 // `AtomicUsize` test cases
106 let x = AtomicUsize::new(0);
107
108 // Allowed load ordering modes
109 let _ = x.load(Ordering::Acquire);
110 let _ = x.load(Ordering::SeqCst);
111 let _ = x.load(Ordering::Relaxed);
112
113 // Allowed store ordering modes
114 x.store(1, Ordering::Release);
115 x.store(1, Ordering::SeqCst);
116 x.store(1, Ordering::Relaxed);
117
118 // Disallowed load ordering modes
119 let _ = x.load(Ordering::Release);
120 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
121 let _ = x.load(Ordering::AcqRel);
122 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
123
124 // Disallowed store ordering modes
125 x.store(1, Ordering::Acquire);
126 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
127 x.store(1, Ordering::AcqRel);
128 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
129 }