1 // PR target/86314
2 // { dg-do run { target sync_int_long } }
3 // { dg-options "-O2" }
4 
5 __attribute__((noinline, noclone)) unsigned long
foo(unsigned long * p)6 foo (unsigned long *p)
7 {
8   unsigned long m = 1UL << ((*p & 1) ? 1 : 0);
9   unsigned long n = __atomic_fetch_or (p, m, __ATOMIC_SEQ_CST);
10   return (n & m) == 0;
11 }
12 
13 int
main()14 main ()
15 {
16   unsigned long v = 1;
17   if (foo (&v) != 1)
18     __builtin_abort ();
19   return 0;
20 }
21