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