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