blob: 95b46cbb71b8bd1ca6ddf4716724b9fcd2c06525 [file] [log] [blame]
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++;
}
}