/* { dg-do run } */ extern void abort (void); long long l, m; int i, j; void foo (void) { #pragma omp atomic read i = l; #pragma omp atomic read m = j; if (i != 77 || m != 88) abort (); #pragma omp atomic write l = 1 + i + 6 * 1; #pragma omp atomic write j = 170 - 170 + m + 1 * 7; #pragma omp atomic capture i = l += 4; #pragma omp atomic capture m = j += 4; if (i != 88 || m != 99) abort (); #pragma omp atomic capture { i = l; l += 4; } #pragma omp atomic capture { m = j; j += 4; } if (i != 88 || m != 99) abort (); #pragma omp atomic capture { l += 4; i = l; } #pragma omp atomic capture { j += 4; m = j; } if (i != 96 || m != 107) abort (); } int main () { l = 77; j = 88; foo (); return 0; }