1 // { dg-do run } 2 3 extern "C" void abort (void); 4 int x = 6; 5 float y; 6 7 int main(void)8main (void) 9 { 10 int v; 11 float f; 12 #pragma omp atomic read 13 v = x; 14 if (v != 6) 15 abort (); 16 #pragma omp atomic write 17 x = 17; 18 #pragma omp atomic read 19 v = x; 20 if (v != 17) 21 abort (); 22 #pragma omp atomic update 23 x++; 24 #pragma omp atomic read 25 v = x; 26 if (v != 18) 27 abort (); 28 #pragma omp atomic capture 29 v = x++; 30 if (v != 18) 31 abort (); 32 #pragma omp atomic read 33 v = x; 34 if (v != 19) 35 abort (); 36 #pragma omp atomic capture 37 v = ++x; 38 if (v != 20) 39 abort (); 40 #pragma omp atomic read 41 v = x; 42 if (v != 20) 43 abort (); 44 #pragma omp atomic capture 45 { v = x; x *= 3; } 46 if (v != 20) 47 abort (); 48 #pragma omp atomic read 49 v = x; 50 if (v != 60) 51 abort (); 52 #pragma omp atomic capture 53 { 54 x |= 2; 55 v = x; 56 } 57 if (v != 62) 58 abort (); 59 #pragma omp atomic read 60 v = x; 61 if (v != 62) 62 abort (); 63 #pragma omp atomic capture 64 { v = x; x++; } 65 if (v != 62) 66 abort (); 67 #pragma omp atomic capture 68 { v = x; ++x; } 69 if (v != 63) 70 abort (); 71 #pragma omp atomic capture 72 { 73 ++x; 74 v = x; 75 } 76 if (v != 65) 77 abort (); 78 #pragma omp atomic capture 79 {x++;v=x;}if (v != 66) 80 abort (); 81 #pragma omp atomic read 82 v = x; 83 if (v != 66) 84 abort (); 85 #pragma omp atomic capture 86 { v = x; x--; } 87 if (v != 66) 88 abort (); 89 #pragma omp atomic capture 90 { v = x; --x; } 91 if (v != 65) 92 abort (); 93 #pragma omp atomic capture 94 { 95 --x; 96 v = x; 97 } 98 if (v != 63) 99 abort (); 100 #pragma omp atomic capture 101 { x--; v = x; } if (v != 62) 102 abort (); 103 #pragma omp atomic read 104 v = x; 105 if (v != 62) 106 abort (); 107 #pragma omp atomic write 108 y = 17.5f; 109 #pragma omp atomic read 110 f = y; 111 if (f != 17.5) 112 abort (); 113 #pragma omp atomic update 114 y *= 2.0f; 115 #pragma omp atomic read 116 f = y; 117 if (y != 35.0) 118 abort (); 119 #pragma omp atomic capture 120 f = y *= 2.0f; 121 if (f != 70.0) 122 abort (); 123 #pragma omp atomic capture 124 f = y++; 125 if (f != 70.0) 126 abort (); 127 #pragma omp atomic read 128 f = y; 129 if (f != 71.0) 130 abort (); 131 #pragma omp atomic capture 132 f = --y; 133 if (f != 70.0) 134 abort (); 135 #pragma omp atomic read 136 f = y; 137 if (f != 70.0) 138 abort (); 139 #pragma omp atomic capture 140 { f = y; y /= 2.0f; } 141 if (f != 70.0) 142 abort (); 143 #pragma omp atomic read 144 f = y; 145 if (f != 35.0) 146 abort (); 147 #pragma omp atomic capture 148 { y /= 2.0f; f = y; } 149 if (f != 17.5) 150 abort (); 151 #pragma omp atomic read 152 f = y; 153 if (f != 17.5) 154 abort (); 155 return 0; 156 } 157