2 use std
::sync
::atomic
::{AtomicU16, AtomicU32, AtomicU64, AtomicU8, AtomicUsize, Ordering}
;
5 // `AtomicU8` test cases
6 let x
= AtomicU8
::new(0);
8 // Allowed load ordering modes
9 let _
= x
.load(Ordering
::Acquire
);
10 let _
= x
.load(Ordering
::SeqCst
);
11 let _
= x
.load(Ordering
::Relaxed
);
13 // Allowed store ordering modes
14 x
.store(1, Ordering
::Release
);
15 x
.store(1, Ordering
::SeqCst
);
16 x
.store(1, Ordering
::Relaxed
);
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
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
30 // `AtomicU16` test cases
31 let x
= AtomicU16
::new(0);
33 // Allowed load ordering modes
34 let _
= x
.load(Ordering
::Acquire
);
35 let _
= x
.load(Ordering
::SeqCst
);
36 let _
= x
.load(Ordering
::Relaxed
);
38 // Allowed store ordering modes
39 x
.store(1, Ordering
::Release
);
40 x
.store(1, Ordering
::SeqCst
);
41 x
.store(1, Ordering
::Relaxed
);
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
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
55 // `AtomicU32` test cases
56 let x
= AtomicU32
::new(0);
58 // Allowed load ordering modes
59 let _
= x
.load(Ordering
::Acquire
);
60 let _
= x
.load(Ordering
::SeqCst
);
61 let _
= x
.load(Ordering
::Relaxed
);
63 // Allowed store ordering modes
64 x
.store(1, Ordering
::Release
);
65 x
.store(1, Ordering
::SeqCst
);
66 x
.store(1, Ordering
::Relaxed
);
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
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
80 // `AtomicU64` test cases
81 let x
= AtomicU64
::new(0);
83 // Allowed load ordering modes
84 let _
= x
.load(Ordering
::Acquire
);
85 let _
= x
.load(Ordering
::SeqCst
);
86 let _
= x
.load(Ordering
::Relaxed
);
88 // Allowed store ordering modes
89 x
.store(1, Ordering
::Release
);
90 x
.store(1, Ordering
::SeqCst
);
91 x
.store(1, Ordering
::Relaxed
);
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
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
105 // `AtomicUsize` test cases
106 let x
= AtomicUsize
::new(0);
108 // Allowed load ordering modes
109 let _
= x
.load(Ordering
::Acquire
);
110 let _
= x
.load(Ordering
::SeqCst
);
111 let _
= x
.load(Ordering
::Relaxed
);
113 // Allowed store ordering modes
114 x
.store(1, Ordering
::Release
);
115 x
.store(1, Ordering
::SeqCst
);
116 x
.store(1, Ordering
::Relaxed
);
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
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