1 // RUN: %clang_cc1 %s -fopenacc -verify 2 3 struct S { 4 int IntMem; 5 int *PtrMem; 6 }; 7 8 void uses() { 9 int LocalInt; 10 int *LocalPtr; 11 int Array[5]; 12 int *PtrArray[5]; 13 struct S s; 14 15 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} 16 #pragma acc parallel deviceptr(LocalInt) 17 while (1); 18 19 // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} 20 #pragma acc parallel deviceptr(&LocalInt) 21 while (1); 22 23 #pragma acc serial deviceptr(LocalPtr) 24 while (1); 25 26 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int[5]'}} 27 #pragma acc kernels deviceptr(Array) 28 while (1); 29 30 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} 31 #pragma acc parallel deviceptr(Array[0]) 32 while (1); 33 34 // expected-error@+2{{OpenACC sub-array is not allowed here}} 35 // expected-note@+1{{expected variable of pointer type}} 36 #pragma acc parallel deviceptr(Array[0:1]) 37 while (1); 38 39 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int *[5]'}} 40 #pragma acc parallel deviceptr(PtrArray) 41 while (1); 42 43 #pragma acc parallel deviceptr(PtrArray[0]) 44 while (1); 45 46 // expected-error@+2{{OpenACC sub-array is not allowed here}} 47 // expected-note@+1{{expected variable of pointer type}} 48 #pragma acc parallel deviceptr(PtrArray[0:1]) 49 while (1); 50 51 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'struct S'}} 52 #pragma acc parallel deviceptr(s) 53 while (1); 54 55 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} 56 #pragma acc parallel deviceptr(s.IntMem) 57 while (1); 58 59 #pragma acc parallel deviceptr(s.PtrMem) 60 while (1); 61 62 // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'loop' directive}} 63 #pragma acc loop deviceptr(LocalInt) 64 for(int i = 5; i < 10;++i); 65 } 66