Skip to content

Commit 159178e

Browse files
committed
Separate compare_exchange and compare_exchange_weak uitests
1 parent 61671a2 commit 159178e

4 files changed

+179
-168
lines changed

tests/ui/atomic_ordering_exchange.rs

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -42,43 +42,4 @@ fn main() {
4242
// Acquire/AcqRel forbids failure order of SeqCst
4343
let _ = x.compare_exchange(0, 0, Ordering::Acquire, Ordering::SeqCst);
4444
let _ = x.compare_exchange(0, 0, Ordering::AcqRel, Ordering::SeqCst);
45-
46-
// compare_exchange_weak tests
47-
48-
// Allowed ordering combos
49-
let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::Relaxed);
50-
let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::Acquire);
51-
let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::Relaxed);
52-
let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::Relaxed);
53-
let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::Acquire);
54-
let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::Relaxed);
55-
let _ = x.compare_exchange_weak(0, 0, Ordering::SeqCst, Ordering::Relaxed);
56-
let _ = x.compare_exchange_weak(0, 0, Ordering::SeqCst, Ordering::Acquire);
57-
let _ = x.compare_exchange_weak(0, 0, Ordering::SeqCst, Ordering::SeqCst);
58-
59-
// AcqRel is always forbidden as a failure ordering
60-
let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::AcqRel);
61-
let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::AcqRel);
62-
let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::AcqRel);
63-
let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::AcqRel);
64-
let _ = x.compare_exchange_weak(0, 0, Ordering::SeqCst, Ordering::AcqRel);
65-
66-
// Release is always forbidden as a failure ordering
67-
let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::Release);
68-
let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::Release);
69-
let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::Release);
70-
let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::Release);
71-
let _ = x.compare_exchange_weak(0, 0, Ordering::SeqCst, Ordering::Release);
72-
73-
// Release success order forbids failure order of Acquire or SeqCst
74-
let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::Acquire);
75-
let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::SeqCst);
76-
77-
// Relaxed success order also forbids failure order of Acquire or SeqCst
78-
let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::SeqCst);
79-
let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::Acquire);
80-
81-
// Acquire/AcqRel forbids failure order of SeqCst
82-
let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::SeqCst);
83-
let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::SeqCst);
8445
}

tests/ui/atomic_ordering_exchange.stderr

Lines changed: 1 addition & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -127,133 +127,5 @@ LL | let _ = x.compare_exchange(0, 0, Ordering::AcqRel, Ordering::SeqCst);
127127
|
128128
= help: consider using ordering modes `Acquire` or `Relaxed` instead
129129

