]> git.lizzy.rs Git - rust.git/blob - src/tools/miri/tests/pass/atomic-compare-exchange-weak-never-fail.rs
Rollup merge of #103456 - scottmcm:fix-unchecked-shifts, r=scottmcm
[rust.git] / src / tools / miri / tests / pass / atomic-compare-exchange-weak-never-fail.rs
1 //@compile-flags: -Zmiri-compare-exchange-weak-failure-rate=0.0
2 use std::sync::atomic::{AtomicBool, Ordering::*};
3
4 // Ensure that compare_exchange_weak never fails.
5 fn main() {
6     let atomic = AtomicBool::new(false);
7     let tries = 100;
8     for _ in 0..tries {
9         let cur = atomic.load(Relaxed);
10         // Try (weakly) to flip the flag.
11         if atomic.compare_exchange_weak(cur, !cur, Relaxed, Relaxed).is_err() {
12             // We failed. Avoid panic machinery as that uses atomics/locks.
13             eprintln!("compare_exchange_weak failed");
14             std::process::abort();
15         }
16     }
17 }