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 data default(none) deviceptr(LocalInt) 17 ; 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 data default(none) deviceptr(&LocalInt) 21 ; 22 23 24 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int[5]'}} 25 #pragma acc data default(none) deviceptr(Array) 26 ; 27 28 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} 29 #pragma acc data default(none) deviceptr(Array[0]) 30 ; 31 32 // expected-error@+2{{OpenACC sub-array is not allowed here}} 33 // expected-note@+1{{expected variable of pointer type}} 34 #pragma acc data default(none) deviceptr(Array[0:1]) 35 ; 36 37 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int *[5]'}} 38 #pragma acc data default(none) deviceptr(PtrArray) 39 ; 40 41 #pragma acc data default(none) deviceptr(PtrArray[0]) 42 ; 43 44 // expected-error@+2{{OpenACC sub-array is not allowed here}} 45 // expected-note@+1{{expected variable of pointer type}} 46 #pragma acc data default(none) deviceptr(PtrArray[0:1]) 47 ; 48 49 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'struct S'}} 50 #pragma acc data default(none) deviceptr(s) 51 ; 52 53 // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} 54 #pragma acc data default(none) deviceptr(s.IntMem) 55 ; 56 57 #pragma acc data default(none) deviceptr(s.PtrMem) 58 ; 59 60 // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'enter data' directive}} 61 #pragma acc enter data copyin(LocalInt) deviceptr(LocalInt) 62 // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'exit data' directive}} 63 #pragma acc exit data copyout(LocalInt) deviceptr(LocalInt) 64 // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'host_data' directive}} 65 #pragma acc host_data use_device(LocalInt) deviceptr(LocalInt) 66 ; 67 } 68