[libc++][NFC] Replace typedefs with using aliases in <string> (#126070)
[llvm-project.git] / clang / test / SemaOpenACC / combined-construct-device_type-clause.c
blobc185f607548ff8c6b3878226eba607555a9f029a
1 // RUN: %clang_cc1 %s -fopenacc -verify
3 #define MACRO +FOO
5 void uses() {
6 typedef struct S{} STy;
7 STy SImpl;
9 #pragma acc parallel loop device_type(I)
10 for(int i = 0; i < 5; ++i);
11 #pragma acc serial loop device_type(S) dtype(STy)
12 for(int i = 0; i < 5; ++i);
13 #pragma acc kernels loop dtype(SImpl)
14 for(int i = 0; i < 5; ++i);
15 #pragma acc kernels loop dtype(int) device_type(*)
16 for(int i = 0; i < 5; ++i);
17 #pragma acc kernels loop dtype(true) device_type(false)
18 for(int i = 0; i < 5; ++i);
20 // expected-error@+1{{expected identifier}}
21 #pragma acc kernels loop dtype(int, *)
22 for(int i = 0; i < 5; ++i);
24 #pragma acc parallel loop device_type(I, int)
25 for(int i = 0; i < 5; ++i);
26 // expected-error@+2{{expected ','}}
27 // expected-error@+1{{expected identifier}}
28 #pragma acc kernels loop dtype(int{})
29 for(int i = 0; i < 5; ++i);
30 // expected-error@+1{{expected identifier}}
31 #pragma acc kernels loop dtype(5)
32 for(int i = 0; i < 5; ++i);
33 // expected-error@+1{{expected identifier}}
34 #pragma acc kernels loop dtype(MACRO)
35 for(int i = 0; i < 5; ++i);
37 // Compute constructs allow 'async', 'wait', num_gangs', 'num_workers',
38 // 'vector_length' after 'device_type', loop allows 'collapse', 'gang',
39 // 'worker', 'vector', 'seq', 'independent', 'auto', and 'tile' after
40 // 'device_type'.
42 #pragma acc parallel loop device_type(*) vector
43 for(int i = 0; i < 5; ++i);
45 // expected-error@+1{{OpenACC 'finalize' clause is not valid on 'serial loop' directive}}
46 #pragma acc serial loop device_type(*) finalize
47 for(int i = 0; i < 5; ++i);
48 // expected-error@+1{{OpenACC 'if_present' clause is not valid on 'kernels loop' directive}}
49 #pragma acc kernels loop device_type(*) if_present
50 for(int i = 0; i < 5; ++i);
51 #pragma acc parallel loop device_type(*) seq
52 for(int i = 0; i < 5; ++i);
53 #pragma acc serial loop device_type(*) independent
54 for(int i = 0; i < 5; ++i);
55 #pragma acc kernels loop device_type(*) auto
56 for(int i = 0; i < 5; ++i);
57 #pragma acc parallel loop device_type(*) worker
58 for(int i = 0; i < 5; ++i);
59 // expected-error@+2{{OpenACC clause 'nohost' may not follow a 'device_type' clause in a 'serial loop' construct}}
60 // expected-note@+1{{previous clause is here}}
61 #pragma acc serial loop device_type(*) nohost
62 for(int i = 0; i < 5; ++i);
63 // expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'kernels loop' construct}}
64 // expected-note@+1{{previous clause is here}}
65 #pragma acc kernels loop device_type(*) default(none)
66 for(int i = 0; i < 5; ++i);
67 // expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'parallel loop' construct}}
68 // expected-note@+1{{previous clause is here}}
69 #pragma acc parallel loop device_type(*) if(1)
70 for(int i = 0; i < 5; ++i);
71 // expected-error@+2{{OpenACC clause 'self' may not follow a 'device_type' clause in a 'serial loop' construct}}
72 // expected-note@+1{{previous clause is here}}
73 #pragma acc serial loop device_type(*) self
74 for(int i = 0; i < 5; ++i);
76 int Var;
77 int *VarPtr;
78 // expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'kernels loop' construct}}
79 // expected-note@+1{{previous clause is here}}
80 #pragma acc kernels loop device_type(*) copy(Var)
81 for(int i = 0; i < 5; ++i);
82 // expected-error@+2{{OpenACC clause 'pcopy' may not follow a 'device_type' clause in a 'parallel loop' construct}}
83 // expected-note@+1{{previous clause is here}}
84 #pragma acc parallel loop device_type(*) pcopy(Var)
85 for(int i = 0; i < 5; ++i);
86 // expected-error@+2{{OpenACC clause 'present_or_copy' may not follow a 'device_type' clause in a 'serial loop' construct}}
87 // expected-note@+1{{previous clause is here}}
88 #pragma acc serial loop device_type(*) present_or_copy(Var)
89 for(int i = 0; i < 5; ++i);
90 // expected-error@+1{{OpenACC 'use_device' clause is not valid on 'kernels loop' directive}}
91 #pragma acc kernels loop device_type(*) use_device(Var)
92 for(int i = 0; i < 5; ++i);
93 // expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'parallel loop' construct}}
94 // expected-note@+1{{previous clause is here}}
95 #pragma acc parallel loop device_type(*) attach(Var)
96 for(int i = 0; i < 5; ++i);
97 // expected-error@+1{{OpenACC 'delete' clause is not valid on 'serial loop' directive}}
98 #pragma acc serial loop device_type(*) delete(Var)
99 for(int i = 0; i < 5; ++i);
100 // expected-error@+1{{OpenACC 'detach' clause is not valid on 'kernels loop' directive}}
101 #pragma acc kernels loop device_type(*) detach(Var)
102 for(int i = 0; i < 5; ++i);
103 // expected-error@+1{{OpenACC 'device' clause is not valid on 'parallel loop' directive}}
104 #pragma acc parallel loop device_type(*) device(VarPtr)
105 for(int i = 0; i < 5; ++i);
106 // expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'serial loop' construct}}
107 // expected-note@+1{{previous clause is here}}
108 #pragma acc serial loop device_type(*) deviceptr(VarPtr)
109 for(int i = 0; i < 5; ++i);
110 // expected-error@+2{{OpenACC clause 'device_resident' may not follow a 'device_type' clause in a 'kernels loop' construct}}
111 // expected-note@+1{{previous clause is here}}
112 #pragma acc kernels loop device_type(*) device_resident(VarPtr)
113 for(int i = 0; i < 5; ++i);
114 // expected-error@+2{{OpenACC clause 'firstprivate' may not follow a 'device_type' clause in a 'parallel loop' construct}}
115 // expected-note@+1{{previous clause is here}}
116 #pragma acc parallel loop device_type(*) firstprivate(Var)
117 for(int i = 0; i < 5; ++i);
118 // expected-error@+1{{OpenACC 'host' clause is not valid on 'serial loop' directive}}
119 #pragma acc serial loop device_type(*) host(Var)
120 for(int i = 0; i < 5; ++i);
121 // expected-error@+2{{OpenACC clause 'link' may not follow a 'device_type' clause in a 'parallel loop' construct}}
122 // expected-note@+1{{previous clause is here}}
123 #pragma acc parallel loop device_type(*) link(Var)
124 for(int i = 0; i < 5; ++i);
125 // expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'serial loop' construct}}
126 // expected-note@+1{{previous clause is here}}
127 #pragma acc serial loop device_type(*) no_create(Var)
128 for(int i = 0; i < 5; ++i);
129 // expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'kernels loop' construct}}
130 // expected-note@+1{{previous clause is here}}
131 #pragma acc kernels loop device_type(*) present(Var)
132 for(int i = 0; i < 5; ++i);
133 // expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'parallel loop' construct}}
134 // expected-note@+1{{previous clause is here}}
135 #pragma acc parallel loop device_type(*) private(Var)
136 for(int i = 0; i < 5; ++i);
137 // expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'serial loop' construct}}
138 // expected-note@+1{{previous clause is here}}
139 #pragma acc serial loop device_type(*) copyout(Var)
140 for(int i = 0; i < 5; ++i);
141 // expected-error@+2{{OpenACC clause 'pcopyout' may not follow a 'device_type' clause in a 'serial loop' construct}}
142 // expected-note@+1{{previous clause is here}}
143 #pragma acc serial loop device_type(*) pcopyout(Var)
144 for(int i = 0; i < 5; ++i);
145 // expected-error@+2{{OpenACC clause 'present_or_copyout' may not follow a 'device_type' clause in a 'parallel loop' construct}}
146 // expected-note@+1{{previous clause is here}}
147 #pragma acc parallel loop device_type(*) present_or_copyout(Var)
148 for(int i = 0; i < 5; ++i);
149 // expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'serial loop' construct}}
150 // expected-note@+1{{previous clause is here}}
151 #pragma acc serial loop device_type(*) copyin(Var)
152 for(int i = 0; i < 5; ++i);
153 // expected-error@+2{{OpenACC clause 'pcopyin' may not follow a 'device_type' clause in a 'serial loop' construct}}
154 // expected-note@+1{{previous clause is here}}
155 #pragma acc serial loop device_type(*) pcopyin(Var)
156 for(int i = 0; i < 5; ++i);
157 // expected-error@+2{{OpenACC clause 'present_or_copyin' may not follow a 'device_type' clause in a 'parallel loop' construct}}
158 // expected-note@+1{{previous clause is here}}
159 #pragma acc parallel loop device_type(*) present_or_copyin(Var)
160 for(int i = 0; i < 5; ++i);
161 // expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'serial loop' construct}}
162 // expected-note@+1{{previous clause is here}}
163 #pragma acc serial loop device_type(*) create(Var)
164 for(int i = 0; i < 5; ++i);
165 // expected-error@+2{{OpenACC clause 'pcreate' may not follow a 'device_type' clause in a 'serial loop' construct}}
166 // expected-note@+1{{previous clause is here}}
167 #pragma acc serial loop device_type(*) pcreate(Var)
168 for(int i = 0; i < 5; ++i);
169 // expected-error@+2{{OpenACC clause 'present_or_create' may not follow a 'device_type' clause in a 'parallel loop' construct}}
170 // expected-note@+1{{previous clause is here}}
171 #pragma acc parallel loop device_type(*) present_or_create(Var)
172 for(int i = 0; i < 5; ++i);
173 // expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'serial loop' construct}}
174 // expected-note@+1{{previous clause is here}}
175 #pragma acc serial loop device_type(*) reduction(+:Var)
176 for(int i = 0; i < 5; ++i);
177 #pragma acc serial loop device_type(*) collapse(1)
178 for(int i = 0; i < 5; ++i);
179 // expected-error@+2{{OpenACC clause 'bind' may not follow a 'device_type' clause in a 'parallel loop' construct}}
180 // expected-note@+1{{previous clause is here}}
181 #pragma acc parallel loop device_type(*) bind(Var)
182 for(int i = 0; i < 5; ++i);
183 // expected-error@+1{{OpenACC 'vector_length' clause is not valid on 'serial loop' directive}}
184 #pragma acc serial loop device_type(*) vector_length(1)
185 for(int i = 0; i < 5; ++i);
186 // expected-error@+1{{OpenACC 'num_gangs' clause is not valid on 'serial loop' directive}}
187 #pragma acc serial loop device_type(*) num_gangs(1)
188 for(int i = 0; i < 5; ++i);
189 #pragma acc parallel loop device_type(*) num_workers(1)
190 for(int i = 0; i < 5; ++i);
191 // expected-error@+1{{OpenACC 'device_num' clause is not valid on 'serial loop' directive}}
192 #pragma acc serial loop device_type(*) device_num(1)
193 for(int i = 0; i < 5; ++i);
194 // expected-error@+1{{OpenACC 'default_async' clause is not valid on 'serial loop' directive}}
195 #pragma acc serial loop device_type(*) default_async(1)
196 for(int i = 0; i < 5; ++i);
197 #pragma acc parallel loop device_type(*) async
198 for(int i = 0; i < 5; ++i);
200 #pragma acc serial loop device_type(*) tile(*, 1)
201 for(int j = 0; j < 5; ++j)
202 for(int i = 0; i < 5; ++i);
204 #pragma acc serial loop dtype(*) gang
205 for(int i = 0; i < 5; ++i);
206 #pragma acc parallel loop device_type(*) wait
207 for(int i = 0; i < 5; ++i);