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