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