130-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
131-
--> $DIR/atomic_ordering_exchange.rs:60:62
132-
|
133-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::AcqRel);
134-
| ^^^^^^^^^^^^^^^^
135-
|
136-
= help: consider using ordering mode `Relaxed` instead
137-
138-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
139-
--> $DIR/atomic_ordering_exchange.rs:61:62
140-
|
141-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::AcqRel);
142-
| ^^^^^^^^^^^^^^^^
143-
|
144-
= help: consider using ordering modes `Acquire` or `Relaxed` instead
145-
146-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
147-
--> $DIR/atomic_ordering_exchange.rs:62:62
148-
|
149-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::AcqRel);
150-
| ^^^^^^^^^^^^^^^^
151-
|
152-
= help: consider using ordering mode `Relaxed` instead
153-
154-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
155-
--> $DIR/atomic_ordering_exchange.rs:63:61
156-
|
157-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::AcqRel);
158-
| ^^^^^^^^^^^^^^^^
159-
|
160-
= help: consider using ordering modes `Acquire` or `Relaxed` instead
161-
162-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
163-
--> $DIR/atomic_ordering_exchange.rs:64:61
164-
|
165-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::SeqCst, Ordering::AcqRel);
166-
| ^^^^^^^^^^^^^^^^
167-
|
168-
= help: consider using ordering modes `Acquire`, `SeqCst` or `Relaxed` instead
169-
170-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
171-
--> $DIR/atomic_ordering_exchange.rs:67:62
172-
|
173-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::Release);
174-
| ^^^^^^^^^^^^^^^^^
175-
|
176-
= help: consider using ordering mode `Relaxed` instead
177-
178-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
179-
--> $DIR/atomic_ordering_exchange.rs:68:62
180-
|
181-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::Release);
182-
| ^^^^^^^^^^^^^^^^^
183-
|
184-
= help: consider using ordering modes `Acquire` or `Relaxed` instead
185-
186-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
187-
--> $DIR/atomic_ordering_exchange.rs:69:62
188-
|
189-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::Release);
190-
| ^^^^^^^^^^^^^^^^^
191-
|
192-
= help: consider using ordering mode `Relaxed` instead
193-
194-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
195-
--> $DIR/atomic_ordering_exchange.rs:70:61
196-
|
197-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::Release);
198-
| ^^^^^^^^^^^^^^^^^
199-
|
200-
= help: consider using ordering modes `Acquire` or `Relaxed` instead
201-
202-
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
203-
--> $DIR/atomic_ordering_exchange.rs:71:61
204-
|
205-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::SeqCst, Ordering::Release);
206-
| ^^^^^^^^^^^^^^^^^
207-
|
208-
= help: consider using ordering modes `Acquire`, `SeqCst` or `Relaxed` instead
209-
210-
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Release`
211-
--> $DIR/atomic_ordering_exchange.rs:74:62
212-
|
213-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::Acquire);
214-
| ^^^^^^^^^^^^^^^^^
215-
|
216-
= help: consider using ordering mode `Relaxed` instead
217-
218-
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Release`
219-
--> $DIR/atomic_ordering_exchange.rs:75:62
220-
|
221-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Release, Ordering::SeqCst);
222-
| ^^^^^^^^^^^^^^^^
223-
|
224-
= help: consider using ordering mode `Relaxed` instead
225-
226-
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Relaxed`
227-
--> $DIR/atomic_ordering_exchange.rs:78:62
228-
|
229-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::SeqCst);
230-
| ^^^^^^^^^^^^^^^^
231-
|
232-
= help: consider using ordering mode `Relaxed` instead
233-
234-
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Relaxed`
235-
--> $DIR/atomic_ordering_exchange.rs:79:62
236-
|
237-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Relaxed, Ordering::Acquire);
238-
| ^^^^^^^^^^^^^^^^^
239-
|
240-
= help: consider using ordering mode `Relaxed` instead
241-
242-
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Acquire`
243-
--> $DIR/atomic_ordering_exchange.rs:82:62
244-
|
245-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::Acquire, Ordering::SeqCst);
246-
| ^^^^^^^^^^^^^^^^
247-
|
248-
= help: consider using ordering modes `Acquire` or `Relaxed` instead
249-
250-
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `AcqRel`
251-
--> $DIR/atomic_ordering_exchange.rs:83:61
252-
|
253-
LL | let _ = x.compare_exchange_weak(0, 0, Ordering::AcqRel, Ordering::SeqCst);
254-
| ^^^^^^^^^^^^^^^^
255-
|
256-
= help: consider using ordering modes `Acquire` or `Relaxed` instead
257-
258-
error: aborting due to 32 previous errors
130+
error: aborting due to 16 previous errors
259131

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#![warn(clippy::invalid_atomic_ordering)]
2+
3+
use std::sync::atomic::{AtomicPtr, Ordering};
4+
5+
fn main() {
6+
let ptr = &mut 5;
7+
let ptr2 = &mut 10;
8+
// `compare_exchange_weak` testing
9+
let x = AtomicPtr::new(ptr);
10+
11+
// Allowed ordering combos
12+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Relaxed);
13+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Acquire);
14+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Relaxed);
15+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Relaxed);
16+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Acquire);
17+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Relaxed);
18+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Relaxed);
19+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Acquire);
20+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::SeqCst);
21+
22+
// AcqRel is always forbidden as a failure ordering
23+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Relaxed, Ordering::AcqRel);
24+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::AcqRel);
25+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::AcqRel);
26+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::AcqRel);
27+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::SeqCst, Ordering::AcqRel);
28+
29+
// Release is always forbidden as a failure ordering
30+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Release);
31+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Release);
32+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Release);
33+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Release);
34+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Release);
35+
36+
// Release success order forbids failure order of Acquire or SeqCst
37+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::Acquire);
38+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::SeqCst);
39+
40+
// Relaxed success order also forbids failure order of Acquire or SeqCst
41+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::SeqCst);
42+
let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Acquire);
43+
44+
// Acquire/AcqRel forbids failure order of SeqCst
45+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::SeqCst);
46+
let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::SeqCst);
47+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
2+
--> $DIR/atomic_ordering_exchange_weak.rs:23:67
3+
|
4+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Relaxed, Ordering::AcqRel);
5+
| ^^^^^^^^^^^^^^^^
6+
|
7+
= note: `-D clippy::invalid-atomic-ordering` implied by `-D warnings`
8+
= help: consider using ordering mode `Relaxed` instead
9+
10+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
11+
--> $DIR/atomic_ordering_exchange_weak.rs:24:67
12+
|
13+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::AcqRel);
14+
| ^^^^^^^^^^^^^^^^
15+
|
16+
= help: consider using ordering modes `Acquire` or `Relaxed` instead
17+
18+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
19+
--> $DIR/atomic_ordering_exchange_weak.rs:25:67
20+
|
21+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::AcqRel);
22+
| ^^^^^^^^^^^^^^^^
23+
|
24+
= help: consider using ordering mode `Relaxed` instead
25+
26+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
27+
--> $DIR/atomic_ordering_exchange_weak.rs:26:66
28+
|
29+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::AcqRel);
30+
| ^^^^^^^^^^^^^^^^
31+
|
32+
= help: consider using ordering modes `Acquire` or `Relaxed` instead
33+
34+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
35+
--> $DIR/atomic_ordering_exchange_weak.rs:27:66
36+
|
37+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::SeqCst, Ordering::AcqRel);
38+
| ^^^^^^^^^^^^^^^^
39+
|
40+
= help: consider using ordering modes `Acquire`, `SeqCst` or `Relaxed` instead
41+
42+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
43+
--> $DIR/atomic_ordering_exchange_weak.rs:30:67
44+
|
45+
LL | let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Release);
46+
| ^^^^^^^^^^^^^^^^^
47+
|
48+
= help: consider using ordering mode `Relaxed` instead
49+
50+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
51+
--> $DIR/atomic_ordering_exchange_weak.rs:31:67
52+
|
53+
LL | let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Release);
54+
| ^^^^^^^^^^^^^^^^^
55+
|
56+
= help: consider using ordering modes `Acquire` or `Relaxed` instead
57+
58+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
59+
--> $DIR/atomic_ordering_exchange_weak.rs:32:67
60+
|
61+
LL | let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Release);
62+
| ^^^^^^^^^^^^^^^^^
63+
|
64+
= help: consider using ordering mode `Relaxed` instead
65+
66+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
67+
--> $DIR/atomic_ordering_exchange_weak.rs:33:66
68+
|
69+
LL | let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Release);
70+
| ^^^^^^^^^^^^^^^^^
71+
|
72+
= help: consider using ordering modes `Acquire` or `Relaxed` instead
73+
74+
error: compare_exchange_weak's failure ordering may not be `Release` or `AcqRel`
75+
--> $DIR/atomic_ordering_exchange_weak.rs:34:66
76+
|
77+
LL | let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Release);
78+
| ^^^^^^^^^^^^^^^^^
79+
|
80+
= help: consider using ordering modes `Acquire`, `SeqCst` or `Relaxed` instead
81+
82+
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Release`
83+
--> $DIR/atomic_ordering_exchange_weak.rs:37:67
84+
|
85+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::Acquire);
86+
| ^^^^^^^^^^^^^^^^^
87+
|
88+
= help: consider using ordering mode `Relaxed` instead
89+
90+
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Release`
91+
--> $DIR/atomic_ordering_exchange_weak.rs:38:67
92+
|
93+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::SeqCst);
94+
| ^^^^^^^^^^^^^^^^
95+
|
96+
= help: consider using ordering mode `Relaxed` instead
97+
98+
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Relaxed`
99+
--> $DIR/atomic_ordering_exchange_weak.rs:41:67
100+
|
101+
LL | let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::SeqCst);
102+
| ^^^^^^^^^^^^^^^^
103+
|
104+
= help: consider using ordering mode `Relaxed` instead
105+
106+
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Relaxed`
107+
--> $DIR/atomic_ordering_exchange_weak.rs:42:67
108+
|
109+
LL | let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Acquire);
110+
| ^^^^^^^^^^^^^^^^^
111+
|
112+
= help: consider using ordering mode `Relaxed` instead
113+
114+
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `Acquire`
115+
--> $DIR/atomic_ordering_exchange_weak.rs:45:67
116+
|
117+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::SeqCst);
118+
| ^^^^^^^^^^^^^^^^
119+
|
120+
= help: consider using ordering modes `Acquire` or `Relaxed` instead
121+
122+
error: compare_exchange_weak's failure ordering may not stronger than the success ordering of `AcqRel`
123+
--> $DIR/atomic_ordering_exchange_weak.rs:46:66
124+
|
125+
LL | let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::SeqCst);
126+
| ^^^^^^^^^^^^^^^^
127+
|
128+
= help: consider using ordering modes `Acquire` or `Relaxed` instead
129+
130+
error: aborting due to 16 previous errors
131+

0 commit comments

Comments
 (0)