]> git.lizzy.rs Git - rust.git/commitdiff
test that compare-exchange-weak-failure-rate=0.0 means what it says
authorRalf Jung <post@ralfj.de>
Mon, 23 May 2022 08:28:46 +0000 (10:28 +0200)
committerRalf Jung <post@ralfj.de>
Mon, 23 May 2022 08:28:46 +0000 (10:28 +0200)
tests/run-pass/atomic-compare-exchange-weak-never-fail.rs [new file with mode: 0644]

diff --git a/tests/run-pass/atomic-compare-exchange-weak-never-fail.rs b/tests/run-pass/atomic-compare-exchange-weak-never-fail.rs
new file mode 100644 (file)
index 0000000..2c2d4e6
--- /dev/null
@@ -0,0 +1,17 @@
+// 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();
+        }
+    }
+}