#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; }