1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s 2 3 void bar(); 4 5 template <class T> 6 void foo() { 7 T a = T(); 8 // PARALLEL DIRECTIVE 9 #pragma omp parallel 10 #pragma omp for 11 for (int i = 0; i < 10; ++i) 12 ; 13 #pragma omp parallel 14 #pragma omp simd 15 for (int i = 0; i < 10; ++i) 16 ; 17 #pragma omp parallel 18 #pragma omp for simd 19 for (int i = 0; i < 10; ++i) 20 ; 21 #pragma omp parallel 22 #pragma omp sections 23 { 24 bar(); 25 } 26 #pragma omp parallel 27 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}} 28 { 29 bar(); 30 } 31 #pragma omp parallel 32 #pragma omp single 33 bar(); 34 35 #pragma omp parallel 36 #pragma omp master 37 { 38 bar(); 39 } 40 #pragma omp parallel 41 #pragma omp critical 42 { 43 bar(); 44 } 45 #pragma omp parallel 46 #pragma omp parallel for 47 for (int i = 0; i < 10; ++i) 48 ; 49 #pragma omp parallel 50 #pragma omp parallel for simd 51 for (int i = 0; i < 10; ++i) 52 ; 53 #pragma omp parallel 54 #pragma omp parallel sections 55 { 56 bar(); 57 } 58 #pragma omp parallel 59 #pragma omp task 60 { 61 bar(); 62 } 63 #pragma omp parallel 64 { 65 #pragma omp taskyield 66 bar(); 67 } 68 #pragma omp parallel 69 { 70 #pragma omp barrier 71 bar(); 72 } 73 #pragma omp parallel 74 { 75 #pragma omp taskwait 76 bar(); 77 } 78 #pragma omp parallel 79 { 80 #pragma omp flush 81 bar(); 82 } 83 #pragma omp parallel 84 { 85 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 86 bar(); 87 } 88 #pragma omp parallel 89 { 90 #pragma omp atomic 91 ++a; 92 } 93 #pragma omp parallel 94 { 95 #pragma omp target 96 ++a; 97 } 98 #pragma omp parallel 99 { 100 #pragma omp target parallel 101 ++a; 102 } 103 #pragma omp parallel 104 { 105 #pragma omp target parallel for 106 for (int i = 0; i < 10; ++i) 107 ; 108 } 109 #pragma omp parallel 110 { 111 #pragma omp target enter data map(to: a) 112 ++a; 113 } 114 #pragma omp parallel 115 { 116 #pragma omp target exit data map(from: a) 117 ++a; 118 } 119 #pragma omp parallel 120 { 121 #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 122 ++a; 123 } 124 #pragma omp parallel 125 { 126 #pragma omp taskloop 127 for (int i = 0; i < 10; ++i) 128 ++a; 129 } 130 #pragma omp parallel 131 { 132 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 133 for (int i = 0; i < 10; ++i) 134 ; 135 } 136 137 // SIMD DIRECTIVE 138 #pragma omp simd 139 for (int i = 0; i < 10; ++i) { 140 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 141 for (int i = 0; i < 10; ++i) 142 ; 143 } 144 #pragma omp simd 145 for (int i = 0; i < 10; ++i) { 146 #pragma omp simd 147 for (int i = 0; i < 10; ++i) 148 ; 149 } 150 #pragma omp simd 151 for (int i = 0; i < 10; ++i) { 152 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 153 for (int i = 0; i < 10; ++i) 154 ; 155 } 156 #pragma omp simd 157 for (int i = 0; i < 10; ++i) { 158 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 159 for (int i = 0; i < 10; ++i) 160 ; 161 } 162 #pragma omp simd 163 for (int i = 0; i < 10; ++i) { 164 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 165 { 166 bar(); 167 } 168 } 169 #pragma omp simd 170 for (int i = 0; i < 10; ++i) { 171 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 172 { 173 bar(); 174 } 175 } 176 #pragma omp simd 177 for (int i = 0; i < 10; ++i) { 178 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 179 { 180 bar(); 181 } 182 } 183 #pragma omp simd 184 for (int i = 0; i < 10; ++i) { 185 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 186 { 187 bar(); 188 } 189 } 190 #pragma omp simd 191 for (int i = 0; i < 10; ++i) { 192 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 193 { 194 bar(); 195 } 196 } 197 #pragma omp simd 198 for (int i = 0; i < 10; ++i) { 199 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 200 for (int i = 0; i < 10; ++i) 201 ; 202 } 203 #pragma omp simd 204 for (int i = 0; i < 10; ++i) { 205 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 206 for (int i = 0; i < 10; ++i) 207 ; 208 } 209 #pragma omp simd 210 for (int i = 0; i < 10; ++i) { 211 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 212 { 213 bar(); 214 } 215 } 216 #pragma omp simd 217 for (int i = 0; i < 10; ++i) { 218 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 219 { 220 bar(); 221 } 222 } 223 #pragma omp simd 224 for (int i = 0; i < 10; ++i) { 225 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 226 bar(); 227 } 228 #pragma omp simd 229 for (int i = 0; i < 10; ++i) { 230 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 231 bar(); 232 } 233 #pragma omp simd 234 for (int i = 0; i < 10; ++i) { 235 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 236 bar(); 237 } 238 #pragma omp simd 239 for (int i = 0; i < 10; ++i) { 240 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 241 bar(); 242 } 243 #pragma omp simd 244 for (int i = 0; i < 10; ++i) { 245 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 246 bar(); 247 } 248 #pragma omp simd 249 for (int i = 0; i < 10; ++i) { 250 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 251 ++a; 252 } 253 #pragma omp simd 254 for (int i = 0; i < 10; ++i) { 255 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 256 ++a; 257 } 258 #pragma omp simd 259 for (int i = 0; i < 10; ++i) { 260 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 261 ++a; 262 } 263 #pragma omp simd 264 for (int i = 0; i < 10; ++i) { 265 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 266 for (int i = 0; i < 10; ++i) 267 ; 268 } 269 #pragma omp simd 270 for (int i = 0; i < 10; ++i) { 271 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 272 ++a; 273 } 274 #pragma omp simd 275 for (int i = 0; i < 10; ++i) { 276 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 277 ++a; 278 } 279 #pragma omp simd 280 for (int i = 0; i < 10; ++i) { 281 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 282 ++a; 283 } 284 #pragma omp simd 285 for (int i = 0; i < 10; ++i) { 286 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 287 for (int i = 0; i < 10; ++i) 288 ++a; 289 } 290 #pragma omp simd 291 for (int i = 0; i < 10; ++i) { 292 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}} 293 for (int j = 0; j < 10; ++j) 294 ; 295 } 296 297 // FOR DIRECTIVE 298 #pragma omp for 299 for (int i = 0; i < 10; ++i) { 300 #pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 301 for (int i = 0; i < 10; ++i) 302 ; 303 } 304 #pragma omp for 305 for (int i = 0; i < 10; ++i) { 306 #pragma omp simd 307 for (int i = 0; i < 10; ++i) 308 ; 309 } 310 #pragma omp for 311 for (int i = 0; i < 10; ++i) { 312 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 313 for (int i = 0; i < 10; ++i) 314 ; 315 } 316 #pragma omp for 317 for (int i = 0; i < 10; ++i) { 318 #pragma omp parallel 319 for (int i = 0; i < 10; ++i) 320 ; 321 } 322 #pragma omp for 323 for (int i = 0; i < 10; ++i) { 324 #pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 325 { 326 bar(); 327 } 328 } 329 #pragma omp for 330 for (int i = 0; i < 10; ++i) { 331 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} 332 { 333 bar(); 334 } 335 } 336 #pragma omp for 337 for (int i = 0; i < 10; ++i) { 338 #pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 339 { 340 bar(); 341 } 342 } 343 344 #pragma omp for 345 for (int i = 0; i < 10; ++i) { 346 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}} 347 { 348 bar(); 349 } 350 } 351 #pragma omp for 352 for (int i = 0; i < 10; ++i) { 353 #pragma omp critical 354 { 355 bar(); 356 } 357 } 358 #pragma omp for 359 for (int i = 0; i < 10; ++i) { 360 #pragma omp parallel 361 { 362 #pragma omp single // OK 363 { 364 bar(); 365 } 366 #pragma omp for // OK 367 for (int i = 0; i < 10; ++i) 368 ; 369 #pragma omp sections // OK 370 { 371 bar(); 372 } 373 } 374 } 375 #pragma omp for 376 for (int i = 0; i < 10; ++i) { 377 #pragma omp parallel for 378 for (int i = 0; i < 10; ++i) 379 ; 380 } 381 #pragma omp for 382 for (int i = 0; i < 10; ++i) { 383 #pragma omp parallel for simd 384 for (int i = 0; i < 10; ++i) 385 ; 386 } 387 #pragma omp for 388 for (int i = 0; i < 10; ++i) { 389 #pragma omp parallel sections 390 { 391 bar(); 392 } 393 } 394 #pragma omp for 395 for (int i = 0; i < 10; ++i) { 396 #pragma omp task 397 { 398 bar(); 399 } 400 } 401 #pragma omp for 402 for (int i = 0; i < 10; ++i) { 403 #pragma omp taskyield 404 bar(); 405 } 406 #pragma omp for 407 for (int i = 0; i < 10; ++i) { 408 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}} 409 bar(); 410 } 411 #pragma omp for 412 for (int i = 0; i < 10; ++i) { 413 #pragma omp taskwait 414 bar(); 415 } 416 #pragma omp for 417 for (int i = 0; i < 10; ++i) { 418 #pragma omp flush 419 bar(); 420 } 421 #pragma omp for 422 for (int i = 0; i < 10; ++i) { 423 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 424 bar(); 425 } 426 #pragma omp for ordered 427 for (int i = 0; i < 10; ++i) { 428 #pragma omp ordered // OK 429 bar(); 430 } 431 #pragma omp for 432 for (int i = 0; i < 10; ++i) { 433 #pragma omp atomic 434 ++a; 435 } 436 #pragma omp for 437 for (int i = 0; i < 10; ++i) { 438 #pragma omp target 439 ++a; 440 } 441 #pragma omp for 442 for (int i = 0; i < 10; ++i) { 443 #pragma omp target parallel 444 ++a; 445 } 446 #pragma omp for 447 for (int i = 0; i < 10; ++i) { 448 #pragma omp target parallel for 449 for (int i = 0; i < 10; ++i) 450 ; 451 } 452 #pragma omp for 453 for (int i = 0; i < 10; ++i) { 454 #pragma omp target enter data map(to: a) 455 ++a; 456 } 457 #pragma omp for 458 for (int i = 0; i < 10; ++i) { 459 #pragma omp target exit data map(from: a) 460 ++a; 461 } 462 #pragma omp for 463 for (int i = 0; i < 10; ++i) { 464 #pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 465 ++a; 466 } 467 #pragma omp for 468 for (int i = 0; i < 10; ++i) { 469 #pragma omp taskloop 470 for (int i = 0; i < 10; ++i) 471 ++a; 472 } 473 #pragma omp for 474 for (int i = 0; i < 10; ++i) { 475 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 476 for (int j = 0; j < 10; ++j) 477 ; 478 } 479 480 // FOR SIMD DIRECTIVE 481 #pragma omp for simd 482 for (int i = 0; i < 10; ++i) { 483 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 484 for (int i = 0; i < 10; ++i) 485 ; 486 } 487 #pragma omp for simd 488 for (int i = 0; i < 10; ++i) { 489 #pragma omp simd 490 for (int i = 0; i < 10; ++i) 491 ; 492 } 493 #pragma omp for simd 494 for (int i = 0; i < 10; ++i) { 495 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 496 for (int i = 0; i < 10; ++i) 497 ; 498 } 499 #pragma omp for simd 500 for (int i = 0; i < 10; ++i) { 501 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 502 for (int i = 0; i < 10; ++i) 503 ; 504 } 505 #pragma omp for simd 506 for (int i = 0; i < 10; ++i) { 507 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 508 { 509 bar(); 510 } 511 } 512 #pragma omp for simd 513 for (int i = 0; i < 10; ++i) { 514 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 515 { 516 bar(); 517 } 518 } 519 #pragma omp for simd 520 for (int i = 0; i < 10; ++i) { 521 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 522 { 523 bar(); 524 } 525 } 526 #pragma omp for simd 527 for (int i = 0; i < 10; ++i) { 528 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 529 { 530 bar(); 531 } 532 } 533 #pragma omp for simd 534 for (int i = 0; i < 10; ++i) { 535 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 536 { 537 bar(); 538 } 539 } 540 #pragma omp for simd 541 for (int i = 0; i < 10; ++i) { 542 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 543 for (int i = 0; i < 10; ++i) 544 ; 545 } 546 #pragma omp for simd 547 for (int i = 0; i < 10; ++i) { 548 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 549 for (int i = 0; i < 10; ++i) 550 ; 551 } 552 #pragma omp for simd 553 for (int i = 0; i < 10; ++i) { 554 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 555 { 556 bar(); 557 } 558 } 559 #pragma omp for simd 560 for (int i = 0; i < 10; ++i) { 561 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 562 { 563 bar(); 564 } 565 } 566 #pragma omp for simd 567 for (int i = 0; i < 10; ++i) { 568 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 569 bar(); 570 } 571 #pragma omp for simd 572 for (int i = 0; i < 10; ++i) { 573 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 574 bar(); 575 } 576 #pragma omp for simd 577 for (int i = 0; i < 10; ++i) { 578 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 579 bar(); 580 } 581 #pragma omp for simd 582 for (int i = 0; i < 10; ++i) { 583 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 584 bar(); 585 } 586 #pragma omp for simd 587 for (int i = 0; i < 10; ++i) { 588 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 589 bar(); 590 } 591 #pragma omp for simd 592 for (int i = 0; i < 10; ++i) { 593 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 594 ++a; 595 } 596 #pragma omp for simd 597 for (int i = 0; i < 10; ++i) { 598 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 599 ++a; 600 } 601 #pragma omp for simd 602 for (int i = 0; i < 10; ++i) { 603 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 604 ++a; 605 } 606 #pragma omp for simd 607 for (int i = 0; i < 10; ++i) { 608 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 609 for (int i = 0; i < 10; ++i) 610 ; 611 } 612 #pragma omp for simd 613 for (int i = 0; i < 10; ++i) { 614 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 615 ++a; 616 } 617 #pragma omp for simd 618 for (int i = 0; i < 10; ++i) { 619 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 620 ++a; 621 } 622 #pragma omp for simd 623 for (int i = 0; i < 10; ++i) { 624 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 625 ++a; 626 } 627 #pragma omp for simd 628 for (int i = 0; i < 10; ++i) { 629 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 630 for (int i = 0; i < 10; ++i) 631 ++a; 632 } 633 #pragma omp for simd 634 for (int i = 0; i < 10; ++i) { 635 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}} 636 for (int j = 0; j < 10; ++j) 637 ; 638 } 639 640 // SECTIONS DIRECTIVE 641 #pragma omp sections 642 { 643 #pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 644 for (int i = 0; i < 10; ++i) 645 ; 646 } 647 #pragma omp sections 648 { 649 #pragma omp simd 650 for (int i = 0; i < 10; ++i) 651 ; 652 } 653 #pragma omp sections 654 { 655 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 656 for (int i = 0; i < 10; ++i) 657 ; 658 } 659 #pragma omp sections 660 { 661 #pragma omp parallel 662 for (int i = 0; i < 10; ++i) 663 ; 664 } 665 #pragma omp sections 666 { 667 #pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 668 { 669 bar(); 670 } 671 } 672 #pragma omp sections 673 { 674 #pragma omp section 675 { 676 bar(); 677 } 678 } 679 #pragma omp sections 680 { 681 #pragma omp parallel 682 { 683 #pragma omp single // OK 684 { 685 bar(); 686 } 687 #pragma omp for // OK 688 for (int i = 0; i < 10; ++i) 689 ; 690 #pragma omp sections // OK 691 { 692 bar(); 693 } 694 } 695 } 696 #pragma omp sections 697 { 698 #pragma omp parallel 699 { 700 #pragma omp master // OK 701 { 702 bar(); 703 } 704 #pragma omp for // OK 705 for (int i = 0; i < 10; ++i) 706 ; 707 #pragma omp master // OK 708 { 709 bar(); 710 } 711 } 712 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}} 713 bar(); 714 } 715 #pragma omp sections 716 { 717 #pragma omp parallel 718 { 719 #pragma omp critical(A) // OK 720 { 721 bar(); 722 } 723 #pragma omp for // OK 724 for (int i = 0; i < 10; ++i) 725 ; 726 #pragma omp critical // OK 727 { 728 bar(); 729 } 730 } 731 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}} 732 bar(); 733 } 734 #pragma omp sections 735 { 736 #pragma omp parallel for 737 for (int i = 0; i < 10; ++i) 738 ; 739 } 740 #pragma omp sections 741 { 742 #pragma omp parallel for simd 743 for (int i = 0; i < 10; ++i) 744 ; 745 } 746 #pragma omp sections 747 { 748 #pragma omp parallel sections 749 { 750 bar(); 751 } 752 } 753 #pragma omp sections 754 { 755 #pragma omp task 756 { 757 bar(); 758 } 759 } 760 #pragma omp sections 761 { 762 #pragma omp taskyield 763 } 764 #pragma omp sections 765 { 766 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}} 767 } 768 #pragma omp sections 769 { 770 #pragma omp taskwait 771 } 772 #pragma omp sections 773 { 774 #pragma omp flush 775 } 776 #pragma omp sections 777 { 778 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 779 bar(); 780 } 781 #pragma omp sections 782 { 783 #pragma omp atomic 784 ++a; 785 } 786 #pragma omp sections 787 { 788 #pragma omp target 789 ++a; 790 } 791 #pragma omp sections 792 { 793 #pragma omp target parallel 794 ++a; 795 } 796 #pragma omp sections 797 { 798 #pragma omp target parallel for 799 for (int i = 0; i < 10; ++i) 800 ; 801 } 802 #pragma omp sections 803 { 804 #pragma omp target enter data map(to: a) 805 } 806 #pragma omp sections 807 { 808 #pragma omp target exit data map(from: a) 809 } 810 #pragma omp sections 811 { 812 #pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 813 ++a; 814 } 815 #pragma omp sections 816 { 817 #pragma omp taskloop 818 for (int i = 0; i < 10; ++i) 819 ++a; 820 } 821 #pragma omp sections 822 { 823 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 824 for (int i = 0; i < 10; ++i) 825 ; 826 } 827 828 // SECTION DIRECTIVE 829 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} 830 { 831 bar(); 832 } 833 #pragma omp sections 834 { 835 #pragma omp section 836 { 837 #pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 838 for (int i = 0; i < 10; ++i) 839 ; 840 } 841 } 842 #pragma omp sections 843 { 844 #pragma omp section 845 { 846 #pragma omp simd 847 for (int i = 0; i < 10; ++i) 848 ; 849 } 850 } 851 #pragma omp sections 852 { 853 #pragma omp section 854 { 855 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 856 for (int i = 0; i < 10; ++i) 857 ; 858 } 859 } 860 #pragma omp sections 861 { 862 #pragma omp section 863 { 864 #pragma omp parallel 865 for (int i = 0; i < 10; ++i) 866 ; 867 } 868 } 869 #pragma omp sections 870 { 871 #pragma omp section 872 { 873 #pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 874 { 875 bar(); 876 } 877 } 878 } 879 #pragma omp sections 880 { 881 #pragma omp section 882 { 883 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}} 884 { 885 bar(); 886 } 887 } 888 } 889 #pragma omp sections 890 { 891 #pragma omp section 892 { 893 #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 894 bar(); 895 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 896 bar(); 897 #pragma omp critical 898 bar(); 899 } 900 } 901 #pragma omp sections 902 { 903 #pragma omp section 904 { 905 #pragma omp parallel 906 { 907 #pragma omp single // OK 908 { 909 bar(); 910 } 911 #pragma omp for // OK 912 for (int i = 0; i < 10; ++i) 913 ; 914 #pragma omp for simd // OK 915 for (int i = 0; i < 10; ++i) 916 ; 917 #pragma omp sections // OK 918 { 919 bar(); 920 } 921 } 922 } 923 } 924 #pragma omp sections 925 { 926 #pragma omp section 927 { 928 #pragma omp parallel for 929 for (int i = 0; i < 10; ++i) 930 ; 931 } 932 } 933 #pragma omp sections 934 { 935 #pragma omp section 936 { 937 #pragma omp parallel for simd 938 for (int i = 0; i < 10; ++i) 939 ; 940 } 941 } 942 #pragma omp sections 943 { 944 #pragma omp section 945 { 946 #pragma omp parallel sections 947 { 948 bar(); 949 } 950 } 951 } 952 #pragma omp sections 953 { 954 #pragma omp section 955 { 956 #pragma omp task 957 { 958 bar(); 959 } 960 } 961 } 962 #pragma omp sections 963 { 964 #pragma omp section 965 { 966 #pragma omp taskyield 967 bar(); 968 } 969 } 970 #pragma omp sections 971 { 972 #pragma omp section 973 { 974 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}} 975 bar(); 976 } 977 } 978 #pragma omp sections 979 { 980 #pragma omp section 981 { 982 #pragma omp taskwait 983 bar(); 984 } 985 } 986 #pragma omp sections 987 { 988 #pragma omp section 989 { 990 #pragma omp flush 991 bar(); 992 } 993 } 994 #pragma omp sections 995 { 996 #pragma omp section 997 { 998 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 999 bar(); 1000 } 1001 } 1002 #pragma omp sections 1003 { 1004 #pragma omp section 1005 #pragma omp atomic 1006 ++a; 1007 } 1008 #pragma omp sections 1009 { 1010 #pragma omp section 1011 #pragma omp target 1012 ++a; 1013 } 1014 #pragma omp sections 1015 { 1016 #pragma omp section 1017 #pragma omp target parallel 1018 ++a; 1019 } 1020 #pragma omp sections 1021 { 1022 #pragma omp section 1023 { 1024 #pragma omp target parallel for 1025 for (int i = 0; i < 10; ++i) 1026 ; 1027 } 1028 } 1029 #pragma omp sections 1030 { 1031 #pragma omp section 1032 { 1033 #pragma omp target enter data map(to: a) 1034 ++a; 1035 } 1036 } 1037 #pragma omp sections 1038 { 1039 #pragma omp section 1040 { 1041 #pragma omp target exit data map(from: a) 1042 ++a; 1043 } 1044 } 1045 #pragma omp sections 1046 { 1047 #pragma omp section 1048 #pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 1049 ++a; 1050 } 1051 #pragma omp sections 1052 { 1053 #pragma omp section 1054 #pragma omp taskloop 1055 for (int i = 0; i < 10; ++i) 1056 ++a; 1057 } 1058 #pragma omp sections 1059 { 1060 #pragma omp section 1061 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 1062 for (int i = 0; i < 10; ++i) 1063 ; 1064 } 1065 1066 // SINGLE DIRECTIVE 1067 #pragma omp single 1068 { 1069 #pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 1070 for (int i = 0; i < 10; ++i) 1071 ; 1072 } 1073 #pragma omp single 1074 { 1075 #pragma omp simd 1076 for (int i = 0; i < 10; ++i) 1077 ; 1078 } 1079 #pragma omp single 1080 { 1081 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 1082 for (int i = 0; i < 10; ++i) 1083 ; 1084 } 1085 #pragma omp single 1086 { 1087 #pragma omp parallel 1088 for (int i = 0; i < 10; ++i) 1089 ; 1090 } 1091 #pragma omp single 1092 { 1093 #pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 1094 { 1095 bar(); 1096 } 1097 } 1098 #pragma omp single 1099 { 1100 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}} 1101 { 1102 bar(); 1103 } 1104 } 1105 #pragma omp single 1106 { 1107 #pragma omp critical 1108 { 1109 bar(); 1110 } 1111 } 1112 #pragma omp single 1113 { 1114 #pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 1115 { 1116 bar(); 1117 } 1118 } 1119 #pragma omp single 1120 { 1121 #pragma omp parallel 1122 { 1123 #pragma omp single // OK 1124 { 1125 bar(); 1126 } 1127 #pragma omp for // OK 1128 for (int i = 0; i < 10; ++i) 1129 ; 1130 #pragma omp for simd // OK 1131 for (int i = 0; i < 10; ++i) 1132 ; 1133 #pragma omp sections // OK 1134 { 1135 bar(); 1136 } 1137 } 1138 } 1139 #pragma omp single 1140 { 1141 #pragma omp parallel for 1142 for (int i = 0; i < 10; ++i) 1143 ; 1144 } 1145 #pragma omp single 1146 { 1147 #pragma omp parallel for simd 1148 for (int i = 0; i < 10; ++i) 1149 ; 1150 } 1151 #pragma omp single 1152 { 1153 #pragma omp parallel sections 1154 { 1155 bar(); 1156 } 1157 } 1158 #pragma omp single 1159 { 1160 #pragma omp task 1161 { 1162 bar(); 1163 } 1164 } 1165 #pragma omp single 1166 { 1167 #pragma omp taskyield 1168 bar(); 1169 } 1170 #pragma omp single 1171 { 1172 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}} 1173 bar(); 1174 } 1175 #pragma omp single 1176 { 1177 #pragma omp taskwait 1178 bar(); 1179 } 1180 #pragma omp single 1181 { 1182 #pragma omp flush 1183 bar(); 1184 } 1185 #pragma omp single 1186 { 1187 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 1188 bar(); 1189 } 1190 #pragma omp single 1191 { 1192 #pragma omp atomic 1193 ++a; 1194 } 1195 #pragma omp single 1196 { 1197 #pragma omp target 1198 ++a; 1199 } 1200 #pragma omp single 1201 { 1202 #pragma omp target parallel 1203 ++a; 1204 } 1205 #pragma omp single 1206 { 1207 #pragma omp target parallel for 1208 for (int i = 0; i < 10; ++i) 1209 ; 1210 } 1211 #pragma omp single 1212 { 1213 #pragma omp target enter data map(to: a) 1214 ++a; 1215 } 1216 #pragma omp single 1217 { 1218 #pragma omp target exit data map(from: a) 1219 ++a; 1220 } 1221 #pragma omp single 1222 { 1223 #pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 1224 ++a; 1225 } 1226 #pragma omp single 1227 { 1228 #pragma omp taskloop 1229 for (int i = 0; i < 10; ++i) 1230 ++a; 1231 } 1232 #pragma omp single 1233 { 1234 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 1235 for (int i = 0; i < 10; ++i) 1236 ; 1237 } 1238 1239 // MASTER DIRECTIVE 1240 #pragma omp master 1241 { 1242 #pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 1243 for (int i = 0; i < 10; ++i) 1244 ; 1245 } 1246 #pragma omp master 1247 { 1248 #pragma omp simd 1249 for (int i = 0; i < 10; ++i) 1250 ; 1251 } 1252 #pragma omp master 1253 { 1254 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 1255 for (int i = 0; i < 10; ++i) 1256 ; 1257 } 1258 #pragma omp master 1259 { 1260 #pragma omp parallel 1261 for (int i = 0; i < 10; ++i) 1262 ; 1263 } 1264 #pragma omp master 1265 { 1266 #pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 1267 { 1268 bar(); 1269 } 1270 } 1271 #pragma omp master 1272 { 1273 #pragma omp master // OK, though second 'master' is redundant 1274 { 1275 bar(); 1276 } 1277 } 1278 #pragma omp master 1279 { 1280 #pragma omp critical 1281 { 1282 bar(); 1283 } 1284 } 1285 #pragma omp master 1286 { 1287 #pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 1288 { 1289 bar(); 1290 } 1291 } 1292 #pragma omp master 1293 { 1294 #pragma omp parallel 1295 { 1296 #pragma omp master // OK 1297 { 1298 bar(); 1299 } 1300 #pragma omp for // OK 1301 for (int i = 0; i < 10; ++i) 1302 ; 1303 #pragma omp for simd // OK 1304 for (int i = 0; i < 10; ++i) 1305 ; 1306 #pragma omp sections // OK 1307 { 1308 bar(); 1309 } 1310 } 1311 } 1312 #pragma omp master 1313 { 1314 #pragma omp parallel for 1315 for (int i = 0; i < 10; ++i) 1316 ; 1317 } 1318 #pragma omp master 1319 { 1320 #pragma omp parallel for simd 1321 for (int i = 0; i < 10; ++i) 1322 ; 1323 } 1324 #pragma omp master 1325 { 1326 #pragma omp parallel sections 1327 { 1328 bar(); 1329 } 1330 } 1331 #pragma omp master 1332 { 1333 #pragma omp task 1334 { 1335 bar(); 1336 } 1337 } 1338 #pragma omp master 1339 { 1340 #pragma omp taskyield 1341 bar(); 1342 } 1343 #pragma omp master 1344 { 1345 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}} 1346 bar(); 1347 } 1348 #pragma omp master 1349 { 1350 #pragma omp taskwait 1351 bar(); 1352 } 1353 #pragma omp master 1354 { 1355 #pragma omp flush 1356 bar(); 1357 } 1358 #pragma omp master 1359 { 1360 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 1361 bar(); 1362 } 1363 #pragma omp master 1364 { 1365 #pragma omp atomic 1366 ++a; 1367 } 1368 #pragma omp master 1369 { 1370 #pragma omp target 1371 ++a; 1372 } 1373 #pragma omp master 1374 { 1375 #pragma omp target parallel 1376 ++a; 1377 } 1378 #pragma omp master 1379 { 1380 #pragma omp target parallel for 1381 for (int i = 0; i < 10; ++i) 1382 ; 1383 } 1384 #pragma omp master 1385 { 1386 #pragma omp target enter data map(to: a) 1387 ++a; 1388 } 1389 #pragma omp master 1390 { 1391 #pragma omp target exit data map(from: a) 1392 ++a; 1393 } 1394 #pragma omp master 1395 { 1396 #pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 1397 ++a; 1398 } 1399 #pragma omp master 1400 { 1401 #pragma omp taskloop 1402 for (int i = 0; i < 10; ++i) 1403 ++a; 1404 } 1405 #pragma omp master 1406 { 1407 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 1408 for (int i = 0; i < 10; ++i) 1409 ; 1410 } 1411 1412 // CRITICAL DIRECTIVE 1413 #pragma omp critical 1414 { 1415 #pragma omp for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 1416 for (int i = 0; i < 10; ++i) 1417 ; 1418 } 1419 #pragma omp critical 1420 { 1421 #pragma omp simd 1422 for (int i = 0; i < 10; ++i) 1423 ; 1424 } 1425 #pragma omp critical 1426 { 1427 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 1428 for (int i = 0; i < 10; ++i) 1429 ; 1430 } 1431 #pragma omp critical 1432 { 1433 #pragma omp parallel 1434 for (int i = 0; i < 10; ++i) 1435 ; 1436 } 1437 #pragma omp critical 1438 { 1439 #pragma omp single // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 1440 { 1441 bar(); 1442 } 1443 } 1444 #pragma omp critical 1445 { 1446 #pragma omp master // OK, though second 'master' is redundant 1447 { 1448 bar(); 1449 } 1450 } 1451 #pragma omp critical 1452 { 1453 #pragma omp critical 1454 { 1455 bar(); 1456 } 1457 } 1458 #pragma omp critical 1459 { 1460 #pragma omp sections // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 1461 { 1462 bar(); 1463 } 1464 } 1465 #pragma omp critical 1466 { 1467 #pragma omp parallel 1468 { 1469 #pragma omp master // OK 1470 { 1471 bar(); 1472 } 1473 #pragma omp for // OK 1474 for (int i = 0; i < 10; ++i) 1475 ; 1476 #pragma omp for simd // OK 1477 for (int i = 0; i < 10; ++i) 1478 ; 1479 #pragma omp sections // OK 1480 { 1481 bar(); 1482 } 1483 } 1484 } 1485 #pragma omp critical 1486 { 1487 #pragma omp parallel for 1488 for (int i = 0; i < 10; ++i) 1489 ; 1490 } 1491 #pragma omp critical 1492 { 1493 #pragma omp parallel for simd 1494 for (int i = 0; i < 10; ++i) 1495 ; 1496 } 1497 #pragma omp critical 1498 { 1499 #pragma omp parallel sections 1500 { 1501 bar(); 1502 } 1503 } 1504 #pragma omp critical 1505 { 1506 #pragma omp task 1507 { 1508 bar(); 1509 } 1510 } 1511 #pragma omp critical 1512 { 1513 #pragma omp taskyield 1514 bar(); 1515 } 1516 #pragma omp critical 1517 { 1518 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}} 1519 bar(); 1520 } 1521 #pragma omp critical 1522 { 1523 #pragma omp taskwait 1524 bar(); 1525 } 1526 #pragma omp critical(Tuzik) 1527 { 1528 #pragma omp critical(grelka) 1529 bar(); 1530 } 1531 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}} 1532 { 1533 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}} 1534 { 1535 #pragma omp critical(Tuzik) 1536 { 1537 #pragma omp parallel 1538 #pragma omp critical(grelka) 1539 { 1540 bar(); 1541 } 1542 } 1543 } 1544 } 1545 #pragma omp critical 1546 { 1547 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 1548 bar(); 1549 } 1550 #pragma omp critical 1551 { 1552 #pragma omp atomic 1553 ++a; 1554 } 1555 #pragma omp critical 1556 { 1557 #pragma omp target 1558 ++a; 1559 } 1560 #pragma omp critical 1561 { 1562 #pragma omp target parallel 1563 ++a; 1564 } 1565 #pragma omp critical 1566 { 1567 #pragma omp target parallel for 1568 for (int i = 0; i < 10; ++i) 1569 ; 1570 } 1571 #pragma omp critical 1572 { 1573 #pragma omp target enter data map(to: a) 1574 ++a; 1575 } 1576 #pragma omp critical 1577 { 1578 #pragma omp target exit data map(from: a) 1579 ++a; 1580 } 1581 #pragma omp critical 1582 { 1583 #pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 1584 ++a; 1585 } 1586 #pragma omp critical 1587 { 1588 #pragma omp taskloop 1589 for (int i = 0; i < 10; ++i) 1590 ++a; 1591 } 1592 #pragma omp critical 1593 { 1594 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 1595 for (int i = 0; i < 10; ++i) 1596 ; 1597 } 1598 1599 // PARALLEL FOR DIRECTIVE 1600 #pragma omp parallel for 1601 for (int i = 0; i < 10; ++i) { 1602 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 1603 for (int i = 0; i < 10; ++i) 1604 ; 1605 } 1606 #pragma omp parallel for 1607 for (int i = 0; i < 10; ++i) { 1608 #pragma omp simd 1609 for (int i = 0; i < 10; ++i) 1610 ; 1611 } 1612 #pragma omp parallel for 1613 for (int i = 0; i < 10; ++i) { 1614 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 1615 for (int i = 0; i < 10; ++i) 1616 ; 1617 } 1618 #pragma omp parallel for 1619 for (int i = 0; i < 10; ++i) { 1620 #pragma omp parallel 1621 for (int i = 0; i < 10; ++i) 1622 ; 1623 } 1624 #pragma omp parallel for 1625 for (int i = 0; i < 10; ++i) { 1626 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 1627 { 1628 bar(); 1629 } 1630 } 1631 #pragma omp parallel for 1632 for (int i = 0; i < 10; ++i) { 1633 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} 1634 { 1635 bar(); 1636 } 1637 } 1638 #pragma omp parallel for 1639 for (int i = 0; i < 10; ++i) { 1640 #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 1641 { 1642 bar(); 1643 } 1644 } 1645 1646 #pragma omp parallel for 1647 for (int i = 0; i < 10; ++i) { 1648 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}} 1649 { 1650 bar(); 1651 } 1652 } 1653 1654 #pragma omp parallel for 1655 for (int i = 0; i < 10; ++i) { 1656 #pragma omp critical 1657 { 1658 bar(); 1659 } 1660 } 1661 1662 #pragma omp parallel for 1663 for (int i = 0; i < 10; ++i) { 1664 #pragma omp parallel 1665 { 1666 #pragma omp single // OK 1667 { 1668 bar(); 1669 } 1670 #pragma omp for // OK 1671 for (int i = 0; i < 10; ++i) 1672 ; 1673 #pragma omp for simd // OK 1674 for (int i = 0; i < 10; ++i) 1675 ; 1676 #pragma omp sections // OK 1677 { 1678 bar(); 1679 } 1680 } 1681 } 1682 #pragma omp parallel for 1683 for (int i = 0; i < 10; ++i) { 1684 #pragma omp parallel for 1685 for (int i = 0; i < 10; ++i) 1686 ; 1687 } 1688 #pragma omp parallel for 1689 for (int i = 0; i < 10; ++i) { 1690 #pragma omp parallel for simd 1691 for (int i = 0; i < 10; ++i) 1692 ; 1693 } 1694 #pragma omp parallel for 1695 for (int i = 0; i < 10; ++i) { 1696 #pragma omp parallel sections 1697 { 1698 bar(); 1699 } 1700 } 1701 #pragma omp parallel for 1702 for (int i = 0; i < 10; ++i) { 1703 #pragma omp task 1704 { 1705 bar(); 1706 } 1707 } 1708 #pragma omp parallel for 1709 for (int i = 0; i < 10; ++i) { 1710 #pragma omp taskyield 1711 bar(); 1712 } 1713 #pragma omp parallel for 1714 for (int i = 0; i < 10; ++i) { 1715 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}} 1716 bar(); 1717 } 1718 #pragma omp parallel for 1719 for (int i = 0; i < 10; ++i) { 1720 #pragma omp taskwait 1721 bar(); 1722 } 1723 #pragma omp parallel for 1724 for (int i = 0; i < 10; ++i) { 1725 #pragma omp flush 1726 bar(); 1727 } 1728 #pragma omp parallel for 1729 for (int i = 0; i < 10; ++i) { 1730 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 1731 bar(); 1732 } 1733 #pragma omp parallel for ordered 1734 for (int i = 0; i < 10; ++i) { 1735 #pragma omp ordered // OK 1736 bar(); 1737 } 1738 #pragma omp parallel for 1739 for (int i = 0; i < 10; ++i) { 1740 #pragma omp atomic 1741 ++a; 1742 } 1743 #pragma omp parallel for 1744 for (int i = 0; i < 10; ++i) { 1745 #pragma omp target 1746 ++a; 1747 } 1748 #pragma omp parallel for 1749 for (int i = 0; i < 10; ++i) { 1750 #pragma omp target parallel 1751 ++a; 1752 } 1753 #pragma omp parallel for 1754 for (int i = 0; i < 10; ++i) { 1755 #pragma omp target parallel for 1756 for (int i = 0; i < 10; ++i) 1757 ; 1758 } 1759 #pragma omp parallel for 1760 for (int i = 0; i < 10; ++i) { 1761 #pragma omp target enter data map(to: a) 1762 ++a; 1763 } 1764 #pragma omp parallel for 1765 for (int i = 0; i < 10; ++i) { 1766 #pragma omp target exit data map(from: a) 1767 ++a; 1768 } 1769 #pragma omp parallel for 1770 for (int i = 0; i < 10; ++i) { 1771 #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 1772 ++a; 1773 } 1774 #pragma omp parallel for 1775 for (int i = 0; i < 10; ++i) { 1776 #pragma omp taskloop 1777 for (int i = 0; i < 10; ++i) 1778 ++a; 1779 } 1780 #pragma omp parallel for 1781 for (int i = 0; i < 10; ++i) { 1782 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 1783 for (int j = 0; j < 10; ++j) 1784 ; 1785 } 1786 1787 // PARALLEL FOR SIMD DIRECTIVE 1788 #pragma omp parallel for simd 1789 for (int i = 0; i < 10; ++i) { 1790 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1791 for (int i = 0; i < 10; ++i) 1792 ; 1793 } 1794 #pragma omp parallel for simd 1795 for (int i = 0; i < 10; ++i) { 1796 #pragma omp simd 1797 for (int i = 0; i < 10; ++i) 1798 ; 1799 } 1800 #pragma omp parallel for simd 1801 for (int i = 0; i < 10; ++i) { 1802 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1803 for (int i = 0; i < 10; ++i) 1804 ; 1805 } 1806 #pragma omp parallel for simd 1807 for (int i = 0; i < 10; ++i) { 1808 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1809 for (int i = 0; i < 10; ++i) 1810 ; 1811 } 1812 #pragma omp parallel for simd 1813 for (int i = 0; i < 10; ++i) { 1814 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1815 { 1816 bar(); 1817 } 1818 } 1819 #pragma omp parallel for simd 1820 for (int i = 0; i < 10; ++i) { 1821 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1822 { 1823 bar(); 1824 } 1825 } 1826 #pragma omp parallel for simd 1827 for (int i = 0; i < 10; ++i) { 1828 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1829 { 1830 bar(); 1831 } 1832 } 1833 1834 #pragma omp parallel for simd 1835 for (int i = 0; i < 10; ++i) { 1836 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1837 { 1838 bar(); 1839 } 1840 } 1841 1842 #pragma omp parallel for simd 1843 for (int i = 0; i < 10; ++i) { 1844 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1845 { 1846 bar(); 1847 } 1848 } 1849 1850 #pragma omp parallel for simd 1851 for (int i = 0; i < 10; ++i) { 1852 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1853 { 1854 #pragma omp single 1855 { 1856 bar(); 1857 } 1858 #pragma omp for 1859 for (int i = 0; i < 10; ++i) 1860 ; 1861 #pragma omp for simd 1862 for (int i = 0; i < 10; ++i) 1863 ; 1864 #pragma omp sections 1865 { 1866 bar(); 1867 } 1868 } 1869 } 1870 #pragma omp parallel for simd 1871 for (int i = 0; i < 10; ++i) { 1872 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1873 for (int i = 0; i < 10; ++i) 1874 ; 1875 } 1876 #pragma omp parallel for simd 1877 for (int i = 0; i < 10; ++i) { 1878 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}} 1879 for (int i = 0; i < 10; ++i) 1880 ; 1881 } 1882 #pragma omp parallel for simd 1883 for (int i = 0; i < 10; ++i) { 1884 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1885 { 1886 bar(); 1887 } 1888 } 1889 #pragma omp parallel for simd 1890 for (int i = 0; i < 10; ++i) { 1891 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1892 { 1893 bar(); 1894 } 1895 } 1896 #pragma omp parallel for simd 1897 for (int i = 0; i < 10; ++i) { 1898 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1899 bar(); 1900 } 1901 #pragma omp parallel for simd 1902 for (int i = 0; i < 10; ++i) { 1903 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1904 bar(); 1905 } 1906 #pragma omp parallel for simd 1907 for (int i = 0; i < 10; ++i) { 1908 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1909 bar(); 1910 } 1911 #pragma omp parallel for simd 1912 for (int i = 0; i < 10; ++i) { 1913 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1914 bar(); 1915 } 1916 #pragma omp parallel for simd 1917 for (int i = 0; i < 10; ++i) { 1918 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1919 bar(); 1920 } 1921 #pragma omp parallel for simd 1922 for (int i = 0; i < 10; ++i) { 1923 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1924 bar(); 1925 } 1926 #pragma omp parallel for simd 1927 for (int i = 0; i < 10; ++i) { 1928 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1929 ++a; 1930 } 1931 #pragma omp parallel for simd 1932 for (int i = 0; i < 10; ++i) { 1933 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1934 ++a; 1935 } 1936 #pragma omp parallel for simd 1937 for (int i = 0; i < 10; ++i) { 1938 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1939 ++a; 1940 } 1941 #pragma omp parallel for simd 1942 for (int i = 0; i < 10; ++i) { 1943 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1944 for (int i = 0; i < 10; ++i) 1945 ; 1946 } 1947 #pragma omp parallel for simd 1948 for (int i = 0; i < 10; ++i) { 1949 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1950 ++a; 1951 } 1952 #pragma omp parallel for simd 1953 for (int i = 0; i < 10; ++i) { 1954 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1955 ++a; 1956 } 1957 #pragma omp parallel for simd 1958 for (int i = 0; i < 10; ++i) { 1959 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1960 ++a; 1961 } 1962 #pragma omp parallel for simd 1963 for (int i = 0; i < 10; ++i) { 1964 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1965 for (int i = 0; i < 10; ++i) 1966 ++a; 1967 } 1968 #pragma omp parallel for simd 1969 for (int i = 0; i < 10; ++i) { 1970 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1971 for (int j = 0; j < 10; ++j) 1972 ; 1973 } 1974 1975 // PARALLEL SECTIONS DIRECTIVE 1976 #pragma omp parallel sections 1977 { 1978 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 1979 for (int i = 0; i < 10; ++i) 1980 ; 1981 } 1982 #pragma omp parallel sections 1983 { 1984 #pragma omp simd 1985 for (int i = 0; i < 10; ++i) 1986 ; 1987 } 1988 #pragma omp parallel sections 1989 { 1990 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 1991 for (int i = 0; i < 10; ++i) 1992 ; 1993 } 1994 #pragma omp parallel sections 1995 { 1996 #pragma omp parallel 1997 for (int i = 0; i < 10; ++i) 1998 ; 1999 } 2000 #pragma omp parallel sections 2001 { 2002 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 2003 { 2004 bar(); 2005 } 2006 } 2007 #pragma omp parallel sections 2008 { 2009 #pragma omp section 2010 { 2011 bar(); 2012 } 2013 } 2014 #pragma omp parallel sections 2015 { 2016 #pragma omp section 2017 { 2018 #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 2019 bar(); 2020 } 2021 } 2022 #pragma omp parallel sections 2023 { 2024 #pragma omp section 2025 { 2026 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 2027 bar(); 2028 } 2029 } 2030 #pragma omp parallel sections 2031 { 2032 #pragma omp section 2033 { 2034 #pragma omp critical 2035 bar(); 2036 } 2037 } 2038 #pragma omp parallel sections 2039 { 2040 #pragma omp parallel 2041 { 2042 #pragma omp single // OK 2043 { 2044 bar(); 2045 } 2046 #pragma omp for // OK 2047 for (int i = 0; i < 10; ++i) 2048 ; 2049 #pragma omp for simd // OK 2050 for (int i = 0; i < 10; ++i) 2051 ; 2052 #pragma omp sections // OK 2053 { 2054 bar(); 2055 } 2056 } 2057 } 2058 #pragma omp parallel sections 2059 { 2060 #pragma omp parallel for 2061 for (int i = 0; i < 10; ++i) 2062 ; 2063 } 2064 #pragma omp parallel sections 2065 { 2066 #pragma omp parallel for simd 2067 for (int i = 0; i < 10; ++i) 2068 ; 2069 } 2070 #pragma omp parallel sections 2071 { 2072 #pragma omp parallel sections 2073 { 2074 bar(); 2075 } 2076 } 2077 #pragma omp parallel sections 2078 { 2079 #pragma omp task 2080 { 2081 bar(); 2082 } 2083 } 2084 #pragma omp parallel sections 2085 { 2086 #pragma omp taskyield 2087 } 2088 #pragma omp parallel sections 2089 { 2090 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}} 2091 } 2092 #pragma omp parallel sections 2093 { 2094 #pragma omp taskwait 2095 } 2096 #pragma omp parallel sections 2097 { 2098 #pragma omp flush 2099 } 2100 #pragma omp parallel sections 2101 { 2102 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 2103 bar(); 2104 } 2105 #pragma omp parallel sections 2106 { 2107 #pragma omp atomic 2108 ++a; 2109 } 2110 #pragma omp parallel sections 2111 { 2112 #pragma omp target 2113 ++a; 2114 } 2115 #pragma omp parallel sections 2116 { 2117 #pragma omp target parallel 2118 ++a; 2119 } 2120 #pragma omp parallel sections 2121 { 2122 #pragma omp target parallel for 2123 for (int i = 0; i < 10; ++i) 2124 ; 2125 } 2126 #pragma omp parallel sections 2127 { 2128 #pragma omp target enter data map(to: a) 2129 } 2130 #pragma omp parallel sections 2131 { 2132 #pragma omp target exit data map(from: a) 2133 } 2134 #pragma omp parallel sections 2135 { 2136 #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 2137 ++a; 2138 } 2139 #pragma omp parallel sections 2140 { 2141 #pragma omp taskloop 2142 for (int i = 0; i < 10; ++i) 2143 ++a; 2144 } 2145 #pragma omp parallel sections 2146 { 2147 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 2148 for (int i = 0; i < 10; ++i) 2149 ; 2150 } 2151 2152 // TASK DIRECTIVE 2153 #pragma omp task 2154 #pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 2155 for (int i = 0; i < 10; ++i) 2156 ; 2157 #pragma omp task 2158 #pragma omp simd 2159 for (int i = 0; i < 10; ++i) 2160 ; 2161 #pragma omp task 2162 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 2163 for (int i = 0; i < 10; ++i) 2164 ; 2165 #pragma omp task 2166 #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 2167 { 2168 bar(); 2169 } 2170 #pragma omp task 2171 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}} 2172 { 2173 bar(); 2174 } 2175 #pragma omp task 2176 #pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 2177 bar(); 2178 #pragma omp task 2179 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}} 2180 bar(); 2181 #pragma omp task 2182 #pragma omp critical 2183 bar(); 2184 2185 #pragma omp task 2186 #pragma omp parallel for 2187 for (int i = 0; i < 10; ++i) 2188 ; 2189 #pragma omp task 2190 #pragma omp parallel for simd 2191 for (int i = 0; i < 10; ++i) 2192 ; 2193 #pragma omp task 2194 #pragma omp parallel sections 2195 { 2196 bar(); 2197 } 2198 #pragma omp task 2199 #pragma omp task 2200 { 2201 bar(); 2202 } 2203 #pragma omp task 2204 { 2205 #pragma omp taskyield 2206 bar(); 2207 } 2208 #pragma omp task 2209 { 2210 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}} 2211 bar(); 2212 } 2213 #pragma omp task 2214 { 2215 #pragma omp taskwait 2216 bar(); 2217 } 2218 #pragma omp task 2219 { 2220 #pragma omp flush 2221 bar(); 2222 } 2223 #pragma omp task 2224 { 2225 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 2226 bar(); 2227 } 2228 #pragma omp task 2229 { 2230 #pragma omp atomic 2231 ++a; 2232 } 2233 #pragma omp task 2234 { 2235 #pragma omp target 2236 ++a; 2237 } 2238 #pragma omp task 2239 { 2240 #pragma omp target parallel 2241 ++a; 2242 } 2243 #pragma omp task 2244 #pragma omp target parallel for 2245 for (int i = 0; i < 10; ++i) 2246 ; 2247 #pragma omp task 2248 { 2249 #pragma omp target enter data map(to: a) 2250 ++a; 2251 } 2252 #pragma omp task 2253 { 2254 #pragma omp target exit data map(from: a) 2255 ++a; 2256 } 2257 #pragma omp task 2258 { 2259 #pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 2260 ++a; 2261 } 2262 #pragma omp task 2263 { 2264 #pragma omp taskloop 2265 for (int i = 0; i < 10; ++i) 2266 ++a; 2267 } 2268 #pragma omp task 2269 { 2270 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 2271 for (int i = 0; i < 10; ++i) 2272 ; 2273 } 2274 2275 // ORDERED DIRECTIVE 2276 #pragma omp ordered 2277 { 2278 #pragma omp for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 2279 for (int i = 0; i < 10; ++i) 2280 ; 2281 } 2282 #pragma omp ordered 2283 { 2284 #pragma omp simd 2285 for (int i = 0; i < 10; ++i) 2286 ; 2287 } 2288 #pragma omp ordered 2289 { 2290 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 2291 for (int i = 0; i < 10; ++i) 2292 ; 2293 } 2294 #pragma omp ordered 2295 { 2296 #pragma omp parallel 2297 for (int i = 0; i < 10; ++i) 2298 ; 2299 } 2300 #pragma omp ordered 2301 { 2302 #pragma omp single // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 2303 { 2304 bar(); 2305 } 2306 } 2307 #pragma omp ordered 2308 { 2309 #pragma omp master // OK, though second 'ordered' is redundant 2310 { 2311 bar(); 2312 } 2313 } 2314 #pragma omp ordered 2315 { 2316 #pragma omp critical 2317 { 2318 bar(); 2319 } 2320 } 2321 #pragma omp ordered 2322 { 2323 #pragma omp sections // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 2324 { 2325 bar(); 2326 } 2327 } 2328 #pragma omp ordered 2329 { 2330 #pragma omp parallel for ordered 2331 for (int j = 0; j < 10; ++j) { 2332 #pragma omp ordered // OK 2333 { 2334 bar(); 2335 } 2336 } 2337 } 2338 #pragma omp ordered 2339 { 2340 #pragma omp parallel for simd ordered 2341 for (int j = 0; j < 10; ++j) { 2342 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2343 { 2344 bar(); 2345 } 2346 } 2347 } 2348 #pragma omp ordered 2349 { 2350 #pragma omp parallel for simd ordered 2351 for (int j = 0; j < 10; ++j) { 2352 #pragma omp ordered simd 2353 { 2354 bar(); 2355 } 2356 } 2357 } 2358 #pragma omp ordered 2359 { 2360 #pragma omp parallel for 2361 for (int i = 0; i < 10; ++i) 2362 ; 2363 } 2364 #pragma omp ordered 2365 { 2366 #pragma omp parallel for simd 2367 for (int i = 0; i < 10; ++i) 2368 ; 2369 } 2370 #pragma omp ordered 2371 { 2372 #pragma omp parallel sections 2373 { 2374 bar(); 2375 } 2376 } 2377 #pragma omp ordered 2378 { 2379 #pragma omp task 2380 { 2381 bar(); 2382 } 2383 } 2384 #pragma omp ordered 2385 { 2386 #pragma omp taskyield 2387 bar(); 2388 } 2389 #pragma omp ordered 2390 { 2391 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}} 2392 bar(); 2393 } 2394 #pragma omp ordered 2395 { 2396 #pragma omp taskwait 2397 bar(); 2398 } 2399 #pragma omp ordered 2400 { 2401 #pragma omp flush 2402 bar(); 2403 } 2404 #pragma omp ordered 2405 { 2406 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 2407 bar(); 2408 } 2409 #pragma omp ordered 2410 { 2411 #pragma omp atomic 2412 ++a; 2413 } 2414 #pragma omp ordered 2415 { 2416 #pragma omp target 2417 ++a; 2418 } 2419 #pragma omp ordered 2420 { 2421 #pragma omp target parallel 2422 ++a; 2423 } 2424 #pragma omp ordered 2425 { 2426 #pragma omp target parallel for ordered 2427 for (int j = 0; j < 10; ++j) { 2428 #pragma omp ordered // OK 2429 { 2430 bar(); 2431 } 2432 } 2433 } 2434 #pragma omp ordered 2435 { 2436 #pragma omp target parallel for 2437 for (int i = 0; i < 10; ++i) 2438 ; 2439 } 2440 #pragma omp ordered 2441 { 2442 #pragma omp target enter data map(to: a) 2443 ++a; 2444 } 2445 #pragma omp ordered 2446 { 2447 #pragma omp target exit data map(from: a) 2448 ++a; 2449 } 2450 #pragma omp ordered 2451 { 2452 #pragma omp teams // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 2453 ++a; 2454 } 2455 #pragma omp ordered 2456 { 2457 #pragma omp taskloop 2458 for (int i = 0; i < 10; ++i) 2459 ++a; 2460 } 2461 #pragma omp ordered 2462 { 2463 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 2464 for (int i = 0; i < 10; ++i) 2465 ; 2466 } 2467 2468 // ATOMIC DIRECTIVE 2469 #pragma omp atomic 2470 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2471 // expected-note@+1 {{expected an expression statement}} 2472 { 2473 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2474 for (int i = 0; i < 10; ++i) 2475 ; 2476 } 2477 #pragma omp atomic 2478 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2479 // expected-note@+1 {{expected an expression statement}} 2480 { 2481 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2482 for (int i = 0; i < 10; ++i) 2483 ; 2484 } 2485 #pragma omp atomic 2486 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2487 // expected-note@+1 {{expected an expression statement}} 2488 { 2489 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2490 for (int i = 0; i < 10; ++i) 2491 ; 2492 } 2493 #pragma omp atomic 2494 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2495 // expected-note@+1 {{expected an expression statement}} 2496 { 2497 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2498 for (int i = 0; i < 10; ++i) 2499 ; 2500 } 2501 #pragma omp atomic 2502 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2503 // expected-note@+1 {{expected an expression statement}} 2504 { 2505 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2506 { 2507 bar(); 2508 } 2509 } 2510 #pragma omp atomic 2511 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2512 // expected-note@+1 {{expected an expression statement}} 2513 { 2514 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2515 { 2516 bar(); 2517 } 2518 } 2519 #pragma omp atomic 2520 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2521 // expected-note@+1 {{expected an expression statement}} 2522 { 2523 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2524 { 2525 bar(); 2526 } 2527 } 2528 #pragma omp atomic 2529 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2530 // expected-note@+1 {{expected an expression statement}} 2531 { 2532 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2533 { 2534 bar(); 2535 } 2536 } 2537 #pragma omp atomic 2538 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2539 // expected-note@+1 {{expected an expression statement}} 2540 { 2541 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2542 { 2543 bar(); 2544 } 2545 } 2546 #pragma omp atomic 2547 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2548 // expected-note@+1 {{expected an expression statement}} 2549 { 2550 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2551 for (int i = 0; i < 10; ++i) 2552 ; 2553 } 2554 #pragma omp atomic 2555 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2556 // expected-note@+1 {{expected an expression statement}} 2557 { 2558 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2559 for (int i = 0; i < 10; ++i) 2560 ; 2561 } 2562 #pragma omp atomic 2563 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2564 // expected-note@+1 {{expected an expression statement}} 2565 { 2566 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2567 { 2568 bar(); 2569 } 2570 } 2571 #pragma omp atomic 2572 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2573 // expected-note@+1 {{expected an expression statement}} 2574 { 2575 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2576 { 2577 bar(); 2578 } 2579 } 2580 #pragma omp atomic 2581 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2582 // expected-note@+1 {{expected an expression statement}} 2583 { 2584 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2585 bar(); 2586 } 2587 #pragma omp atomic 2588 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2589 // expected-note@+1 {{expected an expression statement}} 2590 { 2591 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2592 bar(); 2593 } 2594 #pragma omp atomic 2595 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2596 // expected-note@+1 {{expected an expression statement}} 2597 { 2598 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2599 bar(); 2600 } 2601 #pragma omp atomic 2602 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2603 // expected-note@+1 {{expected an expression statement}} 2604 { 2605 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2606 bar(); 2607 } 2608 #pragma omp atomic 2609 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2610 // expected-note@+1 {{expected an expression statement}} 2611 { 2612 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2613 bar(); 2614 } 2615 #pragma omp atomic 2616 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2617 // expected-note@+1 {{expected an expression statement}} 2618 { 2619 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2620 ++a; 2621 } 2622 #pragma omp atomic 2623 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2624 // expected-note@+1 {{expected an expression statement}} 2625 { 2626 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2627 ++a; 2628 } 2629 #pragma omp atomic 2630 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2631 // expected-note@+1 {{expected an expression statement}} 2632 { 2633 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2634 ++a; 2635 } 2636 #pragma omp atomic 2637 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2638 // expected-note@+1 {{expected an expression statement}} 2639 { 2640 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2641 for (int i = 0; i < 10; ++i) 2642 ; 2643 } 2644 #pragma omp atomic 2645 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2646 // expected-note@+1 {{expected an expression statement}} 2647 { 2648 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2649 ++a; 2650 } 2651 #pragma omp atomic 2652 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2653 // expected-note@+1 {{expected an expression statement}} 2654 { 2655 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2656 ++a; 2657 } 2658 #pragma omp atomic 2659 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2660 // expected-note@+1 {{expected an expression statement}} 2661 { 2662 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2663 ++a; 2664 } 2665 #pragma omp atomic 2666 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2667 // expected-note@+1 {{expected an expression statement}} 2668 { 2669 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2670 for (int i = 0; i < 10; ++i) 2671 ++a; 2672 } 2673 #pragma omp atomic 2674 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 2675 // expected-note@+1 {{expected an expression statement}} 2676 { 2677 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2678 for (int i = 0; i < 10; ++i) 2679 ; 2680 } 2681 2682 // TARGET DIRECTIVE 2683 #pragma omp target 2684 #pragma omp parallel 2685 bar(); 2686 #pragma omp target 2687 #pragma omp for 2688 for (int i = 0; i < 10; ++i) 2689 ; 2690 #pragma omp target 2691 #pragma omp simd 2692 for (int i = 0; i < 10; ++i) 2693 ; 2694 #pragma omp target 2695 #pragma omp for simd 2696 for (int i = 0; i < 10; ++i) 2697 ; 2698 #pragma omp target 2699 #pragma omp sections 2700 { 2701 bar(); 2702 } 2703 #pragma omp target 2704 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}} 2705 { 2706 bar(); 2707 } 2708 #pragma omp target 2709 #pragma omp single 2710 bar(); 2711 2712 #pragma omp target 2713 #pragma omp master 2714 { 2715 bar(); 2716 } 2717 #pragma omp target 2718 #pragma omp critical 2719 { 2720 bar(); 2721 } 2722 #pragma omp target 2723 #pragma omp parallel for 2724 for (int i = 0; i < 10; ++i) 2725 ; 2726 #pragma omp target 2727 #pragma omp parallel for simd 2728 for (int i = 0; i < 10; ++i) 2729 ; 2730 #pragma omp target 2731 #pragma omp parallel sections 2732 { 2733 bar(); 2734 } 2735 #pragma omp target 2736 #pragma omp task 2737 { 2738 bar(); 2739 } 2740 #pragma omp target 2741 { 2742 #pragma omp taskyield 2743 bar(); 2744 } 2745 #pragma omp target 2746 { 2747 #pragma omp barrier 2748 bar(); 2749 } 2750 #pragma omp target 2751 { 2752 #pragma omp taskwait 2753 bar(); 2754 } 2755 #pragma omp target 2756 { 2757 #pragma omp flush 2758 bar(); 2759 } 2760 #pragma omp target 2761 { 2762 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 2763 bar(); 2764 } 2765 #pragma omp target 2766 { 2767 #pragma omp atomic 2768 ++a; 2769 } 2770 #pragma omp target 2771 { 2772 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}} 2773 ++a; 2774 } 2775 #pragma omp target 2776 { 2777 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} 2778 ++a; 2779 } 2780 #pragma omp target 2781 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} 2782 for (int i = 0; i < 10; ++i) 2783 ; 2784 #pragma omp target 2785 { 2786 #pragma omp teams 2787 ++a; 2788 } 2789 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}} 2790 { 2791 ++a; // expected-note {{statement outside teams construct here}} 2792 #pragma omp teams // expected-note {{nested teams construct here}} 2793 ++a; 2794 } 2795 #pragma omp target 2796 { 2797 #pragma omp taskloop 2798 for (int i = 0; i < 10; ++i) 2799 ++a; 2800 } 2801 #pragma omp target 2802 { 2803 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 2804 for (int i = 0; i < 10; ++i) 2805 ; 2806 } 2807 #pragma omp target 2808 { 2809 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}} 2810 } 2811 #pragma omp target 2812 { 2813 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}} 2814 } 2815 2816 // TARGET PARALLEL DIRECTIVE 2817 #pragma omp target parallel 2818 #pragma omp parallel 2819 bar(); 2820 #pragma omp target parallel 2821 #pragma omp for 2822 for (int i = 0; i < 10; ++i) 2823 ; 2824 #pragma omp target parallel 2825 #pragma omp simd 2826 for (int i = 0; i < 10; ++i) 2827 ; 2828 #pragma omp target parallel 2829 #pragma omp for simd 2830 for (int i = 0; i < 10; ++i) 2831 ; 2832 #pragma omp target parallel 2833 #pragma omp sections 2834 { 2835 bar(); 2836 } 2837 #pragma omp target parallel 2838 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}} 2839 { 2840 bar(); 2841 } 2842 #pragma omp target parallel 2843 #pragma omp single 2844 bar(); 2845 2846 #pragma omp target parallel 2847 #pragma omp master 2848 { 2849 bar(); 2850 } 2851 #pragma omp target parallel 2852 #pragma omp critical 2853 { 2854 bar(); 2855 } 2856 #pragma omp target parallel 2857 #pragma omp parallel for 2858 for (int i = 0; i < 10; ++i) 2859 ; 2860 #pragma omp target parallel 2861 #pragma omp parallel for simd 2862 for (int i = 0; i < 10; ++i) 2863 ; 2864 #pragma omp target parallel 2865 #pragma omp parallel sections 2866 { 2867 bar(); 2868 } 2869 #pragma omp target parallel 2870 #pragma omp task 2871 { 2872 bar(); 2873 } 2874 #pragma omp target parallel 2875 { 2876 #pragma omp taskyield 2877 bar(); 2878 } 2879 #pragma omp target parallel 2880 { 2881 #pragma omp barrier 2882 bar(); 2883 } 2884 #pragma omp target parallel 2885 { 2886 #pragma omp taskwait 2887 bar(); 2888 } 2889 #pragma omp target parallel 2890 { 2891 #pragma omp flush 2892 bar(); 2893 } 2894 #pragma omp target parallel 2895 { 2896 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 2897 bar(); 2898 } 2899 #pragma omp target parallel 2900 { 2901 #pragma omp atomic 2902 ++a; 2903 } 2904 #pragma omp target parallel 2905 { 2906 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}} 2907 ++a; 2908 } 2909 #pragma omp target parallel 2910 { 2911 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}} 2912 ++a; 2913 } 2914 #pragma omp target parallel 2915 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}} 2916 for (int i = 0; i < 10; ++i) 2917 ; 2918 #pragma omp target parallel 2919 { 2920 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 2921 ++a; 2922 } 2923 #pragma omp target parallel 2924 { 2925 ++a; 2926 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 2927 ++a; 2928 } 2929 #pragma omp target parallel 2930 { 2931 #pragma omp taskloop 2932 for (int i = 0; i < 10; ++i) 2933 ++a; 2934 } 2935 #pragma omp target parallel 2936 { 2937 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 2938 for (int i = 0; i < 10; ++i) 2939 ; 2940 } 2941 #pragma omp target parallel 2942 { 2943 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}} 2944 } 2945 #pragma omp target parallel 2946 { 2947 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}} 2948 } 2949 2950 // TARGET PARALLEL FOR DIRECTIVE 2951 #pragma omp target parallel for 2952 for (int i = 0; i < 10; ++i) { 2953 #pragma omp for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 2954 for (int i = 0; i < 10; ++i) 2955 ; 2956 } 2957 #pragma omp target parallel for 2958 for (int i = 0; i < 10; ++i) { 2959 #pragma omp simd 2960 for (int i = 0; i < 10; ++i) 2961 ; 2962 } 2963 #pragma omp target parallel for 2964 for (int i = 0; i < 10; ++i) { 2965 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 2966 for (int i = 0; i < 10; ++i) 2967 ; 2968 } 2969 #pragma omp target parallel for 2970 for (int i = 0; i < 10; ++i) { 2971 #pragma omp parallel 2972 for (int i = 0; i < 10; ++i) 2973 ; 2974 } 2975 #pragma omp target parallel for 2976 for (int i = 0; i < 10; ++i) { 2977 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 2978 { 2979 bar(); 2980 } 2981 } 2982 #pragma omp target parallel for 2983 for (int i = 0; i < 10; ++i) { 2984 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}} 2985 { 2986 bar(); 2987 } 2988 } 2989 #pragma omp target parallel for 2990 for (int i = 0; i < 10; ++i) { 2991 #pragma omp single // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 2992 { 2993 bar(); 2994 } 2995 } 2996 2997 #pragma omp target parallel for 2998 for (int i = 0; i < 10; ++i) { 2999 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}} 3000 { 3001 bar(); 3002 } 3003 } 3004 3005 #pragma omp target parallel for 3006 for (int i = 0; i < 10; ++i) { 3007 #pragma omp critical 3008 { 3009 bar(); 3010 } 3011 } 3012 3013 #pragma omp target parallel for 3014 for (int i = 0; i < 10; ++i) { 3015 #pragma omp parallel 3016 { 3017 #pragma omp single // OK 3018 { 3019 bar(); 3020 } 3021 #pragma omp for // OK 3022 for (int i = 0; i < 10; ++i) 3023 ; 3024 #pragma omp for simd // OK 3025 for (int i = 0; i < 10; ++i) 3026 ; 3027 #pragma omp sections // OK 3028 { 3029 bar(); 3030 } 3031 } 3032 } 3033 #pragma omp target parallel for 3034 for (int i = 0; i < 10; ++i) { 3035 #pragma omp parallel for 3036 for (int i = 0; i < 10; ++i) 3037 ; 3038 } 3039 #pragma omp target parallel for 3040 for (int i = 0; i < 10; ++i) { 3041 #pragma omp parallel for simd 3042 for (int i = 0; i < 10; ++i) 3043 ; 3044 } 3045 #pragma omp target parallel for 3046 for (int i = 0; i < 10; ++i) { 3047 #pragma omp parallel sections 3048 { 3049 bar(); 3050 } 3051 } 3052 #pragma omp target parallel for 3053 for (int i = 0; i < 10; ++i) { 3054 #pragma omp task 3055 { 3056 bar(); 3057 } 3058 } 3059 #pragma omp target parallel for 3060 for (int i = 0; i < 10; ++i) { 3061 #pragma omp taskyield 3062 bar(); 3063 } 3064 #pragma omp target parallel for 3065 for (int i = 0; i < 10; ++i) { 3066 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}} 3067 bar(); 3068 } 3069 #pragma omp target parallel for 3070 for (int i = 0; i < 10; ++i) { 3071 #pragma omp taskwait 3072 bar(); 3073 } 3074 #pragma omp target parallel for 3075 for (int i = 0; i < 10; ++i) { 3076 #pragma omp flush 3077 bar(); 3078 } 3079 #pragma omp target parallel for 3080 for (int i = 0; i < 10; ++i) { 3081 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 3082 bar(); 3083 } 3084 #pragma omp target parallel for ordered 3085 for (int i = 0; i < 10; ++i) { 3086 #pragma omp ordered // OK 3087 bar(); 3088 } 3089 #pragma omp target parallel for 3090 for (int i = 0; i < 10; ++i) { 3091 #pragma omp atomic 3092 ++a; 3093 } 3094 #pragma omp target parallel for 3095 for (int i = 0; i < 10; ++i) { 3096 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}} 3097 ++a; 3098 } 3099 #pragma omp target parallel for 3100 for (int i = 0; i < 10; ++i) { 3101 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}} 3102 ++a; 3103 } 3104 #pragma omp target parallel for 3105 for (int i = 0; i < 10; ++i) { 3106 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}} 3107 for (int i = 0; i < 10; ++i) 3108 ; 3109 } 3110 #pragma omp target parallel for 3111 for (int i = 0; i < 10; ++i) { 3112 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}} 3113 ++a; 3114 } 3115 #pragma omp target parallel for 3116 for (int i = 0; i < 10; ++i) { 3117 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}} 3118 ++a; 3119 } 3120 #pragma omp target parallel for 3121 for (int i = 0; i < 10; ++i) { 3122 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 3123 ++a; 3124 } 3125 #pragma omp target parallel for 3126 for (int i = 0; i < 10; ++i) { 3127 #pragma omp taskloop 3128 for (int i = 0; i < 10; ++i) 3129 ++a; 3130 } 3131 #pragma omp target parallel for 3132 for (int i = 0; i < 10; ++i) { 3133 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 3134 for (int j = 0; j < 10; ++j) 3135 ; 3136 } 3137 3138 // TEAMS DIRECTIVE 3139 #pragma omp target 3140 #pragma omp teams 3141 #pragma omp parallel 3142 bar(); 3143 #pragma omp target 3144 #pragma omp teams 3145 #pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 3146 for (int i = 0; i < 10; ++i) 3147 ; 3148 #pragma omp target 3149 #pragma omp teams 3150 #pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}} 3151 for (int i = 0; i < 10; ++i) 3152 ; 3153 #pragma omp target 3154 #pragma omp teams 3155 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 3156 for (int i = 0; i < 10; ++i) 3157 ; 3158 #pragma omp target 3159 #pragma omp teams 3160 #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 3161 { 3162 bar(); 3163 } 3164 #pragma omp target 3165 #pragma omp teams 3166 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}} 3167 { 3168 bar(); 3169 } 3170 #pragma omp target 3171 #pragma omp teams 3172 #pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 3173 bar(); 3174 3175 #pragma omp target 3176 #pragma omp teams 3177 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}} 3178 { 3179 bar(); 3180 } 3181 #pragma omp target 3182 #pragma omp teams 3183 #pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}} 3184 { 3185 bar(); 3186 } 3187 #pragma omp target 3188 #pragma omp teams 3189 #pragma omp parallel for 3190 for (int i = 0; i < 10; ++i) 3191 ; 3192 #pragma omp target 3193 #pragma omp teams 3194 #pragma omp parallel for simd 3195 for (int i = 0; i < 10; ++i) 3196 ; 3197 #pragma omp target 3198 #pragma omp teams 3199 #pragma omp parallel sections 3200 { 3201 bar(); 3202 } 3203 #pragma omp target 3204 #pragma omp teams 3205 #pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}} 3206 { 3207 bar(); 3208 } 3209 #pragma omp target 3210 #pragma omp teams 3211 { 3212 #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}} 3213 bar(); 3214 } 3215 #pragma omp target 3216 #pragma omp teams 3217 { 3218 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}} 3219 bar(); 3220 } 3221 #pragma omp target 3222 #pragma omp teams 3223 { 3224 #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}} 3225 bar(); 3226 } 3227 #pragma omp target 3228 #pragma omp teams 3229 { 3230 #pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}} 3231 bar(); 3232 } 3233 #pragma omp target 3234 #pragma omp teams 3235 { 3236 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 3237 bar(); 3238 } 3239 #pragma omp target 3240 #pragma omp teams 3241 { 3242 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}} 3243 ++a; 3244 } 3245 #pragma omp target 3246 #pragma omp teams 3247 { 3248 #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}} 3249 ++a; 3250 } 3251 #pragma omp target 3252 #pragma omp teams 3253 { 3254 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} 3255 ++a; 3256 } 3257 #pragma omp target 3258 #pragma omp teams 3259 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} 3260 for (int i = 0; i < 10; ++i) 3261 ; 3262 #pragma omp target 3263 #pragma omp teams 3264 { 3265 #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}} 3266 ++a; 3267 } 3268 #pragma omp target 3269 #pragma omp teams 3270 { 3271 #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}} 3272 ++a; 3273 } 3274 #pragma omp target 3275 #pragma omp teams 3276 { 3277 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 3278 ++a; 3279 } 3280 #pragma omp target 3281 #pragma omp teams 3282 { 3283 #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}} 3284 for (int i = 0; i < 10; ++i) 3285 ++a; 3286 } 3287 #pragma omp target 3288 #pragma omp teams 3289 #pragma omp distribute 3290 for (int i = 0; i < 10; ++i) 3291 ; 3292 #pragma omp target 3293 #pragma omp teams 3294 #pragma omp distribute 3295 for (int i = 0; i < 10; ++i) 3296 ; 3297 #pragma omp distribute 3298 for (int j = 0; j < 10; ++j) 3299 ; 3300 3301 // TASKLOOP DIRECTIVE 3302 #pragma omp taskloop 3303 for (int i = 0; i < 10; ++i) { 3304 #pragma omp for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 3305 for (int i = 0; i < 10; ++i) 3306 ; 3307 } 3308 #pragma omp taskloop 3309 for (int i = 0; i < 10; ++i) { 3310 #pragma omp simd 3311 for (int i = 0; i < 10; ++i) 3312 ; 3313 } 3314 #pragma omp taskloop 3315 for (int i = 0; i < 10; ++i) { 3316 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 3317 for (int i = 0; i < 10; ++i) 3318 ; 3319 } 3320 #pragma omp taskloop 3321 for (int i = 0; i < 10; ++i) { 3322 #pragma omp parallel 3323 for (int i = 0; i < 10; ++i) 3324 ; 3325 } 3326 #pragma omp taskloop 3327 for (int i = 0; i < 10; ++i) { 3328 #pragma omp sections // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 3329 { 3330 bar(); 3331 } 3332 } 3333 #pragma omp taskloop 3334 for (int i = 0; i < 10; ++i) { 3335 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}} 3336 { 3337 bar(); 3338 } 3339 } 3340 #pragma omp taskloop 3341 for (int i = 0; i < 10; ++i) { 3342 #pragma omp single // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 3343 { 3344 bar(); 3345 } 3346 } 3347 3348 #pragma omp taskloop 3349 for (int i = 0; i < 10; ++i) { 3350 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}} 3351 { 3352 bar(); 3353 } 3354 } 3355 #pragma omp taskloop 3356 for (int i = 0; i < 10; ++i) { 3357 #pragma omp critical 3358 { 3359 bar(); 3360 } 3361 } 3362 #pragma omp taskloop 3363 for (int i = 0; i < 10; ++i) { 3364 #pragma omp parallel 3365 { 3366 #pragma omp single // OK 3367 { 3368 bar(); 3369 } 3370 #pragma omp for // OK 3371 for (int i = 0; i < 10; ++i) 3372 ; 3373 #pragma omp sections // OK 3374 { 3375 bar(); 3376 } 3377 } 3378 } 3379 #pragma omp taskloop 3380 for (int i = 0; i < 10; ++i) { 3381 #pragma omp parallel for 3382 for (int i = 0; i < 10; ++i) 3383 ; 3384 } 3385 #pragma omp taskloop 3386 for (int i = 0; i < 10; ++i) { 3387 #pragma omp parallel for simd 3388 for (int i = 0; i < 10; ++i) 3389 ; 3390 } 3391 #pragma omp taskloop 3392 for (int i = 0; i < 10; ++i) { 3393 #pragma omp parallel sections 3394 { 3395 bar(); 3396 } 3397 } 3398 #pragma omp taskloop 3399 for (int i = 0; i < 10; ++i) { 3400 #pragma omp task 3401 { 3402 bar(); 3403 } 3404 } 3405 #pragma omp taskloop 3406 for (int i = 0; i < 10; ++i) { 3407 #pragma omp taskyield 3408 bar(); 3409 } 3410 #pragma omp taskloop 3411 for (int i = 0; i < 10; ++i) { 3412 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}} 3413 bar(); 3414 } 3415 #pragma omp taskloop 3416 for (int i = 0; i < 10; ++i) { 3417 #pragma omp taskwait 3418 bar(); 3419 } 3420 #pragma omp taskloop 3421 for (int i = 0; i < 10; ++i) { 3422 #pragma omp flush 3423 bar(); 3424 } 3425 #pragma omp taskloop 3426 for (int i = 0; i < 10; ++i) { 3427 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 3428 bar(); 3429 } 3430 #pragma omp taskloop 3431 for (int i = 0; i < 10; ++i) { 3432 #pragma omp atomic 3433 ++a; 3434 } 3435 #pragma omp taskloop 3436 for (int i = 0; i < 10; ++i) { 3437 #pragma omp target 3438 ++a; 3439 } 3440 #pragma omp taskloop 3441 for (int i = 0; i < 10; ++i) { 3442 #pragma omp target parallel 3443 ++a; 3444 } 3445 #pragma omp taskloop 3446 for (int i = 0; i < 10; ++i) { 3447 #pragma omp target parallel for 3448 for (int i = 0; i < 10; ++i) 3449 ; 3450 } 3451 #pragma omp taskloop 3452 for (int i = 0; i < 10; ++i) { 3453 #pragma omp target enter data map(to: a) 3454 ++a; 3455 } 3456 #pragma omp taskloop 3457 for (int i = 0; i < 10; ++i) { 3458 #pragma omp target exit data map(from: a) 3459 ++a; 3460 } 3461 #pragma omp taskloop 3462 for (int i = 0; i < 10; ++i) { 3463 #pragma omp teams // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 3464 ++a; 3465 } 3466 #pragma omp taskloop 3467 for (int i = 0; i < 10; ++i) { 3468 #pragma omp taskloop 3469 for (int i = 0; i < 10; ++i) 3470 ++a; 3471 } 3472 // DISTRIBUTE DIRECTIVE 3473 #pragma omp target 3474 #pragma omp teams 3475 #pragma omp distribute 3476 for (int i = 0; i < 10; ++i) { 3477 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 3478 for (int i = 0; i < 10; ++i) 3479 ; 3480 } 3481 #pragma omp target 3482 #pragma omp teams 3483 #pragma omp distribute 3484 for (int i = 0; i < 10; ++i) { 3485 #pragma omp for 3486 for (int i = 0; i < 10; ++i) 3487 ; 3488 } 3489 #pragma omp target 3490 #pragma omp teams 3491 #pragma omp distribute 3492 for (int i = 0; i < 10; ++i) { 3493 #pragma omp simd 3494 for (int i = 0; i < 10; ++i) 3495 ; 3496 } 3497 #pragma omp target 3498 #pragma omp teams 3499 #pragma omp distribute 3500 for (int i = 0; i < 10; ++i) { 3501 #pragma omp for simd 3502 for (int i = 0; i < 10; ++i) 3503 ; 3504 } 3505 #pragma omp target 3506 #pragma omp teams 3507 #pragma omp distribute 3508 for (int i = 0; i < 10; ++i) { 3509 #pragma omp parallel 3510 for (int i = 0; i < 10; ++i) 3511 ; 3512 } 3513 #pragma omp target 3514 #pragma omp teams 3515 #pragma omp distribute 3516 for (int i = 0; i < 10; ++i) { 3517 #pragma omp sections 3518 { 3519 bar(); 3520 } 3521 } 3522 #pragma omp target 3523 #pragma omp teams 3524 #pragma omp distribute 3525 for (int i = 0; i < 10; ++i) { 3526 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}} 3527 { 3528 bar(); 3529 } 3530 } 3531 #pragma omp target 3532 #pragma omp teams 3533 #pragma omp distribute 3534 for (int i = 0; i < 10; ++i) { 3535 #pragma omp single 3536 { 3537 bar(); 3538 } 3539 } 3540 #pragma omp target 3541 #pragma omp teams 3542 #pragma omp distribute 3543 for (int i = 0; i < 10; ++i) { 3544 #pragma omp master 3545 { 3546 bar(); 3547 } 3548 } 3549 #pragma omp target 3550 #pragma omp teams 3551 #pragma omp distribute 3552 for (int i = 0; i < 10; ++i) { 3553 #pragma omp critical 3554 { 3555 bar(); 3556 } 3557 } 3558 #pragma omp target 3559 #pragma omp teams 3560 #pragma omp distribute 3561 for (int i = 0; i < 10; ++i) { 3562 #pragma omp parallel 3563 { 3564 #pragma omp single 3565 { 3566 bar(); 3567 } 3568 } 3569 } 3570 #pragma omp target 3571 #pragma omp teams 3572 #pragma omp distribute 3573 for (int i = 0; i < 10; ++i) { 3574 #pragma omp parallel for 3575 for (int i = 0; i < 10; ++i) 3576 ; 3577 } 3578 #pragma omp target 3579 #pragma omp teams 3580 #pragma omp distribute 3581 for (int i = 0; i < 10; ++i) { 3582 #pragma omp parallel for simd 3583 for (int i = 0; i < 10; ++i) 3584 ; 3585 } 3586 #pragma omp target 3587 #pragma omp teams 3588 #pragma omp distribute 3589 for (int i = 0; i < 10; ++i) { 3590 #pragma omp parallel sections 3591 { 3592 bar(); 3593 } 3594 } 3595 #pragma omp target 3596 #pragma omp teams 3597 #pragma omp distribute 3598 for (int i = 0; i < 10; ++i) { 3599 #pragma omp task 3600 { 3601 bar(); 3602 } 3603 } 3604 #pragma omp target 3605 #pragma omp teams 3606 #pragma omp distribute 3607 for (int i = 0; i < 10; ++i) { 3608 #pragma omp taskyield 3609 bar(); 3610 } 3611 #pragma omp target 3612 #pragma omp teams 3613 #pragma omp distribute 3614 for (int i = 0; i < 10; ++i) { 3615 #pragma omp barrier 3616 bar(); 3617 } 3618 #pragma omp target 3619 #pragma omp teams 3620 #pragma omp distribute 3621 for (int i = 0; i < 10; ++i) { 3622 #pragma omp taskwait 3623 bar(); 3624 } 3625 #pragma omp target 3626 #pragma omp teams 3627 #pragma omp distribute 3628 for (int i = 0; i < 10; ++i) { 3629 #pragma omp flush 3630 bar(); 3631 } 3632 #pragma omp target 3633 #pragma omp teams 3634 #pragma omp distribute 3635 for (int i = 0; i < 10; ++i) { 3636 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 3637 bar(); 3638 } 3639 #pragma omp target 3640 #pragma omp teams 3641 #pragma omp distribute 3642 for (int i = 0; i < 10; ++i) { 3643 #pragma omp atomic 3644 ++a; 3645 } 3646 #pragma omp target 3647 #pragma omp teams 3648 #pragma omp distribute 3649 for (int i = 0; i < 10; ++i) { 3650 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}} 3651 ++a; 3652 } 3653 #pragma omp target 3654 #pragma omp teams 3655 #pragma omp distribute 3656 for (int i = 0; i < 10; ++i) { 3657 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} 3658 ++a; 3659 } 3660 #pragma omp target 3661 #pragma omp teams 3662 #pragma omp distribute 3663 for (int i = 0; i < 10; ++i) { 3664 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} 3665 for (int i = 0; i < 10; ++i) 3666 ; 3667 } 3668 #pragma omp target 3669 #pragma omp teams 3670 #pragma omp distribute 3671 for (int i = 0; i < 10; ++i) { 3672 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}} 3673 ++a; 3674 } 3675 #pragma omp target 3676 #pragma omp teams 3677 #pragma omp distribute 3678 for (int i = 0; i < 10; ++i) { 3679 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}} 3680 ++a; 3681 } 3682 #pragma omp target 3683 #pragma omp teams 3684 #pragma omp distribute 3685 for (int i = 0; i < 10; ++i) { 3686 #pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 3687 ++a; 3688 } 3689 } 3690 3691 void foo() { 3692 int a = 0; 3693 // PARALLEL DIRECTIVE 3694 #pragma omp parallel 3695 #pragma omp for 3696 for (int i = 0; i < 10; ++i) 3697 ; 3698 #pragma omp parallel 3699 #pragma omp simd 3700 for (int i = 0; i < 10; ++i) 3701 ; 3702 #pragma omp parallel 3703 #pragma omp for simd 3704 for (int i = 0; i < 10; ++i) 3705 ; 3706 #pragma omp parallel 3707 #pragma omp sections 3708 { 3709 bar(); 3710 } 3711 #pragma omp parallel 3712 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}} 3713 { 3714 bar(); 3715 } 3716 #pragma omp parallel 3717 #pragma omp sections 3718 { 3719 bar(); 3720 } 3721 #pragma omp parallel 3722 #pragma omp single 3723 bar(); 3724 #pragma omp parallel 3725 #pragma omp master 3726 bar(); 3727 #pragma omp parallel 3728 #pragma omp critical 3729 bar(); 3730 #pragma omp parallel 3731 #pragma omp parallel for 3732 for (int i = 0; i < 10; ++i) 3733 ; 3734 #pragma omp parallel 3735 #pragma omp parallel for simd 3736 for (int i = 0; i < 10; ++i) 3737 ; 3738 #pragma omp parallel 3739 #pragma omp parallel sections 3740 { 3741 bar(); 3742 } 3743 #pragma omp parallel 3744 #pragma omp task 3745 { 3746 bar(); 3747 } 3748 #pragma omp parallel 3749 { 3750 #pragma omp taskyield 3751 bar(); 3752 } 3753 #pragma omp parallel 3754 { 3755 #pragma omp barrier 3756 bar(); 3757 } 3758 #pragma omp parallel 3759 { 3760 #pragma omp taskwait 3761 bar(); 3762 } 3763 #pragma omp parallel 3764 { 3765 #pragma omp flush 3766 bar(); 3767 } 3768 #pragma omp parallel 3769 { 3770 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 3771 bar(); 3772 } 3773 #pragma omp parallel 3774 { 3775 #pragma omp atomic 3776 ++a; 3777 } 3778 #pragma omp parallel 3779 { 3780 #pragma omp target 3781 ++a; 3782 } 3783 #pragma omp parallel 3784 { 3785 #pragma omp target parallel 3786 ++a; 3787 } 3788 #pragma omp parallel 3789 #pragma omp target parallel for 3790 for (int i = 0; i < 10; ++i) 3791 ; 3792 #pragma omp parallel 3793 { 3794 #pragma omp target enter data map(to: a) 3795 ++a; 3796 } 3797 #pragma omp parallel 3798 { 3799 #pragma omp target exit data map(from: a) 3800 ++a; 3801 } 3802 #pragma omp parallel 3803 { 3804 #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 3805 ++a; 3806 } 3807 #pragma omp parallel 3808 { 3809 #pragma omp taskloop 3810 for (int i = 0; i < 10; ++i) 3811 ++a; 3812 } 3813 #pragma omp parallel 3814 { 3815 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 3816 for (int i = 0; i < 10; ++i) 3817 ; 3818 } 3819 3820 // SIMD DIRECTIVE 3821 #pragma omp simd 3822 for (int i = 0; i < 10; ++i) { 3823 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3824 for (int i = 0; i < 10; ++i) 3825 ; 3826 } 3827 #pragma omp simd 3828 for (int i = 0; i < 10; ++i) { 3829 #pragma omp simd 3830 for (int i = 0; i < 10; ++i) 3831 ; 3832 } 3833 #pragma omp simd 3834 for (int i = 0; i < 10; ++i) { 3835 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3836 for (int i = 0; i < 10; ++i) 3837 ; 3838 } 3839 #pragma omp simd 3840 for (int i = 0; i < 10; ++i) { 3841 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3842 for (int i = 0; i < 10; ++i) 3843 ; 3844 } 3845 #pragma omp simd 3846 for (int i = 0; i < 10; ++i) { 3847 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3848 { 3849 bar(); 3850 } 3851 } 3852 #pragma omp simd 3853 for (int i = 0; i < 10; ++i) { 3854 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3855 { 3856 bar(); 3857 } 3858 } 3859 #pragma omp simd 3860 for (int i = 0; i < 10; ++i) { 3861 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3862 bar(); 3863 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3864 bar(); 3865 } 3866 #pragma omp simd 3867 for (int i = 0; i < 10; ++i) { 3868 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3869 bar(); 3870 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3871 bar(); 3872 } 3873 #pragma omp simd 3874 for (int i = 0; i < 10; ++i) { 3875 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3876 for (int i = 0; i < 10; ++i) 3877 ; 3878 } 3879 #pragma omp simd 3880 for (int i = 0; i < 10; ++i) { 3881 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3882 for (int i = 0; i < 10; ++i) 3883 ; 3884 } 3885 #pragma omp simd 3886 for (int i = 0; i < 10; ++i) { 3887 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3888 { 3889 bar(); 3890 } 3891 } 3892 #pragma omp simd 3893 for (int i = 0; i < 10; ++i) { 3894 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3895 { 3896 bar(); 3897 } 3898 } 3899 #pragma omp simd 3900 for (int i = 0; i < 10; ++i) { 3901 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3902 bar(); 3903 } 3904 #pragma omp simd 3905 for (int i = 0; i < 10; ++i) { 3906 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3907 bar(); 3908 } 3909 #pragma omp simd 3910 for (int i = 0; i < 10; ++i) { 3911 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3912 bar(); 3913 } 3914 #pragma omp simd 3915 for (int i = 0; i < 10; ++i) { 3916 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3917 bar(); 3918 } 3919 #pragma omp simd 3920 for (int i = 0; i < 10; ++i) { 3921 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3922 bar(); 3923 } 3924 #pragma omp simd 3925 for (int i = 0; i < 10; ++i) { 3926 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3927 ++a; 3928 } 3929 #pragma omp simd 3930 for (int i = 0; i < 10; ++i) { 3931 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3932 ++a; 3933 } 3934 #pragma omp simd 3935 for (int i = 0; i < 10; ++i) { 3936 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3937 ++a; 3938 } 3939 #pragma omp simd 3940 for (int i = 0; i < 10; ++i) { 3941 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3942 for (int i = 0; i < 10; ++i) 3943 ; 3944 } 3945 #pragma omp simd 3946 for (int i = 0; i < 10; ++i) { 3947 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3948 ++a; 3949 } 3950 #pragma omp simd 3951 for (int i = 0; i < 10; ++i) { 3952 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3953 ++a; 3954 } 3955 #pragma omp simd 3956 for (int i = 0; i < 10; ++i) { 3957 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3958 ++a; 3959 } 3960 #pragma omp simd 3961 for (int i = 0; i < 10; ++i) { 3962 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3963 for (int i = 0; i < 10; ++i) 3964 ++a; 3965 } 3966 #pragma omp simd 3967 for (int i = 0; i < 10; ++i) { 3968 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3969 for (int j = 0; j < 10; ++j) 3970 ; 3971 } 3972 3973 // FOR DIRECTIVE 3974 #pragma omp for 3975 for (int i = 0; i < 10; ++i) { 3976 #pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 3977 for (int i = 0; i < 10; ++i) 3978 ; 3979 } 3980 #pragma omp for 3981 for (int i = 0; i < 10; ++i) { 3982 #pragma omp simd 3983 for (int i = 0; i < 10; ++i) 3984 ; 3985 } 3986 #pragma omp for 3987 for (int i = 0; i < 10; ++i) { 3988 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 3989 for (int i = 0; i < 10; ++i) 3990 ; 3991 } 3992 #pragma omp for 3993 for (int i = 0; i < 10; ++i) { 3994 #pragma omp parallel 3995 for (int i = 0; i < 10; ++i) 3996 ; 3997 } 3998 #pragma omp for 3999 for (int i = 0; i < 10; ++i) { 4000 #pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 4001 { 4002 bar(); 4003 } 4004 } 4005 #pragma omp for 4006 for (int i = 0; i < 10; ++i) { 4007 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} 4008 { 4009 bar(); 4010 } 4011 } 4012 #pragma omp for 4013 for (int i = 0; i < 10; ++i) { 4014 #pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 4015 bar(); 4016 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}} 4017 bar(); 4018 #pragma omp critical 4019 bar(); 4020 } 4021 #pragma omp for 4022 for (int i = 0; i < 10; ++i) { 4023 #pragma omp parallel 4024 { 4025 #pragma omp single // OK 4026 { 4027 bar(); 4028 } 4029 #pragma omp for // OK 4030 for (int i = 0; i < 10; ++i) 4031 ; 4032 #pragma omp for simd // OK 4033 for (int i = 0; i < 10; ++i) 4034 ; 4035 #pragma omp sections // OK 4036 { 4037 bar(); 4038 } 4039 } 4040 } 4041 #pragma omp for 4042 for (int i = 0; i < 10; ++i) { 4043 #pragma omp parallel for 4044 for (int i = 0; i < 10; ++i) 4045 ; 4046 } 4047 #pragma omp for 4048 for (int i = 0; i < 10; ++i) { 4049 #pragma omp parallel for simd 4050 for (int i = 0; i < 10; ++i) 4051 ; 4052 } 4053 #pragma omp for 4054 for (int i = 0; i < 10; ++i) { 4055 #pragma omp parallel sections 4056 { 4057 bar(); 4058 } 4059 } 4060 #pragma omp for 4061 for (int i = 0; i < 10; ++i) { 4062 #pragma omp task 4063 { 4064 bar(); 4065 } 4066 } 4067 #pragma omp for 4068 for (int i = 0; i < 10; ++i) { 4069 #pragma omp taskyield 4070 bar(); 4071 } 4072 #pragma omp for 4073 for (int i = 0; i < 10; ++i) { 4074 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}} 4075 bar(); 4076 } 4077 #pragma omp for 4078 for (int i = 0; i < 10; ++i) { 4079 #pragma omp taskwait 4080 bar(); 4081 } 4082 #pragma omp for 4083 for (int i = 0; i < 10; ++i) { 4084 #pragma omp flush 4085 bar(); 4086 } 4087 #pragma omp for 4088 for (int i = 0; i < 10; ++i) { 4089 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 4090 bar(); 4091 } 4092 #pragma omp for ordered 4093 for (int i = 0; i < 10; ++i) { 4094 #pragma omp ordered // OK 4095 bar(); 4096 } 4097 #pragma omp for 4098 for (int i = 0; i < 10; ++i) { 4099 #pragma omp atomic 4100 ++a; 4101 } 4102 #pragma omp for 4103 for (int i = 0; i < 10; ++i) { 4104 #pragma omp target 4105 ++a; 4106 } 4107 #pragma omp for 4108 for (int i = 0; i < 10; ++i) { 4109 #pragma omp target parallel 4110 ++a; 4111 } 4112 #pragma omp for 4113 for (int i = 0; i < 10; ++i) { 4114 #pragma omp target parallel for 4115 for (int i = 0; i < 10; ++i) 4116 ; 4117 } 4118 #pragma omp for 4119 for (int i = 0; i < 10; ++i) { 4120 #pragma omp target enter data map(to: a) 4121 ++a; 4122 } 4123 #pragma omp for 4124 for (int i = 0; i < 10; ++i) { 4125 #pragma omp target exit data map(from: a) 4126 ++a; 4127 } 4128 #pragma omp for 4129 for (int i = 0; i < 10; ++i) { 4130 #pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 4131 ++a; 4132 } 4133 #pragma omp for 4134 for (int i = 0; i < 10; ++i) { 4135 #pragma omp taskloop 4136 for (int i = 0; i < 10; ++i) 4137 ++a; 4138 } 4139 #pragma omp for 4140 for (int i = 0; i < 10; ++i) { 4141 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 4142 for (int j = 0; j < 10; ++j) 4143 ; 4144 } 4145 4146 // FOR SIMD DIRECTIVE 4147 #pragma omp for simd 4148 for (int i = 0; i < 10; ++i) { 4149 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4150 for (int i = 0; i < 10; ++i) 4151 ; 4152 } 4153 #pragma omp for simd 4154 for (int i = 0; i < 10; ++i) { 4155 #pragma omp simd 4156 for (int i = 0; i < 10; ++i) 4157 ; 4158 } 4159 #pragma omp for simd 4160 for (int i = 0; i < 10; ++i) { 4161 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4162 for (int i = 0; i < 10; ++i) 4163 ; 4164 } 4165 #pragma omp for simd 4166 for (int i = 0; i < 10; ++i) { 4167 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4168 for (int i = 0; i < 10; ++i) 4169 ; 4170 } 4171 #pragma omp for simd 4172 for (int i = 0; i < 10; ++i) { 4173 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4174 { 4175 bar(); 4176 } 4177 } 4178 #pragma omp for simd 4179 for (int i = 0; i < 10; ++i) { 4180 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4181 { 4182 bar(); 4183 } 4184 } 4185 #pragma omp for simd 4186 for (int i = 0; i < 10; ++i) { 4187 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4188 bar(); 4189 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4190 bar(); 4191 } 4192 #pragma omp for simd 4193 for (int i = 0; i < 10; ++i) { 4194 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4195 bar(); 4196 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4197 bar(); 4198 } 4199 #pragma omp for simd 4200 for (int i = 0; i < 10; ++i) { 4201 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4202 for (int i = 0; i < 10; ++i) 4203 ; 4204 } 4205 #pragma omp for simd 4206 for (int i = 0; i < 10; ++i) { 4207 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4208 for (int i = 0; i < 10; ++i) 4209 ; 4210 } 4211 #pragma omp for simd 4212 for (int i = 0; i < 10; ++i) { 4213 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4214 { 4215 bar(); 4216 } 4217 } 4218 #pragma omp for simd 4219 for (int i = 0; i < 10; ++i) { 4220 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4221 { 4222 bar(); 4223 } 4224 } 4225 #pragma omp for simd 4226 for (int i = 0; i < 10; ++i) { 4227 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4228 bar(); 4229 } 4230 #pragma omp for simd 4231 for (int i = 0; i < 10; ++i) { 4232 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4233 bar(); 4234 } 4235 #pragma omp for simd 4236 for (int i = 0; i < 10; ++i) { 4237 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4238 bar(); 4239 } 4240 #pragma omp for simd 4241 for (int i = 0; i < 10; ++i) { 4242 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4243 bar(); 4244 } 4245 #pragma omp for simd 4246 for (int i = 0; i < 10; ++i) { 4247 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4248 bar(); 4249 } 4250 #pragma omp for simd 4251 for (int i = 0; i < 10; ++i) { 4252 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4253 ++a; 4254 } 4255 #pragma omp for simd 4256 for (int i = 0; i < 10; ++i) { 4257 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4258 ++a; 4259 } 4260 #pragma omp for simd 4261 for (int i = 0; i < 10; ++i) { 4262 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4263 ++a; 4264 } 4265 #pragma omp for simd 4266 for (int i = 0; i < 10; ++i) { 4267 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4268 for (int i = 0; i < 10; ++i) 4269 ; 4270 } 4271 #pragma omp for simd 4272 for (int i = 0; i < 10; ++i) { 4273 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4274 ++a; 4275 } 4276 #pragma omp for simd 4277 for (int i = 0; i < 10; ++i) { 4278 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4279 ++a; 4280 } 4281 #pragma omp for simd 4282 for (int i = 0; i < 10; ++i) { 4283 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4284 ++a; 4285 } 4286 #pragma omp for simd 4287 for (int i = 0; i < 10; ++i) { 4288 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4289 for (int i = 0; i < 10; ++i) 4290 ++a; 4291 } 4292 #pragma omp for simd 4293 for (int i = 0; i < 10; ++i) { 4294 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4295 for (int j = 0; j < 10; ++j) 4296 ; 4297 } 4298 4299 // SECTIONS DIRECTIVE 4300 #pragma omp sections 4301 { 4302 #pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 4303 for (int i = 0; i < 10; ++i) 4304 ; 4305 } 4306 #pragma omp sections 4307 { 4308 #pragma omp simd 4309 for (int i = 0; i < 10; ++i) 4310 ; 4311 } 4312 #pragma omp sections 4313 { 4314 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 4315 for (int i = 0; i < 10; ++i) 4316 ; 4317 } 4318 #pragma omp sections 4319 { 4320 #pragma omp parallel 4321 for (int i = 0; i < 10; ++i) 4322 ; 4323 } 4324 #pragma omp sections 4325 { 4326 #pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 4327 { 4328 bar(); 4329 } 4330 } 4331 #pragma omp sections 4332 { 4333 #pragma omp section 4334 { 4335 bar(); 4336 } 4337 } 4338 #pragma omp sections 4339 { 4340 #pragma omp critical 4341 bar(); 4342 #pragma omp single // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 4343 bar(); 4344 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}} 4345 bar(); 4346 } 4347 #pragma omp sections 4348 { 4349 #pragma omp parallel 4350 { 4351 #pragma omp single // OK 4352 { 4353 bar(); 4354 } 4355 #pragma omp for // OK 4356 for (int i = 0; i < 10; ++i) 4357 ; 4358 #pragma omp for simd // OK 4359 for (int i = 0; i < 10; ++i) 4360 ; 4361 #pragma omp sections // OK 4362 { 4363 bar(); 4364 } 4365 } 4366 } 4367 #pragma omp sections 4368 { 4369 #pragma omp parallel for 4370 for (int i = 0; i < 10; ++i) 4371 ; 4372 } 4373 #pragma omp sections 4374 { 4375 #pragma omp parallel for simd 4376 for (int i = 0; i < 10; ++i) 4377 ; 4378 } 4379 #pragma omp sections 4380 { 4381 #pragma omp parallel sections 4382 { 4383 bar(); 4384 } 4385 } 4386 #pragma omp sections 4387 { 4388 #pragma omp task 4389 { 4390 bar(); 4391 } 4392 } 4393 #pragma omp sections 4394 { 4395 #pragma omp taskyield 4396 } 4397 #pragma omp sections 4398 { 4399 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}} 4400 bar(); 4401 } 4402 #pragma omp sections 4403 { 4404 #pragma omp taskwait 4405 } 4406 #pragma omp sections 4407 { 4408 #pragma omp flush 4409 } 4410 #pragma omp sections 4411 { 4412 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 4413 bar(); 4414 } 4415 #pragma omp sections 4416 { 4417 #pragma omp atomic 4418 ++a; 4419 } 4420 #pragma omp sections 4421 { 4422 #pragma omp target 4423 ++a; 4424 } 4425 #pragma omp sections 4426 { 4427 #pragma omp target parallel 4428 ++a; 4429 } 4430 #pragma omp sections 4431 { 4432 #pragma omp target parallel for 4433 for (int i = 0; i < 10; ++i) 4434 ; 4435 } 4436 #pragma omp sections 4437 { 4438 #pragma omp target enter data map(to: a) 4439 } 4440 #pragma omp sections 4441 { 4442 #pragma omp target exit data map(from: a) 4443 } 4444 #pragma omp sections 4445 { 4446 #pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 4447 ++a; 4448 } 4449 #pragma omp sections 4450 { 4451 #pragma omp taskloop 4452 for (int i = 0; i < 10; ++i) 4453 ++a; 4454 } 4455 #pragma omp sections 4456 { 4457 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 4458 for (int i = 0; i < 10; ++i) 4459 ; 4460 } 4461 4462 // SECTION DIRECTIVE 4463 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} 4464 { 4465 bar(); 4466 } 4467 #pragma omp sections 4468 { 4469 #pragma omp section 4470 { 4471 #pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 4472 for (int i = 0; i < 10; ++i) 4473 ; 4474 } 4475 } 4476 #pragma omp sections 4477 { 4478 #pragma omp section 4479 { 4480 #pragma omp simd 4481 for (int i = 0; i < 10; ++i) 4482 ; 4483 } 4484 } 4485 #pragma omp sections 4486 { 4487 #pragma omp section 4488 { 4489 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 4490 for (int i = 0; i < 10; ++i) 4491 ; 4492 } 4493 } 4494 #pragma omp sections 4495 { 4496 #pragma omp section 4497 { 4498 #pragma omp parallel 4499 for (int i = 0; i < 10; ++i) 4500 ; 4501 } 4502 } 4503 #pragma omp sections 4504 { 4505 #pragma omp section 4506 { 4507 #pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 4508 { 4509 bar(); 4510 } 4511 } 4512 } 4513 #pragma omp sections 4514 { 4515 #pragma omp section 4516 { 4517 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}} 4518 { 4519 bar(); 4520 } 4521 } 4522 } 4523 #pragma omp sections 4524 { 4525 #pragma omp section 4526 { 4527 #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 4528 bar(); 4529 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 4530 bar(); 4531 #pragma omp critical 4532 bar(); 4533 } 4534 } 4535 #pragma omp sections 4536 { 4537 #pragma omp section 4538 { 4539 #pragma omp parallel 4540 { 4541 #pragma omp single // OK 4542 { 4543 bar(); 4544 } 4545 #pragma omp for // OK 4546 for (int i = 0; i < 10; ++i) 4547 ; 4548 #pragma omp for simd // OK 4549 for (int i = 0; i < 10; ++i) 4550 ; 4551 #pragma omp sections // OK 4552 { 4553 bar(); 4554 } 4555 } 4556 } 4557 } 4558 #pragma omp sections 4559 { 4560 #pragma omp section 4561 { 4562 #pragma omp parallel for 4563 for (int i = 0; i < 10; ++i) 4564 ; 4565 } 4566 } 4567 #pragma omp sections 4568 { 4569 #pragma omp section 4570 { 4571 #pragma omp parallel for simd 4572 for (int i = 0; i < 10; ++i) 4573 ; 4574 } 4575 } 4576 #pragma omp sections 4577 { 4578 #pragma omp section 4579 { 4580 #pragma omp parallel sections 4581 { 4582 bar(); 4583 } 4584 } 4585 } 4586 #pragma omp sections 4587 { 4588 #pragma omp section 4589 { 4590 #pragma omp task 4591 { 4592 bar(); 4593 } 4594 } 4595 } 4596 #pragma omp sections 4597 { 4598 #pragma omp section 4599 { 4600 #pragma omp taskyield 4601 bar(); 4602 } 4603 } 4604 #pragma omp sections 4605 { 4606 #pragma omp section 4607 { 4608 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}} 4609 bar(); 4610 } 4611 } 4612 #pragma omp sections 4613 { 4614 #pragma omp section 4615 { 4616 #pragma omp taskwait 4617 bar(); 4618 } 4619 } 4620 #pragma omp sections 4621 { 4622 #pragma omp section 4623 { 4624 #pragma omp flush 4625 bar(); 4626 } 4627 } 4628 #pragma omp sections 4629 { 4630 #pragma omp section 4631 { 4632 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 4633 bar(); 4634 } 4635 } 4636 #pragma omp sections 4637 { 4638 #pragma omp section 4639 { 4640 #pragma omp atomic 4641 ++a; 4642 } 4643 } 4644 #pragma omp sections 4645 { 4646 #pragma omp section 4647 { 4648 #pragma omp target 4649 ++a; 4650 } 4651 } 4652 #pragma omp sections 4653 { 4654 #pragma omp section 4655 { 4656 #pragma omp target parallel 4657 ++a; 4658 } 4659 } 4660 #pragma omp sections 4661 { 4662 #pragma omp section 4663 { 4664 #pragma omp target parallel for 4665 for (int i = 0; i < 10; ++i) 4666 ; 4667 } 4668 } 4669 #pragma omp sections 4670 { 4671 #pragma omp section 4672 { 4673 #pragma omp target enter data map(to: a) 4674 ++a; 4675 } 4676 } 4677 #pragma omp sections 4678 { 4679 #pragma omp section 4680 { 4681 #pragma omp target exit data map(from: a) 4682 ++a; 4683 } 4684 } 4685 #pragma omp sections 4686 { 4687 #pragma omp section 4688 { 4689 #pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 4690 ++a; 4691 } 4692 } 4693 #pragma omp sections 4694 { 4695 #pragma omp section 4696 { 4697 #pragma omp taskloop 4698 for (int i = 0; i < 10; ++i) 4699 ++a; 4700 } 4701 } 4702 #pragma omp sections 4703 { 4704 #pragma omp section 4705 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 4706 for (int i = 0; i < 10; ++i) 4707 ; 4708 } 4709 4710 // SINGLE DIRECTIVE 4711 #pragma omp single 4712 { 4713 #pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 4714 for (int i = 0; i < 10; ++i) 4715 ; 4716 } 4717 #pragma omp single 4718 { 4719 #pragma omp simd 4720 for (int i = 0; i < 10; ++i) 4721 ; 4722 } 4723 #pragma omp single 4724 { 4725 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 4726 for (int i = 0; i < 10; ++i) 4727 ; 4728 } 4729 #pragma omp single 4730 { 4731 #pragma omp parallel 4732 for (int i = 0; i < 10; ++i) 4733 ; 4734 } 4735 #pragma omp single 4736 { 4737 #pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 4738 { 4739 bar(); 4740 } 4741 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}} 4742 bar(); 4743 #pragma omp critical 4744 bar(); 4745 } 4746 #pragma omp single 4747 { 4748 #pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 4749 { 4750 bar(); 4751 } 4752 } 4753 #pragma omp single 4754 { 4755 #pragma omp parallel 4756 { 4757 #pragma omp single // OK 4758 { 4759 bar(); 4760 } 4761 #pragma omp for // OK 4762 for (int i = 0; i < 10; ++i) 4763 ; 4764 #pragma omp for simd // OK 4765 for (int i = 0; i < 10; ++i) 4766 ; 4767 #pragma omp sections // OK 4768 { 4769 bar(); 4770 } 4771 } 4772 } 4773 #pragma omp single 4774 { 4775 #pragma omp parallel for 4776 for (int i = 0; i < 10; ++i) 4777 ; 4778 } 4779 #pragma omp single 4780 { 4781 #pragma omp parallel for simd 4782 for (int i = 0; i < 10; ++i) 4783 ; 4784 } 4785 #pragma omp single 4786 { 4787 #pragma omp parallel sections 4788 { 4789 bar(); 4790 } 4791 } 4792 #pragma omp single 4793 { 4794 #pragma omp task 4795 { 4796 bar(); 4797 } 4798 } 4799 #pragma omp single 4800 { 4801 #pragma omp taskyield 4802 bar(); 4803 } 4804 #pragma omp single 4805 { 4806 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}} 4807 bar(); 4808 } 4809 #pragma omp single 4810 { 4811 #pragma omp taskwait 4812 bar(); 4813 } 4814 #pragma omp single 4815 { 4816 #pragma omp flush 4817 bar(); 4818 } 4819 #pragma omp single 4820 { 4821 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 4822 bar(); 4823 } 4824 #pragma omp single 4825 { 4826 #pragma omp atomic 4827 ++a; 4828 } 4829 #pragma omp single 4830 { 4831 #pragma omp target 4832 ++a; 4833 } 4834 #pragma omp single 4835 { 4836 #pragma omp target parallel 4837 ++a; 4838 } 4839 #pragma omp single 4840 { 4841 #pragma omp target parallel for 4842 for (int i = 0; i < 10; ++i) 4843 ; 4844 } 4845 #pragma omp single 4846 { 4847 #pragma omp target enter data map(to: a) 4848 ++a; 4849 } 4850 #pragma omp single 4851 { 4852 #pragma omp target exit data map(from: a) 4853 ++a; 4854 } 4855 #pragma omp single 4856 { 4857 #pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 4858 ++a; 4859 } 4860 #pragma omp single 4861 { 4862 #pragma omp taskloop 4863 for (int i = 0; i < 10; ++i) 4864 ++a; 4865 } 4866 #pragma omp single 4867 { 4868 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 4869 for (int i = 0; i < 10; ++i) 4870 ; 4871 } 4872 4873 // MASTER DIRECTIVE 4874 #pragma omp master 4875 { 4876 #pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 4877 for (int i = 0; i < 10; ++i) 4878 ; 4879 } 4880 #pragma omp master 4881 { 4882 #pragma omp simd 4883 for (int i = 0; i < 10; ++i) 4884 ; 4885 } 4886 #pragma omp master 4887 { 4888 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 4889 for (int i = 0; i < 10; ++i) 4890 ; 4891 } 4892 #pragma omp master 4893 { 4894 #pragma omp parallel 4895 for (int i = 0; i < 10; ++i) 4896 ; 4897 } 4898 #pragma omp master 4899 { 4900 #pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 4901 { 4902 bar(); 4903 } 4904 } 4905 #pragma omp master 4906 { 4907 #pragma omp master // OK, though second 'master' is redundant 4908 { 4909 bar(); 4910 } 4911 } 4912 #pragma omp master 4913 { 4914 #pragma omp critical 4915 { 4916 bar(); 4917 } 4918 } 4919 #pragma omp master 4920 { 4921 #pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 4922 { 4923 bar(); 4924 } 4925 } 4926 #pragma omp master 4927 { 4928 #pragma omp parallel 4929 { 4930 #pragma omp master // OK 4931 { 4932 bar(); 4933 } 4934 #pragma omp for // OK 4935 for (int i = 0; i < 10; ++i) 4936 ; 4937 #pragma omp for simd // OK 4938 for (int i = 0; i < 10; ++i) 4939 ; 4940 #pragma omp sections // OK 4941 { 4942 bar(); 4943 } 4944 } 4945 } 4946 #pragma omp master 4947 { 4948 #pragma omp parallel for 4949 for (int i = 0; i < 10; ++i) 4950 ; 4951 } 4952 #pragma omp master 4953 { 4954 #pragma omp parallel for simd 4955 for (int i = 0; i < 10; ++i) 4956 ; 4957 } 4958 #pragma omp master 4959 { 4960 #pragma omp parallel sections 4961 { 4962 bar(); 4963 } 4964 } 4965 #pragma omp master 4966 { 4967 #pragma omp task 4968 { 4969 bar(); 4970 } 4971 } 4972 #pragma omp master 4973 { 4974 #pragma omp taskyield 4975 bar(); 4976 } 4977 #pragma omp master 4978 { 4979 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}} 4980 bar(); 4981 } 4982 #pragma omp master 4983 { 4984 #pragma omp taskwait 4985 bar(); 4986 } 4987 #pragma omp master 4988 { 4989 #pragma omp flush 4990 bar(); 4991 } 4992 #pragma omp master 4993 { 4994 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 4995 bar(); 4996 } 4997 #pragma omp master 4998 { 4999 #pragma omp atomic 5000 ++a; 5001 } 5002 #pragma omp master 5003 { 5004 #pragma omp target 5005 ++a; 5006 } 5007 #pragma omp master 5008 { 5009 #pragma omp target parallel 5010 ++a; 5011 } 5012 #pragma omp master 5013 { 5014 #pragma omp target parallel for 5015 for (int i = 0; i < 10; ++i) 5016 ; 5017 } 5018 #pragma omp master 5019 { 5020 #pragma omp target enter data map(to: a) 5021 ++a; 5022 } 5023 #pragma omp master 5024 { 5025 #pragma omp target exit data map(from: a) 5026 ++a; 5027 } 5028 #pragma omp master 5029 { 5030 #pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 5031 ++a; 5032 } 5033 #pragma omp master 5034 { 5035 #pragma omp taskloop 5036 for (int i = 0; i < 10; ++i) 5037 ++a; 5038 } 5039 #pragma omp master 5040 { 5041 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 5042 for (int i = 0; i < 10; ++i) 5043 ; 5044 } 5045 5046 // CRITICAL DIRECTIVE 5047 #pragma omp critical 5048 { 5049 #pragma omp for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 5050 for (int i = 0; i < 10; ++i) 5051 ; 5052 } 5053 #pragma omp critical 5054 { 5055 #pragma omp simd 5056 for (int i = 0; i < 10; ++i) 5057 ; 5058 } 5059 #pragma omp critical 5060 { 5061 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 5062 for (int i = 0; i < 10; ++i) 5063 ; 5064 } 5065 #pragma omp critical 5066 { 5067 #pragma omp parallel 5068 for (int i = 0; i < 10; ++i) 5069 ; 5070 } 5071 #pragma omp critical 5072 { 5073 #pragma omp single // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 5074 { 5075 bar(); 5076 } 5077 } 5078 #pragma omp critical 5079 { 5080 #pragma omp master // OK, though second 'master' is redundant 5081 { 5082 bar(); 5083 } 5084 } 5085 #pragma omp critical 5086 { 5087 #pragma omp critical 5088 { 5089 bar(); 5090 } 5091 } 5092 #pragma omp critical 5093 { 5094 #pragma omp sections // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 5095 { 5096 bar(); 5097 } 5098 } 5099 #pragma omp critical 5100 { 5101 #pragma omp parallel 5102 { 5103 #pragma omp master // OK 5104 { 5105 bar(); 5106 } 5107 #pragma omp for // OK 5108 for (int i = 0; i < 10; ++i) 5109 ; 5110 #pragma omp for simd // OK 5111 for (int i = 0; i < 10; ++i) 5112 ; 5113 #pragma omp sections // OK 5114 { 5115 bar(); 5116 } 5117 } 5118 } 5119 #pragma omp critical 5120 { 5121 #pragma omp parallel for 5122 for (int i = 0; i < 10; ++i) 5123 ; 5124 } 5125 #pragma omp critical 5126 { 5127 #pragma omp parallel for simd 5128 for (int i = 0; i < 10; ++i) 5129 ; 5130 } 5131 #pragma omp critical 5132 { 5133 #pragma omp parallel sections 5134 { 5135 bar(); 5136 } 5137 } 5138 #pragma omp critical 5139 { 5140 #pragma omp task 5141 { 5142 bar(); 5143 } 5144 } 5145 #pragma omp critical 5146 { 5147 #pragma omp taskyield 5148 bar(); 5149 } 5150 #pragma omp critical 5151 { 5152 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}} 5153 bar(); 5154 } 5155 #pragma omp critical 5156 { 5157 #pragma omp taskwait 5158 bar(); 5159 } 5160 #pragma omp critical(Belka) 5161 { 5162 #pragma omp critical(Strelka) 5163 bar(); 5164 } 5165 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}} 5166 { 5167 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}} 5168 { 5169 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}} 5170 { 5171 #pragma omp parallel 5172 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}} 5173 { 5174 bar(); 5175 } 5176 } 5177 } 5178 } 5179 #pragma omp critical 5180 { 5181 #pragma omp flush 5182 bar(); 5183 } 5184 #pragma omp critical 5185 { 5186 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 5187 bar(); 5188 } 5189 #pragma omp critical 5190 { 5191 #pragma omp atomic 5192 ++a; 5193 } 5194 #pragma omp critical 5195 { 5196 #pragma omp target 5197 ++a; 5198 } 5199 #pragma omp critical 5200 { 5201 #pragma omp target parallel 5202 ++a; 5203 } 5204 #pragma omp critical 5205 { 5206 #pragma omp target parallel for 5207 for (int i = 0; i < 10; ++i) 5208 ; 5209 } 5210 #pragma omp critical 5211 { 5212 #pragma omp target enter data map(to: a) 5213 ++a; 5214 } 5215 #pragma omp critical 5216 { 5217 #pragma omp target exit data map(from: a) 5218 ++a; 5219 } 5220 #pragma omp critical 5221 { 5222 #pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 5223 ++a; 5224 } 5225 #pragma omp critical 5226 { 5227 #pragma omp taskloop 5228 for (int i = 0; i < 10; ++i) 5229 ++a; 5230 } 5231 #pragma omp critical 5232 { 5233 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 5234 for (int i = 0; i < 10; ++i) 5235 ; 5236 } 5237 5238 // PARALLEL FOR DIRECTIVE 5239 #pragma omp parallel for 5240 for (int i = 0; i < 10; ++i) { 5241 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 5242 for (int i = 0; i < 10; ++i) 5243 ; 5244 } 5245 #pragma omp parallel for 5246 for (int i = 0; i < 10; ++i) { 5247 #pragma omp simd 5248 for (int i = 0; i < 10; ++i) 5249 ; 5250 } 5251 #pragma omp parallel for 5252 for (int i = 0; i < 10; ++i) { 5253 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 5254 for (int i = 0; i < 10; ++i) 5255 ; 5256 } 5257 5258 #pragma omp parallel for 5259 for (int i = 0; i < 10; ++i) { 5260 #pragma omp parallel 5261 for (int i = 0; i < 10; ++i) 5262 ; 5263 } 5264 #pragma omp parallel for 5265 for (int i = 0; i < 10; ++i) { 5266 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 5267 { 5268 bar(); 5269 } 5270 } 5271 #pragma omp parallel for 5272 for (int i = 0; i < 10; ++i) { 5273 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} 5274 { 5275 bar(); 5276 } 5277 } 5278 #pragma omp parallel for 5279 for (int i = 0; i < 10; ++i) { 5280 #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 5281 { 5282 bar(); 5283 } 5284 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}} 5285 { 5286 bar(); 5287 } 5288 #pragma omp critical 5289 { 5290 bar(); 5291 } 5292 } 5293 #pragma omp parallel for 5294 for (int i = 0; i < 10; ++i) { 5295 #pragma omp parallel 5296 { 5297 #pragma omp single // OK 5298 { 5299 bar(); 5300 } 5301 #pragma omp master // OK 5302 { 5303 bar(); 5304 } 5305 #pragma omp critical // OK 5306 { 5307 bar(); 5308 } 5309 #pragma omp for // OK 5310 for (int i = 0; i < 10; ++i) 5311 ; 5312 #pragma omp for simd // OK 5313 for (int i = 0; i < 10; ++i) 5314 ; 5315 #pragma omp sections // OK 5316 { 5317 bar(); 5318 } 5319 } 5320 } 5321 #pragma omp parallel for 5322 for (int i = 0; i < 10; ++i) { 5323 #pragma omp parallel for 5324 for (int i = 0; i < 10; ++i) 5325 ; 5326 } 5327 #pragma omp parallel for 5328 for (int i = 0; i < 10; ++i) { 5329 #pragma omp parallel for simd 5330 for (int i = 0; i < 10; ++i) 5331 ; 5332 } 5333 #pragma omp parallel for 5334 for (int i = 0; i < 10; ++i) { 5335 #pragma omp parallel sections 5336 { 5337 bar(); 5338 } 5339 } 5340 #pragma omp parallel for 5341 for (int i = 0; i < 10; ++i) { 5342 #pragma omp task 5343 { 5344 bar(); 5345 } 5346 } 5347 #pragma omp parallel for 5348 for (int i = 0; i < 10; ++i) { 5349 #pragma omp taskyield 5350 bar(); 5351 } 5352 #pragma omp parallel for 5353 for (int i = 0; i < 10; ++i) { 5354 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}} 5355 bar(); 5356 } 5357 #pragma omp parallel for 5358 for (int i = 0; i < 10; ++i) { 5359 #pragma omp taskwait 5360 bar(); 5361 } 5362 #pragma omp parallel for 5363 for (int i = 0; i < 10; ++i) { 5364 #pragma omp flush 5365 bar(); 5366 } 5367 #pragma omp parallel for 5368 for (int i = 0; i < 10; ++i) { 5369 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 5370 bar(); 5371 } 5372 #pragma omp parallel for ordered 5373 for (int i = 0; i < 10; ++i) { 5374 #pragma omp ordered // OK 5375 bar(); 5376 } 5377 #pragma omp parallel for 5378 for (int i = 0; i < 10; ++i) { 5379 #pragma omp atomic 5380 ++a; 5381 } 5382 #pragma omp parallel for 5383 for (int i = 0; i < 10; ++i) { 5384 #pragma omp target 5385 ++a; 5386 } 5387 #pragma omp parallel for 5388 for (int i = 0; i < 10; ++i) { 5389 #pragma omp target parallel 5390 ++a; 5391 } 5392 #pragma omp parallel for 5393 for (int i = 0; i < 10; ++i) { 5394 #pragma omp target parallel for 5395 for (int i = 0; i < 10; ++i) 5396 ; 5397 } 5398 #pragma omp parallel for 5399 for (int i = 0; i < 10; ++i) { 5400 #pragma omp target enter data map(to: a) 5401 ++a; 5402 } 5403 #pragma omp parallel for 5404 for (int i = 0; i < 10; ++i) { 5405 #pragma omp target exit data map(from: a) 5406 ++a; 5407 } 5408 #pragma omp parallel for 5409 for (int i = 0; i < 10; ++i) { 5410 #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 5411 ++a; 5412 } 5413 #pragma omp parallel for 5414 for (int i = 0; i < 10; ++i) { 5415 #pragma omp taskloop 5416 for (int i = 0; i < 10; ++i) 5417 ++a; 5418 } 5419 #pragma omp parallel for 5420 for (int i = 0; i < 10; ++i) { 5421 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 5422 for (int j = 0; j < 10; ++j) 5423 ; 5424 } 5425 5426 // PARALLEL FOR SIMD DIRECTIVE 5427 #pragma omp parallel for simd 5428 for (int i = 0; i < 10; ++i) { 5429 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5430 for (int i = 0; i < 10; ++i) 5431 ; 5432 } 5433 #pragma omp parallel for simd 5434 for (int i = 0; i < 10; ++i) { 5435 #pragma omp simd 5436 for (int i = 0; i < 10; ++i) 5437 ; 5438 } 5439 #pragma omp parallel for simd 5440 for (int i = 0; i < 10; ++i) { 5441 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5442 for (int i = 0; i < 10; ++i) 5443 ; 5444 } 5445 #pragma omp parallel for simd 5446 for (int i = 0; i < 10; ++i) { 5447 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5448 for (int i = 0; i < 10; ++i) 5449 ; 5450 } 5451 #pragma omp parallel for simd 5452 for (int i = 0; i < 10; ++i) { 5453 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5454 { 5455 bar(); 5456 } 5457 } 5458 #pragma omp parallel for simd 5459 for (int i = 0; i < 10; ++i) { 5460 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5461 { 5462 bar(); 5463 } 5464 } 5465 #pragma omp parallel for simd 5466 for (int i = 0; i < 10; ++i) { 5467 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5468 { 5469 bar(); 5470 } 5471 } 5472 5473 #pragma omp parallel for simd 5474 for (int i = 0; i < 10; ++i) { 5475 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5476 { 5477 bar(); 5478 } 5479 } 5480 5481 #pragma omp parallel for simd 5482 for (int i = 0; i < 10; ++i) { 5483 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5484 { 5485 bar(); 5486 } 5487 } 5488 5489 #pragma omp parallel for simd 5490 for (int i = 0; i < 10; ++i) { 5491 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5492 { 5493 #pragma omp single 5494 { 5495 bar(); 5496 } 5497 #pragma omp for 5498 for (int i = 0; i < 10; ++i) 5499 ; 5500 #pragma omp for simd 5501 for (int i = 0; i < 10; ++i) 5502 ; 5503 #pragma omp sections 5504 { 5505 bar(); 5506 } 5507 } 5508 } 5509 #pragma omp parallel for simd 5510 for (int i = 0; i < 10; ++i) { 5511 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5512 for (int i = 0; i < 10; ++i) 5513 ; 5514 } 5515 #pragma omp parallel for simd 5516 for (int i = 0; i < 10; ++i) { 5517 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}} 5518 for (int i = 0; i < 10; ++i) 5519 ; 5520 } 5521 #pragma omp parallel for simd 5522 for (int i = 0; i < 10; ++i) { 5523 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5524 { 5525 bar(); 5526 } 5527 } 5528 #pragma omp parallel for simd 5529 for (int i = 0; i < 10; ++i) { 5530 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5531 { 5532 bar(); 5533 } 5534 } 5535 #pragma omp parallel for simd 5536 for (int i = 0; i < 10; ++i) { 5537 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5538 bar(); 5539 } 5540 #pragma omp parallel for simd 5541 for (int i = 0; i < 10; ++i) { 5542 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5543 bar(); 5544 } 5545 #pragma omp parallel for simd 5546 for (int i = 0; i < 10; ++i) { 5547 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5548 bar(); 5549 } 5550 #pragma omp parallel for simd 5551 for (int i = 0; i < 10; ++i) { 5552 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5553 bar(); 5554 } 5555 #pragma omp parallel for simd 5556 for (int i = 0; i < 10; ++i) { 5557 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5558 bar(); 5559 } 5560 #pragma omp parallel for simd 5561 for (int i = 0; i < 10; ++i) { 5562 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5563 bar(); 5564 } 5565 #pragma omp parallel for simd 5566 for (int i = 0; i < 10; ++i) { 5567 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5568 ++a; 5569 } 5570 #pragma omp parallel for simd 5571 for (int i = 0; i < 10; ++i) { 5572 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5573 ++a; 5574 } 5575 #pragma omp parallel for simd 5576 for (int i = 0; i < 10; ++i) { 5577 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5578 ++a; 5579 } 5580 #pragma omp parallel for simd 5581 for (int i = 0; i < 10; ++i) { 5582 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5583 for (int i = 0; i < 10; ++i) 5584 ; 5585 } 5586 #pragma omp parallel for simd 5587 for (int i = 0; i < 10; ++i) { 5588 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5589 ++a; 5590 } 5591 #pragma omp parallel for simd 5592 for (int i = 0; i < 10; ++i) { 5593 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5594 ++a; 5595 } 5596 #pragma omp parallel for simd 5597 for (int i = 0; i < 10; ++i) { 5598 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5599 ++a; 5600 } 5601 #pragma omp parallel for simd 5602 for (int i = 0; i < 10; ++i) { 5603 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5604 for (int i = 0; i < 10; ++i) 5605 ++a; 5606 } 5607 #pragma omp parallel for simd 5608 for (int i = 0; i < 10; ++i) { 5609 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}} 5610 for (int j = 0; j < 10; ++j) 5611 ; 5612 } 5613 5614 // PARALLEL SECTIONS DIRECTIVE 5615 #pragma omp parallel sections 5616 { 5617 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 5618 for (int i = 0; i < 10; ++i) 5619 ; 5620 } 5621 #pragma omp parallel sections 5622 { 5623 #pragma omp simd 5624 for (int i = 0; i < 10; ++i) 5625 ; 5626 } 5627 #pragma omp parallel sections 5628 { 5629 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 5630 for (int i = 0; i < 10; ++i) 5631 ; 5632 } 5633 #pragma omp parallel sections 5634 { 5635 #pragma omp parallel 5636 for (int i = 0; i < 10; ++i) 5637 ; 5638 } 5639 #pragma omp parallel sections 5640 { 5641 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 5642 { 5643 bar(); 5644 } 5645 } 5646 #pragma omp parallel sections 5647 { 5648 #pragma omp section 5649 { 5650 bar(); 5651 } 5652 } 5653 #pragma omp parallel sections 5654 { 5655 #pragma omp section 5656 { 5657 #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 5658 bar(); 5659 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 5660 bar(); 5661 #pragma omp critical 5662 bar(); 5663 } 5664 } 5665 #pragma omp parallel sections 5666 { 5667 #pragma omp parallel 5668 { 5669 #pragma omp single // OK 5670 { 5671 bar(); 5672 } 5673 #pragma omp master // OK 5674 { 5675 bar(); 5676 } 5677 #pragma omp critical // OK 5678 { 5679 bar(); 5680 } 5681 #pragma omp for // OK 5682 for (int i = 0; i < 10; ++i) 5683 ; 5684 #pragma omp for simd // OK 5685 for (int i = 0; i < 10; ++i) 5686 ; 5687 #pragma omp sections // OK 5688 { 5689 bar(); 5690 } 5691 } 5692 } 5693 #pragma omp parallel sections 5694 { 5695 #pragma omp parallel for 5696 for (int i = 0; i < 10; ++i) 5697 ; 5698 } 5699 #pragma omp parallel sections 5700 { 5701 #pragma omp parallel for simd 5702 for (int i = 0; i < 10; ++i) 5703 ; 5704 } 5705 #pragma omp parallel sections 5706 { 5707 #pragma omp parallel sections 5708 { 5709 bar(); 5710 } 5711 } 5712 #pragma omp parallel sections 5713 { 5714 #pragma omp task 5715 { 5716 bar(); 5717 } 5718 } 5719 #pragma omp parallel sections 5720 { 5721 #pragma omp taskyield 5722 } 5723 #pragma omp parallel sections 5724 { 5725 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}} 5726 } 5727 #pragma omp parallel sections 5728 { 5729 #pragma omp taskwait 5730 } 5731 #pragma omp parallel sections 5732 { 5733 #pragma omp flush 5734 } 5735 #pragma omp parallel sections 5736 { 5737 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 5738 bar(); 5739 } 5740 #pragma omp parallel sections 5741 { 5742 #pragma omp atomic 5743 ++a; 5744 } 5745 #pragma omp parallel sections 5746 { 5747 #pragma omp target 5748 ++a; 5749 } 5750 #pragma omp parallel sections 5751 { 5752 #pragma omp target parallel 5753 ++a; 5754 } 5755 #pragma omp parallel sections 5756 { 5757 #pragma omp target parallel for 5758 for (int i = 0; i < 10; ++i) 5759 ; 5760 } 5761 #pragma omp parallel sections 5762 { 5763 #pragma omp target enter data map(to: a) 5764 } 5765 #pragma omp parallel sections 5766 { 5767 #pragma omp target exit data map(from: a) 5768 } 5769 #pragma omp parallel sections 5770 { 5771 #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 5772 ++a; 5773 } 5774 #pragma omp parallel sections 5775 { 5776 #pragma omp taskloop 5777 for (int i = 0; i < 10; ++i) 5778 ++a; 5779 } 5780 #pragma omp parallel sections 5781 { 5782 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 5783 for (int i = 0; i < 10; ++i) 5784 ; 5785 } 5786 5787 // TASK DIRECTIVE 5788 #pragma omp task 5789 #pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 5790 for (int i = 0; i < 10; ++i) 5791 ; 5792 #pragma omp task 5793 #pragma omp simd 5794 for (int i = 0; i < 10; ++i) 5795 ; 5796 #pragma omp task 5797 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 5798 for (int i = 0; i < 10; ++i) 5799 ; 5800 #pragma omp task 5801 #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 5802 { 5803 bar(); 5804 } 5805 #pragma omp task 5806 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}} 5807 { 5808 bar(); 5809 } 5810 #pragma omp task 5811 #pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 5812 bar(); 5813 #pragma omp task 5814 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}} 5815 bar(); 5816 #pragma omp task 5817 #pragma omp critical 5818 bar(); 5819 #pragma omp task 5820 #pragma omp parallel for 5821 for (int i = 0; i < 10; ++i) 5822 ; 5823 #pragma omp task 5824 #pragma omp parallel for simd 5825 for (int i = 0; i < 10; ++i) 5826 ; 5827 #pragma omp task 5828 #pragma omp parallel sections 5829 { 5830 bar(); 5831 } 5832 #pragma omp task 5833 #pragma omp task 5834 { 5835 bar(); 5836 } 5837 #pragma omp task 5838 { 5839 #pragma omp taskyield 5840 bar(); 5841 } 5842 #pragma omp task 5843 { 5844 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}} 5845 bar(); 5846 } 5847 #pragma omp task 5848 { 5849 #pragma omp taskwait 5850 bar(); 5851 } 5852 #pragma omp task 5853 { 5854 #pragma omp flush 5855 bar(); 5856 } 5857 #pragma omp task 5858 { 5859 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 5860 bar(); 5861 } 5862 #pragma omp task 5863 { 5864 #pragma omp atomic 5865 ++a; 5866 } 5867 #pragma omp task 5868 { 5869 #pragma omp target 5870 ++a; 5871 } 5872 #pragma omp task 5873 { 5874 #pragma omp target parallel 5875 ++a; 5876 } 5877 #pragma omp task 5878 #pragma omp target parallel for 5879 for (int i = 0; i < 10; ++i) 5880 ; 5881 #pragma omp task 5882 { 5883 #pragma omp target enter data map(to: a) 5884 ++a; 5885 } 5886 #pragma omp task 5887 { 5888 #pragma omp target exit data map(from: a) 5889 ++a; 5890 } 5891 #pragma omp task 5892 { 5893 #pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 5894 ++a; 5895 } 5896 #pragma omp task 5897 { 5898 #pragma omp taskloop 5899 for (int i = 0; i < 10; ++i) 5900 ++a; 5901 } 5902 #pragma omp task 5903 { 5904 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 5905 for (int i = 0; i < 10; ++i) 5906 ; 5907 } 5908 5909 // ATOMIC DIRECTIVE 5910 #pragma omp atomic 5911 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5912 // expected-note@+1 {{expected an expression statement}} 5913 { 5914 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5915 for (int i = 0; i < 10; ++i) 5916 ; 5917 } 5918 #pragma omp atomic 5919 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5920 // expected-note@+1 {{expected an expression statement}} 5921 { 5922 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5923 for (int i = 0; i < 10; ++i) 5924 ; 5925 } 5926 #pragma omp atomic 5927 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5928 // expected-note@+1 {{expected an expression statement}} 5929 { 5930 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5931 for (int i = 0; i < 10; ++i) 5932 ; 5933 } 5934 #pragma omp atomic 5935 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5936 // expected-note@+1 {{expected an expression statement}} 5937 { 5938 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5939 for (int i = 0; i < 10; ++i) 5940 ; 5941 } 5942 #pragma omp atomic 5943 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5944 // expected-note@+1 {{expected an expression statement}} 5945 { 5946 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5947 { 5948 bar(); 5949 } 5950 } 5951 #pragma omp atomic 5952 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5953 // expected-note@+1 {{expected an expression statement}} 5954 { 5955 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5956 { 5957 bar(); 5958 } 5959 } 5960 #pragma omp atomic 5961 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5962 // expected-note@+1 {{expected an expression statement}} 5963 { 5964 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5965 { 5966 bar(); 5967 } 5968 } 5969 #pragma omp atomic 5970 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5971 // expected-note@+1 {{expected an expression statement}} 5972 { 5973 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5974 { 5975 bar(); 5976 } 5977 } 5978 #pragma omp atomic 5979 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5980 // expected-note@+1 {{expected an expression statement}} 5981 { 5982 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5983 { 5984 bar(); 5985 } 5986 } 5987 #pragma omp atomic 5988 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5989 // expected-note@+1 {{expected an expression statement}} 5990 { 5991 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 5992 for (int i = 0; i < 10; ++i) 5993 ; 5994 } 5995 #pragma omp atomic 5996 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 5997 // expected-note@+1 {{expected an expression statement}} 5998 { 5999 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6000 for (int i = 0; i < 10; ++i) 6001 ; 6002 } 6003 #pragma omp atomic 6004 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6005 // expected-note@+1 {{expected an expression statement}} 6006 { 6007 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6008 { 6009 bar(); 6010 } 6011 } 6012 #pragma omp atomic 6013 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6014 // expected-note@+1 {{expected an expression statement}} 6015 { 6016 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6017 { 6018 bar(); 6019 } 6020 } 6021 #pragma omp atomic 6022 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6023 // expected-note@+1 {{expected an expression statement}} 6024 { 6025 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6026 bar(); 6027 } 6028 #pragma omp atomic 6029 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6030 // expected-note@+1 {{expected an expression statement}} 6031 { 6032 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6033 bar(); 6034 } 6035 #pragma omp atomic 6036 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6037 // expected-note@+1 {{expected an expression statement}} 6038 { 6039 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6040 bar(); 6041 } 6042 #pragma omp atomic 6043 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6044 // expected-note@+1 {{expected an expression statement}} 6045 { 6046 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6047 bar(); 6048 } 6049 #pragma omp atomic 6050 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6051 // expected-note@+1 {{expected an expression statement}} 6052 { 6053 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6054 bar(); 6055 } 6056 #pragma omp atomic 6057 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6058 // expected-note@+1 {{expected an expression statement}} 6059 { 6060 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6061 ++a; 6062 } 6063 #pragma omp atomic 6064 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6065 // expected-note@+1 {{expected an expression statement}} 6066 { 6067 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6068 ++a; 6069 } 6070 #pragma omp atomic 6071 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6072 // expected-note@+1 {{expected an expression statement}} 6073 { 6074 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6075 ++a; 6076 } 6077 #pragma omp atomic 6078 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6079 // expected-note@+1 {{expected an expression statement}} 6080 { 6081 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6082 for (int i = 0; i < 10; ++i) 6083 ; 6084 } 6085 #pragma omp atomic 6086 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6087 // expected-note@+1 {{expected an expression statement}} 6088 { 6089 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6090 ++a; 6091 } 6092 #pragma omp atomic 6093 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6094 // expected-note@+1 {{expected an expression statement}} 6095 { 6096 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6097 ++a; 6098 } 6099 #pragma omp atomic 6100 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6101 // expected-note@+1 {{expected an expression statement}} 6102 { 6103 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6104 ++a; 6105 } 6106 #pragma omp atomic 6107 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6108 // expected-note@+1 {{expected an expression statement}} 6109 { 6110 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6111 for (int i = 0; i < 10; ++i) 6112 ++a; 6113 } 6114 #pragma omp atomic 6115 // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}} 6116 // expected-note@+1 {{expected an expression statement}} 6117 { 6118 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 6119 for (int i = 0; i < 10; ++i) 6120 ; 6121 } 6122 6123 // TARGET DIRECTIVE 6124 #pragma omp target 6125 #pragma omp parallel 6126 bar(); 6127 #pragma omp target 6128 #pragma omp for 6129 for (int i = 0; i < 10; ++i) 6130 ; 6131 #pragma omp target 6132 #pragma omp simd 6133 for (int i = 0; i < 10; ++i) 6134 ; 6135 #pragma omp target 6136 #pragma omp for simd 6137 for (int i = 0; i < 10; ++i) 6138 ; 6139 #pragma omp target 6140 #pragma omp sections 6141 { 6142 bar(); 6143 } 6144 #pragma omp target 6145 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}} 6146 { 6147 bar(); 6148 } 6149 #pragma omp target 6150 #pragma omp single 6151 bar(); 6152 6153 #pragma omp target 6154 #pragma omp master 6155 { 6156 bar(); 6157 } 6158 #pragma omp target 6159 #pragma omp critical 6160 { 6161 bar(); 6162 } 6163 #pragma omp target 6164 #pragma omp parallel for 6165 for (int i = 0; i < 10; ++i) 6166 ; 6167 #pragma omp target 6168 #pragma omp parallel for simd 6169 for (int i = 0; i < 10; ++i) 6170 ; 6171 #pragma omp target 6172 #pragma omp parallel sections 6173 { 6174 bar(); 6175 } 6176 #pragma omp target 6177 #pragma omp task 6178 { 6179 bar(); 6180 } 6181 #pragma omp target 6182 { 6183 #pragma omp taskyield 6184 bar(); 6185 } 6186 #pragma omp target 6187 { 6188 #pragma omp barrier 6189 bar(); 6190 } 6191 #pragma omp target 6192 { 6193 #pragma omp taskwait 6194 bar(); 6195 } 6196 #pragma omp target 6197 { 6198 #pragma omp flush 6199 bar(); 6200 } 6201 #pragma omp target 6202 { 6203 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 6204 bar(); 6205 } 6206 #pragma omp target 6207 { 6208 #pragma omp atomic 6209 ++a; 6210 } 6211 #pragma omp target 6212 { 6213 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}} 6214 ++a; 6215 } 6216 #pragma omp target 6217 { 6218 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} 6219 ++a; 6220 } 6221 #pragma omp target 6222 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} 6223 for (int i = 0; i < 10; ++i) 6224 ; 6225 #pragma omp target 6226 { 6227 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}} 6228 } 6229 #pragma omp target 6230 { 6231 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}} 6232 } 6233 #pragma omp target 6234 { 6235 #pragma omp teams 6236 ++a; 6237 } 6238 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}} 6239 { 6240 ++a; // expected-note {{statement outside teams construct here}} 6241 #pragma omp teams // expected-note {{nested teams construct here}} 6242 ++a; 6243 } 6244 #pragma omp target 6245 { 6246 #pragma omp taskloop 6247 for (int i = 0; i < 10; ++i) 6248 ++a; 6249 } 6250 #pragma omp target 6251 { 6252 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 6253 for (int i = 0; i < 10; ++i) 6254 ; 6255 } 6256 6257 // TARGET PARALLEL DIRECTIVE 6258 #pragma omp target parallel 6259 #pragma omp parallel 6260 bar(); 6261 #pragma omp target parallel 6262 #pragma omp for 6263 for (int i = 0; i < 10; ++i) 6264 ; 6265 #pragma omp target parallel 6266 #pragma omp simd 6267 for (int i = 0; i < 10; ++i) 6268 ; 6269 #pragma omp target parallel 6270 #pragma omp for simd 6271 for (int i = 0; i < 10; ++i) 6272 ; 6273 #pragma omp target parallel 6274 #pragma omp sections 6275 { 6276 bar(); 6277 } 6278 #pragma omp target parallel 6279 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}} 6280 { 6281 bar(); 6282 } 6283 #pragma omp target parallel 6284 #pragma omp single 6285 bar(); 6286 6287 #pragma omp target parallel 6288 #pragma omp master 6289 { 6290 bar(); 6291 } 6292 #pragma omp target parallel 6293 #pragma omp critical 6294 { 6295 bar(); 6296 } 6297 #pragma omp target parallel 6298 #pragma omp parallel for 6299 for (int i = 0; i < 10; ++i) 6300 ; 6301 #pragma omp target parallel 6302 #pragma omp parallel for simd 6303 for (int i = 0; i < 10; ++i) 6304 ; 6305 #pragma omp target parallel 6306 #pragma omp parallel sections 6307 { 6308 bar(); 6309 } 6310 #pragma omp target parallel 6311 #pragma omp task 6312 { 6313 bar(); 6314 } 6315 #pragma omp target parallel 6316 { 6317 #pragma omp taskyield 6318 bar(); 6319 } 6320 #pragma omp target parallel 6321 { 6322 #pragma omp barrier 6323 bar(); 6324 } 6325 #pragma omp target parallel 6326 { 6327 #pragma omp taskwait 6328 bar(); 6329 } 6330 #pragma omp target parallel 6331 { 6332 #pragma omp flush 6333 bar(); 6334 } 6335 #pragma omp target parallel 6336 { 6337 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 6338 bar(); 6339 } 6340 #pragma omp target parallel 6341 { 6342 #pragma omp atomic 6343 ++a; 6344 } 6345 #pragma omp target parallel 6346 { 6347 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}} 6348 ++a; 6349 } 6350 #pragma omp target parallel 6351 { 6352 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}} 6353 ++a; 6354 } 6355 #pragma omp target parallel 6356 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}} 6357 for (int i = 0; i < 10; ++i) 6358 ; 6359 #pragma omp target parallel 6360 { 6361 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 6362 ++a; 6363 } 6364 #pragma omp target parallel 6365 { 6366 ++a; 6367 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 6368 ++a; 6369 } 6370 #pragma omp target parallel 6371 { 6372 #pragma omp taskloop 6373 for (int i = 0; i < 10; ++i) 6374 ++a; 6375 } 6376 #pragma omp target parallel 6377 { 6378 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 6379 for (int i = 0; i < 10; ++i) 6380 ; 6381 } 6382 #pragma omp target parallel 6383 { 6384 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}} 6385 } 6386 #pragma omp target parallel 6387 { 6388 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}} 6389 } 6390 6391 // TARGET PARALLEL FOR DIRECTIVE 6392 #pragma omp target parallel for 6393 for (int i = 0; i < 10; ++i) { 6394 #pragma omp for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 6395 for (int i = 0; i < 10; ++i) 6396 ; 6397 } 6398 #pragma omp target parallel for 6399 for (int i = 0; i < 10; ++i) { 6400 #pragma omp simd 6401 for (int i = 0; i < 10; ++i) 6402 ; 6403 } 6404 #pragma omp target parallel for 6405 for (int i = 0; i < 10; ++i) { 6406 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 6407 for (int i = 0; i < 10; ++i) 6408 ; 6409 } 6410 #pragma omp target parallel for 6411 for (int i = 0; i < 10; ++i) { 6412 #pragma omp parallel 6413 for (int i = 0; i < 10; ++i) 6414 ; 6415 } 6416 #pragma omp target parallel for 6417 for (int i = 0; i < 10; ++i) { 6418 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 6419 { 6420 bar(); 6421 } 6422 } 6423 #pragma omp target parallel for 6424 for (int i = 0; i < 10; ++i) { 6425 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}} 6426 { 6427 bar(); 6428 } 6429 } 6430 #pragma omp target parallel for 6431 for (int i = 0; i < 10; ++i) { 6432 #pragma omp single // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 6433 { 6434 bar(); 6435 } 6436 } 6437 6438 #pragma omp target parallel for 6439 for (int i = 0; i < 10; ++i) { 6440 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}} 6441 { 6442 bar(); 6443 } 6444 } 6445 6446 #pragma omp target parallel for 6447 for (int i = 0; i < 10; ++i) { 6448 #pragma omp critical 6449 { 6450 bar(); 6451 } 6452 } 6453 6454 #pragma omp target parallel for 6455 for (int i = 0; i < 10; ++i) { 6456 #pragma omp parallel 6457 { 6458 #pragma omp single // OK 6459 { 6460 bar(); 6461 } 6462 #pragma omp for // OK 6463 for (int i = 0; i < 10; ++i) 6464 ; 6465 #pragma omp for simd // OK 6466 for (int i = 0; i < 10; ++i) 6467 ; 6468 #pragma omp sections // OK 6469 { 6470 bar(); 6471 } 6472 } 6473 } 6474 #pragma omp target parallel for 6475 for (int i = 0; i < 10; ++i) { 6476 #pragma omp parallel for 6477 for (int i = 0; i < 10; ++i) 6478 ; 6479 } 6480 #pragma omp target parallel for 6481 for (int i = 0; i < 10; ++i) { 6482 #pragma omp parallel for simd 6483 for (int i = 0; i < 10; ++i) 6484 ; 6485 } 6486 #pragma omp target parallel for 6487 for (int i = 0; i < 10; ++i) { 6488 #pragma omp parallel sections 6489 { 6490 bar(); 6491 } 6492 } 6493 #pragma omp target parallel for 6494 for (int i = 0; i < 10; ++i) { 6495 #pragma omp task 6496 { 6497 bar(); 6498 } 6499 } 6500 #pragma omp target parallel for 6501 for (int i = 0; i < 10; ++i) { 6502 #pragma omp taskyield 6503 bar(); 6504 } 6505 #pragma omp target parallel for 6506 for (int i = 0; i < 10; ++i) { 6507 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}} 6508 bar(); 6509 } 6510 #pragma omp target parallel for 6511 for (int i = 0; i < 10; ++i) { 6512 #pragma omp taskwait 6513 bar(); 6514 } 6515 #pragma omp target parallel for 6516 for (int i = 0; i < 10; ++i) { 6517 #pragma omp flush 6518 bar(); 6519 } 6520 #pragma omp target parallel for 6521 for (int i = 0; i < 10; ++i) { 6522 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 6523 bar(); 6524 } 6525 #pragma omp target parallel for ordered 6526 for (int i = 0; i < 10; ++i) { 6527 #pragma omp ordered // OK 6528 bar(); 6529 } 6530 #pragma omp target parallel for 6531 for (int i = 0; i < 10; ++i) { 6532 #pragma omp atomic 6533 ++a; 6534 } 6535 #pragma omp target parallel for 6536 for (int i = 0; i < 10; ++i) { 6537 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}} 6538 ++a; 6539 } 6540 #pragma omp target parallel for 6541 for (int i = 0; i < 10; ++i) { 6542 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}} 6543 ++a; 6544 } 6545 #pragma omp target parallel for 6546 for (int i = 0; i < 10; ++i) { 6547 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}} 6548 for (int i = 0; i < 10; ++i) 6549 ; 6550 } 6551 #pragma omp target parallel for 6552 for (int i = 0; i < 10; ++i) { 6553 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}} 6554 ++a; 6555 } 6556 #pragma omp target parallel for 6557 for (int i = 0; i < 10; ++i) { 6558 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}} 6559 ++a; 6560 } 6561 #pragma omp target parallel for 6562 for (int i = 0; i < 10; ++i) { 6563 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 6564 ++a; 6565 } 6566 #pragma omp target parallel for 6567 for (int i = 0; i < 10; ++i) { 6568 #pragma omp taskloop 6569 for (int i = 0; i < 10; ++i) 6570 ++a; 6571 } 6572 #pragma omp target parallel for 6573 for (int i = 0; i < 10; ++i) { 6574 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 6575 for (int j = 0; j < 10; ++j) 6576 ; 6577 } 6578 6579 // TEAMS DIRECTIVE 6580 #pragma omp target 6581 #pragma omp teams 6582 #pragma omp parallel 6583 bar(); 6584 #pragma omp target 6585 #pragma omp teams 6586 #pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 6587 for (int i = 0; i < 10; ++i) 6588 ; 6589 #pragma omp target 6590 #pragma omp teams 6591 #pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}} 6592 for (int i = 0; i < 10; ++i) 6593 ; 6594 #pragma omp target 6595 #pragma omp teams 6596 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 6597 for (int i = 0; i < 10; ++i) 6598 ; 6599 #pragma omp target 6600 #pragma omp teams 6601 #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 6602 { 6603 bar(); 6604 } 6605 #pragma omp target 6606 #pragma omp teams 6607 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}} 6608 { 6609 bar(); 6610 } 6611 #pragma omp target 6612 #pragma omp teams 6613 #pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 6614 bar(); 6615 6616 #pragma omp target 6617 #pragma omp teams 6618 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}} 6619 { 6620 bar(); 6621 } 6622 #pragma omp target 6623 #pragma omp teams 6624 #pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}} 6625 { 6626 bar(); 6627 } 6628 #pragma omp target 6629 #pragma omp teams 6630 #pragma omp parallel for 6631 for (int i = 0; i < 10; ++i) 6632 ; 6633 #pragma omp target 6634 #pragma omp teams 6635 #pragma omp parallel for simd 6636 for (int i = 0; i < 10; ++i) 6637 ; 6638 #pragma omp target 6639 #pragma omp teams 6640 #pragma omp parallel sections 6641 { 6642 bar(); 6643 } 6644 #pragma omp target 6645 #pragma omp teams 6646 #pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}} 6647 { 6648 bar(); 6649 } 6650 #pragma omp target 6651 #pragma omp teams 6652 { 6653 #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}} 6654 bar(); 6655 } 6656 #pragma omp target 6657 #pragma omp teams 6658 { 6659 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}} 6660 bar(); 6661 } 6662 #pragma omp target 6663 #pragma omp teams 6664 { 6665 #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}} 6666 bar(); 6667 } 6668 #pragma omp target 6669 #pragma omp teams 6670 { 6671 #pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}} 6672 bar(); 6673 } 6674 #pragma omp target 6675 #pragma omp teams 6676 { 6677 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 6678 bar(); 6679 } 6680 #pragma omp target 6681 #pragma omp teams 6682 { 6683 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}} 6684 ++a; 6685 } 6686 #pragma omp target 6687 #pragma omp teams 6688 { 6689 #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}} 6690 ++a; 6691 } 6692 #pragma omp target 6693 #pragma omp teams 6694 { 6695 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} 6696 ++a; 6697 } 6698 #pragma omp target 6699 #pragma omp teams 6700 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} 6701 for (int i = 0; i < 10; ++i) 6702 ; 6703 #pragma omp target 6704 #pragma omp teams 6705 { 6706 #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}} 6707 } 6708 #pragma omp target 6709 #pragma omp teams 6710 { 6711 #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}} 6712 } 6713 #pragma omp target 6714 #pragma omp teams 6715 { 6716 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 6717 ++a; 6718 } 6719 #pragma omp target 6720 #pragma omp teams 6721 { 6722 #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}} 6723 for (int i = 0; i < 10; ++i) 6724 ++a; 6725 } 6726 #pragma omp target 6727 #pragma omp teams 6728 #pragma omp distribute 6729 for (int i = 0; i < 10; ++i) 6730 ; 6731 #pragma omp target 6732 #pragma omp teams 6733 #pragma omp distribute 6734 for (int i = 0; i < 10; ++i) 6735 ; 6736 #pragma omp distribute 6737 for (int j = 0; j < 10; ++j) 6738 ; 6739 6740 // TASKLOOP DIRECTIVE 6741 #pragma omp taskloop 6742 for (int i = 0; i < 10; ++i) { 6743 #pragma omp for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}} 6744 for (int i = 0; i < 10; ++i) 6745 ; 6746 } 6747 #pragma omp taskloop 6748 for (int i = 0; i < 10; ++i) { 6749 #pragma omp simd 6750 for (int i = 0; i < 10; ++i) 6751 ; 6752 } 6753 #pragma omp taskloop 6754 for (int i = 0; i < 10; ++i) { 6755 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}} 6756 for (int i = 0; i < 10; ++i) 6757 ; 6758 } 6759 #pragma omp taskloop 6760 for (int i = 0; i < 10; ++i) { 6761 #pragma omp parallel 6762 for (int i = 0; i < 10; ++i) 6763 ; 6764 } 6765 #pragma omp taskloop 6766 for (int i = 0; i < 10; ++i) { 6767 #pragma omp sections // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}} 6768 { 6769 bar(); 6770 } 6771 } 6772 #pragma omp taskloop 6773 for (int i = 0; i < 10; ++i) { 6774 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}} 6775 { 6776 bar(); 6777 } 6778 } 6779 #pragma omp taskloop 6780 for (int i = 0; i < 10; ++i) { 6781 #pragma omp single // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}} 6782 { 6783 bar(); 6784 } 6785 } 6786 6787 #pragma omp taskloop 6788 for (int i = 0; i < 10; ++i) { 6789 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}} 6790 { 6791 bar(); 6792 } 6793 } 6794 #pragma omp taskloop 6795 for (int i = 0; i < 10; ++i) { 6796 #pragma omp critical 6797 { 6798 bar(); 6799 } 6800 } 6801 #pragma omp taskloop 6802 for (int i = 0; i < 10; ++i) { 6803 #pragma omp parallel 6804 { 6805 #pragma omp single // OK 6806 { 6807 bar(); 6808 } 6809 #pragma omp for // OK 6810 for (int i = 0; i < 10; ++i) 6811 ; 6812 #pragma omp sections // OK 6813 { 6814 bar(); 6815 } 6816 } 6817 } 6818 #pragma omp taskloop 6819 for (int i = 0; i < 10; ++i) { 6820 #pragma omp parallel for 6821 for (int i = 0; i < 10; ++i) 6822 ; 6823 } 6824 #pragma omp taskloop 6825 for (int i = 0; i < 10; ++i) { 6826 #pragma omp parallel for simd 6827 for (int i = 0; i < 10; ++i) 6828 ; 6829 } 6830 #pragma omp taskloop 6831 for (int i = 0; i < 10; ++i) { 6832 #pragma omp parallel sections 6833 { 6834 bar(); 6835 } 6836 } 6837 #pragma omp taskloop 6838 for (int i = 0; i < 10; ++i) { 6839 #pragma omp task 6840 { 6841 bar(); 6842 } 6843 } 6844 #pragma omp taskloop 6845 for (int i = 0; i < 10; ++i) { 6846 #pragma omp taskyield 6847 bar(); 6848 } 6849 #pragma omp taskloop 6850 for (int i = 0; i < 10; ++i) { 6851 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}} 6852 bar(); 6853 } 6854 #pragma omp taskloop 6855 for (int i = 0; i < 10; ++i) { 6856 #pragma omp taskwait 6857 bar(); 6858 } 6859 #pragma omp taskloop 6860 for (int i = 0; i < 10; ++i) { 6861 #pragma omp flush 6862 bar(); 6863 } 6864 #pragma omp taskloop 6865 for (int i = 0; i < 10; ++i) { 6866 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 6867 bar(); 6868 } 6869 #pragma omp taskloop 6870 for (int i = 0; i < 10; ++i) { 6871 #pragma omp atomic 6872 ++a; 6873 } 6874 #pragma omp taskloop 6875 for (int i = 0; i < 10; ++i) { 6876 #pragma omp target 6877 ++a; 6878 } 6879 #pragma omp taskloop 6880 for (int i = 0; i < 10; ++i) { 6881 #pragma omp target parallel 6882 ++a; 6883 } 6884 #pragma omp taskloop 6885 for (int i = 0; i < 10; ++i) { 6886 #pragma omp target parallel for 6887 for (int i = 0; i < 10; ++i) 6888 ; 6889 } 6890 #pragma omp taskloop 6891 for (int i = 0; i < 10; ++i) { 6892 #pragma omp target enter data map(to: a) 6893 ++a; 6894 } 6895 #pragma omp taskloop 6896 for (int i = 0; i < 10; ++i) { 6897 #pragma omp target exit data map(from: a) 6898 ++a; 6899 } 6900 #pragma omp taskloop 6901 for (int i = 0; i < 10; ++i) { 6902 #pragma omp teams // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 6903 ++a; 6904 } 6905 #pragma omp taskloop 6906 for (int i = 0; i < 10; ++i) { 6907 #pragma omp taskloop 6908 for (int i = 0; i < 10; ++i) 6909 ++a; 6910 } 6911 6912 // DISTRIBUTE DIRECTIVE 6913 #pragma omp target 6914 #pragma omp teams 6915 #pragma omp distribute 6916 for (int i = 0; i < 10; ++i) { 6917 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}} 6918 for (int i = 0; i < 10; ++i) 6919 ; 6920 } 6921 #pragma omp target 6922 #pragma omp teams 6923 #pragma omp distribute 6924 for (int i = 0; i < 10; ++i) { 6925 #pragma omp for 6926 for (int i = 0; i < 10; ++i) 6927 ; 6928 } 6929 #pragma omp target 6930 #pragma omp teams 6931 #pragma omp distribute 6932 for (int i = 0; i < 10; ++i) { 6933 #pragma omp simd 6934 for (int i = 0; i < 10; ++i) 6935 ; 6936 } 6937 #pragma omp target 6938 #pragma omp teams 6939 #pragma omp distribute 6940 for (int i = 0; i < 10; ++i) { 6941 #pragma omp for simd 6942 for (int i = 0; i < 10; ++i) 6943 ; 6944 } 6945 #pragma omp target 6946 #pragma omp teams 6947 #pragma omp distribute 6948 for (int i = 0; i < 10; ++i) { 6949 #pragma omp parallel 6950 for (int i = 0; i < 10; ++i) 6951 ; 6952 } 6953 #pragma omp target 6954 #pragma omp teams 6955 #pragma omp distribute 6956 for (int i = 0; i < 10; ++i) { 6957 #pragma omp sections 6958 { 6959 bar(); 6960 } 6961 } 6962 #pragma omp target 6963 #pragma omp teams 6964 #pragma omp distribute 6965 for (int i = 0; i < 10; ++i) { 6966 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}} 6967 { 6968 bar(); 6969 } 6970 } 6971 #pragma omp target 6972 #pragma omp teams 6973 #pragma omp distribute 6974 for (int i = 0; i < 10; ++i) { 6975 #pragma omp single 6976 { 6977 bar(); 6978 } 6979 } 6980 #pragma omp target 6981 #pragma omp teams 6982 #pragma omp distribute 6983 for (int i = 0; i < 10; ++i) { 6984 #pragma omp master 6985 { 6986 bar(); 6987 } 6988 } 6989 #pragma omp target 6990 #pragma omp teams 6991 #pragma omp distribute 6992 for (int i = 0; i < 10; ++i) { 6993 #pragma omp critical 6994 { 6995 bar(); 6996 } 6997 } 6998 #pragma omp target 6999 #pragma omp teams 7000 #pragma omp distribute 7001 for (int i = 0; i < 10; ++i) { 7002 #pragma omp parallel 7003 { 7004 #pragma omp single 7005 { 7006 bar(); 7007 } 7008 } 7009 } 7010 #pragma omp target 7011 #pragma omp teams 7012 #pragma omp distribute 7013 for (int i = 0; i < 10; ++i) { 7014 #pragma omp parallel for 7015 for (int i = 0; i < 10; ++i) 7016 ; 7017 } 7018 #pragma omp target 7019 #pragma omp teams 7020 #pragma omp distribute 7021 for (int i = 0; i < 10; ++i) { 7022 #pragma omp parallel for simd 7023 for (int i = 0; i < 10; ++i) 7024 ; 7025 } 7026 #pragma omp target 7027 #pragma omp teams 7028 #pragma omp distribute 7029 for (int i = 0; i < 10; ++i) { 7030 #pragma omp parallel sections 7031 { 7032 bar(); 7033 } 7034 } 7035 #pragma omp target 7036 #pragma omp teams 7037 #pragma omp distribute 7038 for (int i = 0; i < 10; ++i) { 7039 #pragma omp task 7040 { 7041 bar(); 7042 } 7043 } 7044 #pragma omp target 7045 #pragma omp teams 7046 #pragma omp distribute 7047 for (int i = 0; i < 10; ++i) { 7048 #pragma omp taskyield 7049 bar(); 7050 } 7051 #pragma omp target 7052 #pragma omp teams 7053 #pragma omp distribute 7054 for (int i = 0; i < 10; ++i) { 7055 #pragma omp barrier 7056 bar(); 7057 } 7058 #pragma omp target 7059 #pragma omp teams 7060 #pragma omp distribute 7061 for (int i = 0; i < 10; ++i) { 7062 #pragma omp taskwait 7063 bar(); 7064 } 7065 #pragma omp target 7066 #pragma omp teams 7067 #pragma omp distribute 7068 for (int i = 0; i < 10; ++i) { 7069 #pragma omp flush 7070 bar(); 7071 } 7072 #pragma omp target 7073 #pragma omp teams 7074 #pragma omp distribute 7075 for (int i = 0; i < 10; ++i) { 7076 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}} 7077 bar(); 7078 } 7079 #pragma omp target 7080 #pragma omp teams 7081 #pragma omp distribute 7082 for (int i = 0; i < 10; ++i) { 7083 #pragma omp atomic 7084 ++a; 7085 } 7086 #pragma omp target 7087 #pragma omp teams 7088 #pragma omp distribute 7089 for (int i = 0; i < 10; ++i) { 7090 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}} 7091 ++a; 7092 } 7093 #pragma omp target 7094 #pragma omp teams 7095 #pragma omp distribute 7096 for (int i = 0; i < 10; ++i) { 7097 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}} 7098 ++a; 7099 } 7100 #pragma omp target 7101 #pragma omp teams 7102 #pragma omp distribute 7103 for (int i = 0; i < 10; ++i) { 7104 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}} 7105 for (int i = 0; i < 10; ++i) 7106 ; 7107 } 7108 #pragma omp target 7109 #pragma omp teams 7110 #pragma omp distribute 7111 for (int i = 0; i < 10; ++i) { 7112 #pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 7113 ++a; 7114 } 7115 return foo<int>(); 7116 #pragma omp target 7117 #pragma omp teams 7118 #pragma omp distribute 7119 for (int i = 0; i < 10; ++i) { 7120 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}} 7121 ++a; 7122 } 7123 #pragma omp target 7124 #pragma omp teams 7125 #pragma omp distribute 7126 for (int i = 0; i < 10; ++i) { 7127 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}} 7128 ++a; 7129 } 7130 } 7131