File tree 1 file changed +30
-0
lines changed
src/tools/miri/tests/pass
1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -400,6 +400,35 @@ fn test_sc_fence_release() {
400
400
assert ! ( !bad) ;
401
401
}
402
402
403
+ /// Test that SC fences and accesses sync correctly with each other.
404
+ fn test_sc_fence_access ( ) {
405
+ /*
406
+ Wx1 sc
407
+ Ry0 sc
408
+ ||
409
+ Wy1 rlx
410
+ SC-fence
411
+ Rx0 rlx
412
+ */
413
+ let x = static_atomic ( 0 ) ;
414
+ let y = static_atomic ( 0 ) ;
415
+
416
+ let j1 = spawn ( move || {
417
+ x. store ( 1 , SeqCst ) ;
418
+ y. load ( SeqCst )
419
+ } ) ;
420
+ let j2 = spawn ( move || {
421
+ y. store ( 1 , Relaxed ) ;
422
+ fence ( SeqCst ) ;
423
+ x. load ( Relaxed )
424
+ } ) ;
425
+
426
+ let v1 = j1. join ( ) . unwrap ( ) ;
427
+ let v2 = j2. join ( ) . unwrap ( ) ;
428
+ let bad = v1 == 0 && v2 == 0 ;
429
+ assert ! ( !bad) ;
430
+ }
431
+
403
432
pub fn main ( ) {
404
433
for _ in 0 ..50 {
405
434
test_single_thread ( ) ;
@@ -414,5 +443,6 @@ pub fn main() {
414
443
test_cpp20_sc_fence_fix ( ) ;
415
444
test_cpp20_rwc_syncs ( ) ;
416
445
test_sc_fence_release ( ) ;
446
+ test_sc_fence_access ( ) ;
417
447
}
418
448
}
You can’t perform that action at this time.
0 commit comments