| /* PR middle-end/80809 */ |
| /* { dg-do run } */ |
| |
| __attribute__((noinline, noclone)) void |
| foo (int x) |
| { |
| int i, v[x], w[16]; |
| for (i = 0; i < x; i++) |
| v[i] = i; |
| for (i = 0; i < 16; i++) |
| w[i] = 0; |
| #pragma omp parallel |
| #pragma omp single |
| { |
| int z[x]; |
| for (i = 0; i < x; i++) |
| z[0] = 0; |
| for (i = 0; i < 16; i++) |
| #pragma omp task firstprivate (z) firstprivate (v) |
| { |
| int j; |
| for (j = 0; j < x; j++) |
| z[j] = i; |
| for (j = 0; j < x; j++) |
| v[j] += z[j]; |
| for (j = 0; j < x; j++) |
| w[i] += v[j]; |
| } |
| } |
| for (i = 0; i < 16; i++) |
| if (w[i] != (x - 1) * x / 2 + x * i) |
| __builtin_abort (); |
| } |
| |
| int |
| main () |
| { |
| foo (4); |
| foo (27); |
| foo (196); |
| return 0; |
| } |