| /* PR middle-end/39154 */ |
| /* { dg-do compile } */ |
| /* { dg-additional-options "-std=gnu99" } */ |
| |
| extern void abort (void); |
| |
| int n = 20; |
| |
| int |
| main (void) |
| { |
| int a[n], b[n][n]; |
| |
| #pragma omp parallel for |
| for (int i = 0; i < n; i++) |
| { |
| a[i] = i + 1; |
| #pragma omp parallel for |
| for (int j = 0; j < n; j++) |
| b[i][j] = a[i]; |
| } |
| |
| for (int i = 0; i < n; i++) |
| { |
| for (int j = 0; j < n; j++) |
| if (b[i][j] != i + 1) |
| abort (); |
| if (a[i] != i + 1) |
| abort (); |
| } |
| |
| #pragma omp parallel for shared (n, a, b) |
| for (int i = 0; i < n; i++) |
| { |
| a[i] = i + 3; |
| #pragma omp parallel for |
| for (int j = 0; j < n; j++) |
| b[i][j] = a[i]; |
| } |
| |
| for (int i = 0; i < n; i++) |
| { |
| for (int j = 0; j < n; j++) |
| if (b[i][j] != i + 3) |
| abort (); |
| if (a[i] != i + 3) |
| abort (); |
| } |
| |
| #pragma omp parallel for |
| for (int i = 0; i < n; i++) |
| { |
| a[i] = i + 5; |
| #pragma omp parallel for shared (n, a, b) |
| for (int j = 0; j < n; j++) |
| b[i][j] = a[i]; |
| } |
| |
| for (int i = 0; i < n; i++) |
| { |
| for (int j = 0; j < n; j++) |
| if (b[i][j] != i + 5) |
| abort (); |
| if (a[i] != i + 5) |
| abort (); |
| } |
| |
| #pragma omp parallel for shared (n, a, b) |
| for (int i = 0; i < n; i++) |
| { |
| a[i] = i + 7; |
| #pragma omp parallel for shared (n, a, b) |
| for (int j = 0; j < n; j++) |
| b[i][j] = a[i]; |
| } |
| |
| for (int i = 0; i < n; i++) |
| { |
| for (int j = 0; j < n; j++) |
| if (b[i][j] != i + 7) |
| abort (); |
| if (a[i] != i + 7) |
| abort (); |
| } |
| |
| #pragma omp parallel for private (a, b) |
| for (int i = 0; i < n; i++) |
| { |
| a[i] = i + 1; |
| #pragma omp parallel for |
| for (int j = 0; j < n; j++) |
| b[i][j] = a[i]; |
| } |
| |
| #pragma omp parallel for private (a, b) |
| for (int i = 0; i < n; i++) |
| { |
| a[i] = i + 1; |
| #pragma omp parallel for private (b) |
| for (int j = 0; j < n; j++) |
| b[i][j] = a[i]; |
| } |
| |
| return 0; |
| } |