/* PR middle-end/88968 */ /* { dg-do compile } */ struct __attribute__((packed)) S { unsigned int a : 16; unsigned int b : 1; } s; void foo (int y, int z) { #pragma omp atomic compare s.a = s.a == y ? z : s.a; } int bar (int y, int z) { int r; #pragma omp atomic compare capture { r = s.a == y; if (r) { s.a = z; } } return r; } int baz (int y, int z) { int v; #pragma omp atomic compare capture if (s.a == y) { s.a = z; } else { v = s.a; } return v; } int qux (int y, int z) { int v; #pragma omp atomic compare capture v = s.a = s.a == y ? z : s.a; return v; }