--- /dev/null
+// compile-flags: -Zmiri-compare-exchange-weak-failure-rate=0.0
+use std::sync::atomic::{AtomicBool, Ordering::*};
+
+// Ensure that compare_exchange_weak never fails.
+fn main() {
+ let atomic = AtomicBool::new(false);
+ let tries = 100;
+ for _ in 0..tries {
+ let cur = atomic.load(Relaxed);
+ // Try (weakly) to flip the flag.
+ if atomic.compare_exchange_weak(cur, !cur, Relaxed, Relaxed).is_err() {
+ // We failed. Avoid panic machinery as that uses atomics/locks.
+ eprintln!("compare_exchange_weak failed");
+ std::process::abort();
+ }
+ }
+}