11#include <stdatomic.h>
22#include <stdbool.h>
33
4- static bool fl1 = ATOMIC_VAR_INIT (false);
5- static bool fl2 = ATOMIC_VAR_INIT (false);
6- static bool fl3 = ATOMIC_VAR_INIT (false);
7- static bool fl4 = ATOMIC_VAR_INIT (false);
4+ static _Atomic int fl1 = ATOMIC_VAR_INIT (false);
5+ static _Atomic int fl2 = ATOMIC_VAR_INIT (false);
6+ static int fl2a = ATOMIC_VAR_INIT (false);
7+ static int fl3 = ATOMIC_VAR_INIT (false);
8+ static int fl4 = ATOMIC_VAR_INIT (false);
89
910void f1 () {
1011 atomic_store (& fl1 , 0 ); // NON_COMPLIANT
@@ -13,17 +14,17 @@ void f1() {
1314
1415void f2 () {
1516 do {
16- } while (!atomic_compare_exchange_weak (& fl2 , & fl2 , & fl2 )); // COMPLIANT
17+ } while (!atomic_compare_exchange_weak (& fl2 , & fl2a , fl2a )); // COMPLIANT
1718
1819 do {
19- } while (!atomic_compare_exchange_weak_explicit (& fl2 , & fl2 , & fl2 , & fl2 ,
20- & fl2 )); // COMPLIANT
20+ } while (!atomic_compare_exchange_weak_explicit (& fl2 , & fl2a , fl2a , 0 ,
21+ 0 )); // COMPLIANT
2122}
2223
2324void f3 () {
24- atomic_compare_exchange_weak (& fl2 , & fl2 , & fl2 ); // NON_COMPLIANT
25- atomic_compare_exchange_weak_explicit (& fl2 , & fl2 , & fl2 , & fl2 ,
26- & fl2 ); // NON_COMPLIANT
25+ atomic_compare_exchange_weak (& fl2 , & fl2a , fl2a ); // NON_COMPLIANT
26+ atomic_compare_exchange_weak_explicit (& fl2 , & fl2a , fl2a , 0 ,
27+ 0 ); // NON_COMPLIANT
2728}
2829
2930void f4 () { fl3 ^= true; }
0 commit comments