1 // FIXME: add support for `// only-atomic` to compiletest/header.rs
3 use std
::sync
::atomic
::{AtomicI16, AtomicI32, AtomicI64, AtomicI8, AtomicIsize, Ordering}
;
6 // `AtomicI8` test cases
7 let x
= AtomicI8
::new(0);
9 // Allowed load ordering modes
10 let _
= x
.load(Ordering
::Acquire
);
11 let _
= x
.load(Ordering
::SeqCst
);
12 let _
= x
.load(Ordering
::Relaxed
);
14 // Allowed store ordering modes
15 x
.store(1, Ordering
::Release
);
16 x
.store(1, Ordering
::SeqCst
);
17 x
.store(1, Ordering
::Relaxed
);
19 // Disallowed load ordering modes
20 let _
= x
.load(Ordering
::Release
);
21 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
22 let _
= x
.load(Ordering
::AcqRel
);
23 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
25 // Disallowed store ordering modes
26 x
.store(1, Ordering
::Acquire
);
27 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
28 x
.store(1, Ordering
::AcqRel
);
29 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
31 // `AtomicI16` test cases
32 let x
= AtomicI16
::new(0);
34 // Allowed load ordering modes
35 let _
= x
.load(Ordering
::Acquire
);
36 let _
= x
.load(Ordering
::SeqCst
);
37 let _
= x
.load(Ordering
::Relaxed
);
39 // Allowed store ordering modes
40 x
.store(1, Ordering
::Release
);
41 x
.store(1, Ordering
::SeqCst
);
42 x
.store(1, Ordering
::Relaxed
);
44 // Disallowed load ordering modes
45 let _
= x
.load(Ordering
::Release
);
46 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
47 let _
= x
.load(Ordering
::AcqRel
);
48 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
50 // Disallowed store ordering modes
51 x
.store(1, Ordering
::Acquire
);
52 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
53 x
.store(1, Ordering
::AcqRel
);
54 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
56 // `AtomicI32` test cases
57 let x
= AtomicI32
::new(0);
59 // Allowed load ordering modes
60 let _
= x
.load(Ordering
::Acquire
);
61 let _
= x
.load(Ordering
::SeqCst
);
62 let _
= x
.load(Ordering
::Relaxed
);
64 // Allowed store ordering modes
65 x
.store(1, Ordering
::Release
);
66 x
.store(1, Ordering
::SeqCst
);
67 x
.store(1, Ordering
::Relaxed
);
69 // Disallowed load ordering modes
70 let _
= x
.load(Ordering
::Release
);
71 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
72 let _
= x
.load(Ordering
::AcqRel
);
73 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
75 // Disallowed store ordering modes
76 x
.store(1, Ordering
::Acquire
);
77 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
78 x
.store(1, Ordering
::AcqRel
);
79 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
81 // `AtomicI64` test cases
82 let x
= AtomicI64
::new(0);
84 // Allowed load ordering modes
85 let _
= x
.load(Ordering
::Acquire
);
86 let _
= x
.load(Ordering
::SeqCst
);
87 let _
= x
.load(Ordering
::Relaxed
);
89 // Allowed store ordering modes
90 x
.store(1, Ordering
::Release
);
91 x
.store(1, Ordering
::SeqCst
);
92 x
.store(1, Ordering
::Relaxed
);
94 // Disallowed load ordering modes
95 let _
= x
.load(Ordering
::Release
);
96 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
97 let _
= x
.load(Ordering
::AcqRel
);
98 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
100 // Disallowed store ordering modes
101 x
.store(1, Ordering
::Acquire
);
102 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
103 x
.store(1, Ordering
::AcqRel
);
104 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
106 // `AtomicIsize` test cases
107 let x
= AtomicIsize
::new(0);
109 // Allowed load ordering modes
110 let _
= x
.load(Ordering
::Acquire
);
111 let _
= x
.load(Ordering
::SeqCst
);
112 let _
= x
.load(Ordering
::Relaxed
);
114 // Allowed store ordering modes
115 x
.store(1, Ordering
::Release
);
116 x
.store(1, Ordering
::SeqCst
);
117 x
.store(1, Ordering
::Relaxed
);
119 // Disallowed load ordering modes
120 let _
= x
.load(Ordering
::Release
);
121 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
122 let _
= x
.load(Ordering
::AcqRel
);
123 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
125 // Disallowed store ordering modes
126 x
.store(1, Ordering
::Acquire
);
127 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
128 x
.store(1, Ordering
::AcqRel
);
129 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering