(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
gomp/
atomic-27.c
       1  /* PR middle-end/88968 */
       2  /* { dg-do compile } */
       3  
       4  struct __attribute__((packed)) S {
       5    unsigned int a : 16;
       6    unsigned int b : 1;
       7  } s;
       8  
       9  void
      10  foo (int y, int z)
      11  {
      12    #pragma omp atomic compare
      13    s.a = s.a == y ? z : s.a;
      14  }
      15  
      16  int
      17  bar (int y, int z)
      18  {
      19    int r;
      20    #pragma omp atomic compare capture
      21    { r = s.a == y; if (r) { s.a = z; } }
      22    return r;
      23  }
      24  
      25  int
      26  baz (int y, int z)
      27  {
      28    int v;
      29    #pragma omp atomic compare capture
      30    if (s.a == y) { s.a = z; } else { v = s.a; }
      31    return v;
      32  }
      33  
      34  int
      35  qux (int y, int z)
      36  {
      37    int v;
      38    #pragma omp atomic compare capture
      39    v = s.a = s.a == y ? z : s.a;
      40    return v;
      41  }