(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
atomic-10.c
       1  /* { dg-do run } */
       2  
       3  extern void abort (void);
       4  int x1, x2, x3, x4, x5;
       5  volatile int y6 = 9, y2, y3, y4, y5;
       6  volatile unsigned char z1, z2, z3, z4, z5;
       7  float a1, a2, a3, a4;
       8  
       9  void
      10  f1 (void)
      11  {
      12    #pragma omp atomic
      13      x1++;
      14    #pragma omp atomic
      15      x2--;
      16    #pragma omp atomic
      17      ++x3;
      18    #pragma omp atomic
      19      --x4;
      20    #pragma omp atomic
      21      x5 += 1;
      22    #pragma omp atomic
      23      x1 -= y6;
      24    #pragma omp atomic
      25      x2 |= 1;
      26    #pragma omp atomic
      27      x3 &= 1;
      28    #pragma omp atomic
      29      x4 ^= 1;
      30    #pragma omp atomic
      31      x5 *= 3;
      32    #pragma omp atomic
      33      x1 /= 3;
      34    #pragma omp atomic
      35      x2 /= 3;
      36    #pragma omp atomic
      37      x3 <<= 3;
      38    #pragma omp atomic
      39      x4 >>= 3;
      40  }
      41  
      42  void
      43  f2 (void)
      44  {
      45    #pragma omp atomic
      46      y6++;
      47    #pragma omp atomic
      48      y2--;
      49    #pragma omp atomic
      50      ++y3;
      51    #pragma omp atomic
      52      --y4;
      53    #pragma omp atomic
      54      y5 += 1;
      55    #pragma omp atomic
      56      y6 -= x1;
      57    #pragma omp atomic
      58      y2 |= 1;
      59    #pragma omp atomic
      60      y3 &= 1;
      61    #pragma omp atomic
      62      y4 ^= 1;
      63    #pragma omp atomic
      64      y5 *= 3;
      65    #pragma omp atomic
      66      y6 /= 3;
      67    #pragma omp atomic
      68      y2 /= 3;
      69    #pragma omp atomic
      70      y3 <<= 3;
      71    #pragma omp atomic
      72      y4 >>= 3;
      73  }
      74  
      75  void
      76  f3 (void)
      77  {
      78    #pragma omp atomic
      79      z1++;
      80    #pragma omp atomic
      81      z2--;
      82    #pragma omp atomic
      83      ++z3;
      84    #pragma omp atomic
      85      --z4;
      86    #pragma omp atomic
      87      z5 += 1;
      88    #pragma omp atomic
      89      z1 |= 1;
      90    #pragma omp atomic
      91      z2 &= 1;
      92    #pragma omp atomic
      93      z3 ^= 1;
      94    #pragma omp atomic
      95      z4 *= 3;
      96    #pragma omp atomic
      97      z5 /= 3;
      98    #pragma omp atomic
      99      z1 /= 3;
     100    #pragma omp atomic
     101      z2 <<= 3;
     102    #pragma omp atomic
     103      z3 >>= 3;
     104  }
     105  
     106  void
     107  f4 (void)
     108  {
     109    #pragma omp atomic
     110      a1 += 8.0;
     111    #pragma omp atomic
     112      a2 *= 3.5;
     113    #pragma omp atomic
     114      a3 -= a1 + a2;
     115    #pragma omp atomic
     116      a4 /= 2.0;
     117  }
     118  
     119  int
     120  main (void)
     121  {
     122    f1 ();
     123    if (x1 != -2 || x2 != 0 || x3 != 8 || x4 != -1 || x5 != 3)
     124      abort ();
     125    f2 ();
     126    if (y6 != 4 || y2 != 0 || y3 != 8 || y4 != -1 || y5 != 3)
     127      abort ();
     128    f3 ();
     129    if (z1 != 0 || z2 != 8 || z3 != 0 || z4 != 253 || z5 != 0)
     130      abort ();
     131    a1 = 7;
     132    a2 = 10;
     133    a3 = 11;
     134    a4 = 13;
     135    f4 ();
     136    if (a1 != 15.0 || a2 != 35.0 || a3 != -39.0 || a4 != 6.5)
     137      abort ();
     138    return 0;
     139  }