brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · d1c3c9d Raw
87 lines · c
1// RUN: %clang_cc1 %s -fopenacc -verify2 3void BoolExpr(int *I, float *F) {4  typedef struct {} SomeStruct;5  struct C{};6  // expected-error@+1{{expected expression}}7#pragma acc parallel loop self (struct C f())8  for (unsigned i = 0; i < 5; ++i);9 10  // expected-error@+1{{unexpected type name 'SomeStruct': expected expression}}11#pragma acc serial loop self (SomeStruct)12  for (unsigned i = 0; i < 5; ++i);13 14  // expected-error@+1{{unexpected type name 'SomeStruct': expected expression}}15#pragma acc kernels loop self (SomeStruct())16  for (unsigned i = 0; i < 5; ++i);17 18  SomeStruct S;19  // expected-error@+1{{statement requires expression of scalar type ('SomeStruct' invalid)}}20#pragma acc parallel loop self (S)21  for (unsigned i = 0; i < 5; ++i);22 23#pragma acc parallel loop self (I)24  for (unsigned i = 0; i < 5; ++i);25 26#pragma acc serial loop self (F)27  for (unsigned i = 0; i < 5; ++i);28 29#pragma acc kernels loop self (*I < *F)30  for (unsigned i = 0; i < 5; ++i);31}32 33void WarnMaybeNotUsed(int val1, int val2) {34 35  // expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}36  // expected-note@+1{{previous 'self' clause is here}}37#pragma acc parallel loop self if(val1)38  for (unsigned i = 0; i < 5; ++i);39 40  // expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}41  // expected-note@+1{{previous 'self' clause is here}}42#pragma acc serial loop self(val1) if(val1)43  for (unsigned i = 0; i < 5; ++i);44 45  // expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}46  // expected-note@+1{{previous 'if' clause is here}}47#pragma acc kernels loop if(val1) self48  for (unsigned i = 0; i < 5; ++i);49 50  // expected-warning@+2{{OpenACC construct 'self' has no effect when an 'if' clause evaluates to true}}51  // expected-note@+1{{previous 'if' clause is here}}52#pragma acc parallel loop if(val1) self(val2)53  for (unsigned i = 0; i < 5; ++i);54 55  // The below don't warn because one side or the other has an error, thus is56  // not added to the AST.57 58  // expected-error@+1{{use of undeclared identifier 'invalid'}}59#pragma acc serial loop self if(invalid)60  for (unsigned i = 0; i < 5; ++i);61 62  // expected-error@+1{{use of undeclared identifier 'invalid'}}63#pragma acc kernels loop self(invalid) if(val1)64  for (unsigned i = 0; i < 5; ++i);65 66  // expected-error@+2{{expected expression}}67  // expected-error@+1{{use of undeclared identifier 'invalid'}}68#pragma acc parallel loop self() if(invalid)69  for (unsigned i = 0; i < 5; ++i);70 71  // expected-error@+1{{use of undeclared identifier 'invalid'}}72#pragma acc serial loop if(invalid) self73  for (unsigned i = 0; i < 5; ++i);74 75  // expected-error@+1{{use of undeclared identifier 'invalid'}}76#pragma acc kernels loop if(val2) self(invalid)77  for (unsigned i = 0; i < 5; ++i);78 79  // expected-error@+1{{use of undeclared identifier 'invalid'}}80#pragma acc parallel loop if(invalid) self(val1)81  for (unsigned i = 0; i < 5; ++i);82 83  // expected-error@+1{{OpenACC 'self' clause is not valid on 'loop' directive}}84#pragma acc loop self85  for(int i = 5; i < 10;++i);86}87