about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2023-01-25 18:46:20 +0100
committerRalf Jung <post@ralfj.de>2023-01-25 18:48:07 +0100
commitff5132e2fc2e2bc5a6669c67c9c2d2fa208fd5f0 (patch)
tree595d8424e48d81cc0fa085507a11cb43f6d7a99a /src
parent9defdc7c13a03475dcdf2409f698355c87fd67f0 (diff)
downloadrust-ff5132e2fc2e2bc5a6669c67c9c2d2fa208fd5f0.tar.gz
rust-ff5132e2fc2e2bc5a6669c67c9c2d2fa208fd5f0.zip
add scfix test
Diffstat (limited to 'src')
-rw-r--r--src/tools/miri/tests/pass/0weak_memory_consistency.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/tools/miri/tests/pass/0weak_memory_consistency.rs b/src/tools/miri/tests/pass/0weak_memory_consistency.rs
index f3820bd660d..7861acd4ef7 100644
--- a/src/tools/miri/tests/pass/0weak_memory_consistency.rs
+++ b/src/tools/miri/tests/pass/0weak_memory_consistency.rs
@@ -286,6 +286,40 @@ fn test_iriw_sc_rlx() {
     assert!(c || d);
 }
 
+// Another test for C++20 SCfix.
+fn scfix() {
+    let x = static_atomic_bool(false);
+    let y = static_atomic_bool(false);
+
+    let thread1 = spawn(move || {
+        let a = x.load(Relaxed);
+        fence(SeqCst);
+        let b = y.load(Relaxed);
+        (a, b)
+    });
+
+    let thread2 = spawn(move || {
+        x.store(true, Relaxed);
+    });
+    let thread3 = spawn(move || {
+        x.store(true, Relaxed);
+    });
+
+    let thread4 = spawn(move || {
+        let c = y.load(Relaxed);
+        fence(SeqCst);
+        let d = x.load(Relaxed);
+        (c, d)
+    });
+
+    let (a, b) = thread1.join().unwrap();
+    thread2.join().unwrap();
+    thread3.join().unwrap();
+    let (c, d) = thread4.join().unwrap();
+    let bad = a == true && b == false && c == true && d == false;
+    assert!(!bad);
+}
+
 pub fn main() {
     for _ in 0..50 {
         test_single_thread();
@@ -297,5 +331,6 @@ pub fn main() {
         test_sc_store_buffering();
         test_sync_through_rmw_and_fences();
         test_iriw_sc_rlx();
+        scfix();
     }
 }