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