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