]> git.lizzy.rs Git - rust.git/blob - tests/ui/lint/lint-invalid-atomic-ordering-uint.rs
Auto merge of #106884 - clubby789:fieldless-enum-debug, r=michaelwoerister
[rust.git] / tests / ui / lint / lint-invalid-atomic-ordering-uint.rs
1 // only-x86_64
2 use std::sync::atomic::{AtomicU16, AtomicU32, AtomicU64, AtomicU8, AtomicUsize, Ordering};
3
4 fn main() {
5     // `AtomicU8` test cases
6     let x = AtomicU8::new(0);
7
8     // Allowed load ordering modes
9     let _ = x.load(Ordering::Acquire);
10     let _ = x.load(Ordering::SeqCst);
11     let _ = x.load(Ordering::Relaxed);
12
13     // Allowed store ordering modes
14     x.store(1, Ordering::Release);
15     x.store(1, Ordering::SeqCst);
16     x.store(1, Ordering::Relaxed);
17
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
23
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
29
30     // `AtomicU16` test cases
31     let x = AtomicU16::new(0);
32
33     // Allowed load ordering modes
34     let _ = x.load(Ordering::Acquire);
35     let _ = x.load(Ordering::SeqCst);
36     let _ = x.load(Ordering::Relaxed);
37
38     // Allowed store ordering modes
39     x.store(1, Ordering::Release);
40     x.store(1, Ordering::SeqCst);
41     x.store(1, Ordering::Relaxed);
42
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
48
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
54
55     // `AtomicU32` test cases
56     let x = AtomicU32::new(0);
57
58     // Allowed load ordering modes
59     let _ = x.load(Ordering::Acquire);
60     let _ = x.load(Ordering::SeqCst);
61     let _ = x.load(Ordering::Relaxed);
62
63     // Allowed store ordering modes
64     x.store(1, Ordering::Release);
65     x.store(1, Ordering::SeqCst);
66     x.store(1, Ordering::Relaxed);
67
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
73
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
79
80     // `AtomicU64` test cases
81     let x = AtomicU64::new(0);
82
83     // Allowed load ordering modes
84     let _ = x.load(Ordering::Acquire);
85     let _ = x.load(Ordering::SeqCst);
86     let _ = x.load(Ordering::Relaxed);
87
88     // Allowed store ordering modes
89     x.store(1, Ordering::Release);
90     x.store(1, Ordering::SeqCst);
91     x.store(1, Ordering::Relaxed);
92
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
98
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
104
105     // `AtomicUsize` test cases
106     let x = AtomicUsize::new(0);
107
108     // Allowed load ordering modes
109     let _ = x.load(Ordering::Acquire);
110     let _ = x.load(Ordering::SeqCst);
111     let _ = x.load(Ordering::Relaxed);
112
113     // Allowed store ordering modes
114     x.store(1, Ordering::Release);
115     x.store(1, Ordering::SeqCst);
116     x.store(1, Ordering::Relaxed);
117
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
123
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
129 }