/* { 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; }