| // { dg-do run } |
| |
| extern "C" void abort (void); |
| |
| template <typename T> |
| void |
| foo () |
| { |
| extern T x; |
| T v, l = 2, s = 1; |
| #pragma omp atomic seq_cst |
| x = -3 + x; |
| #pragma omp atomic read seq_cst |
| v = x; |
| if (v != 3) |
| abort (); |
| #pragma omp atomic seq_cst update |
| x = 3 * 2 * 1 + x; |
| #pragma omp atomic read, seq_cst |
| v = x; |
| if (v != 9) |
| abort (); |
| #pragma omp atomic seq_cst, capture |
| v = x = x | 16; |
| if (v != 25) |
| abort (); |
| #pragma omp atomic capture seq_cst |
| v = x = x + 14 * 2 / 4; |
| if (v != 32) |
| abort (); |
| #pragma omp atomic seq_cst capture |
| v = x = 5 | x; |
| if (v != 37) |
| abort (); |
| #pragma omp atomic capture, seq_cst |
| v = x = 40 + 12 - 2 - 7 - x; |
| if (v != 6) |
| abort (); |
| #pragma omp atomic seq_cst read |
| v = x; |
| if (v != 6) |
| abort (); |
| #pragma omp atomic capture seq_cst |
| { v = x; x = 3 + x; } |
| if (v != 6) |
| abort (); |
| #pragma omp atomic seq_cst capture |
| { v = x; x = -1 * -1 * -1 * -1 - x; } |
| if (v != 9) |
| abort (); |
| #pragma omp atomic read seq_cst |
| v = x; |
| if (v != -8) |
| abort (); |
| #pragma omp atomic capture, seq_cst |
| { x = 2 * 2 - x; v = x; } |
| if (v != 12) |
| abort (); |
| #pragma omp atomic seq_cst capture |
| { x = 7 & x; v = x; } |
| if (v != 4) |
| abort (); |
| #pragma omp atomic capture seq_cst |
| { v = x; x = 6; } |
| if (v != 4) |
| abort (); |
| #pragma omp atomic read, seq_cst |
| v = x; |
| if (v != 6) |
| abort (); |
| #pragma omp atomic capture seq_cst |
| { v = x; x = 7 * 8 + 23; } |
| if (v != 6) |
| abort (); |
| #pragma omp atomic seq_cst, read |
| v = x; |
| if (v != 79) |
| abort (); |
| #pragma omp atomic capture , seq_cst |
| { v = x; x = 23 + 6 * 4; } |
| if (v != 79) |
| abort (); |
| #pragma omp atomic read seq_cst |
| v = x; |
| if (v != 47) |
| abort (); |
| #pragma omp atomic seq_cst capture |
| { v = x; x = l ? 17 : 12; } |
| if (v != 47) |
| abort (); |
| #pragma omp atomic capture seq_cst |
| { v = x; x = l = s++ + 3; } |
| if (v != 17 || l != 4 || s != 2) |
| abort (); |
| #pragma omp atomic read seq_cst |
| v = x; |
| if (v != 4) |
| abort (); |
| } |
| |
| int x = 6; |
| |
| int |
| main () |
| { |
| foo <int> (); |
| return 0; |
| } |