| /* { dg-do run } */ |
| |
| enum memmodel { |
| MEMMODEL_RELAXED = 0 |
| }; |
| |
| int |
| main (void) |
| { |
| int a, b; |
| |
| a = 1; |
| __atomic_fetch_add (&a, 1, MEMMODEL_RELAXED); |
| if (a != 2) |
| __builtin_abort (); |
| |
| a = 0; |
| __atomic_fetch_or (&a, 1, MEMMODEL_RELAXED); |
| if (a != 1) |
| __builtin_abort (); |
| |
| a = 1; |
| b = -1; |
| b = __atomic_exchange_n (&a, 0, MEMMODEL_RELAXED); |
| if (a != 0) |
| __builtin_abort (); |
| if (b != 1) |
| __builtin_abort (); |
| |
| a = 1; |
| b = -1; |
| { |
| int expected = a; |
| b = __atomic_compare_exchange_n (&a, &expected, 0, 0, MEMMODEL_RELAXED, |
| MEMMODEL_RELAXED); |
| } |
| if (a != 0) |
| __builtin_abort (); |
| if (b != 1) |
| __builtin_abort (); |
| |
| a = 1; |
| __atomic_store_n (&a, 0, MEMMODEL_RELAXED); |
| if (a != 0) |
| __builtin_abort (); |
| |
| return 0; |
| } |