]> git.proxmox.com Git - rustc.git/blob - src/test/ui/lint/lint-invalid-atomic-ordering-int.rs
New upstream version 1.56.0~beta.4+dfsg1
[rustc.git] / src / test / ui / lint / lint-invalid-atomic-ordering-int.rs
1 // FIXME: add support for `// only-atomic` to compiletest/header.rs
2 // only-x86_64
3 use std::sync::atomic::{AtomicI16, AtomicI32, AtomicI64, AtomicI8, AtomicIsize, Ordering};
4
5 fn main() {
6 // `AtomicI8` test cases
7 let x = AtomicI8::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 // Allowed store ordering modes
15 x.store(1, Ordering::Release);
16 x.store(1, Ordering::SeqCst);
17 x.store(1, Ordering::Relaxed);
18
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
24
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
30
31 // `AtomicI16` test cases
32 let x = AtomicI16::new(0);
33
34 // Allowed load ordering modes
35 let _ = x.load(Ordering::Acquire);
36 let _ = x.load(Ordering::SeqCst);
37 let _ = x.load(Ordering::Relaxed);
38
39 // Allowed store ordering modes
40 x.store(1, Ordering::Release);
41 x.store(1, Ordering::SeqCst);
42 x.store(1, Ordering::Relaxed);
43
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
49
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
55
56 // `AtomicI32` test cases
57 let x = AtomicI32::new(0);
58
59 // Allowed load ordering modes
60 let _ = x.load(Ordering::Acquire);
61 let _ = x.load(Ordering::SeqCst);
62 let _ = x.load(Ordering::Relaxed);
63
64 // Allowed store ordering modes
65 x.store(1, Ordering::Release);
66 x.store(1, Ordering::SeqCst);
67 x.store(1, Ordering::Relaxed);
68
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
74
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
80
81 // `AtomicI64` test cases
82 let x = AtomicI64::new(0);
83
84 // Allowed load ordering modes
85 let _ = x.load(Ordering::Acquire);
86 let _ = x.load(Ordering::SeqCst);
87 let _ = x.load(Ordering::Relaxed);
88
89 // Allowed store ordering modes
90 x.store(1, Ordering::Release);
91 x.store(1, Ordering::SeqCst);
92 x.store(1, Ordering::Relaxed);
93
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
99
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
105
106 // `AtomicIsize` test cases
107 let x = AtomicIsize::new(0);
108
109 // Allowed load ordering modes
110 let _ = x.load(Ordering::Acquire);
111 let _ = x.load(Ordering::SeqCst);
112 let _ = x.load(Ordering::Relaxed);
113
114 // Allowed store ordering modes
115 x.store(1, Ordering::Release);
116 x.store(1, Ordering::SeqCst);
117 x.store(1, Ordering::Relaxed);
118
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
124
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
130 }