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