xref: /llvm-project/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c (revision fbb14dd97702db242a31e1b36ca8a3554a73c212)
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