xref: /llvm-project/clang/test/ParserOpenACC/parse-clauses.c (revision 553fa204ed5ab4c48bc6080451df24310c00e69c)
1 // RUN: %clang_cc1 %s -verify -fopenacc -std=c99
2 // RUNX: %clang_cc1 %s -verify -fopenacc
3 // RUNX: %clang_cc1 %s -verify -fopenacc -x c++
4 
5 void func() {
6 
7   // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
8 #pragma acc exit data finalize
9 
10   // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
11 #pragma acc exit data finalize finalize
12 
13   // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
14   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
15 #pragma acc exit data finalize invalid
16 
17   // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
18   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
19 #pragma acc exit data finalize invalid invalid finalize
20 
21   // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
22 #pragma acc exit data wait finalize
23 
24   // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}
25 #pragma acc host_data if_present
26 
27   // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}
28 #pragma acc host_data if_present, if_present
29 
30   // expected-error@+4{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}}
31   // expected-note@+3{{previous clause is here}}
32   // expected-error@+2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}}
33   // expected-note@+1{{previous clause is here}}
34 #pragma acc loop seq independent auto
35   for(int i = 0; i < 5;++i) {}
36 
37   // expected-error@+4{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}}
38   // expected-note@+3{{previous clause is here}}
39   // expected-error@+2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}}
40   // expected-note@+1{{previous clause is here}}
41 #pragma acc loop seq, independent auto
42   for(int i = 0; i < 5;++i) {}
43 
44   // expected-error@+4{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}}
45   // expected-note@+3{{previous clause is here}}
46   // expected-error@+2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}}
47   // expected-note@+1{{previous clause is here}}
48 #pragma acc loop seq independent, auto
49   for(int i = 0; i < 5;++i) {}
50 
51   // expected-error@+3{{OpenACC clause 'independent' on 'kernels loop' construct conflicts with previous data dependence clause}}
52   // expected-error@+2{{OpenACC clause 'auto' on 'kernels loop' construct conflicts with previous data dependence clause}}
53   // expected-note@+1 2{{previous clause is here}}
54 #pragma acc kernels loop seq independent auto
55   for(int i = 0; i < 5;++i) {}
56 
57   // expected-error@+3{{OpenACC clause 'independent' on 'serial loop' construct conflicts with previous data dependence clause}}
58   // expected-error@+2{{OpenACC clause 'auto' on 'serial loop' construct conflicts with previous data dependence clause}}
59   // expected-note@+1 2{{previous clause is here}}
60 #pragma acc serial loop seq, independent auto
61   for(int i = 0; i < 5;++i) {}
62 
63   // expected-error@+3{{OpenACC clause 'independent' on 'parallel loop' construct conflicts with previous data dependence clause}}
64   // expected-error@+2{{OpenACC clause 'auto' on 'parallel loop' construct conflicts with previous data dependence clause}}
65   // expected-note@+1 2{{previous clause is here}}
66 #pragma acc parallel loop seq independent, auto
67   for(int i = 0; i < 5;++i) {}
68 
69 
70   // expected-error@+1{{expected identifier}}
71 #pragma acc loop , seq
72   for(int i = 0; i < 5;++i) {}
73 
74   // expected-error@+1{{expected identifier}}
75 #pragma acc loop seq,
76   for(int i = 0; i < 5;++i) {}
77 
78   // expected-error@+1{{expected '('}}
79 #pragma acc loop collapse
80   for(int i = 0; i < 5;++i) {}
81 
82   // expected-error@+1{{expected expression}}
83 #pragma acc loop collapse()
84   for(int i = 0; i < 5;++i) {}
85 
86   // expected-error@+2{{invalid tag 'unknown' on 'collapse' clause}}
87   // expected-error@+1{{expected expression}}
88 #pragma acc loop collapse(unknown:)
89   for(int i = 0; i < 5;++i) {}
90 
91   // expected-error@+1{{expected expression}}
92 #pragma acc loop collapse(force:)
93   for(int i = 0; i < 5;++i) {}
94 
95   // expected-error@+1{{invalid tag 'unknown' on 'collapse' clause}}
96 #pragma acc loop collapse(unknown:1)
97   for(int i = 0; i < 5;++i) {}
98 
99 #pragma acc loop collapse(force:1)
100   for(int i = 0; i < 5;++i) {}
101 
102 #pragma acc loop collapse(1)
103   for(int i = 0; i < 5;++i) {}
104 
105   // expected-error@+2{{expected ')'}}
106   // expected-note@+1{{to match this '('}}
107 #pragma acc loop collapse(5, 6)
108   for(int i = 0; i < 5;++i) {}
109 }
110 
111 void DefaultClause() {
112   // expected-error@+1{{expected '('}}
113 #pragma acc serial loop default
114   for(int i = 0; i < 5;++i) {}
115 
116   // expected-error@+1{{expected '('}}
117 #pragma acc serial default self
118   for(int i = 0; i < 5;++i) {}
119 
120   // expected-error@+1{{expected '('}}
121 #pragma acc serial default, self
122   for(int i = 0; i < 5;++i) {}
123 
124   // expected-error@+3{{expected identifier}}
125   // expected-error@+2{{expected ')'}}
126   // expected-note@+1{{to match this '('}}
127 #pragma acc serial default(
128   for(int i = 0; i < 5;++i) {}
129 
130   // expected-error@+3{{invalid value for 'default' clause; expected 'present' or 'none'}}
131   // expected-error@+2{{expected ')'}}
132   // expected-note@+1{{to match this '('}}
133 #pragma acc serial default( self
134   for(int i = 0; i < 5;++i) {}
135 
136   // expected-error@+3{{expected identifier}}
137   // expected-error@+2{{expected ')'}}
138   // expected-note@+1{{to match this '('}}
139 #pragma acc serial default(, self
140   for(int i = 0; i < 5;++i) {}
141 
142   // expected-error@+2{{expected '('}}
143   // expected-error@+1{{expected identifier}}
144 #pragma acc serial default)
145   for(int i = 0; i < 5;++i) {}
146 
147   // expected-error@+2{{expected '('}}
148   // expected-error@+1{{expected identifier}}
149 #pragma acc serial default), self
150   for(int i = 0; i < 5;++i) {}
151 
152   // expected-error@+1{{expected identifier}}
153 #pragma acc serial default()
154   for(int i = 0; i < 5;++i) {}
155 
156   // expected-error@+1{{expected identifier}}
157 #pragma acc serial default() self
158   for(int i = 0; i < 5;++i) {}
159 
160   // expected-error@+1{{expected identifier}}
161 #pragma acc serial default(), self
162   for(int i = 0; i < 5;++i) {}
163 
164   // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}
165 #pragma acc serial default(invalid)
166   for(int i = 0; i < 5;++i) {}
167 
168   // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}
169 #pragma acc serial default(auto) self
170   for(int i = 0; i < 5;++i) {}
171 
172   // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}
173 #pragma acc serial default(invalid), self
174   for(int i = 0; i < 5;++i) {}
175 
176 #pragma acc serial default(none)
177   for(int i = 0; i < 5;++i) {}
178 
179 #pragma acc serial default(present), self
180   for(int i = 0; i < 5;++i) {}
181 }
182 
183 void IfClause() {
184   int i, j;
185   // expected-error@+1{{expected '('}}
186 #pragma acc serial loop if
187   for(int i = 0; i < 5;++i) {}
188 
189   // expected-error@+1{{expected '('}}
190 #pragma acc serial if private(i)
191   for(int i = 0; i < 5;++i) {}
192 
193   // expected-error@+1{{expected '('}}
194 #pragma acc serial if, private(i)
195   for(int i = 0; i < 5;++i) {}
196 
197   // expected-error@+3{{expected expression}}
198   // expected-error@+2{{expected ')'}}
199   // expected-note@+1{{to match this '('}}
200 #pragma acc serial if(
201   for(int i = 0; i < 5;++i) {}
202 
203   // expected-error@+3{{use of undeclared identifier 'self'}}
204   // expected-error@+2{{expected ')'}}
205   // expected-note@+1{{to match this '('}}
206 #pragma acc serial if( self
207   for(int i = 0; i < 5;++i) {}
208 
209   // expected-error@+4{{expected expression}}
210   // expected-error@+3{{use of undeclared identifier 'self'}}
211   // expected-error@+2{{expected ')'}}
212   // expected-note@+1{{to match this '('}}
213 #pragma acc serial if(, self
214   for(int i = 0; i < 5;++i) {}
215 
216   // expected-error@+2{{expected '('}}
217   // expected-error@+1{{expected identifier}}
218 #pragma acc serial if)
219   for(int i = 0; i < 5;++i) {}
220 
221   // expected-error@+2{{expected '('}}
222   // expected-error@+1{{expected identifier}}
223 #pragma acc serial if) private(i)
224   for(int i = 0; i < 5;++i) {}
225 
226   // expected-error@+2{{expected '('}}
227   // expected-error@+1{{expected identifier}}
228 #pragma acc serial if), private(i)
229   for(int i = 0; i < 5;++i) {}
230 
231   // expected-error@+1{{expected expression}}
232 #pragma acc serial if()
233   for(int i = 0; i < 5;++i) {}
234 
235   // expected-error@+1{{expected expression}}
236 #pragma acc serial if() private(i)
237   for(int i = 0; i < 5;++i) {}
238 
239   // expected-error@+1{{expected expression}}
240 #pragma acc serial if(), private(i)
241   for(int i = 0; i < 5;++i) {}
242 
243   // expected-error@+1{{use of undeclared identifier 'invalid_expr'}}
244 #pragma acc serial if(invalid_expr)
245   for(int i = 0; i < 5;++i) {}
246 
247   // expected-error@+1{{expected expression}}
248 #pragma acc serial if() private(i)
249   for(int i = 0; i < 5;++i) {}
250 
251 #pragma acc serial if(i > j)
252   for(int i = 0; i < 5;++i) {}
253 
254 #pragma acc serial if(1+5>3), private(i)
255   for(int i = 0; i < 5;++i) {}
256 }
257 
258 void SelfClause() {
259 #pragma acc serial loop self
260   for(int i = 0; i < 5;++i) {}
261 
262 #pragma acc serial loop self, seq
263   for(int i = 0; i < 5;++i) {}
264 
265   // expected-error@+3{{expected expression}}
266   // expected-error@+2{{expected ')'}}
267   // expected-note@+1{{to match this '('}}
268 #pragma acc serial loop self(
269   for(int i = 0; i < 5;++i) {}
270 
271   // expected-error@+3{{use of undeclared identifier 'seq'}}
272   // expected-error@+2{{expected ')'}}
273   // expected-note@+1{{to match this '('}}
274 #pragma acc serial loop self( seq
275   for(int i = 0; i < 5;++i) {}
276 
277   // expected-error@+4{{expected expression}}
278   // expected-error@+3{{use of undeclared identifier 'seq'}}
279   // expected-error@+2{{expected ')'}}
280   // expected-note@+1{{to match this '('}}
281 #pragma acc serial loop self(, seq
282   for(int i = 0; i < 5;++i) {}
283 
284   // expected-error@+1{{expected identifier}}
285 #pragma acc serial loop self)
286   for(int i = 0; i < 5;++i) {}
287 
288   // expected-error@+1{{expected identifier}}
289 #pragma acc serial loop self) seq
290   for(int i = 0; i < 5;++i) {}
291 
292   // expected-error@+1{{expected identifier}}
293 #pragma acc serial loop self), seq
294   for(int i = 0; i < 5;++i) {}
295 
296 
297   // expected-error@+1{{expected expression}}
298 #pragma acc serial loop self(), seq
299   for(int i = 0; i < 5;++i) {}
300 
301   // expected-error@+2{{expected expression}}
302   // expected-error@+1{{expected expression}}
303 #pragma acc serial loop self(,), seq
304   for(int i = 0; i < 5;++i) {}
305 
306   // expected-error@+1{{use of undeclared identifier 'invalid_expr'}}
307 #pragma acc serial loop self(invalid_expr), seq
308   for(int i = 0; i < 5;++i) {}
309 
310   int i, j;
311 
312   // expected-error@+2{{expected ')'}}
313   // expected-note@+1{{to match this '('}}
314 #pragma acc serial self(i > j
315   for(int i = 0; i < 5;++i) {}
316 
317   // expected-error@+3{{use of undeclared identifier 'seq'}}
318   // expected-error@+2{{expected ')'}}
319   // expected-note@+1{{to match this '('}}
320 #pragma acc serial self(i > j, seq
321   for(int i = 0; i < 5;++i) {}
322 
323   // expected-warning@+1{{left operand of comma operator has no effect}}
324 #pragma acc serial self(i, j)
325   for(int i = 0; i < 5;++i) {}
326 
327 #pragma acc serial self(i > j)
328   for(int i = 0; i < 5;++i) {}
329 
330 #pragma acc serial self(1+5>3), private(i)
331   for(int i = 0; i < 5;++i) {}
332 }
333 
334 struct Members {
335   int value;
336   char array[5];
337 };
338 struct HasMembersArray {
339   struct Members MemArr[4];
340 };
341 
342 // On 'update', self behaves differently and requires parens, plus takes a var-list instead.
343 void SelfUpdate() {
344   struct Members s;
345 
346   // expected-error@+1{{expected '('}}
347 #pragma acc update host(s) self
348   for(int i = 0; i < 5;++i) {}
349 
350   // expected-error@+3{{use of undeclared identifier 'zero'}}
351   // expected-error@+2{{expected ','}}
352   // expected-error@+1{{expected expression}}
353 #pragma acc update self(zero : s.array[s.value : 5], s.value), if_present
354   for(int i = 0; i < 5;++i) {}
355 
356 #pragma acc update self(s.array[s.value : 5], s.value), if_present
357   for(int i = 0; i < 5;++i) {}
358 }
359 
360 void VarListClauses() {
361   // expected-error@+1{{expected '('}}
362 #pragma acc serial copy
363   for(int i = 0; i < 5;++i) {}
364 
365   // expected-error@+1{{expected '('}}
366 #pragma acc serial copy, self
367   for(int i = 0; i < 5;++i) {}
368 
369   // expected-error@+2{{expected '('}}
370   // expected-error@+1{{expected identifier}}
371 #pragma acc serial copy)
372   for(int i = 0; i < 5;++i) {}
373 
374   // expected-error@+2{{expected '('}}
375   // expected-error@+1{{expected identifier}}
376 #pragma acc serial copy), self
377   for(int i = 0; i < 5;++i) {}
378 
379   // expected-error@+3{{expected expression}}
380   // expected-error@+2{{expected ')'}}
381   // expected-note@+1{{to match this '('}}
382 #pragma acc serial copy(
383   for(int i = 0; i < 5;++i) {}
384 
385   // expected-error@+3{{expected expression}}
386   // expected-error@+2{{expected ')'}}
387   // expected-note@+1{{to match this '('}}
388 #pragma acc serial copy(, self
389   for(int i = 0; i < 5;++i) {}
390 
391   // expected-error@+1{{expected expression}}
392 #pragma acc serial copy()
393   for(int i = 0; i < 5;++i) {}
394 
395   // expected-error@+1{{expected expression}}
396 #pragma acc serial copy(), self
397   for(int i = 0; i < 5;++i) {}
398 
399   struct Members s;
400   struct HasMembersArray HasMem;
401 
402 #pragma acc serial copy(s.array[s.value]), self
403   for(int i = 0; i < 5;++i) {}
404 
405 #pragma acc serial copy(s.array[s.value], s.array[s.value :5] ), self
406   for(int i = 0; i < 5;++i) {}
407 
408 #pragma acc serial copy(HasMem.MemArr[3].array[1]), self
409   for(int i = 0; i < 5;++i) {}
410 
411 #pragma acc serial copy(HasMem.MemArr[3].array[1:4]), self
412   for(int i = 0; i < 5;++i) {}
413 
414   // expected-error@+1{{OpenACC sub-array is not allowed here}}
415 #pragma acc serial copy(HasMem.MemArr[1:3].array[1]), self
416   for(int i = 0; i < 5;++i) {}
417 
418   // expected-error@+1{{OpenACC sub-array is not allowed here}}
419 #pragma acc serial copy(HasMem.MemArr[1:3].array[1:2]), self
420   for(int i = 0; i < 5;++i) {}
421 
422 #pragma acc serial copy(HasMem.MemArr[:]), self
423   for(int i = 0; i < 5;++i) {}
424 
425   // expected-error@+1{{expected expression}}
426 #pragma acc serial copy(HasMem.MemArr[::]), self
427   for(int i = 0; i < 5;++i) {}
428 
429   // expected-error@+3{{expected expression}}
430   // expected-error@+2{{expected ']'}}
431   // expected-note@+1{{to match this '['}}
432 #pragma acc serial copy(HasMem.MemArr[: :]), self
433   for(int i = 0; i < 5;++i) {}
434 
435 #pragma acc serial copy(HasMem.MemArr[3:]), self
436   for(int i = 0; i < 5;++i) {}
437 
438   // expected-warning@+1{{OpenACC clause name 'pcopy' is a deprecated clause name and is now an alias for 'copy'}}
439 #pragma acc serial pcopy(HasMem.MemArr[3:])
440   for(int i = 0; i < 5;++i) {}
441 
442   // expected-warning@+1{{OpenACC clause name 'present_or_copy' is a deprecated clause name and is now an alias for 'copy'}}
443 #pragma acc serial present_or_copy(HasMem.MemArr[3:])
444   for(int i = 0; i < 5;++i) {}
445 
446   // expected-error@+2 2{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}
447   // expected-error@+1{{expected ','}}
448 #pragma acc host_data use_device(s.array[s.value] s.array[s.value :5] ), if_present
449   for(int i = 0; i < 5;++i) {}
450 
451   // expected-error@+1{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}
452 #pragma acc host_data use_device(s.array[s.value : 5]), if_present
453   for(int i = 0; i < 5;++i) {}
454 
455 #pragma acc host_data use_device(HasMem), if_present
456   for(int i = 0; i < 5;++i) {}
457 
458   // expected-error@+1{{expected ','}}
459 #pragma acc serial no_create(s.array[s.value] s.array[s.value :5] ), self
460   for(int i = 0; i < 5;++i) {}
461 
462 #pragma acc serial no_create(s.array[s.value : 5], s.value), self
463   for(int i = 0; i < 5;++i) {}
464 
465   // expected-error@+1{{expected ','}}
466 #pragma acc serial present(s.array[s.value] s.array[s.value :5] ), self
467   for(int i = 0; i < 5;++i) {}
468 
469 #pragma acc serial present(s.array[s.value : 5], s.value), self
470   for(int i = 0; i < 5;++i) {}
471 
472 
473   void *IsPointer;
474   // expected-error@+4{{expected ','}}
475   // expected-error@+3{{expected pointer in 'deviceptr' clause, type is 'char'}}
476   // expected-error@+2{{OpenACC sub-array is not allowed here}}
477   // expected-note@+1{{expected variable of pointer type}}
478 #pragma acc serial deviceptr(s.array[s.value] s.array[s.value :5] ), self
479   for(int i = 0; i < 5;++i) {}
480 
481 #pragma acc serial deviceptr(IsPointer), self
482   for(int i = 0; i < 5;++i) {}
483 
484   // expected-error@+4{{expected ','}}
485   // expected-error@+3{{expected pointer in 'attach' clause, type is 'char'}}
486   // expected-error@+2{{OpenACC sub-array is not allowed here}}
487   // expected-note@+1{{expected variable of pointer type}}
488 #pragma acc serial attach(s.array[s.value] s.array[s.value :5] ), self
489   for(int i = 0; i < 5;++i) {}
490 
491 #pragma acc serial attach(IsPointer), self
492   for(int i = 0; i < 5;++i) {}
493 
494   // expected-error@+4{{expected ','}}
495   // expected-error@+3{{expected pointer in 'detach' clause, type is 'char'}}
496   // expected-error@+2{{OpenACC sub-array is not allowed here}}
497   // expected-note@+1{{expected variable of pointer type}}
498 #pragma acc exit data copyout(s) detach(s.array[s.value] s.array[s.value :5])
499 
500 #pragma acc exit data copyout(s) detach(IsPointer)
501 
502   // expected-error@+1{{expected ','}}
503 #pragma acc serial private(s.array[s.value] s.array[s.value :5] ), self
504   for(int i = 0; i < 5;++i) {}
505 
506 #pragma acc serial private(s.array[s.value : 5], s.value), self
507   for(int i = 0; i < 5;++i) {}
508 
509   // expected-error@+1{{expected ','}}
510 #pragma acc serial firstprivate(s.array[s.value] s.array[s.value :5] ), self
511   for(int i = 0; i < 5;++i) {}
512 
513 #pragma acc serial firstprivate(s.array[s.value : 5], s.value), self
514   for(int i = 0; i < 5;++i) {}
515 
516   // expected-error@+1{{expected ','}}
517 #pragma acc exit data delete(s.array[s.value] s.array[s.value :5] ) async
518   for(int i = 0; i < 5;++i) {}
519 
520 #pragma acc exit data delete(s.array[s.value : 5], s.value),async
521   for(int i = 0; i < 5;++i) {}
522 
523   // expected-error@+2{{expected ','}}
524   // expected-warning@+1{{OpenACC clause 'device_resident' not yet implemented, clause ignored}}
525 #pragma acc serial device_resident(s.array[s.value] s.array[s.value :5] ), self
526   for(int i = 0; i < 5;++i) {}
527 
528   // expected-warning@+1{{OpenACC clause 'device_resident' not yet implemented, clause ignored}}
529 #pragma acc serial device_resident(s.array[s.value : 5], s.value), self
530   for(int i = 0; i < 5;++i) {}
531 
532   // expected-error@+2{{expected ','}}
533   // expected-warning@+1{{OpenACC clause 'link' not yet implemented, clause ignored}}
534 #pragma acc serial link(s.array[s.value] s.array[s.value :5] ), self
535   for(int i = 0; i < 5;++i) {}
536 
537   // expected-warning@+1{{OpenACC clause 'link' not yet implemented, clause ignored}}
538 #pragma acc serial link(s.array[s.value : 5], s.value), self
539   for(int i = 0; i < 5;++i) {}
540 
541   // expected-error@+1{{expected ','}}
542 #pragma acc update host(s.array[s.value] s.array[s.value :5] )
543   for(int i = 0; i < 5;++i) {}
544 
545 #pragma acc update host(s.array[s.value : 5], s.value)
546   for(int i = 0; i < 5;++i) {}
547 
548   // expected-error@+1{{expected ','}}
549 #pragma acc update device(s.array[s.value] s.array[s.value :5] )
550   for(int i = 0; i < 5;++i) {}
551 
552 #pragma acc update device(s.array[s.value : 5], s.value)
553   for(int i = 0; i < 5;++i) {}
554 
555   // expected-error@+1{{expected ','}}
556 #pragma acc serial copyout(s.array[s.value] s.array[s.value :5] ), self
557   for(int i = 0; i < 5;++i) {}
558 
559 #pragma acc serial copyout(s.array[s.value : 5], s.value), self
560   for(int i = 0; i < 5;++i) {}
561 
562 #pragma acc serial copyout(zero:s.array[s.value : 5], s.value), self
563   for(int i = 0; i < 5;++i) {}
564 
565   // expected-warning@+1{{OpenACC clause name 'pcopyout' is a deprecated clause name and is now an alias for 'copyout'}}
566 #pragma acc serial pcopyout(s.array[s.value : 5], s.value)
567   for(int i = 0; i < 5;++i) {}
568 
569   // expected-warning@+1{{OpenACC clause name 'present_or_copyout' is a deprecated clause name and is now an alias for 'copyout'}}
570 #pragma acc serial present_or_copyout(zero:s.array[s.value : 5], s.value)
571   for(int i = 0; i < 5;++i) {}
572 
573 #pragma acc serial copyout(zero : s.array[s.value : 5], s.value), self
574   for(int i = 0; i < 5;++i) {}
575 
576   // expected-error@+2{{use of undeclared identifier 'zero'}}
577   // expected-error@+1{{expected ','}}
578 #pragma acc serial copyout(zero s.array[s.value : 5], s.value), self
579   for(int i = 0; i < 5;++i) {}
580 
581   // expected-error@+1{{invalid tag 'readonly' on 'copyout' clause}}
582 #pragma acc serial copyout(readonly:s.array[s.value : 5], s.value), self
583   for(int i = 0; i < 5;++i) {}
584 
585   // expected-error@+1{{invalid tag 'invalid' on 'copyout' clause}}
586 #pragma acc serial copyout(invalid:s.array[s.value : 5], s.value), self
587   for(int i = 0; i < 5;++i) {}
588 
589   // expected-error@+1{{invalid tag 'invalid' on 'copyout' clause}}
590 #pragma acc serial copyout(invalid:s.array[s.value : 5], s.value), self
591   for(int i = 0; i < 5;++i) {}
592 
593   // expected-error@+2{{use of undeclared identifier 'invalid'}}
594   // expected-error@+1{{expected ','}}
595 #pragma acc serial copyout(invalid s.array[s.value : 5], s.value), self
596   for(int i = 0; i < 5;++i) {}
597 
598   // expected-error@+1{{expected ','}}
599 #pragma acc serial create(s.array[s.value] s.array[s.value :5] ), self
600   for(int i = 0; i < 5;++i) {}
601 
602 #pragma acc serial create(s.array[s.value : 5], s.value), self
603   for(int i = 0; i < 5;++i) {}
604 
605 #pragma acc serial create(zero:s.array[s.value : 5], s.value), self
606   for(int i = 0; i < 5;++i) {}
607 
608   // expected-warning@+1{{OpenACC clause name 'pcreate' is a deprecated clause name and is now an alias for 'create'}}
609 #pragma acc serial pcreate(s.array[s.value : 5], s.value)
610   for(int i = 0; i < 5;++i) {}
611 
612   // expected-warning@+1{{OpenACC clause name 'present_or_create' is a deprecated clause name and is now an alias for 'create'}}
613 #pragma acc serial present_or_create(zero:s.array[s.value : 5], s.value)
614   for(int i = 0; i < 5;++i) {}
615 
616 #pragma acc serial create(zero : s.array[s.value : 5], s.value), self
617   for(int i = 0; i < 5;++i) {}
618 
619   // expected-error@+2{{use of undeclared identifier 'zero'}}
620   // expected-error@+1{{expected ','}}
621 #pragma acc serial create(zero s.array[s.value : 5], s.value), self
622   for(int i = 0; i < 5;++i) {}
623 
624   // expected-error@+1{{invalid tag 'readonly' on 'create' clause}}
625 #pragma acc serial create(readonly:s.array[s.value : 5], s.value), self
626   for(int i = 0; i < 5;++i) {}
627 
628   // expected-error@+1{{invalid tag 'invalid' on 'create' clause}}
629 #pragma acc serial create(invalid:s.array[s.value : 5], s.value), self
630   for(int i = 0; i < 5;++i) {}
631 
632   // expected-error@+1{{invalid tag 'invalid' on 'create' clause}}
633 #pragma acc serial create(invalid:s.array[s.value : 5], s.value), self
634   for(int i = 0; i < 5;++i) {}
635 
636   // expected-error@+2{{use of undeclared identifier 'invalid'}}
637   // expected-error@+1{{expected ','}}
638 #pragma acc serial create(invalid s.array[s.value : 5], s.value), self
639   for(int i = 0; i < 5;++i) {}
640 
641   // expected-error@+1{{expected ','}}
642 #pragma acc serial copyin(s.array[s.value] s.array[s.value :5] ), self
643   for(int i = 0; i < 5;++i) {}
644 
645 #pragma acc serial copyin(s.array[s.value : 5], s.value), self
646   for(int i = 0; i < 5;++i) {}
647 
648 #pragma acc serial copyin(readonly:s.array[s.value : 5], s.value), self
649   for(int i = 0; i < 5;++i) {}
650 
651   // expected-warning@+1{{OpenACC clause name 'pcopyin' is a deprecated clause name and is now an alias for 'copyin'}}
652 #pragma acc serial pcopyin(s.array[s.value : 5], s.value)
653   for(int i = 0; i < 5;++i) {}
654 
655   // expected-warning@+1{{OpenACC clause name 'present_or_copyin' is a deprecated clause name and is now an alias for 'copyin'}}
656 #pragma acc serial present_or_copyin(readonly:s.array[s.value : 5], s.value)
657   for(int i = 0; i < 5;++i) {}
658 
659 #pragma acc serial copyin(readonly : s.array[s.value : 5], s.value), self
660   for(int i = 0; i < 5;++i) {}
661 
662   // expected-error@+2{{use of undeclared identifier 'readonly'}}
663   // expected-error@+1{{expected ','}}
664 #pragma acc serial copyin(readonly s.array[s.value : 5], s.value), self
665   for(int i = 0; i < 5;++i) {}
666 
667   // expected-error@+1{{invalid tag 'zero' on 'copyin' clause}}
668 #pragma acc serial copyin(zero :s.array[s.value : 5], s.value), self
669   for(int i = 0; i < 5;++i) {}
670 
671   // expected-error@+1{{invalid tag 'invalid' on 'copyin' clause}}
672 #pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), self
673   for(int i = 0; i < 5;++i) {}
674 
675   // expected-error@+1{{invalid tag 'invalid' on 'copyin' clause}}
676 #pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), self
677   for(int i = 0; i < 5;++i) {}
678 
679   // expected-error@+2{{use of undeclared identifier 'invalid'}}
680   // expected-error@+1{{expected ','}}
681 #pragma acc serial copyin(invalid s.array[s.value : 5], s.value), self
682   for(int i = 0; i < 5;++i) {}
683 }
684 
685 void ReductionClauseParsing() {
686   char *Begin, *End;
687   // expected-error@+1{{expected '('}}
688 #pragma acc serial reduction
689   for(int i = 0; i < 5;++i) {}
690   // expected-error@+2{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
691   // expected-error@+1{{expected expression}}
692 #pragma acc serial reduction()
693   for(int i = 0; i < 5;++i) {}
694   // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
695 #pragma acc serial reduction(Begin)
696   for(int i = 0; i < 5;++i) {}
697   // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
698 #pragma acc serial reduction(Begin, End)
699   for(int i = 0; i < 5;++i) {}
700   // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
701 #pragma acc serial reduction(Begin, End)
702   for(int i = 0; i < 5;++i) {}
703 #pragma acc serial reduction(+:Begin)
704   for(int i = 0; i < 5;++i) {}
705 #pragma acc serial reduction(+:Begin, End)
706   for(int i = 0; i < 5;++i) {}
707 #pragma acc serial reduction(*: Begin, End)
708   for(int i = 0; i < 5;++i) {}
709 #pragma acc serial reduction(max : Begin, End)
710   for(int i = 0; i < 5;++i) {}
711 #pragma acc serial reduction(min: Begin, End)
712   for(int i = 0; i < 5;++i) {}
713 #pragma acc serial reduction(&: Begin, End)
714   for(int i = 0; i < 5;++i) {}
715 #pragma acc serial reduction(|: Begin, End)
716   for(int i = 0; i < 5;++i) {}
717 #pragma acc serial reduction(^: Begin, End)
718   for(int i = 0; i < 5;++i) {}
719 #pragma acc serial self, reduction(&&: Begin, End)
720   for(int i = 0; i < 5;++i) {}
721 #pragma acc serial reduction(||: Begin, End), self
722   for(int i = 0; i < 5;++i) {}
723 }
724 
725 int returns_int();
726 
727 void IntExprParsing() {
728   // expected-error@+1{{expected '('}}
729 #pragma acc parallel vector_length
730   {}
731 
732   // expected-error@+1{{expected expression}}
733 #pragma acc parallel vector_length()
734   {}
735 
736   // expected-error@+1{{use of undeclared identifier 'invalid'}}
737 #pragma acc parallel vector_length(invalid)
738   {}
739 
740   // expected-error@+2{{expected ')'}}
741   // expected-note@+1{{to match this '('}}
742 #pragma acc parallel vector_length(5, 4)
743   {}
744 
745 #pragma acc parallel vector_length(5)
746   {}
747 
748 #pragma acc parallel vector_length(returns_int())
749   {}
750 
751   // expected-error@+1{{expected '('}}
752 #pragma acc parallel num_gangs
753   {}
754 
755   // expected-error@+1{{expected expression}}
756 #pragma acc parallel num_gangs()
757   {}
758 
759   // expected-error@+1{{use of undeclared identifier 'invalid'}}
760 #pragma acc parallel num_gangs(invalid)
761   {}
762 
763 #pragma acc parallel num_gangs(5, 4)
764   {}
765 
766 #pragma acc parallel num_gangs(5)
767   {}
768 
769 #pragma acc parallel num_gangs(returns_int())
770   {}
771 
772   // expected-error@+1{{expected '('}}
773 #pragma acc parallel num_workers
774   {}
775 
776   // expected-error@+1{{expected expression}}
777 #pragma acc parallel num_workers()
778   {}
779 
780   // expected-error@+1{{use of undeclared identifier 'invalid'}}
781 #pragma acc parallel num_workers(invalid)
782   {}
783 
784   // expected-error@+2{{expected ')'}}
785   // expected-note@+1{{to match this '('}}
786 #pragma acc parallel num_workers(5, 4)
787   {}
788 
789 #pragma acc parallel num_workers(5)
790   {}
791 
792 #pragma acc parallel num_workers(returns_int())
793   {}
794 
795   // expected-error@+1{{expected '('}}
796 #pragma acc init device_num
797 
798   // expected-error@+1{{expected expression}}
799 #pragma acc init device_num()
800 
801   // expected-error@+1{{use of undeclared identifier 'invalid'}}
802 #pragma acc init device_num(invalid)
803 
804   // expected-error@+2{{expected ')'}}
805   // expected-note@+1{{to match this '('}}
806 #pragma acc init device_num(5, 4)
807 
808 #pragma acc init device_num(5)
809 
810 #pragma acc init device_num(returns_int())
811 
812   // expected-error@+2{{expected '('}}
813   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
814 #pragma acc set default_async
815 
816   // expected-error@+2{{expected expression}}
817   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
818 #pragma acc set default_async()
819 
820   // expected-error@+2{{use of undeclared identifier 'invalid'}}
821   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
822 #pragma acc set default_async(invalid)
823 
824   // expected-error@+3{{expected ')'}}
825   // expected-note@+2{{to match this '('}}
826   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
827 #pragma acc set default_async(5, 4)
828 
829 #pragma acc set default_async(5)
830 
831 #pragma acc set default_async(returns_int())
832 
833 
834 #pragma acc loop vector
835   for(int i = 0; i < 5;++i);
836   // expected-error@+1{{expected expression}}
837 #pragma acc loop vector()
838   for(int i = 0; i < 5;++i);
839   // expected-error@+2{{invalid tag 'invalid' on 'vector' clause}}
840   // expected-error@+1{{expected expression}}
841 #pragma acc loop vector(invalid:)
842   for(int i = 0; i < 5;++i);
843   // expected-error@+1{{invalid tag 'invalid' on 'vector' clause}}
844 #pragma acc loop vector(invalid:5)
845   for(int i = 0; i < 5;++i);
846   // expected-error@+1{{expected expression}}
847 #pragma acc loop vector(length:)
848   for(int i = 0; i < 5;++i);
849   // expected-error@+2{{invalid tag 'num' on 'vector' clause}}
850   // expected-error@+1{{expected expression}}
851 #pragma acc loop vector(num:)
852   for(int i = 0; i < 5;++i);
853   // expected-error@+2{{expected ')'}}
854   // expected-note@+1{{to match this '('}}
855 #pragma acc loop vector(5, 4)
856   for(int i = 0; i < 5;++i);
857   // expected-error@+2{{expected ')'}}
858   // expected-note@+1{{to match this '('}}
859 #pragma acc loop vector(length:6,4)
860   for(int i = 0; i < 5;++i);
861   // expected-error@+3{{invalid tag 'num' on 'vector' clause}}
862   // expected-error@+2{{expected ')'}}
863   // expected-note@+1{{to match this '('}}
864 #pragma acc loop vector(num:6,4)
865   for(int i = 0; i < 5;++i);
866 #pragma acc loop vector(5)
867   for(int i = 0; i < 5;++i);
868   // expected-error@+1{{invalid tag 'num' on 'vector' clause}}
869 #pragma acc loop vector(num:5)
870   for(int i = 0; i < 5;++i);
871 #pragma acc loop vector(length:5)
872   for(int i = 0; i < 5;++i);
873 #pragma acc loop vector(returns_int())
874   for(int i = 0; i < 5;++i);
875 #pragma acc loop vector(length:returns_int())
876   for(int i = 0; i < 5;++i);
877 
878 #pragma acc loop worker
879   for(int i = 0; i < 5;++i);
880   // expected-error@+1{{expected expression}}
881 #pragma acc loop worker()
882   for(int i = 0; i < 5;++i);
883   // expected-error@+2{{invalid tag 'invalid' on 'worker' clause}}
884   // expected-error@+1{{expected expression}}
885 #pragma acc loop worker(invalid:)
886   for(int i = 0; i < 5;++i);
887 #pragma acc kernels
888   // expected-error@+1{{invalid tag 'invalid' on 'worker' clause}}
889 #pragma acc loop worker(invalid:5)
890   for(int i = 0; i < 5;++i);
891   // expected-error@+1{{expected expression}}
892 #pragma acc loop worker(num:)
893   for(int i = 0; i < 5;++i);
894   // expected-error@+2{{invalid tag 'length' on 'worker' clause}}
895   // expected-error@+1{{expected expression}}
896 #pragma acc loop worker(length:)
897   for(int i = 0; i < 5;++i);
898   // expected-error@+2{{expected ')'}}
899   // expected-note@+1{{to match this '('}}
900 #pragma acc loop worker(5, 4)
901   for(int i = 0; i < 5;++i);
902   // expected-error@+2{{expected ')'}}
903   // expected-note@+1{{to match this '('}}
904 #pragma acc loop worker(num:6,4)
905   for(int i = 0; i < 5;++i);
906   // expected-error@+3{{invalid tag 'length' on 'worker' clause}}
907   // expected-error@+2{{expected ')'}}
908   // expected-note@+1{{to match this '('}}
909 #pragma acc loop worker(length:6,4)
910   for(int i = 0; i < 5;++i);
911 #pragma acc kernels
912 #pragma acc loop worker(5)
913   for(int i = 0; i < 5;++i);
914 #pragma acc kernels
915   // expected-error@+1{{invalid tag 'length' on 'worker' clause}}
916 #pragma acc loop worker(length:5)
917   for(int i = 0; i < 5;++i);
918 #pragma acc kernels
919 #pragma acc loop worker(num:5)
920   for(int i = 0; i < 5;++i);
921 #pragma acc kernels
922 #pragma acc loop worker(returns_int())
923   for(int i = 0; i < 5;++i);
924 #pragma acc kernels
925   // expected-error@+1{{invalid tag 'length' on 'worker' clause}}
926 #pragma acc loop worker(length:returns_int())
927   for(int i = 0; i < 5;++i);
928 }
929 
930 void device_type() {
931   // expected-error@+1{{expected '('}}
932 #pragma acc parallel device_type
933   {}
934   // expected-error@+1{{expected '('}}
935 #pragma acc parallel dtype
936   {}
937 
938   // expected-error@+3{{expected identifier}}
939   // expected-error@+2{{expected ')'}}
940   // expected-note@+1{{to match this '('}}
941 #pragma acc parallel device_type(
942     {}
943   // expected-error@+3{{expected identifier}}
944   // expected-error@+2{{expected ')'}}
945   // expected-note@+1{{to match this '('}}
946 #pragma acc parallel dtype(
947   {}
948 
949   // expected-error@+1{{expected identifier}}
950 #pragma acc parallel device_type()
951   {}
952   // expected-error@+1{{expected identifier}}
953 #pragma acc parallel dtype()
954   {}
955 
956   // expected-error@+2{{expected ')'}}
957   // expected-note@+1{{to match this '('}}
958 #pragma acc parallel device_type(*
959   {}
960   // expected-error@+2{{expected ')'}}
961   // expected-note@+1{{to match this '('}}
962 #pragma acc parallel dtype(*
963   {}
964 
965   // expected-error@+2{{expected ')'}}
966   // expected-note@+1{{to match this '('}}
967 #pragma acc parallel device_type(ident
968   {}
969   // expected-error@+2{{expected ')'}}
970   // expected-note@+1{{to match this '('}}
971 #pragma acc parallel dtype(ident
972   {}
973 
974   // expected-error@+3{{expected ','}}
975   // expected-error@+2{{expected ')'}}
976   // expected-note@+1{{to match this '('}}
977 #pragma acc parallel device_type(ident ident2
978   {}
979   // expected-error@+3{{expected ','}}
980   // expected-error@+2{{expected ')'}}
981   // expected-note@+1{{to match this '('}}
982 #pragma acc parallel dtype(ident ident2
983   {}
984 
985   // expected-error@+2{{expected ')'}}
986   // expected-note@+1{{to match this '('}}
987 #pragma acc parallel device_type(ident, ident2
988   {}
989   // expected-error@+2{{expected ')'}}
990   // expected-note@+1{{to match this '('}}
991 #pragma acc parallel dtype(ident, ident2
992   {}
993 
994   // expected-error@+1{{expected identifier}}
995 #pragma acc parallel device_type(ident, ident2,)
996   {}
997   // expected-error@+1{{expected identifier}}
998 #pragma acc parallel dtype(ident, ident2,)
999   {}
1000 
1001   // expected-error@+2{{expected ')'}}
1002   // expected-note@+1{{to match this '('}}
1003 #pragma acc parallel device_type(*,)
1004   {}
1005   // expected-error@+2{{expected ')'}}
1006   // expected-note@+1{{to match this '('}}
1007 #pragma acc parallel dtype(*,)
1008   {}
1009 
1010   // expected-error@+2{{expected ')'}}
1011   // expected-note@+1{{to match this '('}}
1012 #pragma acc parallel device_type(*,ident)
1013   {}
1014   // expected-error@+2{{expected ')'}}
1015   // expected-note@+1{{to match this '('}}
1016 #pragma acc parallel dtype(*,ident)
1017   {}
1018 
1019   // expected-error@+1{{expected identifier}}
1020 #pragma acc parallel device_type(ident, *)
1021   {}
1022   // expected-error@+1{{expected identifier}}
1023 #pragma acc parallel dtype(ident, *)
1024   {}
1025 
1026   // expected-error@+1{{expected identifier}}
1027 #pragma acc parallel device_type("foo", 54)
1028   {}
1029   // expected-error@+1{{expected identifier}}
1030 #pragma acc parallel dtype(31, "bar")
1031   {}
1032 
1033 #pragma acc parallel device_type(ident, auto, int, float)
1034   {}
1035 #pragma acc parallel dtype(ident, auto, int, float)
1036   {}
1037 
1038 #pragma acc parallel device_type(ident, auto, int, float) dtype(ident, auto, int, float)
1039   {}
1040 }
1041 
1042 #define acc_async_sync -1
1043 void AsyncArgument() {
1044 #pragma acc parallel async
1045   {}
1046 
1047   // expected-error@+1{{expected expression}}
1048 #pragma acc parallel async()
1049   {}
1050 
1051   // expected-error@+1{{use of undeclared identifier 'invalid'}}
1052 #pragma acc parallel async(invalid)
1053   {}
1054 
1055   // expected-error@+2{{expected ')'}}
1056   // expected-note@+1{{to match this '('}}
1057 #pragma acc parallel async(4, 3)
1058   {}
1059 
1060 #pragma acc parallel async(returns_int())
1061   {}
1062 
1063 #pragma acc parallel async(5)
1064   {}
1065 
1066 #pragma acc parallel async(acc_async_sync)
1067   {}
1068 }
1069 
1070 void Tile() {
1071 
1072   int* Foo;
1073   // expected-error@+1{{expected '('}}
1074 #pragma acc loop tile
1075   for(int i = 0; i < 5;++i) {}
1076   // expected-error@+3{{expected expression}}
1077   // expected-error@+2{{expected ')'}}
1078   // expected-note@+1{{to match this '('}}
1079 #pragma acc loop tile(
1080   for(int i = 0; i < 5;++i) {}
1081   // expected-error@+1{{expected expression}}
1082 #pragma acc loop tile()
1083   for(int i = 0; i < 5;++i) {}
1084   // expected-error@+3{{expected expression}}
1085   // expected-error@+2{{expected ')'}}
1086   // expected-note@+1{{to match this '('}}
1087 #pragma acc loop tile(,
1088   for(int i = 0; i < 5;++i) {}
1089   // expected-error@+1{{expected expression}}
1090 #pragma acc loop tile(,)
1091   for(int i = 0; i < 5;++i) {}
1092   // expected-error@+1{{use of undeclared identifier 'invalid'}}
1093 #pragma acc loop tile(returns_int(), *, invalid, *)
1094   for(int i = 0; i < 5;++i) {}
1095 
1096   // expected-error@+1{{expected expression}}
1097 #pragma acc loop tile(returns_int() *, Foo, *)
1098   for(int i = 0; i < 5;++i) {}
1099 
1100   // expected-error@+1{{indirection requires pointer operand ('int' invalid)}}
1101 #pragma acc loop tile(* returns_int() , *)
1102   for(int j = 0; j < 5;++j){
1103     for(int i = 0; i < 5;++i);
1104   }
1105 
1106 #pragma acc loop tile(*)
1107   for(int i = 0; i < 5;++i) {}
1108   // expected-error@+1{{OpenACC 'tile' clause size expression must be an asterisk or a constant expression}}
1109 #pragma acc loop tile(*Foo, *Foo)
1110   for(int i = 0; i < 5;++i) {}
1111 #pragma acc loop tile(5)
1112   for(int i = 0; i < 5;++i) {}
1113 #pragma acc loop tile(*, 5)
1114   for(int j = 0; j < 5;++j){
1115     for(int i = 0; i < 5;++i);
1116   }
1117 #pragma acc loop tile(5, *)
1118   for(int j = 0; j < 5;++j){
1119     for(int i = 0; i < 5;++i);
1120   }
1121 #pragma acc loop tile(5, *, 3, *)
1122   for(int j = 0; j < 5;++j){
1123     for(int k = 0; k < 5;++k)
1124       for(int l = 0;l < 5;++l)
1125         for(int i = 0; i < 5;++i);
1126   }
1127 }
1128 
1129 void Gang() {
1130 #pragma acc loop gang
1131   for(int i = 0; i < 5;++i) {}
1132   // expected-error@+3{{expected expression}}
1133   // expected-error@+2{{expected ')'}}
1134   // expected-note@+1{{to match this '('}}
1135 #pragma acc loop gang(
1136   for(int i = 0; i < 5;++i) {}
1137   // expected-error@+1{{expected expression}}
1138 #pragma acc loop gang()
1139   for(int i = 0; i < 5;++i) {}
1140 
1141   // expected-error@+1{{expected expression}}
1142 #pragma acc loop gang(5, *)
1143   for(int i = 0; i < 5;++i) {}
1144 
1145   // expected-error@+1{{expected expression}}
1146 #pragma acc loop gang(*)
1147   for(int i = 0; i < 5;++i) {}
1148 
1149   // expected-error@+1{{expected expression}}
1150 #pragma acc loop gang(5, num:*)
1151   for(int i = 0; i < 5;++i) {}
1152 
1153   // expected-error@+1{{expected expression}}
1154 #pragma acc loop gang(num:5, *)
1155   for(int i = 0; i < 5;++i) {}
1156 
1157   // expected-error@+1{{expected expression}}
1158 #pragma acc loop gang(num:5, num:*)
1159   for(int i = 0; i < 5;++i) {}
1160 
1161   // expected-error@+1{{expected expression}}
1162 #pragma acc loop gang(num:*)
1163   for(int i = 0; i < 5;++i) {}
1164 
1165 #pragma acc loop gang(dim:2)
1166   for(int i = 0; i < 5;++i) {}
1167 
1168   // expected-error@+1{{expected expression}}
1169 #pragma acc loop gang(dim:5, dim:*)
1170   for(int i = 0; i < 5;++i) {}
1171 
1172   // expected-error@+1{{expected expression}}
1173 #pragma acc loop gang(dim:*)
1174   for(int i = 0; i < 5;++i) {}
1175 
1176 #pragma acc loop gang(static:*)
1177   for(int i = 0; i < 5;++i) {}
1178 
1179   // expected-error@+2{{OpenACC 'gang' clause may have at most one 'static' argument}}
1180   // expected-note@+1{{previous expression is here}}
1181 #pragma acc loop gang(static:*, static:5)
1182   for(int i = 0; i < 5;++i) {}
1183 
1184 #pragma acc kernels
1185 #pragma acc loop gang(static:*, 5)
1186   for(int i = 0; i < 5;++i) {}
1187 
1188 #pragma acc kernels
1189 #pragma acc loop gang(static:45, 5)
1190   for(int i = 0; i < 5;++i) {}
1191 
1192   // expected-error@+3{{expected expression}}
1193   // expected-error@+2{{expected ')'}}
1194   // expected-note@+1{{to match this '('}}
1195 #pragma acc loop gang(static:45,
1196   for(int i = 0; i < 5;++i) {}
1197 
1198   // expected-error@+2{{expected ')'}}
1199   // expected-note@+1{{to match this '('}}
1200 #pragma acc loop gang(static:45
1201   for(int i = 0; i < 5;++i) {}
1202 
1203   // expected-error@+3{{expected expression}}
1204   // expected-error@+2{{expected ')'}}
1205   // expected-note@+1{{to match this '('}}
1206 #pragma acc loop gang(static:*,
1207   for(int i = 0; i < 5;++i) {}
1208 
1209   // expected-error@+2{{expected ')'}}
1210   // expected-note@+1{{to match this '('}}
1211 #pragma acc loop gang(static:*
1212   for(int i = 0; i < 5;++i) {}
1213 
1214   // expected-error@+3{{expected expression}}
1215   // expected-error@+2{{expected ')'}}
1216   // expected-note@+1{{to match this '('}}
1217 #pragma acc loop gang(45,
1218   for(int i = 0; i < 5;++i) {}
1219 
1220   // expected-error@+2{{expected ')'}}
1221   // expected-note@+1{{to match this '('}}
1222 #pragma acc loop gang(45
1223   for(int i = 0; i < 5;++i) {}
1224 
1225   // expected-error@+3{{expected expression}}
1226   // expected-error@+2{{expected ')'}}
1227   // expected-note@+1{{to match this '('}}
1228 #pragma acc loop gang(num:45,
1229   for(int i = 0; i < 5;++i) {}
1230 
1231   // expected-error@+2{{expected ')'}}
1232   // expected-note@+1{{to match this '('}}
1233 #pragma acc loop gang(num:45
1234   for(int i = 0; i < 5;++i) {}
1235 
1236   // expected-error@+3{{expected expression}}
1237   // expected-error@+2{{expected ')'}}
1238   // expected-note@+1{{to match this '('}}
1239 #pragma acc loop gang(dim:45,
1240   for(int i = 0; i < 5;++i) {}
1241 
1242   // expected-error@+2{{expected ')'}}
1243   // expected-note@+1{{to match this '('}}
1244 #pragma acc loop gang(dim:45
1245   for(int i = 0; i < 5;++i) {}
1246 
1247 #pragma acc kernels
1248 #pragma acc loop gang(static:*, 5)
1249   for(int i = 0; i < 5;++i) {}
1250 
1251   // expected-error@+1{{argument to 'gang' clause dimension must be a constant expression}}
1252 #pragma acc loop gang(static:*, dim:returns_int())
1253   for(int i = 0; i < 5;++i) {}
1254 
1255   // expected-error@+2 2{{'num' argument on 'gang' clause is not permitted on an orphaned 'loop' construct}}
1256   // expected-error@+1{{argument to 'gang' clause dimension must be a constant expression}}
1257 #pragma acc loop gang(num: 32, static:*, dim:returns_int(), 5)
1258   for(int i = 0; i < 5;++i) {}
1259 
1260 }
1261 
1262   // expected-warning@+5{{OpenACC clause 'worker' not yet implemented, clause ignored}}
1263   // expected-warning@+4{{OpenACC clause 'vector' not yet implemented, clause ignored}}
1264   // expected-warning@+3{{OpenACC clause 'seq' not yet implemented, clause ignored}}
1265   // expected-warning@+2{{OpenACC clause 'nohost' not yet implemented, clause ignored}}
1266   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1267 #pragma acc routine worker, vector, seq, nohost
1268 void bar();
1269 
1270   // expected-warning@+5{{OpenACC clause 'worker' not yet implemented, clause ignored}}
1271   // expected-warning@+4{{OpenACC clause 'vector' not yet implemented, clause ignored}}
1272   // expected-warning@+3{{OpenACC clause 'seq' not yet implemented, clause ignored}}
1273   // expected-warning@+2{{OpenACC clause 'nohost' not yet implemented, clause ignored}}
1274   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1275 #pragma acc routine(bar) worker, vector, seq, nohost
1276 
1277 
1278 // Bind Clause Parsing.
1279 
1280   // expected-error@+2{{expected '('}}
1281   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1282 #pragma acc routine bind
1283 void BCP1();
1284 
1285   // expected-error@+2{{expected identifier or string literal}}
1286   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1287 #pragma acc routine(BCP1) bind()
1288 
1289   // expected-warning@+2{{OpenACC clause 'bind' not yet implemented, clause ignored}}
1290   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1291 #pragma acc routine bind("ReductionClauseParsing")
1292 void BCP2();
1293 
1294   // expected-warning@+2{{OpenACC clause 'bind' not yet implemented, clause ignored}}
1295   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1296 #pragma acc routine(BCP1) bind(BCP2)
1297 
1298   // expected-error@+2{{use of undeclared identifier 'unknown_thing'}}
1299   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1300 #pragma acc routine(BCP1) bind(unknown_thing)
1301