]> git.lizzy.rs Git - rust.git/blob - tests/ui/lint/lint-invalid-atomic-ordering-ptr.rs
Rollup merge of #106321 - compiler-errors:delayed-bug-backtrace, r=Nilstrieb
[rust.git] / tests / ui / lint / lint-invalid-atomic-ordering-ptr.rs
1 // only-x86_64
2 use std::sync::atomic::{AtomicPtr, Ordering};
3
4 fn main() {
5     let ptr = &mut 5;
6     let other_ptr = &mut 10;
7     let x = AtomicPtr::new(ptr);
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     // Disallowed load ordering modes
15     let _ = x.load(Ordering::Release);
16     //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
17     let _ = x.load(Ordering::AcqRel);
18     //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
19
20     // Allowed store ordering modes
21     x.store(other_ptr, Ordering::Release);
22     x.store(other_ptr, Ordering::SeqCst);
23     x.store(other_ptr, Ordering::Relaxed);
24
25     // Disallowed store ordering modes
26     x.store(other_ptr, Ordering::Acquire);
27     //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
28     x.store(other_ptr, Ordering::AcqRel);
29     //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
30 }