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