/* { dg-do run } */ extern void abort (void); int x = 6; float y; int main (void) { int v; float f; #pragma omp atomic read v = x; if (v != 6) abort (); #pragma omp atomic write x = 17; #pragma omp atomic read v = x; if (v != 17) abort (); #pragma omp atomic update x++; #pragma omp atomic read v = x; if (v != 18) abort (); #pragma omp atomic capture v = x++; if (v != 18) abort (); #pragma omp atomic read v = x; if (v != 19) abort (); #pragma omp atomic capture v = ++x; if (v != 20) abort (); #pragma omp atomic read v = x; if (v != 20) abort (); #pragma omp atomic capture { v = x; x *= 3; } if (v != 20) abort (); #pragma omp atomic read v = x; if (v != 60) abort (); #pragma omp atomic capture { x |= 2; v = x; } if (v != 62) abort (); #pragma omp atomic read v = x; if (v != 62) abort (); #pragma omp atomic capture { v = x; x++; } if (v != 62) abort (); #pragma omp atomic capture { v = x; ++x; } if (v != 63) abort (); #pragma omp atomic capture { ++x; v = x; } if (v != 65) abort (); #pragma omp atomic capture {x++;v=x;}if (v != 66) abort (); #pragma omp atomic read v = x; if (v != 66) abort (); #pragma omp atomic capture { v = x; x--; } if (v != 66) abort (); #pragma omp atomic capture { v = x; --x; } if (v != 65) abort (); #pragma omp atomic capture { --x; v = x; } if (v != 63) abort (); #pragma omp atomic capture { x--; v = x; } if (v != 62) abort (); #pragma omp atomic read v = x; if (v != 62) abort (); #pragma omp atomic write y = 17.5f; #pragma omp atomic read f = y; if (f != 17.5) abort (); #pragma omp atomic update y *= 2.0f; #pragma omp atomic read f = y; if (y != 35.0) abort (); #pragma omp atomic capture f = y *= 2.0f; if (f != 70.0) abort (); #pragma omp atomic capture f = y++; if (f != 70.0) abort (); #pragma omp atomic read f = y; if (f != 71.0) abort (); #pragma omp atomic capture f = --y; if (f != 70.0) abort (); #pragma omp atomic read f = y; if (f != 70.0) abort (); #pragma omp atomic capture { f = y; y /= 2.0f; } if (f != 70.0) abort (); #pragma omp atomic read f = y; if (f != 35.0) abort (); #pragma omp atomic capture { y /= 2.0f; f = y; } if (f != 17.5) abort (); #pragma omp atomic read f = y; if (f != 17.5) abort (); return 0; }