| /* PR libgomp/59467 */ |
| |
| int v; |
| |
| void |
| foo (void) |
| { |
| int x = 0, y = 0; |
| #pragma omp parallel |
| { |
| int z; |
| #pragma omp single copyprivate (x) /* { dg-error "is not threadprivate or private in outer context" } */ |
| { |
| #pragma omp atomic write |
| x = 6; |
| } |
| #pragma omp atomic read |
| z = x; |
| #pragma omp atomic |
| y += z; |
| } |
| #pragma omp parallel |
| { |
| int z; |
| #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */ |
| { |
| #pragma omp atomic write |
| v = 6; |
| } |
| #pragma omp atomic read |
| z = v; |
| #pragma omp atomic |
| y += z; |
| } |
| #pragma omp parallel private (x) |
| { |
| int z; |
| #pragma omp single copyprivate (x) |
| { |
| #pragma omp atomic write |
| x = 6; |
| } |
| #pragma omp atomic read |
| z = x; |
| #pragma omp atomic |
| y += z; |
| } |
| x = 0; |
| #pragma omp parallel reduction (+:x) |
| { |
| #pragma omp single copyprivate (x) |
| { |
| #pragma omp atomic write |
| x = 6; |
| } |
| #pragma omp atomic |
| y += x; |
| } |
| #pragma omp single copyprivate (x) |
| { |
| x = 7; |
| } |
| #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */ |
| { |
| #pragma omp atomic write |
| v = 6; |
| } |
| } |