11//@ only-x86_64
2+ #![ feature( atomic_try_update) ]
3+
24use std:: sync:: atomic:: { AtomicIsize , Ordering } ;
35
46fn main ( ) {
@@ -7,43 +9,136 @@ fn main() {
79
810 // Allowed ordering combos
911 let _ = x. fetch_update ( Ordering :: Relaxed , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
12+ let _ = x. try_update ( Ordering :: Relaxed , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
13+ let _ = x. update ( Ordering :: Relaxed , Ordering :: Relaxed , |old| old + 1 ) ;
14+
1015 let _ = x. fetch_update ( Ordering :: Relaxed , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
16+ let _ = x. try_update ( Ordering :: Relaxed , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
17+ let _ = x. update ( Ordering :: Relaxed , Ordering :: Acquire , |old| old + 1 ) ;
18+
1119 let _ = x. fetch_update ( Ordering :: Relaxed , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
20+ let _ = x. try_update ( Ordering :: Relaxed , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
21+ let _ = x. update ( Ordering :: Relaxed , Ordering :: SeqCst , |old| old + 1 ) ;
22+
1223 let _ = x. fetch_update ( Ordering :: Acquire , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
24+ let _ = x. try_update ( Ordering :: Acquire , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
25+ let _ = x. update ( Ordering :: Acquire , Ordering :: Relaxed , |old| old + 1 ) ;
26+
1327 let _ = x. fetch_update ( Ordering :: Acquire , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
28+ let _ = x. try_update ( Ordering :: Acquire , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
29+ let _ = x. update ( Ordering :: Acquire , Ordering :: Acquire , |old| old + 1 ) ;
30+
1431 let _ = x. fetch_update ( Ordering :: Acquire , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
32+ let _ = x. try_update ( Ordering :: Acquire , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
33+ let _ = x. update ( Ordering :: Acquire , Ordering :: SeqCst , |old| old + 1 ) ;
34+
1535 let _ = x. fetch_update ( Ordering :: Release , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
36+ let _ = x. try_update ( Ordering :: Release , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
37+ let _ = x. update ( Ordering :: Release , Ordering :: Relaxed , |old| old + 1 ) ;
38+
1639 let _ = x. fetch_update ( Ordering :: Release , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
40+ let _ = x. try_update ( Ordering :: Release , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
41+ let _ = x. update ( Ordering :: Release , Ordering :: Acquire , |old| old + 1 ) ;
42+
1743 let _ = x. fetch_update ( Ordering :: Release , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
44+ let _ = x. try_update ( Ordering :: Release , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
45+ let _ = x. update ( Ordering :: Release , Ordering :: SeqCst , |old| old + 1 ) ;
46+
1847 let _ = x. fetch_update ( Ordering :: AcqRel , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
48+ let _ = x. try_update ( Ordering :: AcqRel , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
49+ let _ = x. update ( Ordering :: AcqRel , Ordering :: Relaxed , |old| old + 1 ) ;
50+
1951 let _ = x. fetch_update ( Ordering :: AcqRel , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
52+ let _ = x. try_update ( Ordering :: AcqRel , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
53+ let _ = x. update ( Ordering :: AcqRel , Ordering :: Acquire , |old| old + 1 ) ;
54+
2055 let _ = x. fetch_update ( Ordering :: AcqRel , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
56+ let _ = x. try_update ( Ordering :: AcqRel , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
57+ let _ = x. update ( Ordering :: AcqRel , Ordering :: SeqCst , |old| old + 1 ) ;
58+
2159 let _ = x. fetch_update ( Ordering :: SeqCst , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
60+ let _ = x. try_update ( Ordering :: SeqCst , Ordering :: Relaxed , |old| Some ( old + 1 ) ) ;
61+ let _ = x. update ( Ordering :: SeqCst , Ordering :: Relaxed , |old| old + 1 ) ;
62+
2263 let _ = x. fetch_update ( Ordering :: SeqCst , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
64+ let _ = x. try_update ( Ordering :: SeqCst , Ordering :: Acquire , |old| Some ( old + 1 ) ) ;
65+ let _ = x. update ( Ordering :: SeqCst , Ordering :: Acquire , |old| old + 1 ) ;
66+
2367 let _ = x. fetch_update ( Ordering :: SeqCst , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
68+ let _ = x. try_update ( Ordering :: SeqCst , Ordering :: SeqCst , |old| Some ( old + 1 ) ) ;
69+ let _ = x. update ( Ordering :: SeqCst , Ordering :: SeqCst , |old| old + 1 ) ;
2470
2571 // AcqRel is always forbidden as a failure ordering
72+
2673 let _ = x. fetch_update ( Ordering :: Relaxed , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
2774 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
75+ let _ = x. try_update ( Ordering :: Relaxed , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
76+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
77+ let _ = x. update ( Ordering :: Relaxed , Ordering :: AcqRel , |old| old + 1 ) ;
78+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
79+
2880 let _ = x. fetch_update ( Ordering :: Acquire , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
2981 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
82+ let _ = x. try_update ( Ordering :: Acquire , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
83+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
84+ let _ = x. update ( Ordering :: Acquire , Ordering :: AcqRel , |old| old + 1 ) ;
85+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
86+
3087 let _ = x. fetch_update ( Ordering :: Release , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
3188 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
89+ let _ = x. try_update ( Ordering :: Release , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
90+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
91+ let _ = x. update ( Ordering :: Release , Ordering :: AcqRel , |old| old + 1 ) ;
92+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
93+
3294 let _ = x. fetch_update ( Ordering :: AcqRel , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
3395 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
96+ let _ = x. try_update ( Ordering :: AcqRel , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
97+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
98+ let _ = x. update ( Ordering :: AcqRel , Ordering :: AcqRel , |old| old + 1 ) ;
99+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
100+
34101 let _ = x. fetch_update ( Ordering :: SeqCst , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
35102 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
103+ let _ = x. try_update ( Ordering :: SeqCst , Ordering :: AcqRel , |old| Some ( old + 1 ) ) ;
104+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
105+ let _ = x. update ( Ordering :: SeqCst , Ordering :: AcqRel , |old| old + 1 ) ;
106+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
36107
37108 // Release is always forbidden as a failure ordering
109+
38110 let _ = x. fetch_update ( Ordering :: Relaxed , Ordering :: Release , |old| Some ( old + 1 ) ) ;
39111 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
112+ let _ = x. try_update ( Ordering :: Relaxed , Ordering :: Release , |old| Some ( old + 1 ) ) ;
113+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
114+ let _ = x. update ( Ordering :: Relaxed , Ordering :: Release , |old| old + 1 ) ;
115+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
116+
40117 let _ = x. fetch_update ( Ordering :: Acquire , Ordering :: Release , |old| Some ( old + 1 ) ) ;
41118 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
119+ let _ = x. try_update ( Ordering :: Acquire , Ordering :: Release , |old| Some ( old + 1 ) ) ;
120+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
121+ let _ = x. update ( Ordering :: Acquire , Ordering :: Release , |old| old + 1 ) ;
122+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
123+
42124 let _ = x. fetch_update ( Ordering :: Release , Ordering :: Release , |old| Some ( old + 1 ) ) ;
43125 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
126+ let _ = x. try_update ( Ordering :: Release , Ordering :: Release , |old| Some ( old + 1 ) ) ;
127+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
128+ let _ = x. update ( Ordering :: Release , Ordering :: Release , |old| old + 1 ) ;
129+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
130+
44131 let _ = x. fetch_update ( Ordering :: AcqRel , Ordering :: Release , |old| Some ( old + 1 ) ) ;
45132 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
133+ let _ = x. try_update ( Ordering :: AcqRel , Ordering :: Release , |old| Some ( old + 1 ) ) ;
134+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
135+ let _ = x. update ( Ordering :: AcqRel , Ordering :: Release , |old| old + 1 ) ;
136+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
137+
46138 let _ = x. fetch_update ( Ordering :: SeqCst , Ordering :: Release , |old| Some ( old + 1 ) ) ;
47139 //~^ ERROR `fetch_update`'s failure ordering may not be `Release` or `AcqRel`
48-
140+ let _ = x. try_update ( Ordering :: SeqCst , Ordering :: Release , |old| Some ( old + 1 ) ) ;
141+ //~^ ERROR `try_update`'s failure ordering may not be `Release` or `AcqRel`
142+ let _ = x. update ( Ordering :: SeqCst , Ordering :: Release , |old| old + 1 ) ;
143+ //~^ ERROR `update`'s failure ordering may not be `Release` or `AcqRel`
49144}
0 commit comments