(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
pr69389.c
       1  /* PR c/69389 */
       2  
       3  struct S { unsigned int a : 10; unsigned int b : 4; unsigned int c : 18; } s = { 210, 11, 1235 };
       4  
       5  unsigned int
       6  f1 (void)
       7  {
       8    unsigned int v;
       9    #pragma omp atomic read
      10    v = s.b;
      11    return v;
      12  }
      13  
      14  void
      15  f2 (unsigned int v)
      16  {
      17    #pragma omp atomic write
      18    s.b = v;
      19  }
      20  
      21  void
      22  f3 (void)
      23  {
      24    #pragma omp atomic
      25    s.b |= 1;
      26  }
      27  
      28  int
      29  f4 (void)
      30  {
      31    int v;
      32    #pragma omp atomic capture
      33    v = s.b += 8;
      34    return v;
      35  }
      36  
      37  int
      38  f5 (void)
      39  {
      40    int v;
      41    #pragma omp atomic capture
      42    {
      43      v = s.b;
      44      s.b -= 4;
      45    }
      46    return v;
      47  }
      48  
      49  void
      50  f6 (void)
      51  {
      52    #pragma omp atomic
      53    s.b = s.b & 7;
      54  }
      55  
      56  void
      57  f7 (void)
      58  {
      59    #pragma omp atomic
      60    s.b = ~7 & s.b;
      61  }
      62  
      63  int
      64  f8 (void)
      65  {
      66    int v;
      67    #pragma omp atomic capture
      68    v = s.b = 8 + s.b;
      69    return v;
      70  }
      71  
      72  int
      73  f9 (void)
      74  {
      75    int v;
      76    #pragma omp atomic capture
      77    {
      78      v = s.b;
      79      s.b = s.b - 4;
      80    }
      81    return v;
      82  }
      83  
      84  int
      85  main ()
      86  {
      87    if (f1 () != 11)
      88      __builtin_abort ();
      89    f2 (4);
      90    if (s.a != 210 || s.b != 4 || s.c != 1235)
      91      __builtin_abort ();
      92    s.a = 813;
      93    s.c = 31532;
      94    if (f1 () != 4)
      95      __builtin_abort ();
      96    f3 ();
      97    if (f1 () != 5)
      98      __builtin_abort ();
      99    if (s.a != 813 || s.b != 5 || s.c != 31532)
     100      __builtin_abort ();
     101    if (f4 () != 13)
     102      __builtin_abort ();
     103    if (f1 () != 13)
     104      __builtin_abort ();
     105    f2 (14);
     106    if (s.a != 813 || s.b != 14 || s.c != 31532)
     107      __builtin_abort ();
     108    if (f5 () != 14)
     109      __builtin_abort ();
     110    if (f1 () != 10 || s.a != 813 || s.b != 10 || s.c != 31532)
     111      __builtin_abort ();
     112    f6 ();
     113    if (f1 () != 2)
     114      __builtin_abort ();
     115    f2 (15);
     116    f7 ();
     117    if (f1 () != 8)
     118      __builtin_abort ();
     119    if (f8 () != 0 || s.a != 813 || s.b != 0 || s.c != 31532)
     120      __builtin_abort ();
     121    if (f9 () != 0 || s.a != 813 || s.b != 12 || s.c != 31532)
     122      __builtin_abort ();
     123    return 0;
     124  }