1
1
//@ignore-target-windows: Concurrency on Windows is not supported yet.
2
- //@compile-flags: -Zmiri-disable-weak-memory-emulation
2
+ //@compile-flags: -Zmiri-disable-weak-memory-emulation -Zmiri-preemption-rate=0
3
3
4
4
use std:: sync:: atomic:: { fence, AtomicUsize , Ordering } ;
5
5
use std:: thread:: spawn;
@@ -10,9 +10,9 @@ struct EvilSend<T>(pub T);
10
10
unsafe impl < T > Send for EvilSend < T > { }
11
11
unsafe impl < T > Sync for EvilSend < T > { }
12
12
13
- static SYNC : AtomicUsize = AtomicUsize :: new ( 0 ) ;
14
-
15
13
fn test_fence_sync ( ) {
14
+ static SYNC : AtomicUsize = AtomicUsize :: new ( 0 ) ;
15
+
16
16
let mut var = 0u32 ;
17
17
let ptr = & mut var as * mut u32 ;
18
18
let evil_ptr = EvilSend ( ptr) ;
@@ -28,7 +28,7 @@ fn test_fence_sync() {
28
28
fence ( Ordering :: Acquire ) ;
29
29
unsafe { * evil_ptr. 0 }
30
30
} else {
31
- 0
31
+ panic ! ( ) ; // relies on thread 2 going last
32
32
}
33
33
} ) ;
34
34
@@ -56,6 +56,8 @@ fn test_multiple_reads() {
56
56
}
57
57
58
58
pub fn test_rmw_no_block ( ) {
59
+ static SYNC : AtomicUsize = AtomicUsize :: new ( 0 ) ;
60
+
59
61
let mut a = 0u32 ;
60
62
let b = & mut a as * mut u32 ;
61
63
let c = EvilSend ( b) ;
@@ -77,11 +79,13 @@ pub fn test_rmw_no_block() {
77
79
j1. join ( ) . unwrap ( ) ;
78
80
j2. join ( ) . unwrap ( ) ;
79
81
let v = j3. join ( ) . unwrap ( ) ;
80
- assert ! ( v == 1 || v == 2 ) ;
82
+ assert ! ( v == 1 || v == 2 ) ; // relies on thread 3 going last
81
83
}
82
84
}
83
85
84
86
pub fn test_simple_release ( ) {
87
+ static SYNC : AtomicUsize = AtomicUsize :: new ( 0 ) ;
88
+
85
89
let mut a = 0u32 ;
86
90
let b = & mut a as * mut u32 ;
87
91
let c = EvilSend ( b) ;
@@ -95,7 +99,7 @@ pub fn test_simple_release() {
95
99
let j2 = spawn ( move || if SYNC . load ( Ordering :: Acquire ) == 1 { * c. 0 } else { 0 } ) ;
96
100
97
101
j1. join ( ) . unwrap ( ) ;
98
- assert_eq ! ( j2. join( ) . unwrap( ) , 1 ) ;
102
+ assert_eq ! ( j2. join( ) . unwrap( ) , 1 ) ; // relies on thread 2 going last
99
103
}
100
104
}
101
105
0 commit comments