xref: /llvm-project/clang/test/ParserOpenACC/parse-clauses.c (revision 553fa204ed5ab4c48bc6080451df24310c00e69c)
1fdee0a35SErich Keane // RUN: %clang_cc1 %s -verify -fopenacc -std=c99
2fdee0a35SErich Keane // RUNX: %clang_cc1 %s -verify -fopenacc
3fdee0a35SErich Keane // RUNX: %clang_cc1 %s -verify -fopenacc -x c++
4fdee0a35SErich Keane 
5fdee0a35SErich Keane void func() {
6fdee0a35SErich Keane 
7bfc2dbe0Serichkeane   // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
8003eb5e8Serichkeane #pragma acc exit data finalize
9fdee0a35SErich Keane 
10bfc2dbe0Serichkeane   // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
11003eb5e8Serichkeane #pragma acc exit data finalize finalize
12fdee0a35SErich Keane 
13bfc2dbe0Serichkeane   // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
14010d0115Serichkeane   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
15003eb5e8Serichkeane #pragma acc exit data finalize invalid
16fdee0a35SErich Keane 
17bfc2dbe0Serichkeane   // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
18010d0115Serichkeane   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
19003eb5e8Serichkeane #pragma acc exit data finalize invalid invalid finalize
20fdee0a35SErich Keane 
21bfc2dbe0Serichkeane   // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
22003eb5e8Serichkeane #pragma acc exit data wait finalize
23fdee0a35SErich Keane 
24bfc2dbe0Serichkeane   // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}
25fdee0a35SErich Keane #pragma acc host_data if_present
26fdee0a35SErich Keane 
27bfc2dbe0Serichkeane   // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}
28fdee0a35SErich Keane #pragma acc host_data if_present, if_present
29fdee0a35SErich Keane 
302b939e18Serichkeane   // expected-error@+4{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}}
312b939e18Serichkeane   // expected-note@+3{{previous clause is here}}
322b939e18Serichkeane   // expected-error@+2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}}
332b939e18Serichkeane   // expected-note@+1{{previous clause is here}}
34fdee0a35SErich Keane #pragma acc loop seq independent auto
35b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
36fdee0a35SErich Keane 
372b939e18Serichkeane   // expected-error@+4{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}}
382b939e18Serichkeane   // expected-note@+3{{previous clause is here}}
392b939e18Serichkeane   // expected-error@+2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}}
402b939e18Serichkeane   // expected-note@+1{{previous clause is here}}
41fdee0a35SErich Keane #pragma acc loop seq, independent auto
42b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
43fdee0a35SErich Keane 
442b939e18Serichkeane   // expected-error@+4{{OpenACC clause 'independent' on 'loop' construct conflicts with previous data dependence clause}}
452b939e18Serichkeane   // expected-note@+3{{previous clause is here}}
462b939e18Serichkeane   // expected-error@+2{{OpenACC clause 'auto' on 'loop' construct conflicts with previous data dependence clause}}
472b939e18Serichkeane   // expected-note@+1{{previous clause is here}}
48fdee0a35SErich Keane #pragma acc loop seq independent, auto
49b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
50fdee0a35SErich Keane 
51a86d00cfSerichkeane   // expected-error@+3{{OpenACC clause 'independent' on 'kernels loop' construct conflicts with previous data dependence clause}}
52a86d00cfSerichkeane   // expected-error@+2{{OpenACC clause 'auto' on 'kernels loop' construct conflicts with previous data dependence clause}}
53a86d00cfSerichkeane   // expected-note@+1 2{{previous clause is here}}
54fdee0a35SErich Keane #pragma acc kernels loop seq independent auto
55b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
56fdee0a35SErich Keane 
57a86d00cfSerichkeane   // expected-error@+3{{OpenACC clause 'independent' on 'serial loop' construct conflicts with previous data dependence clause}}
58a86d00cfSerichkeane   // expected-error@+2{{OpenACC clause 'auto' on 'serial loop' construct conflicts with previous data dependence clause}}
59a86d00cfSerichkeane   // expected-note@+1 2{{previous clause is here}}
60fdee0a35SErich Keane #pragma acc serial loop seq, independent auto
61b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
62fdee0a35SErich Keane 
63a86d00cfSerichkeane   // expected-error@+3{{OpenACC clause 'independent' on 'parallel loop' construct conflicts with previous data dependence clause}}
64a86d00cfSerichkeane   // expected-error@+2{{OpenACC clause 'auto' on 'parallel loop' construct conflicts with previous data dependence clause}}
65a86d00cfSerichkeane   // expected-note@+1 2{{previous clause is here}}
66fdee0a35SErich Keane #pragma acc parallel loop seq independent, auto
67b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
68fdee0a35SErich Keane 
69fdee0a35SErich Keane 
7042f4e505SErich Keane   // expected-error@+1{{expected identifier}}
7142f4e505SErich Keane #pragma acc loop , seq
72b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
7342f4e505SErich Keane 
742b939e18Serichkeane   // expected-error@+1{{expected identifier}}
75fdee0a35SErich Keane #pragma acc loop seq,
76b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
77fdee0a35SErich Keane 
7842f4e505SErich Keane   // expected-error@+1{{expected '('}}
793a82a1c3Serichkeane #pragma acc loop collapse
80b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
813a82a1c3Serichkeane 
8242f4e505SErich Keane   // expected-error@+1{{expected expression}}
833a82a1c3Serichkeane #pragma acc loop collapse()
84b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
853a82a1c3Serichkeane 
8642f4e505SErich Keane   // expected-error@+2{{invalid tag 'unknown' on 'collapse' clause}}
8742f4e505SErich Keane   // expected-error@+1{{expected expression}}
883a82a1c3Serichkeane #pragma acc loop collapse(unknown:)
89b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
903a82a1c3Serichkeane 
9142f4e505SErich Keane   // expected-error@+1{{expected expression}}
923a82a1c3Serichkeane #pragma acc loop collapse(force:)
93b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
943a82a1c3Serichkeane 
9597da34e0SErich Keane   // expected-error@+1{{invalid tag 'unknown' on 'collapse' clause}}
9697da34e0SErich Keane #pragma acc loop collapse(unknown:1)
97b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
983a82a1c3Serichkeane 
9997da34e0SErich Keane #pragma acc loop collapse(force:1)
100b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1013a82a1c3Serichkeane 
10297da34e0SErich Keane #pragma acc loop collapse(1)
103b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1043a82a1c3Serichkeane 
10542f4e505SErich Keane   // expected-error@+2{{expected ')'}}
10642f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1073a82a1c3Serichkeane #pragma acc loop collapse(5, 6)
108b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
109fdee0a35SErich Keane }
110fdee0a35SErich Keane 
1110e8b09c4SErich Keane void DefaultClause() {
11239351f8eSerichkeane   // expected-error@+1{{expected '('}}
1130e8b09c4SErich Keane #pragma acc serial loop default
114b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1150e8b09c4SErich Keane 
11626fee0ffSErich Keane   // expected-error@+1{{expected '('}}
1172b939e18Serichkeane #pragma acc serial default self
118b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1190e8b09c4SErich Keane 
1202b939e18Serichkeane   // expected-error@+1{{expected '('}}
1212b939e18Serichkeane #pragma acc serial default, self
122b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1230e8b09c4SErich Keane 
12426fee0ffSErich Keane   // expected-error@+3{{expected identifier}}
12526fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
12626fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
1270e8b09c4SErich Keane #pragma acc serial default(
128b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1290e8b09c4SErich Keane 
13026fee0ffSErich Keane   // expected-error@+3{{invalid value for 'default' clause; expected 'present' or 'none'}}
13126fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
13226fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
1332b939e18Serichkeane #pragma acc serial default( self
134b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1350e8b09c4SErich Keane 
13626fee0ffSErich Keane   // expected-error@+3{{expected identifier}}
13726fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
13826fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
1392b939e18Serichkeane #pragma acc serial default(, self
140b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1410e8b09c4SErich Keane 
14226fee0ffSErich Keane   // expected-error@+2{{expected '('}}
14326fee0ffSErich Keane   // expected-error@+1{{expected identifier}}
1440e8b09c4SErich Keane #pragma acc serial default)
145b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1460e8b09c4SErich Keane 
14726fee0ffSErich Keane   // expected-error@+2{{expected '('}}
14826fee0ffSErich Keane   // expected-error@+1{{expected identifier}}
1492b939e18Serichkeane #pragma acc serial default), self
150b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1510e8b09c4SErich Keane 
1520c7b92a4SErich Keane   // expected-error@+1{{expected identifier}}
1530e8b09c4SErich Keane #pragma acc serial default()
154b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1550e8b09c4SErich Keane 
1562b939e18Serichkeane   // expected-error@+1{{expected identifier}}
1572b939e18Serichkeane #pragma acc serial default() self
158b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1590e8b09c4SErich Keane 
1602b939e18Serichkeane   // expected-error@+1{{expected identifier}}
1612b939e18Serichkeane #pragma acc serial default(), self
162b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1630e8b09c4SErich Keane 
1640c7b92a4SErich Keane   // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}
165bb97c992Serichkeane #pragma acc serial default(invalid)
166b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
167bb97c992Serichkeane 
1682b939e18Serichkeane   // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}
1692b939e18Serichkeane #pragma acc serial default(auto) self
170b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1710e8b09c4SErich Keane 
1722b939e18Serichkeane   // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}
1732b939e18Serichkeane #pragma acc serial default(invalid), self
174b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1750e8b09c4SErich Keane 
1760e8b09c4SErich Keane #pragma acc serial default(none)
177b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1780e8b09c4SErich Keane 
1792b939e18Serichkeane #pragma acc serial default(present), self
180b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
181e6b7c8c4Serichkeane }
1820e8b09c4SErich Keane 
183e6b7c8c4Serichkeane void IfClause() {
1842b939e18Serichkeane   int i, j;
18539351f8eSerichkeane   // expected-error@+1{{expected '('}}
186e6b7c8c4Serichkeane #pragma acc serial loop if
187b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1880e8b09c4SErich Keane 
18926fee0ffSErich Keane   // expected-error@+1{{expected '('}}
1902b939e18Serichkeane #pragma acc serial if private(i)
191b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
192e6b7c8c4Serichkeane 
1932b939e18Serichkeane   // expected-error@+1{{expected '('}}
1942b939e18Serichkeane #pragma acc serial if, private(i)
195b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
196e6b7c8c4Serichkeane 
19726fee0ffSErich Keane   // expected-error@+3{{expected expression}}
19826fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
19926fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
200e6b7c8c4Serichkeane #pragma acc serial if(
201b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
202e6b7c8c4Serichkeane 
2032b939e18Serichkeane   // expected-error@+3{{use of undeclared identifier 'self'}}
20426fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
20526fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
2062b939e18Serichkeane #pragma acc serial if( self
207b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
208e6b7c8c4Serichkeane 
20926fee0ffSErich Keane   // expected-error@+4{{expected expression}}
2102b939e18Serichkeane   // expected-error@+3{{use of undeclared identifier 'self'}}
21126fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
21226fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
2132b939e18Serichkeane #pragma acc serial if(, self
214b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
215e6b7c8c4Serichkeane 
21626fee0ffSErich Keane   // expected-error@+2{{expected '('}}
21726fee0ffSErich Keane   // expected-error@+1{{expected identifier}}
218e6b7c8c4Serichkeane #pragma acc serial if)
219b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
220e6b7c8c4Serichkeane 
22126fee0ffSErich Keane   // expected-error@+2{{expected '('}}
22226fee0ffSErich Keane   // expected-error@+1{{expected identifier}}
2232b939e18Serichkeane #pragma acc serial if) private(i)
224b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
225e6b7c8c4Serichkeane 
22626fee0ffSErich Keane   // expected-error@+2{{expected '('}}
22726fee0ffSErich Keane   // expected-error@+1{{expected identifier}}
2282b939e18Serichkeane #pragma acc serial if), private(i)
229b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
230e6b7c8c4Serichkeane 
23126fee0ffSErich Keane   // expected-error@+1{{expected expression}}
232bb97c992Serichkeane #pragma acc serial if()
233b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
234bb97c992Serichkeane 
2352b939e18Serichkeane   // expected-error@+1{{expected expression}}
2362b939e18Serichkeane #pragma acc serial if() private(i)
237b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
238e6b7c8c4Serichkeane 
2392b939e18Serichkeane   // expected-error@+1{{expected expression}}
2402b939e18Serichkeane #pragma acc serial if(), private(i)
241b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
242e6b7c8c4Serichkeane 
24326fee0ffSErich Keane   // expected-error@+1{{use of undeclared identifier 'invalid_expr'}}
244e6b7c8c4Serichkeane #pragma acc serial if(invalid_expr)
245b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
246e6b7c8c4Serichkeane 
2472b939e18Serichkeane   // expected-error@+1{{expected expression}}
2482b939e18Serichkeane #pragma acc serial if() private(i)
249b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
250e6b7c8c4Serichkeane 
251e6b7c8c4Serichkeane #pragma acc serial if(i > j)
252b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
253e6b7c8c4Serichkeane 
2542b939e18Serichkeane #pragma acc serial if(1+5>3), private(i)
255b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
2560e8b09c4SErich Keane }
2570e8b09c4SErich Keane 
258db4ea21dSerichkeane void SelfClause() {
25987f67c25Serichkeane #pragma acc serial loop self
260b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
26187f67c25Serichkeane 
26287f67c25Serichkeane #pragma acc serial loop self, seq
263b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
26487f67c25Serichkeane 
26539351f8eSerichkeane   // expected-error@+3{{expected expression}}
26639351f8eSerichkeane   // expected-error@+2{{expected ')'}}
26739351f8eSerichkeane   // expected-note@+1{{to match this '('}}
26887f67c25Serichkeane #pragma acc serial loop self(
269b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
27087f67c25Serichkeane 
27139351f8eSerichkeane   // expected-error@+3{{use of undeclared identifier 'seq'}}
27239351f8eSerichkeane   // expected-error@+2{{expected ')'}}
27339351f8eSerichkeane   // expected-note@+1{{to match this '('}}
27487f67c25Serichkeane #pragma acc serial loop self( seq
275b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
27687f67c25Serichkeane 
27739351f8eSerichkeane   // expected-error@+4{{expected expression}}
27839351f8eSerichkeane   // expected-error@+3{{use of undeclared identifier 'seq'}}
27939351f8eSerichkeane   // expected-error@+2{{expected ')'}}
28039351f8eSerichkeane   // expected-note@+1{{to match this '('}}
28187f67c25Serichkeane #pragma acc serial loop self(, seq
282b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
28387f67c25Serichkeane 
284fa20b5d3Serichkeane   // expected-error@+1{{expected identifier}}
28587f67c25Serichkeane #pragma acc serial loop self)
286b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
28787f67c25Serichkeane 
288fa20b5d3Serichkeane   // expected-error@+1{{expected identifier}}
28987f67c25Serichkeane #pragma acc serial loop self) seq
290b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
29187f67c25Serichkeane 
292fa20b5d3Serichkeane   // expected-error@+1{{expected identifier}}
29387f67c25Serichkeane #pragma acc serial loop self), seq
294b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
29587f67c25Serichkeane 
29687f67c25Serichkeane 
297a86d00cfSerichkeane   // expected-error@+1{{expected expression}}
29887f67c25Serichkeane #pragma acc serial loop self(), seq
299b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
30087f67c25Serichkeane 
30139351f8eSerichkeane   // expected-error@+2{{expected expression}}
302a86d00cfSerichkeane   // expected-error@+1{{expected expression}}
30387f67c25Serichkeane #pragma acc serial loop self(,), seq
304b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
30587f67c25Serichkeane 
306a86d00cfSerichkeane   // expected-error@+1{{use of undeclared identifier 'invalid_expr'}}
30787f67c25Serichkeane #pragma acc serial loop self(invalid_expr), seq
308b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
30987f67c25Serichkeane 
31087f67c25Serichkeane   int i, j;
31187f67c25Serichkeane 
31226fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
31326fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
31487f67c25Serichkeane #pragma acc serial self(i > j
315b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
31687f67c25Serichkeane 
31726fee0ffSErich Keane   // expected-error@+3{{use of undeclared identifier 'seq'}}
31826fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
31926fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
32087f67c25Serichkeane #pragma acc serial self(i > j, seq
321b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
32287f67c25Serichkeane 
32361338782SErich Keane   // expected-warning@+1{{left operand of comma operator has no effect}}
3249c4e7a15Serichkeane #pragma acc serial self(i, j)
325b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
3269c4e7a15Serichkeane 
32787f67c25Serichkeane #pragma acc serial self(i > j)
328b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
32987f67c25Serichkeane 
3302b939e18Serichkeane #pragma acc serial self(1+5>3), private(i)
331b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
33287f67c25Serichkeane }
33387f67c25Serichkeane 
334923f0392Serichkeane struct Members {
335923f0392Serichkeane   int value;
336923f0392Serichkeane   char array[5];
337923f0392Serichkeane };
338923f0392Serichkeane struct HasMembersArray {
339923f0392Serichkeane   struct Members MemArr[4];
340923f0392Serichkeane };
341923f0392Serichkeane 
3429c4e7a15Serichkeane // On 'update', self behaves differently and requires parens, plus takes a var-list instead.
3439c4e7a15Serichkeane void SelfUpdate() {
3449c4e7a15Serichkeane   struct Members s;
3459c4e7a15Serichkeane 
346db81e8c4Serichkeane   // expected-error@+1{{expected '('}}
347*553fa204Serichkeane #pragma acc update host(s) self
348b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
3499c4e7a15Serichkeane 
3502c2accbcSerichkeane   // expected-error@+3{{use of undeclared identifier 'zero'}}
3512c2accbcSerichkeane   // expected-error@+2{{expected ','}}
3522c2accbcSerichkeane   // expected-error@+1{{expected expression}}
3532b939e18Serichkeane #pragma acc update self(zero : s.array[s.value : 5], s.value), if_present
354b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
3559c4e7a15Serichkeane 
3562b939e18Serichkeane #pragma acc update self(s.array[s.value : 5], s.value), if_present
357b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
3589c4e7a15Serichkeane }
3599c4e7a15Serichkeane 
360923f0392Serichkeane void VarListClauses() {
36126fee0ffSErich Keane   // expected-error@+1{{expected '('}}
362bb97c992Serichkeane #pragma acc serial copy
363b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
364bb97c992Serichkeane 
3652b939e18Serichkeane   // expected-error@+1{{expected '('}}
3662b939e18Serichkeane #pragma acc serial copy, self
367b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
368923f0392Serichkeane 
36926fee0ffSErich Keane   // expected-error@+2{{expected '('}}
37026fee0ffSErich Keane   // expected-error@+1{{expected identifier}}
371923f0392Serichkeane #pragma acc serial copy)
372b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
373923f0392Serichkeane 
37426fee0ffSErich Keane   // expected-error@+2{{expected '('}}
37526fee0ffSErich Keane   // expected-error@+1{{expected identifier}}
3762b939e18Serichkeane #pragma acc serial copy), self
377b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
378923f0392Serichkeane 
37926fee0ffSErich Keane   // expected-error@+3{{expected expression}}
38026fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
38126fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
382923f0392Serichkeane #pragma acc serial copy(
383b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
384923f0392Serichkeane 
38526fee0ffSErich Keane   // expected-error@+3{{expected expression}}
38626fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
38726fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
3882b939e18Serichkeane #pragma acc serial copy(, self
389b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
390bb97c992Serichkeane 
391054f7c05Serichkeane   // expected-error@+1{{expected expression}}
392bb97c992Serichkeane #pragma acc serial copy()
393b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
394923f0392Serichkeane 
3952b939e18Serichkeane   // expected-error@+1{{expected expression}}
3962b939e18Serichkeane #pragma acc serial copy(), self
397b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
398923f0392Serichkeane 
399923f0392Serichkeane   struct Members s;
400923f0392Serichkeane   struct HasMembersArray HasMem;
401923f0392Serichkeane 
4022b939e18Serichkeane #pragma acc serial copy(s.array[s.value]), self
403b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
404923f0392Serichkeane 
4052b939e18Serichkeane #pragma acc serial copy(s.array[s.value], s.array[s.value :5] ), self
406b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
407923f0392Serichkeane 
4082b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[3].array[1]), self
409b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
410923f0392Serichkeane 
4112b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[3].array[1:4]), self
412b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
413923f0392Serichkeane 
4142b939e18Serichkeane   // expected-error@+1{{OpenACC sub-array is not allowed here}}
4152b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[1:3].array[1]), self
416b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
417923f0392Serichkeane 
4182b939e18Serichkeane   // expected-error@+1{{OpenACC sub-array is not allowed here}}
4192b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[1:3].array[1:2]), self
420b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
421923f0392Serichkeane 
4222b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[:]), self
423b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
424923f0392Serichkeane 
4252b939e18Serichkeane   // expected-error@+1{{expected expression}}
4262b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[::]), self
427b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
428db4ea21dSerichkeane 
4292b939e18Serichkeane   // expected-error@+3{{expected expression}}
4302b939e18Serichkeane   // expected-error@+2{{expected ']'}}
4312b939e18Serichkeane   // expected-note@+1{{to match this '['}}
4322b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[: :]), self
433b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
434923f0392Serichkeane 
4352b939e18Serichkeane #pragma acc serial copy(HasMem.MemArr[3:]), self
436b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
437dd5ce457Serichkeane 
438054f7c05Serichkeane   // expected-warning@+1{{OpenACC clause name 'pcopy' is a deprecated clause name and is now an alias for 'copy'}}
439054f7c05Serichkeane #pragma acc serial pcopy(HasMem.MemArr[3:])
440b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
441054f7c05Serichkeane 
442054f7c05Serichkeane   // expected-warning@+1{{OpenACC clause name 'present_or_copy' is a deprecated clause name and is now an alias for 'copy'}}
443054f7c05Serichkeane #pragma acc serial present_or_copy(HasMem.MemArr[3:])
444b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
445054f7c05Serichkeane 
446fbb14dd9Serichkeane   // expected-error@+2 2{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}
447fbb14dd9Serichkeane   // expected-error@+1{{expected ','}}
448fbb14dd9Serichkeane #pragma acc host_data use_device(s.array[s.value] s.array[s.value :5] ), if_present
449b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4507700ea10Serichkeane 
451fbb14dd9Serichkeane   // expected-error@+1{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}
452fbb14dd9Serichkeane #pragma acc host_data use_device(s.array[s.value : 5]), if_present
453fbb14dd9Serichkeane   for(int i = 0; i < 5;++i) {}
454fbb14dd9Serichkeane 
455fbb14dd9Serichkeane #pragma acc host_data use_device(HasMem), if_present
456b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4577700ea10Serichkeane 
4582b939e18Serichkeane   // expected-error@+1{{expected ','}}
4592b939e18Serichkeane #pragma acc serial no_create(s.array[s.value] s.array[s.value :5] ), self
460b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4617700ea10Serichkeane 
4622b939e18Serichkeane #pragma acc serial no_create(s.array[s.value : 5], s.value), self
463b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4642b939e18Serichkeane 
4652b939e18Serichkeane   // expected-error@+1{{expected ','}}
4662b939e18Serichkeane #pragma acc serial present(s.array[s.value] s.array[s.value :5] ), self
467b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4682b939e18Serichkeane 
4692b939e18Serichkeane #pragma acc serial present(s.array[s.value : 5], s.value), self
470b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4717700ea10Serichkeane 
47248c8a579Serichkeane 
47348c8a579Serichkeane   void *IsPointer;
4742b939e18Serichkeane   // expected-error@+4{{expected ','}}
4752b939e18Serichkeane   // expected-error@+3{{expected pointer in 'deviceptr' clause, type is 'char'}}
4762b939e18Serichkeane   // expected-error@+2{{OpenACC sub-array is not allowed here}}
4772b939e18Serichkeane   // expected-note@+1{{expected variable of pointer type}}
4782b939e18Serichkeane #pragma acc serial deviceptr(s.array[s.value] s.array[s.value :5] ), self
479b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4807700ea10Serichkeane 
4812b939e18Serichkeane #pragma acc serial deviceptr(IsPointer), self
482b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4837700ea10Serichkeane 
4842b939e18Serichkeane   // expected-error@+4{{expected ','}}
4852b939e18Serichkeane   // expected-error@+3{{expected pointer in 'attach' clause, type is 'char'}}
4862b939e18Serichkeane   // expected-error@+2{{OpenACC sub-array is not allowed here}}
4872b939e18Serichkeane   // expected-note@+1{{expected variable of pointer type}}
4882b939e18Serichkeane #pragma acc serial attach(s.array[s.value] s.array[s.value :5] ), self
489b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4907700ea10Serichkeane 
4912b939e18Serichkeane #pragma acc serial attach(IsPointer), self
492b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
4937700ea10Serichkeane 
4943351b3bfSerichkeane   // expected-error@+4{{expected ','}}
4953351b3bfSerichkeane   // expected-error@+3{{expected pointer in 'detach' clause, type is 'char'}}
4963351b3bfSerichkeane   // expected-error@+2{{OpenACC sub-array is not allowed here}}
4973351b3bfSerichkeane   // expected-note@+1{{expected variable of pointer type}}
4983351b3bfSerichkeane #pragma acc exit data copyout(s) detach(s.array[s.value] s.array[s.value :5])
4997700ea10Serichkeane 
5003351b3bfSerichkeane #pragma acc exit data copyout(s) detach(IsPointer)
5012b939e18Serichkeane 
5022b939e18Serichkeane   // expected-error@+1{{expected ','}}
5032b939e18Serichkeane #pragma acc serial private(s.array[s.value] s.array[s.value :5] ), self
504b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5052b939e18Serichkeane 
5062b939e18Serichkeane #pragma acc serial private(s.array[s.value : 5], s.value), self
507b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5082b939e18Serichkeane 
5092b939e18Serichkeane   // expected-error@+1{{expected ','}}
5102b939e18Serichkeane #pragma acc serial firstprivate(s.array[s.value] s.array[s.value :5] ), self
511b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5122b939e18Serichkeane 
5132b939e18Serichkeane #pragma acc serial firstprivate(s.array[s.value : 5], s.value), self
514b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5157700ea10Serichkeane 
5161ab81f8eSerichkeane   // expected-error@+1{{expected ','}}
517ee090cb8Serichkeane #pragma acc exit data delete(s.array[s.value] s.array[s.value :5] ) async
518b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5197700ea10Serichkeane 
520ee090cb8Serichkeane #pragma acc exit data delete(s.array[s.value : 5], s.value),async
521b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5227700ea10Serichkeane 
523f0f8434aSerichkeane   // expected-error@+2{{expected ','}}
5242b939e18Serichkeane   // expected-warning@+1{{OpenACC clause 'device_resident' not yet implemented, clause ignored}}
5252b939e18Serichkeane #pragma acc serial device_resident(s.array[s.value] s.array[s.value :5] ), self
526b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5272b939e18Serichkeane 
5282b939e18Serichkeane   // expected-warning@+1{{OpenACC clause 'device_resident' not yet implemented, clause ignored}}
5292b939e18Serichkeane #pragma acc serial device_resident(s.array[s.value : 5], s.value), self
530b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5312b939e18Serichkeane 
5322b939e18Serichkeane   // expected-error@+2{{expected ','}}
5332b939e18Serichkeane   // expected-warning@+1{{OpenACC clause 'link' not yet implemented, clause ignored}}
5342b939e18Serichkeane #pragma acc serial link(s.array[s.value] s.array[s.value :5] ), self
535b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5362b939e18Serichkeane 
5372b939e18Serichkeane   // expected-warning@+1{{OpenACC clause 'link' not yet implemented, clause ignored}}
5382b939e18Serichkeane #pragma acc serial link(s.array[s.value : 5], s.value), self
539b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5402b939e18Serichkeane 
541be32621cSerichkeane   // expected-error@+1{{expected ','}}
542be32621cSerichkeane #pragma acc update host(s.array[s.value] s.array[s.value :5] )
543b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5442b939e18Serichkeane 
545be32621cSerichkeane #pragma acc update host(s.array[s.value : 5], s.value)
546b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5472b939e18Serichkeane 
548be32621cSerichkeane   // expected-error@+1{{expected ','}}
549be32621cSerichkeane #pragma acc update device(s.array[s.value] s.array[s.value :5] )
550b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5512b939e18Serichkeane 
552be32621cSerichkeane #pragma acc update device(s.array[s.value : 5], s.value)
553b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5542b939e18Serichkeane 
5552b939e18Serichkeane   // expected-error@+1{{expected ','}}
5562b939e18Serichkeane #pragma acc serial copyout(s.array[s.value] s.array[s.value :5] ), self
557b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5582b939e18Serichkeane 
5592b939e18Serichkeane #pragma acc serial copyout(s.array[s.value : 5], s.value), self
560b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5612b939e18Serichkeane 
5622b939e18Serichkeane #pragma acc serial copyout(zero:s.array[s.value : 5], s.value), self
563b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
564eca25bbdSerichkeane 
56501e91a2dSerichkeane   // expected-warning@+1{{OpenACC clause name 'pcopyout' is a deprecated clause name and is now an alias for 'copyout'}}
56601e91a2dSerichkeane #pragma acc serial pcopyout(s.array[s.value : 5], s.value)
567b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
56801e91a2dSerichkeane 
56901e91a2dSerichkeane   // expected-warning@+1{{OpenACC clause name 'present_or_copyout' is a deprecated clause name and is now an alias for 'copyout'}}
57001e91a2dSerichkeane #pragma acc serial present_or_copyout(zero:s.array[s.value : 5], s.value)
571b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
57201e91a2dSerichkeane 
5732b939e18Serichkeane #pragma acc serial copyout(zero : s.array[s.value : 5], s.value), self
574b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
575eca25bbdSerichkeane 
5762b939e18Serichkeane   // expected-error@+2{{use of undeclared identifier 'zero'}}
5772b939e18Serichkeane   // expected-error@+1{{expected ','}}
5782b939e18Serichkeane #pragma acc serial copyout(zero s.array[s.value : 5], s.value), self
579b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
580eca25bbdSerichkeane 
5812b939e18Serichkeane   // expected-error@+1{{invalid tag 'readonly' on 'copyout' clause}}
5822b939e18Serichkeane #pragma acc serial copyout(readonly:s.array[s.value : 5], s.value), self
583b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
584eca25bbdSerichkeane 
5852b939e18Serichkeane   // expected-error@+1{{invalid tag 'invalid' on 'copyout' clause}}
5862b939e18Serichkeane #pragma acc serial copyout(invalid:s.array[s.value : 5], s.value), self
587b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
588eca25bbdSerichkeane 
5892b939e18Serichkeane   // expected-error@+1{{invalid tag 'invalid' on 'copyout' clause}}
5902b939e18Serichkeane #pragma acc serial copyout(invalid:s.array[s.value : 5], s.value), self
591b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
592eca25bbdSerichkeane 
5932b939e18Serichkeane   // expected-error@+2{{use of undeclared identifier 'invalid'}}
5942b939e18Serichkeane   // expected-error@+1{{expected ','}}
5952b939e18Serichkeane #pragma acc serial copyout(invalid s.array[s.value : 5], s.value), self
596b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
5977b8f7f75Serichkeane 
5982b939e18Serichkeane   // expected-error@+1{{expected ','}}
5992b939e18Serichkeane #pragma acc serial create(s.array[s.value] s.array[s.value :5] ), self
600b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6017b8f7f75Serichkeane 
6022b939e18Serichkeane #pragma acc serial create(s.array[s.value : 5], s.value), self
603b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6047b8f7f75Serichkeane 
6052b939e18Serichkeane #pragma acc serial create(zero:s.array[s.value : 5], s.value), self
606b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6077b8f7f75Serichkeane 
60801e91a2dSerichkeane   // expected-warning@+1{{OpenACC clause name 'pcreate' is a deprecated clause name and is now an alias for 'create'}}
60901e91a2dSerichkeane #pragma acc serial pcreate(s.array[s.value : 5], s.value)
610b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
61101e91a2dSerichkeane 
61201e91a2dSerichkeane   // expected-warning@+1{{OpenACC clause name 'present_or_create' is a deprecated clause name and is now an alias for 'create'}}
61301e91a2dSerichkeane #pragma acc serial present_or_create(zero:s.array[s.value : 5], s.value)
614b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
61501e91a2dSerichkeane 
6162b939e18Serichkeane #pragma acc serial create(zero : s.array[s.value : 5], s.value), self
617b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6187b8f7f75Serichkeane 
6192b939e18Serichkeane   // expected-error@+2{{use of undeclared identifier 'zero'}}
6202b939e18Serichkeane   // expected-error@+1{{expected ','}}
6212b939e18Serichkeane #pragma acc serial create(zero s.array[s.value : 5], s.value), self
622b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6237b8f7f75Serichkeane 
6242b939e18Serichkeane   // expected-error@+1{{invalid tag 'readonly' on 'create' clause}}
6252b939e18Serichkeane #pragma acc serial create(readonly:s.array[s.value : 5], s.value), self
626b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6277b8f7f75Serichkeane 
6282b939e18Serichkeane   // expected-error@+1{{invalid tag 'invalid' on 'create' clause}}
6292b939e18Serichkeane #pragma acc serial create(invalid:s.array[s.value : 5], s.value), self
630b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6317b8f7f75Serichkeane 
6322b939e18Serichkeane   // expected-error@+1{{invalid tag 'invalid' on 'create' clause}}
6332b939e18Serichkeane #pragma acc serial create(invalid:s.array[s.value : 5], s.value), self
634b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6357b8f7f75Serichkeane 
6362b939e18Serichkeane   // expected-error@+2{{use of undeclared identifier 'invalid'}}
6372b939e18Serichkeane   // expected-error@+1{{expected ','}}
6382b939e18Serichkeane #pragma acc serial create(invalid s.array[s.value : 5], s.value), self
639b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6407b8f7f75Serichkeane 
6412b939e18Serichkeane   // expected-error@+1{{expected ','}}
6422b939e18Serichkeane #pragma acc serial copyin(s.array[s.value] s.array[s.value :5] ), self
643b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6447b8f7f75Serichkeane 
6452b939e18Serichkeane #pragma acc serial copyin(s.array[s.value : 5], s.value), self
646b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6477b8f7f75Serichkeane 
6482b939e18Serichkeane #pragma acc serial copyin(readonly:s.array[s.value : 5], s.value), self
649b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6507b8f7f75Serichkeane 
65101e91a2dSerichkeane   // expected-warning@+1{{OpenACC clause name 'pcopyin' is a deprecated clause name and is now an alias for 'copyin'}}
65201e91a2dSerichkeane #pragma acc serial pcopyin(s.array[s.value : 5], s.value)
653b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
65401e91a2dSerichkeane 
65501e91a2dSerichkeane   // expected-warning@+1{{OpenACC clause name 'present_or_copyin' is a deprecated clause name and is now an alias for 'copyin'}}
65601e91a2dSerichkeane #pragma acc serial present_or_copyin(readonly:s.array[s.value : 5], s.value)
657b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
65801e91a2dSerichkeane 
6592b939e18Serichkeane #pragma acc serial copyin(readonly : s.array[s.value : 5], s.value), self
660b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6617b8f7f75Serichkeane 
6622b939e18Serichkeane   // expected-error@+2{{use of undeclared identifier 'readonly'}}
6632b939e18Serichkeane   // expected-error@+1{{expected ','}}
6642b939e18Serichkeane #pragma acc serial copyin(readonly s.array[s.value : 5], s.value), self
665b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6667b8f7f75Serichkeane 
6672b939e18Serichkeane   // expected-error@+1{{invalid tag 'zero' on 'copyin' clause}}
6682b939e18Serichkeane #pragma acc serial copyin(zero :s.array[s.value : 5], s.value), self
669b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6707b8f7f75Serichkeane 
6712b939e18Serichkeane   // expected-error@+1{{invalid tag 'invalid' on 'copyin' clause}}
6722b939e18Serichkeane #pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), self
673b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6747b8f7f75Serichkeane 
6752b939e18Serichkeane   // expected-error@+1{{invalid tag 'invalid' on 'copyin' clause}}
6762b939e18Serichkeane #pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), self
677b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
6787b8f7f75Serichkeane 
6792b939e18Serichkeane   // expected-error@+2{{use of undeclared identifier 'invalid'}}
6802b939e18Serichkeane   // expected-error@+1{{expected ','}}
6812b939e18Serichkeane #pragma acc serial copyin(invalid s.array[s.value : 5], s.value), self
682b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
683923f0392Serichkeane }
684923f0392Serichkeane 
68539739552Serichkeane void ReductionClauseParsing() {
68639739552Serichkeane   char *Begin, *End;
68726fee0ffSErich Keane   // expected-error@+1{{expected '('}}
68839739552Serichkeane #pragma acc serial reduction
689b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
690a15b685cSErich Keane   // expected-error@+2{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
691a15b685cSErich Keane   // expected-error@+1{{expected expression}}
69239739552Serichkeane #pragma acc serial reduction()
693b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
694a15b685cSErich Keane   // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
69539739552Serichkeane #pragma acc serial reduction(Begin)
696b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
697a15b685cSErich Keane   // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
69839739552Serichkeane #pragma acc serial reduction(Begin, End)
699b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
700a15b685cSErich Keane   // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}
70139739552Serichkeane #pragma acc serial reduction(Begin, End)
702b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
70339739552Serichkeane #pragma acc serial reduction(+:Begin)
704b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
70539739552Serichkeane #pragma acc serial reduction(+:Begin, End)
706b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
70739739552Serichkeane #pragma acc serial reduction(*: Begin, End)
708b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
70939739552Serichkeane #pragma acc serial reduction(max : Begin, End)
710b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
71139739552Serichkeane #pragma acc serial reduction(min: Begin, End)
712b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
71339739552Serichkeane #pragma acc serial reduction(&: Begin, End)
714b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
71539739552Serichkeane #pragma acc serial reduction(|: Begin, End)
716b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
71739739552Serichkeane #pragma acc serial reduction(^: Begin, End)
718b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
7192b939e18Serichkeane #pragma acc serial self, reduction(&&: Begin, End)
720b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
7212b939e18Serichkeane #pragma acc serial reduction(||: Begin, End), self
722b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
72339739552Serichkeane }
72439739552Serichkeane 
7250d8e333aSerichkeane int returns_int();
7260d8e333aSerichkeane 
7270d8e333aSerichkeane void IntExprParsing() {
72826fee0ffSErich Keane   // expected-error@+1{{expected '('}}
7290d8e333aSerichkeane #pragma acc parallel vector_length
730db4ea21dSerichkeane   {}
7310d8e333aSerichkeane 
73226fee0ffSErich Keane   // expected-error@+1{{expected expression}}
7330d8e333aSerichkeane #pragma acc parallel vector_length()
734db4ea21dSerichkeane   {}
7350d8e333aSerichkeane 
73626fee0ffSErich Keane   // expected-error@+1{{use of undeclared identifier 'invalid'}}
7370d8e333aSerichkeane #pragma acc parallel vector_length(invalid)
738db4ea21dSerichkeane   {}
7390d8e333aSerichkeane 
74026fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
74126fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
7420d8e333aSerichkeane #pragma acc parallel vector_length(5, 4)
743db4ea21dSerichkeane   {}
7440d8e333aSerichkeane 
7450d8e333aSerichkeane #pragma acc parallel vector_length(5)
746db4ea21dSerichkeane   {}
7470d8e333aSerichkeane 
7480d8e333aSerichkeane #pragma acc parallel vector_length(returns_int())
749db4ea21dSerichkeane   {}
75004952c5bSerichkeane 
75126fee0ffSErich Keane   // expected-error@+1{{expected '('}}
75204952c5bSerichkeane #pragma acc parallel num_gangs
753db4ea21dSerichkeane   {}
75404952c5bSerichkeane 
75526fee0ffSErich Keane   // expected-error@+1{{expected expression}}
75604952c5bSerichkeane #pragma acc parallel num_gangs()
757db4ea21dSerichkeane   {}
75804952c5bSerichkeane 
75926fee0ffSErich Keane   // expected-error@+1{{use of undeclared identifier 'invalid'}}
76004952c5bSerichkeane #pragma acc parallel num_gangs(invalid)
761db4ea21dSerichkeane   {}
76204952c5bSerichkeane 
76304952c5bSerichkeane #pragma acc parallel num_gangs(5, 4)
764db4ea21dSerichkeane   {}
76504952c5bSerichkeane 
76604952c5bSerichkeane #pragma acc parallel num_gangs(5)
767db4ea21dSerichkeane   {}
76804952c5bSerichkeane 
76904952c5bSerichkeane #pragma acc parallel num_gangs(returns_int())
770db4ea21dSerichkeane   {}
77104952c5bSerichkeane 
77226fee0ffSErich Keane   // expected-error@+1{{expected '('}}
77304952c5bSerichkeane #pragma acc parallel num_workers
774db4ea21dSerichkeane   {}
77504952c5bSerichkeane 
77626fee0ffSErich Keane   // expected-error@+1{{expected expression}}
77704952c5bSerichkeane #pragma acc parallel num_workers()
778db4ea21dSerichkeane   {}
77904952c5bSerichkeane 
78026fee0ffSErich Keane   // expected-error@+1{{use of undeclared identifier 'invalid'}}
78104952c5bSerichkeane #pragma acc parallel num_workers(invalid)
782db4ea21dSerichkeane   {}
78304952c5bSerichkeane 
78426fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
78526fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
78604952c5bSerichkeane #pragma acc parallel num_workers(5, 4)
787db4ea21dSerichkeane   {}
78804952c5bSerichkeane 
78904952c5bSerichkeane #pragma acc parallel num_workers(5)
790db4ea21dSerichkeane   {}
79104952c5bSerichkeane 
79204952c5bSerichkeane #pragma acc parallel num_workers(returns_int())
793db4ea21dSerichkeane   {}
79404952c5bSerichkeane 
7954bbdb018Serichkeane   // expected-error@+1{{expected '('}}
79604952c5bSerichkeane #pragma acc init device_num
79704952c5bSerichkeane 
7984bbdb018Serichkeane   // expected-error@+1{{expected expression}}
79904952c5bSerichkeane #pragma acc init device_num()
80004952c5bSerichkeane 
8014bbdb018Serichkeane   // expected-error@+1{{use of undeclared identifier 'invalid'}}
80204952c5bSerichkeane #pragma acc init device_num(invalid)
80304952c5bSerichkeane 
8044bbdb018Serichkeane   // expected-error@+2{{expected ')'}}
8054bbdb018Serichkeane   // expected-note@+1{{to match this '('}}
80604952c5bSerichkeane #pragma acc init device_num(5, 4)
80704952c5bSerichkeane 
80804952c5bSerichkeane #pragma acc init device_num(5)
80904952c5bSerichkeane 
81004952c5bSerichkeane #pragma acc init device_num(returns_int())
81104952c5bSerichkeane 
81226fee0ffSErich Keane   // expected-error@+2{{expected '('}}
81321c785d7Serichkeane   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
81404952c5bSerichkeane #pragma acc set default_async
81504952c5bSerichkeane 
81626fee0ffSErich Keane   // expected-error@+2{{expected expression}}
81721c785d7Serichkeane   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
81804952c5bSerichkeane #pragma acc set default_async()
81904952c5bSerichkeane 
82026fee0ffSErich Keane   // expected-error@+2{{use of undeclared identifier 'invalid'}}
82121c785d7Serichkeane   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
82204952c5bSerichkeane #pragma acc set default_async(invalid)
82304952c5bSerichkeane 
82426fee0ffSErich Keane   // expected-error@+3{{expected ')'}}
82526fee0ffSErich Keane   // expected-note@+2{{to match this '('}}
82621c785d7Serichkeane   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
82704952c5bSerichkeane #pragma acc set default_async(5, 4)
82804952c5bSerichkeane 
82904952c5bSerichkeane #pragma acc set default_async(5)
83004952c5bSerichkeane 
83104952c5bSerichkeane #pragma acc set default_async(returns_int())
8320dd72eb2Serichkeane 
8330dd72eb2Serichkeane 
8340dd72eb2Serichkeane #pragma acc loop vector
835b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
83642f4e505SErich Keane   // expected-error@+1{{expected expression}}
8370dd72eb2Serichkeane #pragma acc loop vector()
838b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
83942f4e505SErich Keane   // expected-error@+2{{invalid tag 'invalid' on 'vector' clause}}
84042f4e505SErich Keane   // expected-error@+1{{expected expression}}
8410dd72eb2Serichkeane #pragma acc loop vector(invalid:)
842b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
843c8cbdc65SErich Keane   // expected-error@+1{{invalid tag 'invalid' on 'vector' clause}}
8440dd72eb2Serichkeane #pragma acc loop vector(invalid:5)
845b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
84642f4e505SErich Keane   // expected-error@+1{{expected expression}}
8470dd72eb2Serichkeane #pragma acc loop vector(length:)
848b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
84942f4e505SErich Keane   // expected-error@+2{{invalid tag 'num' on 'vector' clause}}
85042f4e505SErich Keane   // expected-error@+1{{expected expression}}
851db4ea21dSerichkeane #pragma acc loop vector(num:)
852b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
85342f4e505SErich Keane   // expected-error@+2{{expected ')'}}
85442f4e505SErich Keane   // expected-note@+1{{to match this '('}}
855db4ea21dSerichkeane #pragma acc loop vector(5, 4)
856b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
85742f4e505SErich Keane   // expected-error@+2{{expected ')'}}
85842f4e505SErich Keane   // expected-note@+1{{to match this '('}}
859db4ea21dSerichkeane #pragma acc loop vector(length:6,4)
860b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
861db4ea21dSerichkeane   // expected-error@+3{{invalid tag 'num' on 'vector' clause}}
86242f4e505SErich Keane   // expected-error@+2{{expected ')'}}
86342f4e505SErich Keane   // expected-note@+1{{to match this '('}}
86442f4e505SErich Keane #pragma acc loop vector(num:6,4)
865b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
86642f4e505SErich Keane #pragma acc loop vector(5)
867b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
868c8cbdc65SErich Keane   // expected-error@+1{{invalid tag 'num' on 'vector' clause}}
8690dd72eb2Serichkeane #pragma acc loop vector(num:5)
870b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
8710dd72eb2Serichkeane #pragma acc loop vector(length:5)
872b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
8730dd72eb2Serichkeane #pragma acc loop vector(returns_int())
874b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
8750dd72eb2Serichkeane #pragma acc loop vector(length:returns_int())
876b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
8770dd72eb2Serichkeane 
8780dd72eb2Serichkeane #pragma acc loop worker
879b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
88042f4e505SErich Keane   // expected-error@+1{{expected expression}}
8810dd72eb2Serichkeane #pragma acc loop worker()
882b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
88342f4e505SErich Keane   // expected-error@+2{{invalid tag 'invalid' on 'worker' clause}}
88442f4e505SErich Keane   // expected-error@+1{{expected expression}}
8850dd72eb2Serichkeane #pragma acc loop worker(invalid:)
886b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
887cf456ed2SErich Keane #pragma acc kernels
888cf456ed2SErich Keane   // expected-error@+1{{invalid tag 'invalid' on 'worker' clause}}
8890dd72eb2Serichkeane #pragma acc loop worker(invalid:5)
890b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
89142f4e505SErich Keane   // expected-error@+1{{expected expression}}
8920dd72eb2Serichkeane #pragma acc loop worker(num:)
893b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
89442f4e505SErich Keane   // expected-error@+2{{invalid tag 'length' on 'worker' clause}}
89542f4e505SErich Keane   // expected-error@+1{{expected expression}}
896db4ea21dSerichkeane #pragma acc loop worker(length:)
897b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
89842f4e505SErich Keane   // expected-error@+2{{expected ')'}}
89942f4e505SErich Keane   // expected-note@+1{{to match this '('}}
900db4ea21dSerichkeane #pragma acc loop worker(5, 4)
901b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
90242f4e505SErich Keane   // expected-error@+2{{expected ')'}}
90342f4e505SErich Keane   // expected-note@+1{{to match this '('}}
904db4ea21dSerichkeane #pragma acc loop worker(num:6,4)
905b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
90642f4e505SErich Keane   // expected-error@+3{{invalid tag 'length' on 'worker' clause}}
90742f4e505SErich Keane   // expected-error@+2{{expected ')'}}
90842f4e505SErich Keane   // expected-note@+1{{to match this '('}}
9090dd72eb2Serichkeane #pragma acc loop worker(length:6,4)
910b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
911cf456ed2SErich Keane #pragma acc kernels
9120dd72eb2Serichkeane #pragma acc loop worker(5)
913b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
914cf456ed2SErich Keane #pragma acc kernels
915cf456ed2SErich Keane   // expected-error@+1{{invalid tag 'length' on 'worker' clause}}
9160dd72eb2Serichkeane #pragma acc loop worker(length:5)
917b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
918cf456ed2SErich Keane #pragma acc kernels
9190dd72eb2Serichkeane #pragma acc loop worker(num:5)
920b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
921cf456ed2SErich Keane #pragma acc kernels
9220dd72eb2Serichkeane #pragma acc loop worker(returns_int())
923b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
924cf456ed2SErich Keane #pragma acc kernels
925cf456ed2SErich Keane   // expected-error@+1{{invalid tag 'length' on 'worker' clause}}
9260dd72eb2Serichkeane #pragma acc loop worker(length:returns_int())
927b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i);
9280d8e333aSerichkeane }
9290d8e333aSerichkeane 
9302531a15dSerichkeane void device_type() {
93126fee0ffSErich Keane   // expected-error@+1{{expected '('}}
9322531a15dSerichkeane #pragma acc parallel device_type
933db4ea21dSerichkeane   {}
93426fee0ffSErich Keane   // expected-error@+1{{expected '('}}
9352531a15dSerichkeane #pragma acc parallel dtype
936db4ea21dSerichkeane   {}
9372531a15dSerichkeane 
93826fee0ffSErich Keane   // expected-error@+3{{expected identifier}}
93926fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
94026fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9412531a15dSerichkeane #pragma acc parallel device_type(
942db4ea21dSerichkeane     {}
94326fee0ffSErich Keane   // expected-error@+3{{expected identifier}}
94426fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
94526fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9462531a15dSerichkeane #pragma acc parallel dtype(
947db4ea21dSerichkeane   {}
9482531a15dSerichkeane 
9498ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
9502531a15dSerichkeane #pragma acc parallel device_type()
951db4ea21dSerichkeane   {}
9528ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
9532531a15dSerichkeane #pragma acc parallel dtype()
954db4ea21dSerichkeane   {}
9552531a15dSerichkeane 
95626fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
95726fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9582531a15dSerichkeane #pragma acc parallel device_type(*
959db4ea21dSerichkeane   {}
96026fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
96126fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9622531a15dSerichkeane #pragma acc parallel dtype(*
963db4ea21dSerichkeane   {}
9642531a15dSerichkeane 
96526fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
96626fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9672531a15dSerichkeane #pragma acc parallel device_type(ident
968db4ea21dSerichkeane   {}
96926fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
97026fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9712531a15dSerichkeane #pragma acc parallel dtype(ident
972db4ea21dSerichkeane   {}
9732531a15dSerichkeane 
97426fee0ffSErich Keane   // expected-error@+3{{expected ','}}
97526fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
97626fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9772531a15dSerichkeane #pragma acc parallel device_type(ident ident2
978db4ea21dSerichkeane   {}
97926fee0ffSErich Keane   // expected-error@+3{{expected ','}}
98026fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
98126fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9822531a15dSerichkeane #pragma acc parallel dtype(ident ident2
983db4ea21dSerichkeane   {}
9842531a15dSerichkeane 
98526fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
98626fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9872531a15dSerichkeane #pragma acc parallel device_type(ident, ident2
988db4ea21dSerichkeane   {}
98926fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
99026fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
9912531a15dSerichkeane #pragma acc parallel dtype(ident, ident2
992db4ea21dSerichkeane   {}
9932531a15dSerichkeane 
9948ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
9952531a15dSerichkeane #pragma acc parallel device_type(ident, ident2,)
996db4ea21dSerichkeane   {}
9978ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
9982531a15dSerichkeane #pragma acc parallel dtype(ident, ident2,)
999db4ea21dSerichkeane   {}
10002531a15dSerichkeane 
100126fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
100226fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
10032531a15dSerichkeane #pragma acc parallel device_type(*,)
1004db4ea21dSerichkeane   {}
100526fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
100626fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
10072531a15dSerichkeane #pragma acc parallel dtype(*,)
1008db4ea21dSerichkeane   {}
10092531a15dSerichkeane 
101026fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
101126fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
10122531a15dSerichkeane #pragma acc parallel device_type(*,ident)
1013db4ea21dSerichkeane   {}
101426fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
101526fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
10162531a15dSerichkeane #pragma acc parallel dtype(*,ident)
1017db4ea21dSerichkeane   {}
10182531a15dSerichkeane 
10198ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
10202531a15dSerichkeane #pragma acc parallel device_type(ident, *)
1021db4ea21dSerichkeane   {}
10228ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
10232531a15dSerichkeane #pragma acc parallel dtype(ident, *)
1024db4ea21dSerichkeane   {}
10252531a15dSerichkeane 
10268ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
10272531a15dSerichkeane #pragma acc parallel device_type("foo", 54)
1028db4ea21dSerichkeane   {}
10298ef2011bSerichkeane   // expected-error@+1{{expected identifier}}
10302531a15dSerichkeane #pragma acc parallel dtype(31, "bar")
1031db4ea21dSerichkeane   {}
10322531a15dSerichkeane 
10332531a15dSerichkeane #pragma acc parallel device_type(ident, auto, int, float)
1034db4ea21dSerichkeane   {}
10352531a15dSerichkeane #pragma acc parallel dtype(ident, auto, int, float)
1036db4ea21dSerichkeane   {}
10372531a15dSerichkeane 
10382531a15dSerichkeane #pragma acc parallel device_type(ident, auto, int, float) dtype(ident, auto, int, float)
1039db4ea21dSerichkeane   {}
10402531a15dSerichkeane }
10412531a15dSerichkeane 
104262a384caSerichkeane #define acc_async_sync -1
104362a384caSerichkeane void AsyncArgument() {
104462a384caSerichkeane #pragma acc parallel async
1045db4ea21dSerichkeane   {}
104662a384caSerichkeane 
104726fee0ffSErich Keane   // expected-error@+1{{expected expression}}
104862a384caSerichkeane #pragma acc parallel async()
1049db4ea21dSerichkeane   {}
105062a384caSerichkeane 
105126fee0ffSErich Keane   // expected-error@+1{{use of undeclared identifier 'invalid'}}
105262a384caSerichkeane #pragma acc parallel async(invalid)
1053db4ea21dSerichkeane   {}
105462a384caSerichkeane 
105526fee0ffSErich Keane   // expected-error@+2{{expected ')'}}
105626fee0ffSErich Keane   // expected-note@+1{{to match this '('}}
105762a384caSerichkeane #pragma acc parallel async(4, 3)
1058db4ea21dSerichkeane   {}
105962a384caSerichkeane 
106062a384caSerichkeane #pragma acc parallel async(returns_int())
1061db4ea21dSerichkeane   {}
106262a384caSerichkeane 
106362a384caSerichkeane #pragma acc parallel async(5)
1064db4ea21dSerichkeane   {}
106562a384caSerichkeane 
106662a384caSerichkeane #pragma acc parallel async(acc_async_sync)
1067db4ea21dSerichkeane   {}
106862a384caSerichkeane }
106962a384caSerichkeane 
1070463529f3Serichkeane void Tile() {
1071463529f3Serichkeane 
1072463529f3Serichkeane   int* Foo;
107342f4e505SErich Keane   // expected-error@+1{{expected '('}}
1074463529f3Serichkeane #pragma acc loop tile
1075b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
107642f4e505SErich Keane   // expected-error@+3{{expected expression}}
107742f4e505SErich Keane   // expected-error@+2{{expected ')'}}
107842f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1079463529f3Serichkeane #pragma acc loop tile(
1080b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1081d412cea8SErich Keane   // expected-error@+1{{expected expression}}
1082463529f3Serichkeane #pragma acc loop tile()
1083b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
108442f4e505SErich Keane   // expected-error@+3{{expected expression}}
108542f4e505SErich Keane   // expected-error@+2{{expected ')'}}
108642f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1087463529f3Serichkeane #pragma acc loop tile(,
1088b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1089d412cea8SErich Keane   // expected-error@+1{{expected expression}}
1090463529f3Serichkeane #pragma acc loop tile(,)
1091b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1092d412cea8SErich Keane   // expected-error@+1{{use of undeclared identifier 'invalid'}}
1093463529f3Serichkeane #pragma acc loop tile(returns_int(), *, invalid, *)
1094b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1095463529f3Serichkeane 
1096d412cea8SErich Keane   // expected-error@+1{{expected expression}}
1097463529f3Serichkeane #pragma acc loop tile(returns_int() *, Foo, *)
1098b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1099463529f3Serichkeane 
1100d412cea8SErich Keane   // expected-error@+1{{indirection requires pointer operand ('int' invalid)}}
1101463529f3Serichkeane #pragma acc loop tile(* returns_int() , *)
1102b0cfbfd7SErich Keane   for(int j = 0; j < 5;++j){
1103b0cfbfd7SErich Keane     for(int i = 0; i < 5;++i);
11043c98d8c1SErich Keane   }
1105463529f3Serichkeane 
1106463529f3Serichkeane #pragma acc loop tile(*)
1107b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1108d412cea8SErich Keane   // expected-error@+1{{OpenACC 'tile' clause size expression must be an asterisk or a constant expression}}
1109463529f3Serichkeane #pragma acc loop tile(*Foo, *Foo)
1110b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1111463529f3Serichkeane #pragma acc loop tile(5)
1112b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1113463529f3Serichkeane #pragma acc loop tile(*, 5)
1114b0cfbfd7SErich Keane   for(int j = 0; j < 5;++j){
1115b0cfbfd7SErich Keane     for(int i = 0; i < 5;++i);
11163c98d8c1SErich Keane   }
1117463529f3Serichkeane #pragma acc loop tile(5, *)
1118b0cfbfd7SErich Keane   for(int j = 0; j < 5;++j){
1119b0cfbfd7SErich Keane     for(int i = 0; i < 5;++i);
11203c98d8c1SErich Keane   }
1121463529f3Serichkeane #pragma acc loop tile(5, *, 3, *)
1122b0cfbfd7SErich Keane   for(int j = 0; j < 5;++j){
1123b0cfbfd7SErich Keane     for(int k = 0; k < 5;++k)
1124b0cfbfd7SErich Keane       for(int l = 0;l < 5;++l)
1125b0cfbfd7SErich Keane         for(int i = 0; i < 5;++i);
11263c98d8c1SErich Keane   }
1127463529f3Serichkeane }
1128463529f3Serichkeane 
1129b52fe2dfSerichkeane void Gang() {
1130b52fe2dfSerichkeane #pragma acc loop gang
1131b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
113242f4e505SErich Keane   // expected-error@+3{{expected expression}}
113342f4e505SErich Keane   // expected-error@+2{{expected ')'}}
113442f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1135b52fe2dfSerichkeane #pragma acc loop gang(
1136b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
11375b25c313SErich Keane   // expected-error@+1{{expected expression}}
1138b52fe2dfSerichkeane #pragma acc loop gang()
1139b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1140b52fe2dfSerichkeane 
11415b25c313SErich Keane   // expected-error@+1{{expected expression}}
1142b52fe2dfSerichkeane #pragma acc loop gang(5, *)
1143b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1144b52fe2dfSerichkeane 
11455b25c313SErich Keane   // expected-error@+1{{expected expression}}
1146b52fe2dfSerichkeane #pragma acc loop gang(*)
1147b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1148b52fe2dfSerichkeane 
11495b25c313SErich Keane   // expected-error@+1{{expected expression}}
1150b52fe2dfSerichkeane #pragma acc loop gang(5, num:*)
1151b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1152b52fe2dfSerichkeane 
11535b25c313SErich Keane   // expected-error@+1{{expected expression}}
1154b52fe2dfSerichkeane #pragma acc loop gang(num:5, *)
1155b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1156b52fe2dfSerichkeane 
11575b25c313SErich Keane   // expected-error@+1{{expected expression}}
1158b52fe2dfSerichkeane #pragma acc loop gang(num:5, num:*)
1159b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1160b52fe2dfSerichkeane 
11615b25c313SErich Keane   // expected-error@+1{{expected expression}}
1162b52fe2dfSerichkeane #pragma acc loop gang(num:*)
1163b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1164b52fe2dfSerichkeane 
11655b25c313SErich Keane #pragma acc loop gang(dim:2)
1166b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1167b52fe2dfSerichkeane 
11685b25c313SErich Keane   // expected-error@+1{{expected expression}}
1169b52fe2dfSerichkeane #pragma acc loop gang(dim:5, dim:*)
1170b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1171b52fe2dfSerichkeane 
11725b25c313SErich Keane   // expected-error@+1{{expected expression}}
1173b52fe2dfSerichkeane #pragma acc loop gang(dim:*)
1174b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1175b52fe2dfSerichkeane 
1176b52fe2dfSerichkeane #pragma acc loop gang(static:*)
1177b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1178b52fe2dfSerichkeane 
11795b25c313SErich Keane   // expected-error@+2{{OpenACC 'gang' clause may have at most one 'static' argument}}
11805b25c313SErich Keane   // expected-note@+1{{previous expression is here}}
1181b52fe2dfSerichkeane #pragma acc loop gang(static:*, static:5)
1182b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1183b52fe2dfSerichkeane 
11845b25c313SErich Keane #pragma acc kernels
1185b52fe2dfSerichkeane #pragma acc loop gang(static:*, 5)
1186b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1187b52fe2dfSerichkeane 
11885b25c313SErich Keane #pragma acc kernels
1189b52fe2dfSerichkeane #pragma acc loop gang(static:45, 5)
1190b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1191b52fe2dfSerichkeane 
119242f4e505SErich Keane   // expected-error@+3{{expected expression}}
119342f4e505SErich Keane   // expected-error@+2{{expected ')'}}
119442f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1195b52fe2dfSerichkeane #pragma acc loop gang(static:45,
1196b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1197b52fe2dfSerichkeane 
119842f4e505SErich Keane   // expected-error@+2{{expected ')'}}
119942f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1200b52fe2dfSerichkeane #pragma acc loop gang(static:45
1201b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1202b52fe2dfSerichkeane 
120342f4e505SErich Keane   // expected-error@+3{{expected expression}}
120442f4e505SErich Keane   // expected-error@+2{{expected ')'}}
120542f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1206b52fe2dfSerichkeane #pragma acc loop gang(static:*,
1207b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1208b52fe2dfSerichkeane 
120942f4e505SErich Keane   // expected-error@+2{{expected ')'}}
121042f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1211b52fe2dfSerichkeane #pragma acc loop gang(static:*
1212b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1213b52fe2dfSerichkeane 
121442f4e505SErich Keane   // expected-error@+3{{expected expression}}
121542f4e505SErich Keane   // expected-error@+2{{expected ')'}}
121642f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1217b52fe2dfSerichkeane #pragma acc loop gang(45,
1218b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1219b52fe2dfSerichkeane 
122042f4e505SErich Keane   // expected-error@+2{{expected ')'}}
122142f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1222b52fe2dfSerichkeane #pragma acc loop gang(45
1223b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1224b52fe2dfSerichkeane 
122542f4e505SErich Keane   // expected-error@+3{{expected expression}}
122642f4e505SErich Keane   // expected-error@+2{{expected ')'}}
122742f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1228b52fe2dfSerichkeane #pragma acc loop gang(num:45,
1229b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1230b52fe2dfSerichkeane 
123142f4e505SErich Keane   // expected-error@+2{{expected ')'}}
123242f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1233b52fe2dfSerichkeane #pragma acc loop gang(num:45
1234b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1235b52fe2dfSerichkeane 
123642f4e505SErich Keane   // expected-error@+3{{expected expression}}
123742f4e505SErich Keane   // expected-error@+2{{expected ')'}}
123842f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1239b52fe2dfSerichkeane #pragma acc loop gang(dim:45,
1240b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1241b52fe2dfSerichkeane 
124242f4e505SErich Keane   // expected-error@+2{{expected ')'}}
124342f4e505SErich Keane   // expected-note@+1{{to match this '('}}
1244b52fe2dfSerichkeane #pragma acc loop gang(dim:45
1245b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1246b52fe2dfSerichkeane 
12475b25c313SErich Keane #pragma acc kernels
12485b25c313SErich Keane #pragma acc loop gang(static:*, 5)
1249b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1250b52fe2dfSerichkeane 
12515b25c313SErich Keane   // expected-error@+1{{argument to 'gang' clause dimension must be a constant expression}}
12525b25c313SErich Keane #pragma acc loop gang(static:*, dim:returns_int())
1253b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
12545b25c313SErich Keane 
12555b25c313SErich Keane   // expected-error@+2 2{{'num' argument on 'gang' clause is not permitted on an orphaned 'loop' construct}}
12565b25c313SErich Keane   // expected-error@+1{{argument to 'gang' clause dimension must be a constant expression}}
1257b52fe2dfSerichkeane #pragma acc loop gang(num: 32, static:*, dim:returns_int(), 5)
1258b0cfbfd7SErich Keane   for(int i = 0; i < 5;++i) {}
1259b52fe2dfSerichkeane 
1260b52fe2dfSerichkeane }
1261b52fe2dfSerichkeane 
1262db4ea21dSerichkeane   // expected-warning@+5{{OpenACC clause 'worker' not yet implemented, clause ignored}}
1263db4ea21dSerichkeane   // expected-warning@+4{{OpenACC clause 'vector' not yet implemented, clause ignored}}
1264db4ea21dSerichkeane   // expected-warning@+3{{OpenACC clause 'seq' not yet implemented, clause ignored}}
1265db4ea21dSerichkeane   // expected-warning@+2{{OpenACC clause 'nohost' not yet implemented, clause ignored}}
1266db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1267fdee0a35SErich Keane #pragma acc routine worker, vector, seq, nohost
1268fdee0a35SErich Keane void bar();
1269fdee0a35SErich Keane 
1270db4ea21dSerichkeane   // expected-warning@+5{{OpenACC clause 'worker' not yet implemented, clause ignored}}
1271db4ea21dSerichkeane   // expected-warning@+4{{OpenACC clause 'vector' not yet implemented, clause ignored}}
1272db4ea21dSerichkeane   // expected-warning@+3{{OpenACC clause 'seq' not yet implemented, clause ignored}}
1273db4ea21dSerichkeane   // expected-warning@+2{{OpenACC clause 'nohost' not yet implemented, clause ignored}}
1274db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
1275fdee0a35SErich Keane #pragma acc routine(bar) worker, vector, seq, nohost
127658b77b85Serichkeane 
127758b77b85Serichkeane 
127858b77b85Serichkeane // Bind Clause Parsing.
127958b77b85Serichkeane 
128026fee0ffSErich Keane   // expected-error@+2{{expected '('}}
1281db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
128258b77b85Serichkeane #pragma acc routine bind
128358b77b85Serichkeane void BCP1();
128458b77b85Serichkeane 
128526fee0ffSErich Keane   // expected-error@+2{{expected identifier or string literal}}
1286db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
128758b77b85Serichkeane #pragma acc routine(BCP1) bind()
128858b77b85Serichkeane 
1289db4ea21dSerichkeane   // expected-warning@+2{{OpenACC clause 'bind' not yet implemented, clause ignored}}
1290db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
129158b77b85Serichkeane #pragma acc routine bind("ReductionClauseParsing")
129258b77b85Serichkeane void BCP2();
129358b77b85Serichkeane 
1294db4ea21dSerichkeane   // expected-warning@+2{{OpenACC clause 'bind' not yet implemented, clause ignored}}
1295db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
129658b77b85Serichkeane #pragma acc routine(BCP1) bind(BCP2)
129758b77b85Serichkeane 
129826fee0ffSErich Keane   // expected-error@+2{{use of undeclared identifier 'unknown_thing'}}
1299db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
130058b77b85Serichkeane #pragma acc routine(BCP1) bind(unknown_thing)
1301