]> git.lizzy.rs Git - rust.git/blob - tests/ui/lint/lint-invalid-atomic-ordering-int.rs
Rollup merge of #103702 - WaffleLapkin:lift-sized-bounds-from-pointer-methods-where...
[rust.git] / tests / 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 }