| #ifdef __cplusplus |
| extern "C" |
| #endif |
| void abort (); |
| |
| int |
| main () |
| { |
| int a[64] = {}; |
| int r = 0, r2 = 0, i; |
| #pragma omp parallel |
| { |
| #pragma omp scope nowait |
| #pragma omp scope nowait |
| #pragma omp for |
| for (i = 0; i < 64; i++) |
| a[i] += 1; |
| #pragma omp scope reduction(+: r) nowait |
| { |
| #pragma omp for nowait |
| for (i = 0; i < 64; i++) |
| { |
| r += i; |
| if (a[i] != 1) |
| abort (); |
| } |
| #pragma omp barrier |
| } |
| #pragma omp barrier |
| if (r != 64 * 63 / 2) |
| abort (); |
| #pragma omp scope nowait private (i) |
| #pragma omp scope reduction(+: r2) |
| { |
| #pragma omp for nowait |
| for (i = 0; i < 64; i++) |
| { |
| r2 += 2 * i; |
| a[i] += i; |
| } |
| } |
| if (r2 != 64 * 63) |
| abort (); |
| #pragma omp for nowait |
| for (i = 0; i < 64; i++) |
| if (a[i] != i + 1) |
| abort (); |
| } |
| return 0; |
| } |