// expected-error@+2 {{statement after '#pragma omp target parallel for' must be a for loop}}
#pragma omp target parallel for
++i;
}
voidtest_branch_protected_scope(){
inti=0;
L1:
++i;
intx[24];
#pragma omp target parallel for
for(i=0;i<16;++i){
if(i==5)
gotoL1;// expected-error {{use of undeclared label 'L1'}}
elseif(i==6)
return;// expected-error {{cannot return from OpenMP region}}
elseif(i==7)
gotoL2;
elseif(i==8){
L2:
x[i]++;
}
}
if(x[0]==0)
gotoL2;// expected-error {{use of undeclared label 'L2'}}
elseif(x[1]==1)
gotoL1;
}
voidtest_invalid_clause(){
inti;
// expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for' are ignored}}
#pragma omp target parallel for foo bar
for(i=0;i<16;++i)
;
}
voidtest_non_identifiers(){
inti,x;
// expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for' are ignored}}
#pragma omp target parallel for;
for(i=0;i<16;++i)
;
// expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for' are ignored}}
#pragma omp target parallel for private(x);
for(i=0;i<16;++i)
;
// expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for' are ignored}}
#pragma omp target parallel for, private(x);
for(i=0;i<16;++i)
;
}
externintfoo();
voidtest_collapse(){
inti;
// expected-error@+1 {{expected '('}}
#pragma omp target parallel for collapse
for(i=0;i<16;++i)
;
// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
#pragma omp target parallel for collapse(
for(i=0;i<16;++i)
;
// expected-error@+1 {{expected expression}}
#pragma omp target parallel for collapse()
for(i=0;i<16;++i)
;
// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
#pragma omp target parallel for collapse(,
for(i=0;i<16;++i)
;
// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
#pragma omp target parallel for collapse(, )
for(i=0;i<16;++i)
;
// expected-warning@+2 {{extra tokens at the end of '#pragma omp target parallel for' are ignored}}
// expected-error@+1 {{expected '('}}
#pragma omp target parallel for collapse 4)
for(i=0;i<16;++i)
;
// expected-error@+2 {{expected ')'}}
// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
#pragma omp target parallel for collapse(4
for(i=0;i<16;++i)
;// expected-error {{expected 4 for loops after '#pragma omp target parallel for', but found only 1}}
// expected-error@+2 {{expected ')'}}
// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
#pragma omp target parallel for collapse(4,
for(i=0;i<16;++i)
;// expected-error {{expected 4 for loops after '#pragma omp target parallel for', but found only 1}}
// expected-error@+2 {{expected ')'}}
// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
#pragma omp target parallel for collapse(4, )
for(i=0;i<16;++i)
;// expected-error {{expected 4 for loops after '#pragma omp target parallel for', but found only 1}}
// expected-note@+1 {{as specified in 'collapse' clause}}
#pragma omp target parallel for collapse(4)
for(i=0;i<16;++i)
;// expected-error {{expected 4 for loops after '#pragma omp target parallel for', but found only 1}}
// expected-error@+2 {{expected ')'}}
// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
#pragma omp target parallel for collapse(4 4)
for(i=0;i<16;++i)
;// expected-error {{expected 4 for loops after '#pragma omp target parallel for', but found only 1}}
// expected-error@+2 {{expected ')'}}
// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
#pragma omp target parallel for collapse(4, , 4)
for(i=0;i<16;++i)
;// expected-error {{expected 4 for loops after '#pragma omp target parallel for', but found only 1}}
#pragma omp target parallel for collapse(4)
for(inti1=0;i1<16;++i1)
for(inti2=0;i2<16;++i2)
for(inti3=0;i3<16;++i3)
for(inti4=0;i4<16;++i4)
foo();
// expected-error@+2 {{expected ')'}}
// expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
#pragma omp target parallel for collapse(4, 8)
for(i=0;i<16;++i)
;// expected-error {{expected 4 for loops after '#pragma omp target parallel for', but found only 1}}
// expected-error@+1 {{expression is not an integer constant expression}}
#pragma omp target parallel for collapse(2.5)
for(i=0;i<16;++i)
;
// expected-error@+1 {{expression is not an integer constant expression}}
#pragma omp target parallel for collapse(foo())
for(i=0;i<16;++i)
;
// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
#pragma omp target parallel for collapse(-5)
for(i=0;i<16;++i)
;
// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
#pragma omp target parallel for collapse(0)
for(i=0;i<16;++i)
;
// expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
#pragma omp target parallel for collapse(5 - 5)
for(i=0;i<16;++i)
;
// expected-note@+1 {{defined as firstprivate}}
#pragma omp target parallel for collapse(2) firstprivate(i)
for(i=0;i<16;++i)
// expected-note@+1 {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}}
for(intj=0;j<16;++j)
// expected-error@+2 2 {{reduction variable must be shared}}
// expected-error@+1 {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
#pragma omp for reduction(+ : i, j)
for(intk=0;k<16;++k)
i+=j;
}
voidtest_private(){
inti;
// expected-error@+2 {{expected expression}}
// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
#pragma omp target parallel for private(
for(i=0;i<16;++i)
;
// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}