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 teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}} 101 ++a; 102 } 103 #pragma omp parallel 104 { 105 #pragma omp taskloop 106 for (int i = 0; i < 10; ++i) 107 ++a; 108 } 109 110 // SIMD DIRECTIVE 111 #pragma omp simd 112 for (int i = 0; i < 10; ++i) { 113 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 114 for (int i = 0; i < 10; ++i) 115 ; 116 } 117 #pragma omp simd 118 for (int i = 0; i < 10; ++i) { 119 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 120 for (int i = 0; i < 10; ++i) 121 ; 122 } 123 #pragma omp simd 124 for (int i = 0; i < 10; ++i) { 125 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 126 for (int i = 0; i < 10; ++i) 127 ; 128 } 129 #pragma omp simd 130 for (int i = 0; i < 10; ++i) { 131 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 132 for (int i = 0; i < 10; ++i) 133 ; 134 } 135 #pragma omp simd 136 for (int i = 0; i < 10; ++i) { 137 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 138 { 139 bar(); 140 } 141 } 142 #pragma omp simd 143 for (int i = 0; i < 10; ++i) { 144 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 145 { 146 bar(); 147 } 148 } 149 #pragma omp simd 150 for (int i = 0; i < 10; ++i) { 151 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 152 { 153 bar(); 154 } 155 } 156 #pragma omp simd 157 for (int i = 0; i < 10; ++i) { 158 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 159 { 160 bar(); 161 } 162 } 163 #pragma omp simd 164 for (int i = 0; i < 10; ++i) { 165 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 166 { 167 bar(); 168 } 169 } 170 #pragma omp simd 171 for (int i = 0; i < 10; ++i) { 172 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 173 for (int i = 0; i < 10; ++i) 174 ; 175 } 176 #pragma omp simd 177 for (int i = 0; i < 10; ++i) { 178 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 179 for (int i = 0; i < 10; ++i) 180 ; 181 } 182 #pragma omp simd 183 for (int i = 0; i < 10; ++i) { 184 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 185 { 186 bar(); 187 } 188 } 189 #pragma omp simd 190 for (int i = 0; i < 10; ++i) { 191 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 192 { 193 bar(); 194 } 195 } 196 #pragma omp simd 197 for (int i = 0; i < 10; ++i) { 198 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 199 bar(); 200 } 201 #pragma omp simd 202 for (int i = 0; i < 10; ++i) { 203 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 204 bar(); 205 } 206 #pragma omp simd 207 for (int i = 0; i < 10; ++i) { 208 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 209 bar(); 210 } 211 #pragma omp simd 212 for (int i = 0; i < 10; ++i) { 213 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 214 bar(); 215 } 216 #pragma omp simd 217 for (int i = 0; i < 10; ++i) { 218 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 219 bar(); 220 } 221 #pragma omp simd 222 for (int i = 0; i < 10; ++i) { 223 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 224 ++a; 225 } 226 #pragma omp simd 227 for (int i = 0; i < 10; ++i) { 228 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 229 ++a; 230 } 231 #pragma omp simd 232 for (int i = 0; i < 10; ++i) { 233 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 234 ++a; 235 } 236 #pragma omp simd 237 for (int i = 0; i < 10; ++i) { 238 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 239 for (int i = 0; i < 10; ++i) 240 ++a; 241 } 242 243 // FOR DIRECTIVE 244 #pragma omp for 245 for (int i = 0; i < 10; ++i) { 246 #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?}} 247 for (int i = 0; i < 10; ++i) 248 ; 249 } 250 #pragma omp for 251 for (int i = 0; i < 10; ++i) { 252 #pragma omp simd 253 for (int i = 0; i < 10; ++i) 254 ; 255 } 256 #pragma omp for 257 for (int i = 0; i < 10; ++i) { 258 #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?}} 259 for (int i = 0; i < 10; ++i) 260 ; 261 } 262 #pragma omp for 263 for (int i = 0; i < 10; ++i) { 264 #pragma omp parallel 265 for (int i = 0; i < 10; ++i) 266 ; 267 } 268 #pragma omp for 269 for (int i = 0; i < 10; ++i) { 270 #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?}} 271 { 272 bar(); 273 } 274 } 275 #pragma omp for 276 for (int i = 0; i < 10; ++i) { 277 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} 278 { 279 bar(); 280 } 281 } 282 #pragma omp for 283 for (int i = 0; i < 10; ++i) { 284 #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?}} 285 { 286 bar(); 287 } 288 } 289 290 #pragma omp for 291 for (int i = 0; i < 10; ++i) { 292 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}} 293 { 294 bar(); 295 } 296 } 297 #pragma omp for 298 for (int i = 0; i < 10; ++i) { 299 #pragma omp critical 300 { 301 bar(); 302 } 303 } 304 #pragma omp for 305 for (int i = 0; i < 10; ++i) { 306 #pragma omp parallel 307 { 308 #pragma omp single // OK 309 { 310 bar(); 311 } 312 #pragma omp for // OK 313 for (int i = 0; i < 10; ++i) 314 ; 315 #pragma omp sections // OK 316 { 317 bar(); 318 } 319 } 320 } 321 #pragma omp for 322 for (int i = 0; i < 10; ++i) { 323 #pragma omp parallel for 324 for (int i = 0; i < 10; ++i) 325 ; 326 } 327 #pragma omp for 328 for (int i = 0; i < 10; ++i) { 329 #pragma omp parallel for simd 330 for (int i = 0; i < 10; ++i) 331 ; 332 } 333 #pragma omp for 334 for (int i = 0; i < 10; ++i) { 335 #pragma omp parallel sections 336 { 337 bar(); 338 } 339 } 340 #pragma omp for 341 for (int i = 0; i < 10; ++i) { 342 #pragma omp task 343 { 344 bar(); 345 } 346 } 347 #pragma omp for 348 for (int i = 0; i < 10; ++i) { 349 #pragma omp taskyield 350 bar(); 351 } 352 #pragma omp for 353 for (int i = 0; i < 10; ++i) { 354 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}} 355 bar(); 356 } 357 #pragma omp for 358 for (int i = 0; i < 10; ++i) { 359 #pragma omp taskwait 360 bar(); 361 } 362 #pragma omp for 363 for (int i = 0; i < 10; ++i) { 364 #pragma omp flush 365 bar(); 366 } 367 #pragma omp for 368 for (int i = 0; i < 10; ++i) { 369 #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?}} 370 bar(); 371 } 372 #pragma omp for ordered 373 for (int i = 0; i < 10; ++i) { 374 #pragma omp ordered // OK 375 bar(); 376 } 377 #pragma omp for 378 for (int i = 0; i < 10; ++i) { 379 #pragma omp atomic 380 ++a; 381 } 382 #pragma omp for 383 for (int i = 0; i < 10; ++i) { 384 #pragma omp target 385 ++a; 386 } 387 #pragma omp for 388 for (int i = 0; i < 10; ++i) { 389 #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?}} 390 ++a; 391 } 392 #pragma omp for 393 for (int i = 0; i < 10; ++i) { 394 #pragma omp taskloop 395 for (int i = 0; i < 10; ++i) 396 ++a; 397 } 398 399 // FOR SIMD DIRECTIVE 400 #pragma omp for simd 401 for (int i = 0; i < 10; ++i) { 402 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 403 for (int i = 0; i < 10; ++i) 404 ; 405 } 406 #pragma omp for simd 407 for (int i = 0; i < 10; ++i) { 408 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 409 for (int i = 0; i < 10; ++i) 410 ; 411 } 412 #pragma omp for simd 413 for (int i = 0; i < 10; ++i) { 414 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 415 for (int i = 0; i < 10; ++i) 416 ; 417 } 418 #pragma omp for simd 419 for (int i = 0; i < 10; ++i) { 420 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 421 for (int i = 0; i < 10; ++i) 422 ; 423 } 424 #pragma omp for simd 425 for (int i = 0; i < 10; ++i) { 426 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 427 { 428 bar(); 429 } 430 } 431 #pragma omp for simd 432 for (int i = 0; i < 10; ++i) { 433 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 434 { 435 bar(); 436 } 437 } 438 #pragma omp for simd 439 for (int i = 0; i < 10; ++i) { 440 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 441 { 442 bar(); 443 } 444 } 445 #pragma omp for simd 446 for (int i = 0; i < 10; ++i) { 447 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 448 { 449 bar(); 450 } 451 } 452 #pragma omp for simd 453 for (int i = 0; i < 10; ++i) { 454 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 455 { 456 bar(); 457 } 458 } 459 #pragma omp for simd 460 for (int i = 0; i < 10; ++i) { 461 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 462 for (int i = 0; i < 10; ++i) 463 ; 464 } 465 #pragma omp for simd 466 for (int i = 0; i < 10; ++i) { 467 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 468 for (int i = 0; i < 10; ++i) 469 ; 470 } 471 #pragma omp for simd 472 for (int i = 0; i < 10; ++i) { 473 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 474 { 475 bar(); 476 } 477 } 478 #pragma omp for simd 479 for (int i = 0; i < 10; ++i) { 480 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 481 { 482 bar(); 483 } 484 } 485 #pragma omp for simd 486 for (int i = 0; i < 10; ++i) { 487 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 488 bar(); 489 } 490 #pragma omp for simd 491 for (int i = 0; i < 10; ++i) { 492 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 493 bar(); 494 } 495 #pragma omp for simd 496 for (int i = 0; i < 10; ++i) { 497 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 498 bar(); 499 } 500 #pragma omp for simd 501 for (int i = 0; i < 10; ++i) { 502 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 503 bar(); 504 } 505 #pragma omp for simd 506 for (int i = 0; i < 10; ++i) { 507 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 508 bar(); 509 } 510 #pragma omp for simd 511 for (int i = 0; i < 10; ++i) { 512 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 513 ++a; 514 } 515 #pragma omp for simd 516 for (int i = 0; i < 10; ++i) { 517 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 518 ++a; 519 } 520 #pragma omp for simd 521 for (int i = 0; i < 10; ++i) { 522 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 523 ++a; 524 } 525 #pragma omp for simd 526 for (int i = 0; i < 10; ++i) { 527 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 528 for (int i = 0; i < 10; ++i) 529 ++a; 530 } 531 532 // SECTIONS DIRECTIVE 533 #pragma omp sections 534 { 535 #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?}} 536 for (int i = 0; i < 10; ++i) 537 ; 538 } 539 #pragma omp sections 540 { 541 #pragma omp simd 542 for (int i = 0; i < 10; ++i) 543 ; 544 } 545 #pragma omp sections 546 { 547 #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?}} 548 for (int i = 0; i < 10; ++i) 549 ; 550 } 551 #pragma omp sections 552 { 553 #pragma omp parallel 554 for (int i = 0; i < 10; ++i) 555 ; 556 } 557 #pragma omp sections 558 { 559 #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?}} 560 { 561 bar(); 562 } 563 } 564 #pragma omp sections 565 { 566 #pragma omp section 567 { 568 bar(); 569 } 570 } 571 #pragma omp sections 572 { 573 #pragma omp parallel 574 { 575 #pragma omp single // OK 576 { 577 bar(); 578 } 579 #pragma omp for // OK 580 for (int i = 0; i < 10; ++i) 581 ; 582 #pragma omp sections // OK 583 { 584 bar(); 585 } 586 } 587 } 588 #pragma omp sections 589 { 590 #pragma omp parallel 591 { 592 #pragma omp master // OK 593 { 594 bar(); 595 } 596 #pragma omp for // OK 597 for (int i = 0; i < 10; ++i) 598 ; 599 #pragma omp master // OK 600 { 601 bar(); 602 } 603 } 604 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}} 605 bar(); 606 } 607 #pragma omp sections 608 { 609 #pragma omp parallel 610 { 611 #pragma omp critical(A) // OK 612 { 613 bar(); 614 } 615 #pragma omp for // OK 616 for (int i = 0; i < 10; ++i) 617 ; 618 #pragma omp critical // OK 619 { 620 bar(); 621 } 622 } 623 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}} 624 bar(); 625 } 626 #pragma omp sections 627 { 628 #pragma omp parallel for 629 for (int i = 0; i < 10; ++i) 630 ; 631 } 632 #pragma omp sections 633 { 634 #pragma omp parallel for simd 635 for (int i = 0; i < 10; ++i) 636 ; 637 } 638 #pragma omp sections 639 { 640 #pragma omp parallel sections 641 { 642 bar(); 643 } 644 } 645 #pragma omp sections 646 { 647 #pragma omp task 648 { 649 bar(); 650 } 651 } 652 #pragma omp sections 653 { 654 #pragma omp taskyield 655 } 656 #pragma omp sections 657 { 658 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}} 659 } 660 #pragma omp sections 661 { 662 #pragma omp taskwait 663 } 664 #pragma omp sections 665 { 666 #pragma omp flush 667 } 668 #pragma omp sections 669 { 670 #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?}} 671 bar(); 672 } 673 #pragma omp sections 674 { 675 #pragma omp atomic 676 ++a; 677 } 678 #pragma omp sections 679 { 680 #pragma omp target 681 ++a; 682 } 683 #pragma omp sections 684 { 685 #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?}} 686 ++a; 687 } 688 #pragma omp sections 689 { 690 #pragma omp taskloop 691 for (int i = 0; i < 10; ++i) 692 ++a; 693 } 694 695 // SECTION DIRECTIVE 696 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} 697 { 698 bar(); 699 } 700 #pragma omp sections 701 { 702 #pragma omp section 703 { 704 #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?}} 705 for (int i = 0; i < 10; ++i) 706 ; 707 } 708 } 709 #pragma omp sections 710 { 711 #pragma omp section 712 { 713 #pragma omp simd 714 for (int i = 0; i < 10; ++i) 715 ; 716 } 717 } 718 #pragma omp sections 719 { 720 #pragma omp section 721 { 722 #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?}} 723 for (int i = 0; i < 10; ++i) 724 ; 725 } 726 } 727 #pragma omp sections 728 { 729 #pragma omp section 730 { 731 #pragma omp parallel 732 for (int i = 0; i < 10; ++i) 733 ; 734 } 735 } 736 #pragma omp sections 737 { 738 #pragma omp section 739 { 740 #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?}} 741 { 742 bar(); 743 } 744 } 745 } 746 #pragma omp sections 747 { 748 #pragma omp section 749 { 750 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}} 751 { 752 bar(); 753 } 754 } 755 } 756 #pragma omp sections 757 { 758 #pragma omp section 759 { 760 #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?}} 761 bar(); 762 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 763 bar(); 764 #pragma omp critical 765 bar(); 766 } 767 } 768 #pragma omp sections 769 { 770 #pragma omp section 771 { 772 #pragma omp parallel 773 { 774 #pragma omp single // OK 775 { 776 bar(); 777 } 778 #pragma omp for // OK 779 for (int i = 0; i < 10; ++i) 780 ; 781 #pragma omp for simd // OK 782 for (int i = 0; i < 10; ++i) 783 ; 784 #pragma omp sections // OK 785 { 786 bar(); 787 } 788 } 789 } 790 } 791 #pragma omp sections 792 { 793 #pragma omp section 794 { 795 #pragma omp parallel for 796 for (int i = 0; i < 10; ++i) 797 ; 798 } 799 } 800 #pragma omp sections 801 { 802 #pragma omp section 803 { 804 #pragma omp parallel for simd 805 for (int i = 0; i < 10; ++i) 806 ; 807 } 808 } 809 #pragma omp sections 810 { 811 #pragma omp section 812 { 813 #pragma omp parallel sections 814 { 815 bar(); 816 } 817 } 818 } 819 #pragma omp sections 820 { 821 #pragma omp section 822 { 823 #pragma omp task 824 { 825 bar(); 826 } 827 } 828 } 829 #pragma omp sections 830 { 831 #pragma omp section 832 { 833 #pragma omp taskyield 834 bar(); 835 } 836 } 837 #pragma omp sections 838 { 839 #pragma omp section 840 { 841 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}} 842 bar(); 843 } 844 } 845 #pragma omp sections 846 { 847 #pragma omp section 848 { 849 #pragma omp taskwait 850 bar(); 851 } 852 } 853 #pragma omp sections 854 { 855 #pragma omp section 856 { 857 #pragma omp flush 858 bar(); 859 } 860 } 861 #pragma omp sections 862 { 863 #pragma omp section 864 { 865 #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?}} 866 bar(); 867 } 868 } 869 #pragma omp sections 870 { 871 #pragma omp section 872 #pragma omp atomic 873 ++a; 874 } 875 #pragma omp sections 876 { 877 #pragma omp section 878 #pragma omp target 879 ++a; 880 } 881 #pragma omp sections 882 { 883 #pragma omp section 884 #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?}} 885 ++a; 886 } 887 #pragma omp sections 888 { 889 #pragma omp section 890 #pragma omp taskloop 891 for (int i = 0; i < 10; ++i) 892 ++a; 893 } 894 895 // SINGLE DIRECTIVE 896 #pragma omp single 897 { 898 #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?}} 899 for (int i = 0; i < 10; ++i) 900 ; 901 } 902 #pragma omp single 903 { 904 #pragma omp simd 905 for (int i = 0; i < 10; ++i) 906 ; 907 } 908 #pragma omp single 909 { 910 #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?}} 911 for (int i = 0; i < 10; ++i) 912 ; 913 } 914 #pragma omp single 915 { 916 #pragma omp parallel 917 for (int i = 0; i < 10; ++i) 918 ; 919 } 920 #pragma omp single 921 { 922 #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?}} 923 { 924 bar(); 925 } 926 } 927 #pragma omp single 928 { 929 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}} 930 { 931 bar(); 932 } 933 } 934 #pragma omp single 935 { 936 #pragma omp critical 937 { 938 bar(); 939 } 940 } 941 #pragma omp single 942 { 943 #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?}} 944 { 945 bar(); 946 } 947 } 948 #pragma omp single 949 { 950 #pragma omp parallel 951 { 952 #pragma omp single // OK 953 { 954 bar(); 955 } 956 #pragma omp for // OK 957 for (int i = 0; i < 10; ++i) 958 ; 959 #pragma omp for simd // OK 960 for (int i = 0; i < 10; ++i) 961 ; 962 #pragma omp sections // OK 963 { 964 bar(); 965 } 966 } 967 } 968 #pragma omp single 969 { 970 #pragma omp parallel for 971 for (int i = 0; i < 10; ++i) 972 ; 973 } 974 #pragma omp single 975 { 976 #pragma omp parallel for simd 977 for (int i = 0; i < 10; ++i) 978 ; 979 } 980 #pragma omp single 981 { 982 #pragma omp parallel sections 983 { 984 bar(); 985 } 986 } 987 #pragma omp single 988 { 989 #pragma omp task 990 { 991 bar(); 992 } 993 } 994 #pragma omp single 995 { 996 #pragma omp taskyield 997 bar(); 998 } 999 #pragma omp single 1000 { 1001 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}} 1002 bar(); 1003 } 1004 #pragma omp single 1005 { 1006 #pragma omp taskwait 1007 bar(); 1008 } 1009 #pragma omp single 1010 { 1011 #pragma omp flush 1012 bar(); 1013 } 1014 #pragma omp single 1015 { 1016 #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?}} 1017 bar(); 1018 } 1019 #pragma omp single 1020 { 1021 #pragma omp atomic 1022 ++a; 1023 } 1024 #pragma omp single 1025 { 1026 #pragma omp target 1027 ++a; 1028 } 1029 #pragma omp single 1030 { 1031 #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?}} 1032 ++a; 1033 } 1034 #pragma omp single 1035 { 1036 #pragma omp taskloop 1037 for (int i = 0; i < 10; ++i) 1038 ++a; 1039 } 1040 1041 // MASTER DIRECTIVE 1042 #pragma omp master 1043 { 1044 #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?}} 1045 for (int i = 0; i < 10; ++i) 1046 ; 1047 } 1048 #pragma omp master 1049 { 1050 #pragma omp simd 1051 for (int i = 0; i < 10; ++i) 1052 ; 1053 } 1054 #pragma omp master 1055 { 1056 #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?}} 1057 for (int i = 0; i < 10; ++i) 1058 ; 1059 } 1060 #pragma omp master 1061 { 1062 #pragma omp parallel 1063 for (int i = 0; i < 10; ++i) 1064 ; 1065 } 1066 #pragma omp master 1067 { 1068 #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?}} 1069 { 1070 bar(); 1071 } 1072 } 1073 #pragma omp master 1074 { 1075 #pragma omp master // OK, though second 'master' is redundant 1076 { 1077 bar(); 1078 } 1079 } 1080 #pragma omp master 1081 { 1082 #pragma omp critical 1083 { 1084 bar(); 1085 } 1086 } 1087 #pragma omp master 1088 { 1089 #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?}} 1090 { 1091 bar(); 1092 } 1093 } 1094 #pragma omp master 1095 { 1096 #pragma omp parallel 1097 { 1098 #pragma omp master // OK 1099 { 1100 bar(); 1101 } 1102 #pragma omp for // OK 1103 for (int i = 0; i < 10; ++i) 1104 ; 1105 #pragma omp for simd // OK 1106 for (int i = 0; i < 10; ++i) 1107 ; 1108 #pragma omp sections // OK 1109 { 1110 bar(); 1111 } 1112 } 1113 } 1114 #pragma omp master 1115 { 1116 #pragma omp parallel for 1117 for (int i = 0; i < 10; ++i) 1118 ; 1119 } 1120 #pragma omp master 1121 { 1122 #pragma omp parallel for simd 1123 for (int i = 0; i < 10; ++i) 1124 ; 1125 } 1126 #pragma omp master 1127 { 1128 #pragma omp parallel sections 1129 { 1130 bar(); 1131 } 1132 } 1133 #pragma omp master 1134 { 1135 #pragma omp task 1136 { 1137 bar(); 1138 } 1139 } 1140 #pragma omp master 1141 { 1142 #pragma omp taskyield 1143 bar(); 1144 } 1145 #pragma omp master 1146 { 1147 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}} 1148 bar(); 1149 } 1150 #pragma omp master 1151 { 1152 #pragma omp taskwait 1153 bar(); 1154 } 1155 #pragma omp master 1156 { 1157 #pragma omp flush 1158 bar(); 1159 } 1160 #pragma omp master 1161 { 1162 #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?}} 1163 bar(); 1164 } 1165 #pragma omp master 1166 { 1167 #pragma omp atomic 1168 ++a; 1169 } 1170 #pragma omp master 1171 { 1172 #pragma omp target 1173 ++a; 1174 } 1175 #pragma omp master 1176 { 1177 #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?}} 1178 ++a; 1179 } 1180 #pragma omp master 1181 { 1182 #pragma omp taskloop 1183 for (int i = 0; i < 10; ++i) 1184 ++a; 1185 } 1186 1187 // CRITICAL DIRECTIVE 1188 #pragma omp critical 1189 { 1190 #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?}} 1191 for (int i = 0; i < 10; ++i) 1192 ; 1193 } 1194 #pragma omp critical 1195 { 1196 #pragma omp simd 1197 for (int i = 0; i < 10; ++i) 1198 ; 1199 } 1200 #pragma omp critical 1201 { 1202 #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?}} 1203 for (int i = 0; i < 10; ++i) 1204 ; 1205 } 1206 #pragma omp critical 1207 { 1208 #pragma omp parallel 1209 for (int i = 0; i < 10; ++i) 1210 ; 1211 } 1212 #pragma omp critical 1213 { 1214 #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?}} 1215 { 1216 bar(); 1217 } 1218 } 1219 #pragma omp critical 1220 { 1221 #pragma omp master // OK, though second 'master' is redundant 1222 { 1223 bar(); 1224 } 1225 } 1226 #pragma omp critical 1227 { 1228 #pragma omp critical 1229 { 1230 bar(); 1231 } 1232 } 1233 #pragma omp critical 1234 { 1235 #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?}} 1236 { 1237 bar(); 1238 } 1239 } 1240 #pragma omp critical 1241 { 1242 #pragma omp parallel 1243 { 1244 #pragma omp master // OK 1245 { 1246 bar(); 1247 } 1248 #pragma omp for // OK 1249 for (int i = 0; i < 10; ++i) 1250 ; 1251 #pragma omp for simd // OK 1252 for (int i = 0; i < 10; ++i) 1253 ; 1254 #pragma omp sections // OK 1255 { 1256 bar(); 1257 } 1258 } 1259 } 1260 #pragma omp critical 1261 { 1262 #pragma omp parallel for 1263 for (int i = 0; i < 10; ++i) 1264 ; 1265 } 1266 #pragma omp critical 1267 { 1268 #pragma omp parallel for simd 1269 for (int i = 0; i < 10; ++i) 1270 ; 1271 } 1272 #pragma omp critical 1273 { 1274 #pragma omp parallel sections 1275 { 1276 bar(); 1277 } 1278 } 1279 #pragma omp critical 1280 { 1281 #pragma omp task 1282 { 1283 bar(); 1284 } 1285 } 1286 #pragma omp critical 1287 { 1288 #pragma omp taskyield 1289 bar(); 1290 } 1291 #pragma omp critical 1292 { 1293 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}} 1294 bar(); 1295 } 1296 #pragma omp critical 1297 { 1298 #pragma omp taskwait 1299 bar(); 1300 } 1301 #pragma omp critical(Tuzik) 1302 { 1303 #pragma omp critical(grelka) 1304 bar(); 1305 } 1306 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}} 1307 { 1308 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}} 1309 { 1310 #pragma omp critical(Tuzik) 1311 { 1312 #pragma omp parallel 1313 #pragma omp critical(grelka) 1314 { 1315 bar(); 1316 } 1317 } 1318 } 1319 } 1320 #pragma omp critical 1321 { 1322 #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?}} 1323 bar(); 1324 } 1325 #pragma omp critical 1326 { 1327 #pragma omp atomic 1328 ++a; 1329 } 1330 #pragma omp critical 1331 { 1332 #pragma omp target 1333 ++a; 1334 } 1335 #pragma omp critical 1336 { 1337 #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?}} 1338 ++a; 1339 } 1340 #pragma omp critical 1341 { 1342 #pragma omp taskloop 1343 for (int i = 0; i < 10; ++i) 1344 ++a; 1345 } 1346 1347 // PARALLEL FOR DIRECTIVE 1348 #pragma omp parallel for 1349 for (int i = 0; i < 10; ++i) { 1350 #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?}} 1351 for (int i = 0; i < 10; ++i) 1352 ; 1353 } 1354 #pragma omp parallel for 1355 for (int i = 0; i < 10; ++i) { 1356 #pragma omp simd 1357 for (int i = 0; i < 10; ++i) 1358 ; 1359 } 1360 #pragma omp parallel for 1361 for (int i = 0; i < 10; ++i) { 1362 #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?}} 1363 for (int i = 0; i < 10; ++i) 1364 ; 1365 } 1366 #pragma omp parallel for 1367 for (int i = 0; i < 10; ++i) { 1368 #pragma omp parallel 1369 for (int i = 0; i < 10; ++i) 1370 ; 1371 } 1372 #pragma omp parallel for 1373 for (int i = 0; i < 10; ++i) { 1374 #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?}} 1375 { 1376 bar(); 1377 } 1378 } 1379 #pragma omp parallel for 1380 for (int i = 0; i < 10; ++i) { 1381 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} 1382 { 1383 bar(); 1384 } 1385 } 1386 #pragma omp parallel for 1387 for (int i = 0; i < 10; ++i) { 1388 #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?}} 1389 { 1390 bar(); 1391 } 1392 } 1393 1394 #pragma omp parallel for 1395 for (int i = 0; i < 10; ++i) { 1396 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}} 1397 { 1398 bar(); 1399 } 1400 } 1401 1402 #pragma omp parallel for 1403 for (int i = 0; i < 10; ++i) { 1404 #pragma omp critical 1405 { 1406 bar(); 1407 } 1408 } 1409 1410 #pragma omp parallel for 1411 for (int i = 0; i < 10; ++i) { 1412 #pragma omp parallel 1413 { 1414 #pragma omp single // OK 1415 { 1416 bar(); 1417 } 1418 #pragma omp for // OK 1419 for (int i = 0; i < 10; ++i) 1420 ; 1421 #pragma omp for simd // OK 1422 for (int i = 0; i < 10; ++i) 1423 ; 1424 #pragma omp sections // OK 1425 { 1426 bar(); 1427 } 1428 } 1429 } 1430 #pragma omp parallel for 1431 for (int i = 0; i < 10; ++i) { 1432 #pragma omp parallel for 1433 for (int i = 0; i < 10; ++i) 1434 ; 1435 } 1436 #pragma omp parallel for 1437 for (int i = 0; i < 10; ++i) { 1438 #pragma omp parallel for simd 1439 for (int i = 0; i < 10; ++i) 1440 ; 1441 } 1442 #pragma omp parallel for 1443 for (int i = 0; i < 10; ++i) { 1444 #pragma omp parallel sections 1445 { 1446 bar(); 1447 } 1448 } 1449 #pragma omp parallel for 1450 for (int i = 0; i < 10; ++i) { 1451 #pragma omp task 1452 { 1453 bar(); 1454 } 1455 } 1456 #pragma omp parallel for 1457 for (int i = 0; i < 10; ++i) { 1458 #pragma omp taskyield 1459 bar(); 1460 } 1461 #pragma omp parallel for 1462 for (int i = 0; i < 10; ++i) { 1463 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}} 1464 bar(); 1465 } 1466 #pragma omp parallel for 1467 for (int i = 0; i < 10; ++i) { 1468 #pragma omp taskwait 1469 bar(); 1470 } 1471 #pragma omp parallel for 1472 for (int i = 0; i < 10; ++i) { 1473 #pragma omp flush 1474 bar(); 1475 } 1476 #pragma omp parallel for 1477 for (int i = 0; i < 10; ++i) { 1478 #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?}} 1479 bar(); 1480 } 1481 #pragma omp parallel for ordered 1482 for (int i = 0; i < 10; ++i) { 1483 #pragma omp ordered // OK 1484 bar(); 1485 } 1486 #pragma omp parallel for 1487 for (int i = 0; i < 10; ++i) { 1488 #pragma omp atomic 1489 ++a; 1490 } 1491 #pragma omp parallel for 1492 for (int i = 0; i < 10; ++i) { 1493 #pragma omp target 1494 ++a; 1495 } 1496 #pragma omp parallel for 1497 for (int i = 0; i < 10; ++i) { 1498 #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?}} 1499 ++a; 1500 } 1501 #pragma omp parallel for 1502 for (int i = 0; i < 10; ++i) { 1503 #pragma omp taskloop 1504 for (int i = 0; i < 10; ++i) 1505 ++a; 1506 } 1507 1508 // PARALLEL FOR SIMD DIRECTIVE 1509 #pragma omp parallel for simd 1510 for (int i = 0; i < 10; ++i) { 1511 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1512 for (int i = 0; i < 10; ++i) 1513 ; 1514 } 1515 #pragma omp parallel for simd 1516 for (int i = 0; i < 10; ++i) { 1517 #pragma omp simd// expected-error {{OpenMP constructs may not be nested inside a simd region}} 1518 for (int i = 0; i < 10; ++i) 1519 ; 1520 } 1521 #pragma omp parallel for simd 1522 for (int i = 0; i < 10; ++i) { 1523 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1524 for (int i = 0; i < 10; ++i) 1525 ; 1526 } 1527 #pragma omp parallel for simd 1528 for (int i = 0; i < 10; ++i) { 1529 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1530 for (int i = 0; i < 10; ++i) 1531 ; 1532 } 1533 #pragma omp parallel for simd 1534 for (int i = 0; i < 10; ++i) { 1535 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1536 { 1537 bar(); 1538 } 1539 } 1540 #pragma omp parallel for simd 1541 for (int i = 0; i < 10; ++i) { 1542 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1543 { 1544 bar(); 1545 } 1546 } 1547 #pragma omp parallel for simd 1548 for (int i = 0; i < 10; ++i) { 1549 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1550 { 1551 bar(); 1552 } 1553 } 1554 1555 #pragma omp parallel for simd 1556 for (int i = 0; i < 10; ++i) { 1557 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1558 { 1559 bar(); 1560 } 1561 } 1562 1563 #pragma omp parallel for simd 1564 for (int i = 0; i < 10; ++i) { 1565 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1566 { 1567 bar(); 1568 } 1569 } 1570 1571 #pragma omp parallel for simd 1572 for (int i = 0; i < 10; ++i) { 1573 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1574 { 1575 #pragma omp single 1576 { 1577 bar(); 1578 } 1579 #pragma omp for 1580 for (int i = 0; i < 10; ++i) 1581 ; 1582 #pragma omp for simd 1583 for (int i = 0; i < 10; ++i) 1584 ; 1585 #pragma omp sections 1586 { 1587 bar(); 1588 } 1589 } 1590 } 1591 #pragma omp parallel for simd 1592 for (int i = 0; i < 10; ++i) { 1593 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1594 for (int i = 0; i < 10; ++i) 1595 ; 1596 } 1597 #pragma omp parallel for simd 1598 for (int i = 0; i < 10; ++i) { 1599 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}} 1600 for (int i = 0; i < 10; ++i) 1601 ; 1602 } 1603 #pragma omp parallel for simd 1604 for (int i = 0; i < 10; ++i) { 1605 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1606 { 1607 bar(); 1608 } 1609 } 1610 #pragma omp parallel for simd 1611 for (int i = 0; i < 10; ++i) { 1612 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1613 { 1614 bar(); 1615 } 1616 } 1617 #pragma omp parallel for simd 1618 for (int i = 0; i < 10; ++i) { 1619 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1620 bar(); 1621 } 1622 #pragma omp parallel for simd 1623 for (int i = 0; i < 10; ++i) { 1624 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1625 bar(); 1626 } 1627 #pragma omp parallel for simd 1628 for (int i = 0; i < 10; ++i) { 1629 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1630 bar(); 1631 } 1632 #pragma omp parallel for simd 1633 for (int i = 0; i < 10; ++i) { 1634 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1635 bar(); 1636 } 1637 #pragma omp parallel for simd 1638 for (int i = 0; i < 10; ++i) { 1639 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1640 bar(); 1641 } 1642 #pragma omp parallel for simd 1643 for (int i = 0; i < 10; ++i) { 1644 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1645 bar(); 1646 } 1647 #pragma omp parallel for simd 1648 for (int i = 0; i < 10; ++i) { 1649 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1650 ++a; 1651 } 1652 #pragma omp parallel for simd 1653 for (int i = 0; i < 10; ++i) { 1654 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1655 ++a; 1656 } 1657 #pragma omp parallel for simd 1658 for (int i = 0; i < 10; ++i) { 1659 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1660 ++a; 1661 } 1662 #pragma omp parallel for simd 1663 for (int i = 0; i < 10; ++i) { 1664 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1665 for (int i = 0; i < 10; ++i) 1666 ++a; 1667 } 1668 1669 // PARALLEL SECTIONS DIRECTIVE 1670 #pragma omp parallel sections 1671 { 1672 #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?}} 1673 for (int i = 0; i < 10; ++i) 1674 ; 1675 } 1676 #pragma omp parallel sections 1677 { 1678 #pragma omp simd 1679 for (int i = 0; i < 10; ++i) 1680 ; 1681 } 1682 #pragma omp parallel sections 1683 { 1684 #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?}} 1685 for (int i = 0; i < 10; ++i) 1686 ; 1687 } 1688 #pragma omp parallel sections 1689 { 1690 #pragma omp parallel 1691 for (int i = 0; i < 10; ++i) 1692 ; 1693 } 1694 #pragma omp parallel sections 1695 { 1696 #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?}} 1697 { 1698 bar(); 1699 } 1700 } 1701 #pragma omp parallel sections 1702 { 1703 #pragma omp section 1704 { 1705 bar(); 1706 } 1707 } 1708 #pragma omp parallel sections 1709 { 1710 #pragma omp section 1711 { 1712 #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?}} 1713 bar(); 1714 } 1715 } 1716 #pragma omp parallel sections 1717 { 1718 #pragma omp section 1719 { 1720 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 1721 bar(); 1722 } 1723 } 1724 #pragma omp parallel sections 1725 { 1726 #pragma omp section 1727 { 1728 #pragma omp critical 1729 bar(); 1730 } 1731 } 1732 #pragma omp parallel sections 1733 { 1734 #pragma omp parallel 1735 { 1736 #pragma omp single // OK 1737 { 1738 bar(); 1739 } 1740 #pragma omp for // OK 1741 for (int i = 0; i < 10; ++i) 1742 ; 1743 #pragma omp for simd // OK 1744 for (int i = 0; i < 10; ++i) 1745 ; 1746 #pragma omp sections // OK 1747 { 1748 bar(); 1749 } 1750 } 1751 } 1752 #pragma omp parallel sections 1753 { 1754 #pragma omp parallel for 1755 for (int i = 0; i < 10; ++i) 1756 ; 1757 } 1758 #pragma omp parallel sections 1759 { 1760 #pragma omp parallel for simd 1761 for (int i = 0; i < 10; ++i) 1762 ; 1763 } 1764 #pragma omp parallel sections 1765 { 1766 #pragma omp parallel sections 1767 { 1768 bar(); 1769 } 1770 } 1771 #pragma omp parallel sections 1772 { 1773 #pragma omp task 1774 { 1775 bar(); 1776 } 1777 } 1778 #pragma omp parallel sections 1779 { 1780 #pragma omp taskyield 1781 } 1782 #pragma omp parallel sections 1783 { 1784 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}} 1785 } 1786 #pragma omp parallel sections 1787 { 1788 #pragma omp taskwait 1789 } 1790 #pragma omp parallel sections 1791 { 1792 #pragma omp flush 1793 } 1794 #pragma omp parallel sections 1795 { 1796 #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?}} 1797 bar(); 1798 } 1799 #pragma omp parallel sections 1800 { 1801 #pragma omp atomic 1802 ++a; 1803 } 1804 #pragma omp parallel sections 1805 { 1806 #pragma omp target 1807 ++a; 1808 } 1809 #pragma omp parallel sections 1810 { 1811 #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?}} 1812 ++a; 1813 } 1814 #pragma omp parallel sections 1815 { 1816 #pragma omp taskloop 1817 for (int i = 0; i < 10; ++i) 1818 ++a; 1819 } 1820 1821 // TASK DIRECTIVE 1822 #pragma omp task 1823 #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?}} 1824 for (int i = 0; i < 10; ++i) 1825 ; 1826 #pragma omp task 1827 #pragma omp simd 1828 for (int i = 0; i < 10; ++i) 1829 ; 1830 #pragma omp task 1831 #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?}} 1832 for (int i = 0; i < 10; ++i) 1833 ; 1834 #pragma omp task 1835 #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?}} 1836 { 1837 bar(); 1838 } 1839 #pragma omp task 1840 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}} 1841 { 1842 bar(); 1843 } 1844 #pragma omp task 1845 #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?}} 1846 bar(); 1847 #pragma omp task 1848 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}} 1849 bar(); 1850 #pragma omp task 1851 #pragma omp critical 1852 bar(); 1853 1854 #pragma omp task 1855 #pragma omp parallel for 1856 for (int i = 0; i < 10; ++i) 1857 ; 1858 #pragma omp task 1859 #pragma omp parallel for simd 1860 for (int i = 0; i < 10; ++i) 1861 ; 1862 #pragma omp task 1863 #pragma omp parallel sections 1864 { 1865 bar(); 1866 } 1867 #pragma omp task 1868 #pragma omp task 1869 { 1870 bar(); 1871 } 1872 #pragma omp task 1873 { 1874 #pragma omp taskyield 1875 bar(); 1876 } 1877 #pragma omp task 1878 { 1879 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}} 1880 bar(); 1881 } 1882 #pragma omp task 1883 { 1884 #pragma omp taskwait 1885 bar(); 1886 } 1887 #pragma omp task 1888 { 1889 #pragma omp flush 1890 bar(); 1891 } 1892 #pragma omp task 1893 { 1894 #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?}} 1895 bar(); 1896 } 1897 #pragma omp task 1898 { 1899 #pragma omp atomic 1900 ++a; 1901 } 1902 #pragma omp task 1903 { 1904 #pragma omp target 1905 ++a; 1906 } 1907 #pragma omp task 1908 { 1909 #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?}} 1910 ++a; 1911 } 1912 #pragma omp task 1913 { 1914 #pragma omp taskloop 1915 for (int i = 0; i < 10; ++i) 1916 ++a; 1917 } 1918 1919 // ORDERED DIRECTIVE 1920 #pragma omp ordered 1921 { 1922 #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?}} 1923 for (int i = 0; i < 10; ++i) 1924 ; 1925 } 1926 #pragma omp ordered 1927 { 1928 #pragma omp simd 1929 for (int i = 0; i < 10; ++i) 1930 ; 1931 } 1932 #pragma omp ordered 1933 { 1934 #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?}} 1935 for (int i = 0; i < 10; ++i) 1936 ; 1937 } 1938 #pragma omp ordered 1939 { 1940 #pragma omp parallel 1941 for (int i = 0; i < 10; ++i) 1942 ; 1943 } 1944 #pragma omp ordered 1945 { 1946 #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?}} 1947 { 1948 bar(); 1949 } 1950 } 1951 #pragma omp ordered 1952 { 1953 #pragma omp master // OK, though second 'ordered' is redundant 1954 { 1955 bar(); 1956 } 1957 } 1958 #pragma omp ordered 1959 { 1960 #pragma omp critical 1961 { 1962 bar(); 1963 } 1964 } 1965 #pragma omp ordered 1966 { 1967 #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?}} 1968 { 1969 bar(); 1970 } 1971 } 1972 #pragma omp ordered 1973 { 1974 #pragma omp parallel for ordered 1975 for (int j = 0; j < 10; ++j) { 1976 #pragma omp ordered // OK 1977 { 1978 bar(); 1979 } 1980 } 1981 } 1982 #pragma omp ordered 1983 { 1984 #pragma omp parallel for simd ordered //expected-error {{unexpected OpenMP clause 'ordered' in directive '#pragma omp parallel for simd'}} 1985 for (int j = 0; j < 10; ++j) { 1986 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 1987 { 1988 bar(); 1989 } 1990 } 1991 } 1992 #pragma omp ordered 1993 { 1994 #pragma omp parallel for 1995 for (int i = 0; i < 10; ++i) 1996 ; 1997 } 1998 #pragma omp ordered 1999 { 2000 #pragma omp parallel for simd 2001 for (int i = 0; i < 10; ++i) 2002 ; 2003 } 2004 #pragma omp ordered 2005 { 2006 #pragma omp parallel sections 2007 { 2008 bar(); 2009 } 2010 } 2011 #pragma omp ordered 2012 { 2013 #pragma omp task 2014 { 2015 bar(); 2016 } 2017 } 2018 #pragma omp ordered 2019 { 2020 #pragma omp taskyield 2021 bar(); 2022 } 2023 #pragma omp ordered 2024 { 2025 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}} 2026 bar(); 2027 } 2028 #pragma omp ordered 2029 { 2030 #pragma omp taskwait 2031 bar(); 2032 } 2033 #pragma omp ordered 2034 { 2035 #pragma omp flush 2036 bar(); 2037 } 2038 #pragma omp ordered 2039 { 2040 #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?}} 2041 bar(); 2042 } 2043 #pragma omp ordered 2044 { 2045 #pragma omp atomic 2046 ++a; 2047 } 2048 #pragma omp ordered 2049 { 2050 #pragma omp target 2051 ++a; 2052 } 2053 #pragma omp ordered 2054 { 2055 #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?}} 2056 ++a; 2057 } 2058 #pragma omp ordered 2059 { 2060 #pragma omp taskloop 2061 for (int i = 0; i < 10; ++i) 2062 ++a; 2063 } 2064 2065 // ATOMIC DIRECTIVE 2066 #pragma omp atomic 2067 // 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}} 2068 // expected-note@+1 {{expected an expression statement}} 2069 { 2070 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2071 for (int i = 0; i < 10; ++i) 2072 ; 2073 } 2074 #pragma omp atomic 2075 // 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}} 2076 // expected-note@+1 {{expected an expression statement}} 2077 { 2078 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2079 for (int i = 0; i < 10; ++i) 2080 ; 2081 } 2082 #pragma omp atomic 2083 // 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}} 2084 // expected-note@+1 {{expected an expression statement}} 2085 { 2086 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2087 for (int i = 0; i < 10; ++i) 2088 ; 2089 } 2090 #pragma omp atomic 2091 // 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}} 2092 // expected-note@+1 {{expected an expression statement}} 2093 { 2094 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2095 for (int i = 0; i < 10; ++i) 2096 ; 2097 } 2098 #pragma omp atomic 2099 // 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}} 2100 // expected-note@+1 {{expected an expression statement}} 2101 { 2102 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2103 { 2104 bar(); 2105 } 2106 } 2107 #pragma omp atomic 2108 // 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}} 2109 // expected-note@+1 {{expected an expression statement}} 2110 { 2111 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2112 { 2113 bar(); 2114 } 2115 } 2116 #pragma omp atomic 2117 // 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}} 2118 // expected-note@+1 {{expected an expression statement}} 2119 { 2120 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2121 { 2122 bar(); 2123 } 2124 } 2125 #pragma omp atomic 2126 // 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}} 2127 // expected-note@+1 {{expected an expression statement}} 2128 { 2129 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2130 { 2131 bar(); 2132 } 2133 } 2134 #pragma omp atomic 2135 // 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}} 2136 // expected-note@+1 {{expected an expression statement}} 2137 { 2138 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2139 { 2140 bar(); 2141 } 2142 } 2143 #pragma omp atomic 2144 // 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}} 2145 // expected-note@+1 {{expected an expression statement}} 2146 { 2147 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2148 for (int i = 0; i < 10; ++i) 2149 ; 2150 } 2151 #pragma omp atomic 2152 // 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}} 2153 // expected-note@+1 {{expected an expression statement}} 2154 { 2155 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2156 for (int i = 0; i < 10; ++i) 2157 ; 2158 } 2159 #pragma omp atomic 2160 // 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}} 2161 // expected-note@+1 {{expected an expression statement}} 2162 { 2163 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2164 { 2165 bar(); 2166 } 2167 } 2168 #pragma omp atomic 2169 // 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}} 2170 // expected-note@+1 {{expected an expression statement}} 2171 { 2172 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2173 { 2174 bar(); 2175 } 2176 } 2177 #pragma omp atomic 2178 // 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}} 2179 // expected-note@+1 {{expected an expression statement}} 2180 { 2181 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2182 bar(); 2183 } 2184 #pragma omp atomic 2185 // 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}} 2186 // expected-note@+1 {{expected an expression statement}} 2187 { 2188 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2189 bar(); 2190 } 2191 #pragma omp atomic 2192 // 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}} 2193 // expected-note@+1 {{expected an expression statement}} 2194 { 2195 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2196 bar(); 2197 } 2198 #pragma omp atomic 2199 // 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}} 2200 // expected-note@+1 {{expected an expression statement}} 2201 { 2202 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2203 bar(); 2204 } 2205 #pragma omp atomic 2206 // 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}} 2207 // expected-note@+1 {{expected an expression statement}} 2208 { 2209 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2210 bar(); 2211 } 2212 #pragma omp atomic 2213 // 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}} 2214 // expected-note@+1 {{expected an expression statement}} 2215 { 2216 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2217 ++a; 2218 } 2219 #pragma omp atomic 2220 // 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}} 2221 // expected-note@+1 {{expected an expression statement}} 2222 { 2223 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2224 ++a; 2225 } 2226 #pragma omp atomic 2227 // 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}} 2228 // expected-note@+1 {{expected an expression statement}} 2229 { 2230 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2231 ++a; 2232 } 2233 #pragma omp atomic 2234 // 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}} 2235 // expected-note@+1 {{expected an expression statement}} 2236 { 2237 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 2238 for (int i = 0; i < 10; ++i) 2239 ++a; 2240 } 2241 2242 // TARGET DIRECTIVE 2243 #pragma omp target 2244 #pragma omp parallel 2245 bar(); 2246 #pragma omp target 2247 #pragma omp for 2248 for (int i = 0; i < 10; ++i) 2249 ; 2250 #pragma omp target 2251 #pragma omp simd 2252 for (int i = 0; i < 10; ++i) 2253 ; 2254 #pragma omp target 2255 #pragma omp for simd 2256 for (int i = 0; i < 10; ++i) 2257 ; 2258 #pragma omp target 2259 #pragma omp sections 2260 { 2261 bar(); 2262 } 2263 #pragma omp target 2264 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}} 2265 { 2266 bar(); 2267 } 2268 #pragma omp target 2269 #pragma omp single 2270 bar(); 2271 2272 #pragma omp target 2273 #pragma omp master 2274 { 2275 bar(); 2276 } 2277 #pragma omp target 2278 #pragma omp critical 2279 { 2280 bar(); 2281 } 2282 #pragma omp target 2283 #pragma omp parallel for 2284 for (int i = 0; i < 10; ++i) 2285 ; 2286 #pragma omp target 2287 #pragma omp parallel for simd 2288 for (int i = 0; i < 10; ++i) 2289 ; 2290 #pragma omp target 2291 #pragma omp parallel sections 2292 { 2293 bar(); 2294 } 2295 #pragma omp target 2296 #pragma omp task 2297 { 2298 bar(); 2299 } 2300 #pragma omp target 2301 { 2302 #pragma omp taskyield 2303 bar(); 2304 } 2305 #pragma omp target 2306 { 2307 #pragma omp barrier 2308 bar(); 2309 } 2310 #pragma omp target 2311 { 2312 #pragma omp taskwait 2313 bar(); 2314 } 2315 #pragma omp target 2316 { 2317 #pragma omp flush 2318 bar(); 2319 } 2320 #pragma omp target 2321 { 2322 #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?}} 2323 bar(); 2324 } 2325 #pragma omp target 2326 { 2327 #pragma omp atomic 2328 ++a; 2329 } 2330 #pragma omp target 2331 { 2332 #pragma omp target 2333 ++a; 2334 } 2335 #pragma omp target 2336 { 2337 #pragma omp teams 2338 ++a; 2339 } 2340 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}} 2341 { 2342 ++a; // expected-note {{statement outside teams construct here}} 2343 #pragma omp teams // expected-note {{nested teams construct here}} 2344 ++a; 2345 } 2346 #pragma omp target 2347 { 2348 #pragma omp taskloop 2349 for (int i = 0; i < 10; ++i) 2350 ++a; 2351 } 2352 2353 // TEAMS DIRECTIVE 2354 #pragma omp target 2355 #pragma omp teams 2356 #pragma omp parallel 2357 bar(); 2358 #pragma omp target 2359 #pragma omp teams 2360 #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?}} 2361 for (int i = 0; i < 10; ++i) 2362 ; 2363 #pragma omp target 2364 #pragma omp teams 2365 #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?}} 2366 for (int i = 0; i < 10; ++i) 2367 ; 2368 #pragma omp target 2369 #pragma omp teams 2370 #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?}} 2371 for (int i = 0; i < 10; ++i) 2372 ; 2373 #pragma omp target 2374 #pragma omp teams 2375 #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?}} 2376 { 2377 bar(); 2378 } 2379 #pragma omp target 2380 #pragma omp teams 2381 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}} 2382 { 2383 bar(); 2384 } 2385 #pragma omp target 2386 #pragma omp teams 2387 #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?}} 2388 bar(); 2389 2390 #pragma omp target 2391 #pragma omp teams 2392 #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?}} 2393 { 2394 bar(); 2395 } 2396 #pragma omp target 2397 #pragma omp teams 2398 #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?}} 2399 { 2400 bar(); 2401 } 2402 #pragma omp target 2403 #pragma omp teams 2404 #pragma omp parallel for 2405 for (int i = 0; i < 10; ++i) 2406 ; 2407 #pragma omp target 2408 #pragma omp teams 2409 #pragma omp parallel for simd 2410 for (int i = 0; i < 10; ++i) 2411 ; 2412 #pragma omp target 2413 #pragma omp teams 2414 #pragma omp parallel sections 2415 { 2416 bar(); 2417 } 2418 #pragma omp target 2419 #pragma omp teams 2420 #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?}} 2421 { 2422 bar(); 2423 } 2424 #pragma omp target 2425 #pragma omp teams 2426 { 2427 #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?}} 2428 bar(); 2429 } 2430 #pragma omp target 2431 #pragma omp teams 2432 { 2433 #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?}} 2434 bar(); 2435 } 2436 #pragma omp target 2437 #pragma omp teams 2438 { 2439 #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?}} 2440 bar(); 2441 } 2442 #pragma omp target 2443 #pragma omp teams 2444 { 2445 #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?}} 2446 bar(); 2447 } 2448 #pragma omp target 2449 #pragma omp teams 2450 { 2451 #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?}} 2452 bar(); 2453 } 2454 #pragma omp target 2455 #pragma omp teams 2456 { 2457 #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?}} 2458 ++a; 2459 } 2460 #pragma omp target 2461 #pragma omp teams 2462 { 2463 #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?}} 2464 ++a; 2465 } 2466 #pragma omp target 2467 #pragma omp teams 2468 { 2469 #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?}} 2470 ++a; 2471 } 2472 #pragma omp target 2473 #pragma omp teams 2474 { 2475 #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?}} 2476 for (int i = 0; i < 10; ++i) 2477 ++a; 2478 } 2479 2480 // TASKLOOP DIRECTIVE 2481 #pragma omp taskloop 2482 for (int i = 0; i < 10; ++i) { 2483 #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?}} 2484 for (int i = 0; i < 10; ++i) 2485 ; 2486 } 2487 #pragma omp taskloop 2488 for (int i = 0; i < 10; ++i) { 2489 #pragma omp simd 2490 for (int i = 0; i < 10; ++i) 2491 ; 2492 } 2493 #pragma omp taskloop 2494 for (int i = 0; i < 10; ++i) { 2495 #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?}} 2496 for (int i = 0; i < 10; ++i) 2497 ; 2498 } 2499 #pragma omp taskloop 2500 for (int i = 0; i < 10; ++i) { 2501 #pragma omp parallel 2502 for (int i = 0; i < 10; ++i) 2503 ; 2504 } 2505 #pragma omp taskloop 2506 for (int i = 0; i < 10; ++i) { 2507 #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?}} 2508 { 2509 bar(); 2510 } 2511 } 2512 #pragma omp taskloop 2513 for (int i = 0; i < 10; ++i) { 2514 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}} 2515 { 2516 bar(); 2517 } 2518 } 2519 #pragma omp taskloop 2520 for (int i = 0; i < 10; ++i) { 2521 #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?}} 2522 { 2523 bar(); 2524 } 2525 } 2526 2527 #pragma omp taskloop 2528 for (int i = 0; i < 10; ++i) { 2529 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}} 2530 { 2531 bar(); 2532 } 2533 } 2534 #pragma omp taskloop 2535 for (int i = 0; i < 10; ++i) { 2536 #pragma omp critical 2537 { 2538 bar(); 2539 } 2540 } 2541 #pragma omp taskloop 2542 for (int i = 0; i < 10; ++i) { 2543 #pragma omp parallel 2544 { 2545 #pragma omp single // OK 2546 { 2547 bar(); 2548 } 2549 #pragma omp for // OK 2550 for (int i = 0; i < 10; ++i) 2551 ; 2552 #pragma omp sections // OK 2553 { 2554 bar(); 2555 } 2556 } 2557 } 2558 #pragma omp taskloop 2559 for (int i = 0; i < 10; ++i) { 2560 #pragma omp parallel for 2561 for (int i = 0; i < 10; ++i) 2562 ; 2563 } 2564 #pragma omp taskloop 2565 for (int i = 0; i < 10; ++i) { 2566 #pragma omp parallel for simd 2567 for (int i = 0; i < 10; ++i) 2568 ; 2569 } 2570 #pragma omp taskloop 2571 for (int i = 0; i < 10; ++i) { 2572 #pragma omp parallel sections 2573 { 2574 bar(); 2575 } 2576 } 2577 #pragma omp taskloop 2578 for (int i = 0; i < 10; ++i) { 2579 #pragma omp task 2580 { 2581 bar(); 2582 } 2583 } 2584 #pragma omp taskloop 2585 for (int i = 0; i < 10; ++i) { 2586 #pragma omp taskyield 2587 bar(); 2588 } 2589 #pragma omp taskloop 2590 for (int i = 0; i < 10; ++i) { 2591 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}} 2592 bar(); 2593 } 2594 #pragma omp taskloop 2595 for (int i = 0; i < 10; ++i) { 2596 #pragma omp taskwait 2597 bar(); 2598 } 2599 #pragma omp taskloop 2600 for (int i = 0; i < 10; ++i) { 2601 #pragma omp flush 2602 bar(); 2603 } 2604 #pragma omp taskloop 2605 for (int i = 0; i < 10; ++i) { 2606 #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?}} 2607 bar(); 2608 } 2609 #pragma omp taskloop 2610 for (int i = 0; i < 10; ++i) { 2611 #pragma omp atomic 2612 ++a; 2613 } 2614 #pragma omp taskloop 2615 for (int i = 0; i < 10; ++i) { 2616 #pragma omp target 2617 ++a; 2618 } 2619 #pragma omp taskloop 2620 for (int i = 0; i < 10; ++i) { 2621 #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?}} 2622 ++a; 2623 } 2624 #pragma omp taskloop 2625 for (int i = 0; i < 10; ++i) { 2626 #pragma omp taskloop 2627 for (int i = 0; i < 10; ++i) 2628 ++a; 2629 } 2630 } 2631 2632 void foo() { 2633 int a = 0; 2634 // PARALLEL DIRECTIVE 2635 #pragma omp parallel 2636 #pragma omp for 2637 for (int i = 0; i < 10; ++i) 2638 ; 2639 #pragma omp parallel 2640 #pragma omp simd 2641 for (int i = 0; i < 10; ++i) 2642 ; 2643 #pragma omp parallel 2644 #pragma omp for simd 2645 for (int i = 0; i < 10; ++i) 2646 ; 2647 #pragma omp parallel 2648 #pragma omp sections 2649 { 2650 bar(); 2651 } 2652 #pragma omp parallel 2653 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}} 2654 { 2655 bar(); 2656 } 2657 #pragma omp parallel 2658 #pragma omp sections 2659 { 2660 bar(); 2661 } 2662 #pragma omp parallel 2663 #pragma omp single 2664 bar(); 2665 #pragma omp parallel 2666 #pragma omp master 2667 bar(); 2668 #pragma omp parallel 2669 #pragma omp critical 2670 bar(); 2671 #pragma omp parallel 2672 #pragma omp parallel for 2673 for (int i = 0; i < 10; ++i) 2674 ; 2675 #pragma omp parallel 2676 #pragma omp parallel for simd 2677 for (int i = 0; i < 10; ++i) 2678 ; 2679 #pragma omp parallel 2680 #pragma omp parallel sections 2681 { 2682 bar(); 2683 } 2684 #pragma omp parallel 2685 #pragma omp task 2686 { 2687 bar(); 2688 } 2689 #pragma omp parallel 2690 { 2691 #pragma omp taskyield 2692 bar(); 2693 } 2694 #pragma omp parallel 2695 { 2696 #pragma omp barrier 2697 bar(); 2698 } 2699 #pragma omp parallel 2700 { 2701 #pragma omp taskwait 2702 bar(); 2703 } 2704 #pragma omp parallel 2705 { 2706 #pragma omp flush 2707 bar(); 2708 } 2709 #pragma omp parallel 2710 { 2711 #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?}} 2712 bar(); 2713 } 2714 #pragma omp parallel 2715 { 2716 #pragma omp atomic 2717 ++a; 2718 } 2719 #pragma omp parallel 2720 { 2721 #pragma omp target 2722 ++a; 2723 } 2724 #pragma omp parallel 2725 { 2726 #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?}} 2727 ++a; 2728 } 2729 #pragma omp parallel 2730 { 2731 #pragma omp taskloop 2732 for (int i = 0; i < 10; ++i) 2733 ++a; 2734 } 2735 2736 // SIMD DIRECTIVE 2737 #pragma omp simd 2738 for (int i = 0; i < 10; ++i) { 2739 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2740 for (int i = 0; i < 10; ++i) 2741 ; 2742 } 2743 #pragma omp simd 2744 for (int i = 0; i < 10; ++i) { 2745 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2746 for (int i = 0; i < 10; ++i) 2747 ; 2748 } 2749 #pragma omp simd 2750 for (int i = 0; i < 10; ++i) { 2751 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2752 for (int i = 0; i < 10; ++i) 2753 ; 2754 } 2755 #pragma omp simd 2756 for (int i = 0; i < 10; ++i) { 2757 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2758 for (int i = 0; i < 10; ++i) 2759 ; 2760 } 2761 #pragma omp simd 2762 for (int i = 0; i < 10; ++i) { 2763 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2764 { 2765 bar(); 2766 } 2767 } 2768 #pragma omp simd 2769 for (int i = 0; i < 10; ++i) { 2770 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2771 { 2772 bar(); 2773 } 2774 } 2775 #pragma omp simd 2776 for (int i = 0; i < 10; ++i) { 2777 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2778 bar(); 2779 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2780 bar(); 2781 } 2782 #pragma omp simd 2783 for (int i = 0; i < 10; ++i) { 2784 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2785 bar(); 2786 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2787 bar(); 2788 } 2789 #pragma omp simd 2790 for (int i = 0; i < 10; ++i) { 2791 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2792 for (int i = 0; i < 10; ++i) 2793 ; 2794 } 2795 #pragma omp simd 2796 for (int i = 0; i < 10; ++i) { 2797 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2798 for (int i = 0; i < 10; ++i) 2799 ; 2800 } 2801 #pragma omp simd 2802 for (int i = 0; i < 10; ++i) { 2803 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2804 { 2805 bar(); 2806 } 2807 } 2808 #pragma omp simd 2809 for (int i = 0; i < 10; ++i) { 2810 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2811 { 2812 bar(); 2813 } 2814 } 2815 #pragma omp simd 2816 for (int i = 0; i < 10; ++i) { 2817 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2818 bar(); 2819 } 2820 #pragma omp simd 2821 for (int i = 0; i < 10; ++i) { 2822 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2823 bar(); 2824 } 2825 #pragma omp simd 2826 for (int i = 0; i < 10; ++i) { 2827 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2828 bar(); 2829 } 2830 #pragma omp simd 2831 for (int i = 0; i < 10; ++i) { 2832 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2833 bar(); 2834 } 2835 #pragma omp simd 2836 for (int i = 0; i < 10; ++i) { 2837 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2838 bar(); 2839 } 2840 #pragma omp simd 2841 for (int i = 0; i < 10; ++i) { 2842 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2843 ++a; 2844 } 2845 #pragma omp simd 2846 for (int i = 0; i < 10; ++i) { 2847 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2848 ++a; 2849 } 2850 #pragma omp simd 2851 for (int i = 0; i < 10; ++i) { 2852 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2853 ++a; 2854 } 2855 #pragma omp simd 2856 for (int i = 0; i < 10; ++i) { 2857 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 2858 for (int i = 0; i < 10; ++i) 2859 ++a; 2860 } 2861 2862 // FOR DIRECTIVE 2863 #pragma omp for 2864 for (int i = 0; i < 10; ++i) { 2865 #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?}} 2866 for (int i = 0; i < 10; ++i) 2867 ; 2868 } 2869 #pragma omp for 2870 for (int i = 0; i < 10; ++i) { 2871 #pragma omp simd 2872 for (int i = 0; i < 10; ++i) 2873 ; 2874 } 2875 #pragma omp for 2876 for (int i = 0; i < 10; ++i) { 2877 #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?}} 2878 for (int i = 0; i < 10; ++i) 2879 ; 2880 } 2881 #pragma omp for 2882 for (int i = 0; i < 10; ++i) { 2883 #pragma omp parallel 2884 for (int i = 0; i < 10; ++i) 2885 ; 2886 } 2887 #pragma omp for 2888 for (int i = 0; i < 10; ++i) { 2889 #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?}} 2890 { 2891 bar(); 2892 } 2893 } 2894 #pragma omp for 2895 for (int i = 0; i < 10; ++i) { 2896 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} 2897 { 2898 bar(); 2899 } 2900 } 2901 #pragma omp for 2902 for (int i = 0; i < 10; ++i) { 2903 #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?}} 2904 bar(); 2905 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}} 2906 bar(); 2907 #pragma omp critical 2908 bar(); 2909 } 2910 #pragma omp for 2911 for (int i = 0; i < 10; ++i) { 2912 #pragma omp parallel 2913 { 2914 #pragma omp single // OK 2915 { 2916 bar(); 2917 } 2918 #pragma omp for // OK 2919 for (int i = 0; i < 10; ++i) 2920 ; 2921 #pragma omp for simd // OK 2922 for (int i = 0; i < 10; ++i) 2923 ; 2924 #pragma omp sections // OK 2925 { 2926 bar(); 2927 } 2928 } 2929 } 2930 #pragma omp for 2931 for (int i = 0; i < 10; ++i) { 2932 #pragma omp parallel for 2933 for (int i = 0; i < 10; ++i) 2934 ; 2935 } 2936 #pragma omp for 2937 for (int i = 0; i < 10; ++i) { 2938 #pragma omp parallel for simd 2939 for (int i = 0; i < 10; ++i) 2940 ; 2941 } 2942 #pragma omp for 2943 for (int i = 0; i < 10; ++i) { 2944 #pragma omp parallel sections 2945 { 2946 bar(); 2947 } 2948 } 2949 #pragma omp for 2950 for (int i = 0; i < 10; ++i) { 2951 #pragma omp task 2952 { 2953 bar(); 2954 } 2955 } 2956 #pragma omp for 2957 for (int i = 0; i < 10; ++i) { 2958 #pragma omp taskyield 2959 bar(); 2960 } 2961 #pragma omp for 2962 for (int i = 0; i < 10; ++i) { 2963 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}} 2964 bar(); 2965 } 2966 #pragma omp for 2967 for (int i = 0; i < 10; ++i) { 2968 #pragma omp taskwait 2969 bar(); 2970 } 2971 #pragma omp for 2972 for (int i = 0; i < 10; ++i) { 2973 #pragma omp flush 2974 bar(); 2975 } 2976 #pragma omp for 2977 for (int i = 0; i < 10; ++i) { 2978 #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?}} 2979 bar(); 2980 } 2981 #pragma omp for ordered 2982 for (int i = 0; i < 10; ++i) { 2983 #pragma omp ordered // OK 2984 bar(); 2985 } 2986 #pragma omp for 2987 for (int i = 0; i < 10; ++i) { 2988 #pragma omp atomic 2989 ++a; 2990 } 2991 #pragma omp for 2992 for (int i = 0; i < 10; ++i) { 2993 #pragma omp target 2994 ++a; 2995 } 2996 #pragma omp for 2997 for (int i = 0; i < 10; ++i) { 2998 #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?}} 2999 ++a; 3000 } 3001 #pragma omp for 3002 for (int i = 0; i < 10; ++i) { 3003 #pragma omp taskloop 3004 for (int i = 0; i < 10; ++i) 3005 ++a; 3006 } 3007 3008 // FOR SIMD DIRECTIVE 3009 #pragma omp for simd 3010 for (int i = 0; i < 10; ++i) { 3011 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3012 for (int i = 0; i < 10; ++i) 3013 ; 3014 } 3015 #pragma omp for simd 3016 for (int i = 0; i < 10; ++i) { 3017 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3018 for (int i = 0; i < 10; ++i) 3019 ; 3020 } 3021 #pragma omp for simd 3022 for (int i = 0; i < 10; ++i) { 3023 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3024 for (int i = 0; i < 10; ++i) 3025 ; 3026 } 3027 #pragma omp for simd 3028 for (int i = 0; i < 10; ++i) { 3029 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3030 for (int i = 0; i < 10; ++i) 3031 ; 3032 } 3033 #pragma omp for simd 3034 for (int i = 0; i < 10; ++i) { 3035 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3036 { 3037 bar(); 3038 } 3039 } 3040 #pragma omp for simd 3041 for (int i = 0; i < 10; ++i) { 3042 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3043 { 3044 bar(); 3045 } 3046 } 3047 #pragma omp for simd 3048 for (int i = 0; i < 10; ++i) { 3049 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3050 bar(); 3051 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3052 bar(); 3053 } 3054 #pragma omp for simd 3055 for (int i = 0; i < 10; ++i) { 3056 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3057 bar(); 3058 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3059 bar(); 3060 } 3061 #pragma omp for simd 3062 for (int i = 0; i < 10; ++i) { 3063 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3064 for (int i = 0; i < 10; ++i) 3065 ; 3066 } 3067 #pragma omp for simd 3068 for (int i = 0; i < 10; ++i) { 3069 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3070 for (int i = 0; i < 10; ++i) 3071 ; 3072 } 3073 #pragma omp for simd 3074 for (int i = 0; i < 10; ++i) { 3075 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3076 { 3077 bar(); 3078 } 3079 } 3080 #pragma omp for simd 3081 for (int i = 0; i < 10; ++i) { 3082 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3083 { 3084 bar(); 3085 } 3086 } 3087 #pragma omp for simd 3088 for (int i = 0; i < 10; ++i) { 3089 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3090 bar(); 3091 } 3092 #pragma omp for simd 3093 for (int i = 0; i < 10; ++i) { 3094 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3095 bar(); 3096 } 3097 #pragma omp for simd 3098 for (int i = 0; i < 10; ++i) { 3099 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3100 bar(); 3101 } 3102 #pragma omp for simd 3103 for (int i = 0; i < 10; ++i) { 3104 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3105 bar(); 3106 } 3107 #pragma omp for simd 3108 for (int i = 0; i < 10; ++i) { 3109 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3110 bar(); 3111 } 3112 #pragma omp for simd 3113 for (int i = 0; i < 10; ++i) { 3114 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3115 ++a; 3116 } 3117 #pragma omp for simd 3118 for (int i = 0; i < 10; ++i) { 3119 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3120 ++a; 3121 } 3122 #pragma omp for simd 3123 for (int i = 0; i < 10; ++i) { 3124 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3125 ++a; 3126 } 3127 #pragma omp for simd 3128 for (int i = 0; i < 10; ++i) { 3129 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 3130 for (int i = 0; i < 10; ++i) 3131 ++a; 3132 } 3133 3134 // SECTIONS DIRECTIVE 3135 #pragma omp sections 3136 { 3137 #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?}} 3138 for (int i = 0; i < 10; ++i) 3139 ; 3140 } 3141 #pragma omp sections 3142 { 3143 #pragma omp simd 3144 for (int i = 0; i < 10; ++i) 3145 ; 3146 } 3147 #pragma omp sections 3148 { 3149 #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?}} 3150 for (int i = 0; i < 10; ++i) 3151 ; 3152 } 3153 #pragma omp sections 3154 { 3155 #pragma omp parallel 3156 for (int i = 0; i < 10; ++i) 3157 ; 3158 } 3159 #pragma omp sections 3160 { 3161 #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?}} 3162 { 3163 bar(); 3164 } 3165 } 3166 #pragma omp sections 3167 { 3168 #pragma omp section 3169 { 3170 bar(); 3171 } 3172 } 3173 #pragma omp sections 3174 { 3175 #pragma omp critical 3176 bar(); 3177 #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?}} 3178 bar(); 3179 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}} 3180 bar(); 3181 } 3182 #pragma omp sections 3183 { 3184 #pragma omp parallel 3185 { 3186 #pragma omp single // OK 3187 { 3188 bar(); 3189 } 3190 #pragma omp for // OK 3191 for (int i = 0; i < 10; ++i) 3192 ; 3193 #pragma omp for simd // OK 3194 for (int i = 0; i < 10; ++i) 3195 ; 3196 #pragma omp sections // OK 3197 { 3198 bar(); 3199 } 3200 } 3201 } 3202 #pragma omp sections 3203 { 3204 #pragma omp parallel for 3205 for (int i = 0; i < 10; ++i) 3206 ; 3207 } 3208 #pragma omp sections 3209 { 3210 #pragma omp parallel for simd 3211 for (int i = 0; i < 10; ++i) 3212 ; 3213 } 3214 #pragma omp sections 3215 { 3216 #pragma omp parallel sections 3217 { 3218 bar(); 3219 } 3220 } 3221 #pragma omp sections 3222 { 3223 #pragma omp task 3224 { 3225 bar(); 3226 } 3227 } 3228 #pragma omp sections 3229 { 3230 #pragma omp taskyield 3231 } 3232 #pragma omp sections 3233 { 3234 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}} 3235 bar(); 3236 } 3237 #pragma omp sections 3238 { 3239 #pragma omp taskwait 3240 } 3241 #pragma omp sections 3242 { 3243 #pragma omp flush 3244 } 3245 #pragma omp sections 3246 { 3247 #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?}} 3248 bar(); 3249 } 3250 #pragma omp sections 3251 { 3252 #pragma omp atomic 3253 ++a; 3254 } 3255 #pragma omp sections 3256 { 3257 #pragma omp target 3258 ++a; 3259 } 3260 #pragma omp sections 3261 { 3262 #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?}} 3263 ++a; 3264 } 3265 #pragma omp sections 3266 { 3267 #pragma omp taskloop 3268 for (int i = 0; i < 10; ++i) 3269 ++a; 3270 } 3271 3272 // SECTION DIRECTIVE 3273 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} 3274 { 3275 bar(); 3276 } 3277 #pragma omp sections 3278 { 3279 #pragma omp section 3280 { 3281 #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?}} 3282 for (int i = 0; i < 10; ++i) 3283 ; 3284 } 3285 } 3286 #pragma omp sections 3287 { 3288 #pragma omp section 3289 { 3290 #pragma omp simd 3291 for (int i = 0; i < 10; ++i) 3292 ; 3293 } 3294 } 3295 #pragma omp sections 3296 { 3297 #pragma omp section 3298 { 3299 #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?}} 3300 for (int i = 0; i < 10; ++i) 3301 ; 3302 } 3303 } 3304 #pragma omp sections 3305 { 3306 #pragma omp section 3307 { 3308 #pragma omp parallel 3309 for (int i = 0; i < 10; ++i) 3310 ; 3311 } 3312 } 3313 #pragma omp sections 3314 { 3315 #pragma omp section 3316 { 3317 #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?}} 3318 { 3319 bar(); 3320 } 3321 } 3322 } 3323 #pragma omp sections 3324 { 3325 #pragma omp section 3326 { 3327 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}} 3328 { 3329 bar(); 3330 } 3331 } 3332 } 3333 #pragma omp sections 3334 { 3335 #pragma omp section 3336 { 3337 #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?}} 3338 bar(); 3339 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 3340 bar(); 3341 #pragma omp critical 3342 bar(); 3343 } 3344 } 3345 #pragma omp sections 3346 { 3347 #pragma omp section 3348 { 3349 #pragma omp parallel 3350 { 3351 #pragma omp single // OK 3352 { 3353 bar(); 3354 } 3355 #pragma omp for // OK 3356 for (int i = 0; i < 10; ++i) 3357 ; 3358 #pragma omp for simd // OK 3359 for (int i = 0; i < 10; ++i) 3360 ; 3361 #pragma omp sections // OK 3362 { 3363 bar(); 3364 } 3365 } 3366 } 3367 } 3368 #pragma omp sections 3369 { 3370 #pragma omp section 3371 { 3372 #pragma omp parallel for 3373 for (int i = 0; i < 10; ++i) 3374 ; 3375 } 3376 } 3377 #pragma omp sections 3378 { 3379 #pragma omp section 3380 { 3381 #pragma omp parallel for simd 3382 for (int i = 0; i < 10; ++i) 3383 ; 3384 } 3385 } 3386 #pragma omp sections 3387 { 3388 #pragma omp section 3389 { 3390 #pragma omp parallel sections 3391 { 3392 bar(); 3393 } 3394 } 3395 } 3396 #pragma omp sections 3397 { 3398 #pragma omp section 3399 { 3400 #pragma omp task 3401 { 3402 bar(); 3403 } 3404 } 3405 } 3406 #pragma omp sections 3407 { 3408 #pragma omp section 3409 { 3410 #pragma omp taskyield 3411 bar(); 3412 } 3413 } 3414 #pragma omp sections 3415 { 3416 #pragma omp section 3417 { 3418 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}} 3419 bar(); 3420 } 3421 } 3422 #pragma omp sections 3423 { 3424 #pragma omp section 3425 { 3426 #pragma omp taskwait 3427 bar(); 3428 } 3429 } 3430 #pragma omp sections 3431 { 3432 #pragma omp section 3433 { 3434 #pragma omp flush 3435 bar(); 3436 } 3437 } 3438 #pragma omp sections 3439 { 3440 #pragma omp section 3441 { 3442 #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?}} 3443 bar(); 3444 } 3445 } 3446 #pragma omp sections 3447 { 3448 #pragma omp section 3449 { 3450 #pragma omp atomic 3451 ++a; 3452 } 3453 } 3454 #pragma omp sections 3455 { 3456 #pragma omp section 3457 { 3458 #pragma omp target 3459 ++a; 3460 } 3461 } 3462 #pragma omp sections 3463 { 3464 #pragma omp section 3465 { 3466 #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?}} 3467 ++a; 3468 } 3469 } 3470 #pragma omp sections 3471 { 3472 #pragma omp section 3473 { 3474 #pragma omp taskloop 3475 for (int i = 0; i < 10; ++i) 3476 ++a; 3477 } 3478 } 3479 3480 // SINGLE DIRECTIVE 3481 #pragma omp single 3482 { 3483 #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?}} 3484 for (int i = 0; i < 10; ++i) 3485 ; 3486 } 3487 #pragma omp single 3488 { 3489 #pragma omp simd 3490 for (int i = 0; i < 10; ++i) 3491 ; 3492 } 3493 #pragma omp single 3494 { 3495 #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?}} 3496 for (int i = 0; i < 10; ++i) 3497 ; 3498 } 3499 #pragma omp single 3500 { 3501 #pragma omp parallel 3502 for (int i = 0; i < 10; ++i) 3503 ; 3504 } 3505 #pragma omp single 3506 { 3507 #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?}} 3508 { 3509 bar(); 3510 } 3511 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}} 3512 bar(); 3513 #pragma omp critical 3514 bar(); 3515 } 3516 #pragma omp single 3517 { 3518 #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?}} 3519 { 3520 bar(); 3521 } 3522 } 3523 #pragma omp single 3524 { 3525 #pragma omp parallel 3526 { 3527 #pragma omp single // OK 3528 { 3529 bar(); 3530 } 3531 #pragma omp for // OK 3532 for (int i = 0; i < 10; ++i) 3533 ; 3534 #pragma omp for simd // OK 3535 for (int i = 0; i < 10; ++i) 3536 ; 3537 #pragma omp sections // OK 3538 { 3539 bar(); 3540 } 3541 } 3542 } 3543 #pragma omp single 3544 { 3545 #pragma omp parallel for 3546 for (int i = 0; i < 10; ++i) 3547 ; 3548 } 3549 #pragma omp single 3550 { 3551 #pragma omp parallel for simd 3552 for (int i = 0; i < 10; ++i) 3553 ; 3554 } 3555 #pragma omp single 3556 { 3557 #pragma omp parallel sections 3558 { 3559 bar(); 3560 } 3561 } 3562 #pragma omp single 3563 { 3564 #pragma omp task 3565 { 3566 bar(); 3567 } 3568 } 3569 #pragma omp single 3570 { 3571 #pragma omp taskyield 3572 bar(); 3573 } 3574 #pragma omp single 3575 { 3576 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}} 3577 bar(); 3578 } 3579 #pragma omp single 3580 { 3581 #pragma omp taskwait 3582 bar(); 3583 } 3584 #pragma omp single 3585 { 3586 #pragma omp flush 3587 bar(); 3588 } 3589 #pragma omp single 3590 { 3591 #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?}} 3592 bar(); 3593 } 3594 #pragma omp single 3595 { 3596 #pragma omp atomic 3597 ++a; 3598 } 3599 #pragma omp single 3600 { 3601 #pragma omp target 3602 ++a; 3603 } 3604 #pragma omp single 3605 { 3606 #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?}} 3607 ++a; 3608 } 3609 #pragma omp single 3610 { 3611 #pragma omp taskloop 3612 for (int i = 0; i < 10; ++i) 3613 ++a; 3614 } 3615 3616 // MASTER DIRECTIVE 3617 #pragma omp master 3618 { 3619 #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?}} 3620 for (int i = 0; i < 10; ++i) 3621 ; 3622 } 3623 #pragma omp master 3624 { 3625 #pragma omp simd 3626 for (int i = 0; i < 10; ++i) 3627 ; 3628 } 3629 #pragma omp master 3630 { 3631 #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?}} 3632 for (int i = 0; i < 10; ++i) 3633 ; 3634 } 3635 #pragma omp master 3636 { 3637 #pragma omp parallel 3638 for (int i = 0; i < 10; ++i) 3639 ; 3640 } 3641 #pragma omp master 3642 { 3643 #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?}} 3644 { 3645 bar(); 3646 } 3647 } 3648 #pragma omp master 3649 { 3650 #pragma omp master // OK, though second 'master' is redundant 3651 { 3652 bar(); 3653 } 3654 } 3655 #pragma omp master 3656 { 3657 #pragma omp critical 3658 { 3659 bar(); 3660 } 3661 } 3662 #pragma omp master 3663 { 3664 #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?}} 3665 { 3666 bar(); 3667 } 3668 } 3669 #pragma omp master 3670 { 3671 #pragma omp parallel 3672 { 3673 #pragma omp master // OK 3674 { 3675 bar(); 3676 } 3677 #pragma omp for // OK 3678 for (int i = 0; i < 10; ++i) 3679 ; 3680 #pragma omp for simd // OK 3681 for (int i = 0; i < 10; ++i) 3682 ; 3683 #pragma omp sections // OK 3684 { 3685 bar(); 3686 } 3687 } 3688 } 3689 #pragma omp master 3690 { 3691 #pragma omp parallel for 3692 for (int i = 0; i < 10; ++i) 3693 ; 3694 } 3695 #pragma omp master 3696 { 3697 #pragma omp parallel for simd 3698 for (int i = 0; i < 10; ++i) 3699 ; 3700 } 3701 #pragma omp master 3702 { 3703 #pragma omp parallel sections 3704 { 3705 bar(); 3706 } 3707 } 3708 #pragma omp master 3709 { 3710 #pragma omp task 3711 { 3712 bar(); 3713 } 3714 } 3715 #pragma omp master 3716 { 3717 #pragma omp taskyield 3718 bar(); 3719 } 3720 #pragma omp master 3721 { 3722 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}} 3723 bar(); 3724 } 3725 #pragma omp master 3726 { 3727 #pragma omp taskwait 3728 bar(); 3729 } 3730 #pragma omp master 3731 { 3732 #pragma omp flush 3733 bar(); 3734 } 3735 #pragma omp master 3736 { 3737 #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?}} 3738 bar(); 3739 } 3740 #pragma omp master 3741 { 3742 #pragma omp atomic 3743 ++a; 3744 } 3745 #pragma omp master 3746 { 3747 #pragma omp target 3748 ++a; 3749 } 3750 #pragma omp master 3751 { 3752 #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?}} 3753 ++a; 3754 } 3755 #pragma omp master 3756 { 3757 #pragma omp taskloop 3758 for (int i = 0; i < 10; ++i) 3759 ++a; 3760 } 3761 3762 // CRITICAL DIRECTIVE 3763 #pragma omp critical 3764 { 3765 #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?}} 3766 for (int i = 0; i < 10; ++i) 3767 ; 3768 } 3769 #pragma omp critical 3770 { 3771 #pragma omp simd 3772 for (int i = 0; i < 10; ++i) 3773 ; 3774 } 3775 #pragma omp critical 3776 { 3777 #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?}} 3778 for (int i = 0; i < 10; ++i) 3779 ; 3780 } 3781 #pragma omp critical 3782 { 3783 #pragma omp parallel 3784 for (int i = 0; i < 10; ++i) 3785 ; 3786 } 3787 #pragma omp critical 3788 { 3789 #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?}} 3790 { 3791 bar(); 3792 } 3793 } 3794 #pragma omp critical 3795 { 3796 #pragma omp master // OK, though second 'master' is redundant 3797 { 3798 bar(); 3799 } 3800 } 3801 #pragma omp critical 3802 { 3803 #pragma omp critical 3804 { 3805 bar(); 3806 } 3807 } 3808 #pragma omp critical 3809 { 3810 #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?}} 3811 { 3812 bar(); 3813 } 3814 } 3815 #pragma omp critical 3816 { 3817 #pragma omp parallel 3818 { 3819 #pragma omp master // OK 3820 { 3821 bar(); 3822 } 3823 #pragma omp for // OK 3824 for (int i = 0; i < 10; ++i) 3825 ; 3826 #pragma omp for simd // OK 3827 for (int i = 0; i < 10; ++i) 3828 ; 3829 #pragma omp sections // OK 3830 { 3831 bar(); 3832 } 3833 } 3834 } 3835 #pragma omp critical 3836 { 3837 #pragma omp parallel for 3838 for (int i = 0; i < 10; ++i) 3839 ; 3840 } 3841 #pragma omp critical 3842 { 3843 #pragma omp parallel for simd 3844 for (int i = 0; i < 10; ++i) 3845 ; 3846 } 3847 #pragma omp critical 3848 { 3849 #pragma omp parallel sections 3850 { 3851 bar(); 3852 } 3853 } 3854 #pragma omp critical 3855 { 3856 #pragma omp task 3857 { 3858 bar(); 3859 } 3860 } 3861 #pragma omp critical 3862 { 3863 #pragma omp taskyield 3864 bar(); 3865 } 3866 #pragma omp critical 3867 { 3868 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}} 3869 bar(); 3870 } 3871 #pragma omp critical 3872 { 3873 #pragma omp taskwait 3874 bar(); 3875 } 3876 #pragma omp critical(Belka) 3877 { 3878 #pragma omp critical(Strelka) 3879 bar(); 3880 } 3881 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}} 3882 { 3883 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}} 3884 { 3885 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}} 3886 { 3887 #pragma omp parallel 3888 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}} 3889 { 3890 bar(); 3891 } 3892 } 3893 } 3894 } 3895 #pragma omp critical 3896 { 3897 #pragma omp flush 3898 bar(); 3899 } 3900 #pragma omp critical 3901 { 3902 #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?}} 3903 bar(); 3904 } 3905 #pragma omp critical 3906 { 3907 #pragma omp atomic 3908 ++a; 3909 } 3910 #pragma omp critical 3911 { 3912 #pragma omp target 3913 ++a; 3914 } 3915 #pragma omp critical 3916 { 3917 #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?}} 3918 ++a; 3919 } 3920 #pragma omp critical 3921 { 3922 #pragma omp taskloop 3923 for (int i = 0; i < 10; ++i) 3924 ++a; 3925 } 3926 3927 // PARALLEL FOR DIRECTIVE 3928 #pragma omp parallel for 3929 for (int i = 0; i < 10; ++i) { 3930 #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?}} 3931 for (int i = 0; i < 10; ++i) 3932 ; 3933 } 3934 #pragma omp parallel for 3935 for (int i = 0; i < 10; ++i) { 3936 #pragma omp simd 3937 for (int i = 0; i < 10; ++i) 3938 ; 3939 } 3940 #pragma omp parallel for 3941 for (int i = 0; i < 10; ++i) { 3942 #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?}} 3943 for (int i = 0; i < 10; ++i) 3944 ; 3945 } 3946 3947 #pragma omp parallel for 3948 for (int i = 0; i < 10; ++i) { 3949 #pragma omp parallel 3950 for (int i = 0; i < 10; ++i) 3951 ; 3952 } 3953 #pragma omp parallel for 3954 for (int i = 0; i < 10; ++i) { 3955 #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?}} 3956 { 3957 bar(); 3958 } 3959 } 3960 #pragma omp parallel for 3961 for (int i = 0; i < 10; ++i) { 3962 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} 3963 { 3964 bar(); 3965 } 3966 } 3967 #pragma omp parallel for 3968 for (int i = 0; i < 10; ++i) { 3969 #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?}} 3970 { 3971 bar(); 3972 } 3973 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}} 3974 { 3975 bar(); 3976 } 3977 #pragma omp critical 3978 { 3979 bar(); 3980 } 3981 } 3982 #pragma omp parallel for 3983 for (int i = 0; i < 10; ++i) { 3984 #pragma omp parallel 3985 { 3986 #pragma omp single // OK 3987 { 3988 bar(); 3989 } 3990 #pragma omp master // OK 3991 { 3992 bar(); 3993 } 3994 #pragma omp critical // OK 3995 { 3996 bar(); 3997 } 3998 #pragma omp for // OK 3999 for (int i = 0; i < 10; ++i) 4000 ; 4001 #pragma omp for simd // OK 4002 for (int i = 0; i < 10; ++i) 4003 ; 4004 #pragma omp sections // OK 4005 { 4006 bar(); 4007 } 4008 } 4009 } 4010 #pragma omp parallel for 4011 for (int i = 0; i < 10; ++i) { 4012 #pragma omp parallel for 4013 for (int i = 0; i < 10; ++i) 4014 ; 4015 } 4016 #pragma omp parallel for 4017 for (int i = 0; i < 10; ++i) { 4018 #pragma omp parallel for simd 4019 for (int i = 0; i < 10; ++i) 4020 ; 4021 } 4022 #pragma omp parallel for 4023 for (int i = 0; i < 10; ++i) { 4024 #pragma omp parallel sections 4025 { 4026 bar(); 4027 } 4028 } 4029 #pragma omp parallel for 4030 for (int i = 0; i < 10; ++i) { 4031 #pragma omp task 4032 { 4033 bar(); 4034 } 4035 } 4036 #pragma omp parallel for 4037 for (int i = 0; i < 10; ++i) { 4038 #pragma omp taskyield 4039 bar(); 4040 } 4041 #pragma omp parallel for 4042 for (int i = 0; i < 10; ++i) { 4043 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}} 4044 bar(); 4045 } 4046 #pragma omp parallel for 4047 for (int i = 0; i < 10; ++i) { 4048 #pragma omp taskwait 4049 bar(); 4050 } 4051 #pragma omp parallel for 4052 for (int i = 0; i < 10; ++i) { 4053 #pragma omp flush 4054 bar(); 4055 } 4056 #pragma omp parallel for 4057 for (int i = 0; i < 10; ++i) { 4058 #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?}} 4059 bar(); 4060 } 4061 #pragma omp parallel for ordered 4062 for (int i = 0; i < 10; ++i) { 4063 #pragma omp ordered // OK 4064 bar(); 4065 } 4066 #pragma omp parallel for 4067 for (int i = 0; i < 10; ++i) { 4068 #pragma omp atomic 4069 ++a; 4070 } 4071 #pragma omp parallel for 4072 for (int i = 0; i < 10; ++i) { 4073 #pragma omp target 4074 ++a; 4075 } 4076 #pragma omp parallel for 4077 for (int i = 0; i < 10; ++i) { 4078 #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?}} 4079 ++a; 4080 } 4081 #pragma omp parallel for 4082 for (int i = 0; i < 10; ++i) { 4083 #pragma omp taskloop 4084 for (int i = 0; i < 10; ++i) 4085 ++a; 4086 } 4087 4088 // PARALLEL FOR SIMD DIRECTIVE 4089 #pragma omp parallel for simd 4090 for (int i = 0; i < 10; ++i) { 4091 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4092 for (int i = 0; i < 10; ++i) 4093 ; 4094 } 4095 #pragma omp parallel for simd 4096 for (int i = 0; i < 10; ++i) { 4097 #pragma omp simd// expected-error {{OpenMP constructs may not be nested inside a simd region}} 4098 for (int i = 0; i < 10; ++i) 4099 ; 4100 } 4101 #pragma omp parallel for simd 4102 for (int i = 0; i < 10; ++i) { 4103 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4104 for (int i = 0; i < 10; ++i) 4105 ; 4106 } 4107 #pragma omp parallel for simd 4108 for (int i = 0; i < 10; ++i) { 4109 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4110 for (int i = 0; i < 10; ++i) 4111 ; 4112 } 4113 #pragma omp parallel for simd 4114 for (int i = 0; i < 10; ++i) { 4115 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4116 { 4117 bar(); 4118 } 4119 } 4120 #pragma omp parallel for simd 4121 for (int i = 0; i < 10; ++i) { 4122 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4123 { 4124 bar(); 4125 } 4126 } 4127 #pragma omp parallel for simd 4128 for (int i = 0; i < 10; ++i) { 4129 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4130 { 4131 bar(); 4132 } 4133 } 4134 4135 #pragma omp parallel for simd 4136 for (int i = 0; i < 10; ++i) { 4137 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4138 { 4139 bar(); 4140 } 4141 } 4142 4143 #pragma omp parallel for simd 4144 for (int i = 0; i < 10; ++i) { 4145 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4146 { 4147 bar(); 4148 } 4149 } 4150 4151 #pragma omp parallel for simd 4152 for (int i = 0; i < 10; ++i) { 4153 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4154 { 4155 #pragma omp single 4156 { 4157 bar(); 4158 } 4159 #pragma omp for 4160 for (int i = 0; i < 10; ++i) 4161 ; 4162 #pragma omp for simd 4163 for (int i = 0; i < 10; ++i) 4164 ; 4165 #pragma omp sections 4166 { 4167 bar(); 4168 } 4169 } 4170 } 4171 #pragma omp parallel for simd 4172 for (int i = 0; i < 10; ++i) { 4173 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4174 for (int i = 0; i < 10; ++i) 4175 ; 4176 } 4177 #pragma omp parallel for simd 4178 for (int i = 0; i < 10; ++i) { 4179 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}} 4180 for (int i = 0; i < 10; ++i) 4181 ; 4182 } 4183 #pragma omp parallel for simd 4184 for (int i = 0; i < 10; ++i) { 4185 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4186 { 4187 bar(); 4188 } 4189 } 4190 #pragma omp parallel for simd 4191 for (int i = 0; i < 10; ++i) { 4192 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4193 { 4194 bar(); 4195 } 4196 } 4197 #pragma omp parallel for simd 4198 for (int i = 0; i < 10; ++i) { 4199 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4200 bar(); 4201 } 4202 #pragma omp parallel for simd 4203 for (int i = 0; i < 10; ++i) { 4204 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4205 bar(); 4206 } 4207 #pragma omp parallel for simd 4208 for (int i = 0; i < 10; ++i) { 4209 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4210 bar(); 4211 } 4212 #pragma omp parallel for simd 4213 for (int i = 0; i < 10; ++i) { 4214 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4215 bar(); 4216 } 4217 #pragma omp parallel for simd 4218 for (int i = 0; i < 10; ++i) { 4219 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4220 bar(); 4221 } 4222 #pragma omp parallel for simd 4223 for (int i = 0; i < 10; ++i) { 4224 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4225 bar(); 4226 } 4227 #pragma omp parallel for simd 4228 for (int i = 0; i < 10; ++i) { 4229 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4230 ++a; 4231 } 4232 #pragma omp parallel for simd 4233 for (int i = 0; i < 10; ++i) { 4234 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4235 ++a; 4236 } 4237 #pragma omp parallel for simd 4238 for (int i = 0; i < 10; ++i) { 4239 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4240 ++a; 4241 } 4242 #pragma omp parallel for simd 4243 for (int i = 0; i < 10; ++i) { 4244 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}} 4245 for (int i = 0; i < 10; ++i) 4246 ++a; 4247 } 4248 4249 // PARALLEL SECTIONS DIRECTIVE 4250 #pragma omp parallel sections 4251 { 4252 #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?}} 4253 for (int i = 0; i < 10; ++i) 4254 ; 4255 } 4256 #pragma omp parallel sections 4257 { 4258 #pragma omp simd 4259 for (int i = 0; i < 10; ++i) 4260 ; 4261 } 4262 #pragma omp parallel sections 4263 { 4264 #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?}} 4265 for (int i = 0; i < 10; ++i) 4266 ; 4267 } 4268 #pragma omp parallel sections 4269 { 4270 #pragma omp parallel 4271 for (int i = 0; i < 10; ++i) 4272 ; 4273 } 4274 #pragma omp parallel sections 4275 { 4276 #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?}} 4277 { 4278 bar(); 4279 } 4280 } 4281 #pragma omp parallel sections 4282 { 4283 #pragma omp section 4284 { 4285 bar(); 4286 } 4287 } 4288 #pragma omp parallel sections 4289 { 4290 #pragma omp section 4291 { 4292 #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?}} 4293 bar(); 4294 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}} 4295 bar(); 4296 #pragma omp critical 4297 bar(); 4298 } 4299 } 4300 #pragma omp parallel sections 4301 { 4302 #pragma omp parallel 4303 { 4304 #pragma omp single // OK 4305 { 4306 bar(); 4307 } 4308 #pragma omp master // OK 4309 { 4310 bar(); 4311 } 4312 #pragma omp critical // OK 4313 { 4314 bar(); 4315 } 4316 #pragma omp for // OK 4317 for (int i = 0; i < 10; ++i) 4318 ; 4319 #pragma omp for simd // OK 4320 for (int i = 0; i < 10; ++i) 4321 ; 4322 #pragma omp sections // OK 4323 { 4324 bar(); 4325 } 4326 } 4327 } 4328 #pragma omp parallel sections 4329 { 4330 #pragma omp parallel for 4331 for (int i = 0; i < 10; ++i) 4332 ; 4333 } 4334 #pragma omp parallel sections 4335 { 4336 #pragma omp parallel for simd 4337 for (int i = 0; i < 10; ++i) 4338 ; 4339 } 4340 #pragma omp parallel sections 4341 { 4342 #pragma omp parallel sections 4343 { 4344 bar(); 4345 } 4346 } 4347 #pragma omp parallel sections 4348 { 4349 #pragma omp task 4350 { 4351 bar(); 4352 } 4353 } 4354 #pragma omp parallel sections 4355 { 4356 #pragma omp taskyield 4357 } 4358 #pragma omp parallel sections 4359 { 4360 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}} 4361 } 4362 #pragma omp parallel sections 4363 { 4364 #pragma omp taskwait 4365 } 4366 #pragma omp parallel sections 4367 { 4368 #pragma omp flush 4369 } 4370 #pragma omp parallel sections 4371 { 4372 #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?}} 4373 bar(); 4374 } 4375 #pragma omp parallel sections 4376 { 4377 #pragma omp atomic 4378 ++a; 4379 } 4380 #pragma omp parallel sections 4381 { 4382 #pragma omp target 4383 ++a; 4384 } 4385 #pragma omp parallel sections 4386 { 4387 #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?}} 4388 ++a; 4389 } 4390 #pragma omp parallel sections 4391 { 4392 #pragma omp taskloop 4393 for (int i = 0; i < 10; ++i) 4394 ++a; 4395 } 4396 4397 // TASK DIRECTIVE 4398 #pragma omp task 4399 #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?}} 4400 for (int i = 0; i < 10; ++i) 4401 ; 4402 #pragma omp task 4403 #pragma omp simd 4404 for (int i = 0; i < 10; ++i) 4405 ; 4406 #pragma omp task 4407 #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?}} 4408 for (int i = 0; i < 10; ++i) 4409 ; 4410 #pragma omp task 4411 #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?}} 4412 { 4413 bar(); 4414 } 4415 #pragma omp task 4416 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}} 4417 { 4418 bar(); 4419 } 4420 #pragma omp task 4421 #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?}} 4422 bar(); 4423 #pragma omp task 4424 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}} 4425 bar(); 4426 #pragma omp task 4427 #pragma omp critical 4428 bar(); 4429 #pragma omp task 4430 #pragma omp parallel for 4431 for (int i = 0; i < 10; ++i) 4432 ; 4433 #pragma omp task 4434 #pragma omp parallel for simd 4435 for (int i = 0; i < 10; ++i) 4436 ; 4437 #pragma omp task 4438 #pragma omp parallel sections 4439 { 4440 bar(); 4441 } 4442 #pragma omp task 4443 #pragma omp task 4444 { 4445 bar(); 4446 } 4447 #pragma omp task 4448 { 4449 #pragma omp taskyield 4450 bar(); 4451 } 4452 #pragma omp task 4453 { 4454 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}} 4455 bar(); 4456 } 4457 #pragma omp task 4458 { 4459 #pragma omp taskwait 4460 bar(); 4461 } 4462 #pragma omp task 4463 { 4464 #pragma omp flush 4465 bar(); 4466 } 4467 #pragma omp task 4468 { 4469 #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?}} 4470 bar(); 4471 } 4472 #pragma omp task 4473 { 4474 #pragma omp atomic 4475 ++a; 4476 } 4477 #pragma omp task 4478 { 4479 #pragma omp target 4480 ++a; 4481 } 4482 #pragma omp task 4483 { 4484 #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?}} 4485 ++a; 4486 } 4487 #pragma omp task 4488 { 4489 #pragma omp taskloop 4490 for (int i = 0; i < 10; ++i) 4491 ++a; 4492 } 4493 4494 // ATOMIC DIRECTIVE 4495 #pragma omp atomic 4496 // 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}} 4497 // expected-note@+1 {{expected an expression statement}} 4498 { 4499 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4500 for (int i = 0; i < 10; ++i) 4501 ; 4502 } 4503 #pragma omp atomic 4504 // 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}} 4505 // expected-note@+1 {{expected an expression statement}} 4506 { 4507 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4508 for (int i = 0; i < 10; ++i) 4509 ; 4510 } 4511 #pragma omp atomic 4512 // 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}} 4513 // expected-note@+1 {{expected an expression statement}} 4514 { 4515 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4516 for (int i = 0; i < 10; ++i) 4517 ; 4518 } 4519 #pragma omp atomic 4520 // 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}} 4521 // expected-note@+1 {{expected an expression statement}} 4522 { 4523 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4524 for (int i = 0; i < 10; ++i) 4525 ; 4526 } 4527 #pragma omp atomic 4528 // 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}} 4529 // expected-note@+1 {{expected an expression statement}} 4530 { 4531 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4532 { 4533 bar(); 4534 } 4535 } 4536 #pragma omp atomic 4537 // 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}} 4538 // expected-note@+1 {{expected an expression statement}} 4539 { 4540 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4541 { 4542 bar(); 4543 } 4544 } 4545 #pragma omp atomic 4546 // 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}} 4547 // expected-note@+1 {{expected an expression statement}} 4548 { 4549 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4550 { 4551 bar(); 4552 } 4553 } 4554 #pragma omp atomic 4555 // 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}} 4556 // expected-note@+1 {{expected an expression statement}} 4557 { 4558 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4559 { 4560 bar(); 4561 } 4562 } 4563 #pragma omp atomic 4564 // 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}} 4565 // expected-note@+1 {{expected an expression statement}} 4566 { 4567 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4568 { 4569 bar(); 4570 } 4571 } 4572 #pragma omp atomic 4573 // 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}} 4574 // expected-note@+1 {{expected an expression statement}} 4575 { 4576 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4577 for (int i = 0; i < 10; ++i) 4578 ; 4579 } 4580 #pragma omp atomic 4581 // 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}} 4582 // expected-note@+1 {{expected an expression statement}} 4583 { 4584 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4585 for (int i = 0; i < 10; ++i) 4586 ; 4587 } 4588 #pragma omp atomic 4589 // 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}} 4590 // expected-note@+1 {{expected an expression statement}} 4591 { 4592 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4593 { 4594 bar(); 4595 } 4596 } 4597 #pragma omp atomic 4598 // 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}} 4599 // expected-note@+1 {{expected an expression statement}} 4600 { 4601 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4602 { 4603 bar(); 4604 } 4605 } 4606 #pragma omp atomic 4607 // 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}} 4608 // expected-note@+1 {{expected an expression statement}} 4609 { 4610 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4611 bar(); 4612 } 4613 #pragma omp atomic 4614 // 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}} 4615 // expected-note@+1 {{expected an expression statement}} 4616 { 4617 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4618 bar(); 4619 } 4620 #pragma omp atomic 4621 // 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}} 4622 // expected-note@+1 {{expected an expression statement}} 4623 { 4624 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4625 bar(); 4626 } 4627 #pragma omp atomic 4628 // 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}} 4629 // expected-note@+1 {{expected an expression statement}} 4630 { 4631 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4632 bar(); 4633 } 4634 #pragma omp atomic 4635 // 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}} 4636 // expected-note@+1 {{expected an expression statement}} 4637 { 4638 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4639 bar(); 4640 } 4641 #pragma omp atomic 4642 // 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}} 4643 // expected-note@+1 {{expected an expression statement}} 4644 { 4645 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4646 ++a; 4647 } 4648 #pragma omp atomic 4649 // 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}} 4650 // expected-note@+1 {{expected an expression statement}} 4651 { 4652 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4653 ++a; 4654 } 4655 #pragma omp atomic 4656 // 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}} 4657 // expected-note@+1 {{expected an expression statement}} 4658 { 4659 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4660 ++a; 4661 } 4662 #pragma omp atomic 4663 // 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}} 4664 // expected-note@+1 {{expected an expression statement}} 4665 { 4666 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}} 4667 for (int i = 0; i < 10; ++i) 4668 ++a; 4669 } 4670 4671 // TARGET DIRECTIVE 4672 #pragma omp target 4673 #pragma omp parallel 4674 bar(); 4675 #pragma omp target 4676 #pragma omp for 4677 for (int i = 0; i < 10; ++i) 4678 ; 4679 #pragma omp target 4680 #pragma omp simd 4681 for (int i = 0; i < 10; ++i) 4682 ; 4683 #pragma omp target 4684 #pragma omp for simd 4685 for (int i = 0; i < 10; ++i) 4686 ; 4687 #pragma omp target 4688 #pragma omp sections 4689 { 4690 bar(); 4691 } 4692 #pragma omp target 4693 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}} 4694 { 4695 bar(); 4696 } 4697 #pragma omp target 4698 #pragma omp single 4699 bar(); 4700 4701 #pragma omp target 4702 #pragma omp master 4703 { 4704 bar(); 4705 } 4706 #pragma omp target 4707 #pragma omp critical 4708 { 4709 bar(); 4710 } 4711 #pragma omp target 4712 #pragma omp parallel for 4713 for (int i = 0; i < 10; ++i) 4714 ; 4715 #pragma omp target 4716 #pragma omp parallel for simd 4717 for (int i = 0; i < 10; ++i) 4718 ; 4719 #pragma omp target 4720 #pragma omp parallel sections 4721 { 4722 bar(); 4723 } 4724 #pragma omp target 4725 #pragma omp task 4726 { 4727 bar(); 4728 } 4729 #pragma omp target 4730 { 4731 #pragma omp taskyield 4732 bar(); 4733 } 4734 #pragma omp target 4735 { 4736 #pragma omp barrier 4737 bar(); 4738 } 4739 #pragma omp target 4740 { 4741 #pragma omp taskwait 4742 bar(); 4743 } 4744 #pragma omp target 4745 { 4746 #pragma omp flush 4747 bar(); 4748 } 4749 #pragma omp target 4750 { 4751 #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?}} 4752 bar(); 4753 } 4754 #pragma omp target 4755 { 4756 #pragma omp atomic 4757 ++a; 4758 } 4759 #pragma omp target 4760 { 4761 #pragma omp target 4762 ++a; 4763 } 4764 #pragma omp target 4765 { 4766 #pragma omp teams 4767 ++a; 4768 } 4769 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}} 4770 { 4771 ++a; // expected-note {{statement outside teams construct here}} 4772 #pragma omp teams // expected-note {{nested teams construct here}} 4773 ++a; 4774 } 4775 #pragma omp target 4776 { 4777 #pragma omp taskloop 4778 for (int i = 0; i < 10; ++i) 4779 ++a; 4780 } 4781 4782 // TEAMS DIRECTIVE 4783 #pragma omp target 4784 #pragma omp teams 4785 #pragma omp parallel 4786 bar(); 4787 #pragma omp target 4788 #pragma omp teams 4789 #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?}} 4790 for (int i = 0; i < 10; ++i) 4791 ; 4792 #pragma omp target 4793 #pragma omp teams 4794 #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?}} 4795 for (int i = 0; i < 10; ++i) 4796 ; 4797 #pragma omp target 4798 #pragma omp teams 4799 #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?}} 4800 for (int i = 0; i < 10; ++i) 4801 ; 4802 #pragma omp target 4803 #pragma omp teams 4804 #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?}} 4805 { 4806 bar(); 4807 } 4808 #pragma omp target 4809 #pragma omp teams 4810 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}} 4811 { 4812 bar(); 4813 } 4814 #pragma omp target 4815 #pragma omp teams 4816 #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?}} 4817 bar(); 4818 4819 #pragma omp target 4820 #pragma omp teams 4821 #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?}} 4822 { 4823 bar(); 4824 } 4825 #pragma omp target 4826 #pragma omp teams 4827 #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?}} 4828 { 4829 bar(); 4830 } 4831 #pragma omp target 4832 #pragma omp teams 4833 #pragma omp parallel for 4834 for (int i = 0; i < 10; ++i) 4835 ; 4836 #pragma omp target 4837 #pragma omp teams 4838 #pragma omp parallel for simd 4839 for (int i = 0; i < 10; ++i) 4840 ; 4841 #pragma omp target 4842 #pragma omp teams 4843 #pragma omp parallel sections 4844 { 4845 bar(); 4846 } 4847 #pragma omp target 4848 #pragma omp teams 4849 #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?}} 4850 { 4851 bar(); 4852 } 4853 #pragma omp target 4854 #pragma omp teams 4855 { 4856 #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?}} 4857 bar(); 4858 } 4859 #pragma omp target 4860 #pragma omp teams 4861 { 4862 #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?}} 4863 bar(); 4864 } 4865 #pragma omp target 4866 #pragma omp teams 4867 { 4868 #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?}} 4869 bar(); 4870 } 4871 #pragma omp target 4872 #pragma omp teams 4873 { 4874 #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?}} 4875 bar(); 4876 } 4877 #pragma omp target 4878 #pragma omp teams 4879 { 4880 #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?}} 4881 bar(); 4882 } 4883 #pragma omp target 4884 #pragma omp teams 4885 { 4886 #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?}} 4887 ++a; 4888 } 4889 #pragma omp target 4890 #pragma omp teams 4891 { 4892 #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?}} 4893 ++a; 4894 } 4895 #pragma omp target 4896 #pragma omp teams 4897 { 4898 #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?}} 4899 ++a; 4900 } 4901 #pragma omp target 4902 #pragma omp teams 4903 { 4904 #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?}} 4905 for (int i = 0; i < 10; ++i) 4906 ++a; 4907 } 4908 4909 // TASKLOOP DIRECTIVE 4910 #pragma omp taskloop 4911 for (int i = 0; i < 10; ++i) { 4912 #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?}} 4913 for (int i = 0; i < 10; ++i) 4914 ; 4915 } 4916 #pragma omp taskloop 4917 for (int i = 0; i < 10; ++i) { 4918 #pragma omp simd 4919 for (int i = 0; i < 10; ++i) 4920 ; 4921 } 4922 #pragma omp taskloop 4923 for (int i = 0; i < 10; ++i) { 4924 #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?}} 4925 for (int i = 0; i < 10; ++i) 4926 ; 4927 } 4928 #pragma omp taskloop 4929 for (int i = 0; i < 10; ++i) { 4930 #pragma omp parallel 4931 for (int i = 0; i < 10; ++i) 4932 ; 4933 } 4934 #pragma omp taskloop 4935 for (int i = 0; i < 10; ++i) { 4936 #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?}} 4937 { 4938 bar(); 4939 } 4940 } 4941 #pragma omp taskloop 4942 for (int i = 0; i < 10; ++i) { 4943 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}} 4944 { 4945 bar(); 4946 } 4947 } 4948 #pragma omp taskloop 4949 for (int i = 0; i < 10; ++i) { 4950 #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?}} 4951 { 4952 bar(); 4953 } 4954 } 4955 4956 #pragma omp taskloop 4957 for (int i = 0; i < 10; ++i) { 4958 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}} 4959 { 4960 bar(); 4961 } 4962 } 4963 #pragma omp taskloop 4964 for (int i = 0; i < 10; ++i) { 4965 #pragma omp critical 4966 { 4967 bar(); 4968 } 4969 } 4970 #pragma omp taskloop 4971 for (int i = 0; i < 10; ++i) { 4972 #pragma omp parallel 4973 { 4974 #pragma omp single // OK 4975 { 4976 bar(); 4977 } 4978 #pragma omp for // OK 4979 for (int i = 0; i < 10; ++i) 4980 ; 4981 #pragma omp sections // OK 4982 { 4983 bar(); 4984 } 4985 } 4986 } 4987 #pragma omp taskloop 4988 for (int i = 0; i < 10; ++i) { 4989 #pragma omp parallel for 4990 for (int i = 0; i < 10; ++i) 4991 ; 4992 } 4993 #pragma omp taskloop 4994 for (int i = 0; i < 10; ++i) { 4995 #pragma omp parallel for simd 4996 for (int i = 0; i < 10; ++i) 4997 ; 4998 } 4999 #pragma omp taskloop 5000 for (int i = 0; i < 10; ++i) { 5001 #pragma omp parallel sections 5002 { 5003 bar(); 5004 } 5005 } 5006 #pragma omp taskloop 5007 for (int i = 0; i < 10; ++i) { 5008 #pragma omp task 5009 { 5010 bar(); 5011 } 5012 } 5013 #pragma omp taskloop 5014 for (int i = 0; i < 10; ++i) { 5015 #pragma omp taskyield 5016 bar(); 5017 } 5018 #pragma omp taskloop 5019 for (int i = 0; i < 10; ++i) { 5020 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}} 5021 bar(); 5022 } 5023 #pragma omp taskloop 5024 for (int i = 0; i < 10; ++i) { 5025 #pragma omp taskwait 5026 bar(); 5027 } 5028 #pragma omp taskloop 5029 for (int i = 0; i < 10; ++i) { 5030 #pragma omp flush 5031 bar(); 5032 } 5033 #pragma omp taskloop 5034 for (int i = 0; i < 10; ++i) { 5035 #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?}} 5036 bar(); 5037 } 5038 #pragma omp taskloop 5039 for (int i = 0; i < 10; ++i) { 5040 #pragma omp atomic 5041 ++a; 5042 } 5043 #pragma omp taskloop 5044 for (int i = 0; i < 10; ++i) { 5045 #pragma omp target 5046 ++a; 5047 } 5048 #pragma omp taskloop 5049 for (int i = 0; i < 10; ++i) { 5050 #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?}} 5051 ++a; 5052 } 5053 #pragma omp taskloop 5054 for (int i = 0; i < 10; ++i) { 5055 #pragma omp taskloop 5056 for (int i = 0; i < 10; ++i) 5057 ++a; 5058 } 5059 return foo<int>(); 5060 } 5061 5062