/* PR c/79940 */ int main () { int i, j, l, m; int a[10000], b[10000], c[10000]; for (i = 0; i < 10000; i++) { a[i] = i; b[i] = i & 31; } #pragma omp parallel shared(a, b, c) #pragma omp single #pragma omp taskloop shared(a, b, c) for (i = 0; i < 10000; i++) c[i] = a[i] + b[i]; #pragma omp parallel #pragma omp single { #pragma omp taskloop shared(a, b, c) lastprivate (i) for (i = 0; i < 10000; i++) c[i] += a[i] + b[i]; l = i; } #pragma omp parallel #pragma omp single #pragma omp taskloop shared(a, b, c) collapse(2) for (i = 0; i < 100; i++) for (j = 0; j < 100; j++) c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j]; #pragma omp parallel #pragma omp single { #pragma omp taskloop shared(a, b, c) lastprivate (i, j) for (i = 0; i < 100; i++) for (j = 0; j < 100; j++) c[i * 100 + j] += a[i * 100 + j] + b[i * 100 + j]; m = i * 100 + j; } for (i = 0; i < 10000; i++) if (a[i] != i || b[i] != (i & 31) || c[i] != 4 * i + 4 * (i & 31)) __builtin_abort (); if (l != 10000 || m != 10100) __builtin_abort (); return 0; }