| int a, b; |
| |
| void |
| f1 (void) |
| { |
| #pragma omp scan inclusive (a) /* { dg-error "'#pragma omp scan' may only be used in a loop construct with 'inscan' 'reduction' clause" } */ |
| #pragma omp scan exclusive (b) /* { dg-error "'#pragma omp scan' may only be used in a loop construct with 'inscan' 'reduction' clause" } */ |
| } |
| |
| void |
| f2 (int *c, int *d, int *e, int *f) |
| { |
| int i, l = 1; |
| #pragma omp for reduction (inscan, +: a) reduction (+: b) /* { dg-error "'inscan' and non-'inscan' 'reduction' clauses on the same construct" } */ |
| for (i = 0; i < 64; i++) |
| { |
| { b++; a += c[i]; } |
| #pragma omp scan inclusive (a) /* { dg-error "" } */ |
| d[i] = a; |
| } |
| #pragma omp for reduction (+: a) reduction (inscan, +: b) /* { dg-error "'inscan' and non-'inscan' 'reduction' clauses on the same construct" } */ |
| for (i = 0; i < 64; i++) |
| { |
| { a++; b += c[i]; } |
| #pragma omp scan inclusive (b) /* { dg-error "" } */ |
| d[i] = b; |
| } |
| #pragma omp for reduction (inscan, +: e[:2]) /* { dg-error "'inscan' 'reduction' clause with array section" } */ |
| for (i = 0; i < 64; ++i) |
| { |
| { e[0] += c[i]; e[1] += c[i]; } |
| #pragma omp scan inclusive (a, e[:2]) /* { dg-error "" } */ |
| { d[i] = e[0]; f[i] = e[1]; } |
| } |
| #pragma omp for reduction (inscan, +: a) ordered /* { dg-error "'ordered' clause specified together with 'inscan' 'reduction' clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| a += c[i]; |
| #pragma omp scan inclusive (a) /* { dg-error "" } */ |
| d[i] = a; |
| } |
| #pragma omp for reduction (inscan, +: a) ordered(1) /* { dg-error "'ordered' clause specified together with 'inscan' 'reduction' clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| a += c[i]; |
| #pragma omp scan inclusive (a) /* { dg-error "" } */ |
| d[i] = a; |
| } |
| #pragma omp for reduction (inscan, +: a) schedule(static) /* { dg-error "'schedule' clause specified together with 'inscan' 'reduction' clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| a += c[i]; |
| #pragma omp scan inclusive (a) /* { dg-error "" } */ |
| d[i] = a; |
| } |
| #pragma omp for reduction (inscan, +: a) schedule(static, 2) /* { dg-error "'schedule' clause specified together with 'inscan' 'reduction' clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| a += c[i]; |
| #pragma omp scan inclusive (a) /* { dg-error "" } */ |
| d[i] = a; |
| } |
| #pragma omp for reduction (inscan, +: a) schedule(nonmonotonic: dynamic, 2) /* { dg-error "'schedule' clause specified together with 'inscan' 'reduction' clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| a += c[i]; |
| #pragma omp scan inclusive (a) /* { dg-error "" } */ |
| d[i] = a; |
| } |
| #pragma omp for reduction (inscan, +: a) linear (l) /* { dg-error "'inscan' 'reduction' clause used together with 'linear' clause for a variable other than loop iterator" } */ |
| for (i = 0; i < 64; i++) |
| { |
| { a += c[i]; ++l; } |
| #pragma omp scan inclusive (a) |
| d[i] = a; |
| } |
| } |
| |
| void |
| f3 (int *c, int *d) |
| { |
| int i; |
| #pragma omp teams reduction (inscan, +: a) /* { dg-error "'inscan' 'reduction' clause on 'teams' construct" } */ |
| ; |
| #pragma omp parallel reduction (inscan, +: a) /* { dg-error "'inscan' 'reduction' clause on 'parallel' construct" } */ |
| ; |
| #pragma omp sections reduction (inscan, +: a) /* { dg-error "'inscan' 'reduction' clause on 'sections' construct" } */ |
| { |
| #pragma omp section |
| ; |
| } |
| #pragma omp scope reduction (inscan, +: a) /* { dg-error "'inscan' 'reduction' clause on 'scope' construct" } */ |
| ; |
| #pragma omp target parallel for reduction (inscan, +: a) map (c[:64], d[:64]) /* { dg-error "'inscan' 'reduction' clause on construct other than 'for', 'simd', 'for simd', 'parallel for', 'parallel for simd'" } */ |
| for (i = 0; i < 64; i++) |
| { |
| d[i] = a; |
| #pragma omp scan exclusive (a) /* { dg-error "" } */ |
| a += c[i]; |
| } |
| #pragma omp teams |
| { |
| #pragma omp distribute parallel for reduction (inscan, +: a) /* { dg-error "'inscan' 'reduction' clause on construct other than 'for', 'simd', 'for simd', 'parallel for', 'parallel for simd'" } */ |
| for (i = 0; i < 64; i++) |
| { |
| d[i] = a; |
| #pragma omp scan exclusive (a) /* { dg-error "" } */ |
| a += c[i]; |
| } |
| #pragma omp distribute parallel for simd reduction (inscan, +: a) /* { dg-error "'inscan' 'reduction' clause on construct other than 'for', 'simd', 'for simd', 'parallel for', 'parallel for simd'" } */ |
| for (i = 0; i < 64; i++) |
| { |
| d[i] = a; |
| #pragma omp scan exclusive (a) /* { dg-error "" } */ |
| a += c[i]; |
| } |
| } |
| } |
| |
| void |
| f4 (int *c, int *d) |
| { |
| int i; |
| #pragma omp taskloop reduction (inscan, +: a) /* { dg-error "'inscan' 'reduction' clause on 'taskloop' construct" } */ |
| for (i = 0; i < 64; i++) |
| { |
| d[i] = a; |
| #pragma omp scan exclusive (a) /* { dg-error "" } */ |
| a += c[i]; |
| } |
| } |
| |
| void |
| f5 (int *c, int *d) |
| { |
| int i; |
| #pragma omp simd reduction (inscan, +: a) |
| for (i = 0; i < 64; i++) |
| { |
| d[i] = a; |
| #pragma omp scan exclusive (a, b) /* { dg-error "'b' specified in 'exclusive' clause but not in 'inscan' 'reduction' clause on the containing construct" } */ |
| a += c[i]; |
| } |
| } |
| |
| void |
| f6 (int *c, int *d) |
| { |
| int i; |
| #pragma omp simd reduction (inscan, +: a, b) /* { dg-error "'b' specified in 'inscan' 'reduction' clause but not in 'scan' directive clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| d[i] = a; |
| #pragma omp scan exclusive (a) |
| a += c[i]; |
| } |
| } |
| |
| void |
| f7 (void) |
| { |
| int i; |
| #pragma omp simd reduction (inscan, +: a) |
| for (i = 0; i < 64; i++) |
| { |
| if (i == 23) /* { dg-error "invalid exit from OpenMP structured block" "" { target c++ } .+1 } */ |
| continue; /* { dg-error "invalid branch to/from OpenMP structured block" "" { target c } } */ |
| else if (i == 27) |
| goto l1; /* { dg-error "invalid branch to/from OpenMP structured block" } */ |
| #pragma omp scan exclusive (a) |
| { |
| l1: a = 0; /* { dg-error "jump to label 'l1'" "" { target c++ } } */ |
| if (i == 33) /* { dg-error "invalid exit from OpenMP structured block" "" { target c++ } .+1 } */ |
| continue; /* { dg-error "invalid branch to/from OpenMP structured block" "" { target c } } */ |
| } |
| } |
| } |
| |
| void |
| f8 (int *c, int *d, int *e, int *f) |
| { |
| int i; |
| #pragma omp for reduction (inscan, +: a, b) /* { dg-error "'b' specified in 'inscan' 'reduction' clause but not in 'scan' directive clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| { a += c[i]; b += d[i]; } |
| #pragma omp scan inclusive (a) inclusive (b) /* { dg-error "expected end of line before 'inclusive'" } */ |
| { e[i] = a; f[i] = b; } |
| } |
| #pragma omp for reduction (inscan, +: a, b) /* { dg-error "'.' specified in 'inscan' 'reduction' clause but not in 'scan' directive clause" } */ |
| for (i = 0; i < 64; i++) |
| { |
| { a += c[i]; b += d[i]; } |
| #pragma omp scan /* { dg-error "expected 'inclusive' or 'exclusive' clause before end of line" } */ |
| { e[i] = a; f[i] = b; } |
| } |
| } |
| |
| void |
| f9 (void) |
| { |
| int i; |
| #pragma omp simd reduction (inscan, +: a) |
| for (i = 0; i < 64; i++) |
| { |
| if (i == 23) /* { dg-error "invalid exit from OpenMP structured block" "" { target c++ } .+1 } */ |
| break; /* { dg-error "break statement used with OpenMP for loop" "" { target c } } */ |
| #pragma omp scan exclusive (a) |
| a++; |
| } |
| } |