1 // RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -verify %s 2 3 void bar(); 4 5 template <class T> 6 void foo() { 7 // PARALLEL DIRECTIVE 8 #pragma omp parallel 9 #pragma omp for 10 for (int i = 0; i < 10; ++i) 11 ; 12 #pragma omp parallel 13 #pragma omp simd 14 for (int i = 0; i < 10; ++i) 15 ; 16 #pragma omp parallel 17 #pragma omp sections 18 { 19 bar(); 20 } 21 #pragma omp parallel 22 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}} 23 { 24 bar(); 25 } 26 #pragma omp parallel 27 #pragma omp single 28 bar(); 29 #pragma omp parallel 30 #pragma omp parallel for 31 for (int i = 0; i < 10; ++i) 32 ; 33 #pragma omp parallel 34 #pragma omp parallel sections 35 { 36 bar(); 37 } 38 39 // SIMD DIRECTIVE 40 #pragma omp simd 41 for (int i = 0; i < 10; ++i) { 42 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 43 for (int i = 0; i < 10; ++i) 44 ; 45 } 46 #pragma omp simd 47 for (int i = 0; i < 10; ++i) { 48 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 49 for (int i = 0; i < 10; ++i) 50 ; 51 } 52 #pragma omp simd 53 for (int i = 0; i < 10; ++i) { 54 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 55 for (int i = 0; i < 10; ++i) 56 ; 57 } 58 #pragma omp simd 59 for (int i = 0; i < 10; ++i) { 60 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 61 { 62 bar(); 63 } 64 } 65 #pragma omp simd 66 for (int i = 0; i < 10; ++i) { 67 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 68 { 69 bar(); 70 } 71 } 72 #pragma omp simd 73 for (int i = 0; i < 10; ++i) { 74 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 75 { 76 bar(); 77 } 78 } 79 #pragma omp simd 80 for (int i = 0; i < 10; ++i) { 81 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 82 for (int i = 0; i < 10; ++i) 83 ; 84 } 85 #pragma omp simd 86 for (int i = 0; i < 10; ++i) { 87 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 88 { 89 bar(); 90 } 91 } 92 93 // FOR DIRECTIVE 94 #pragma omp for 95 for (int i = 0; i < 10; ++i) { 96 #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?}} 97 for (int i = 0; i < 10; ++i) 98 ; 99 } 100 #pragma omp for 101 for (int i = 0; i < 10; ++i) { 102 #pragma omp simd 103 for (int i = 0; i < 10; ++i) 104 ; 105 } 106 #pragma omp for 107 for (int i = 0; i < 10; ++i) { 108 #pragma omp parallel 109 for (int i = 0; i < 10; ++i) 110 ; 111 } 112 #pragma omp for 113 for (int i = 0; i < 10; ++i) { 114 #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?}} 115 { 116 bar(); 117 } 118 } 119 #pragma omp for 120 for (int i = 0; i < 10; ++i) { 121 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} 122 { 123 bar(); 124 } 125 } 126 #pragma omp for 127 for (int i = 0; i < 10; ++i) { 128 #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?}} 129 { 130 bar(); 131 } 132 } 133 #pragma omp for 134 for (int i = 0; i < 10; ++i) { 135 #pragma omp parallel 136 { 137 #pragma omp single // OK 138 { 139 bar(); 140 } 141 #pragma omp for // OK 142 for (int i = 0; i < 10; ++i) 143 ; 144 #pragma omp sections // OK 145 { 146 bar(); 147 } 148 } 149 } 150 #pragma omp for 151 for (int i = 0; i < 10; ++i) { 152 #pragma omp parallel for 153 for (int i = 0; i < 10; ++i) 154 ; 155 } 156 #pragma omp for 157 for (int i = 0; i < 10; ++i) { 158 #pragma omp parallel sections 159 { 160 bar(); 161 } 162 } 163 164 // SECTIONS DIRECTIVE 165 #pragma omp sections 166 { 167 #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?}} 168 for (int i = 0; i < 10; ++i) 169 ; 170 } 171 #pragma omp sections 172 { 173 #pragma omp simd 174 for (int i = 0; i < 10; ++i) 175 ; 176 } 177 #pragma omp sections 178 { 179 #pragma omp parallel 180 for (int i = 0; i < 10; ++i) 181 ; 182 } 183 #pragma omp sections 184 { 185 #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?}} 186 { 187 bar(); 188 } 189 } 190 #pragma omp sections 191 { 192 #pragma omp section 193 { 194 bar(); 195 } 196 } 197 #pragma omp sections 198 { 199 #pragma omp section 200 { 201 #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?}} 202 bar(); 203 } 204 } 205 #pragma omp sections 206 { 207 #pragma omp parallel 208 { 209 #pragma omp single // OK 210 { 211 bar(); 212 } 213 #pragma omp for // OK 214 for (int i = 0; i < 10; ++i) 215 ; 216 #pragma omp sections // OK 217 { 218 bar(); 219 } 220 } 221 } 222 #pragma omp sections 223 { 224 #pragma omp parallel for 225 for (int i = 0; i < 10; ++i) 226 ; 227 } 228 #pragma omp sections 229 { 230 #pragma omp parallel sections 231 { 232 bar(); 233 } 234 } 235 236 // SECTION DIRECTIVE 237 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} 238 { 239 bar(); 240 } 241 242 // SINGLE DIRECTIVE 243 #pragma omp single 244 { 245 #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?}} 246 for (int i = 0; i < 10; ++i) 247 ; 248 } 249 #pragma omp single 250 { 251 #pragma omp simd 252 for (int i = 0; i < 10; ++i) 253 ; 254 } 255 #pragma omp single 256 { 257 #pragma omp parallel 258 for (int i = 0; i < 10; ++i) 259 ; 260 } 261 #pragma omp single 262 { 263 #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?}} 264 { 265 bar(); 266 } 267 } 268 #pragma omp single 269 { 270 #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?}} 271 { 272 bar(); 273 } 274 } 275 #pragma omp single 276 { 277 #pragma omp parallel 278 { 279 #pragma omp single // OK 280 { 281 bar(); 282 } 283 #pragma omp for // OK 284 for (int i = 0; i < 10; ++i) 285 ; 286 #pragma omp sections // OK 287 { 288 bar(); 289 } 290 } 291 } 292 #pragma omp single 293 { 294 #pragma omp parallel for 295 for (int i = 0; i < 10; ++i) 296 ; 297 } 298 #pragma omp single 299 { 300 #pragma omp parallel sections 301 { 302 bar(); 303 } 304 } 305 306 // PARALLEL FOR DIRECTIVE 307 #pragma omp parallel for 308 for (int i = 0; i < 10; ++i) { 309 #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?}} 310 for (int i = 0; i < 10; ++i) 311 ; 312 } 313 #pragma omp parallel for 314 for (int i = 0; i < 10; ++i) { 315 #pragma omp simd 316 for (int i = 0; i < 10; ++i) 317 ; 318 } 319 #pragma omp parallel for 320 for (int i = 0; i < 10; ++i) { 321 #pragma omp parallel 322 for (int i = 0; i < 10; ++i) 323 ; 324 } 325 #pragma omp parallel for 326 for (int i = 0; i < 10; ++i) { 327 #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?}} 328 { 329 bar(); 330 } 331 } 332 #pragma omp parallel for 333 for (int i = 0; i < 10; ++i) { 334 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} 335 { 336 bar(); 337 } 338 } 339 #pragma omp parallel for 340 for (int i = 0; i < 10; ++i) { 341 #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?}} 342 { 343 bar(); 344 } 345 } 346 #pragma omp parallel for 347 for (int i = 0; i < 10; ++i) { 348 #pragma omp parallel 349 { 350 #pragma omp single // OK 351 { 352 bar(); 353 } 354 #pragma omp for // OK 355 for (int i = 0; i < 10; ++i) 356 ; 357 #pragma omp sections // OK 358 { 359 bar(); 360 } 361 } 362 } 363 #pragma omp parallel for 364 for (int i = 0; i < 10; ++i) { 365 #pragma omp parallel for 366 for (int i = 0; i < 10; ++i) 367 ; 368 } 369 #pragma omp parallel for 370 for (int i = 0; i < 10; ++i) { 371 #pragma omp parallel sections 372 { 373 bar(); 374 } 375 } 376 377 // PARALLEL SECTIONS DIRECTIVE 378 #pragma omp parallel sections 379 { 380 #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?}} 381 for (int i = 0; i < 10; ++i) 382 ; 383 } 384 #pragma omp parallel sections 385 { 386 #pragma omp simd 387 for (int i = 0; i < 10; ++i) 388 ; 389 } 390 #pragma omp parallel sections 391 { 392 #pragma omp parallel 393 for (int i = 0; i < 10; ++i) 394 ; 395 } 396 #pragma omp parallel sections 397 { 398 #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?}} 399 { 400 bar(); 401 } 402 } 403 #pragma omp parallel sections 404 { 405 #pragma omp section 406 { 407 bar(); 408 } 409 } 410 #pragma omp parallel sections 411 { 412 #pragma omp section 413 { 414 #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?}} 415 bar(); 416 } 417 } 418 #pragma omp parallel sections 419 { 420 #pragma omp parallel 421 { 422 #pragma omp single // OK 423 { 424 bar(); 425 } 426 #pragma omp for // OK 427 for (int i = 0; i < 10; ++i) 428 ; 429 #pragma omp sections // OK 430 { 431 bar(); 432 } 433 } 434 } 435 #pragma omp parallel sections 436 { 437 #pragma omp parallel for 438 for (int i = 0; i < 10; ++i) 439 ; 440 } 441 #pragma omp parallel sections 442 { 443 #pragma omp parallel sections 444 { 445 bar(); 446 } 447 } 448 } 449 450 void foo() { 451 // PARALLEL DIRECTIVE 452 #pragma omp parallel 453 #pragma omp for 454 for (int i = 0; i < 10; ++i) 455 ; 456 #pragma omp parallel 457 #pragma omp simd 458 for (int i = 0; i < 10; ++i) 459 ; 460 #pragma omp parallel 461 #pragma omp sections 462 { 463 bar(); 464 } 465 #pragma omp parallel 466 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}} 467 { 468 bar(); 469 } 470 #pragma omp parallel 471 #pragma omp sections 472 { 473 bar(); 474 } 475 #pragma omp parallel 476 #pragma omp single 477 bar(); 478 #pragma omp parallel 479 #pragma omp parallel for 480 for (int i = 0; i < 10; ++i) 481 ; 482 #pragma omp parallel 483 #pragma omp parallel sections 484 { 485 bar(); 486 } 487 488 // SIMD DIRECTIVE 489 #pragma omp simd 490 for (int i = 0; i < 10; ++i) { 491 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 492 for (int i = 0; i < 10; ++i) 493 ; 494 } 495 #pragma omp simd 496 for (int i = 0; i < 10; ++i) { 497 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside a simd region}} 498 for (int i = 0; i < 10; ++i) 499 ; 500 } 501 #pragma omp simd 502 for (int i = 0; i < 10; ++i) { 503 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}} 504 for (int i = 0; i < 10; ++i) 505 ; 506 } 507 #pragma omp simd 508 for (int i = 0; i < 10; ++i) { 509 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 510 { 511 bar(); 512 } 513 } 514 #pragma omp simd 515 for (int i = 0; i < 10; ++i) { 516 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}} 517 { 518 bar(); 519 } 520 } 521 #pragma omp simd 522 for (int i = 0; i < 10; ++i) { 523 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}} 524 bar(); 525 } 526 #pragma omp simd 527 for (int i = 0; i < 10; ++i) { 528 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}} 529 for (int i = 0; i < 10; ++i) 530 ; 531 } 532 #pragma omp simd 533 for (int i = 0; i < 10; ++i) { 534 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}} 535 { 536 bar(); 537 } 538 } 539 540 // FOR DIRECTIVE 541 #pragma omp for 542 for (int i = 0; i < 10; ++i) { 543 #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?}} 544 for (int i = 0; i < 10; ++i) 545 ; 546 } 547 #pragma omp for 548 for (int i = 0; i < 10; ++i) { 549 #pragma omp simd 550 for (int i = 0; i < 10; ++i) 551 ; 552 } 553 #pragma omp for 554 for (int i = 0; i < 10; ++i) { 555 #pragma omp parallel 556 for (int i = 0; i < 10; ++i) 557 ; 558 } 559 #pragma omp for 560 for (int i = 0; i < 10; ++i) { 561 #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?}} 562 { 563 bar(); 564 } 565 } 566 #pragma omp for 567 for (int i = 0; i < 10; ++i) { 568 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}} 569 { 570 bar(); 571 } 572 } 573 #pragma omp for 574 for (int i = 0; i < 10; ++i) { 575 #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?}} 576 bar(); 577 } 578 #pragma omp for 579 for (int i = 0; i < 10; ++i) { 580 #pragma omp parallel 581 { 582 #pragma omp single // OK 583 { 584 bar(); 585 } 586 #pragma omp for // OK 587 for (int i = 0; i < 10; ++i) 588 ; 589 #pragma omp sections // OK 590 { 591 bar(); 592 } 593 } 594 } 595 #pragma omp for 596 for (int i = 0; i < 10; ++i) { 597 #pragma omp parallel for 598 for (int i = 0; i < 10; ++i) 599 ; 600 } 601 #pragma omp for 602 for (int i = 0; i < 10; ++i) { 603 #pragma omp parallel sections 604 { 605 bar(); 606 } 607 } 608 609 // SECTIONS DIRECTIVE 610 #pragma omp sections 611 { 612 #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?}} 613 for (int i = 0; i < 10; ++i) 614 ; 615 } 616 #pragma omp sections 617 { 618 #pragma omp simd 619 for (int i = 0; i < 10; ++i) 620 ; 621 } 622 #pragma omp sections 623 { 624 #pragma omp parallel 625 for (int i = 0; i < 10; ++i) 626 ; 627 } 628 #pragma omp sections 629 { 630 #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?}} 631 { 632 bar(); 633 } 634 } 635 #pragma omp sections 636 { 637 #pragma omp section 638 { 639 bar(); 640 } 641 } 642 #pragma omp sections 643 { 644 #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?}} 645 bar(); 646 } 647 #pragma omp sections 648 { 649 #pragma omp parallel 650 { 651 #pragma omp single // OK 652 { 653 bar(); 654 } 655 #pragma omp for // OK 656 for (int i = 0; i < 10; ++i) 657 ; 658 #pragma omp sections // OK 659 { 660 bar(); 661 } 662 } 663 } 664 #pragma omp sections 665 { 666 #pragma omp parallel for 667 for (int i = 0; i < 10; ++i) 668 ; 669 } 670 #pragma omp sections 671 { 672 #pragma omp parallel sections 673 { 674 bar(); 675 } 676 } 677 678 // SECTION DIRECTIVE 679 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}} 680 { 681 bar(); 682 } 683 684 // SINGLE DIRECTIVE 685 #pragma omp single 686 { 687 #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?}} 688 for (int i = 0; i < 10; ++i) 689 ; 690 } 691 #pragma omp single 692 { 693 #pragma omp simd 694 for (int i = 0; i < 10; ++i) 695 ; 696 } 697 #pragma omp single 698 { 699 #pragma omp parallel 700 for (int i = 0; i < 10; ++i) 701 ; 702 } 703 #pragma omp single 704 { 705 #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?}} 706 { 707 bar(); 708 } 709 } 710 #pragma omp single 711 { 712 #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?}} 713 { 714 bar(); 715 } 716 } 717 #pragma omp single 718 { 719 #pragma omp parallel 720 { 721 #pragma omp single // OK 722 { 723 bar(); 724 } 725 #pragma omp for // OK 726 for (int i = 0; i < 10; ++i) 727 ; 728 #pragma omp sections // OK 729 { 730 bar(); 731 } 732 } 733 } 734 #pragma omp single 735 { 736 #pragma omp parallel for 737 for (int i = 0; i < 10; ++i) 738 ; 739 } 740 #pragma omp single 741 { 742 #pragma omp parallel sections 743 { 744 bar(); 745 } 746 } 747 748 // PARALLEL FOR DIRECTIVE 749 #pragma omp parallel for 750 for (int i = 0; i < 10; ++i) { 751 #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?}} 752 for (int i = 0; i < 10; ++i) 753 ; 754 } 755 #pragma omp parallel for 756 for (int i = 0; i < 10; ++i) { 757 #pragma omp simd 758 for (int i = 0; i < 10; ++i) 759 ; 760 } 761 #pragma omp parallel for 762 for (int i = 0; i < 10; ++i) { 763 #pragma omp parallel 764 for (int i = 0; i < 10; ++i) 765 ; 766 } 767 #pragma omp parallel for 768 for (int i = 0; i < 10; ++i) { 769 #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?}} 770 { 771 bar(); 772 } 773 } 774 #pragma omp parallel for 775 for (int i = 0; i < 10; ++i) { 776 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}} 777 { 778 bar(); 779 } 780 } 781 #pragma omp parallel for 782 for (int i = 0; i < 10; ++i) { 783 #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?}} 784 { 785 bar(); 786 } 787 } 788 #pragma omp parallel for 789 for (int i = 0; i < 10; ++i) { 790 #pragma omp parallel 791 { 792 #pragma omp single // OK 793 { 794 bar(); 795 } 796 #pragma omp for // OK 797 for (int i = 0; i < 10; ++i) 798 ; 799 #pragma omp sections // OK 800 { 801 bar(); 802 } 803 } 804 } 805 #pragma omp parallel for 806 for (int i = 0; i < 10; ++i) { 807 #pragma omp parallel for 808 for (int i = 0; i < 10; ++i) 809 ; 810 } 811 #pragma omp parallel for 812 for (int i = 0; i < 10; ++i) { 813 #pragma omp parallel sections 814 { 815 bar(); 816 } 817 } 818 819 // PARALLEL SECTIONS DIRECTIVE 820 #pragma omp parallel sections 821 { 822 #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?}} 823 for (int i = 0; i < 10; ++i) 824 ; 825 } 826 #pragma omp parallel sections 827 { 828 #pragma omp simd 829 for (int i = 0; i < 10; ++i) 830 ; 831 } 832 #pragma omp parallel sections 833 { 834 #pragma omp parallel 835 for (int i = 0; i < 10; ++i) 836 ; 837 } 838 #pragma omp parallel sections 839 { 840 #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?}} 841 { 842 bar(); 843 } 844 } 845 #pragma omp parallel sections 846 { 847 #pragma omp section 848 { 849 bar(); 850 } 851 } 852 #pragma omp parallel sections 853 { 854 #pragma omp section 855 { 856 #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?}} 857 bar(); 858 } 859 } 860 #pragma omp parallel sections 861 { 862 #pragma omp parallel 863 { 864 #pragma omp single // OK 865 { 866 bar(); 867 } 868 #pragma omp for // OK 869 for (int i = 0; i < 10; ++i) 870 ; 871 #pragma omp sections // OK 872 { 873 bar(); 874 } 875 } 876 } 877 #pragma omp parallel sections 878 { 879 #pragma omp parallel for 880 for (int i = 0; i < 10; ++i) 881 ; 882 } 883 #pragma omp parallel sections 884 { 885 #pragma omp parallel sections 886 { 887 bar(); 888 } 889 } 890 return foo<int>(); 891 } 892 893