]> git.lizzy.rs Git - rust.git/blob - tests/ui/lint/lint-invalid-atomic-ordering-exchange-weak.rs
Auto merge of #106884 - clubby789:fieldless-enum-debug, r=michaelwoerister
[rust.git] / tests / ui / lint / lint-invalid-atomic-ordering-exchange-weak.rs
1 // only-x86_64
2 use std::sync::atomic::{AtomicPtr, Ordering};
3
4 fn main() {
5     let ptr = &mut 5;
6     let ptr2 = &mut 10;
7     // `compare_exchange_weak` testing
8     let x = AtomicPtr::new(ptr);
9
10     // Allowed ordering combos
11     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Relaxed);
12     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Acquire);
13     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::SeqCst);
14     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Relaxed);
15     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Acquire);
16     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::SeqCst);
17     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Relaxed);
18     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::Acquire);
19     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::SeqCst);
20     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Relaxed);
21     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Acquire);
22     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::SeqCst);
23     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Relaxed);
24     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Acquire);
25     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::SeqCst);
26
27     // AcqRel is always forbidden as a failure ordering
28     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Relaxed, Ordering::AcqRel);
29     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
30     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Acquire, Ordering::AcqRel);
31     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
32     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::Release, Ordering::AcqRel);
33     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
34     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::AcqRel, Ordering::AcqRel);
35     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
36     let _ = x.compare_exchange_weak(ptr2, ptr, Ordering::SeqCst, Ordering::AcqRel);
37     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
38
39     // Release is always forbidden as a failure ordering
40     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Relaxed, Ordering::Release);
41     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
42     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Acquire, Ordering::Release);
43     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
44     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::Release, Ordering::Release);
45     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
46     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::AcqRel, Ordering::Release);
47     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
48     let _ = x.compare_exchange_weak(ptr, ptr2, Ordering::SeqCst, Ordering::Release);
49     //~^ ERROR `compare_exchange_weak`'s failure ordering may not be `Release` or `AcqRel`
50 }