1375 lines · c
1// RUN: %clang_cc1 %s -verify=expected,c -fopenacc -std=c992// RUN: %clang_cc1 %s -verify=expected,c -fopenacc3// RUN: %clang_cc1 %s -verify=expected,cpp -fopenacc -x c++4 5void func() {6 7 // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}8#pragma acc exit data finalize9 10 // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}11#pragma acc exit data finalize finalize12 13 // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}14 // expected-error@+1{{invalid OpenACC clause 'invalid'}}15#pragma acc exit data finalize invalid16 17 // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}18 // expected-error@+1{{invalid OpenACC clause 'invalid'}}19#pragma acc exit data finalize invalid invalid finalize20 21 // expected-error@+1{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete', or 'detach' clause}}22#pragma acc exit data wait finalize23 24 // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}25#pragma acc host_data if_present26 27 // expected-error@+1{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}28#pragma acc host_data if_present, if_present29 30 // expected-error@+4{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}31 // expected-note@+3{{previous 'seq' clause is here}}32 // expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}33 // expected-note@+1{{previous 'seq' clause is here}}34#pragma acc loop seq independent auto35 for(int i = 0; i < 5;++i) {}36 37 // expected-error@+4{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}38 // expected-note@+3{{previous 'seq' clause is here}}39 // expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}40 // expected-note@+1{{previous 'seq' clause is here}}41#pragma acc loop seq, independent auto42 for(int i = 0; i < 5;++i) {}43 44 // expected-error@+4{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}45 // expected-note@+3{{previous 'seq' clause is here}}46 // expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'loop' construct}}47 // expected-note@+1{{previous 'seq' clause is here}}48#pragma acc loop seq independent, auto49 for(int i = 0; i < 5;++i) {}50 51 // expected-error@+3{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'kernels loop' construct}}52 // expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'kernels loop' construct}}53 // expected-note@+1 2{{previous 'seq' clause is here}}54#pragma acc kernels loop seq independent auto55 for(int i = 0; i < 5;++i) {}56 57 // expected-error@+3{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'serial loop' construct}}58 // expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'serial loop' construct}}59 // expected-note@+1 2{{previous 'seq' clause is here}}60#pragma acc serial loop seq, independent auto61 for(int i = 0; i < 5;++i) {}62 63 // expected-error@+3{{OpenACC clause 'independent' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}64 // expected-error@+2{{OpenACC clause 'auto' may not appear on the same construct as a 'seq' clause on a 'parallel loop' construct}}65 // expected-note@+1 2{{previous 'seq' clause is here}}66#pragma acc parallel loop seq independent, auto67 for(int i = 0; i < 5;++i) {}68 69 70 // expected-error@+1{{expected identifier}}71#pragma acc loop , seq72 for(int i = 0; i < 5;++i) {}73 74 // expected-error@+1{{expected identifier}}75#pragma acc loop seq,76 for(int i = 0; i < 5;++i) {}77 78 // expected-error@+1{{expected '('}}79#pragma acc loop collapse80 for(int i = 0; i < 5;++i) {}81 82 // expected-error@+1{{expected expression}}83#pragma acc loop collapse()84 for(int i = 0; i < 5;++i) {}85 86 // expected-error@+2{{invalid tag 'unknown' on 'collapse' clause}}87 // expected-error@+1{{expected expression}}88#pragma acc loop collapse(unknown:)89 for(int i = 0; i < 5;++i) {}90 91 // expected-error@+1{{expected expression}}92#pragma acc loop collapse(force:)93 for(int i = 0; i < 5;++i) {}94 95 // expected-error@+1{{invalid tag 'unknown' on 'collapse' clause}}96#pragma acc loop collapse(unknown:1)97 for(int i = 0; i < 5;++i) {}98 99#pragma acc loop collapse(force:1)100 for(int i = 0; i < 5;++i) {}101 102#pragma acc loop collapse(1)103 for(int i = 0; i < 5;++i) {}104 105 // expected-error@+2{{expected ')'}}106 // expected-note@+1{{to match this '('}}107#pragma acc loop collapse(5, 6)108 for(int i = 0; i < 5;++i) {}109}110 111void DefaultClause() {112 // expected-error@+1{{expected '('}}113#pragma acc serial loop default114 for(int i = 0; i < 5;++i) {}115 116 // expected-error@+1{{expected '('}}117#pragma acc serial default self118 for(int i = 0; i < 5;++i) {}119 120 // expected-error@+1{{expected '('}}121#pragma acc serial default, self122 for(int i = 0; i < 5;++i) {}123 124 // expected-error@+3{{expected identifier}}125 // expected-error@+2{{expected ')'}}126 // expected-note@+1{{to match this '('}}127#pragma acc serial default(128 for(int i = 0; i < 5;++i) {}129 130 // expected-error@+3{{invalid value for 'default' clause; expected 'present' or 'none'}}131 // expected-error@+2{{expected ')'}}132 // expected-note@+1{{to match this '('}}133#pragma acc serial default( self134 for(int i = 0; i < 5;++i) {}135 136 // expected-error@+3{{expected identifier}}137 // expected-error@+2{{expected ')'}}138 // expected-note@+1{{to match this '('}}139#pragma acc serial default(, self140 for(int i = 0; i < 5;++i) {}141 142 // expected-error@+2{{expected '('}}143 // expected-error@+1{{expected identifier}}144#pragma acc serial default)145 for(int i = 0; i < 5;++i) {}146 147 // expected-error@+2{{expected '('}}148 // expected-error@+1{{expected identifier}}149#pragma acc serial default), self150 for(int i = 0; i < 5;++i) {}151 152 // expected-error@+1{{expected identifier}}153#pragma acc serial default()154 for(int i = 0; i < 5;++i) {}155 156 // expected-error@+1{{expected identifier}}157#pragma acc serial default() self158 for(int i = 0; i < 5;++i) {}159 160 // expected-error@+1{{expected identifier}}161#pragma acc serial default(), self162 for(int i = 0; i < 5;++i) {}163 164 // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}165#pragma acc serial default(invalid)166 for(int i = 0; i < 5;++i) {}167 168 // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}169#pragma acc serial default(auto) self170 for(int i = 0; i < 5;++i) {}171 172 // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}173#pragma acc serial default(invalid), self174 for(int i = 0; i < 5;++i) {}175 176#pragma acc serial default(none)177 for(int i = 0; i < 5;++i) {}178 179#pragma acc serial default(present), self180 for(int i = 0; i < 5;++i) {}181}182 183void IfClause() {184 int i, j;185 // expected-error@+1{{expected '('}}186#pragma acc serial loop if187 for(int i = 0; i < 5;++i) {}188 189 // expected-error@+1{{expected '('}}190#pragma acc serial if private(i)191 for(int i = 0; i < 5;++i) {}192 193 // expected-error@+1{{expected '('}}194#pragma acc serial if, private(i)195 for(int i = 0; i < 5;++i) {}196 197 // expected-error@+3{{expected expression}}198 // expected-error@+2{{expected ')'}}199 // expected-note@+1{{to match this '('}}200#pragma acc serial if(201 for(int i = 0; i < 5;++i) {}202 203 // expected-error@+3{{use of undeclared identifier 'self'}}204 // expected-error@+2{{expected ')'}}205 // expected-note@+1{{to match this '('}}206#pragma acc serial if( self207 for(int i = 0; i < 5;++i) {}208 209 // expected-error@+4{{expected expression}}210 // expected-error@+3{{use of undeclared identifier 'self'}}211 // expected-error@+2{{expected ')'}}212 // expected-note@+1{{to match this '('}}213#pragma acc serial if(, self214 for(int i = 0; i < 5;++i) {}215 216 // expected-error@+2{{expected '('}}217 // expected-error@+1{{expected identifier}}218#pragma acc serial if)219 for(int i = 0; i < 5;++i) {}220 221 // expected-error@+2{{expected '('}}222 // expected-error@+1{{expected identifier}}223#pragma acc serial if) private(i)224 for(int i = 0; i < 5;++i) {}225 226 // expected-error@+2{{expected '('}}227 // expected-error@+1{{expected identifier}}228#pragma acc serial if), private(i)229 for(int i = 0; i < 5;++i) {}230 231 // expected-error@+1{{expected expression}}232#pragma acc serial if()233 for(int i = 0; i < 5;++i) {}234 235 // expected-error@+1{{expected expression}}236#pragma acc serial if() private(i)237 for(int i = 0; i < 5;++i) {}238 239 // expected-error@+1{{expected expression}}240#pragma acc serial if(), private(i)241 for(int i = 0; i < 5;++i) {}242 243 // expected-error@+1{{use of undeclared identifier 'invalid_expr'}}244#pragma acc serial if(invalid_expr)245 for(int i = 0; i < 5;++i) {}246 247 // expected-error@+1{{expected expression}}248#pragma acc serial if() private(i)249 for(int i = 0; i < 5;++i) {}250 251#pragma acc serial if(i > j)252 for(int i = 0; i < 5;++i) {}253 254#pragma acc serial if(1+5>3), private(i)255 for(int i = 0; i < 5;++i) {}256}257 258void SelfClause() {259#pragma acc serial loop self260 for(int i = 0; i < 5;++i) {}261 262#pragma acc serial loop self, seq263 for(int i = 0; i < 5;++i) {}264 265 // expected-error@+3{{expected expression}}266 // expected-error@+2{{expected ')'}}267 // expected-note@+1{{to match this '('}}268#pragma acc serial loop self(269 for(int i = 0; i < 5;++i) {}270 271 // expected-error@+3{{use of undeclared identifier 'seq'}}272 // expected-error@+2{{expected ')'}}273 // expected-note@+1{{to match this '('}}274#pragma acc serial loop self( seq275 for(int i = 0; i < 5;++i) {}276 277 // expected-error@+4{{expected expression}}278 // expected-error@+3{{use of undeclared identifier 'seq'}}279 // expected-error@+2{{expected ')'}}280 // expected-note@+1{{to match this '('}}281#pragma acc serial loop self(, seq282 for(int i = 0; i < 5;++i) {}283 284 // expected-error@+1{{expected identifier}}285#pragma acc serial loop self)286 for(int i = 0; i < 5;++i) {}287 288 // expected-error@+1{{expected identifier}}289#pragma acc serial loop self) seq290 for(int i = 0; i < 5;++i) {}291 292 // expected-error@+1{{expected identifier}}293#pragma acc serial loop self), seq294 for(int i = 0; i < 5;++i) {}295 296 297 // expected-error@+1{{expected expression}}298#pragma acc serial loop self(), seq299 for(int i = 0; i < 5;++i) {}300 301 // expected-error@+2{{expected expression}}302 // expected-error@+1{{expected expression}}303#pragma acc serial loop self(,), seq304 for(int i = 0; i < 5;++i) {}305 306 // expected-error@+1{{use of undeclared identifier 'invalid_expr'}}307#pragma acc serial loop self(invalid_expr), seq308 for(int i = 0; i < 5;++i) {}309 310 int i, j;311 312 // expected-error@+2{{expected ')'}}313 // expected-note@+1{{to match this '('}}314#pragma acc serial self(i > j315 for(int i = 0; i < 5;++i) {}316 317 // expected-error@+3{{use of undeclared identifier 'seq'}}318 // expected-error@+2{{expected ')'}}319 // expected-note@+1{{to match this '('}}320#pragma acc serial self(i > j, seq321 for(int i = 0; i < 5;++i) {}322 323 // expected-warning@+1{{left operand of comma operator has no effect}}324#pragma acc serial self(i, j)325 for(int i = 0; i < 5;++i) {}326 327#pragma acc serial self(i > j)328 for(int i = 0; i < 5;++i) {}329 330#pragma acc serial self(1+5>3), private(i)331 for(int i = 0; i < 5;++i) {}332}333 334struct Members {335 int value;336 char array[5];337};338struct HasMembersArray {339 struct Members MemArr[4];340};341 342// On 'update', self behaves differently and requires parens, plus takes a var-list instead.343void SelfUpdate() {344 struct Members s;345 346 // expected-error@+1{{expected '('}}347#pragma acc update host(s) self348 for(int i = 0; i < 5;++i) {}349 350 // expected-error@+1{{use of undeclared identifier 'zero'}}351#pragma acc update self(zero : s.array[s.value : 5], s.value), if_present352 for(int i = 0; i < 5;++i) {}353 354#pragma acc update self(s.array[s.value : 5], s.value), if_present355 for(int i = 0; i < 5;++i) {}356}357 358void VarListClauses() {359 // expected-error@+1{{expected '('}}360#pragma acc serial copy361 for(int i = 0; i < 5;++i) {}362 363 // expected-error@+1{{expected '('}}364#pragma acc serial copy, self365 for(int i = 0; i < 5;++i) {}366 367 // expected-error@+2{{expected '('}}368 // expected-error@+1{{expected identifier}}369#pragma acc serial copy)370 for(int i = 0; i < 5;++i) {}371 372 // expected-error@+2{{expected '('}}373 // expected-error@+1{{expected identifier}}374#pragma acc serial copy), self375 for(int i = 0; i < 5;++i) {}376 377 // expected-error@+3{{expected expression}}378 // expected-error@+2{{expected ')'}}379 // expected-note@+1{{to match this '('}}380#pragma acc serial copy(381 for(int i = 0; i < 5;++i) {}382 383 // expected-error@+3{{expected expression}}384 // expected-error@+2{{expected ')'}}385 // expected-note@+1{{to match this '('}}386#pragma acc serial copy(, self387 for(int i = 0; i < 5;++i) {}388 389 // expected-error@+1{{expected expression}}390#pragma acc serial copy()391 for(int i = 0; i < 5;++i) {}392 393 // expected-error@+1{{expected expression}}394#pragma acc serial copy(), self395 for(int i = 0; i < 5;++i) {}396 397 struct Members s;398 struct HasMembersArray HasMem;399 400#pragma acc serial copy(s.array[s.value]), self401 for(int i = 0; i < 5;++i) {}402 403#pragma acc serial copy(s.array[s.value], s.array[s.value :5] ), self404 for(int i = 0; i < 5;++i) {}405 406#pragma acc serial copy(HasMem.MemArr[3].array[1]), self407 for(int i = 0; i < 5;++i) {}408 409#pragma acc serial copy(HasMem.MemArr[3].array[1:4]), self410 for(int i = 0; i < 5;++i) {}411 412 // expected-error@+1{{OpenACC sub-array is not allowed here}}413#pragma acc serial copy(HasMem.MemArr[1:3].array[1]), self414 for(int i = 0; i < 5;++i) {}415 416 // expected-error@+1{{OpenACC sub-array is not allowed here}}417#pragma acc serial copy(HasMem.MemArr[1:3].array[1:2]), self418 for(int i = 0; i < 5;++i) {}419 420#pragma acc serial copy(HasMem.MemArr[:]), self421 for(int i = 0; i < 5;++i) {}422 423 // cpp-error@+2{{expected unqualified-id}}424 // c-error@+1{{expected expression}}425#pragma acc serial copy(HasMem.MemArr[::]), self426 for(int i = 0; i < 5;++i) {}427 428 // expected-error@+3{{expected expression}}429 // expected-error@+2{{expected ']'}}430 // expected-note@+1{{to match this '['}}431#pragma acc serial copy(HasMem.MemArr[: :]), self432 for(int i = 0; i < 5;++i) {}433 434#pragma acc serial copy(HasMem.MemArr[3:]), self435 for(int i = 0; i < 5;++i) {}436 437 // expected-warning@+1{{OpenACC clause name 'pcopy' is a deprecated clause name and is now an alias for 'copy'}}438#pragma acc serial pcopy(HasMem.MemArr[3:])439 for(int i = 0; i < 5;++i) {}440 441 // expected-warning@+1{{OpenACC clause name 'present_or_copy' is a deprecated clause name and is now an alias for 'copy'}}442#pragma acc serial present_or_copy(HasMem.MemArr[3:])443 for(int i = 0; i < 5;++i) {}444 445 // expected-error@+2{{unknown modifier 'foo' in OpenACC modifier-list on 'copy' clause}}446 // expected-error@+1{{unknown modifier 'bar' in OpenACC modifier-list on 'copy' clause}}447#pragma acc parallel copy(foo, bar: HasMem.MemArr[3:]) self448 for(int i = 0; i < 5;++i) {}449 450 // expected-error@+1{{duplicate modifier 'always' in OpenACC modifier-list on 'copy' clause}}451#pragma acc parallel copy(always, alwaysin, always: HasMem.MemArr[3:]) self452 for(int i = 0; i < 5;++i) {}453 454 // expected-error@+1{{use of undeclared identifier 'always'}}455#pragma acc parallel copy(always, alwaysin, always, HasMem.MemArr[3:]) self456 for(int i = 0; i < 5;++i) {}457 458 // expected-error@+2 2{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}459 // expected-error@+1{{expected ','}}460#pragma acc host_data use_device(s.array[s.value] s.array[s.value :5] ), if_present461 for(int i = 0; i < 5;++i) {}462 463 // expected-error@+1{{OpenACC variable in 'use_device' clause is not a valid variable name or array name}}464#pragma acc host_data use_device(s.array[s.value : 5]), if_present465 for(int i = 0; i < 5;++i) {}466 467#pragma acc host_data use_device(HasMem), if_present468 for(int i = 0; i < 5;++i) {}469 470 // expected-error@+1{{expected ','}}471#pragma acc serial no_create(s.array[s.value] s.array[s.value :5] ), self472 for(int i = 0; i < 5;++i) {}473 474#pragma acc serial no_create(s.array[s.value : 5], s.value), self475 for(int i = 0; i < 5;++i) {}476 477 // expected-error@+1{{expected ','}}478#pragma acc serial present(s.array[s.value] s.array[s.value :5] ), self479 for(int i = 0; i < 5;++i) {}480 481#pragma acc serial present(s.array[s.value : 5], s.value), self482 for(int i = 0; i < 5;++i) {}483 484 485 void *IsPointer;486 // expected-error@+4{{expected ','}}487 // expected-error@+3{{expected pointer in 'deviceptr' clause, type is 'char'}}488 // expected-error@+2{{OpenACC sub-array is not allowed here}}489 // expected-note@+1{{expected variable of pointer type}}490#pragma acc serial deviceptr(s.array[s.value] s.array[s.value :5] ), self491 for(int i = 0; i < 5;++i) {}492 493#pragma acc serial deviceptr(IsPointer), self494 for(int i = 0; i < 5;++i) {}495 496 // expected-error@+4{{expected ','}}497 // expected-error@+3{{expected pointer in 'attach' clause, type is 'char'}}498 // expected-error@+2{{OpenACC sub-array is not allowed here}}499 // expected-note@+1{{expected variable of pointer type}}500#pragma acc serial attach(s.array[s.value] s.array[s.value :5] ), self501 for(int i = 0; i < 5;++i) {}502 503#pragma acc serial attach(IsPointer), self504 for(int i = 0; i < 5;++i) {}505 506 // expected-error@+4{{expected ','}}507 // expected-error@+3{{expected pointer in 'detach' clause, type is 'char'}}508 // expected-error@+2{{OpenACC sub-array is not allowed here}}509 // expected-note@+1{{expected variable of pointer type}}510#pragma acc exit data copyout(s) detach(s.array[s.value] s.array[s.value :5])511 512#pragma acc exit data copyout(s) detach(IsPointer)513 514 // expected-error@+1{{expected ','}}515#pragma acc serial private(s.array[s.value] s.array[s.value :5] ), self516 for(int i = 0; i < 5;++i) {}517 518#pragma acc serial private(s.array[s.value : 5], s.value), self519 for(int i = 0; i < 5;++i) {}520 521 // expected-error@+1{{expected ','}}522#pragma acc serial firstprivate(s.array[s.value] s.array[s.value :5] ), self523 for(int i = 0; i < 5;++i) {}524 525#pragma acc serial firstprivate(s.array[s.value : 5], s.value), self526 for(int i = 0; i < 5;++i) {}527 528 // expected-error@+1{{expected ','}}529#pragma acc exit data delete(s.array[s.value] s.array[s.value :5] ) async530 for(int i = 0; i < 5;++i) {}531 532#pragma acc exit data delete(s.array[s.value : 5], s.value),async533 for(int i = 0; i < 5;++i) {}534 535 // expected-error@+3{{expected ','}}536 // expected-error@+2{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}537 // expected-error@+1{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}538#pragma acc declare device_resident(s.array[s.value] s.array[s.value :5] ), copy(s)539 540 int CopyRef1, CopyRef2, CopyRef3;541 542 // expected-error@+2{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}543 // expected-error@+1{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}544#pragma acc declare device_resident(s.array[s.value : 5], s.value), copy(CopyRef1)545 546 // expected-error@+3{{expected ','}}547 // expected-error@+2{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}548 // expected-error@+1{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}549#pragma acc declare link(s.array[s.value] s.array[s.value :5] ), copy(CopyRef2)550 551 // expected-error@+2{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}552 // expected-error@+1{{OpenACC variable on 'declare' construct is not a valid variable name or array name}}553#pragma acc declare link(s.array[s.value : 5], s.value), copy(CopyRef3)554 555 // expected-error@+1{{expected ','}}556#pragma acc update host(s.array[s.value] s.array[s.value :5] )557 for(int i = 0; i < 5;++i) {}558 559#pragma acc update host(s.array[s.value : 5], s.value)560 for(int i = 0; i < 5;++i) {}561 562 // expected-error@+1{{expected ','}}563#pragma acc update device(s.array[s.value] s.array[s.value :5] )564 for(int i = 0; i < 5;++i) {}565 566#pragma acc update device(s.array[s.value : 5], s.value)567 for(int i = 0; i < 5;++i) {}568 569 // expected-error@+1{{expected ','}}570#pragma acc serial copyout(s.array[s.value] s.array[s.value :5] ), self571 for(int i = 0; i < 5;++i) {}572 573#pragma acc serial copyout(s.array[s.value : 5], s.value), self574 for(int i = 0; i < 5;++i) {}575 576#pragma acc serial copyout(zero:s.array[s.value : 5], s.value), self577 for(int i = 0; i < 5;++i) {}578 579 // expected-warning@+1{{OpenACC clause name 'pcopyout' is a deprecated clause name and is now an alias for 'copyout'}}580#pragma acc serial pcopyout(s.array[s.value : 5], s.value)581 for(int i = 0; i < 5;++i) {}582 583 // expected-warning@+1{{OpenACC clause name 'present_or_copyout' is a deprecated clause name and is now an alias for 'copyout'}}584#pragma acc serial present_or_copyout(zero:s.array[s.value : 5], s.value)585 for(int i = 0; i < 5;++i) {}586 587#pragma acc serial copyout(zero : s.array[s.value : 5], s.value), self588 for(int i = 0; i < 5;++i) {}589 590 // expected-error@+1{{use of undeclared identifier 'zero'}}591#pragma acc serial copyout(zero s.array[s.value : 5], s.value), self592 for(int i = 0; i < 5;++i) {}593 594 // expected-error@+1{{OpenACC 'readonly' modifier not valid on 'copyout' clause}}595#pragma acc serial copyout(readonly:s.array[s.value : 5], s.value), self596 for(int i = 0; i < 5;++i) {}597 598 // expected-error@+1{{unknown modifier 'invalid' in OpenACC modifier-list on 'copyout' clause}}599#pragma acc serial copyout(invalid:s.array[s.value : 5], s.value), self600 for(int i = 0; i < 5;++i) {}601 602 // expected-error@+1{{unknown modifier 'invalid' in OpenACC modifier-list on 'copyout' clause}}603#pragma acc serial copyout(invalid:s.array[s.value : 5], s.value), self604 for(int i = 0; i < 5;++i) {}605 606 // expected-error@+1{{use of undeclared identifier 'invalid'}}607#pragma acc serial copyout(invalid s.array[s.value : 5], s.value), self608 for(int i = 0; i < 5;++i) {}609 610 // expected-error@+2{{unknown modifier 'invalid' in OpenACC modifier-list on 'copyout' clause}}611 // expected-error@+1{{unknown modifier 'bar' in OpenACC modifier-list on 'copyout' clause}}612#pragma acc serial copyout(invalid, bar: s.array[s.value : 5], s.value), self613 for(int i = 0; i < 5;++i) {}614 615 // expected-error@+1{{duplicate modifier 'zero' in OpenACC modifier-list on 'copyout' clause}}616#pragma acc serial copyout(zero, zero, always: s.array[s.value : 5], s.value), self617 for(int i = 0; i < 5;++i) {}618 619 // expected-error@+1{{expected ','}}620#pragma acc serial create(s.array[s.value] s.array[s.value :5] ), self621 for(int i = 0; i < 5;++i) {}622 623#pragma acc serial create(s.array[s.value : 5], s.value), self624 for(int i = 0; i < 5;++i) {}625 626#pragma acc serial create(zero:s.array[s.value : 5], s.value), self627 for(int i = 0; i < 5;++i) {}628 629 // expected-error@+1{{OpenACC 'always' modifier not valid on 'create' clause}}630#pragma acc serial create(always, zero:s.array[s.value : 5], s.value), self631 for(int i = 0; i < 5;++i) {}632 633 // expected-error@+2{{duplicate modifier 'always' in OpenACC modifier-list on 'create' clause}}634 // expected-error@+1{{OpenACC 'always' modifier not valid on 'create' clause}}635#pragma acc serial create(always, always, zero:s.array[s.value : 5], s.value), self636 for(int i = 0; i < 5;++i) {}637 638 // expected-error@+2{{unknown modifier 'invalid' in OpenACC modifier-list on 'create' clause}}639 // expected-error@+1{{OpenACC 'always' modifier not valid on 'create' clause}}640#pragma acc serial create(always, invalid, zero:s.array[s.value : 5], s.value), self641 for(int i = 0; i < 5;++i) {}642 643 // expected-warning@+1{{OpenACC clause name 'pcreate' is a deprecated clause name and is now an alias for 'create'}}644#pragma acc serial pcreate(s.array[s.value : 5], s.value)645 for(int i = 0; i < 5;++i) {}646 647 // expected-warning@+1{{OpenACC clause name 'present_or_create' is a deprecated clause name and is now an alias for 'create'}}648#pragma acc serial present_or_create(zero:s.array[s.value : 5], s.value)649 for(int i = 0; i < 5;++i) {}650 651#pragma acc serial create(zero : s.array[s.value : 5], s.value), self652 for(int i = 0; i < 5;++i) {}653 654 // expected-error@+1{{use of undeclared identifier 'zero'}}655#pragma acc serial create(zero s.array[s.value : 5], s.value), self656 for(int i = 0; i < 5;++i) {}657 658 // expected-error@+1{{OpenACC 'readonly' modifier not valid on 'create' clause}}659#pragma acc serial create(readonly:s.array[s.value : 5], s.value), self660 for(int i = 0; i < 5;++i) {}661 662 // expected-error@+1{{unknown modifier 'invalid' in OpenACC modifier-list on 'create' clause}}663#pragma acc serial create(invalid:s.array[s.value : 5], s.value), self664 for(int i = 0; i < 5;++i) {}665 666 // expected-error@+1{{unknown modifier 'invalid' in OpenACC modifier-list on 'create' clause}}667#pragma acc serial create(invalid:s.array[s.value : 5], s.value), self668 for(int i = 0; i < 5;++i) {}669 670 // expected-error@+1{{use of undeclared identifier 'invalid'}}671#pragma acc serial create(invalid s.array[s.value : 5], s.value), self672 for(int i = 0; i < 5;++i) {}673 674 // expected-error@+1{{expected ','}}675#pragma acc serial copyin(s.array[s.value] s.array[s.value :5] ), self676 for(int i = 0; i < 5;++i) {}677 678#pragma acc serial copyin(s.array[s.value : 5], s.value), self679 for(int i = 0; i < 5;++i) {}680 681#pragma acc serial copyin(readonly:s.array[s.value : 5], s.value), self682 for(int i = 0; i < 5;++i) {}683 684 // expected-warning@+1{{OpenACC clause name 'pcopyin' is a deprecated clause name and is now an alias for 'copyin'}}685#pragma acc serial pcopyin(s.array[s.value : 5], s.value)686 for(int i = 0; i < 5;++i) {}687 688 // expected-warning@+1{{OpenACC clause name 'present_or_copyin' is a deprecated clause name and is now an alias for 'copyin'}}689#pragma acc serial present_or_copyin(readonly:s.array[s.value : 5], s.value)690 for(int i = 0; i < 5;++i) {}691 692#pragma acc serial copyin(readonly : s.array[s.value : 5], s.value), self693 for(int i = 0; i < 5;++i) {}694 695 // expected-error@+1{{use of undeclared identifier 'readonly'}}696#pragma acc serial copyin(readonly s.array[s.value : 5], s.value), self697 for(int i = 0; i < 5;++i) {}698 699 // expected-error@+1{{OpenACC 'zero' modifier not valid on 'copyin' clause}}700#pragma acc serial copyin(zero :s.array[s.value : 5], s.value), self701 for(int i = 0; i < 5;++i) {}702 703 // expected-error@+1{{unknown modifier 'invalid' in OpenACC modifier-list on 'copyin' clause}}704#pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), self705 for(int i = 0; i < 5;++i) {}706 707 // expected-error@+1{{unknown modifier 'invalid' in OpenACC modifier-list on 'copyin' clause}}708#pragma acc serial copyin(invalid:s.array[s.value : 5], s.value), self709 for(int i = 0; i < 5;++i) {}710 711 // expected-error@+1{{use of undeclared identifier 'invalid'}}712#pragma acc serial copyin(invalid s.array[s.value : 5], s.value), self713 for(int i = 0; i < 5;++i) {}714 715 // expected-error@+2{{unknown modifier 'foo' in OpenACC modifier-list on 'copyin' clause}}716 // expected-error@+1{{unknown modifier 'bar' in OpenACC modifier-list on 'copyin' clause}}717#pragma acc serial copyin(foo, bar: s.array[s.value : 5], s.value), self718 for(int i = 0; i < 5;++i) {}719 720 // expected-error@+1{{duplicate modifier 'readonly' in OpenACC modifier-list on 'copyin' clause}}721#pragma acc serial copyin(always, readonly, readonly: s.array[s.value : 5], s.value), self722 for(int i = 0; i < 5;++i) {}723}724 725void ReductionClauseParsing() {726 char Begin, End;727 // expected-error@+1{{expected '('}}728#pragma acc serial reduction729 for(int i = 0; i < 5;++i) {}730 // expected-error@+2{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}731 // expected-error@+1{{expected expression}}732#pragma acc serial reduction()733 for(int i = 0; i < 5;++i) {}734 // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}735#pragma acc serial reduction(Begin)736 for(int i = 0; i < 5;++i) {}737 // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}738#pragma acc serial reduction(Begin, End)739 for(int i = 0; i < 5;++i) {}740 // expected-error@+1{{missing reduction operator, expected '+', '*', 'max', 'min', '&', '|', '^', '&&', or '||', follwed by a ':'}}741#pragma acc serial reduction(Begin, End)742 for(int i = 0; i < 5;++i) {}743#pragma acc serial reduction(+:Begin)744 for(int i = 0; i < 5;++i) {}745#pragma acc serial reduction(+:Begin, End)746 for(int i = 0; i < 5;++i) {}747#pragma acc serial reduction(*: Begin, End)748 for(int i = 0; i < 5;++i) {}749#pragma acc serial reduction(max : Begin, End)750 for(int i = 0; i < 5;++i) {}751#pragma acc serial reduction(min: Begin, End)752 for(int i = 0; i < 5;++i) {}753#pragma acc serial reduction(&: Begin, End)754 for(int i = 0; i < 5;++i) {}755#pragma acc serial reduction(|: Begin, End)756 for(int i = 0; i < 5;++i) {}757#pragma acc serial reduction(^: Begin, End)758 for(int i = 0; i < 5;++i) {}759#pragma acc serial self, reduction(&&: Begin, End)760 for(int i = 0; i < 5;++i) {}761#pragma acc serial reduction(||: Begin, End), self762 for(int i = 0; i < 5;++i) {}763}764 765int returns_int();766 767void IntExprParsing() {768 // expected-error@+1{{expected '('}}769#pragma acc parallel vector_length770 {}771 772 // expected-error@+1{{expected expression}}773#pragma acc parallel vector_length()774 {}775 776 // expected-error@+1{{use of undeclared identifier 'invalid'}}777#pragma acc parallel vector_length(invalid)778 {}779 780 // expected-error@+2{{expected ')'}}781 // expected-note@+1{{to match this '('}}782#pragma acc parallel vector_length(5, 4)783 {}784 785#pragma acc parallel vector_length(5)786 {}787 788#pragma acc parallel vector_length(returns_int())789 {}790 791 // expected-error@+1{{expected '('}}792#pragma acc parallel num_gangs793 {}794 795 // expected-error@+1{{expected expression}}796#pragma acc parallel num_gangs()797 {}798 799 // expected-error@+1{{use of undeclared identifier 'invalid'}}800#pragma acc parallel num_gangs(invalid)801 {}802 803#pragma acc parallel num_gangs(5, 4)804 {}805 806#pragma acc parallel num_gangs(5)807 {}808 809#pragma acc parallel num_gangs(returns_int())810 {}811 812 // expected-error@+1{{expected '('}}813#pragma acc parallel num_workers814 {}815 816 // expected-error@+1{{expected expression}}817#pragma acc parallel num_workers()818 {}819 820 // expected-error@+1{{use of undeclared identifier 'invalid'}}821#pragma acc parallel num_workers(invalid)822 {}823 824 // expected-error@+2{{expected ')'}}825 // expected-note@+1{{to match this '('}}826#pragma acc parallel num_workers(5, 4)827 {}828 829#pragma acc parallel num_workers(5)830 {}831 832#pragma acc parallel num_workers(returns_int())833 {}834 835 // expected-error@+1{{expected '('}}836#pragma acc init device_num837 838 // expected-error@+1{{expected expression}}839#pragma acc init device_num()840 841 // expected-error@+1{{use of undeclared identifier 'invalid'}}842#pragma acc init device_num(invalid)843 844 // expected-error@+2{{expected ')'}}845 // expected-note@+1{{to match this '('}}846#pragma acc init device_num(5, 4)847 848#pragma acc init device_num(5)849 850#pragma acc init device_num(returns_int())851 852 // expected-error@+2{{expected '('}}853 // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', or 'device_type' clause}}854#pragma acc set default_async855 856 // expected-error@+2{{expected expression}}857 // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', or 'device_type' clause}}858#pragma acc set default_async()859 860 // expected-error@+2{{use of undeclared identifier 'invalid'}}861 // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', or 'device_type' clause}}862#pragma acc set default_async(invalid)863 864 // expected-error@+3{{expected ')'}}865 // expected-note@+2{{to match this '('}}866 // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', or 'device_type' clause}}867#pragma acc set default_async(5, 4)868 869#pragma acc set default_async(5)870 871#pragma acc set default_async(returns_int())872 873 874#pragma acc loop vector875 for(int i = 0; i < 5;++i);876 // expected-error@+1{{expected expression}}877#pragma acc loop vector()878 for(int i = 0; i < 5;++i);879 // expected-error@+2{{invalid tag 'invalid' on 'vector' clause}}880 // expected-error@+1{{expected expression}}881#pragma acc loop vector(invalid:)882 for(int i = 0; i < 5;++i);883 // expected-error@+1{{invalid tag 'invalid' on 'vector' clause}}884#pragma acc loop vector(invalid:5)885 for(int i = 0; i < 5;++i);886 // expected-error@+1{{expected expression}}887#pragma acc loop vector(length:)888 for(int i = 0; i < 5;++i);889 // expected-error@+2{{invalid tag 'num' on 'vector' clause}}890 // expected-error@+1{{expected expression}}891#pragma acc loop vector(num:)892 for(int i = 0; i < 5;++i);893 // expected-error@+2{{expected ')'}}894 // expected-note@+1{{to match this '('}}895#pragma acc loop vector(5, 4)896 for(int i = 0; i < 5;++i);897 // expected-error@+2{{expected ')'}}898 // expected-note@+1{{to match this '('}}899#pragma acc loop vector(length:6,4)900 for(int i = 0; i < 5;++i);901 // expected-error@+3{{invalid tag 'num' on 'vector' clause}}902 // expected-error@+2{{expected ')'}}903 // expected-note@+1{{to match this '('}}904#pragma acc loop vector(num:6,4)905 for(int i = 0; i < 5;++i);906#pragma acc loop vector(5)907 for(int i = 0; i < 5;++i);908 // expected-error@+1{{invalid tag 'num' on 'vector' clause}}909#pragma acc loop vector(num:5)910 for(int i = 0; i < 5;++i);911#pragma acc loop vector(length:5)912 for(int i = 0; i < 5;++i);913#pragma acc loop vector(returns_int())914 for(int i = 0; i < 5;++i);915#pragma acc loop vector(length:returns_int())916 for(int i = 0; i < 5;++i);917 918#pragma acc loop worker919 for(int i = 0; i < 5;++i);920 // expected-error@+1{{expected expression}}921#pragma acc loop worker()922 for(int i = 0; i < 5;++i);923 // expected-error@+2{{invalid tag 'invalid' on 'worker' clause}}924 // expected-error@+1{{expected expression}}925#pragma acc loop worker(invalid:)926 for(int i = 0; i < 5;++i);927#pragma acc kernels928 // expected-error@+1{{invalid tag 'invalid' on 'worker' clause}}929#pragma acc loop worker(invalid:5)930 for(int i = 0; i < 5;++i);931 // expected-error@+1{{expected expression}}932#pragma acc loop worker(num:)933 for(int i = 0; i < 5;++i);934 // expected-error@+2{{invalid tag 'length' on 'worker' clause}}935 // expected-error@+1{{expected expression}}936#pragma acc loop worker(length:)937 for(int i = 0; i < 5;++i);938 // expected-error@+2{{expected ')'}}939 // expected-note@+1{{to match this '('}}940#pragma acc loop worker(5, 4)941 for(int i = 0; i < 5;++i);942 // expected-error@+2{{expected ')'}}943 // expected-note@+1{{to match this '('}}944#pragma acc loop worker(num:6,4)945 for(int i = 0; i < 5;++i);946 // expected-error@+3{{invalid tag 'length' on 'worker' clause}}947 // expected-error@+2{{expected ')'}}948 // expected-note@+1{{to match this '('}}949#pragma acc loop worker(length:6,4)950 for(int i = 0; i < 5;++i);951#pragma acc kernels952#pragma acc loop worker(5)953 for(int i = 0; i < 5;++i);954#pragma acc kernels955 // expected-error@+1{{invalid tag 'length' on 'worker' clause}}956#pragma acc loop worker(length:5)957 for(int i = 0; i < 5;++i);958#pragma acc kernels959#pragma acc loop worker(num:5)960 for(int i = 0; i < 5;++i);961#pragma acc kernels962#pragma acc loop worker(returns_int())963 for(int i = 0; i < 5;++i);964#pragma acc kernels965 // expected-error@+1{{invalid tag 'length' on 'worker' clause}}966#pragma acc loop worker(length:returns_int())967 for(int i = 0; i < 5;++i);968}969 970void device_type() {971 // expected-error@+1{{expected '('}}972#pragma acc parallel device_type973 {}974 // expected-error@+1{{expected '('}}975#pragma acc parallel dtype976 {}977 978 // expected-error@+3{{expected identifier}}979 // expected-error@+2{{expected ')'}}980 // expected-note@+1{{to match this '('}}981#pragma acc parallel device_type(982 {}983 // expected-error@+3{{expected identifier}}984 // expected-error@+2{{expected ')'}}985 // expected-note@+1{{to match this '('}}986#pragma acc parallel dtype(987 {}988 989 // expected-error@+1{{expected identifier}}990#pragma acc parallel device_type()991 {}992 // expected-error@+1{{expected identifier}}993#pragma acc parallel dtype()994 {}995 996 // expected-error@+2{{expected ')'}}997 // expected-note@+1{{to match this '('}}998#pragma acc parallel device_type(*999 {}1000 // expected-error@+2{{expected ')'}}1001 // expected-note@+1{{to match this '('}}1002#pragma acc parallel dtype(*1003 {}1004 1005 // expected-error@+2{{expected ')'}}1006 // expected-note@+1{{to match this '('}}1007#pragma acc parallel device_type(ident1008 {}1009 // expected-error@+2{{expected ')'}}1010 // expected-note@+1{{to match this '('}}1011#pragma acc parallel dtype(ident1012 {}1013 1014 // expected-error@+3{{expected ','}}1015 // expected-error@+2{{expected ')'}}1016 // expected-note@+1{{to match this '('}}1017#pragma acc parallel device_type(ident ident21018 {}1019 // expected-error@+3{{expected ','}}1020 // expected-error@+2{{expected ')'}}1021 // expected-note@+1{{to match this '('}}1022#pragma acc parallel dtype(ident ident21023 {}1024 1025 // expected-error@+2{{expected ')'}}1026 // expected-note@+1{{to match this '('}}1027#pragma acc parallel device_type(ident, ident21028 {}1029 // expected-error@+2{{expected ')'}}1030 // expected-note@+1{{to match this '('}}1031#pragma acc parallel dtype(ident, ident21032 {}1033 1034 // expected-error@+1{{expected identifier}}1035#pragma acc parallel device_type(ident, ident2,)1036 {}1037 // expected-error@+1{{expected identifier}}1038#pragma acc parallel dtype(ident, ident2,)1039 {}1040 1041 // expected-error@+2{{expected ')'}}1042 // expected-note@+1{{to match this '('}}1043#pragma acc parallel device_type(*,)1044 {}1045 // expected-error@+2{{expected ')'}}1046 // expected-note@+1{{to match this '('}}1047#pragma acc parallel dtype(*,)1048 {}1049 1050 // expected-error@+2{{expected ')'}}1051 // expected-note@+1{{to match this '('}}1052#pragma acc parallel device_type(*,ident)1053 {}1054 // expected-error@+2{{expected ')'}}1055 // expected-note@+1{{to match this '('}}1056#pragma acc parallel dtype(*,ident)1057 {}1058 1059 // expected-error@+1{{expected identifier}}1060#pragma acc parallel device_type(ident, *)1061 {}1062 // expected-error@+1{{expected identifier}}1063#pragma acc parallel dtype(ident, *)1064 {}1065 1066 // expected-error@+1{{expected identifier}}1067#pragma acc parallel device_type("foo", 54)1068 {}1069 // expected-error@+1{{expected identifier}}1070#pragma acc parallel dtype(31, "bar")1071 {}1072 1073 // expected-error@+4{{invalid value 'ident' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1074 // expected-error@+3{{invalid value 'auto' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1075 // expected-error@+2{{invalid value 'int' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1076 // expected-error@+1{{invalid value 'float' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1077#pragma acc parallel device_type(ident, auto, int, float)1078 {}1079 // expected-error@+4{{invalid value 'ident' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1080 // expected-error@+3{{invalid value 'auto' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1081 // expected-error@+2{{invalid value 'int' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1082 // expected-error@+1{{invalid value 'float' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1083#pragma acc parallel dtype(ident, auto, int, float)1084 {}1085 1086 // expected-error@+8{{invalid value 'ident' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1087 // expected-error@+7{{invalid value 'auto' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1088 // expected-error@+6{{invalid value 'int' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1089 // expected-error@+5{{invalid value 'float' in 'device_type' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1090 // expected-error@+4{{invalid value 'ident' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1091 // expected-error@+3{{invalid value 'auto' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1092 // expected-error@+2{{invalid value 'int' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1093 // expected-error@+1{{invalid value 'float' in 'dtype' clause; valid values are 'default', 'nvidia', 'acc_device_nvidia', 'radeon', 'host', 'multicore'}}1094#pragma acc parallel device_type(ident, auto, int, float) dtype(ident, auto, int, float)1095 {}1096}1097 1098#define acc_async_sync -11099void AsyncArgument() {1100#pragma acc parallel async1101 {}1102 1103 // expected-error@+1{{expected expression}}1104#pragma acc parallel async()1105 {}1106 1107 // expected-error@+1{{use of undeclared identifier 'invalid'}}1108#pragma acc parallel async(invalid)1109 {}1110 1111 // expected-error@+2{{expected ')'}}1112 // expected-note@+1{{to match this '('}}1113#pragma acc parallel async(4, 3)1114 {}1115 1116#pragma acc parallel async(returns_int())1117 {}1118 1119#pragma acc parallel async(5)1120 {}1121 1122#pragma acc parallel async(acc_async_sync)1123 {}1124}1125 1126void Tile() {1127 1128 int* Foo;1129 // expected-error@+1{{expected '('}}1130#pragma acc loop tile1131 for(int i = 0; i < 5;++i) {}1132 // expected-error@+3{{expected expression}}1133 // expected-error@+2{{expected ')'}}1134 // expected-note@+1{{to match this '('}}1135#pragma acc loop tile(1136 for(int i = 0; i < 5;++i) {}1137 // expected-error@+1{{expected expression}}1138#pragma acc loop tile()1139 for(int i = 0; i < 5;++i) {}1140 // expected-error@+3{{expected expression}}1141 // expected-error@+2{{expected ')'}}1142 // expected-note@+1{{to match this '('}}1143#pragma acc loop tile(,1144 for(int i = 0; i < 5;++i) {}1145 // expected-error@+1{{expected expression}}1146#pragma acc loop tile(,)1147 for(int i = 0; i < 5;++i) {}1148 // expected-error@+1{{use of undeclared identifier 'invalid'}}1149#pragma acc loop tile(returns_int(), *, invalid, *)1150 for(int i = 0; i < 5;++i) {}1151 1152 // expected-error@+1{{expected expression}}1153#pragma acc loop tile(returns_int() *, Foo, *)1154 for(int i = 0; i < 5;++i) {}1155 1156 // expected-error@+1{{indirection requires pointer operand ('int' invalid)}}1157#pragma acc loop tile(* returns_int() , *)1158 for(int j = 0; j < 5;++j){1159 for(int i = 0; i < 5;++i);1160 }1161 1162#pragma acc loop tile(*)1163 for(int i = 0; i < 5;++i) {}1164 // expected-error@+1{{OpenACC 'tile' clause size expression must be an asterisk or a constant expression}}1165#pragma acc loop tile(*Foo, *Foo)1166 for(int i = 0; i < 5;++i) {}1167#pragma acc loop tile(5)1168 for(int i = 0; i < 5;++i) {}1169#pragma acc loop tile(*, 5)1170 for(int j = 0; j < 5;++j){1171 for(int i = 0; i < 5;++i);1172 }1173#pragma acc loop tile(5, *)1174 for(int j = 0; j < 5;++j){1175 for(int i = 0; i < 5;++i);1176 }1177#pragma acc loop tile(5, *, 3, *)1178 for(int j = 0; j < 5;++j){1179 for(int k = 0; k < 5;++k)1180 for(int l = 0;l < 5;++l)1181 for(int i = 0; i < 5;++i);1182 }1183}1184 1185void Gang() {1186#pragma acc loop gang1187 for(int i = 0; i < 5;++i) {}1188 // expected-error@+3{{expected expression}}1189 // expected-error@+2{{expected ')'}}1190 // expected-note@+1{{to match this '('}}1191#pragma acc loop gang(1192 for(int i = 0; i < 5;++i) {}1193 // expected-error@+1{{expected expression}}1194#pragma acc loop gang()1195 for(int i = 0; i < 5;++i) {}1196 1197 // expected-error@+1{{expected expression}}1198#pragma acc loop gang(5, *)1199 for(int i = 0; i < 5;++i) {}1200 1201 // expected-error@+1{{expected expression}}1202#pragma acc loop gang(*)1203 for(int i = 0; i < 5;++i) {}1204 1205 // expected-error@+1{{expected expression}}1206#pragma acc loop gang(5, num:*)1207 for(int i = 0; i < 5;++i) {}1208 1209 // expected-error@+1{{expected expression}}1210#pragma acc loop gang(num:5, *)1211 for(int i = 0; i < 5;++i) {}1212 1213 // expected-error@+1{{expected expression}}1214#pragma acc loop gang(num:5, num:*)1215 for(int i = 0; i < 5;++i) {}1216 1217 // expected-error@+1{{expected expression}}1218#pragma acc loop gang(num:*)1219 for(int i = 0; i < 5;++i) {}1220 1221#pragma acc loop gang(dim:2)1222 for(int i = 0; i < 5;++i) {}1223 1224 // expected-error@+1{{expected expression}}1225#pragma acc loop gang(dim:5, dim:*)1226 for(int i = 0; i < 5;++i) {}1227 1228 // expected-error@+1{{expected expression}}1229#pragma acc loop gang(dim:*)1230 for(int i = 0; i < 5;++i) {}1231 1232#pragma acc loop gang(static:*)1233 for(int i = 0; i < 5;++i) {}1234 1235 // expected-error@+2{{OpenACC 'gang' clause may have at most one 'static' argument}}1236 // expected-note@+1{{previous expression is here}}1237#pragma acc loop gang(static:*, static:5)1238 for(int i = 0; i < 5;++i) {}1239 1240#pragma acc kernels1241#pragma acc loop gang(static:*, 5)1242 for(int i = 0; i < 5;++i) {}1243 1244#pragma acc kernels1245#pragma acc loop gang(static:45, 5)1246 for(int i = 0; i < 5;++i) {}1247 1248 // expected-error@+3{{expected expression}}1249 // expected-error@+2{{expected ')'}}1250 // expected-note@+1{{to match this '('}}1251#pragma acc loop gang(static:45,1252 for(int i = 0; i < 5;++i) {}1253 1254 // expected-error@+2{{expected ')'}}1255 // expected-note@+1{{to match this '('}}1256#pragma acc loop gang(static:451257 for(int i = 0; i < 5;++i) {}1258 1259 // expected-error@+3{{expected expression}}1260 // expected-error@+2{{expected ')'}}1261 // expected-note@+1{{to match this '('}}1262#pragma acc loop gang(static:*,1263 for(int i = 0; i < 5;++i) {}1264 1265 // expected-error@+2{{expected ')'}}1266 // expected-note@+1{{to match this '('}}1267#pragma acc loop gang(static:*1268 for(int i = 0; i < 5;++i) {}1269 1270 // expected-error@+3{{expected expression}}1271 // expected-error@+2{{expected ')'}}1272 // expected-note@+1{{to match this '('}}1273#pragma acc loop gang(45,1274 for(int i = 0; i < 5;++i) {}1275 1276 // expected-error@+2{{expected ')'}}1277 // expected-note@+1{{to match this '('}}1278#pragma acc loop gang(451279 for(int i = 0; i < 5;++i) {}1280 1281 // expected-error@+3{{expected expression}}1282 // expected-error@+2{{expected ')'}}1283 // expected-note@+1{{to match this '('}}1284#pragma acc loop gang(num:45,1285 for(int i = 0; i < 5;++i) {}1286 1287 // expected-error@+2{{expected ')'}}1288 // expected-note@+1{{to match this '('}}1289#pragma acc loop gang(num:451290 for(int i = 0; i < 5;++i) {}1291 1292 // expected-error@+3{{expected expression}}1293 // expected-error@+2{{expected ')'}}1294 // expected-note@+1{{to match this '('}}1295#pragma acc loop gang(dim:45,1296 for(int i = 0; i < 5;++i) {}1297 1298 // expected-error@+2{{expected ')'}}1299 // expected-note@+1{{to match this '('}}1300#pragma acc loop gang(dim:451301 for(int i = 0; i < 5;++i) {}1302 1303#pragma acc kernels1304#pragma acc loop gang(static:*, 5)1305 for(int i = 0; i < 5;++i) {}1306 1307 // expected-error@+1{{argument to 'gang' clause dimension must be a constant expression}}1308#pragma acc loop gang(static:*, dim:returns_int())1309 for(int i = 0; i < 5;++i) {}1310 1311 // expected-error@+2 2{{'num' argument on 'gang' clause is not permitted on an orphaned 'loop' construct}}1312 // expected-error@+1{{argument to 'gang' clause dimension must be a constant expression}}1313#pragma acc loop gang(num: 32, static:*, dim:returns_int(), 5)1314 for(int i = 0; i < 5;++i) {}1315 1316}1317 1318 // expected-error@+4{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}1319 // expected-note@+3{{previous 'worker' clause is here}}1320 // expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}1321 // expected-note@+1{{previous 'worker' clause is here}}1322#pragma acc routine worker, vector, seq, nohost1323void bar();1324 1325 // expected-error@+4{{OpenACC clause 'seq' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}1326 // expected-note@+3{{previous 'worker' clause is here}}1327 // expected-error@+2{{OpenACC clause 'vector' may not appear on the same construct as a 'worker' clause on a 'routine' construct}}1328 // expected-note@+1{{previous 'worker' clause is here}}1329#pragma acc routine(bar) worker, vector, seq, nohost1330 1331 1332// Bind Clause Parsing.1333 1334// expected-error@+1{{expected '('}}1335#pragma acc routine seq bind1336void BCP1();1337 1338 // expected-error@+1{{expected identifier or string literal in OpenACC 'bind' clause}}1339#pragma acc routine(BCP1) seq bind()1340 1341 // expected-error@+1{{expected identifier or string literal in OpenACC 'bind' clause}}1342#pragma acc routine(BCP1) seq bind(1)1343 1344 // expected-error@+1{{expected identifier or string literal in OpenACC 'bind' clause}}1345#pragma acc routine(BCP1) gang bind(0xF)1346 1347// expected-error@+1{{expected function or lambda declaration for 'routine' construct}}1348#pragma acc routine seq bind("ReductionClauseParsing")1349 1350#pragma acc routine(BCP1) seq bind(unknown_thing)1351 1352void AtomicIf() {1353 int i, j;1354 // expected-error@+1{{expected '('}}1355#pragma acc atomic read if1356 i = j;1357#pragma acc atomic read if (0)1358 i = j;1359#pragma acc atomic write if (1)1360 i = j + 1;1361 1362#pragma acc atomic update if (i)1363 ++i;1364#pragma acc atomic if (j)1365 ++i;1366 1367#pragma acc atomic capture if (0)1368 i = j++;1369#pragma acc atomic capture if (i)1370 {1371 ++j;1372 i = j;1373 }1374}1375