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