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 #pragma omp parallel
159   {
160 #pragma omp target simd // OK
161     for (int i = 0; i < 10; ++i)
162       ;
163   }
164 #pragma omp parallel
165   {
166 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
167     for (int i = 0; i < 10; ++i)
168       ;
169   }
170 #pragma omp parallel
171   {
172 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
173     for (int i = 0; i < 10; ++i)
174       ;
175   }
176 #pragma omp parallel
177   {
178 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
179     for (int i = 0; i < 10; ++i)
180       ;
181   }
182 #pragma omp parallel
183   {
184 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
185     for (int i = 0; i < 10; ++i)
186       ;
187   }
188 #pragma omp parallel
189   {
190 #pragma omp target teams // OK
191     ++a;
192   }
193 #pragma omp parallel
194   {
195 #pragma omp target teams distribute // OK
196     for (int i = 0; i < 10; ++i)
197       ;
198   }
199 #pragma omp parallel
200   {
201 #pragma omp target teams distribute parallel for // OK
202     for (int i = 0; i < 10; ++i)
203       ;
204   }
205 #pragma omp parallel
206   {
207 #pragma omp target teams distribute parallel for simd // OK
208     for (int i = 0; i < 10; ++i)
209       ;
210   }
211 #pragma omp parallel
212   {
213 #pragma omp target teams distribute simd // OK
214     for (int i = 0; i < 10; ++i)
215       ;
216   }
217 
218 // SIMD DIRECTIVE
219 #pragma omp simd
220   for (int i = 0; i < 10; ++i) {
221 #pragma omp 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 simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
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 for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
234     for (int i = 0; i < 10; ++i)
235       ;
236   }
237 #pragma omp simd
238   for (int i = 0; i < 10; ++i) {
239 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
240     for (int i = 0; i < 10; ++i)
241       ;
242   }
243 #pragma omp simd
244   for (int i = 0; i < 10; ++i) {
245 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
246     {
247       bar();
248     }
249   }
250 #pragma omp simd
251   for (int i = 0; i < 10; ++i) {
252 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
253     {
254       bar();
255     }
256   }
257 #pragma omp simd
258   for (int i = 0; i < 10; ++i) {
259 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
260     {
261       bar();
262     }
263   }
264 #pragma omp simd
265   for (int i = 0; i < 10; ++i) {
266 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
267     {
268       bar();
269     }
270   }
271 #pragma omp simd
272   for (int i = 0; i < 10; ++i) {
273 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
274     {
275       bar();
276     }
277   }
278 #pragma omp simd
279   for (int i = 0; i < 10; ++i) {
280 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
281     for (int i = 0; i < 10; ++i)
282       ;
283   }
284 #pragma omp simd
285   for (int i = 0; i < 10; ++i) {
286 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
287     for (int i = 0; i < 10; ++i)
288       ;
289   }
290 #pragma omp simd
291   for (int i = 0; i < 10; ++i) {
292 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
293     {
294       bar();
295     }
296   }
297 #pragma omp simd
298   for (int i = 0; i < 10; ++i) {
299 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
300     {
301       bar();
302     }
303   }
304 #pragma omp simd
305   for (int i = 0; i < 10; ++i) {
306 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
307     bar();
308   }
309 #pragma omp simd
310   for (int i = 0; i < 10; ++i) {
311 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
312     bar();
313   }
314 #pragma omp simd
315   for (int i = 0; i < 10; ++i) {
316 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
317     bar();
318   }
319 #pragma omp simd
320   for (int i = 0; i < 10; ++i) {
321 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
322     bar();
323   }
324 #pragma omp simd
325   for (int i = 0; i < 10; ++i) {
326 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
327     bar();
328   }
329 #pragma omp simd
330   for (int i = 0; i < 10; ++i) {
331 #pragma omp ordered simd // OK
332     bar();
333   }
334 #pragma omp simd
335   for (int i = 0; i < 10; ++i) {
336 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
337     bar();
338   }
339 #pragma omp simd
340   for (int i = 0; i < 10; ++i) {
341 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
342     ++a;
343   }
344 #pragma omp simd
345   for (int i = 0; i < 10; ++i) {
346 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
347     ++a;
348   }
349 #pragma omp simd
350   for (int i = 0; i < 10; ++i) {
351 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
352     ++a;
353   }
354 #pragma omp simd
355   for (int i = 0; i < 10; ++i) {
356 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
357     for (int i = 0; i < 10; ++i)
358       ;
359   }
360 #pragma omp simd
361   for (int i = 0; i < 10; ++i) {
362 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
363     ++a;
364   }
365 #pragma omp simd
366   for (int i = 0; i < 10; ++i) {
367 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
368     ++a;
369   }
370 #pragma omp simd
371   for (int i = 0; i < 10; ++i) {
372 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
373     ++a;
374   }
375 #pragma omp simd
376   for (int i = 0; i < 10; ++i) {
377 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
378   for (int i = 0; i < 10; ++i)
379     ++a;
380   }
381 #pragma omp simd
382   for (int i = 0; i < 10; ++i) {
383 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
384     for (int j = 0; j < 10; ++j)
385       ;
386   }
387 #pragma omp simd
388   for (int i = 0; i < 10; ++i) {
389 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
390   }
391 #pragma omp simd
392   for (int i = 0; i < 10; ++i) {
393 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
394     for (int j = 0; j < 10; ++j)
395       ;
396   }
397 #pragma omp simd
398   for (int i = 0; i < 10; ++i) {
399 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
400     for (int j = 0; j < 10; ++j)
401       ;
402   }
403 #pragma omp simd
404   for (int i = 0; i < 10; ++i) {
405 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
406     for (int j = 0; j < 10; ++j)
407       ;
408   }
409 #pragma omp simd
410   for (int i = 0; i < 10; ++i) {
411 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
412     for (int j = 0; j < 10; ++j)
413       ;
414   }
415 #pragma omp simd
416   for (int i = 0; i < 10; ++i) {
417 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
418     for (int j = 0; j < 10; ++j)
419       ;
420   }
421 #pragma omp simd
422   for (int i = 0; i < 10; ++i) {
423 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
424     for (int j = 0; j < 10; ++j)
425       ;
426   }
427 #pragma omp simd
428   for (int i = 0; i < 10; ++i) {
429 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
430     for (int j = 0; j < 10; ++j)
431       ;
432   }
433 #pragma omp simd
434   for (int i = 0; i < 10; ++i) {
435 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
436     for (int j = 0; j < 10; ++j)
437       ;
438   }
439 #pragma omp simd
440   for (int i = 0; i < 10; ++i) {
441 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
442     ++a;
443   }
444 #pragma omp simd
445   for (int i = 0; i < 10; ++i) {
446 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
447     for (int j = 0; j < 10; ++j)
448       ;
449   }
450 #pragma omp simd
451   for (int i = 0; i < 10; ++i) {
452 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
453     for (int j = 0; j < 10; ++j)
454       ;
455   }
456 #pragma omp simd
457   for (int i = 0; i < 10; ++i) {
458 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
459     for (int j = 0; j < 10; ++j)
460       ;
461   }
462 #pragma omp simd
463   for (int i = 0; i < 10; ++i) {
464 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
465     for (int j = 0; j < 10; ++j)
466       ;
467   }
468 
469 // FOR DIRECTIVE
470 #pragma omp for
471   for (int i = 0; i < 10; ++i) {
472 #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?}}
473     for (int i = 0; i < 10; ++i)
474       ;
475   }
476 #pragma omp for
477   for (int i = 0; i < 10; ++i) {
478 #pragma omp simd
479     for (int i = 0; i < 10; ++i)
480       ;
481   }
482 #pragma omp for
483   for (int i = 0; i < 10; ++i) {
484 #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?}}
485     for (int i = 0; i < 10; ++i)
486       ;
487   }
488 #pragma omp for
489   for (int i = 0; i < 10; ++i) {
490 #pragma omp parallel
491     for (int i = 0; i < 10; ++i)
492       ;
493   }
494 #pragma omp for
495   for (int i = 0; i < 10; ++i) {
496 #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?}}
497     {
498       bar();
499     }
500   }
501 #pragma omp for
502   for (int i = 0; i < 10; ++i) {
503 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
504     {
505       bar();
506     }
507   }
508 #pragma omp for
509   for (int i = 0; i < 10; ++i) {
510 #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?}}
511     {
512       bar();
513     }
514   }
515 
516 #pragma omp for
517   for (int i = 0; i < 10; ++i) {
518 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
519     {
520       bar();
521     }
522   }
523 #pragma omp for
524   for (int i = 0; i < 10; ++i) {
525 #pragma omp critical
526     {
527       bar();
528     }
529   }
530 #pragma omp for
531   for (int i = 0; i < 10; ++i) {
532 #pragma omp parallel
533     {
534 #pragma omp single // OK
535       {
536         bar();
537       }
538 #pragma omp for // OK
539       for (int i = 0; i < 10; ++i)
540         ;
541 #pragma omp sections // OK
542       {
543         bar();
544       }
545     }
546   }
547 #pragma omp for
548   for (int i = 0; i < 10; ++i) {
549 #pragma omp parallel for
550     for (int i = 0; i < 10; ++i)
551       ;
552   }
553 #pragma omp for
554   for (int i = 0; i < 10; ++i) {
555 #pragma omp parallel for simd
556     for (int i = 0; i < 10; ++i)
557       ;
558   }
559 #pragma omp for
560   for (int i = 0; i < 10; ++i) {
561 #pragma omp parallel sections
562     {
563       bar();
564     }
565   }
566 #pragma omp for
567   for (int i = 0; i < 10; ++i) {
568 #pragma omp task
569     {
570       bar();
571     }
572   }
573 #pragma omp for
574   for (int i = 0; i < 10; ++i) {
575 #pragma omp taskyield
576     bar();
577   }
578 #pragma omp for
579   for (int i = 0; i < 10; ++i) {
580 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
581     bar();
582   }
583 #pragma omp for
584   for (int i = 0; i < 10; ++i) {
585 #pragma omp taskwait
586     bar();
587   }
588 #pragma omp for
589   for (int i = 0; i < 10; ++i) {
590 #pragma omp flush
591     bar();
592   }
593 #pragma omp for
594   for (int i = 0; i < 10; ++i) {
595 #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?}}
596     bar();
597   }
598 #pragma omp for ordered
599   for (int i = 0; i < 10; ++i) {
600 #pragma omp ordered // OK
601     bar();
602   }
603 #pragma omp for
604   for (int i = 0; i < 10; ++i) {
605 #pragma omp atomic
606     ++a;
607   }
608 #pragma omp for
609   for (int i = 0; i < 10; ++i) {
610 #pragma omp target
611     ++a;
612   }
613 #pragma omp for
614   for (int i = 0; i < 10; ++i) {
615 #pragma omp target parallel
616     ++a;
617   }
618 #pragma omp for
619   for (int i = 0; i < 10; ++i) {
620 #pragma omp target parallel for
621     for (int i = 0; i < 10; ++i)
622       ;
623   }
624 #pragma omp for
625   for (int i = 0; i < 10; ++i) {
626 #pragma omp target enter data map(to: a)
627     ++a;
628   }
629 #pragma omp for
630   for (int i = 0; i < 10; ++i) {
631 #pragma omp target exit data map(from: a)
632     ++a;
633   }
634 #pragma omp for
635   for (int i = 0; i < 10; ++i) {
636 #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?}}
637     ++a;
638   }
639 #pragma omp for
640   for (int i = 0; i < 10; ++i) {
641 #pragma omp taskloop
642   for (int i = 0; i < 10; ++i)
643     ++a;
644   }
645 #pragma omp for
646   for (int i = 0; i < 10; ++i) {
647 #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?}}
648     for (int j = 0; j < 10; ++j)
649       ;
650   }
651 #pragma omp for
652   for (int i = 0; i < 10; ++i) {
653 #pragma omp target update to(a)
654   }
655 #pragma omp for
656   for (int i = 0; i < 10; ++i) {
657 #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?}}
658     for (int j = 0; j < 10; ++j)
659       ;
660   }
661 #pragma omp for
662   for (int i = 0; i < 10; ++i) {
663 #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?}}
664     for (int j = 0; j < 10; ++j)
665       ;
666   }
667 #pragma omp for
668   for (int i = 0; i < 10; ++i) {
669 #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?}}
670     for (int j = 0; j < 10; ++j)
671       ;
672   }
673 #pragma omp for
674   for (int i = 0; i < 10; ++i) {
675 #pragma omp target simd // OK
676     for (int j = 0; j < 10; ++j)
677       ;
678   }
679 #pragma omp for
680   for (int i = 0; i < 10; ++i) {
681 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
682     for (int j = 0; j < 10; ++j)
683       ;
684   }
685 #pragma omp for
686   for (int i = 0; i < 10; ++i) {
687 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
688     for (int j = 0; j < 10; ++j)
689       ;
690   }
691 #pragma omp for
692   for (int i = 0; i < 10; ++i) {
693 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
694     for (int j = 0; j < 10; ++j)
695       ;
696   }
697 #pragma omp for
698   for (int i = 0; i < 10; ++i) {
699 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
700     for (int j = 0; j < 10; ++j)
701       ;
702   }
703 #pragma omp for
704   for (int i = 0; i < 10; ++i) {
705 #pragma omp target teams // OK
706     ++a;
707   }
708 #pragma omp for
709   for (int i = 0; i < 10; ++i) {
710 #pragma omp target teams distribute // OK
711     for (int j = 0; j < 10; ++j)
712       ;
713   }
714 #pragma omp for
715   for (int i = 0; i < 10; ++i) {
716 #pragma omp target teams distribute parallel for // OK
717     for (int j = 0; j < 10; ++j)
718       ;
719   }
720 #pragma omp for
721   for (int i = 0; i < 10; ++i) {
722 #pragma omp target teams distribute parallel for simd // OK
723     for (int j = 0; j < 10; ++j)
724       ;
725   }
726 #pragma omp for
727   for (int i = 0; i < 10; ++i) {
728 #pragma omp target teams distribute simd // OK
729     for (int j = 0; j < 10; ++j)
730       ;
731   }
732 
733 // FOR SIMD DIRECTIVE
734 #pragma omp for simd
735   for (int i = 0; i < 10; ++i) {
736 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
737     for (int i = 0; i < 10; ++i)
738       ;
739   }
740 #pragma omp for simd
741   for (int i = 0; i < 10; ++i) {
742 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
743     for (int i = 0; i < 10; ++i)
744       ;
745   }
746 #pragma omp for simd
747   for (int i = 0; i < 10; ++i) {
748 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
749     for (int i = 0; i < 10; ++i)
750       ;
751   }
752 #pragma omp for simd
753   for (int i = 0; i < 10; ++i) {
754 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
755     for (int i = 0; i < 10; ++i)
756       ;
757   }
758 #pragma omp for simd
759   for (int i = 0; i < 10; ++i) {
760 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
761     {
762       bar();
763     }
764   }
765 #pragma omp for simd
766   for (int i = 0; i < 10; ++i) {
767 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
768     {
769       bar();
770     }
771   }
772 #pragma omp for simd
773   for (int i = 0; i < 10; ++i) {
774 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
775     {
776       bar();
777     }
778   }
779 #pragma omp for simd
780   for (int i = 0; i < 10; ++i) {
781 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
782     {
783       bar();
784     }
785   }
786 #pragma omp for simd
787   for (int i = 0; i < 10; ++i) {
788 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
789     {
790       bar();
791     }
792   }
793 #pragma omp for simd
794   for (int i = 0; i < 10; ++i) {
795 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
796     for (int i = 0; i < 10; ++i)
797       ;
798   }
799 #pragma omp for simd
800   for (int i = 0; i < 10; ++i) {
801 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
802     for (int i = 0; i < 10; ++i)
803       ;
804   }
805 #pragma omp for simd
806   for (int i = 0; i < 10; ++i) {
807 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
808     {
809       bar();
810     }
811   }
812 #pragma omp for simd
813   for (int i = 0; i < 10; ++i) {
814 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
815     {
816       bar();
817     }
818   }
819 #pragma omp for simd
820   for (int i = 0; i < 10; ++i) {
821 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
822     bar();
823   }
824 #pragma omp for simd
825   for (int i = 0; i < 10; ++i) {
826 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
827     bar();
828   }
829 #pragma omp for simd
830   for (int i = 0; i < 10; ++i) {
831 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
832     bar();
833   }
834 #pragma omp for simd
835   for (int i = 0; i < 10; ++i) {
836 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
837     bar();
838   }
839 #pragma omp for simd
840   for (int i = 0; i < 10; ++i) {
841 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
842     bar();
843   }
844 #pragma omp for simd
845   for (int i = 0; i < 10; ++i) {
846 #pragma omp ordered simd // OK
847     bar();
848   }
849 #pragma omp for simd
850   for (int i = 0; i < 10; ++i) {
851 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
852     bar();
853   }
854 #pragma omp for simd
855   for (int i = 0; i < 10; ++i) {
856 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
857     ++a;
858   }
859 #pragma omp for simd
860   for (int i = 0; i < 10; ++i) {
861 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
862     ++a;
863   }
864 #pragma omp for simd
865   for (int i = 0; i < 10; ++i) {
866 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
867     ++a;
868   }
869 #pragma omp for simd
870   for (int i = 0; i < 10; ++i) {
871 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
872     for (int i = 0; i < 10; ++i)
873       ;
874   }
875 #pragma omp for simd
876   for (int i = 0; i < 10; ++i) {
877 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
878     ++a;
879   }
880 #pragma omp for simd
881   for (int i = 0; i < 10; ++i) {
882 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
883     ++a;
884   }
885 #pragma omp for simd
886   for (int i = 0; i < 10; ++i) {
887 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
888     ++a;
889   }
890 #pragma omp for simd
891   for (int i = 0; i < 10; ++i) {
892 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
893   for (int i = 0; i < 10; ++i)
894     ++a;
895   }
896 #pragma omp for simd
897   for (int i = 0; i < 10; ++i) {
898 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
899     for (int j = 0; j < 10; ++j)
900       ;
901   }
902 #pragma omp for simd
903   for (int i = 0; i < 10; ++i) {
904 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
905     bar();
906   }
907 #pragma omp for simd
908   for (int i = 0; i < 10; ++i) {
909 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
910     for (int j = 0; j < 10; ++j)
911       ;
912   }
913 #pragma omp for simd
914   for (int i = 0; i < 10; ++i) {
915 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
916     for (int j = 0; j < 10; ++j)
917       ;
918   }
919 #pragma omp for simd
920   for (int i = 0; i < 10; ++i) {
921 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
922     for (int j = 0; j < 10; ++j)
923       ;
924   }
925 #pragma omp for simd
926   for (int i = 0; i < 10; ++i) {
927 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
928     for (int j = 0; j < 10; ++j)
929       ;
930   }
931 #pragma omp for simd
932   for (int i = 0; i < 10; ++i) {
933 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
934     for (int j = 0; j < 10; ++j)
935       ;
936   }
937 #pragma omp for simd
938   for (int i = 0; i < 10; ++i) {
939 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
940     for (int j = 0; j < 10; ++j)
941       ;
942   }
943 #pragma omp for simd
944   for (int i = 0; i < 10; ++i) {
945 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
946     for (int j = 0; j < 10; ++j)
947       ;
948   }
949 #pragma omp for simd
950   for (int i = 0; i < 10; ++i) {
951 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
952     for (int j = 0; j < 10; ++j)
953       ;
954   }
955 #pragma omp for simd
956   for (int i = 0; i < 10; ++i) {
957 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
958     a++;
959   }
960 #pragma omp for simd
961   for (int i = 0; i < 10; ++i) {
962 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
963     for (int j = 0; j < 10; ++j)
964       ;
965   }
966 #pragma omp for simd
967   for (int i = 0; i < 10; ++i) {
968 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
969     for (int j = 0; j < 10; ++j)
970       ;
971   }
972 #pragma omp for simd
973   for (int i = 0; i < 10; ++i) {
974 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
975     for (int j = 0; j < 10; ++j)
976       ;
977   }
978 #pragma omp for simd
979   for (int i = 0; i < 10; ++i) {
980 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
981     for (int j = 0; j < 10; ++j)
982       ;
983   }
984 
985 // SECTIONS DIRECTIVE
986 #pragma omp sections
987   {
988 #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?}}
989     for (int i = 0; i < 10; ++i)
990       ;
991   }
992 #pragma omp sections
993   {
994 #pragma omp simd
995     for (int i = 0; i < 10; ++i)
996       ;
997   }
998 #pragma omp sections
999   {
1000 #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?}}
1001     for (int i = 0; i < 10; ++i)
1002       ;
1003   }
1004 #pragma omp sections
1005   {
1006 #pragma omp parallel
1007     for (int i = 0; i < 10; ++i)
1008       ;
1009   }
1010 #pragma omp sections
1011   {
1012 #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?}}
1013     {
1014       bar();
1015     }
1016   }
1017 #pragma omp sections
1018   {
1019 #pragma omp section
1020     {
1021       bar();
1022     }
1023   }
1024 #pragma omp sections
1025   {
1026 #pragma omp parallel
1027     {
1028 #pragma omp single // OK
1029       {
1030         bar();
1031       }
1032 #pragma omp for // OK
1033       for (int i = 0; i < 10; ++i)
1034         ;
1035 #pragma omp sections // OK
1036       {
1037         bar();
1038       }
1039     }
1040   }
1041 #pragma omp sections
1042   {
1043 #pragma omp parallel
1044     {
1045 #pragma omp master // OK
1046       {
1047         bar();
1048       }
1049 #pragma omp for // OK
1050       for (int i = 0; i < 10; ++i)
1051         ;
1052 #pragma omp master // OK
1053       {
1054         bar();
1055       }
1056     }
1057 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
1058     bar();
1059   }
1060 #pragma omp sections
1061   {
1062 #pragma omp parallel
1063     {
1064 #pragma omp critical(A) // OK
1065       {
1066         bar();
1067       }
1068 #pragma omp for // OK
1069       for (int i = 0; i < 10; ++i)
1070         ;
1071 #pragma omp critical // OK
1072       {
1073         bar();
1074       }
1075     }
1076 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
1077     bar();
1078   }
1079 #pragma omp sections
1080   {
1081 #pragma omp parallel for
1082     for (int i = 0; i < 10; ++i)
1083       ;
1084   }
1085 #pragma omp sections
1086   {
1087 #pragma omp parallel for simd
1088     for (int i = 0; i < 10; ++i)
1089       ;
1090   }
1091 #pragma omp sections
1092   {
1093 #pragma omp parallel sections
1094     {
1095       bar();
1096     }
1097   }
1098 #pragma omp sections
1099   {
1100 #pragma omp task
1101     {
1102       bar();
1103     }
1104   }
1105 #pragma omp sections
1106   {
1107 #pragma omp taskyield
1108   }
1109 #pragma omp sections
1110   {
1111 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1112   }
1113 #pragma omp sections
1114   {
1115 #pragma omp taskwait
1116   }
1117 #pragma omp sections
1118   {
1119 #pragma omp flush
1120   }
1121 #pragma omp sections
1122   {
1123 #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?}}
1124     bar();
1125   }
1126 #pragma omp sections
1127   {
1128 #pragma omp atomic
1129     ++a;
1130   }
1131 #pragma omp sections
1132   {
1133 #pragma omp target
1134     ++a;
1135   }
1136 #pragma omp sections
1137   {
1138 #pragma omp target parallel
1139     ++a;
1140   }
1141 #pragma omp sections
1142   {
1143 #pragma omp target parallel for
1144     for (int i = 0; i < 10; ++i)
1145       ;
1146   }
1147 #pragma omp sections
1148   {
1149 #pragma omp target enter data map(to: a)
1150   }
1151 #pragma omp sections
1152   {
1153 #pragma omp target exit data map(from: a)
1154   }
1155 #pragma omp sections
1156   {
1157 #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?}}
1158     ++a;
1159   }
1160 #pragma omp sections
1161   {
1162 #pragma omp taskloop
1163   for (int i = 0; i < 10; ++i)
1164     ++a;
1165   }
1166 #pragma omp sections
1167   {
1168 #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?}}
1169     for (int i = 0; i < 10; ++i)
1170       ;
1171   }
1172 #pragma omp sections
1173   {
1174 #pragma omp target update to(a)
1175   }
1176 #pragma omp sections
1177   {
1178 #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?}}
1179     for (int i = 0; i < 10; ++i)
1180       ;
1181   }
1182 #pragma omp sections
1183   {
1184 #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?}}
1185     for (int i = 0; i < 10; ++i)
1186       ;
1187   }
1188 #pragma omp sections
1189   {
1190 #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?}}
1191     for (int i = 0; i < 10; ++i)
1192       ;
1193   }
1194 #pragma omp sections
1195   {
1196 #pragma omp target simd // OK
1197     for (int i = 0; i < 10; ++i)
1198       ;
1199   }
1200 #pragma omp sections
1201   {
1202 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
1203     for (int i = 0; i < 10; ++i)
1204       ;
1205   }
1206 #pragma omp sections
1207   {
1208 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
1209     for (int i = 0; i < 10; ++i)
1210       ;
1211   }
1212 #pragma omp sections
1213   {
1214 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1215     for (int i = 0; i < 10; ++i)
1216       ;
1217   }
1218 #pragma omp sections
1219   {
1220 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1221     for (int i = 0; i < 10; ++i)
1222       ;
1223   }
1224 #pragma omp sections
1225   {
1226 #pragma omp target teams // OK
1227     ++a;
1228   }
1229 #pragma omp sections
1230   {
1231 #pragma omp target teams distribute // OK
1232     for (int i = 0; i < 10; ++i)
1233       ;
1234   }
1235 #pragma omp sections
1236   {
1237 #pragma omp target teams distribute parallel for // OK
1238     for (int i = 0; i < 10; ++i)
1239       ;
1240   }
1241 #pragma omp sections
1242   {
1243 #pragma omp target teams distribute parallel for simd // OK
1244     for (int i = 0; i < 10; ++i)
1245       ;
1246   }
1247 #pragma omp sections
1248   {
1249 #pragma omp target teams distribute simd // OK
1250     for (int i = 0; i < 10; ++i)
1251       ;
1252   }
1253 
1254 // SECTION DIRECTIVE
1255 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1256   {
1257     bar();
1258   }
1259 #pragma omp sections
1260   {
1261 #pragma omp section
1262     {
1263 #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?}}
1264       for (int i = 0; i < 10; ++i)
1265         ;
1266     }
1267   }
1268 #pragma omp sections
1269   {
1270 #pragma omp section
1271     {
1272 #pragma omp simd
1273       for (int i = 0; i < 10; ++i)
1274         ;
1275     }
1276   }
1277 #pragma omp sections
1278   {
1279 #pragma omp section
1280     {
1281 #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?}}
1282       for (int i = 0; i < 10; ++i)
1283         ;
1284     }
1285   }
1286 #pragma omp sections
1287   {
1288 #pragma omp section
1289     {
1290 #pragma omp parallel
1291       for (int i = 0; i < 10; ++i)
1292         ;
1293     }
1294   }
1295 #pragma omp sections
1296   {
1297 #pragma omp section
1298     {
1299 #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?}}
1300       {
1301         bar();
1302       }
1303     }
1304   }
1305 #pragma omp sections
1306   {
1307 #pragma omp section
1308     {
1309 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1310       {
1311         bar();
1312       }
1313     }
1314   }
1315 #pragma omp sections
1316   {
1317 #pragma omp section
1318     {
1319 #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?}}
1320       bar();
1321 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1322       bar();
1323 #pragma omp critical
1324       bar();
1325     }
1326   }
1327 #pragma omp sections
1328   {
1329 #pragma omp section
1330     {
1331 #pragma omp parallel
1332       {
1333 #pragma omp single // OK
1334         {
1335           bar();
1336         }
1337 #pragma omp for // OK
1338         for (int i = 0; i < 10; ++i)
1339           ;
1340 #pragma omp for simd // OK
1341         for (int i = 0; i < 10; ++i)
1342           ;
1343 #pragma omp sections // OK
1344         {
1345           bar();
1346         }
1347       }
1348     }
1349   }
1350 #pragma omp sections
1351   {
1352 #pragma omp section
1353     {
1354 #pragma omp parallel for
1355       for (int i = 0; i < 10; ++i)
1356         ;
1357     }
1358   }
1359 #pragma omp sections
1360   {
1361 #pragma omp section
1362     {
1363 #pragma omp parallel for simd
1364       for (int i = 0; i < 10; ++i)
1365         ;
1366     }
1367   }
1368 #pragma omp sections
1369   {
1370 #pragma omp section
1371     {
1372 #pragma omp parallel sections
1373       {
1374         bar();
1375       }
1376     }
1377   }
1378 #pragma omp sections
1379   {
1380 #pragma omp section
1381     {
1382 #pragma omp task
1383       {
1384         bar();
1385       }
1386     }
1387   }
1388 #pragma omp sections
1389   {
1390 #pragma omp section
1391     {
1392 #pragma omp taskyield
1393       bar();
1394     }
1395   }
1396 #pragma omp sections
1397   {
1398 #pragma omp section
1399     {
1400 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1401       bar();
1402     }
1403   }
1404 #pragma omp sections
1405   {
1406 #pragma omp section
1407     {
1408 #pragma omp taskwait
1409       bar();
1410     }
1411   }
1412 #pragma omp sections
1413   {
1414 #pragma omp section
1415     {
1416 #pragma omp flush
1417       bar();
1418     }
1419   }
1420 #pragma omp sections
1421   {
1422 #pragma omp section
1423     {
1424 #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?}}
1425       bar();
1426     }
1427   }
1428 #pragma omp sections
1429   {
1430 #pragma omp section
1431 #pragma omp atomic
1432     ++a;
1433   }
1434 #pragma omp sections
1435   {
1436 #pragma omp section
1437 #pragma omp target
1438     ++a;
1439   }
1440 #pragma omp sections
1441   {
1442 #pragma omp section
1443 #pragma omp target parallel
1444     ++a;
1445   }
1446 #pragma omp sections
1447   {
1448 #pragma omp section
1449     {
1450 #pragma omp target parallel for
1451       for (int i = 0; i < 10; ++i)
1452         ;
1453     }
1454   }
1455 #pragma omp sections
1456   {
1457 #pragma omp section
1458     {
1459 #pragma omp target enter data map(to: a)
1460       ++a;
1461     }
1462   }
1463 #pragma omp sections
1464   {
1465 #pragma omp section
1466     {
1467 #pragma omp target exit data map(from: a)
1468       ++a;
1469     }
1470   }
1471 #pragma omp sections
1472   {
1473 #pragma omp section
1474 #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?}}
1475     ++a;
1476   }
1477 #pragma omp sections
1478   {
1479 #pragma omp section
1480 #pragma omp taskloop
1481   for (int i = 0; i < 10; ++i)
1482     ++a;
1483   }
1484 #pragma omp sections
1485   {
1486 #pragma omp section
1487 #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?}}
1488     for (int i = 0; i < 10; ++i)
1489       ;
1490   }
1491 #pragma omp sections
1492   {
1493 #pragma omp section
1494     {
1495       bar();
1496 #pragma omp target update to(a)
1497     }
1498   }
1499 #pragma omp sections
1500   {
1501 #pragma omp section
1502 #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?}}
1503     for (int i = 0; i < 10; ++i)
1504       ;
1505   }
1506 #pragma omp sections
1507   {
1508 #pragma omp section
1509 #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?}}
1510     for (int i = 0; i < 10; ++i)
1511       ;
1512   }
1513 #pragma omp sections
1514   {
1515 #pragma omp section
1516 #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?}}
1517     for (int i = 0; i < 10; ++i)
1518       ;
1519   }
1520 #pragma omp sections
1521   {
1522 #pragma omp section
1523 #pragma omp target simd // OK
1524     for (int i = 0; i < 10; ++i)
1525       ;
1526   }
1527 #pragma omp sections
1528   {
1529 #pragma omp section
1530 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
1531     for (int i = 0; i < 10; ++i)
1532       ;
1533   }
1534 #pragma omp sections
1535   {
1536 #pragma omp section
1537 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
1538     for (int i = 0; i < 10; ++i)
1539       ;
1540   }
1541 #pragma omp sections
1542   {
1543 #pragma omp section
1544 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1545     for (int i = 0; i < 10; ++i)
1546       ;
1547   }
1548 #pragma omp sections
1549   {
1550 #pragma omp section
1551 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1552     for (int i = 0; i < 10; ++i)
1553       ;
1554   }
1555 #pragma omp sections
1556   {
1557 #pragma omp section
1558 #pragma omp target teams // OK
1559     ++a;
1560   }
1561 #pragma omp sections
1562   {
1563 #pragma omp section
1564 #pragma omp target teams distribute // OK
1565     for (int i = 0; i < 10; ++i)
1566       ;
1567   }
1568 #pragma omp sections
1569   {
1570 #pragma omp section
1571 #pragma omp target teams distribute parallel for // OK
1572     for (int i = 0; i < 10; ++i)
1573       ;
1574   }
1575 #pragma omp sections
1576   {
1577 #pragma omp section
1578 #pragma omp target teams distribute parallel for simd // OK
1579     for (int i = 0; i < 10; ++i)
1580       ;
1581   }
1582 #pragma omp sections
1583   {
1584 #pragma omp section
1585 #pragma omp target teams distribute simd // OK
1586     for (int i = 0; i < 10; ++i)
1587       ;
1588   }
1589 
1590 // SINGLE DIRECTIVE
1591 #pragma omp single
1592   {
1593 #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?}}
1594     for (int i = 0; i < 10; ++i)
1595       ;
1596   }
1597 #pragma omp single
1598   {
1599 #pragma omp simd
1600     for (int i = 0; i < 10; ++i)
1601       ;
1602   }
1603 #pragma omp single
1604   {
1605 #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?}}
1606     for (int i = 0; i < 10; ++i)
1607       ;
1608   }
1609 #pragma omp single
1610   {
1611 #pragma omp parallel
1612     for (int i = 0; i < 10; ++i)
1613       ;
1614   }
1615 #pragma omp single
1616   {
1617 #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?}}
1618     {
1619       bar();
1620     }
1621   }
1622 #pragma omp single
1623   {
1624 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1625     {
1626       bar();
1627     }
1628   }
1629 #pragma omp single
1630   {
1631 #pragma omp critical
1632     {
1633       bar();
1634     }
1635   }
1636 #pragma omp single
1637   {
1638 #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?}}
1639     {
1640       bar();
1641     }
1642   }
1643 #pragma omp single
1644   {
1645 #pragma omp parallel
1646     {
1647 #pragma omp single // OK
1648       {
1649         bar();
1650       }
1651 #pragma omp for // OK
1652       for (int i = 0; i < 10; ++i)
1653         ;
1654 #pragma omp for simd // OK
1655       for (int i = 0; i < 10; ++i)
1656         ;
1657 #pragma omp sections // OK
1658       {
1659         bar();
1660       }
1661     }
1662   }
1663 #pragma omp single
1664   {
1665 #pragma omp parallel for
1666     for (int i = 0; i < 10; ++i)
1667       ;
1668   }
1669 #pragma omp single
1670   {
1671 #pragma omp parallel for simd
1672     for (int i = 0; i < 10; ++i)
1673       ;
1674   }
1675 #pragma omp single
1676   {
1677 #pragma omp parallel sections
1678     {
1679       bar();
1680     }
1681   }
1682 #pragma omp single
1683   {
1684 #pragma omp task
1685     {
1686       bar();
1687     }
1688   }
1689 #pragma omp single
1690   {
1691 #pragma omp taskyield
1692     bar();
1693   }
1694 #pragma omp single
1695   {
1696 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1697     bar();
1698   }
1699 #pragma omp single
1700   {
1701 #pragma omp taskwait
1702     bar();
1703   }
1704 #pragma omp single
1705   {
1706 #pragma omp flush
1707     bar();
1708   }
1709 #pragma omp single
1710   {
1711 #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?}}
1712     bar();
1713   }
1714 #pragma omp single
1715   {
1716 #pragma omp atomic
1717     ++a;
1718   }
1719 #pragma omp single
1720   {
1721 #pragma omp target
1722     ++a;
1723   }
1724 #pragma omp single
1725   {
1726 #pragma omp target parallel
1727     ++a;
1728   }
1729 #pragma omp single
1730   {
1731 #pragma omp target parallel for
1732     for (int i = 0; i < 10; ++i)
1733       ;
1734   }
1735 #pragma omp single
1736   {
1737 #pragma omp target enter data map(to: a)
1738     ++a;
1739   }
1740 #pragma omp single
1741   {
1742 #pragma omp target exit data map(from: a)
1743     ++a;
1744   }
1745 #pragma omp single
1746   {
1747 #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?}}
1748     ++a;
1749   }
1750 #pragma omp single
1751   {
1752 #pragma omp taskloop
1753   for (int i = 0; i < 10; ++i)
1754     ++a;
1755   }
1756 #pragma omp single
1757   {
1758 #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?}}
1759     for (int i = 0; i < 10; ++i)
1760       ;
1761   }
1762 #pragma omp single
1763   {
1764 #pragma omp target update to(a)
1765     bar();
1766   }
1767 #pragma omp single
1768   {
1769 #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?}}
1770     for (int i = 0; i < 10; ++i)
1771       ;
1772   }
1773 #pragma omp single
1774   {
1775 #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?}}
1776     for (int i = 0; i < 10; ++i)
1777       ;
1778   }
1779 #pragma omp single
1780   {
1781 #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?}}
1782     for (int i = 0; i < 10; ++i)
1783       ;
1784   }
1785 #pragma omp single
1786   {
1787 #pragma omp target simd // OK
1788     for (int i = 0; i < 10; ++i)
1789       ;
1790   }
1791 #pragma omp single
1792   {
1793 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
1794     for (int i = 0; i < 10; ++i)
1795       ;
1796   }
1797 #pragma omp single
1798   {
1799 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
1800     for (int i = 0; i < 10; ++i)
1801       ;
1802   }
1803 #pragma omp single
1804   {
1805 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1806     for (int i = 0; i < 10; ++i)
1807       ;
1808   }
1809 #pragma omp single
1810   {
1811 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1812     for (int i = 0; i < 10; ++i)
1813       ;
1814   }
1815 #pragma omp single
1816   {
1817 #pragma omp target teams // OK
1818     ++a;
1819   }
1820 #pragma omp single
1821   {
1822 #pragma omp target teams distribute // OK
1823     for (int i = 0; i < 10; ++i)
1824       ;
1825   }
1826 #pragma omp single
1827   {
1828 #pragma omp target teams distribute parallel for // OK
1829     for (int i = 0; i < 10; ++i)
1830       ;
1831   }
1832 #pragma omp single
1833   {
1834 #pragma omp target teams distribute parallel for simd // OK
1835     for (int i = 0; i < 10; ++i)
1836       ;
1837   }
1838 #pragma omp single
1839   {
1840 #pragma omp target teams distribute simd // OK
1841     for (int i = 0; i < 10; ++i)
1842       ;
1843   }
1844 
1845 // MASTER DIRECTIVE
1846 #pragma omp master
1847   {
1848 #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?}}
1849     for (int i = 0; i < 10; ++i)
1850       ;
1851   }
1852 #pragma omp master
1853   {
1854 #pragma omp simd
1855     for (int i = 0; i < 10; ++i)
1856       ;
1857   }
1858 #pragma omp master
1859   {
1860 #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?}}
1861     for (int i = 0; i < 10; ++i)
1862       ;
1863   }
1864 #pragma omp master
1865   {
1866 #pragma omp parallel
1867     for (int i = 0; i < 10; ++i)
1868       ;
1869   }
1870 #pragma omp master
1871   {
1872 #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?}}
1873     {
1874       bar();
1875     }
1876   }
1877 #pragma omp master
1878   {
1879 #pragma omp master // OK, though second 'master' is redundant
1880     {
1881       bar();
1882     }
1883   }
1884 #pragma omp master
1885   {
1886 #pragma omp critical
1887     {
1888       bar();
1889     }
1890   }
1891 #pragma omp master
1892   {
1893 #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?}}
1894     {
1895       bar();
1896     }
1897   }
1898 #pragma omp master
1899   {
1900 #pragma omp parallel
1901     {
1902 #pragma omp master // OK
1903       {
1904         bar();
1905       }
1906 #pragma omp for // OK
1907       for (int i = 0; i < 10; ++i)
1908         ;
1909 #pragma omp for simd // OK
1910       for (int i = 0; i < 10; ++i)
1911         ;
1912 #pragma omp sections // OK
1913       {
1914         bar();
1915       }
1916     }
1917   }
1918 #pragma omp master
1919   {
1920 #pragma omp parallel for
1921     for (int i = 0; i < 10; ++i)
1922       ;
1923   }
1924 #pragma omp master
1925   {
1926 #pragma omp parallel for simd
1927     for (int i = 0; i < 10; ++i)
1928       ;
1929   }
1930 #pragma omp master
1931   {
1932 #pragma omp parallel sections
1933     {
1934       bar();
1935     }
1936   }
1937 #pragma omp master
1938   {
1939 #pragma omp task
1940     {
1941       bar();
1942     }
1943   }
1944 #pragma omp master
1945   {
1946 #pragma omp taskyield
1947     bar();
1948   }
1949 #pragma omp master
1950   {
1951 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1952     bar();
1953   }
1954 #pragma omp master
1955   {
1956 #pragma omp taskwait
1957     bar();
1958   }
1959 #pragma omp master
1960   {
1961 #pragma omp flush
1962     bar();
1963   }
1964 #pragma omp master
1965   {
1966 #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?}}
1967     bar();
1968   }
1969 #pragma omp master
1970   {
1971 #pragma omp atomic
1972     ++a;
1973   }
1974 #pragma omp master
1975   {
1976 #pragma omp target
1977     ++a;
1978   }
1979 #pragma omp master
1980   {
1981 #pragma omp target parallel
1982     ++a;
1983   }
1984 #pragma omp master
1985   {
1986 #pragma omp target parallel for
1987     for (int i = 0; i < 10; ++i)
1988       ;
1989   }
1990 #pragma omp master
1991   {
1992 #pragma omp target enter data map(to: a)
1993     ++a;
1994   }
1995 #pragma omp master
1996   {
1997 #pragma omp target exit data map(from: a)
1998     ++a;
1999   }
2000 #pragma omp master
2001   {
2002 #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?}}
2003     ++a;
2004   }
2005 #pragma omp master
2006   {
2007 #pragma omp taskloop
2008   for (int i = 0; i < 10; ++i)
2009     ++a;
2010   }
2011 #pragma omp master
2012   {
2013 #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?}}
2014     for (int i = 0; i < 10; ++i)
2015       ;
2016   }
2017 #pragma omp master
2018   {
2019 #pragma omp target update to(a)
2020     bar();
2021   }
2022 #pragma omp master
2023   {
2024 #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?}}
2025     for (int i = 0; i < 10; ++i)
2026       ;
2027   }
2028 #pragma omp master
2029   {
2030 #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?}}
2031     for (int i = 0; i < 10; ++i)
2032       ;
2033   }
2034 #pragma omp master
2035   {
2036 #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?}}
2037     for (int i = 0; i < 10; ++i)
2038       ;
2039   }
2040 #pragma omp master
2041   {
2042 #pragma omp target simd // OK
2043     for (int i = 0; i < 10; ++i)
2044       ;
2045   }
2046 #pragma omp master
2047   {
2048 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
2049     for (int i = 0; i < 10; ++i)
2050       ;
2051   }
2052 #pragma omp master
2053   {
2054 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
2055     for (int i = 0; i < 10; ++i)
2056       ;
2057   }
2058 #pragma omp master
2059   {
2060 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2061     for (int i = 0; i < 10; ++i)
2062       ;
2063   }
2064 #pragma omp master
2065   {
2066 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2067     for (int i = 0; i < 10; ++i)
2068       ;
2069   }
2070 #pragma omp master
2071   {
2072 #pragma omp target teams // OK
2073     a++;
2074   }
2075 #pragma omp master
2076   {
2077 #pragma omp target teams distribute // OK
2078     for (int i = 0; i < 10; ++i)
2079       ;
2080   }
2081 #pragma omp master
2082   {
2083 #pragma omp target teams distribute parallel for // OK
2084     for (int i = 0; i < 10; ++i)
2085       ;
2086   }
2087 #pragma omp master
2088   {
2089 #pragma omp target teams distribute parallel for simd // OK
2090     for (int i = 0; i < 10; ++i)
2091       ;
2092   }
2093 #pragma omp master
2094   {
2095 #pragma omp target teams distribute simd // OK
2096     for (int i = 0; i < 10; ++i)
2097       ;
2098   }
2099 
2100 // CRITICAL DIRECTIVE
2101 #pragma omp critical
2102   {
2103 #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?}}
2104     for (int i = 0; i < 10; ++i)
2105       ;
2106   }
2107 #pragma omp critical
2108   {
2109 #pragma omp simd
2110     for (int i = 0; i < 10; ++i)
2111       ;
2112   }
2113 #pragma omp critical
2114   {
2115 #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?}}
2116     for (int i = 0; i < 10; ++i)
2117       ;
2118   }
2119 #pragma omp critical
2120   {
2121 #pragma omp parallel
2122     for (int i = 0; i < 10; ++i)
2123       ;
2124   }
2125 #pragma omp critical
2126   {
2127 #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?}}
2128     {
2129       bar();
2130     }
2131   }
2132 #pragma omp critical
2133   {
2134 #pragma omp master // OK, though second 'master' is redundant
2135     {
2136       bar();
2137     }
2138   }
2139 #pragma omp critical
2140   {
2141 #pragma omp critical
2142     {
2143       bar();
2144     }
2145   }
2146 #pragma omp critical
2147   {
2148 #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?}}
2149     {
2150       bar();
2151     }
2152   }
2153 #pragma omp critical
2154   {
2155 #pragma omp parallel
2156     {
2157 #pragma omp master // OK
2158       {
2159         bar();
2160       }
2161 #pragma omp for // OK
2162       for (int i = 0; i < 10; ++i)
2163         ;
2164 #pragma omp for simd // OK
2165       for (int i = 0; i < 10; ++i)
2166         ;
2167 #pragma omp sections // OK
2168       {
2169         bar();
2170       }
2171     }
2172   }
2173 #pragma omp critical
2174   {
2175 #pragma omp parallel for
2176     for (int i = 0; i < 10; ++i)
2177       ;
2178   }
2179 #pragma omp critical
2180   {
2181 #pragma omp parallel for simd
2182     for (int i = 0; i < 10; ++i)
2183       ;
2184   }
2185 #pragma omp critical
2186   {
2187 #pragma omp parallel sections
2188     {
2189       bar();
2190     }
2191   }
2192 #pragma omp critical
2193   {
2194 #pragma omp task
2195     {
2196       bar();
2197     }
2198   }
2199 #pragma omp critical
2200   {
2201 #pragma omp taskyield
2202     bar();
2203   }
2204 #pragma omp critical
2205   {
2206 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2207     bar();
2208   }
2209 #pragma omp critical
2210   {
2211 #pragma omp taskwait
2212     bar();
2213   }
2214 #pragma omp critical(Tuzik)
2215   {
2216 #pragma omp critical(grelka)
2217     bar();
2218   }
2219 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2220   {
2221 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2222     {
2223 #pragma omp critical(Tuzik)
2224       {
2225 #pragma omp parallel
2226 #pragma omp critical(grelka)
2227         {
2228           bar();
2229         }
2230       }
2231     }
2232   }
2233 #pragma omp critical
2234   {
2235 #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?}}
2236     bar();
2237   }
2238 #pragma omp critical
2239   {
2240 #pragma omp atomic
2241     ++a;
2242   }
2243 #pragma omp critical
2244   {
2245 #pragma omp target
2246     ++a;
2247   }
2248 #pragma omp critical
2249   {
2250 #pragma omp target parallel
2251     ++a;
2252   }
2253 #pragma omp critical
2254   {
2255 #pragma omp target parallel for
2256     for (int i = 0; i < 10; ++i)
2257       ;
2258   }
2259 #pragma omp critical
2260   {
2261 #pragma omp target enter data map(to: a)
2262     ++a;
2263   }
2264 #pragma omp critical
2265   {
2266 #pragma omp target exit data map(from: a)
2267     ++a;
2268   }
2269 #pragma omp critical
2270   {
2271 #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?}}
2272     ++a;
2273   }
2274 #pragma omp critical
2275   {
2276 #pragma omp taskloop
2277   for (int i = 0; i < 10; ++i)
2278     ++a;
2279   }
2280 #pragma omp critical
2281   {
2282 #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?}}
2283     for (int i = 0; i < 10; ++i)
2284       ;
2285   }
2286 #pragma omp critical
2287   {
2288 #pragma omp target update to(a)
2289     bar();
2290   }
2291 #pragma omp critical
2292   {
2293 #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?}}
2294     for (int i = 0; i < 10; ++i)
2295       ;
2296   }
2297 #pragma omp critical
2298   {
2299 #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?}}
2300     for (int i = 0; i < 10; ++i)
2301       ;
2302   }
2303 #pragma omp critical
2304   {
2305 #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?}}
2306     for (int i = 0; i < 10; ++i)
2307       ;
2308   }
2309 #pragma omp critical
2310   {
2311 #pragma omp target simd // OK
2312     for (int i = 0; i < 10; ++i)
2313       ;
2314   }
2315 #pragma omp critical
2316   {
2317 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
2318     for (int i = 0; i < 10; ++i)
2319       ;
2320   }
2321 #pragma omp critical
2322   {
2323 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
2324     for (int i = 0; i < 10; ++i)
2325       ;
2326   }
2327 #pragma omp critical
2328   {
2329 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2330     for (int i = 0; i < 10; ++i)
2331       ;
2332   }
2333 #pragma omp critical
2334   {
2335 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2336     for (int i = 0; i < 10; ++i)
2337       ;
2338   }
2339 #pragma omp critical
2340   {
2341 #pragma omp target teams // OK
2342     a++;
2343   }
2344 #pragma omp critical
2345   {
2346 #pragma omp target teams distribute // OK
2347     for (int i = 0; i < 10; ++i)
2348       ;
2349   }
2350 #pragma omp critical
2351   {
2352 #pragma omp target teams distribute parallel for // OK
2353     for (int i = 0; i < 10; ++i)
2354       ;
2355   }
2356 #pragma omp critical
2357   {
2358 #pragma omp target teams distribute parallel for simd // OK
2359     for (int i = 0; i < 10; ++i)
2360       ;
2361   }
2362 #pragma omp critical
2363   {
2364 #pragma omp target teams distribute simd // OK
2365     for (int i = 0; i < 10; ++i)
2366       ;
2367   }
2368 
2369 // PARALLEL FOR DIRECTIVE
2370 #pragma omp parallel for
2371   for (int i = 0; i < 10; ++i) {
2372 #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?}}
2373     for (int i = 0; i < 10; ++i)
2374       ;
2375   }
2376 #pragma omp parallel for
2377   for (int i = 0; i < 10; ++i) {
2378 #pragma omp simd
2379     for (int i = 0; i < 10; ++i)
2380       ;
2381   }
2382 #pragma omp parallel for
2383   for (int i = 0; i < 10; ++i) {
2384 #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?}}
2385     for (int i = 0; i < 10; ++i)
2386       ;
2387   }
2388 #pragma omp parallel for
2389   for (int i = 0; i < 10; ++i) {
2390 #pragma omp parallel
2391     for (int i = 0; i < 10; ++i)
2392       ;
2393   }
2394 #pragma omp parallel for
2395   for (int i = 0; i < 10; ++i) {
2396 #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?}}
2397     {
2398       bar();
2399     }
2400   }
2401 #pragma omp parallel for
2402   for (int i = 0; i < 10; ++i) {
2403 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2404     {
2405       bar();
2406     }
2407   }
2408 #pragma omp parallel for
2409   for (int i = 0; i < 10; ++i) {
2410 #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?}}
2411     {
2412       bar();
2413     }
2414   }
2415 
2416 #pragma omp parallel for
2417   for (int i = 0; i < 10; ++i) {
2418 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2419     {
2420       bar();
2421     }
2422   }
2423 
2424 #pragma omp parallel for
2425   for (int i = 0; i < 10; ++i) {
2426 #pragma omp critical
2427     {
2428       bar();
2429     }
2430   }
2431 
2432 #pragma omp parallel for
2433   for (int i = 0; i < 10; ++i) {
2434 #pragma omp parallel
2435     {
2436 #pragma omp single // OK
2437       {
2438         bar();
2439       }
2440 #pragma omp for // OK
2441       for (int i = 0; i < 10; ++i)
2442         ;
2443 #pragma omp for simd // OK
2444       for (int i = 0; i < 10; ++i)
2445         ;
2446 #pragma omp sections // OK
2447       {
2448         bar();
2449       }
2450     }
2451   }
2452 #pragma omp parallel for
2453   for (int i = 0; i < 10; ++i) {
2454 #pragma omp parallel for
2455     for (int i = 0; i < 10; ++i)
2456       ;
2457   }
2458 #pragma omp parallel for
2459   for (int i = 0; i < 10; ++i) {
2460 #pragma omp parallel for simd
2461     for (int i = 0; i < 10; ++i)
2462       ;
2463   }
2464 #pragma omp parallel for
2465   for (int i = 0; i < 10; ++i) {
2466 #pragma omp parallel sections
2467     {
2468       bar();
2469     }
2470   }
2471 #pragma omp parallel for
2472   for (int i = 0; i < 10; ++i) {
2473 #pragma omp task
2474     {
2475       bar();
2476     }
2477   }
2478 #pragma omp parallel for
2479   for (int i = 0; i < 10; ++i) {
2480 #pragma omp taskyield
2481     bar();
2482   }
2483 #pragma omp parallel for
2484   for (int i = 0; i < 10; ++i) {
2485 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2486     bar();
2487   }
2488 #pragma omp parallel for
2489   for (int i = 0; i < 10; ++i) {
2490 #pragma omp taskwait
2491     bar();
2492   }
2493 #pragma omp parallel for
2494   for (int i = 0; i < 10; ++i) {
2495 #pragma omp flush
2496     bar();
2497   }
2498 #pragma omp parallel for
2499   for (int i = 0; i < 10; ++i) {
2500 #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?}}
2501     bar();
2502   }
2503 #pragma omp parallel for ordered
2504   for (int i = 0; i < 10; ++i) {
2505 #pragma omp ordered // OK
2506     bar();
2507   }
2508 #pragma omp parallel for
2509   for (int i = 0; i < 10; ++i) {
2510 #pragma omp atomic
2511     ++a;
2512   }
2513 #pragma omp parallel for
2514   for (int i = 0; i < 10; ++i) {
2515 #pragma omp target
2516     ++a;
2517   }
2518 #pragma omp parallel for
2519   for (int i = 0; i < 10; ++i) {
2520 #pragma omp target parallel
2521     ++a;
2522   }
2523 #pragma omp parallel for
2524   for (int i = 0; i < 10; ++i) {
2525 #pragma omp target parallel for
2526     for (int i = 0; i < 10; ++i)
2527       ;
2528   }
2529 #pragma omp parallel for
2530   for (int i = 0; i < 10; ++i) {
2531 #pragma omp target enter data map(to: a)
2532     ++a;
2533   }
2534 #pragma omp parallel for
2535   for (int i = 0; i < 10; ++i) {
2536 #pragma omp target exit data map(from: a)
2537     ++a;
2538   }
2539 #pragma omp parallel for
2540   for (int i = 0; i < 10; ++i) {
2541 #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?}}
2542     ++a;
2543   }
2544 #pragma omp parallel for
2545   for (int i = 0; i < 10; ++i) {
2546 #pragma omp taskloop
2547   for (int i = 0; i < 10; ++i)
2548     ++a;
2549   }
2550 #pragma omp parallel for
2551   for (int i = 0; i < 10; ++i) {
2552 #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?}}
2553     for (int j = 0; j < 10; ++j)
2554       ;
2555   }
2556 #pragma omp parallel for
2557   for (int i = 0; i < 10; ++i) {
2558 #pragma omp target update to(a)
2559   }
2560 #pragma omp parallel for
2561   for (int i = 0; i < 10; ++i) {
2562 #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?}}
2563     for (int j = 0; j < 10; ++j)
2564       ;
2565   }
2566 #pragma omp parallel for
2567   for (int i = 0; i < 10; ++i) {
2568 #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?}}
2569     for (int j = 0; j < 10; ++j)
2570       ;
2571   }
2572 #pragma omp parallel for
2573   for (int i = 0; i < 10; ++i) {
2574 #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?}}
2575     for (int j = 0; j < 10; ++j)
2576       ;
2577   }
2578 #pragma omp parallel for
2579   for (int i = 0; i < 10; ++i) {
2580 #pragma omp target simd // OK
2581     for (int j = 0; j < 10; ++j)
2582       ;
2583   }
2584 #pragma omp parallel for
2585   for (int i = 0; i < 10; ++i) {
2586 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
2587     for (int j = 0; j < 10; ++j)
2588       ;
2589   }
2590 #pragma omp parallel for
2591   for (int i = 0; i < 10; ++i) {
2592 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
2593     for (int j = 0; j < 10; ++j)
2594       ;
2595   }
2596 #pragma omp parallel for
2597   for (int i = 0; i < 10; ++i) {
2598 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2599     for (int j = 0; j < 10; ++j)
2600       ;
2601   }
2602 #pragma omp parallel for
2603   for (int i = 0; i < 10; ++i) {
2604 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2605     for (int j = 0; j < 10; ++j)
2606       ;
2607   }
2608 #pragma omp parallel for
2609   for (int i = 0; i < 10; ++i) {
2610 #pragma omp target teams // OK
2611     a++;
2612   }
2613 #pragma omp parallel for
2614   for (int i = 0; i < 10; ++i) {
2615 #pragma omp target teams distribute // OK
2616     for (int j = 0; j < 10; ++j)
2617       ;
2618   }
2619 #pragma omp parallel for
2620   for (int i = 0; i < 10; ++i) {
2621 #pragma omp target teams distribute parallel for // OK
2622     for (int j = 0; j < 10; ++j)
2623       ;
2624   }
2625 #pragma omp parallel for
2626   for (int i = 0; i < 10; ++i) {
2627 #pragma omp target teams distribute parallel for simd // OK
2628     for (int j = 0; j < 10; ++j)
2629       ;
2630   }
2631 #pragma omp parallel for
2632   for (int i = 0; i < 10; ++i) {
2633 #pragma omp target teams distribute simd // OK
2634     for (int j = 0; j < 10; ++j)
2635       ;
2636   }
2637 
2638 // PARALLEL FOR SIMD DIRECTIVE
2639 #pragma omp parallel for simd
2640   for (int i = 0; i < 10; ++i) {
2641 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2642     for (int i = 0; i < 10; ++i)
2643       ;
2644   }
2645 #pragma omp parallel for simd
2646   for (int i = 0; i < 10; ++i) {
2647 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2648     for (int i = 0; i < 10; ++i)
2649       ;
2650   }
2651 #pragma omp parallel for simd
2652   for (int i = 0; i < 10; ++i) {
2653 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2654     for (int i = 0; i < 10; ++i)
2655       ;
2656   }
2657 #pragma omp parallel for simd
2658   for (int i = 0; i < 10; ++i) {
2659 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2660     for (int i = 0; i < 10; ++i)
2661       ;
2662   }
2663 #pragma omp parallel for simd
2664   for (int i = 0; i < 10; ++i) {
2665 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2666     {
2667       bar();
2668     }
2669   }
2670 #pragma omp parallel for simd
2671   for (int i = 0; i < 10; ++i) {
2672 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2673     {
2674       bar();
2675     }
2676   }
2677 #pragma omp parallel for simd
2678   for (int i = 0; i < 10; ++i) {
2679 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2680     {
2681       bar();
2682     }
2683   }
2684 
2685 #pragma omp parallel for simd
2686   for (int i = 0; i < 10; ++i) {
2687 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2688     {
2689       bar();
2690     }
2691   }
2692 
2693 #pragma omp parallel for simd
2694   for (int i = 0; i < 10; ++i) {
2695 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2696     {
2697       bar();
2698     }
2699   }
2700 
2701 #pragma omp parallel for simd
2702   for (int i = 0; i < 10; ++i) {
2703 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2704     {
2705 #pragma omp single
2706       {
2707         bar();
2708       }
2709 #pragma omp for
2710       for (int i = 0; i < 10; ++i)
2711         ;
2712 #pragma omp for simd
2713       for (int i = 0; i < 10; ++i)
2714         ;
2715 #pragma omp sections
2716       {
2717         bar();
2718       }
2719     }
2720   }
2721 #pragma omp parallel for simd
2722   for (int i = 0; i < 10; ++i) {
2723 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2724     for (int i = 0; i < 10; ++i)
2725       ;
2726   }
2727 #pragma omp parallel for simd
2728   for (int i = 0; i < 10; ++i) {
2729 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2730     for (int i = 0; i < 10; ++i)
2731       ;
2732   }
2733 #pragma omp parallel for simd
2734   for (int i = 0; i < 10; ++i) {
2735 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2736     {
2737       bar();
2738     }
2739   }
2740 #pragma omp parallel for simd
2741   for (int i = 0; i < 10; ++i) {
2742 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2743     {
2744       bar();
2745     }
2746   }
2747 #pragma omp parallel for simd
2748   for (int i = 0; i < 10; ++i) {
2749 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2750     bar();
2751   }
2752 #pragma omp parallel for simd
2753   for (int i = 0; i < 10; ++i) {
2754 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2755     bar();
2756   }
2757 #pragma omp parallel for simd
2758   for (int i = 0; i < 10; ++i) {
2759 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2760     bar();
2761   }
2762 #pragma omp parallel for simd
2763   for (int i = 0; i < 10; ++i) {
2764 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2765     bar();
2766   }
2767 #pragma omp parallel for simd
2768   for (int i = 0; i < 10; ++i) {
2769 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2770     bar();
2771   }
2772 #pragma omp parallel for simd
2773   for (int i = 0; i < 10; ++i) {
2774 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2775     bar();
2776   }
2777 #pragma omp parallel for simd
2778   for (int i = 0; i < 10; ++i) {
2779 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2780     ++a;
2781   }
2782 #pragma omp parallel for simd
2783   for (int i = 0; i < 10; ++i) {
2784 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2785     ++a;
2786   }
2787 #pragma omp parallel for simd
2788   for (int i = 0; i < 10; ++i) {
2789 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2790     ++a;
2791   }
2792 #pragma omp parallel for simd
2793   for (int i = 0; i < 10; ++i) {
2794 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2795     for (int i = 0; i < 10; ++i)
2796       ;
2797   }
2798 #pragma omp parallel for simd
2799   for (int i = 0; i < 10; ++i) {
2800 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2801     ++a;
2802   }
2803 #pragma omp parallel for simd
2804   for (int i = 0; i < 10; ++i) {
2805 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2806     ++a;
2807   }
2808 #pragma omp parallel for simd
2809   for (int i = 0; i < 10; ++i) {
2810 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2811     ++a;
2812   }
2813 #pragma omp parallel for simd
2814   for (int i = 0; i < 10; ++i) {
2815 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2816   for (int i = 0; i < 10; ++i)
2817     ++a;
2818   }
2819 #pragma omp parallel for simd
2820   for (int i = 0; i < 10; ++i) {
2821 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2822     for (int j = 0; j < 10; ++j)
2823       ;
2824   }
2825 #pragma omp parallel for simd
2826   for (int i = 0; i < 10; ++i) {
2827 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2828     bar();
2829   }
2830 #pragma omp parallel for simd
2831   for (int i = 0; i < 10; ++i) {
2832 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2833     for (int j = 0; j < 10; ++j)
2834       ;
2835   }
2836 #pragma omp parallel for simd
2837   for (int i = 0; i < 10; ++i) {
2838 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2839     for (int j = 0; j < 10; ++j)
2840       ;
2841   }
2842 #pragma omp parallel for simd
2843   for (int i = 0; i < 10; ++i) {
2844 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2845     for (int j = 0; j < 10; ++j)
2846       ;
2847   }
2848 #pragma omp parallel for simd
2849   for (int i = 0; i < 10; ++i) {
2850 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2851     for (int j = 0; j < 10; ++j)
2852       ;
2853   }
2854 #pragma omp parallel for simd
2855   for (int i = 0; i < 10; ++i) {
2856 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2857     for (int j = 0; j < 10; ++j)
2858       ;
2859   }
2860 #pragma omp parallel for simd
2861   for (int i = 0; i < 10; ++i) {
2862 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2863     for (int j = 0; j < 10; ++j)
2864       ;
2865   }
2866 #pragma omp parallel for simd
2867   for (int i = 0; i < 10; ++i) {
2868 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2869     for (int j = 0; j < 10; ++j)
2870       ;
2871   }
2872 #pragma omp parallel for simd
2873   for (int i = 0; i < 10; ++i) {
2874 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2875     for (int j = 0; j < 10; ++j)
2876       ;
2877   }
2878 #pragma omp parallel for simd
2879   for (int i = 0; i < 10; ++i) {
2880 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2881     a++;
2882   }
2883 #pragma omp parallel for simd
2884   for (int i = 0; i < 10; ++i) {
2885 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2886     for (int j = 0; j < 10; ++j)
2887       ;
2888   }
2889 #pragma omp parallel for simd
2890   for (int i = 0; i < 10; ++i) {
2891 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2892     for (int j = 0; j < 10; ++j)
2893       ;
2894   }
2895 #pragma omp parallel for simd
2896   for (int i = 0; i < 10; ++i) {
2897 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2898     for (int j = 0; j < 10; ++j)
2899       ;
2900   }
2901 #pragma omp parallel for simd
2902   for (int i = 0; i < 10; ++i) {
2903 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2904     for (int j = 0; j < 10; ++j)
2905       ;
2906   }
2907 
2908 // PARALLEL SECTIONS DIRECTIVE
2909 #pragma omp parallel sections
2910   {
2911 #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?}}
2912     for (int i = 0; i < 10; ++i)
2913       ;
2914   }
2915 #pragma omp parallel sections
2916   {
2917 #pragma omp simd
2918     for (int i = 0; i < 10; ++i)
2919       ;
2920   }
2921 #pragma omp parallel sections
2922   {
2923 #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?}}
2924     for (int i = 0; i < 10; ++i)
2925       ;
2926   }
2927 #pragma omp parallel sections
2928   {
2929 #pragma omp parallel
2930     for (int i = 0; i < 10; ++i)
2931       ;
2932   }
2933 #pragma omp parallel sections
2934   {
2935 #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?}}
2936     {
2937       bar();
2938     }
2939   }
2940 #pragma omp parallel sections
2941   {
2942 #pragma omp section
2943     {
2944       bar();
2945     }
2946   }
2947 #pragma omp parallel sections
2948   {
2949 #pragma omp section
2950     {
2951 #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?}}
2952       bar();
2953     }
2954   }
2955 #pragma omp parallel sections
2956   {
2957 #pragma omp section
2958     {
2959 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2960       bar();
2961     }
2962   }
2963 #pragma omp parallel sections
2964   {
2965 #pragma omp section
2966     {
2967 #pragma omp critical
2968       bar();
2969     }
2970   }
2971 #pragma omp parallel sections
2972   {
2973 #pragma omp parallel
2974     {
2975 #pragma omp single // OK
2976       {
2977         bar();
2978       }
2979 #pragma omp for // OK
2980       for (int i = 0; i < 10; ++i)
2981         ;
2982 #pragma omp for simd // OK
2983       for (int i = 0; i < 10; ++i)
2984         ;
2985 #pragma omp sections // OK
2986       {
2987         bar();
2988       }
2989     }
2990   }
2991 #pragma omp parallel sections
2992   {
2993 #pragma omp parallel for
2994     for (int i = 0; i < 10; ++i)
2995       ;
2996   }
2997 #pragma omp parallel sections
2998   {
2999 #pragma omp parallel for simd
3000     for (int i = 0; i < 10; ++i)
3001       ;
3002   }
3003 #pragma omp parallel sections
3004   {
3005 #pragma omp parallel sections
3006     {
3007       bar();
3008     }
3009   }
3010 #pragma omp parallel sections
3011   {
3012 #pragma omp task
3013     {
3014       bar();
3015     }
3016   }
3017 #pragma omp parallel sections
3018   {
3019 #pragma omp taskyield
3020   }
3021 #pragma omp parallel sections
3022   {
3023 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3024   }
3025 #pragma omp parallel sections
3026   {
3027 #pragma omp taskwait
3028   }
3029 #pragma omp parallel sections
3030   {
3031 #pragma omp flush
3032   }
3033 #pragma omp parallel sections
3034   {
3035 #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?}}
3036     bar();
3037   }
3038 #pragma omp parallel sections
3039   {
3040 #pragma omp atomic
3041     ++a;
3042   }
3043 #pragma omp parallel sections
3044   {
3045 #pragma omp target
3046     ++a;
3047   }
3048 #pragma omp parallel sections
3049   {
3050 #pragma omp target parallel
3051     ++a;
3052   }
3053 #pragma omp parallel sections
3054   {
3055 #pragma omp target parallel for
3056     for (int i = 0; i < 10; ++i)
3057       ;
3058   }
3059 #pragma omp parallel sections
3060   {
3061 #pragma omp target enter data map(to: a)
3062   }
3063 #pragma omp parallel sections
3064   {
3065 #pragma omp target exit data map(from: a)
3066   }
3067 #pragma omp parallel sections
3068   {
3069 #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?}}
3070     ++a;
3071   }
3072 #pragma omp parallel sections
3073   {
3074 #pragma omp taskloop
3075   for (int i = 0; i < 10; ++i)
3076     ++a;
3077   }
3078 #pragma omp parallel sections
3079   {
3080 #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?}}
3081     for (int i = 0; i < 10; ++i)
3082       ;
3083   }
3084 #pragma omp parallel sections
3085   {
3086 #pragma omp target update to(a)
3087   }
3088 #pragma omp parallel sections
3089   {
3090 #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?}}
3091     for (int i = 0; i < 10; ++i)
3092       ;
3093   }
3094 #pragma omp parallel sections
3095   {
3096 #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?}}
3097     for (int i = 0; i < 10; ++i)
3098       ;
3099   }
3100 #pragma omp parallel sections
3101   {
3102 #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?}}
3103     for (int i = 0; i < 10; ++i)
3104       ;
3105   }
3106 #pragma omp parallel sections
3107   {
3108 #pragma omp target simd // OK
3109     for (int i = 0; i < 10; ++i)
3110       ;
3111   }
3112 #pragma omp parallel sections
3113   {
3114 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
3115     for (int i = 0; i < 10; ++i)
3116       ;
3117   }
3118 #pragma omp parallel sections
3119   {
3120 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
3121     for (int i = 0; i < 10; ++i)
3122       ;
3123   }
3124 #pragma omp parallel sections
3125   {
3126 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3127     for (int i = 0; i < 10; ++i)
3128       ;
3129   }
3130 #pragma omp parallel sections
3131   {
3132 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3133     for (int i = 0; i < 10; ++i)
3134       ;
3135   }
3136 #pragma omp parallel sections
3137   {
3138 #pragma omp target teams // OK
3139     a++;
3140   }
3141 #pragma omp parallel sections
3142   {
3143 #pragma omp target teams distribute // OK
3144     for (int i = 0; i < 10; ++i)
3145       ;
3146   }
3147 #pragma omp parallel sections
3148   {
3149 #pragma omp target teams distribute parallel for // OK
3150     for (int i = 0; i < 10; ++i)
3151       ;
3152   }
3153 #pragma omp parallel sections
3154   {
3155 #pragma omp target teams distribute parallel for simd // OK
3156     for (int i = 0; i < 10; ++i)
3157       ;
3158   }
3159 #pragma omp parallel sections
3160   {
3161 #pragma omp target teams distribute simd // OK
3162     for (int i = 0; i < 10; ++i)
3163       ;
3164   }
3165 
3166 // TASK DIRECTIVE
3167 #pragma omp task
3168 #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?}}
3169   for (int i = 0; i < 10; ++i)
3170     ;
3171 #pragma omp task
3172 #pragma omp simd
3173   for (int i = 0; i < 10; ++i)
3174     ;
3175 #pragma omp task
3176 #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?}}
3177   for (int i = 0; i < 10; ++i)
3178     ;
3179 #pragma omp task
3180 #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?}}
3181   {
3182     bar();
3183   }
3184 #pragma omp task
3185 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
3186   {
3187     bar();
3188   }
3189 #pragma omp task
3190 #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?}}
3191   bar();
3192 #pragma omp task
3193 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
3194   bar();
3195 #pragma omp task
3196 #pragma omp critical
3197   bar();
3198 
3199 #pragma omp task
3200 #pragma omp parallel for
3201   for (int i = 0; i < 10; ++i)
3202     ;
3203 #pragma omp task
3204 #pragma omp parallel for simd
3205   for (int i = 0; i < 10; ++i)
3206     ;
3207 #pragma omp task
3208 #pragma omp parallel sections
3209   {
3210     bar();
3211   }
3212 #pragma omp task
3213 #pragma omp task
3214   {
3215     bar();
3216   }
3217 #pragma omp task
3218   {
3219 #pragma omp taskyield
3220     bar();
3221   }
3222 #pragma omp task
3223   {
3224 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
3225     bar();
3226   }
3227 #pragma omp task
3228   {
3229 #pragma omp taskwait
3230     bar();
3231   }
3232 #pragma omp task
3233   {
3234 #pragma omp flush
3235     bar();
3236   }
3237 #pragma omp task
3238   {
3239 #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?}}
3240     bar();
3241   }
3242 #pragma omp task
3243   {
3244 #pragma omp atomic
3245     ++a;
3246   }
3247 #pragma omp task
3248   {
3249 #pragma omp target
3250     ++a;
3251   }
3252 #pragma omp task
3253   {
3254 #pragma omp target parallel
3255     ++a;
3256   }
3257 #pragma omp task
3258 #pragma omp target parallel for
3259   for (int i = 0; i < 10; ++i)
3260     ;
3261 #pragma omp task
3262   {
3263 #pragma omp target enter data map(to: a)
3264     ++a;
3265   }
3266 #pragma omp task
3267   {
3268 #pragma omp target exit data map(from: a)
3269     ++a;
3270   }
3271 #pragma omp task
3272   {
3273 #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?}}
3274     ++a;
3275   }
3276 #pragma omp task
3277   {
3278 #pragma omp taskloop
3279   for (int i = 0; i < 10; ++i)
3280     ++a;
3281   }
3282 #pragma omp task
3283   {
3284 #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?}}
3285     for (int i = 0; i < 10; ++i)
3286       ;
3287   }
3288 #pragma omp task
3289   {
3290 #pragma omp target update to(a)
3291     bar();
3292   }
3293 #pragma omp task
3294   {
3295 #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?}}
3296     for (int i = 0; i < 10; ++i)
3297       ;
3298   }
3299 #pragma omp task
3300   {
3301 #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?}}
3302     for (int i = 0; i < 10; ++i)
3303       ;
3304   }
3305 #pragma omp task
3306   {
3307 #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?}}
3308     for (int i = 0; i < 10; ++i)
3309       ;
3310   }
3311 #pragma omp task
3312   {
3313 #pragma omp target simd // OK
3314     for (int i = 0; i < 10; ++i)
3315       ;
3316   }
3317 #pragma omp task
3318   {
3319 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
3320     for (int i = 0; i < 10; ++i)
3321       ;
3322   }
3323 #pragma omp task
3324   {
3325 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
3326     for (int i = 0; i < 10; ++i)
3327       ;
3328   }
3329 #pragma omp task
3330   {
3331 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3332     for (int i = 0; i < 10; ++i)
3333       ;
3334   }
3335 #pragma omp task
3336   {
3337 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3338     for (int i = 0; i < 10; ++i)
3339       ;
3340   }
3341 #pragma omp task
3342   {
3343 #pragma omp target teams // OK
3344     a++;
3345   }
3346 #pragma omp task
3347   {
3348 #pragma omp target teams distribute // OK
3349     for (int i = 0; i < 10; ++i)
3350       ;
3351   }
3352 #pragma omp task
3353   {
3354 #pragma omp target teams distribute parallel for // OK
3355     for (int i = 0; i < 10; ++i)
3356       ;
3357   }
3358 #pragma omp task
3359   {
3360 #pragma omp target teams distribute parallel for simd // OK
3361     for (int i = 0; i < 10; ++i)
3362       ;
3363   }
3364 #pragma omp task
3365   {
3366 #pragma omp target teams distribute simd // OK
3367     for (int i = 0; i < 10; ++i)
3368       ;
3369   }
3370 
3371 // ORDERED DIRECTIVE
3372 #pragma omp ordered
3373   {
3374 #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?}}
3375     for (int i = 0; i < 10; ++i)
3376       ;
3377   }
3378 #pragma omp ordered
3379   {
3380 #pragma omp simd
3381     for (int i = 0; i < 10; ++i)
3382       ;
3383   }
3384 #pragma omp ordered
3385   {
3386 #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?}}
3387     for (int i = 0; i < 10; ++i)
3388       ;
3389   }
3390 #pragma omp ordered
3391   {
3392 #pragma omp parallel
3393     for (int i = 0; i < 10; ++i)
3394       ;
3395   }
3396 #pragma omp ordered
3397   {
3398 #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?}}
3399     {
3400       bar();
3401     }
3402   }
3403 #pragma omp ordered
3404   {
3405 #pragma omp master // OK, though second 'ordered' is redundant
3406     {
3407       bar();
3408     }
3409   }
3410 #pragma omp ordered
3411   {
3412 #pragma omp critical
3413     {
3414       bar();
3415     }
3416   }
3417 #pragma omp ordered
3418   {
3419 #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?}}
3420     {
3421       bar();
3422     }
3423   }
3424 #pragma omp ordered
3425   {
3426 #pragma omp parallel for ordered
3427     for (int j = 0; j < 10; ++j) {
3428 #pragma omp ordered // OK
3429       {
3430         bar();
3431       }
3432     }
3433   }
3434 #pragma omp ordered
3435   {
3436 #pragma omp parallel for simd ordered
3437     for (int j = 0; j < 10; ++j) {
3438 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3439       {
3440         bar();
3441       }
3442     }
3443   }
3444 #pragma omp ordered
3445   {
3446 #pragma omp parallel for simd ordered
3447     for (int j = 0; j < 10; ++j) {
3448 #pragma omp ordered simd
3449       {
3450         bar();
3451       }
3452     }
3453   }
3454 #pragma omp ordered
3455   {
3456 #pragma omp parallel for
3457     for (int i = 0; i < 10; ++i)
3458       ;
3459   }
3460 #pragma omp ordered
3461   {
3462 #pragma omp parallel for simd
3463     for (int i = 0; i < 10; ++i)
3464       ;
3465   }
3466 #pragma omp ordered
3467   {
3468 #pragma omp parallel sections
3469     {
3470       bar();
3471     }
3472   }
3473 #pragma omp ordered
3474   {
3475 #pragma omp task
3476     {
3477       bar();
3478     }
3479   }
3480 #pragma omp ordered
3481   {
3482 #pragma omp taskyield
3483     bar();
3484   }
3485 #pragma omp ordered
3486   {
3487 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3488     bar();
3489   }
3490 #pragma omp ordered
3491   {
3492 #pragma omp taskwait
3493     bar();
3494   }
3495 #pragma omp ordered
3496   {
3497 #pragma omp flush
3498     bar();
3499   }
3500 #pragma omp ordered
3501   {
3502 #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?}}
3503     bar();
3504   }
3505 #pragma omp ordered
3506   {
3507 #pragma omp atomic
3508     ++a;
3509   }
3510 #pragma omp ordered
3511   {
3512 #pragma omp target
3513     ++a;
3514   }
3515 #pragma omp ordered
3516   {
3517 #pragma omp target parallel
3518     ++a;
3519   }
3520 #pragma omp ordered
3521   {
3522 #pragma omp target parallel for ordered
3523     for (int j = 0; j < 10; ++j) {
3524 #pragma omp ordered // OK
3525       {
3526         bar();
3527       }
3528     }
3529   }
3530 #pragma omp ordered
3531   {
3532 #pragma omp target parallel for
3533     for (int i = 0; i < 10; ++i)
3534       ;
3535   }
3536 #pragma omp ordered
3537   {
3538 #pragma omp target enter data map(to: a)
3539     ++a;
3540   }
3541 #pragma omp ordered
3542   {
3543 #pragma omp target exit data map(from: a)
3544     ++a;
3545   }
3546 #pragma omp ordered
3547   {
3548 #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?}}
3549     ++a;
3550   }
3551 #pragma omp ordered
3552   {
3553 #pragma omp taskloop
3554   for (int i = 0; i < 10; ++i)
3555     ++a;
3556   }
3557 #pragma omp ordered
3558   {
3559 #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?}}
3560     for (int i = 0; i < 10; ++i)
3561       ;
3562   }
3563 #pragma omp ordered
3564   {
3565     bar();
3566 #pragma omp target update to(a)
3567     bar();
3568   }
3569 #pragma omp ordered
3570   {
3571 #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?}}
3572     for (int i = 0; i < 10; ++i)
3573       ;
3574   }
3575 #pragma omp ordered
3576   {
3577 #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?}}
3578     for (int i = 0; i < 10; ++i)
3579       ;
3580   }
3581 #pragma omp ordered
3582   {
3583 #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?}}
3584     for (int i = 0; i < 10; ++i)
3585       ;
3586   }
3587 #pragma omp ordered
3588   {
3589 #pragma omp target simd // OK
3590     for (int i = 0; i < 10; ++i)
3591       ;
3592   }
3593 #pragma omp ordered
3594   {
3595 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
3596     for (int i = 0; i < 10; ++i)
3597       ;
3598   }
3599 #pragma omp ordered
3600   {
3601 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
3602     for (int i = 0; i < 10; ++i)
3603       ;
3604   }
3605 #pragma omp ordered
3606   {
3607 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3608     for (int i = 0; i < 10; ++i)
3609       ;
3610   }
3611 #pragma omp ordered
3612   {
3613 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3614     for (int i = 0; i < 10; ++i)
3615       ;
3616   }
3617 #pragma omp ordered
3618   {
3619 #pragma omp target teams // OK
3620     a++;
3621   }
3622 #pragma omp ordered
3623   {
3624 #pragma omp target teams distribute // OK
3625     for (int i = 0; i < 10; ++i)
3626       ;
3627   }
3628 #pragma omp ordered
3629   {
3630 #pragma omp target teams distribute parallel for // OK
3631     for (int i = 0; i < 10; ++i)
3632       ;
3633   }
3634 #pragma omp ordered
3635   {
3636 #pragma omp target teams distribute parallel for simd // OK
3637     for (int i = 0; i < 10; ++i)
3638       ;
3639   }
3640 #pragma omp ordered
3641   {
3642 #pragma omp target teams distribute simd // OK
3643     for (int i = 0; i < 10; ++i)
3644       ;
3645   }
3646 
3647 // ATOMIC DIRECTIVE
3648 #pragma omp atomic
3649   // 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}}
3650   // expected-note@+1 {{expected an expression statement}}
3651   {
3652 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3653     for (int i = 0; i < 10; ++i)
3654       ;
3655   }
3656 #pragma omp atomic
3657   // 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}}
3658   // expected-note@+1 {{expected an expression statement}}
3659   {
3660 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3661     for (int i = 0; i < 10; ++i)
3662       ;
3663   }
3664 #pragma omp atomic
3665   // 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}}
3666   // expected-note@+1 {{expected an expression statement}}
3667   {
3668 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3669     for (int i = 0; i < 10; ++i)
3670       ;
3671   }
3672 #pragma omp atomic
3673   // 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}}
3674   // expected-note@+1 {{expected an expression statement}}
3675   {
3676 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3677     for (int i = 0; i < 10; ++i)
3678       ;
3679   }
3680 #pragma omp atomic
3681   // 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}}
3682   // expected-note@+1 {{expected an expression statement}}
3683   {
3684 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3685     {
3686       bar();
3687     }
3688   }
3689 #pragma omp atomic
3690   // 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}}
3691   // expected-note@+1 {{expected an expression statement}}
3692   {
3693 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3694     {
3695       bar();
3696     }
3697   }
3698 #pragma omp atomic
3699   // 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}}
3700   // expected-note@+1 {{expected an expression statement}}
3701   {
3702 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3703     {
3704       bar();
3705     }
3706   }
3707 #pragma omp atomic
3708   // 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}}
3709   // expected-note@+1 {{expected an expression statement}}
3710   {
3711 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3712     {
3713       bar();
3714     }
3715   }
3716 #pragma omp atomic
3717   // 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}}
3718   // expected-note@+1 {{expected an expression statement}}
3719   {
3720 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3721     {
3722       bar();
3723     }
3724   }
3725 #pragma omp atomic
3726   // 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}}
3727   // expected-note@+1 {{expected an expression statement}}
3728   {
3729 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3730     for (int i = 0; i < 10; ++i)
3731       ;
3732   }
3733 #pragma omp atomic
3734   // 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}}
3735   // expected-note@+1 {{expected an expression statement}}
3736   {
3737 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3738     for (int i = 0; i < 10; ++i)
3739       ;
3740   }
3741 #pragma omp atomic
3742   // 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}}
3743   // expected-note@+1 {{expected an expression statement}}
3744   {
3745 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3746     {
3747       bar();
3748     }
3749   }
3750 #pragma omp atomic
3751   // 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}}
3752   // expected-note@+1 {{expected an expression statement}}
3753   {
3754 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3755     {
3756       bar();
3757     }
3758   }
3759 #pragma omp atomic
3760   // 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}}
3761   // expected-note@+1 {{expected an expression statement}}
3762   {
3763 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3764     bar();
3765   }
3766 #pragma omp atomic
3767   // 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}}
3768   // expected-note@+1 {{expected an expression statement}}
3769   {
3770 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3771     bar();
3772   }
3773 #pragma omp atomic
3774   // 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}}
3775   // expected-note@+1 {{expected an expression statement}}
3776   {
3777 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3778     bar();
3779   }
3780 #pragma omp atomic
3781   // 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}}
3782   // expected-note@+1 {{expected an expression statement}}
3783   {
3784 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3785     bar();
3786   }
3787 #pragma omp atomic
3788   // 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}}
3789   // expected-note@+1 {{expected an expression statement}}
3790   {
3791 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3792     bar();
3793   }
3794 #pragma omp atomic
3795   // 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}}
3796   // expected-note@+1 {{expected an expression statement}}
3797   {
3798 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3799     ++a;
3800   }
3801 #pragma omp atomic
3802   // 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}}
3803   // expected-note@+1 {{expected an expression statement}}
3804   {
3805 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3806     ++a;
3807   }
3808 #pragma omp atomic
3809   // 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}}
3810   // expected-note@+1 {{expected an expression statement}}
3811   {
3812 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3813     ++a;
3814   }
3815 #pragma omp atomic
3816   // 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}}
3817   // expected-note@+1 {{expected an expression statement}}
3818   {
3819 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3820     for (int i = 0; i < 10; ++i)
3821       ;
3822   }
3823 #pragma omp atomic
3824   // 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}}
3825   // expected-note@+1 {{expected an expression statement}}
3826   {
3827 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3828     ++a;
3829   }
3830 #pragma omp atomic
3831   // 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}}
3832   // expected-note@+1 {{expected an expression statement}}
3833   {
3834 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3835     ++a;
3836   }
3837 #pragma omp atomic
3838   // 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}}
3839   // expected-note@+1 {{expected an expression statement}}
3840   {
3841 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3842     ++a;
3843   }
3844 #pragma omp atomic
3845   // 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}}
3846   // expected-note@+1 {{expected an expression statement}}
3847   {
3848 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3849   for (int i = 0; i < 10; ++i)
3850     ++a;
3851   }
3852 #pragma omp atomic
3853   // 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}}
3854   // expected-note@+1 {{expected an expression statement}}
3855   {
3856 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3857     for (int i = 0; i < 10; ++i)
3858       ;
3859   }
3860 #pragma omp atomic
3861   // 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}}
3862   // expected-note@+1 {{expected an expression statement}}
3863   {
3864 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3865     bar();
3866   }
3867 #pragma omp atomic
3868   // 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}}
3869   // expected-note@+1 {{expected an expression statement}}
3870   {
3871 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3872     for (int i = 0; i < 10; ++i)
3873       ;
3874   }
3875 #pragma omp atomic
3876   // 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}}
3877   // expected-note@+1 {{expected an expression statement}}
3878   {
3879 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3880     for (int i = 0; i < 10; ++i)
3881       ;
3882   }
3883 #pragma omp atomic
3884   // 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}}
3885   // expected-note@+1 {{expected an expression statement}}
3886   {
3887 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3888     for (int i = 0; i < 10; ++i)
3889       ;
3890   }
3891 #pragma omp atomic
3892   // 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}}
3893   // expected-note@+1 {{expected an expression statement}}
3894   {
3895 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3896     for (int i = 0; i < 10; ++i)
3897       ;
3898   }
3899 #pragma omp atomic
3900   // 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}}
3901   // expected-note@+1 {{expected an expression statement}}
3902   {
3903 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3904     for (int i = 0; i < 10; ++i)
3905       ;
3906   }
3907 #pragma omp atomic
3908   // 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}}
3909   // expected-note@+1 {{expected an expression statement}}
3910   {
3911 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3912     for (int i = 0; i < 10; ++i)
3913       ;
3914   }
3915 #pragma omp atomic
3916   // 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}}
3917   // expected-note@+1 {{expected an expression statement}}
3918   {
3919 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3920     for (int i = 0; i < 10; ++i)
3921       ;
3922   }
3923 #pragma omp atomic
3924   // 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}}
3925   // expected-note@+1 {{expected an expression statement}}
3926   {
3927 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3928     for (int i = 0; i < 10; ++i)
3929       ;
3930   }
3931 #pragma omp atomic
3932   // 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}}
3933   // expected-note@+1 {{expected an expression statement}}
3934   {
3935 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3936     a++;
3937   }
3938 #pragma omp atomic
3939   // 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}}
3940   // expected-note@+1 {{expected an expression statement}}
3941   {
3942 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3943     for (int i = 0; i < 10; ++i)
3944       ;
3945   }
3946 #pragma omp atomic
3947   // 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}}
3948   // expected-note@+1 {{expected an expression statement}}
3949   {
3950 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3951     for (int i = 0; i < 10; ++i)
3952       ;
3953   }
3954 #pragma omp atomic
3955   // 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}}
3956   // expected-note@+1 {{expected an expression statement}}
3957   {
3958 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3959     for (int i = 0; i < 10; ++i)
3960       ;
3961   }
3962 #pragma omp atomic
3963   // 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}}
3964   // expected-note@+1 {{expected an expression statement}}
3965   {
3966 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3967     for (int i = 0; i < 10; ++i)
3968       ;
3969   }
3970 
3971 // TARGET DIRECTIVE
3972 #pragma omp target
3973 #pragma omp parallel
3974   bar();
3975 #pragma omp target
3976 #pragma omp for
3977   for (int i = 0; i < 10; ++i)
3978     ;
3979 #pragma omp target
3980 #pragma omp simd
3981   for (int i = 0; i < 10; ++i)
3982     ;
3983 #pragma omp target
3984 #pragma omp for simd
3985   for (int i = 0; i < 10; ++i)
3986     ;
3987 #pragma omp target
3988 #pragma omp sections
3989   {
3990     bar();
3991   }
3992 #pragma omp target
3993 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3994   {
3995     bar();
3996   }
3997 #pragma omp target
3998 #pragma omp single
3999   bar();
4000 
4001 #pragma omp target
4002 #pragma omp master
4003   {
4004     bar();
4005   }
4006 #pragma omp target
4007 #pragma omp critical
4008   {
4009     bar();
4010   }
4011 #pragma omp target
4012 #pragma omp parallel for
4013   for (int i = 0; i < 10; ++i)
4014     ;
4015 #pragma omp target
4016 #pragma omp parallel for simd
4017   for (int i = 0; i < 10; ++i)
4018     ;
4019 #pragma omp target
4020 #pragma omp parallel sections
4021   {
4022     bar();
4023   }
4024 #pragma omp target
4025 #pragma omp task
4026   {
4027     bar();
4028   }
4029 #pragma omp target
4030   {
4031 #pragma omp taskyield
4032     bar();
4033   }
4034 #pragma omp target
4035   {
4036 #pragma omp barrier
4037     bar();
4038   }
4039 #pragma omp target
4040   {
4041 #pragma omp taskwait
4042     bar();
4043   }
4044 #pragma omp target
4045   {
4046 #pragma omp flush
4047     bar();
4048   }
4049 #pragma omp target
4050   {
4051 #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?}}
4052     bar();
4053   }
4054 #pragma omp target
4055   {
4056 #pragma omp atomic
4057     ++a;
4058   }
4059 #pragma omp target
4060   {
4061 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4062     ++a;
4063   }
4064 #pragma omp target
4065   {
4066 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4067     ++a;
4068   }
4069 #pragma omp target
4070 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4071   for (int i = 0; i < 10; ++i)
4072     ;
4073 #pragma omp target
4074   {
4075 #pragma omp teams
4076     ++a;
4077   }
4078 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4079   {
4080     ++a;           // expected-note {{statement outside teams construct here}}
4081 #pragma omp teams  // expected-note {{nested teams construct here}}
4082     ++a;
4083   }
4084 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4085   {
4086     while (0)      // expected-note {{statement outside teams construct here}}
4087 #pragma omp teams  // expected-note {{nested teams construct here}}
4088     ++a;
4089   }
4090 #pragma omp target
4091   {
4092 #pragma omp taskloop
4093   for (int i = 0; i < 10; ++i)
4094     ++a;
4095   }
4096 #pragma omp target
4097   {
4098 #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?}}
4099     for (int i = 0; i < 10; ++i)
4100       ;
4101   }
4102 #pragma omp target
4103   {
4104 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4105   }
4106 #pragma omp target
4107   {
4108 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4109   }
4110 #pragma omp target
4111   {
4112 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4113   }
4114 #pragma omp target
4115   {
4116 #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?}}
4117     for (int i = 0; i < 10; ++i)
4118       ;
4119   }
4120 #pragma omp target
4121   {
4122 #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?}}
4123     for (int i = 0; i < 10; ++i)
4124       ;
4125   }
4126 #pragma omp target
4127   {
4128 #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?}}
4129     for (int i = 0; i < 10; ++i)
4130       ;
4131   }
4132 #pragma omp target
4133   {
4134 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4135     for (int i = 0; i < 10; ++i)
4136       ;
4137   }
4138 #pragma omp target
4139   {
4140 #pragma omp teams distribute // OK
4141     for (int i = 0; i < 10; ++i)
4142       ;
4143   }
4144 #pragma omp target
4145   {
4146 #pragma omp teams distribute simd // OK
4147     for (int i = 0; i < 10; ++i)
4148       ;
4149   }
4150 #pragma omp target
4151   {
4152 #pragma omp teams distribute parallel for simd // OK
4153     for (int i = 0; i < 10; ++i)
4154       ;
4155   }
4156 #pragma omp target
4157   {
4158 #pragma omp teams distribute parallel for // OK
4159     for (int i = 0; i < 10; ++i)
4160       ;
4161   }
4162 #pragma omp target
4163   {
4164 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4165     for (int i = 0; i < 10; ++i)
4166       ;
4167   }
4168 #pragma omp target
4169   {
4170 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4171     for (int i = 0; i < 10; ++i)
4172       ;
4173   }
4174 #pragma omp target
4175   {
4176 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4177     for (int i = 0; i < 10; ++i)
4178       ;
4179   }
4180 #pragma omp target
4181   {
4182 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4183     for (int i = 0; i < 10; ++i)
4184       ;
4185   }
4186 #pragma omp target
4187   {
4188 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4189     for (int i = 0; i < 10; ++i)
4190       ;
4191   }
4192 
4193 // TARGET PARALLEL DIRECTIVE
4194 #pragma omp target parallel
4195 #pragma omp parallel
4196   bar();
4197 #pragma omp target parallel
4198 #pragma omp for
4199   for (int i = 0; i < 10; ++i)
4200     ;
4201 #pragma omp target parallel
4202 #pragma omp simd
4203   for (int i = 0; i < 10; ++i)
4204     ;
4205 #pragma omp target parallel
4206 #pragma omp for simd
4207   for (int i = 0; i < 10; ++i)
4208     ;
4209 #pragma omp target parallel
4210 #pragma omp sections
4211   {
4212     bar();
4213   }
4214 #pragma omp target parallel
4215 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
4216   {
4217     bar();
4218   }
4219 #pragma omp target parallel
4220 #pragma omp single
4221   bar();
4222 
4223 #pragma omp target parallel
4224 #pragma omp master
4225   {
4226     bar();
4227   }
4228 #pragma omp target parallel
4229 #pragma omp critical
4230   {
4231     bar();
4232   }
4233 #pragma omp target parallel
4234 #pragma omp parallel for
4235   for (int i = 0; i < 10; ++i)
4236     ;
4237 #pragma omp target parallel
4238 #pragma omp parallel for simd
4239   for (int i = 0; i < 10; ++i)
4240     ;
4241 #pragma omp target parallel
4242 #pragma omp parallel sections
4243   {
4244     bar();
4245   }
4246 #pragma omp target parallel
4247 #pragma omp task
4248   {
4249     bar();
4250   }
4251 #pragma omp target parallel
4252   {
4253 #pragma omp taskyield
4254     bar();
4255   }
4256 #pragma omp target parallel
4257   {
4258 #pragma omp barrier
4259     bar();
4260   }
4261 #pragma omp target parallel
4262   {
4263 #pragma omp taskwait
4264     bar();
4265   }
4266 #pragma omp target parallel
4267   {
4268 #pragma omp flush
4269     bar();
4270   }
4271 #pragma omp target parallel
4272   {
4273 #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?}}
4274     bar();
4275   }
4276 #pragma omp target parallel
4277   {
4278 #pragma omp atomic
4279     ++a;
4280   }
4281 #pragma omp target parallel
4282   {
4283 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
4284     ++a;
4285   }
4286 #pragma omp target parallel
4287   {
4288 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
4289     ++a;
4290   }
4291 #pragma omp target parallel
4292 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4293   for (int i = 0; i < 10; ++i)
4294     ;
4295 #pragma omp target parallel
4296   {
4297 #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?}}
4298     ++a;
4299   }
4300 #pragma omp target parallel
4301   {
4302     ++a;
4303 #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?}}
4304     ++a;
4305   }
4306 #pragma omp target parallel
4307   {
4308 #pragma omp taskloop
4309   for (int i = 0; i < 10; ++i)
4310     ++a;
4311   }
4312 #pragma omp target parallel
4313   {
4314 #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?}}
4315     for (int i = 0; i < 10; ++i)
4316       ;
4317   }
4318 #pragma omp target parallel
4319   {
4320 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4321   }
4322 #pragma omp target parallel
4323   {
4324 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4325   }
4326 #pragma omp target parallel
4327   {
4328 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4329   }
4330 #pragma omp target parallel
4331   {
4332 #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?}}
4333     for (int i = 0; i < 10; ++i)
4334       ;
4335   }
4336 #pragma omp target parallel
4337   {
4338 #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?}}
4339     for (int i = 0; i < 10; ++i)
4340       ;
4341   }
4342 #pragma omp target parallel
4343   {
4344 #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?}}
4345     for (int i = 0; i < 10; ++i)
4346       ;
4347   }
4348 #pragma omp target parallel
4349   {
4350 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4351     for (int i = 0; i < 10; ++i)
4352       ;
4353   }
4354 #pragma omp target parallel
4355   {
4356 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
4357     for (int i = 0; i < 10; ++i)
4358       ;
4359   }
4360 #pragma omp target parallel
4361   {
4362 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
4363     for (int i = 0; i < 10; ++i)
4364       ;
4365   }
4366 #pragma omp target parallel
4367   {
4368 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4369     for (int i = 0; i < 10; ++i)
4370       ;
4371   }
4372 #pragma omp target parallel
4373   {
4374 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4375     for (int i = 0; i < 10; ++i)
4376       ;
4377   }
4378 #pragma omp target parallel
4379   {
4380 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
4381     a++;
4382   }
4383 #pragma omp target parallel
4384   {
4385 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
4386     for (int i = 0; i < 10; ++i)
4387       ;
4388   }
4389 #pragma omp target parallel
4390   {
4391 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4392     for (int i = 0; i < 10; ++i)
4393       ;
4394   }
4395 #pragma omp target parallel
4396   {
4397 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4398     for (int i = 0; i < 10; ++i)
4399       ;
4400   }
4401 #pragma omp target parallel
4402   {
4403 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4404     for (int i = 0; i < 10; ++i)
4405       ;
4406   }
4407 
4408 // TARGET PARALLEL FOR DIRECTIVE
4409 #pragma omp target parallel for
4410   for (int i = 0; i < 10; ++i) {
4411 #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?}}
4412     for (int i = 0; i < 10; ++i)
4413       ;
4414   }
4415 #pragma omp target parallel for
4416   for (int i = 0; i < 10; ++i) {
4417 #pragma omp simd
4418     for (int i = 0; i < 10; ++i)
4419       ;
4420   }
4421 #pragma omp target parallel for
4422   for (int i = 0; i < 10; ++i) {
4423 #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?}}
4424     for (int i = 0; i < 10; ++i)
4425       ;
4426   }
4427 #pragma omp target parallel for
4428   for (int i = 0; i < 10; ++i) {
4429 #pragma omp parallel
4430     for (int i = 0; i < 10; ++i)
4431       ;
4432   }
4433 #pragma omp target parallel for
4434   for (int i = 0; i < 10; ++i) {
4435 #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?}}
4436     {
4437       bar();
4438     }
4439   }
4440 #pragma omp target parallel for
4441   for (int i = 0; i < 10; ++i) {
4442 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
4443     {
4444       bar();
4445     }
4446   }
4447 #pragma omp target parallel for
4448   for (int i = 0; i < 10; ++i) {
4449 #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?}}
4450     {
4451       bar();
4452     }
4453   }
4454 
4455 #pragma omp target parallel for
4456   for (int i = 0; i < 10; ++i) {
4457 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4458     {
4459       bar();
4460     }
4461   }
4462 
4463 #pragma omp target parallel for
4464   for (int i = 0; i < 10; ++i) {
4465 #pragma omp critical
4466     {
4467       bar();
4468     }
4469   }
4470 
4471 #pragma omp target parallel for
4472   for (int i = 0; i < 10; ++i) {
4473 #pragma omp parallel
4474     {
4475 #pragma omp single // OK
4476       {
4477         bar();
4478       }
4479 #pragma omp for // OK
4480       for (int i = 0; i < 10; ++i)
4481         ;
4482 #pragma omp for simd // OK
4483       for (int i = 0; i < 10; ++i)
4484         ;
4485 #pragma omp sections // OK
4486       {
4487         bar();
4488       }
4489     }
4490   }
4491 #pragma omp target parallel for
4492   for (int i = 0; i < 10; ++i) {
4493 #pragma omp parallel for
4494     for (int i = 0; i < 10; ++i)
4495       ;
4496   }
4497 #pragma omp target parallel for
4498   for (int i = 0; i < 10; ++i) {
4499 #pragma omp parallel for simd
4500     for (int i = 0; i < 10; ++i)
4501       ;
4502   }
4503 #pragma omp target parallel for
4504   for (int i = 0; i < 10; ++i) {
4505 #pragma omp parallel sections
4506     {
4507       bar();
4508     }
4509   }
4510 #pragma omp target parallel for
4511   for (int i = 0; i < 10; ++i) {
4512 #pragma omp task
4513     {
4514       bar();
4515     }
4516   }
4517 #pragma omp target parallel for
4518   for (int i = 0; i < 10; ++i) {
4519 #pragma omp taskyield
4520     bar();
4521   }
4522 #pragma omp target parallel for
4523   for (int i = 0; i < 10; ++i) {
4524 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4525     bar();
4526   }
4527 #pragma omp target parallel for
4528   for (int i = 0; i < 10; ++i) {
4529 #pragma omp taskwait
4530     bar();
4531   }
4532 #pragma omp target parallel for
4533   for (int i = 0; i < 10; ++i) {
4534 #pragma omp flush
4535     bar();
4536   }
4537 #pragma omp target parallel for
4538   for (int i = 0; i < 10; ++i) {
4539 #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?}}
4540     bar();
4541   }
4542 #pragma omp target parallel for ordered
4543   for (int i = 0; i < 10; ++i) {
4544 #pragma omp ordered // OK
4545     bar();
4546   }
4547 #pragma omp target parallel for
4548   for (int i = 0; i < 10; ++i) {
4549 #pragma omp atomic
4550     ++a;
4551   }
4552 #pragma omp target parallel for
4553   for (int i = 0; i < 10; ++i) {
4554 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
4555     ++a;
4556   }
4557 #pragma omp target parallel for
4558   for (int i = 0; i < 10; ++i) {
4559 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
4560     ++a;
4561   }
4562 #pragma omp target parallel for
4563   for (int i = 0; i < 10; ++i) {
4564 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4565     for (int i = 0; i < 10; ++i)
4566       ;
4567   }
4568 #pragma omp target parallel for
4569   for (int i = 0; i < 10; ++i) {
4570 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4571     ++a;
4572   }
4573 #pragma omp target parallel for
4574   for (int i = 0; i < 10; ++i) {
4575 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4576     ++a;
4577   }
4578 #pragma omp target parallel for
4579   for (int i = 0; i < 10; ++i) {
4580 #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?}}
4581     ++a;
4582   }
4583 #pragma omp target parallel for
4584   for (int i = 0; i < 10; ++i) {
4585 #pragma omp taskloop
4586   for (int i = 0; i < 10; ++i)
4587     ++a;
4588   }
4589 #pragma omp target parallel for
4590   for (int i = 0; i < 10; ++i) {
4591 #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?}}
4592     for (int j = 0; j < 10; ++j)
4593       ;
4594   }
4595 #pragma omp target parallel for
4596   for (int i = 0; i < 10; ++i) {
4597 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4598   }
4599 #pragma omp target parallel for
4600   for (int i = 0; i < 10; ++i) {
4601 #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?}}
4602     for (int j = 0; j < 10; ++j)
4603       ;
4604   }
4605 #pragma omp target parallel for
4606   for (int i = 0; i < 10; ++i) {
4607 #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?}}
4608     for (int j = 0; j < 10; ++j)
4609       ;
4610   }
4611 #pragma omp target parallel for
4612   for (int i = 0; i < 10; ++i) {
4613 #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?}}
4614     for (int j = 0; j < 10; ++j)
4615       ;
4616   }
4617 #pragma omp target parallel for
4618   for (int i = 0; i < 10; ++i) {
4619 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4620     for (int j = 0; j < 10; ++j)
4621       ;
4622   }
4623 #pragma omp target parallel for
4624   for (int i = 0; i < 10; ++i) {
4625 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
4626     for (int j = 0; j < 10; ++j)
4627       ;
4628   }
4629 #pragma omp target parallel for
4630   for (int i = 0; i < 10; ++i) {
4631 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
4632     for (int j = 0; j < 10; ++j)
4633       ;
4634   }
4635 #pragma omp target parallel for
4636   for (int i = 0; i < 10; ++i) {
4637 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4638     for (int j = 0; j < 10; ++j)
4639       ;
4640   }
4641 #pragma omp target parallel for
4642   for (int i = 0; i < 10; ++i) {
4643 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4644     for (int j = 0; j < 10; ++j)
4645       ;
4646   }
4647 #pragma omp target parallel for
4648   for (int i = 0; i < 10; ++i) {
4649 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
4650     a++;
4651   }
4652 #pragma omp target parallel for
4653   for (int i = 0; i < 10; ++i) {
4654 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
4655     for (int j = 0; j < 10; ++j)
4656       ;
4657   }
4658 #pragma omp target parallel for
4659   for (int i = 0; i < 10; ++i) {
4660 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4661     for (int j = 0; j < 10; ++j)
4662       ;
4663   }
4664 #pragma omp target parallel for
4665   for (int i = 0; i < 10; ++i) {
4666 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4667     for (int j = 0; j < 10; ++j)
4668       ;
4669   }
4670 #pragma omp target parallel for
4671   for (int i = 0; i < 10; ++i) {
4672 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4673     for (int j = 0; j < 10; ++j)
4674       ;
4675   }
4676 
4677 // TEAMS DIRECTIVE
4678 #pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
4679   bar();
4680 #pragma omp target
4681 #pragma omp teams
4682 #pragma omp parallel
4683   bar();
4684 #pragma omp target
4685 #pragma omp teams
4686 #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?}}
4687   for (int i = 0; i < 10; ++i)
4688     ;
4689 #pragma omp target
4690 #pragma omp teams
4691 #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?}}
4692   for (int i = 0; i < 10; ++i)
4693     ;
4694 #pragma omp target
4695 #pragma omp teams
4696 #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?}}
4697   for (int i = 0; i < 10; ++i)
4698     ;
4699 #pragma omp target
4700 #pragma omp teams
4701 #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?}}
4702   {
4703     bar();
4704   }
4705 #pragma omp target
4706 #pragma omp teams
4707 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
4708   {
4709     bar();
4710   }
4711 #pragma omp target
4712 #pragma omp teams
4713 #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?}}
4714   bar();
4715 
4716 #pragma omp target
4717 #pragma omp teams
4718 #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?}}
4719   {
4720     bar();
4721   }
4722 #pragma omp target
4723 #pragma omp teams
4724 #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?}}
4725   {
4726     bar();
4727   }
4728 #pragma omp target
4729 #pragma omp teams
4730 #pragma omp parallel for
4731   for (int i = 0; i < 10; ++i)
4732     ;
4733 #pragma omp target
4734 #pragma omp teams
4735 #pragma omp parallel for simd
4736   for (int i = 0; i < 10; ++i)
4737     ;
4738 #pragma omp target
4739 #pragma omp teams
4740 #pragma omp parallel sections
4741   {
4742     bar();
4743   }
4744 #pragma omp target
4745 #pragma omp teams
4746 #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?}}
4747   {
4748     bar();
4749   }
4750 #pragma omp target
4751 #pragma omp teams
4752   {
4753 #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?}}
4754     bar();
4755   }
4756 #pragma omp target
4757 #pragma omp teams
4758   {
4759 #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?}}
4760     bar();
4761   }
4762 #pragma omp target
4763 #pragma omp teams
4764   {
4765 #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?}}
4766     bar();
4767   }
4768 #pragma omp target
4769 #pragma omp teams
4770   {
4771 #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?}}
4772     bar();
4773   }
4774 #pragma omp target
4775 #pragma omp teams
4776   {
4777 #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?}}
4778     bar();
4779   }
4780 #pragma omp target
4781 #pragma omp teams
4782   {
4783 #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?}}
4784     ++a;
4785   }
4786 #pragma omp target
4787 #pragma omp teams
4788   {
4789 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4790     ++a;
4791   }
4792 #pragma omp target
4793 #pragma omp teams
4794   {
4795 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4796     ++a;
4797   }
4798 #pragma omp target
4799 #pragma omp teams
4800 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4801   for (int i = 0; i < 10; ++i)
4802     ;
4803 #pragma omp target
4804 #pragma omp teams
4805   {
4806 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4807     ++a;
4808   }
4809 #pragma omp target
4810 #pragma omp teams
4811   {
4812 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4813     ++a;
4814   }
4815 #pragma omp target
4816 #pragma omp teams
4817   {
4818 #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?}}
4819     ++a;
4820   }
4821 #pragma omp target
4822 #pragma omp teams
4823   {
4824 #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?}}
4825   for (int i = 0; i < 10; ++i)
4826     ++a;
4827   }
4828 #pragma omp target
4829 #pragma omp teams
4830 #pragma omp distribute
4831   for (int i = 0; i < 10; ++i)
4832     ;
4833 #pragma omp target
4834 #pragma omp teams
4835 #pragma omp distribute
4836   for (int i = 0; i < 10; ++i)
4837     ;
4838 #pragma omp distribute
4839   for (int j = 0; j < 10; ++j)
4840     ;
4841 #pragma omp target
4842 #pragma omp teams
4843   {
4844 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4845   }
4846 #pragma omp target
4847 #pragma omp teams
4848   {
4849 #pragma omp distribute parallel for
4850   for (int i = 0; i < 10; ++i)
4851     ;
4852 #pragma omp distribute parallel for
4853   for (int j = 0; j < 10; ++j)
4854     ;
4855   }
4856 #pragma omp target
4857 #pragma omp teams
4858   {
4859 #pragma omp distribute parallel for simd
4860   for (int i = 0; i < 10; ++i)
4861     ;
4862 #pragma omp distribute parallel for simd
4863   for (int j = 0; j < 10; ++j)
4864     ;
4865   }
4866 #pragma omp target
4867 #pragma omp teams
4868   {
4869 #pragma omp distribute simd
4870   for (int i = 0; i < 10; ++i)
4871     ;
4872 #pragma omp distribute simd
4873   for (int j = 0; j < 10; ++j)
4874     ;
4875   }
4876 #pragma omp target
4877 #pragma omp teams
4878   {
4879 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4880   for (int i = 0; i < 10; ++i)
4881     ;
4882   }
4883 #pragma omp target
4884 #pragma omp teams
4885   {
4886 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
4887   for (int i = 0; i < 10; ++i)
4888     ;
4889   }
4890 #pragma omp target
4891 #pragma omp teams
4892   {
4893 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
4894   for (int i = 0; i < 10; ++i)
4895     ;
4896   }
4897 #pragma omp target
4898 #pragma omp teams
4899   {
4900 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4901   for (int i = 0; i < 10; ++i)
4902     ;
4903   }
4904 #pragma omp target
4905 #pragma omp teams
4906   {
4907 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4908   for (int i = 0; i < 10; ++i)
4909     ;
4910   }
4911 #pragma omp target
4912 #pragma omp teams
4913   {
4914 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4915     a++;
4916   }
4917 #pragma omp target
4918 #pragma omp teams
4919   {
4920 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4921   for (int i = 0; i < 10; ++i)
4922     ;
4923   }
4924 #pragma omp target
4925 #pragma omp teams
4926   {
4927 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4928   for (int i = 0; i < 10; ++i)
4929     ;
4930   }
4931 #pragma omp target
4932 #pragma omp teams
4933   {
4934 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4935   for (int i = 0; i < 10; ++i)
4936     ;
4937   }
4938 #pragma omp target
4939 #pragma omp teams
4940   {
4941 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4942   for (int i = 0; i < 10; ++i)
4943     ;
4944   }
4945 
4946 // TASKLOOP DIRECTIVE
4947 #pragma omp taskloop
4948   for (int i = 0; i < 10; ++i) {
4949 #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?}}
4950     for (int i = 0; i < 10; ++i)
4951       ;
4952   }
4953 #pragma omp taskloop
4954   for (int i = 0; i < 10; ++i) {
4955 #pragma omp simd
4956     for (int i = 0; i < 10; ++i)
4957       ;
4958   }
4959 #pragma omp taskloop
4960   for (int i = 0; i < 10; ++i) {
4961 #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?}}
4962     for (int i = 0; i < 10; ++i)
4963       ;
4964   }
4965 #pragma omp taskloop
4966   for (int i = 0; i < 10; ++i) {
4967 #pragma omp parallel
4968     for (int i = 0; i < 10; ++i)
4969       ;
4970   }
4971 #pragma omp taskloop
4972   for (int i = 0; i < 10; ++i) {
4973 #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?}}
4974     {
4975       bar();
4976     }
4977   }
4978 #pragma omp taskloop
4979   for (int i = 0; i < 10; ++i) {
4980 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
4981     {
4982       bar();
4983     }
4984   }
4985 #pragma omp taskloop
4986   for (int i = 0; i < 10; ++i) {
4987 #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?}}
4988     {
4989       bar();
4990     }
4991   }
4992 
4993 #pragma omp taskloop
4994   for (int i = 0; i < 10; ++i) {
4995 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
4996     {
4997       bar();
4998     }
4999   }
5000 #pragma omp taskloop
5001   for (int i = 0; i < 10; ++i) {
5002 #pragma omp critical
5003     {
5004       bar();
5005     }
5006   }
5007 #pragma omp taskloop
5008   for (int i = 0; i < 10; ++i) {
5009 #pragma omp parallel
5010     {
5011 #pragma omp single // OK
5012       {
5013         bar();
5014       }
5015 #pragma omp for // OK
5016       for (int i = 0; i < 10; ++i)
5017         ;
5018 #pragma omp sections // OK
5019       {
5020         bar();
5021       }
5022     }
5023   }
5024 #pragma omp taskloop
5025   for (int i = 0; i < 10; ++i) {
5026 #pragma omp parallel for
5027     for (int i = 0; i < 10; ++i)
5028       ;
5029   }
5030 #pragma omp taskloop
5031   for (int i = 0; i < 10; ++i) {
5032 #pragma omp parallel for simd
5033     for (int i = 0; i < 10; ++i)
5034       ;
5035   }
5036 #pragma omp taskloop
5037   for (int i = 0; i < 10; ++i) {
5038 #pragma omp parallel sections
5039     {
5040       bar();
5041     }
5042   }
5043 #pragma omp taskloop
5044   for (int i = 0; i < 10; ++i) {
5045 #pragma omp task
5046     {
5047       bar();
5048     }
5049   }
5050 #pragma omp taskloop
5051   for (int i = 0; i < 10; ++i) {
5052 #pragma omp taskyield
5053     bar();
5054   }
5055 #pragma omp taskloop
5056   for (int i = 0; i < 10; ++i) {
5057 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5058     bar();
5059   }
5060 #pragma omp taskloop
5061   for (int i = 0; i < 10; ++i) {
5062 #pragma omp taskwait
5063     bar();
5064   }
5065 #pragma omp taskloop
5066   for (int i = 0; i < 10; ++i) {
5067 #pragma omp flush
5068     bar();
5069   }
5070 #pragma omp taskloop
5071   for (int i = 0; i < 10; ++i) {
5072 #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?}}
5073     bar();
5074   }
5075 #pragma omp taskloop
5076   for (int i = 0; i < 10; ++i) {
5077 #pragma omp atomic
5078     ++a;
5079   }
5080 #pragma omp taskloop
5081   for (int i = 0; i < 10; ++i) {
5082 #pragma omp target
5083     ++a;
5084   }
5085 #pragma omp taskloop
5086   for (int i = 0; i < 10; ++i) {
5087 #pragma omp target parallel
5088     ++a;
5089   }
5090 #pragma omp taskloop
5091   for (int i = 0; i < 10; ++i) {
5092 #pragma omp target parallel for
5093     for (int i = 0; i < 10; ++i)
5094       ;
5095   }
5096 #pragma omp taskloop
5097   for (int i = 0; i < 10; ++i) {
5098 #pragma omp target enter data map(to: a)
5099     ++a;
5100   }
5101 #pragma omp taskloop
5102   for (int i = 0; i < 10; ++i) {
5103 #pragma omp target exit data map(from: a)
5104     ++a;
5105   }
5106 #pragma omp taskloop
5107   for (int i = 0; i < 10; ++i) {
5108 #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?}}
5109     ++a;
5110   }
5111 #pragma omp taskloop
5112   for (int i = 0; i < 10; ++i) {
5113 #pragma omp taskloop
5114   for (int i = 0; i < 10; ++i)
5115     ++a;
5116   }
5117 #pragma omp taskloop
5118   for (int i = 0; i < 10; ++i) {
5119 #pragma omp target update to(a)
5120     bar();
5121   }
5122 #pragma omp taskloop
5123   for (int i = 0; i < 10; ++i) {
5124 #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?}}
5125   for (int j = 0; j < 10; ++j)
5126     ++a;
5127   }
5128 #pragma omp taskloop
5129   for (int i = 0; i < 10; ++i) {
5130 #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?}}
5131   for (int j = 0; j < 10; ++j)
5132     ++a;
5133   }
5134 #pragma omp taskloop
5135   for (int i = 0; i < 10; ++i) {
5136 #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?}}
5137   for (int j = 0; j < 10; ++j)
5138     ++a;
5139   }
5140 #pragma omp taskloop
5141   for (int i = 0; i < 10; ++i) {
5142 #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?}}
5143   for (int j = 0; j < 10; ++j)
5144     ++a;
5145   }
5146 #pragma omp taskloop
5147   for (int i = 0; i < 10; ++i) {
5148 #pragma omp target simd // OK
5149   for (int j = 0; j < 10; ++j)
5150     ++a;
5151   }
5152 #pragma omp taskloop
5153   for (int i = 0; i < 10; ++i) {
5154 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
5155   for (int j = 0; j < 10; ++j)
5156     ++a;
5157   }
5158 #pragma omp taskloop
5159   for (int i = 0; i < 10; ++i) {
5160 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
5161   for (int j = 0; j < 10; ++j)
5162     ++a;
5163   }
5164 #pragma omp taskloop
5165   for (int i = 0; i < 10; ++i) {
5166 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5167   for (int j = 0; j < 10; ++j)
5168     ++a;
5169   }
5170 #pragma omp taskloop
5171   for (int i = 0; i < 10; ++i) {
5172 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5173   for (int j = 0; j < 10; ++j)
5174     ++a;
5175   }
5176 #pragma omp taskloop
5177   for (int i = 0; i < 10; ++i) {
5178 #pragma omp target teams // OK
5179     ++a;
5180   }
5181 #pragma omp taskloop
5182   for (int i = 0; i < 10; ++i) {
5183 #pragma omp target teams distribute // OK
5184   for (int j = 0; j < 10; ++j)
5185     ++a;
5186   }
5187 #pragma omp taskloop
5188   for (int i = 0; i < 10; ++i) {
5189 #pragma omp target teams distribute parallel for // OK
5190   for (int j = 0; j < 10; ++j)
5191     ++a;
5192   }
5193 #pragma omp taskloop
5194   for (int i = 0; i < 10; ++i) {
5195 #pragma omp target teams distribute parallel for simd // OK
5196   for (int j = 0; j < 10; ++j)
5197     ++a;
5198   }
5199 #pragma omp taskloop
5200   for (int i = 0; i < 10; ++i) {
5201 #pragma omp target teams distribute simd // OK
5202   for (int j = 0; j < 10; ++j)
5203     ++a;
5204   }
5205 
5206 // DISTRIBUTE DIRECTIVE
5207 #pragma omp target
5208 #pragma omp teams
5209 #pragma omp distribute
5210   for (int i = 0; i < 10; ++i) {
5211 #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?}}
5212     for (int i = 0; i < 10; ++i)
5213       ;
5214   }
5215 #pragma omp target
5216 #pragma omp teams
5217 #pragma omp distribute
5218   for (int i = 0; i < 10; ++i) {
5219 #pragma omp for
5220     for (int i = 0; i < 10; ++i)
5221       ;
5222   }
5223 #pragma omp target
5224 #pragma omp teams
5225 #pragma omp distribute
5226   for (int i = 0; i < 10; ++i) {
5227 #pragma omp simd
5228     for (int i = 0; i < 10; ++i)
5229       ;
5230   }
5231 #pragma omp target
5232 #pragma omp teams
5233 #pragma omp distribute
5234   for (int i = 0; i < 10; ++i) {
5235 #pragma omp for simd
5236     for (int i = 0; i < 10; ++i)
5237       ;
5238   }
5239 #pragma omp target
5240 #pragma omp teams
5241 #pragma omp distribute
5242   for (int i = 0; i < 10; ++i) {
5243 #pragma omp parallel
5244     for (int i = 0; i < 10; ++i)
5245       ;
5246   }
5247 #pragma omp target
5248 #pragma omp teams
5249 #pragma omp distribute
5250   for (int i = 0; i < 10; ++i) {
5251 #pragma omp sections
5252     {
5253       bar();
5254     }
5255   }
5256 #pragma omp target
5257 #pragma omp teams
5258 #pragma omp distribute
5259   for (int i = 0; i < 10; ++i) {
5260 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
5261     {
5262       bar();
5263     }
5264   }
5265 #pragma omp target
5266 #pragma omp teams
5267 #pragma omp distribute
5268   for (int i = 0; i < 10; ++i) {
5269 #pragma omp single
5270     {
5271       bar();
5272     }
5273   }
5274 #pragma omp target
5275 #pragma omp teams
5276 #pragma omp distribute
5277   for (int i = 0; i < 10; ++i) {
5278 #pragma omp master
5279     {
5280       bar();
5281     }
5282   }
5283 #pragma omp target
5284 #pragma omp teams
5285 #pragma omp distribute
5286   for (int i = 0; i < 10; ++i) {
5287 #pragma omp critical
5288     {
5289       bar();
5290     }
5291   }
5292 #pragma omp target
5293 #pragma omp teams
5294 #pragma omp distribute
5295   for (int i = 0; i < 10; ++i) {
5296 #pragma omp parallel
5297     {
5298 #pragma omp single
5299       {
5300 	bar();
5301       }
5302     }
5303   }
5304 #pragma omp target
5305 #pragma omp teams
5306 #pragma omp distribute
5307   for (int i = 0; i < 10; ++i) {
5308 #pragma omp parallel for
5309     for (int i = 0; i < 10; ++i)
5310       ;
5311   }
5312 #pragma omp target
5313 #pragma omp teams
5314 #pragma omp distribute
5315   for (int i = 0; i < 10; ++i) {
5316 #pragma omp parallel for simd
5317     for (int i = 0; i < 10; ++i)
5318       ;
5319   }
5320 #pragma omp target
5321 #pragma omp teams
5322 #pragma omp distribute
5323   for (int i = 0; i < 10; ++i) {
5324 #pragma omp parallel sections
5325     {
5326       bar();
5327     }
5328   }
5329 #pragma omp target
5330 #pragma omp teams
5331 #pragma omp distribute
5332   for (int i = 0; i < 10; ++i) {
5333 #pragma omp task
5334     {
5335       bar();
5336     }
5337   }
5338 #pragma omp target
5339 #pragma omp teams
5340 #pragma omp distribute
5341   for (int i = 0; i < 10; ++i) {
5342 #pragma omp taskyield
5343     bar();
5344   }
5345 #pragma omp target
5346 #pragma omp teams
5347 #pragma omp distribute
5348   for (int i = 0; i < 10; ++i) {
5349 #pragma omp barrier
5350     bar();
5351   }
5352 #pragma omp target
5353 #pragma omp teams
5354 #pragma omp distribute
5355   for (int i = 0; i < 10; ++i) {
5356 #pragma omp taskwait
5357     bar();
5358   }
5359 #pragma omp target
5360 #pragma omp teams
5361 #pragma omp distribute
5362   for (int i = 0; i < 10; ++i) {
5363 #pragma omp flush
5364     bar();
5365   }
5366 #pragma omp target
5367 #pragma omp teams
5368 #pragma omp distribute
5369   for (int i = 0; i < 10; ++i) {
5370 #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?}}
5371     bar();
5372   }
5373 #pragma omp target
5374 #pragma omp teams
5375 #pragma omp distribute
5376   for (int i = 0; i < 10; ++i) {
5377 #pragma omp atomic
5378     ++a;
5379   }
5380 #pragma omp target
5381 #pragma omp teams
5382 #pragma omp distribute
5383   for (int i = 0; i < 10; ++i) {
5384 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5385     ++a;
5386   }
5387 #pragma omp target
5388 #pragma omp teams
5389 #pragma omp distribute
5390   for (int i = 0; i < 10; ++i) {
5391 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5392     ++a;
5393   }
5394 #pragma omp target
5395 #pragma omp teams
5396 #pragma omp distribute
5397   for (int i = 0; i < 10; ++i) {
5398 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5399     for (int i = 0; i < 10; ++i)
5400       ;
5401   }
5402 #pragma omp target
5403 #pragma omp teams
5404 #pragma omp distribute
5405   for (int i = 0; i < 10; ++i) {
5406 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5407     ++a;
5408   }
5409 #pragma omp target
5410 #pragma omp teams
5411 #pragma omp distribute
5412   for (int i = 0; i < 10; ++i) {
5413 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5414     ++a;
5415   }
5416 #pragma omp target
5417 #pragma omp teams
5418 #pragma omp distribute
5419   for (int i = 0; i < 10; ++i) {
5420 #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?}}
5421     ++a;
5422   }
5423 #pragma omp target
5424 #pragma omp teams
5425 #pragma omp distribute
5426   for (int i = 0; i < 10; ++i) {
5427 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5428     ++a;
5429   }
5430 #pragma omp target
5431 #pragma omp teams
5432 #pragma omp distribute
5433   for (int i = 0; i < 10; ++i) {
5434 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5435     for (int j = 0; j < 10; ++j)
5436       ;
5437   }
5438 #pragma omp target
5439 #pragma omp teams
5440 #pragma omp distribute
5441   for (int i = 0; i < 10; ++i) {
5442 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
5443     for (int j = 0; j < 10; ++j)
5444       ;
5445   }
5446 #pragma omp target
5447 #pragma omp teams
5448 #pragma omp distribute
5449   for (int i = 0; i < 10; ++i) {
5450 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
5451     for (int j = 0; j < 10; ++j)
5452       ;
5453   }
5454 #pragma omp target
5455 #pragma omp teams
5456 #pragma omp distribute
5457   for (int i = 0; i < 10; ++i) {
5458 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5459     for (int j = 0; j < 10; ++j)
5460       ;
5461   }
5462 #pragma omp target
5463 #pragma omp teams
5464 #pragma omp distribute
5465   for (int i = 0; i < 10; ++i) {
5466 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5467     for (int j = 0; j < 10; ++j)
5468       ;
5469   }
5470 #pragma omp target
5471 #pragma omp teams
5472 #pragma omp distribute
5473   for (int i = 0; i < 10; ++i) {
5474 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5475     a++;
5476   }
5477 #pragma omp target
5478 #pragma omp teams
5479 #pragma omp distribute
5480   for (int i = 0; i < 10; ++i) {
5481 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5482     for (int j = 0; j < 10; ++j)
5483       ;
5484   }
5485 #pragma omp target
5486 #pragma omp teams
5487 #pragma omp distribute
5488   for (int i = 0; i < 10; ++i) {
5489 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5490     for (int j = 0; j < 10; ++j)
5491       ;
5492   }
5493 #pragma omp target
5494 #pragma omp teams
5495 #pragma omp distribute
5496   for (int i = 0; i < 10; ++i) {
5497 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5498     for (int j = 0; j < 10; ++j)
5499       ;
5500   }
5501 #pragma omp target
5502 #pragma omp teams
5503 #pragma omp distribute
5504   for (int i = 0; i < 10; ++i) {
5505 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5506     for (int j = 0; j < 10; ++j)
5507       ;
5508   }
5509 
5510 // DISTRIBUTE PARALLEL FOR DIRECTIVE
5511 #pragma omp target
5512 #pragma omp teams
5513 #pragma omp distribute parallel for
5514   for (int i = 0; i < 10; ++i) {
5515 #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?}}
5516     for (int i = 0; i < 10; ++i)
5517       ;
5518   }
5519 #pragma omp target
5520 #pragma omp teams
5521 #pragma omp distribute parallel for
5522   for (int i = 0; i < 10; ++i) {
5523 #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?}}
5524     for (int i = 0; i < 10; ++i)
5525       ;
5526   }
5527 #pragma omp target
5528 #pragma omp teams
5529 #pragma omp distribute parallel for
5530   for (int i = 0; i < 10; ++i) {
5531 #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?}}
5532     for (int i = 0; i < 10; ++i)
5533       ;
5534   }
5535 #pragma omp target
5536 #pragma omp teams
5537 #pragma omp distribute parallel for
5538   for (int i = 0; i < 10; ++i) {
5539 #pragma omp simd
5540     for (int i = 0; i < 10; ++i)
5541       ;
5542   }
5543 #pragma omp target
5544 #pragma omp teams
5545 #pragma omp distribute parallel for
5546   for (int i = 0; i < 10; ++i) {
5547 #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?}}
5548     for (int i = 0; i < 10; ++i)
5549       ;
5550   }
5551 #pragma omp target
5552 #pragma omp teams
5553 #pragma omp distribute parallel for
5554   for (int i = 0; i < 10; ++i) {
5555 #pragma omp parallel
5556     for (int i = 0; i < 10; ++i)
5557       ;
5558   }
5559 #pragma omp target
5560 #pragma omp teams
5561 #pragma omp distribute parallel for
5562   for (int i = 0; i < 10; ++i) {
5563 #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?}}
5564     {
5565       bar();
5566     }
5567   }
5568 #pragma omp target
5569 #pragma omp teams
5570 #pragma omp distribute parallel for
5571   for (int i = 0; i < 10; ++i) {
5572 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
5573     {
5574       bar();
5575     }
5576   }
5577 #pragma omp target
5578 #pragma omp teams
5579 #pragma omp distribute parallel for
5580   for (int i = 0; i < 10; ++i) {
5581 #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?}}
5582     {
5583       bar();
5584     }
5585   }
5586 #pragma omp target
5587 #pragma omp teams
5588 #pragma omp distribute parallel for
5589   for (int i = 0; i < 10; ++i) {
5590 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5591     {
5592       bar();
5593     }
5594   }
5595 #pragma omp target
5596 #pragma omp teams
5597 #pragma omp distribute parallel for
5598   for (int i = 0; i < 10; ++i) {
5599 #pragma omp critical
5600     {
5601       bar();
5602     }
5603   }
5604 #pragma omp target
5605 #pragma omp teams
5606 #pragma omp distribute parallel for
5607   for (int i = 0; i < 10; ++i) {
5608 #pragma omp parallel
5609     {
5610 #pragma omp single
5611       {
5612 	bar();
5613       }
5614     }
5615   }
5616 #pragma omp target
5617 #pragma omp teams
5618 #pragma omp distribute parallel for
5619   for (int i = 0; i < 10; ++i) {
5620 #pragma omp parallel for
5621     for (int i = 0; i < 10; ++i)
5622       ;
5623   }
5624 #pragma omp target
5625 #pragma omp teams
5626 #pragma omp distribute parallel for
5627   for (int i = 0; i < 10; ++i) {
5628 #pragma omp parallel for simd
5629     for (int i = 0; i < 10; ++i)
5630       ;
5631   }
5632 #pragma omp target
5633 #pragma omp teams
5634 #pragma omp distribute parallel for
5635   for (int i = 0; i < 10; ++i) {
5636 #pragma omp parallel sections
5637     {
5638       bar();
5639     }
5640   }
5641 #pragma omp target
5642 #pragma omp teams
5643 #pragma omp distribute parallel for
5644   for (int i = 0; i < 10; ++i) {
5645 #pragma omp task
5646     {
5647       bar();
5648     }
5649   }
5650 #pragma omp target
5651 #pragma omp teams
5652 #pragma omp distribute parallel for
5653   for (int i = 0; i < 10; ++i) {
5654 #pragma omp taskyield
5655     bar();
5656   }
5657 #pragma omp target
5658 #pragma omp teams
5659 #pragma omp distribute parallel for
5660   for (int i = 0; i < 10; ++i) {
5661 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5662     bar();
5663   }
5664 #pragma omp target
5665 #pragma omp teams
5666 #pragma omp distribute parallel for
5667   for (int i = 0; i < 10; ++i) {
5668 #pragma omp taskwait
5669     bar();
5670   }
5671 #pragma omp target
5672 #pragma omp teams
5673 #pragma omp distribute parallel for
5674   for (int i = 0; i < 10; ++i) {
5675 #pragma omp flush
5676     bar();
5677   }
5678 #pragma omp target
5679 #pragma omp teams
5680 #pragma omp distribute parallel for
5681   for (int i = 0; i < 10; ++i) {
5682 #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?}}
5683     bar();
5684   }
5685 #pragma omp target
5686 #pragma omp teams
5687 #pragma omp distribute parallel for
5688   for (int i = 0; i < 10; ++i) {
5689 #pragma omp atomic
5690     ++a;
5691   }
5692 #pragma omp target
5693 #pragma omp teams
5694 #pragma omp distribute parallel for
5695   for (int i = 0; i < 10; ++i) {
5696 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5697     ++a;
5698   }
5699 #pragma omp target
5700 #pragma omp teams
5701 #pragma omp distribute parallel for
5702   for (int i = 0; i < 10; ++i) {
5703 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5704     ++a;
5705   }
5706 #pragma omp target
5707 #pragma omp teams
5708 #pragma omp distribute parallel for
5709   for (int i = 0; i < 10; ++i) {
5710 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5711     for (int i = 0; i < 10; ++i)
5712       ;
5713   }
5714 #pragma omp target
5715 #pragma omp teams
5716 #pragma omp distribute parallel for
5717   for (int i = 0; i < 10; ++i) {
5718 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5719     ++a;
5720   }
5721 #pragma omp target
5722 #pragma omp teams
5723 #pragma omp distribute parallel for
5724   for (int i = 0; i < 10; ++i) {
5725 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5726     ++a;
5727   }
5728 #pragma omp target
5729 #pragma omp teams
5730 #pragma omp distribute parallel for
5731   for (int i = 0; i < 10; ++i) {
5732 #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?}}
5733     ++a;
5734   }
5735 #pragma omp target
5736 #pragma omp teams
5737 #pragma omp distribute parallel for
5738   for (int i = 0; i < 10; ++i) {
5739 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5740     ++a;
5741   }
5742 #pragma omp target
5743 #pragma omp teams
5744 #pragma omp distribute parallel for
5745   for (int i = 0; i < 10; ++i) {
5746 #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?}}
5747     for (int i = 0; i < 10; ++i)
5748       ;
5749   }
5750 #pragma omp target
5751 #pragma omp teams
5752 #pragma omp distribute parallel for
5753   for (int i = 0; i < 10; ++i) {
5754 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
5755     for (int i = 0; i < 10; ++i)
5756       ;
5757   }
5758 #pragma omp target
5759 #pragma omp teams
5760 #pragma omp distribute parallel for
5761   for (int i = 0; i < 10; ++i) {
5762 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
5763     for (int i = 0; i < 10; ++i)
5764       ;
5765   }
5766 #pragma omp target
5767 #pragma omp teams
5768 #pragma omp distribute parallel for
5769   for (int i = 0; i < 10; ++i) {
5770 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5771     for (int i = 0; i < 10; ++i)
5772       ;
5773   }
5774 #pragma omp target
5775 #pragma omp teams
5776 #pragma omp distribute parallel for
5777   for (int i = 0; i < 10; ++i) {
5778 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5779     for (int i = 0; i < 10; ++i)
5780       ;
5781   }
5782 #pragma omp target
5783 #pragma omp teams
5784 #pragma omp distribute parallel for
5785   for (int i = 0; i < 10; ++i) {
5786 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5787     a++;
5788   }
5789 #pragma omp target
5790 #pragma omp teams
5791 #pragma omp distribute parallel for
5792   for (int i = 0; i < 10; ++i) {
5793 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5794     for (int i = 0; i < 10; ++i)
5795       ;
5796   }
5797 #pragma omp target
5798 #pragma omp teams
5799 #pragma omp distribute parallel for
5800   for (int i = 0; i < 10; ++i) {
5801 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5802     for (int i = 0; i < 10; ++i)
5803       ;
5804   }
5805 #pragma omp target
5806 #pragma omp teams
5807 #pragma omp distribute parallel for
5808   for (int i = 0; i < 10; ++i) {
5809 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5810     for (int i = 0; i < 10; ++i)
5811       ;
5812   }
5813 #pragma omp target
5814 #pragma omp teams
5815 #pragma omp distribute parallel for
5816   for (int i = 0; i < 10; ++i) {
5817 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5818     for (int i = 0; i < 10; ++i)
5819       ;
5820   }
5821 
5822 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
5823 #pragma omp target
5824 #pragma omp teams
5825 #pragma omp distribute parallel for simd
5826   for (int i = 0; i < 10; ++i) {
5827 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5828     for (int i = 0; i < 10; ++i)
5829       ;
5830   }
5831 #pragma omp target
5832 #pragma omp teams
5833 #pragma omp distribute parallel for simd
5834   for (int i = 0; i < 10; ++i) {
5835 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5836     for (int i = 0; i < 10; ++i)
5837       ;
5838   }
5839 #pragma omp target
5840 #pragma omp teams
5841 #pragma omp distribute parallel for simd
5842   for (int i = 0; i < 10; ++i) {
5843 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5844     for (int i = 0; i < 10; ++i)
5845       ;
5846   }
5847 #pragma omp target
5848 #pragma omp teams
5849 #pragma omp distribute parallel for simd
5850   for (int i = 0; i < 10; ++i) {
5851 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5852     for (int i = 0; i < 10; ++i)
5853       ;
5854   }
5855 #pragma omp target
5856 #pragma omp teams
5857 #pragma omp distribute parallel for simd
5858   for (int i = 0; i < 10; ++i) {
5859 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5860     for (int i = 0; i < 10; ++i)
5861       ;
5862   }
5863 #pragma omp target
5864 #pragma omp teams
5865 #pragma omp distribute parallel for simd
5866   for (int i = 0; i < 10; ++i) {
5867 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5868     for (int i = 0; i < 10; ++i)
5869       ;
5870   }
5871 #pragma omp target
5872 #pragma omp teams
5873 #pragma omp distribute parallel for simd
5874   for (int i = 0; i < 10; ++i) {
5875 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5876     {
5877       bar();
5878     }
5879   }
5880 #pragma omp target
5881 #pragma omp teams
5882 #pragma omp distribute parallel for simd
5883   for (int i = 0; i < 10; ++i) {
5884 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5885     {
5886       bar();
5887     }
5888   }
5889 #pragma omp target
5890 #pragma omp teams
5891 #pragma omp distribute parallel for simd
5892   for (int i = 0; i < 10; ++i) {
5893 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5894     {
5895       bar();
5896     }
5897   }
5898 #pragma omp target
5899 #pragma omp teams
5900 #pragma omp distribute parallel for simd
5901   for (int i = 0; i < 10; ++i) {
5902 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5903     {
5904       bar();
5905     }
5906   }
5907 #pragma omp target
5908 #pragma omp teams
5909 #pragma omp distribute parallel for simd
5910   for (int i = 0; i < 10; ++i) {
5911 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5912     {
5913       bar();
5914     }
5915   }
5916 #pragma omp target
5917 #pragma omp teams
5918 #pragma omp distribute parallel for simd
5919   for (int i = 0; i < 10; ++i) {
5920 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5921     {
5922 #pragma omp single
5923       {
5924 	bar();
5925       }
5926     }
5927   }
5928 #pragma omp target
5929 #pragma omp teams
5930 #pragma omp distribute parallel for simd
5931   for (int i = 0; i < 10; ++i) {
5932 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5933     for (int i = 0; i < 10; ++i)
5934       ;
5935   }
5936 #pragma omp target
5937 #pragma omp teams
5938 #pragma omp distribute parallel for simd
5939   for (int i = 0; i < 10; ++i) {
5940 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5941     for (int i = 0; i < 10; ++i)
5942       ;
5943   }
5944 #pragma omp target
5945 #pragma omp teams
5946 #pragma omp distribute parallel for simd
5947   for (int i = 0; i < 10; ++i) {
5948 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5949     {
5950       bar();
5951     }
5952   }
5953 #pragma omp target
5954 #pragma omp teams
5955 #pragma omp distribute parallel for simd
5956   for (int i = 0; i < 10; ++i) {
5957 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5958     {
5959       bar();
5960     }
5961   }
5962 #pragma omp target
5963 #pragma omp teams
5964 #pragma omp distribute parallel for simd
5965   for (int i = 0; i < 10; ++i) {
5966 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5967     bar();
5968   }
5969 #pragma omp target
5970 #pragma omp teams
5971 #pragma omp distribute parallel for simd
5972   for (int i = 0; i < 10; ++i) {
5973 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5974     bar();
5975   }
5976 #pragma omp target
5977 #pragma omp teams
5978 #pragma omp distribute parallel for simd
5979   for (int i = 0; i < 10; ++i) {
5980 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5981     bar();
5982   }
5983 #pragma omp target
5984 #pragma omp teams
5985 #pragma omp distribute parallel for simd
5986   for (int i = 0; i < 10; ++i) {
5987 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5988     bar();
5989   }
5990 #pragma omp target
5991 #pragma omp teams
5992 #pragma omp distribute parallel for simd
5993   for (int i = 0; i < 10; ++i) {
5994 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5995     bar();
5996   }
5997 #pragma omp target
5998 #pragma omp teams
5999 #pragma omp distribute parallel for simd
6000   for (int i = 0; i < 10; ++i) {
6001 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6002     ++a;
6003   }
6004 #pragma omp target
6005 #pragma omp teams
6006 #pragma omp distribute parallel for simd
6007   for (int i = 0; i < 10; ++i) {
6008 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6009     ++a;
6010   }
6011 #pragma omp target
6012 #pragma omp teams
6013 #pragma omp distribute parallel for simd
6014   for (int i = 0; i < 10; ++i) {
6015 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6016     ++a;
6017   }
6018 #pragma omp target
6019 #pragma omp teams
6020 #pragma omp distribute parallel for simd
6021   for (int i = 0; i < 10; ++i) {
6022 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6023     for (int i = 0; i < 10; ++i)
6024       ;
6025   }
6026 #pragma omp target
6027 #pragma omp teams
6028 #pragma omp distribute parallel for simd
6029   for (int i = 0; i < 10; ++i) {
6030 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6031     ++a;
6032   }
6033 #pragma omp target
6034 #pragma omp teams
6035 #pragma omp distribute parallel for simd
6036   for (int i = 0; i < 10; ++i) {
6037 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6038     ++a;
6039   }
6040 #pragma omp target
6041 #pragma omp teams
6042 #pragma omp distribute parallel for simd
6043   for (int i = 0; i < 10; ++i) {
6044 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6045     ++a;
6046   }
6047 #pragma omp target
6048 #pragma omp teams
6049 #pragma omp distribute parallel for simd
6050   for (int i = 0; i < 10; ++i) {
6051 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6052     ++a;
6053   }
6054 #pragma omp target
6055 #pragma omp teams
6056 #pragma omp distribute parallel for simd
6057   for (int i = 0; i < 10; ++i) {
6058 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6059     for (int i = 0; i < 10; ++i)
6060       ++a;
6061   }
6062 #pragma omp target
6063 #pragma omp teams
6064 #pragma omp distribute parallel for simd
6065   for (int i = 0; i < 10; ++i) {
6066 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6067     for (int i = 0; i < 10; ++i)
6068       ++a;
6069   }
6070 #pragma omp target
6071 #pragma omp teams
6072 #pragma omp distribute parallel for simd
6073   for (int i = 0; i < 10; ++i) {
6074 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6075     for (int i = 0; i < 10; ++i)
6076       ++a;
6077   }
6078 #pragma omp target
6079 #pragma omp teams
6080 #pragma omp distribute parallel for simd
6081   for (int i = 0; i < 10; ++i) {
6082 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6083     for (int i = 0; i < 10; ++i)
6084       ++a;
6085   }
6086 #pragma omp target
6087 #pragma omp teams
6088 #pragma omp distribute parallel for simd
6089   for (int i = 0; i < 10; ++i) {
6090 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6091     for (int i = 0; i < 10; ++i)
6092       ++a;
6093   }
6094 #pragma omp target
6095 #pragma omp teams
6096 #pragma omp distribute parallel for simd
6097   for (int i = 0; i < 10; ++i) {
6098 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6099     for (int i = 0; i < 10; ++i)
6100       ++a;
6101   }
6102 #pragma omp target
6103 #pragma omp teams
6104 #pragma omp distribute parallel for simd
6105   for (int i = 0; i < 10; ++i) {
6106 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6107     ++a;
6108   }
6109 #pragma omp target
6110 #pragma omp teams
6111 #pragma omp distribute parallel for simd
6112   for (int i = 0; i < 10; ++i) {
6113 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6114     for (int i = 0; i < 10; ++i)
6115       ++a;
6116   }
6117 #pragma omp target
6118 #pragma omp teams
6119 #pragma omp distribute parallel for simd
6120   for (int i = 0; i < 10; ++i) {
6121 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6122     for (int i = 0; i < 10; ++i)
6123       ++a;
6124   }
6125 #pragma omp target
6126 #pragma omp teams
6127 #pragma omp distribute parallel for simd
6128   for (int i = 0; i < 10; ++i) {
6129 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6130     for (int i = 0; i < 10; ++i)
6131       ++a;
6132   }
6133 #pragma omp target
6134 #pragma omp teams
6135 #pragma omp distribute parallel for simd
6136   for (int i = 0; i < 10; ++i) {
6137 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6138     for (int i = 0; i < 10; ++i)
6139       ++a;
6140   }
6141 
6142 // TARGET SIMD DIRECTIVE
6143 #pragma omp target simd
6144   for (int i = 0; i < 10; ++i) {
6145 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6146     for (int i = 0; i < 10; ++i)
6147       ;
6148   }
6149 #pragma omp target simd
6150   for (int i = 0; i < 10; ++i) {
6151 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6152     for (int i = 0; i < 10; ++i)
6153       ;
6154   }
6155 #pragma omp target simd
6156   for (int i = 0; i < 10; ++i) {
6157 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6158     for (int i = 0; i < 10; ++i)
6159       ;
6160   }
6161 #pragma omp target simd
6162   for (int i = 0; i < 10; ++i) {
6163 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6164     for (int i = 0; i < 10; ++i)
6165       ;
6166   }
6167 #pragma omp target simd
6168   for (int i = 0; i < 10; ++i) {
6169 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6170     for (int i = 0; i < 10; ++i)
6171       ;
6172   }
6173 #pragma omp target simd
6174   for (int i = 0; i < 10; ++i) {
6175 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6176     for (int i = 0; i < 10; ++i)
6177       ;
6178   }
6179 #pragma omp target simd
6180   for (int i = 0; i < 10; ++i) {
6181 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6182     {
6183       bar();
6184     }
6185   }
6186 #pragma omp target simd
6187   for (int i = 0; i < 10; ++i) {
6188 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6189     {
6190       bar();
6191     }
6192   }
6193 #pragma omp target simd
6194   for (int i = 0; i < 10; ++i) {
6195 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6196     {
6197       bar();
6198     }
6199   }
6200 #pragma omp target simd
6201   for (int i = 0; i < 10; ++i) {
6202 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6203     {
6204       bar();
6205     }
6206   }
6207 #pragma omp target simd
6208   for (int i = 0; i < 10; ++i) {
6209 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6210     {
6211       bar();
6212     }
6213   }
6214 #pragma omp target simd
6215   for (int i = 0; i < 10; ++i) {
6216 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6217     {
6218 #pragma omp single
6219       {
6220 	bar();
6221       }
6222     }
6223   }
6224 #pragma omp target simd
6225   for (int i = 0; i < 10; ++i) {
6226 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6227     for (int i = 0; i < 10; ++i)
6228       ;
6229   }
6230 #pragma omp target simd
6231   for (int i = 0; i < 10; ++i) {
6232 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6233     for (int i = 0; i < 10; ++i)
6234       ;
6235   }
6236 #pragma omp target simd
6237   for (int i = 0; i < 10; ++i) {
6238 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6239     {
6240       bar();
6241     }
6242   }
6243 #pragma omp target simd
6244   for (int i = 0; i < 10; ++i) {
6245 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6246     {
6247       bar();
6248     }
6249   }
6250 #pragma omp target simd
6251   for (int i = 0; i < 10; ++i) {
6252 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6253     bar();
6254   }
6255 #pragma omp target simd
6256   for (int i = 0; i < 10; ++i) {
6257 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6258     bar();
6259   }
6260 #pragma omp target simd
6261   for (int i = 0; i < 10; ++i) {
6262 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6263     bar();
6264   }
6265 #pragma omp target simd
6266   for (int i = 0; i < 10; ++i) {
6267 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6268     bar();
6269   }
6270 #pragma omp target simd
6271   for (int i = 0; i < 10; ++i) {
6272 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6273     bar();
6274   }
6275 #pragma omp target simd
6276   for (int i = 0; i < 10; ++i) {
6277 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6278     ++a;
6279   }
6280 #pragma omp target simd
6281   for (int i = 0; i < 10; ++i) {
6282 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6283     ++a;
6284   }
6285 #pragma omp target simd
6286   for (int i = 0; i < 10; ++i) {
6287 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6288     ++a;
6289   }
6290 #pragma omp target simd
6291   for (int i = 0; i < 10; ++i) {
6292 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6293     for (int i = 0; i < 10; ++i)
6294       ;
6295   }
6296 #pragma omp target simd
6297   for (int i = 0; i < 10; ++i) {
6298 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6299     ++a;
6300   }
6301 #pragma omp target simd
6302   for (int i = 0; i < 10; ++i) {
6303 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6304     ++a;
6305   }
6306 #pragma omp target simd
6307   for (int i = 0; i < 10; ++i) {
6308 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6309     ++a;
6310   }
6311 #pragma omp target simd
6312   for (int i = 0; i < 10; ++i) {
6313 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6314     ++a;
6315   }
6316 #pragma omp target simd
6317   for (int i = 0; i < 10; ++i) {
6318 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6319     for (int i = 0; i < 10; ++i)
6320       ++a;
6321   }
6322 #pragma omp target simd
6323   for (int i = 0; i < 10; ++i) {
6324 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6325     for (int i = 0; i < 10; ++i)
6326       ++a;
6327   }
6328 #pragma omp target simd
6329   for (int i = 0; i < 10; ++i) {
6330 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6331     for (int i = 0; i < 10; ++i)
6332       ++a;
6333   }
6334 #pragma omp target simd
6335   for (int i = 0; i < 10; ++i) {
6336 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6337     for (int i = 0; i < 10; ++i)
6338       ++a;
6339   }
6340 #pragma omp target simd
6341   for (int i = 0; i < 10; ++i) {
6342 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6343     for (int i = 0; i < 10; ++i)
6344       ++a;
6345   }
6346 #pragma omp target simd
6347   for (int i = 0; i < 10; ++i) {
6348 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6349     for (int i = 0; i < 10; ++i)
6350       ++a;
6351   }
6352 #pragma omp target simd
6353   for (int i = 0; i < 10; ++i) {
6354 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6355     for (int i = 0; i < 10; ++i)
6356       ++a;
6357   }
6358 #pragma omp target simd
6359   for (int i = 0; i < 10; ++i) {
6360 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6361     for (int i = 0; i < 10; ++i)
6362       ++a;
6363   }
6364 
6365 // TEAMS DISTRIBUTE DIRECTIVE
6366 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6367   for (int i = 0; i < 10; ++i)
6368     ;
6369 #pragma omp target
6370 #pragma omp teams distribute
6371   for (int i = 0; i < 10; ++i) {
6372 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6373     for (int i = 0; i < 10; ++i)
6374       ;
6375   }
6376 #pragma omp target
6377 #pragma omp teams distribute
6378   for (int i = 0; i < 10; ++i) {
6379 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6380     for (int i = 0; i < 10; ++i)
6381       ;
6382   }
6383 #pragma omp target
6384 #pragma omp teams distribute
6385   for (int i = 0; i < 10; ++i) {
6386 #pragma omp for // OK
6387     for (int i = 0; i < 10; ++i)
6388       ;
6389   }
6390 #pragma omp target
6391 #pragma omp teams distribute
6392   for (int i = 0; i < 10; ++i) {
6393 #pragma omp simd // OK
6394     for (int i = 0; i < 10; ++i)
6395       ;
6396   }
6397 #pragma omp target
6398 #pragma omp teams distribute
6399   for (int i = 0; i < 10; ++i) {
6400 #pragma omp for simd // OK
6401     for (int i = 0; i < 10; ++i)
6402       ;
6403   }
6404 #pragma omp target
6405 #pragma omp teams distribute
6406   for (int i = 0; i < 10; ++i) {
6407 #pragma omp parallel // OK
6408     for (int i = 0; i < 10; ++i)
6409       ;
6410   }
6411 #pragma omp target
6412 #pragma omp teams distribute
6413   for (int i = 0; i < 10; ++i) {
6414 #pragma omp sections // OK
6415     {
6416       bar();
6417     }
6418   }
6419 #pragma omp target
6420 #pragma omp teams distribute
6421   for (int i = 0; i < 10; ++i) {
6422 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6423     {
6424       bar();
6425     }
6426   }
6427 #pragma omp target
6428 #pragma omp teams distribute
6429   for (int i = 0; i < 10; ++i) {
6430 #pragma omp single // OK
6431     {
6432       bar();
6433     }
6434   }
6435 #pragma omp target
6436 #pragma omp teams distribute
6437   for (int i = 0; i < 10; ++i) {
6438 #pragma omp master // OK
6439     {
6440       bar();
6441     }
6442   }
6443 #pragma omp target
6444 #pragma omp teams distribute
6445   for (int i = 0; i < 10; ++i) {
6446 #pragma omp critical // OK
6447     {
6448       bar();
6449     }
6450   }
6451 #pragma omp target
6452 #pragma omp teams distribute
6453   for (int i = 0; i < 10; ++i) {
6454 #pragma omp parallel // OK
6455     {
6456 #pragma omp single
6457       {
6458 	bar();
6459       }
6460     }
6461   }
6462 #pragma omp target
6463 #pragma omp teams distribute
6464   for (int i = 0; i < 10; ++i) {
6465 #pragma omp parallel for // OK
6466     for (int i = 0; i < 10; ++i)
6467       ;
6468   }
6469 #pragma omp target
6470 #pragma omp teams distribute
6471   for (int i = 0; i < 10; ++i) {
6472 #pragma omp parallel for simd // OK
6473     for (int i = 0; i < 10; ++i)
6474       ;
6475   }
6476 #pragma omp target
6477 #pragma omp teams distribute
6478   for (int i = 0; i < 10; ++i) {
6479 #pragma omp parallel sections // OK
6480     {
6481       bar();
6482     }
6483   }
6484 #pragma omp target
6485 #pragma omp teams distribute
6486   for (int i = 0; i < 10; ++i) {
6487 #pragma omp task // OK
6488     {
6489       bar();
6490     }
6491   }
6492 #pragma omp target
6493 #pragma omp teams distribute
6494   for (int i = 0; i < 10; ++i) {
6495 #pragma omp taskyield // OK
6496     bar();
6497   }
6498 #pragma omp target
6499 #pragma omp teams distribute
6500   for (int i = 0; i < 10; ++i) {
6501 #pragma omp barrier // OK
6502     bar();
6503   }
6504 #pragma omp target
6505 #pragma omp teams distribute
6506   for (int i = 0; i < 10; ++i) {
6507 #pragma omp taskwait // OK
6508     bar();
6509   }
6510 #pragma omp target
6511 #pragma omp teams distribute
6512   for (int i = 0; i < 10; ++i) {
6513 #pragma omp flush // OK
6514     bar();
6515   }
6516 #pragma omp target
6517 #pragma omp teams distribute
6518   for (int i = 0; i < 10; ++i) {
6519 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6520     bar();
6521   }
6522 #pragma omp target
6523 #pragma omp teams distribute
6524   for (int i = 0; i < 10; ++i) {
6525 #pragma omp atomic // OK
6526     ++a;
6527   }
6528 #pragma omp target
6529 #pragma omp teams distribute
6530   for (int i = 0; i < 10; ++i) {
6531 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6532     ++a;
6533   }
6534 #pragma omp target
6535 #pragma omp teams distribute
6536   for (int i = 0; i < 10; ++i) {
6537 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6538     ++a;
6539   }
6540 #pragma omp target
6541 #pragma omp teams distribute
6542   for (int i = 0; i < 10; ++i) {
6543 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6544     for (int i = 0; i < 10; ++i)
6545       ;
6546   }
6547 #pragma omp target
6548 #pragma omp teams distribute
6549   for (int i = 0; i < 10; ++i) {
6550 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6551     ++a;
6552   }
6553 #pragma omp target
6554 #pragma omp teams distribute
6555   for (int i = 0; i < 10; ++i) {
6556 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6557     ++a;
6558   }
6559 #pragma omp target
6560 #pragma omp teams distribute
6561   for (int i = 0; i < 10; ++i) {
6562 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6563     ++a;
6564   }
6565 #pragma omp target
6566 #pragma omp teams distribute
6567   for (int i = 0; i < 10; ++i) {
6568 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6569     ++a;
6570   }
6571 #pragma omp target
6572 #pragma omp teams distribute
6573   for (int i = 0; i < 10; ++i) {
6574 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6575     for (int i = 0; i < 10; ++i)
6576       ++a;
6577   }
6578 #pragma omp target
6579 #pragma omp teams distribute
6580   for (int i = 0; i < 10; ++i) {
6581 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6582     for (int i = 0; i < 10; ++i)
6583       ++a;
6584   }
6585 #pragma omp target
6586 #pragma omp teams distribute
6587   for (int i = 0; i < 10; ++i) {
6588 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
6589     for (int i = 0; i < 10; ++i)
6590       ++a;
6591   }
6592 #pragma omp target
6593 #pragma omp teams distribute
6594   for (int i = 0; i < 10; ++i) {
6595 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
6596     for (int i = 0; i < 10; ++i)
6597       ++a;
6598   }
6599 #pragma omp target
6600 #pragma omp teams distribute
6601   for (int i = 0; i < 10; ++i) {
6602 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
6603     for (int i = 0; i < 10; ++i)
6604       ++a;
6605   }
6606 #pragma omp target
6607 #pragma omp teams distribute
6608   for (int i = 0; i < 10; ++i) {
6609 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6610     for (int i = 0; i < 10; ++i)
6611       ++a;
6612   }
6613 #pragma omp target
6614 #pragma omp teams distribute
6615   for (int i = 0; i < 10; ++i) {
6616 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6617     for (int i = 0; i < 10; ++i)
6618       ++a;
6619   }
6620 #pragma omp target
6621 #pragma omp teams distribute
6622   for (int i = 0; i < 10; ++i) {
6623 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6624     for (int i = 0; i < 10; ++i)
6625       ++a;
6626   }
6627 
6628 // TEAMS DISTRIBUTE DIRECTIVE
6629 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6630   for (int i = 0; i < 10; ++i)
6631     ;
6632 #pragma omp target
6633 #pragma omp teams distribute
6634   for (int i = 0; i < 10; ++i) {
6635 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6636     for (int i = 0; i < 10; ++i)
6637       ;
6638   }
6639 #pragma omp target
6640 #pragma omp teams distribute
6641   for (int i = 0; i < 10; ++i) {
6642 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6643     for (int i = 0; i < 10; ++i)
6644       ;
6645   }
6646 #pragma omp target
6647 #pragma omp teams distribute
6648   for (int i = 0; i < 10; ++i) {
6649 #pragma omp for // OK
6650     for (int i = 0; i < 10; ++i)
6651       ;
6652   }
6653 #pragma omp target
6654 #pragma omp teams distribute
6655   for (int i = 0; i < 10; ++i) {
6656 #pragma omp simd // OK
6657     for (int i = 0; i < 10; ++i)
6658       ;
6659   }
6660 #pragma omp target
6661 #pragma omp teams distribute
6662   for (int i = 0; i < 10; ++i) {
6663 #pragma omp for simd // OK
6664     for (int i = 0; i < 10; ++i)
6665       ;
6666   }
6667 #pragma omp target
6668 #pragma omp teams distribute
6669   for (int i = 0; i < 10; ++i) {
6670 #pragma omp parallel // OK
6671     for (int i = 0; i < 10; ++i)
6672       ;
6673   }
6674 #pragma omp target
6675 #pragma omp teams distribute
6676   for (int i = 0; i < 10; ++i) {
6677 #pragma omp sections // OK
6678     {
6679       bar();
6680     }
6681   }
6682 #pragma omp target
6683 #pragma omp teams distribute
6684   for (int i = 0; i < 10; ++i) {
6685 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6686     {
6687       bar();
6688     }
6689   }
6690 #pragma omp target
6691 #pragma omp teams distribute
6692   for (int i = 0; i < 10; ++i) {
6693 #pragma omp single // OK
6694     {
6695       bar();
6696     }
6697   }
6698 #pragma omp target
6699 #pragma omp teams distribute
6700   for (int i = 0; i < 10; ++i) {
6701 #pragma omp master // OK
6702     {
6703       bar();
6704     }
6705   }
6706 #pragma omp target
6707 #pragma omp teams distribute
6708   for (int i = 0; i < 10; ++i) {
6709 #pragma omp critical // OK
6710     {
6711       bar();
6712     }
6713   }
6714 #pragma omp target
6715 #pragma omp teams distribute
6716   for (int i = 0; i < 10; ++i) {
6717 #pragma omp parallel // OK
6718     {
6719 #pragma omp single
6720       {
6721 	bar();
6722       }
6723     }
6724   }
6725 #pragma omp target
6726 #pragma omp teams distribute
6727   for (int i = 0; i < 10; ++i) {
6728 #pragma omp parallel for // OK
6729     for (int i = 0; i < 10; ++i)
6730       ;
6731   }
6732 #pragma omp target
6733 #pragma omp teams distribute
6734   for (int i = 0; i < 10; ++i) {
6735 #pragma omp parallel for simd // OK
6736     for (int i = 0; i < 10; ++i)
6737       ;
6738   }
6739 #pragma omp target
6740 #pragma omp teams distribute
6741   for (int i = 0; i < 10; ++i) {
6742 #pragma omp parallel sections // OK
6743     {
6744       bar();
6745     }
6746   }
6747 #pragma omp target
6748 #pragma omp teams distribute
6749   for (int i = 0; i < 10; ++i) {
6750 #pragma omp task // OK
6751     {
6752       bar();
6753     }
6754   }
6755 #pragma omp target
6756 #pragma omp teams distribute
6757   for (int i = 0; i < 10; ++i) {
6758 #pragma omp taskyield // OK
6759     bar();
6760   }
6761 #pragma omp target
6762 #pragma omp teams distribute
6763   for (int i = 0; i < 10; ++i) {
6764 #pragma omp barrier // OK
6765     bar();
6766   }
6767 #pragma omp target
6768 #pragma omp teams distribute
6769   for (int i = 0; i < 10; ++i) {
6770 #pragma omp taskwait // OK
6771     bar();
6772   }
6773 #pragma omp target
6774 #pragma omp teams distribute
6775   for (int i = 0; i < 10; ++i) {
6776 #pragma omp flush // OK
6777     bar();
6778   }
6779 #pragma omp target
6780 #pragma omp teams distribute
6781   for (int i = 0; i < 10; ++i) {
6782 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6783     bar();
6784   }
6785 #pragma omp target
6786 #pragma omp teams distribute
6787   for (int i = 0; i < 10; ++i) {
6788 #pragma omp atomic // OK
6789     ++a;
6790   }
6791 #pragma omp target
6792 #pragma omp teams distribute
6793   for (int i = 0; i < 10; ++i) {
6794 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6795     ++a;
6796   }
6797 #pragma omp target
6798 #pragma omp teams distribute
6799   for (int i = 0; i < 10; ++i) {
6800 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6801     ++a;
6802   }
6803 #pragma omp target
6804 #pragma omp teams distribute
6805   for (int i = 0; i < 10; ++i) {
6806 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6807     for (int i = 0; i < 10; ++i)
6808       ;
6809   }
6810 #pragma omp target
6811 #pragma omp teams distribute
6812   for (int i = 0; i < 10; ++i) {
6813 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6814     ++a;
6815   }
6816 #pragma omp target
6817 #pragma omp teams distribute
6818   for (int i = 0; i < 10; ++i) {
6819 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6820     ++a;
6821   }
6822 #pragma omp target
6823 #pragma omp teams distribute
6824   for (int i = 0; i < 10; ++i) {
6825 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6826     ++a;
6827   }
6828 #pragma omp target
6829 #pragma omp teams distribute
6830   for (int i = 0; i < 10; ++i) {
6831 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6832     ++a;
6833   }
6834 #pragma omp target
6835 #pragma omp teams distribute
6836   for (int i = 0; i < 10; ++i) {
6837 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6838     for (int i = 0; i < 10; ++i)
6839       ++a;
6840   }
6841 #pragma omp target
6842 #pragma omp teams distribute
6843   for (int i = 0; i < 10; ++i) {
6844 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6845     for (int i = 0; i < 10; ++i)
6846       ++a;
6847   }
6848 #pragma omp target
6849 #pragma omp teams distribute
6850   for (int i = 0; i < 10; ++i) {
6851 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
6852     for (int i = 0; i < 10; ++i)
6853       ++a;
6854   }
6855 #pragma omp target
6856 #pragma omp teams distribute
6857   for (int i = 0; i < 10; ++i) {
6858 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
6859     for (int i = 0; i < 10; ++i)
6860       ++a;
6861   }
6862 #pragma omp target
6863 #pragma omp teams distribute
6864   for (int i = 0; i < 10; ++i) {
6865 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
6866     for (int i = 0; i < 10; ++i)
6867       ++a;
6868   }
6869 #pragma omp target
6870 #pragma omp teams distribute
6871   for (int i = 0; i < 10; ++i) {
6872 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
6873     for (int i = 0; i < 10; ++i)
6874       ++a;
6875   }
6876 #pragma omp target
6877 #pragma omp teams distribute
6878   for (int i = 0; i < 10; ++i) {
6879 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6880     ++a;
6881   }
6882 #pragma omp target
6883 #pragma omp teams distribute
6884   for (int i = 0; i < 10; ++i) {
6885 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6886     for (int i = 0; i < 10; ++i)
6887       ++a;
6888   }
6889 #pragma omp target
6890 #pragma omp teams distribute
6891   for (int i = 0; i < 10; ++i) {
6892 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6893     for (int i = 0; i < 10; ++i)
6894       ++a;
6895   }
6896 #pragma omp target
6897 #pragma omp teams distribute
6898   for (int i = 0; i < 10; ++i) {
6899 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6900     for (int i = 0; i < 10; ++i)
6901       ++a;
6902   }
6903 #pragma omp target
6904 #pragma omp teams distribute
6905   for (int i = 0; i < 10; ++i) {
6906 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6907     for (int i = 0; i < 10; ++i)
6908       ++a;
6909   }
6910 
6911 // TEAMS DISTRIBUTE SIMD DIRECTIVE
6912 #pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6913   for (int i = 0; i < 10; ++i)
6914     ;
6915 #pragma omp target
6916 #pragma omp teams distribute simd
6917   for (int i = 0; i < 10; ++i) {
6918 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6919     for (int i = 0; i < 10; ++i)
6920       ;
6921   }
6922 #pragma omp target
6923 #pragma omp teams distribute simd
6924   for (int i = 0; i < 10; ++i) {
6925 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6926     for (int i = 0; i < 10; ++i)
6927       ;
6928   }
6929 #pragma omp target
6930 #pragma omp teams distribute simd
6931   for (int i = 0; i < 10; ++i) {
6932 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6933     for (int i = 0; i < 10; ++i)
6934       ;
6935   }
6936 #pragma omp target
6937 #pragma omp teams distribute simd
6938   for (int i = 0; i < 10; ++i) {
6939 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6940     for (int i = 0; i < 10; ++i)
6941       ;
6942   }
6943 #pragma omp target
6944 #pragma omp teams distribute simd
6945   for (int i = 0; i < 10; ++i) {
6946 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6947     for (int i = 0; i < 10; ++i)
6948       ;
6949   }
6950 #pragma omp target
6951 #pragma omp teams distribute simd
6952   for (int i = 0; i < 10; ++i) {
6953 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6954     for (int i = 0; i < 10; ++i)
6955       ;
6956   }
6957 #pragma omp target
6958 #pragma omp teams distribute simd
6959   for (int i = 0; i < 10; ++i) {
6960 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6961     {
6962       bar();
6963     }
6964   }
6965 #pragma omp target
6966 #pragma omp teams distribute simd
6967   for (int i = 0; i < 10; ++i) {
6968 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6969     {
6970       bar();
6971     }
6972   }
6973 #pragma omp target
6974 #pragma omp teams distribute simd
6975   for (int i = 0; i < 10; ++i) {
6976 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6977     {
6978       bar();
6979     }
6980   }
6981 #pragma omp target
6982 #pragma omp teams distribute simd
6983   for (int i = 0; i < 10; ++i) {
6984 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6985     {
6986       bar();
6987     }
6988   }
6989 #pragma omp target
6990 #pragma omp teams distribute simd
6991   for (int i = 0; i < 10; ++i) {
6992 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6993     {
6994       bar();
6995     }
6996   }
6997 #pragma omp target
6998 #pragma omp teams distribute simd
6999   for (int i = 0; i < 10; ++i) {
7000 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7001     {
7002 #pragma omp single
7003       {
7004 	bar();
7005       }
7006     }
7007   }
7008 #pragma omp target
7009 #pragma omp teams distribute simd
7010   for (int i = 0; i < 10; ++i) {
7011 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7012     for (int i = 0; i < 10; ++i)
7013       ;
7014   }
7015 #pragma omp target
7016 #pragma omp teams distribute simd
7017   for (int i = 0; i < 10; ++i) {
7018 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7019     for (int i = 0; i < 10; ++i)
7020       ;
7021   }
7022 #pragma omp target
7023 #pragma omp teams distribute simd
7024   for (int i = 0; i < 10; ++i) {
7025 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7026     {
7027       bar();
7028     }
7029   }
7030 #pragma omp target
7031 #pragma omp teams distribute simd
7032   for (int i = 0; i < 10; ++i) {
7033 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7034     {
7035       bar();
7036     }
7037   }
7038 #pragma omp target
7039 #pragma omp teams distribute simd
7040   for (int i = 0; i < 10; ++i) {
7041 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7042     bar();
7043   }
7044 #pragma omp target
7045 #pragma omp teams distribute simd
7046   for (int i = 0; i < 10; ++i) {
7047 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7048     bar();
7049   }
7050 #pragma omp target
7051 #pragma omp teams distribute simd
7052   for (int i = 0; i < 10; ++i) {
7053 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7054     bar();
7055   }
7056 #pragma omp target
7057 #pragma omp teams distribute simd
7058   for (int i = 0; i < 10; ++i) {
7059 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7060     bar();
7061   }
7062 #pragma omp target
7063 #pragma omp teams distribute simd
7064   for (int i = 0; i < 10; ++i) {
7065 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7066     bar();
7067   }
7068 #pragma omp target
7069 #pragma omp teams distribute simd
7070   for (int i = 0; i < 10; ++i) {
7071 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7072     ++a;
7073   }
7074 #pragma omp target
7075 #pragma omp teams distribute simd
7076   for (int i = 0; i < 10; ++i) {
7077 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7078     ++a;
7079   }
7080 #pragma omp target
7081 #pragma omp teams distribute simd
7082   for (int i = 0; i < 10; ++i) {
7083 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7084     ++a;
7085   }
7086 #pragma omp target
7087 #pragma omp teams distribute simd
7088   for (int i = 0; i < 10; ++i) {
7089 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7090     for (int i = 0; i < 10; ++i)
7091       ;
7092   }
7093 #pragma omp target
7094 #pragma omp teams distribute simd
7095   for (int i = 0; i < 10; ++i) {
7096 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7097     ++a;
7098   }
7099 #pragma omp target
7100 #pragma omp teams distribute simd
7101   for (int i = 0; i < 10; ++i) {
7102 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7103     ++a;
7104   }
7105 #pragma omp target
7106 #pragma omp teams distribute simd
7107   for (int i = 0; i < 10; ++i) {
7108 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7109     ++a;
7110   }
7111 #pragma omp target
7112 #pragma omp teams distribute simd
7113   for (int i = 0; i < 10; ++i) {
7114 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7115     ++a;
7116   }
7117 #pragma omp target
7118 #pragma omp teams distribute simd
7119   for (int i = 0; i < 10; ++i) {
7120 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7121     for (int i = 0; i < 10; ++i)
7122       ++a;
7123   }
7124 #pragma omp target
7125 #pragma omp teams distribute simd
7126   for (int i = 0; i < 10; ++i) {
7127 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7128     for (int i = 0; i < 10; ++i)
7129       ++a;
7130   }
7131 #pragma omp target
7132 #pragma omp teams distribute simd
7133   for (int i = 0; i < 10; ++i) {
7134 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7135     for (int i = 0; i < 10; ++i)
7136       ++a;
7137   }
7138 #pragma omp target
7139 #pragma omp teams distribute simd
7140   for (int i = 0; i < 10; ++i) {
7141 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7142     for (int i = 0; i < 10; ++i)
7143       ++a;
7144   }
7145 #pragma omp target
7146 #pragma omp teams distribute simd
7147   for (int i = 0; i < 10; ++i) {
7148 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7149     for (int i = 0; i < 10; ++i)
7150       ++a;
7151   }
7152 #pragma omp target
7153 #pragma omp teams distribute simd
7154   for (int i = 0; i < 10; ++i) {
7155 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7156     for (int i = 0; i < 10; ++i)
7157       ++a;
7158   }
7159 #pragma omp target
7160 #pragma omp teams distribute simd
7161   for (int i = 0; i < 10; ++i) {
7162 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7163     ++a;
7164   }
7165 #pragma omp target
7166 #pragma omp teams distribute simd
7167   for (int i = 0; i < 10; ++i) {
7168 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7169     for (int i = 0; i < 10; ++i)
7170       ++a;
7171   }
7172 #pragma omp target
7173 #pragma omp teams distribute simd
7174   for (int i = 0; i < 10; ++i) {
7175 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7176     for (int i = 0; i < 10; ++i)
7177       ++a;
7178   }
7179 #pragma omp target
7180 #pragma omp teams distribute simd
7181   for (int i = 0; i < 10; ++i) {
7182 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7183     for (int i = 0; i < 10; ++i)
7184       ++a;
7185   }
7186 #pragma omp target
7187 #pragma omp teams distribute simd
7188   for (int i = 0; i < 10; ++i) {
7189 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7190     for (int i = 0; i < 10; ++i)
7191       ++a;
7192   }
7193 
7194 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
7195 #pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7196   for (int i = 0; i < 10; ++i)
7197     ;
7198 #pragma omp target
7199 #pragma omp teams distribute parallel for simd
7200   for (int i = 0; i < 10; ++i) {
7201 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7202     for (int i = 0; i < 10; ++i)
7203       ;
7204   }
7205 #pragma omp target
7206 #pragma omp teams distribute parallel for simd
7207   for (int i = 0; i < 10; ++i) {
7208 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7209     for (int i = 0; i < 10; ++i)
7210       ;
7211   }
7212 #pragma omp target
7213 #pragma omp teams distribute parallel for simd
7214   for (int i = 0; i < 10; ++i) {
7215 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7216     for (int i = 0; i < 10; ++i)
7217       ;
7218   }
7219 #pragma omp target
7220 #pragma omp teams distribute parallel for simd
7221   for (int i = 0; i < 10; ++i) {
7222 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7223     for (int i = 0; i < 10; ++i)
7224       ;
7225   }
7226 #pragma omp target
7227 #pragma omp teams distribute parallel for simd
7228   for (int i = 0; i < 10; ++i) {
7229 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7230     for (int i = 0; i < 10; ++i)
7231       ;
7232   }
7233 #pragma omp target
7234 #pragma omp teams distribute parallel for simd
7235   for (int i = 0; i < 10; ++i) {
7236 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7237     for (int i = 0; i < 10; ++i)
7238       ;
7239   }
7240 #pragma omp target
7241 #pragma omp teams distribute parallel for simd
7242   for (int i = 0; i < 10; ++i) {
7243 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7244     {
7245       bar();
7246     }
7247   }
7248 #pragma omp target
7249 #pragma omp teams distribute parallel for simd
7250   for (int i = 0; i < 10; ++i) {
7251 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7252     {
7253       bar();
7254     }
7255   }
7256 #pragma omp target
7257 #pragma omp teams distribute parallel for simd
7258   for (int i = 0; i < 10; ++i) {
7259 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7260     {
7261       bar();
7262     }
7263   }
7264 #pragma omp target
7265 #pragma omp teams distribute parallel for simd
7266   for (int i = 0; i < 10; ++i) {
7267 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7268     {
7269       bar();
7270     }
7271   }
7272 #pragma omp target
7273 #pragma omp teams distribute parallel for simd
7274   for (int i = 0; i < 10; ++i) {
7275 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7276     {
7277       bar();
7278     }
7279   }
7280 #pragma omp target
7281 #pragma omp teams distribute parallel for simd
7282   for (int i = 0; i < 10; ++i) {
7283 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7284     {
7285 #pragma omp single
7286       {
7287 	bar();
7288       }
7289     }
7290   }
7291 #pragma omp target
7292 #pragma omp teams distribute parallel for simd
7293   for (int i = 0; i < 10; ++i) {
7294 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7295     for (int i = 0; i < 10; ++i)
7296       ;
7297   }
7298 #pragma omp target
7299 #pragma omp teams distribute parallel for simd
7300   for (int i = 0; i < 10; ++i) {
7301 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7302     for (int i = 0; i < 10; ++i)
7303       ;
7304   }
7305 #pragma omp target
7306 #pragma omp teams distribute parallel for simd
7307   for (int i = 0; i < 10; ++i) {
7308 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7309     {
7310       bar();
7311     }
7312   }
7313 #pragma omp target
7314 #pragma omp teams distribute parallel for simd
7315   for (int i = 0; i < 10; ++i) {
7316 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7317     {
7318       bar();
7319     }
7320   }
7321 #pragma omp target
7322 #pragma omp teams distribute parallel for simd
7323   for (int i = 0; i < 10; ++i) {
7324 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7325     bar();
7326   }
7327 #pragma omp target
7328 #pragma omp teams distribute parallel for simd
7329   for (int i = 0; i < 10; ++i) {
7330 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7331     bar();
7332   }
7333 #pragma omp target
7334 #pragma omp teams distribute parallel for simd
7335   for (int i = 0; i < 10; ++i) {
7336 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7337     bar();
7338   }
7339 #pragma omp target
7340 #pragma omp teams distribute parallel for simd
7341   for (int i = 0; i < 10; ++i) {
7342 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7343     bar();
7344   }
7345 #pragma omp target
7346 #pragma omp teams distribute parallel for simd
7347   for (int i = 0; i < 10; ++i) {
7348 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7349     bar();
7350   }
7351 #pragma omp target
7352 #pragma omp teams distribute parallel for simd
7353   for (int i = 0; i < 10; ++i) {
7354 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7355     ++a;
7356   }
7357 #pragma omp target
7358 #pragma omp teams distribute parallel for simd
7359   for (int i = 0; i < 10; ++i) {
7360 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7361     ++a;
7362   }
7363 #pragma omp target
7364 #pragma omp teams distribute parallel for simd
7365   for (int i = 0; i < 10; ++i) {
7366 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7367     ++a;
7368   }
7369 #pragma omp target
7370 #pragma omp teams distribute parallel for simd
7371   for (int i = 0; i < 10; ++i) {
7372 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7373     for (int i = 0; i < 10; ++i)
7374       ;
7375   }
7376 #pragma omp target
7377 #pragma omp teams distribute parallel for simd
7378   for (int i = 0; i < 10; ++i) {
7379 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7380     ++a;
7381   }
7382 #pragma omp target
7383 #pragma omp teams distribute parallel for simd
7384   for (int i = 0; i < 10; ++i) {
7385 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7386     ++a;
7387   }
7388 #pragma omp target
7389 #pragma omp teams distribute parallel for simd
7390   for (int i = 0; i < 10; ++i) {
7391 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7392     ++a;
7393   }
7394 #pragma omp target
7395 #pragma omp teams distribute parallel for simd
7396   for (int i = 0; i < 10; ++i) {
7397 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7398     ++a;
7399   }
7400 #pragma omp target
7401 #pragma omp teams distribute parallel for simd
7402   for (int i = 0; i < 10; ++i) {
7403 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7404     for (int i = 0; i < 10; ++i)
7405       ++a;
7406   }
7407 #pragma omp target
7408 #pragma omp teams distribute parallel for simd
7409   for (int i = 0; i < 10; ++i) {
7410 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7411     for (int i = 0; i < 10; ++i)
7412       ++a;
7413   }
7414 #pragma omp target
7415 #pragma omp teams distribute parallel for simd
7416   for (int i = 0; i < 10; ++i) {
7417 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7418     for (int i = 0; i < 10; ++i)
7419       ++a;
7420   }
7421 #pragma omp target
7422 #pragma omp teams distribute parallel for simd
7423   for (int i = 0; i < 10; ++i) {
7424 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7425     for (int i = 0; i < 10; ++i)
7426       ++a;
7427   }
7428 #pragma omp target
7429 #pragma omp teams distribute parallel for simd
7430   for (int i = 0; i < 10; ++i) {
7431 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7432     for (int i = 0; i < 10; ++i)
7433       ++a;
7434   }
7435 #pragma omp target
7436 #pragma omp teams distribute parallel for simd
7437   for (int i = 0; i < 10; ++i) {
7438 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7439     for (int i = 0; i < 10; ++i)
7440       ++a;
7441   }
7442 #pragma omp target
7443 #pragma omp teams distribute parallel for simd
7444   for (int i = 0; i < 10; ++i) {
7445 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7446     ++a;
7447   }
7448 #pragma omp target
7449 #pragma omp teams distribute parallel for simd
7450   for (int i = 0; i < 10; ++i) {
7451 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7452     for (int i = 0; i < 10; ++i)
7453       ++a;
7454   }
7455 #pragma omp target
7456 #pragma omp teams distribute parallel for simd
7457   for (int i = 0; i < 10; ++i) {
7458 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7459     for (int i = 0; i < 10; ++i)
7460       ++a;
7461   }
7462 #pragma omp target
7463 #pragma omp teams distribute parallel for simd
7464   for (int i = 0; i < 10; ++i) {
7465 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7466     for (int i = 0; i < 10; ++i)
7467       ++a;
7468   }
7469 #pragma omp target
7470 #pragma omp teams distribute parallel for simd
7471   for (int i = 0; i < 10; ++i) {
7472 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7473     for (int i = 0; i < 10; ++i)
7474       ++a;
7475   }
7476 
7477 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
7478 #pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7479   for (int i = 0; i < 10; ++i)
7480     ;
7481 #pragma omp target
7482 #pragma omp teams distribute parallel for
7483   for (int i = 0; i < 10; ++i) {
7484 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7485     for (int i = 0; i < 10; ++i)
7486       ;
7487   }
7488 #pragma omp target
7489 #pragma omp teams distribute parallel for
7490   for (int i = 0; i < 10; ++i) {
7491 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7492     for (int i = 0; i < 10; ++i)
7493       ;
7494   }
7495 #pragma omp target
7496 #pragma omp teams distribute parallel for
7497   for (int i = 0; i < 10; ++i) {
7498 #pragma omp for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
7499     for (int i = 0; i < 10; ++i)
7500       ;
7501   }
7502 #pragma omp target
7503 #pragma omp teams distribute parallel for
7504   for (int i = 0; i < 10; ++i) {
7505 #pragma omp simd // OK
7506     for (int i = 0; i < 10; ++i)
7507       ;
7508   }
7509 #pragma omp target
7510 #pragma omp teams distribute parallel for
7511   for (int i = 0; i < 10; ++i) {
7512 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
7513     for (int i = 0; i < 10; ++i)
7514       ;
7515   }
7516 #pragma omp target
7517 #pragma omp teams distribute parallel for
7518   for (int i = 0; i < 10; ++i) {
7519 #pragma omp parallel // OK
7520     for (int i = 0; i < 10; ++i)
7521       ;
7522   }
7523 #pragma omp target
7524 #pragma omp teams distribute parallel for
7525   for (int i = 0; i < 10; ++i) {
7526 #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
7527     {
7528       bar();
7529     }
7530   }
7531 #pragma omp target
7532 #pragma omp teams distribute parallel for
7533   for (int i = 0; i < 10; ++i) {
7534 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
7535     {
7536       bar();
7537     }
7538   }
7539 #pragma omp target
7540 #pragma omp teams distribute parallel for
7541   for (int i = 0; i < 10; ++i) {
7542 #pragma omp single // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
7543     {
7544       bar();
7545     }
7546   }
7547 #pragma omp target
7548 #pragma omp teams distribute parallel for
7549   for (int i = 0; i < 10; ++i) {
7550 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
7551     {
7552       bar();
7553     }
7554   }
7555 #pragma omp target
7556 #pragma omp teams distribute parallel for
7557   for (int i = 0; i < 10; ++i) {
7558 #pragma omp critical // OK
7559     {
7560       bar();
7561     }
7562   }
7563 #pragma omp target
7564 #pragma omp teams distribute parallel for
7565   for (int i = 0; i < 10; ++i) {
7566 #pragma omp parallel // OK
7567     {
7568 #pragma omp single
7569       {
7570 	bar();
7571       }
7572     }
7573   }
7574 #pragma omp target
7575 #pragma omp teams distribute parallel for
7576   for (int i = 0; i < 10; ++i) {
7577 #pragma omp parallel for // OK
7578     for (int i = 0; i < 10; ++i)
7579       ;
7580   }
7581 #pragma omp target
7582 #pragma omp teams distribute parallel for
7583   for (int i = 0; i < 10; ++i) {
7584 #pragma omp parallel for simd // OK
7585     for (int i = 0; i < 10; ++i)
7586       ;
7587   }
7588 #pragma omp target
7589 #pragma omp teams distribute parallel for
7590   for (int i = 0; i < 10; ++i) {
7591 #pragma omp parallel sections // OK
7592     {
7593       bar();
7594     }
7595   }
7596 #pragma omp target
7597 #pragma omp teams distribute parallel for
7598   for (int i = 0; i < 10; ++i) {
7599 #pragma omp task // OK
7600     {
7601       bar();
7602     }
7603   }
7604 #pragma omp target
7605 #pragma omp teams distribute parallel for
7606   for (int i = 0; i < 10; ++i) {
7607 #pragma omp taskyield // OK
7608     bar();
7609   }
7610 #pragma omp target
7611 #pragma omp teams distribute parallel for
7612   for (int i = 0; i < 10; ++i) {
7613 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
7614     bar();
7615   }
7616 #pragma omp target
7617 #pragma omp teams distribute parallel for
7618   for (int i = 0; i < 10; ++i) {
7619 #pragma omp taskwait // OK
7620     bar();
7621   }
7622 #pragma omp target
7623 #pragma omp teams distribute parallel for
7624   for (int i = 0; i < 10; ++i) {
7625 #pragma omp flush // OK
7626     bar();
7627   }
7628 #pragma omp target
7629 #pragma omp teams distribute parallel for
7630   for (int i = 0; i < 10; ++i) {
7631 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7632     bar();
7633   }
7634 #pragma omp target
7635 #pragma omp teams distribute parallel for
7636   for (int i = 0; i < 10; ++i) {
7637 #pragma omp atomic // OK
7638     ++a;
7639   }
7640 #pragma omp target
7641 #pragma omp teams distribute parallel for
7642   for (int i = 0; i < 10; ++i) {
7643 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7644     ++a;
7645   }
7646 #pragma omp target
7647 #pragma omp teams distribute parallel for
7648   for (int i = 0; i < 10; ++i) {
7649 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7650     ++a;
7651   }
7652 #pragma omp target
7653 #pragma omp teams distribute parallel for
7654   for (int i = 0; i < 10; ++i) {
7655 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7656     for (int i = 0; i < 10; ++i)
7657       ;
7658   }
7659 #pragma omp target
7660 #pragma omp teams distribute parallel for
7661   for (int i = 0; i < 10; ++i) {
7662 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7663     ++a;
7664   }
7665 #pragma omp target
7666 #pragma omp teams distribute parallel for
7667   for (int i = 0; i < 10; ++i) {
7668 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7669     ++a;
7670   }
7671 #pragma omp target
7672 #pragma omp teams distribute parallel for
7673   for (int i = 0; i < 10; ++i) {
7674 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7675     ++a;
7676   }
7677 #pragma omp target
7678 #pragma omp teams distribute parallel for
7679   for (int i = 0; i < 10; ++i) {
7680 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7681     ++a;
7682   }
7683 #pragma omp target
7684 #pragma omp teams distribute parallel for
7685   for (int i = 0; i < 10; ++i) {
7686 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
7687     for (int i = 0; i < 10; ++i)
7688       ++a;
7689   }
7690 #pragma omp target
7691 #pragma omp teams distribute parallel for
7692   for (int i = 0; i < 10; ++i) {
7693 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7694     for (int i = 0; i < 10; ++i)
7695       ++a;
7696   }
7697 #pragma omp target
7698 #pragma omp teams distribute parallel for
7699   for (int i = 0; i < 10; ++i) {
7700 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
7701     for (int i = 0; i < 10; ++i)
7702       ++a;
7703   }
7704 #pragma omp target
7705 #pragma omp teams distribute parallel for
7706   for (int i = 0; i < 10; ++i) {
7707 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
7708     for (int i = 0; i < 10; ++i)
7709       ++a;
7710   }
7711 #pragma omp target
7712 #pragma omp teams distribute parallel for
7713   for (int i = 0; i < 10; ++i) {
7714 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
7715     for (int i = 0; i < 10; ++i)
7716       ++a;
7717   }
7718 #pragma omp target
7719 #pragma omp teams distribute parallel for
7720   for (int i = 0; i < 10; ++i) {
7721 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
7722     for (int i = 0; i < 10; ++i)
7723       ++a;
7724   }
7725 #pragma omp target
7726 #pragma omp teams distribute parallel for
7727   for (int i = 0; i < 10; ++i) {
7728 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7729     ++a;
7730   }
7731 #pragma omp target
7732 #pragma omp teams distribute parallel for
7733   for (int i = 0; i < 10; ++i) {
7734 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
7735     for (int i = 0; i < 10; ++i)
7736       ++a;
7737   }
7738 #pragma omp target
7739 #pragma omp teams distribute parallel for
7740   for (int i = 0; i < 10; ++i) {
7741 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7742     for (int i = 0; i < 10; ++i)
7743       ++a;
7744   }
7745 #pragma omp target
7746 #pragma omp teams distribute parallel for
7747   for (int i = 0; i < 10; ++i) {
7748 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7749     for (int i = 0; i < 10; ++i)
7750       ++a;
7751   }
7752 #pragma omp target
7753 #pragma omp teams distribute parallel for
7754   for (int i = 0; i < 10; ++i) {
7755 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7756     for (int i = 0; i < 10; ++i)
7757       ++a;
7758   }
7759 
7760 // TARGET TEAMS DIRECTIVE
7761 #pragma omp target teams
7762 #pragma omp parallel
7763   bar();
7764 #pragma omp target teams
7765 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
7766   for (int i = 0; i < 10; ++i)
7767     ;
7768 #pragma omp target teams
7769 #pragma omp simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
7770   for (int i = 0; i < 10; ++i)
7771     ;
7772 #pragma omp target teams
7773 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
7774   for (int i = 0; i < 10; ++i)
7775     ;
7776 #pragma omp target teams
7777 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
7778   {
7779     bar();
7780   }
7781 #pragma omp target teams
7782 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
7783   {
7784     bar();
7785   }
7786 #pragma omp target teams
7787 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
7788   bar();
7789 
7790 #pragma omp target teams
7791 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
7792   {
7793     bar();
7794   }
7795 #pragma omp target teams
7796 #pragma omp critical // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
7797   {
7798     bar();
7799   }
7800 #pragma omp target teams
7801 #pragma omp parallel for
7802   for (int i = 0; i < 10; ++i)
7803     ;
7804 #pragma omp target teams
7805 #pragma omp parallel for simd
7806   for (int i = 0; i < 10; ++i)
7807     ;
7808 #pragma omp target teams
7809 #pragma omp parallel sections
7810   {
7811     bar();
7812   }
7813 #pragma omp target teams
7814 #pragma omp task // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
7815   {
7816     bar();
7817   }
7818 #pragma omp target teams
7819   {
7820 #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
7821     bar();
7822   }
7823 #pragma omp target teams
7824   {
7825 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
7826     bar();
7827   }
7828 #pragma omp target teams
7829   {
7830 #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
7831     bar();
7832   }
7833 #pragma omp target teams
7834   {
7835 #pragma omp flush // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
7836     bar();
7837   }
7838 #pragma omp target teams
7839   {
7840 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7841     bar();
7842   }
7843 #pragma omp target teams
7844   {
7845 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
7846     ++a;
7847   }
7848 #pragma omp target teams
7849   {
7850 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
7851     ++a;
7852   }
7853 #pragma omp target teams
7854   {
7855 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
7856     ++a;
7857   }
7858 #pragma omp target teams
7859 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
7860   for (int i = 0; i < 10; ++i)
7861     ;
7862 #pragma omp target teams
7863   {
7864 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7865   }
7866 #pragma omp target teams
7867   {
7868 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7869   }
7870 #pragma omp target teams
7871   {
7872 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7873     ++a;
7874   }
7875 #pragma omp target teams
7876   {
7877 #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
7878   for (int i = 0; i < 10; ++i)
7879     ++a;
7880   }
7881 #pragma omp target teams
7882 #pragma omp distribute
7883   for (int i = 0; i < 10; ++i)
7884     ;
7885 #pragma omp target teams
7886   {
7887 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
7888     ++a;
7889   }
7890 #pragma omp target teams
7891 #pragma omp distribute parallel for
7892   for (int i = 0; i < 10; ++i)
7893     ;
7894 #pragma omp target teams
7895   {
7896 #pragma omp distribute parallel for
7897   for (int i = 0; i < 10; ++i)
7898     ;
7899 #pragma omp distribute parallel for
7900   for (int j = 0; j < 10; ++j)
7901     ;
7902   }
7903 #pragma omp target teams
7904   {
7905 #pragma omp distribute parallel for simd
7906   for (int i = 0; i < 10; ++i)
7907     ;
7908 #pragma omp distribute parallel for simd
7909   for (int j = 0; j < 10; ++j)
7910     ;
7911   }
7912 #pragma omp target teams
7913   {
7914 #pragma omp distribute simd
7915   for (int i = 0; i < 10; ++i)
7916     ;
7917 #pragma omp distribute simd
7918   for (int j = 0; j < 10; ++j)
7919     ;
7920   }
7921 #pragma omp target teams
7922   {
7923 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
7924   for (int i = 0; i < 10; ++i)
7925     ;
7926   }
7927 #pragma omp target teams
7928   {
7929 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
7930   for (int i = 0; i < 10; ++i)
7931     ;
7932   }
7933 #pragma omp target teams
7934   {
7935 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
7936   for (int i = 0; i < 10; ++i)
7937     ;
7938   }
7939 #pragma omp target teams
7940   {
7941 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
7942   for (int i = 0; i < 10; ++i)
7943     ;
7944   }
7945 #pragma omp target teams
7946   {
7947 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
7948   for (int i = 0; i < 10; ++i)
7949     ;
7950   }
7951 #pragma omp target teams
7952   {
7953 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
7954     a++;
7955   }
7956 #pragma omp target teams
7957   {
7958 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
7959   for (int i = 0; i < 10; ++i)
7960     ;
7961   }
7962 #pragma omp target teams
7963   {
7964 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
7965   for (int i = 0; i < 10; ++i)
7966     ;
7967   }
7968 #pragma omp target teams
7969   {
7970 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
7971   for (int i = 0; i < 10; ++i)
7972     ;
7973   }
7974 #pragma omp target teams
7975   {
7976 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
7977   for (int i = 0; i < 10; ++i)
7978     ;
7979   }
7980 
7981 // TARGET TEAMS DISTRIBUTE DIRECTIVE
7982 #pragma omp target teams distribute // OK
7983   for (int i = 0; i < 10; ++i)
7984     ;
7985 #pragma omp target teams distribute
7986   for (int i = 0; i < 10; ++i) {
7987 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7988     for (int i = 0; i < 10; ++i)
7989       ;
7990   }
7991 #pragma omp target teams distribute
7992   for (int i = 0; i < 10; ++i) {
7993 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7994     for (int i = 0; i < 10; ++i)
7995       ;
7996   }
7997 #pragma omp target teams distribute
7998   for (int i = 0; i < 10; ++i) {
7999 #pragma omp for // OK
8000     for (int i = 0; i < 10; ++i)
8001       ;
8002   }
8003 #pragma omp target teams distribute
8004   for (int i = 0; i < 10; ++i) {
8005 #pragma omp simd // OK
8006     for (int i = 0; i < 10; ++i)
8007       ;
8008   }
8009 #pragma omp target teams distribute
8010   for (int i = 0; i < 10; ++i) {
8011 #pragma omp for simd // OK
8012     for (int i = 0; i < 10; ++i)
8013       ;
8014   }
8015 #pragma omp target teams distribute
8016   for (int i = 0; i < 10; ++i) {
8017 #pragma omp parallel // OK
8018     for (int i = 0; i < 10; ++i)
8019       ;
8020   }
8021 #pragma omp target teams distribute
8022   for (int i = 0; i < 10; ++i) {
8023 #pragma omp sections // OK
8024     {
8025       bar();
8026     }
8027   }
8028 #pragma omp target teams distribute
8029   for (int i = 0; i < 10; ++i) {
8030 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
8031     {
8032       bar();
8033     }
8034   }
8035 #pragma omp target teams distribute
8036   for (int i = 0; i < 10; ++i) {
8037 #pragma omp single // OK
8038     {
8039       bar();
8040     }
8041   }
8042 #pragma omp target teams distribute
8043   for (int i = 0; i < 10; ++i) {
8044 #pragma omp master // OK
8045     {
8046       bar();
8047     }
8048   }
8049 #pragma omp target teams distribute
8050   for (int i = 0; i < 10; ++i) {
8051 #pragma omp critical // OK
8052     {
8053       bar();
8054     }
8055   }
8056 #pragma omp target teams distribute
8057   for (int i = 0; i < 10; ++i) {
8058 #pragma omp parallel // OK
8059     {
8060 #pragma omp single
8061       {
8062 	bar();
8063       }
8064     }
8065   }
8066 #pragma omp target teams distribute
8067   for (int i = 0; i < 10; ++i) {
8068 #pragma omp parallel for // OK
8069     for (int i = 0; i < 10; ++i)
8070       ;
8071   }
8072 #pragma omp target teams distribute
8073   for (int i = 0; i < 10; ++i) {
8074 #pragma omp parallel for simd // OK
8075     for (int i = 0; i < 10; ++i)
8076       ;
8077   }
8078 #pragma omp target teams distribute
8079   for (int i = 0; i < 10; ++i) {
8080 #pragma omp parallel sections // OK
8081     {
8082       bar();
8083     }
8084   }
8085 #pragma omp target teams distribute
8086   for (int i = 0; i < 10; ++i) {
8087 #pragma omp task // OK
8088     {
8089       bar();
8090     }
8091   }
8092 #pragma omp target teams distribute
8093   for (int i = 0; i < 10; ++i) {
8094 #pragma omp taskyield // OK
8095     bar();
8096   }
8097 #pragma omp target teams distribute
8098   for (int i = 0; i < 10; ++i) {
8099 #pragma omp barrier // OK
8100     bar();
8101   }
8102 #pragma omp target teams distribute
8103   for (int i = 0; i < 10; ++i) {
8104 #pragma omp taskwait // OK
8105     bar();
8106   }
8107 #pragma omp target teams distribute
8108   for (int i = 0; i < 10; ++i) {
8109 #pragma omp flush // OK
8110     bar();
8111   }
8112 #pragma omp target teams distribute
8113   for (int i = 0; i < 10; ++i) {
8114 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8115     bar();
8116   }
8117 #pragma omp target teams distribute
8118   for (int i = 0; i < 10; ++i) {
8119 #pragma omp atomic // OK
8120     ++a;
8121   }
8122 #pragma omp target teams distribute
8123   for (int i = 0; i < 10; ++i) {
8124 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8125     ++a;
8126   }
8127 #pragma omp target teams distribute
8128   for (int i = 0; i < 10; ++i) {
8129 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8130     ++a;
8131   }
8132 #pragma omp target teams distribute
8133   for (int i = 0; i < 10; ++i) {
8134 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8135     for (int i = 0; i < 10; ++i)
8136       ;
8137   }
8138 #pragma omp target teams distribute
8139   for (int i = 0; i < 10; ++i) {
8140 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8141     ++a;
8142   }
8143 #pragma omp target teams distribute
8144   for (int i = 0; i < 10; ++i) {
8145 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8146     ++a;
8147   }
8148 #pragma omp target teams distribute
8149   for (int i = 0; i < 10; ++i) {
8150 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8151     ++a;
8152   }
8153 #pragma omp target teams distribute
8154   for (int i = 0; i < 10; ++i) {
8155 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8156     ++a;
8157   }
8158 #pragma omp target teams distribute
8159   for (int i = 0; i < 10; ++i) {
8160 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8161     for (int i = 0; i < 10; ++i)
8162       ++a;
8163   }
8164 #pragma omp target teams distribute
8165   for (int i = 0; i < 10; ++i) {
8166 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8167     for (int i = 0; i < 10; ++i)
8168       ++a;
8169   }
8170 #pragma omp target teams distribute
8171   for (int i = 0; i < 10; ++i) {
8172 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
8173     for (int i = 0; i < 10; ++i)
8174       ++a;
8175   }
8176 #pragma omp target teams distribute
8177   for (int i = 0; i < 10; ++i) {
8178 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
8179     for (int i = 0; i < 10; ++i)
8180       ++a;
8181   }
8182 #pragma omp target teams distribute
8183   for (int i = 0; i < 10; ++i) {
8184 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
8185     for (int i = 0; i < 10; ++i)
8186       ++a;
8187   }
8188 #pragma omp target teams distribute
8189   for (int i = 0; i < 10; ++i) {
8190 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
8191     for (int i = 0; i < 10; ++i)
8192       ;
8193   }
8194 #pragma omp target teams distribute
8195   for (int i = 0; i < 10; ++i) {
8196 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8197     a++;
8198   }
8199 #pragma omp target teams distribute
8200   for (int i = 0; i < 10; ++i) {
8201 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8202     for (int i = 0; i < 10; ++i)
8203       ;
8204   }
8205 #pragma omp target teams distribute
8206   for (int i = 0; i < 10; ++i) {
8207 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8208     for (int i = 0; i < 10; ++i)
8209       ;
8210   }
8211 #pragma omp target teams distribute
8212   for (int i = 0; i < 10; ++i) {
8213 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8214     for (int i = 0; i < 10; ++i)
8215       ;
8216   }
8217 #pragma omp target teams distribute
8218   for (int i = 0; i < 10; ++i) {
8219 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8220     for (int i = 0; i < 10; ++i)
8221       ;
8222   }
8223 
8224 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8225 #pragma omp target teams distribute parallel for // OK
8226   for (int i = 0; i < 10; ++i)
8227     ;
8228 #pragma omp target teams distribute parallel for
8229   for (int i = 0; i < 10; ++i) {
8230 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
8231     for (int i = 0; i < 10; ++i)
8232       ;
8233   }
8234 #pragma omp target teams distribute parallel for
8235   for (int i = 0; i < 10; ++i) {
8236 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8237     for (int i = 0; i < 10; ++i)
8238       ;
8239   }
8240 #pragma omp target teams distribute parallel for
8241   for (int i = 0; i < 10; ++i) {
8242 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
8243     for (int i = 0; i < 10; ++i)
8244       ;
8245   }
8246 #pragma omp target teams distribute parallel for
8247   for (int i = 0; i < 10; ++i) {
8248 #pragma omp simd // OK
8249     for (int i = 0; i < 10; ++i)
8250       ;
8251   }
8252 #pragma omp target teams distribute parallel for
8253   for (int i = 0; i < 10; ++i) {
8254 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8255     for (int i = 0; i < 10; ++i)
8256       ;
8257   }
8258 #pragma omp target teams distribute parallel for
8259   for (int i = 0; i < 10; ++i) {
8260 #pragma omp parallel // OK
8261     for (int i = 0; i < 10; ++i)
8262       ;
8263   }
8264 #pragma omp target teams distribute parallel for
8265   for (int i = 0; i < 10; ++i) {
8266 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8267     {
8268       bar();
8269     }
8270   }
8271 #pragma omp target teams distribute parallel for
8272   for (int i = 0; i < 10; ++i) {
8273 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
8274     {
8275       bar();
8276     }
8277   }
8278 #pragma omp target teams distribute parallel for
8279   for (int i = 0; i < 10; ++i) {
8280 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8281     {
8282       bar();
8283     }
8284   }
8285 #pragma omp target teams distribute parallel for
8286   for (int i = 0; i < 10; ++i) {
8287 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8288     {
8289       bar();
8290     }
8291   }
8292 #pragma omp target teams distribute parallel for
8293   for (int i = 0; i < 10; ++i) {
8294 #pragma omp critical // OK
8295     {
8296       bar();
8297     }
8298   }
8299 #pragma omp target teams distribute parallel for
8300   for (int i = 0; i < 10; ++i) {
8301 #pragma omp parallel // OK
8302     {
8303 #pragma omp single
8304       {
8305 	bar();
8306       }
8307     }
8308   }
8309 #pragma omp target teams distribute parallel for
8310   for (int i = 0; i < 10; ++i) {
8311 #pragma omp parallel for // OK
8312     for (int i = 0; i < 10; ++i)
8313       ;
8314   }
8315 #pragma omp target teams distribute parallel for
8316   for (int i = 0; i < 10; ++i) {
8317 #pragma omp parallel for simd // OK
8318     for (int i = 0; i < 10; ++i)
8319       ;
8320   }
8321 #pragma omp target teams distribute parallel for
8322   for (int i = 0; i < 10; ++i) {
8323 #pragma omp parallel sections // OK
8324     {
8325       bar();
8326     }
8327   }
8328 #pragma omp target teams distribute parallel for
8329   for (int i = 0; i < 10; ++i) {
8330 #pragma omp task // OK
8331     {
8332       bar();
8333     }
8334   }
8335 #pragma omp target teams distribute parallel for
8336   for (int i = 0; i < 10; ++i) {
8337 #pragma omp taskyield // OK
8338     bar();
8339   }
8340 #pragma omp target teams distribute parallel for
8341   for (int i = 0; i < 10; ++i) {
8342 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8343     bar();
8344   }
8345 #pragma omp target teams distribute parallel for
8346   for (int i = 0; i < 10; ++i) {
8347 #pragma omp taskwait // OK
8348     bar();
8349   }
8350 #pragma omp target teams distribute parallel for
8351   for (int i = 0; i < 10; ++i) {
8352 #pragma omp flush // OK
8353     bar();
8354   }
8355 #pragma omp target teams distribute parallel for
8356   for (int i = 0; i < 10; ++i) {
8357 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8358     bar();
8359   }
8360 #pragma omp target teams distribute parallel for
8361   for (int i = 0; i < 10; ++i) {
8362 #pragma omp atomic // OK
8363     ++a;
8364   }
8365 #pragma omp target teams distribute parallel for
8366   for (int i = 0; i < 10; ++i) {
8367 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8368     ++a;
8369   }
8370 #pragma omp target teams distribute parallel for
8371   for (int i = 0; i < 10; ++i) {
8372 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8373     ++a;
8374   }
8375 #pragma omp target teams distribute parallel for
8376   for (int i = 0; i < 10; ++i) {
8377 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8378     for (int i = 0; i < 10; ++i)
8379       ;
8380   }
8381 #pragma omp target teams distribute parallel for
8382   for (int i = 0; i < 10; ++i) {
8383 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8384     ++a;
8385   }
8386 #pragma omp target teams distribute parallel for
8387   for (int i = 0; i < 10; ++i) {
8388 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8389     ++a;
8390   }
8391 #pragma omp target teams distribute parallel for
8392   for (int i = 0; i < 10; ++i) {
8393 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8394     ++a;
8395   }
8396 #pragma omp target teams distribute parallel for
8397   for (int i = 0; i < 10; ++i) {
8398 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8399     ++a;
8400   }
8401 #pragma omp target teams distribute parallel for
8402   for (int i = 0; i < 10; ++i) {
8403 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8404     for (int i = 0; i < 10; ++i)
8405       ++a;
8406   }
8407 #pragma omp target teams distribute parallel for
8408   for (int i = 0; i < 10; ++i) {
8409 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8410     for (int i = 0; i < 10; ++i)
8411       ++a;
8412   }
8413 #pragma omp target teams distribute parallel for
8414   for (int i = 0; i < 10; ++i) {
8415 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
8416     for (int i = 0; i < 10; ++i)
8417       ++a;
8418   }
8419 #pragma omp target teams distribute parallel for
8420   for (int i = 0; i < 10; ++i) {
8421 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
8422     for (int i = 0; i < 10; ++i)
8423       ++a;
8424   }
8425 #pragma omp target teams distribute parallel for
8426   for (int i = 0; i < 10; ++i) {
8427 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
8428     for (int i = 0; i < 10; ++i)
8429       ++a;
8430   }
8431 #pragma omp target teams distribute parallel for
8432   for (int i = 0; i < 10; ++i) {
8433 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
8434     for (int i = 0; i < 10; ++i)
8435       ;
8436   }
8437 #pragma omp target teams distribute parallel for
8438   for (int i = 0; i < 10; ++i) {
8439 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8440     a++;
8441   }
8442 #pragma omp target teams distribute parallel for
8443   for (int i = 0; i < 10; ++i) {
8444 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8445     for (int i = 0; i < 10; ++i)
8446       ;
8447   }
8448 #pragma omp target teams distribute parallel for
8449   for (int i = 0; i < 10; ++i) {
8450 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8451     for (int i = 0; i < 10; ++i)
8452       ;
8453   }
8454 #pragma omp target teams distribute parallel for
8455   for (int i = 0; i < 10; ++i) {
8456 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8457     for (int i = 0; i < 10; ++i)
8458       ;
8459   }
8460 #pragma omp target teams distribute parallel for
8461   for (int i = 0; i < 10; ++i) {
8462 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8463     for (int i = 0; i < 10; ++i)
8464       ;
8465   }
8466 
8467 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
8468 #pragma omp target teams distribute parallel for simd // OK
8469   for (int i = 0; i < 10; ++i)
8470     ;
8471 #pragma omp target teams distribute parallel for simd
8472   for (int i = 0; i < 10; ++i) {
8473 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8474     for (int i = 0; i < 10; ++i)
8475       ;
8476   }
8477 #pragma omp target teams distribute parallel for simd
8478   for (int i = 0; i < 10; ++i) {
8479 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8480     for (int i = 0; i < 10; ++i)
8481       ;
8482   }
8483 #pragma omp target teams distribute parallel for simd
8484   for (int i = 0; i < 10; ++i) {
8485 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8486     for (int i = 0; i < 10; ++i)
8487       ;
8488   }
8489 #pragma omp target teams distribute parallel for simd
8490   for (int i = 0; i < 10; ++i) {
8491 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8492     for (int i = 0; i < 10; ++i)
8493       ;
8494   }
8495 #pragma omp target teams distribute parallel for simd
8496   for (int i = 0; i < 10; ++i) {
8497 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8498     for (int i = 0; i < 10; ++i)
8499       ;
8500   }
8501 #pragma omp target teams distribute parallel for simd
8502   for (int i = 0; i < 10; ++i) {
8503 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8504     for (int i = 0; i < 10; ++i)
8505       ;
8506   }
8507 #pragma omp target teams distribute parallel for simd
8508   for (int i = 0; i < 10; ++i) {
8509 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8510     {
8511       bar();
8512     }
8513   }
8514 #pragma omp target teams distribute parallel for simd
8515   for (int i = 0; i < 10; ++i) {
8516 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8517     {
8518       bar();
8519     }
8520   }
8521 #pragma omp target teams distribute parallel for simd
8522   for (int i = 0; i < 10; ++i) {
8523 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8524     {
8525       bar();
8526     }
8527   }
8528 #pragma omp target teams distribute parallel for simd
8529   for (int i = 0; i < 10; ++i) {
8530 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8531     {
8532       bar();
8533     }
8534   }
8535 #pragma omp target teams distribute parallel for simd
8536   for (int i = 0; i < 10; ++i) {
8537 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8538     {
8539       bar();
8540     }
8541   }
8542 #pragma omp target teams distribute parallel for simd
8543   for (int i = 0; i < 10; ++i) {
8544 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8545     {
8546 #pragma omp single
8547       {
8548 	bar();
8549       }
8550     }
8551   }
8552 #pragma omp target teams distribute parallel for simd
8553   for (int i = 0; i < 10; ++i) {
8554 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8555     for (int i = 0; i < 10; ++i)
8556       ;
8557   }
8558 #pragma omp target teams distribute parallel for simd
8559   for (int i = 0; i < 10; ++i) {
8560 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8561     for (int i = 0; i < 10; ++i)
8562       ;
8563   }
8564 #pragma omp target teams distribute parallel for simd
8565   for (int i = 0; i < 10; ++i) {
8566 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8567     {
8568       bar();
8569     }
8570   }
8571 #pragma omp target teams distribute parallel for simd
8572   for (int i = 0; i < 10; ++i) {
8573 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8574     {
8575       bar();
8576     }
8577   }
8578 #pragma omp target teams distribute parallel for simd
8579   for (int i = 0; i < 10; ++i) {
8580 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8581     bar();
8582   }
8583 #pragma omp target teams distribute parallel for simd
8584   for (int i = 0; i < 10; ++i) {
8585 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8586     bar();
8587   }
8588 #pragma omp target teams distribute parallel for simd
8589   for (int i = 0; i < 10; ++i) {
8590 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8591     bar();
8592   }
8593 #pragma omp target teams distribute parallel for simd
8594   for (int i = 0; i < 10; ++i) {
8595 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8596     bar();
8597   }
8598 #pragma omp target teams distribute parallel for simd
8599   for (int i = 0; i < 10; ++i) {
8600 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8601     bar();
8602   }
8603 #pragma omp target teams distribute parallel for simd
8604   for (int i = 0; i < 10; ++i) {
8605 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
8606     ++a;
8607   }
8608 #pragma omp target teams distribute parallel for simd
8609   for (int i = 0; i < 10; ++i) {
8610 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8611     ++a;
8612   }
8613 #pragma omp target teams distribute parallel for simd
8614   for (int i = 0; i < 10; ++i) {
8615 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8616     ++a;
8617   }
8618 #pragma omp target teams distribute parallel for simd
8619   for (int i = 0; i < 10; ++i) {
8620 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8621     for (int i = 0; i < 10; ++i)
8622       ;
8623   }
8624 #pragma omp target teams distribute parallel for simd
8625   for (int i = 0; i < 10; ++i) {
8626 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8627     ++a;
8628   }
8629 #pragma omp target teams distribute parallel for simd
8630   for (int i = 0; i < 10; ++i) {
8631 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8632     ++a;
8633   }
8634 #pragma omp target teams distribute parallel for simd
8635   for (int i = 0; i < 10; ++i) {
8636 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8637     ++a;
8638   }
8639 #pragma omp target teams distribute parallel for simd
8640   for (int i = 0; i < 10; ++i) {
8641 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8642     ++a;
8643   }
8644 #pragma omp target teams distribute parallel for simd
8645   for (int i = 0; i < 10; ++i) {
8646 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8647     for (int i = 0; i < 10; ++i)
8648       ++a;
8649   }
8650 #pragma omp target teams distribute parallel for simd
8651   for (int i = 0; i < 10; ++i) {
8652 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8653     for (int i = 0; i < 10; ++i)
8654       ++a;
8655   }
8656 #pragma omp target teams distribute parallel for simd
8657   for (int i = 0; i < 10; ++i) {
8658 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8659     for (int i = 0; i < 10; ++i)
8660       ++a;
8661   }
8662 #pragma omp target teams distribute parallel for simd
8663   for (int i = 0; i < 10; ++i) {
8664 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8665     for (int i = 0; i < 10; ++i)
8666       ++a;
8667   }
8668 #pragma omp target teams distribute parallel for simd
8669   for (int i = 0; i < 10; ++i) {
8670 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8671     for (int i = 0; i < 10; ++i)
8672       ++a;
8673   }
8674 #pragma omp target teams distribute parallel for simd
8675   for (int i = 0; i < 10; ++i) {
8676 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8677     for (int i = 0; i < 10; ++i)
8678       ;
8679   }
8680 #pragma omp target teams distribute parallel for simd
8681   for (int i = 0; i < 10; ++i) {
8682 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8683     a++;
8684   }
8685 #pragma omp target teams distribute parallel for simd
8686   for (int i = 0; i < 10; ++i) {
8687 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8688     for (int i = 0; i < 10; ++i)
8689       ;
8690   }
8691 #pragma omp target teams distribute parallel for simd
8692   for (int i = 0; i < 10; ++i) {
8693 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8694     for (int i = 0; i < 10; ++i)
8695       ;
8696   }
8697 #pragma omp target teams distribute parallel for simd
8698   for (int i = 0; i < 10; ++i) {
8699 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8700     for (int i = 0; i < 10; ++i)
8701       ;
8702   }
8703 #pragma omp target teams distribute parallel for simd
8704   for (int i = 0; i < 10; ++i) {
8705 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8706     for (int i = 0; i < 10; ++i)
8707       ;
8708   }
8709 
8710 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
8711 #pragma omp target teams distribute simd // OK
8712   for (int i = 0; i < 10; ++i)
8713     ;
8714 #pragma omp target teams distribute simd
8715   for (int i = 0; i < 10; ++i) {
8716 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8717     for (int i = 0; i < 10; ++i)
8718       ;
8719   }
8720 #pragma omp target teams distribute simd
8721   for (int i = 0; i < 10; ++i) {
8722 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8723     for (int i = 0; i < 10; ++i)
8724       ;
8725   }
8726 #pragma omp target teams distribute simd
8727   for (int i = 0; i < 10; ++i) {
8728 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8729     for (int i = 0; i < 10; ++i)
8730       ;
8731   }
8732 #pragma omp target teams distribute simd
8733   for (int i = 0; i < 10; ++i) {
8734 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8735     for (int i = 0; i < 10; ++i)
8736       ;
8737   }
8738 #pragma omp target teams distribute simd
8739   for (int i = 0; i < 10; ++i) {
8740 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8741     for (int i = 0; i < 10; ++i)
8742       ;
8743   }
8744 #pragma omp target teams distribute simd
8745   for (int i = 0; i < 10; ++i) {
8746 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8747     for (int i = 0; i < 10; ++i)
8748       ;
8749   }
8750 #pragma omp target teams distribute simd
8751   for (int i = 0; i < 10; ++i) {
8752 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8753     {
8754       bar();
8755     }
8756   }
8757 #pragma omp target teams distribute simd
8758   for (int i = 0; i < 10; ++i) {
8759 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8760     {
8761       bar();
8762     }
8763   }
8764 #pragma omp target teams distribute simd
8765   for (int i = 0; i < 10; ++i) {
8766 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8767     {
8768       bar();
8769     }
8770   }
8771 #pragma omp target teams distribute simd
8772   for (int i = 0; i < 10; ++i) {
8773 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8774     {
8775       bar();
8776     }
8777   }
8778 #pragma omp target teams distribute simd
8779   for (int i = 0; i < 10; ++i) {
8780 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8781     {
8782       bar();
8783     }
8784   }
8785 #pragma omp target teams distribute simd
8786   for (int i = 0; i < 10; ++i) {
8787 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8788     {
8789 #pragma omp single
8790       {
8791 	bar();
8792       }
8793     }
8794   }
8795 #pragma omp target teams distribute simd
8796   for (int i = 0; i < 10; ++i) {
8797 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8798     for (int i = 0; i < 10; ++i)
8799       ;
8800   }
8801 #pragma omp target teams distribute simd
8802   for (int i = 0; i < 10; ++i) {
8803 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8804     for (int i = 0; i < 10; ++i)
8805       ;
8806   }
8807 #pragma omp target teams distribute simd
8808   for (int i = 0; i < 10; ++i) {
8809 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8810     {
8811       bar();
8812     }
8813   }
8814 #pragma omp target teams distribute simd
8815   for (int i = 0; i < 10; ++i) {
8816 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8817     {
8818       bar();
8819     }
8820   }
8821 #pragma omp target teams distribute simd
8822   for (int i = 0; i < 10; ++i) {
8823 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8824     bar();
8825   }
8826 #pragma omp target teams distribute simd
8827   for (int i = 0; i < 10; ++i) {
8828 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8829     bar();
8830   }
8831 #pragma omp target teams distribute simd
8832   for (int i = 0; i < 10; ++i) {
8833 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8834     bar();
8835   }
8836 #pragma omp target teams distribute simd
8837   for (int i = 0; i < 10; ++i) {
8838 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8839     bar();
8840   }
8841 #pragma omp target teams distribute simd
8842   for (int i = 0; i < 10; ++i) {
8843 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8844     bar();
8845   }
8846 #pragma omp target teams distribute simd
8847   for (int i = 0; i < 10; ++i) {
8848 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
8849     ++a;
8850   }
8851 #pragma omp target teams distribute simd
8852   for (int i = 0; i < 10; ++i) {
8853 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8854     ++a;
8855   }
8856 #pragma omp target teams distribute simd
8857   for (int i = 0; i < 10; ++i) {
8858 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8859     ++a;
8860   }
8861 #pragma omp target teams distribute simd
8862   for (int i = 0; i < 10; ++i) {
8863 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8864     for (int i = 0; i < 10; ++i)
8865       ;
8866   }
8867 #pragma omp target teams distribute simd
8868   for (int i = 0; i < 10; ++i) {
8869 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8870     ++a;
8871   }
8872 #pragma omp target teams distribute simd
8873   for (int i = 0; i < 10; ++i) {
8874 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8875     ++a;
8876   }
8877 #pragma omp target teams distribute simd
8878   for (int i = 0; i < 10; ++i) {
8879 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8880     ++a;
8881   }
8882 #pragma omp target teams distribute simd
8883   for (int i = 0; i < 10; ++i) {
8884 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8885     ++a;
8886   }
8887 #pragma omp target teams distribute simd
8888   for (int i = 0; i < 10; ++i) {
8889 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8890     for (int i = 0; i < 10; ++i)
8891       ++a;
8892   }
8893 #pragma omp target teams distribute simd
8894   for (int i = 0; i < 10; ++i) {
8895 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8896     for (int i = 0; i < 10; ++i)
8897       ++a;
8898   }
8899 #pragma omp target teams distribute simd
8900   for (int i = 0; i < 10; ++i) {
8901 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8902     for (int i = 0; i < 10; ++i)
8903       ++a;
8904   }
8905 #pragma omp target teams distribute simd
8906   for (int i = 0; i < 10; ++i) {
8907 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8908     for (int i = 0; i < 10; ++i)
8909       ++a;
8910   }
8911 #pragma omp target teams distribute simd
8912   for (int i = 0; i < 10; ++i) {
8913 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8914     for (int i = 0; i < 10; ++i)
8915       ++a;
8916   }
8917 #pragma omp target teams distribute simd
8918   for (int i = 0; i < 10; ++i) {
8919 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8920     for (int i = 0; i < 10; ++i)
8921       ;
8922   }
8923 #pragma omp target teams distribute simd
8924   for (int i = 0; i < 10; ++i) {
8925 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8926     a++;
8927   }
8928 #pragma omp target teams distribute simd
8929   for (int i = 0; i < 10; ++i) {
8930 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8931     for (int i = 0; i < 10; ++i)
8932       ;
8933   }
8934 #pragma omp target teams distribute simd
8935   for (int i = 0; i < 10; ++i) {
8936 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8937     for (int i = 0; i < 10; ++i)
8938       ;
8939   }
8940 #pragma omp target teams distribute simd
8941   for (int i = 0; i < 10; ++i) {
8942 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8943     for (int i = 0; i < 10; ++i)
8944       ;
8945   }
8946 #pragma omp target teams distribute simd
8947   for (int i = 0; i < 10; ++i) {
8948 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8949     for (int i = 0; i < 10; ++i)
8950       ;
8951   }
8952 
8953 }
8954 
8955 void foo() {
8956   int a = 0;
8957 // PARALLEL DIRECTIVE
8958 #pragma omp parallel
8959 #pragma omp for
8960   for (int i = 0; i < 10; ++i)
8961     ;
8962 #pragma omp parallel
8963 #pragma omp simd
8964   for (int i = 0; i < 10; ++i)
8965     ;
8966 #pragma omp parallel
8967 #pragma omp for simd
8968   for (int i = 0; i < 10; ++i)
8969     ;
8970 #pragma omp parallel
8971 #pragma omp sections
8972   {
8973     bar();
8974   }
8975 #pragma omp parallel
8976 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
8977   {
8978     bar();
8979   }
8980 #pragma omp parallel
8981 #pragma omp sections
8982   {
8983     bar();
8984   }
8985 #pragma omp parallel
8986 #pragma omp single
8987   bar();
8988 #pragma omp parallel
8989 #pragma omp master
8990   bar();
8991 #pragma omp parallel
8992 #pragma omp critical
8993   bar();
8994 #pragma omp parallel
8995 #pragma omp parallel for
8996   for (int i = 0; i < 10; ++i)
8997     ;
8998 #pragma omp parallel
8999 #pragma omp parallel for simd
9000   for (int i = 0; i < 10; ++i)
9001     ;
9002 #pragma omp parallel
9003 #pragma omp parallel sections
9004   {
9005     bar();
9006   }
9007 #pragma omp parallel
9008 #pragma omp task
9009   {
9010     bar();
9011   }
9012 #pragma omp parallel
9013   {
9014 #pragma omp taskyield
9015     bar();
9016   }
9017 #pragma omp parallel
9018   {
9019 #pragma omp barrier
9020     bar();
9021   }
9022 #pragma omp parallel
9023   {
9024 #pragma omp taskwait
9025     bar();
9026   }
9027 #pragma omp parallel
9028   {
9029 #pragma omp flush
9030     bar();
9031   }
9032 #pragma omp parallel
9033   {
9034 #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?}}
9035     bar();
9036   }
9037 #pragma omp parallel
9038   {
9039 #pragma omp atomic
9040     ++a;
9041   }
9042 #pragma omp parallel
9043   {
9044 #pragma omp target
9045     ++a;
9046   }
9047 #pragma omp parallel
9048   {
9049 #pragma omp target parallel
9050     ++a;
9051   }
9052 #pragma omp parallel
9053 #pragma omp target parallel for
9054   for (int i = 0; i < 10; ++i)
9055     ;
9056 #pragma omp parallel
9057   {
9058 #pragma omp target enter data map(to: a)
9059     ++a;
9060   }
9061 #pragma omp parallel
9062   {
9063 #pragma omp target exit data map(from: a)
9064     ++a;
9065   }
9066 #pragma omp parallel
9067   {
9068 #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?}}
9069     ++a;
9070   }
9071 #pragma omp parallel
9072   {
9073 #pragma omp taskloop
9074   for (int i = 0; i < 10; ++i)
9075     ++a;
9076   }
9077 #pragma omp parallel
9078   {
9079 #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?}}
9080     for (int i = 0; i < 10; ++i)
9081       ;
9082   }
9083 #pragma omp parallel
9084   {
9085 #pragma omp target update to(a)
9086     a++;
9087   }
9088 #pragma omp parallel
9089   {
9090 #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?}}
9091     for (int i = 0; i < 10; ++i)
9092       ;
9093   }
9094 #pragma omp parallel
9095   {
9096 #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?}}
9097     for (int i = 0; i < 10; ++i)
9098       ;
9099   }
9100 #pragma omp parallel
9101   {
9102 #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?}}
9103     for (int i = 0; i < 10; ++i)
9104       ;
9105   }
9106 #pragma omp parallel
9107   {
9108 #pragma omp target simd // OK
9109     for (int i = 0; i < 10; ++i)
9110       ;
9111   }
9112 #pragma omp parallel
9113   {
9114 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
9115     for (int i = 0; i < 10; ++i)
9116       ;
9117   }
9118 #pragma omp parallel
9119   {
9120 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
9121     for (int i = 0; i < 10; ++i)
9122       ;
9123   }
9124 #pragma omp parallel
9125   {
9126 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
9127     for (int i = 0; i < 10; ++i)
9128       ;
9129   }
9130 #pragma omp parallel
9131   {
9132 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
9133     for (int i = 0; i < 10; ++i)
9134       ;
9135   }
9136 #pragma omp parallel
9137   {
9138 #pragma omp target teams // OK
9139     a++;
9140   }
9141 #pragma omp parallel
9142   {
9143 #pragma omp target teams distribute // OK
9144     for (int i = 0; i < 10; ++i)
9145       ;
9146   }
9147 #pragma omp parallel
9148   {
9149 #pragma omp target teams distribute parallel for // OK
9150     for (int i = 0; i < 10; ++i)
9151       ;
9152   }
9153 #pragma omp parallel
9154   {
9155 #pragma omp target teams distribute parallel for simd // OK
9156     for (int i = 0; i < 10; ++i)
9157       ;
9158   }
9159 #pragma omp parallel
9160   {
9161 #pragma omp target teams distribute simd // OK
9162     for (int i = 0; i < 10; ++i)
9163       ;
9164   }
9165 
9166 // SIMD DIRECTIVE
9167 #pragma omp simd
9168   for (int i = 0; i < 10; ++i) {
9169 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9170     for (int i = 0; i < 10; ++i)
9171       ;
9172   }
9173 #pragma omp simd
9174   for (int i = 0; i < 10; ++i) {
9175 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9176     for (int i = 0; i < 10; ++i)
9177       ;
9178   }
9179 #pragma omp simd
9180   for (int i = 0; i < 10; ++i) {
9181 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9182     for (int i = 0; i < 10; ++i)
9183       ;
9184   }
9185 #pragma omp simd
9186   for (int i = 0; i < 10; ++i) {
9187 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9188     for (int i = 0; i < 10; ++i)
9189       ;
9190   }
9191 #pragma omp simd
9192   for (int i = 0; i < 10; ++i) {
9193 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9194     {
9195       bar();
9196     }
9197   }
9198 #pragma omp simd
9199   for (int i = 0; i < 10; ++i) {
9200 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9201     {
9202       bar();
9203     }
9204   }
9205 #pragma omp simd
9206   for (int i = 0; i < 10; ++i) {
9207 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9208     bar();
9209 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9210     bar();
9211   }
9212 #pragma omp simd
9213   for (int i = 0; i < 10; ++i) {
9214 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9215     bar();
9216 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9217     bar();
9218   }
9219 #pragma omp simd
9220   for (int i = 0; i < 10; ++i) {
9221 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9222     for (int i = 0; i < 10; ++i)
9223       ;
9224   }
9225 #pragma omp simd
9226   for (int i = 0; i < 10; ++i) {
9227 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9228     for (int i = 0; i < 10; ++i)
9229       ;
9230   }
9231 #pragma omp simd
9232   for (int i = 0; i < 10; ++i) {
9233 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9234     {
9235       bar();
9236     }
9237   }
9238 #pragma omp simd
9239   for (int i = 0; i < 10; ++i) {
9240 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9241     {
9242       bar();
9243     }
9244   }
9245 #pragma omp simd
9246   for (int i = 0; i < 10; ++i) {
9247 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9248     bar();
9249   }
9250 #pragma omp simd
9251   for (int i = 0; i < 10; ++i) {
9252 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9253     bar();
9254   }
9255 #pragma omp simd
9256   for (int i = 0; i < 10; ++i) {
9257 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9258     bar();
9259   }
9260 #pragma omp simd
9261   for (int i = 0; i < 10; ++i) {
9262 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9263     bar();
9264   }
9265 #pragma omp simd
9266   for (int i = 0; i < 10; ++i) {
9267 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9268     bar();
9269   }
9270 #pragma omp simd
9271   for (int i = 0; i < 10; ++i) {
9272 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9273     ++a;
9274   }
9275 #pragma omp simd
9276   for (int i = 0; i < 10; ++i) {
9277 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9278     ++a;
9279   }
9280 #pragma omp simd
9281   for (int i = 0; i < 10; ++i) {
9282 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9283     ++a;
9284   }
9285 #pragma omp simd
9286   for (int i = 0; i < 10; ++i) {
9287 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9288     for (int i = 0; i < 10; ++i)
9289       ;
9290   }
9291 #pragma omp simd
9292   for (int i = 0; i < 10; ++i) {
9293 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9294     ++a;
9295   }
9296 #pragma omp simd
9297   for (int i = 0; i < 10; ++i) {
9298 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9299     ++a;
9300   }
9301 #pragma omp simd
9302   for (int i = 0; i < 10; ++i) {
9303 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9304     ++a;
9305   }
9306 #pragma omp simd
9307   for (int i = 0; i < 10; ++i) {
9308 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9309   for (int i = 0; i < 10; ++i)
9310     ++a;
9311   }
9312 #pragma omp simd
9313   for (int i = 0; i < 10; ++i) {
9314 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9315     for (int j = 0; j < 10; ++j)
9316       ;
9317   }
9318 #pragma omp simd
9319   for (int i = 0; i < 10; ++i) {
9320 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9321     a++;
9322   }
9323 #pragma omp simd
9324   for (int i = 0; i < 10; ++i) {
9325 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9326     for (int j = 0; j < 10; ++j)
9327       ;
9328   }
9329 #pragma omp simd
9330   for (int i = 0; i < 10; ++i) {
9331 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9332     for (int j = 0; j < 10; ++j)
9333       ;
9334   }
9335 #pragma omp simd
9336   for (int i = 0; i < 10; ++i) {
9337 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9338     for (int j = 0; j < 10; ++j)
9339       ;
9340   }
9341 #pragma omp simd
9342   for (int i = 0; i < 10; ++i) {
9343 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9344     for (int j = 0; j < 10; ++j)
9345       ;
9346   }
9347 #pragma omp simd
9348   for (int i = 0; i < 10; ++i) {
9349 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9350     for (int j = 0; j < 10; ++j)
9351       ;
9352   }
9353 #pragma omp simd
9354   for (int i = 0; i < 10; ++i) {
9355 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9356     for (int j = 0; j < 10; ++j)
9357       ;
9358   }
9359 #pragma omp simd
9360   for (int i = 0; i < 10; ++i) {
9361 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9362     for (int j = 0; j < 10; ++j)
9363       ;
9364   }
9365 #pragma omp simd
9366   for (int i = 0; i < 10; ++i) {
9367 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9368     for (int j = 0; j < 10; ++j)
9369       ;
9370   }
9371 #pragma omp simd
9372   for (int i = 0; i < 10; ++i) {
9373 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9374     a++;
9375   }
9376 #pragma omp simd
9377   for (int i = 0; i < 10; ++i) {
9378 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9379     for (int j = 0; j < 10; ++j)
9380       ;
9381   }
9382 #pragma omp simd
9383   for (int i = 0; i < 10; ++i) {
9384 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9385     for (int j = 0; j < 10; ++j)
9386       ;
9387   }
9388 #pragma omp simd
9389   for (int i = 0; i < 10; ++i) {
9390 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9391     for (int j = 0; j < 10; ++j)
9392       ;
9393   }
9394 #pragma omp simd
9395   for (int i = 0; i < 10; ++i) {
9396 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9397     for (int j = 0; j < 10; ++j)
9398       ;
9399   }
9400 
9401 // FOR DIRECTIVE
9402 #pragma omp for
9403   for (int i = 0; i < 10; ++i) {
9404 #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?}}
9405     for (int i = 0; i < 10; ++i)
9406       ;
9407   }
9408 #pragma omp for
9409   for (int i = 0; i < 10; ++i) {
9410 #pragma omp simd
9411     for (int i = 0; i < 10; ++i)
9412       ;
9413   }
9414 #pragma omp for
9415   for (int i = 0; i < 10; ++i) {
9416 #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?}}
9417     for (int i = 0; i < 10; ++i)
9418       ;
9419   }
9420 #pragma omp for
9421   for (int i = 0; i < 10; ++i) {
9422 #pragma omp parallel
9423     for (int i = 0; i < 10; ++i)
9424       ;
9425   }
9426 #pragma omp for
9427   for (int i = 0; i < 10; ++i) {
9428 #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?}}
9429     {
9430       bar();
9431     }
9432   }
9433 #pragma omp for
9434   for (int i = 0; i < 10; ++i) {
9435 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
9436     {
9437       bar();
9438     }
9439   }
9440 #pragma omp for
9441   for (int i = 0; i < 10; ++i) {
9442 #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?}}
9443     bar();
9444 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
9445     bar();
9446 #pragma omp critical
9447     bar();
9448   }
9449 #pragma omp for
9450   for (int i = 0; i < 10; ++i) {
9451 #pragma omp parallel
9452     {
9453 #pragma omp single // OK
9454       {
9455         bar();
9456       }
9457 #pragma omp for // OK
9458       for (int i = 0; i < 10; ++i)
9459         ;
9460 #pragma omp for simd // OK
9461       for (int i = 0; i < 10; ++i)
9462         ;
9463 #pragma omp sections // OK
9464       {
9465         bar();
9466       }
9467     }
9468   }
9469 #pragma omp for
9470   for (int i = 0; i < 10; ++i) {
9471 #pragma omp parallel for
9472     for (int i = 0; i < 10; ++i)
9473       ;
9474   }
9475 #pragma omp for
9476   for (int i = 0; i < 10; ++i) {
9477 #pragma omp parallel for simd
9478     for (int i = 0; i < 10; ++i)
9479       ;
9480   }
9481 #pragma omp for
9482   for (int i = 0; i < 10; ++i) {
9483 #pragma omp parallel sections
9484     {
9485       bar();
9486     }
9487   }
9488 #pragma omp for
9489   for (int i = 0; i < 10; ++i) {
9490 #pragma omp task
9491     {
9492       bar();
9493     }
9494   }
9495 #pragma omp for
9496   for (int i = 0; i < 10; ++i) {
9497 #pragma omp taskyield
9498     bar();
9499   }
9500 #pragma omp for
9501   for (int i = 0; i < 10; ++i) {
9502 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
9503     bar();
9504   }
9505 #pragma omp for
9506   for (int i = 0; i < 10; ++i) {
9507 #pragma omp taskwait
9508     bar();
9509   }
9510 #pragma omp for
9511   for (int i = 0; i < 10; ++i) {
9512 #pragma omp flush
9513     bar();
9514   }
9515 #pragma omp for
9516   for (int i = 0; i < 10; ++i) {
9517 #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?}}
9518     bar();
9519   }
9520 #pragma omp for ordered
9521   for (int i = 0; i < 10; ++i) {
9522 #pragma omp ordered // OK
9523     bar();
9524   }
9525 #pragma omp for
9526   for (int i = 0; i < 10; ++i) {
9527 #pragma omp atomic
9528     ++a;
9529   }
9530 #pragma omp for
9531   for (int i = 0; i < 10; ++i) {
9532 #pragma omp target
9533     ++a;
9534   }
9535 #pragma omp for
9536   for (int i = 0; i < 10; ++i) {
9537 #pragma omp target parallel
9538     ++a;
9539   }
9540 #pragma omp for
9541   for (int i = 0; i < 10; ++i) {
9542 #pragma omp target parallel for
9543     for (int i = 0; i < 10; ++i)
9544       ;
9545   }
9546 #pragma omp for
9547   for (int i = 0; i < 10; ++i) {
9548 #pragma omp target enter data map(to: a)
9549     ++a;
9550   }
9551 #pragma omp for
9552   for (int i = 0; i < 10; ++i) {
9553 #pragma omp target exit data map(from: a)
9554     ++a;
9555   }
9556 #pragma omp for
9557   for (int i = 0; i < 10; ++i) {
9558 #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?}}
9559     ++a;
9560   }
9561 #pragma omp for
9562   for (int i = 0; i < 10; ++i) {
9563 #pragma omp taskloop
9564   for (int i = 0; i < 10; ++i)
9565     ++a;
9566   }
9567 #pragma omp for
9568   for (int i = 0; i < 10; ++i) {
9569 #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?}}
9570     for (int j = 0; j < 10; ++j)
9571       ;
9572   }
9573 #pragma omp for
9574   for (int i = 0; i < 10; ++i) {
9575 #pragma omp target update to(a)
9576     ++a;
9577   }
9578 #pragma omp for
9579   for (int i = 0; i < 10; ++i) {
9580 #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?}}
9581     for (int j = 0; j < 10; ++j)
9582       ;
9583   }
9584 #pragma omp for
9585   for (int i = 0; i < 10; ++i) {
9586 #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?}}
9587     for (int j = 0; j < 10; ++j)
9588       ;
9589   }
9590 #pragma omp for
9591   for (int i = 0; i < 10; ++i) {
9592 #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?}}
9593     for (int j = 0; j < 10; ++j)
9594       ;
9595   }
9596 #pragma omp for
9597   for (int i = 0; i < 10; ++i) {
9598 #pragma omp target simd // OK
9599     for (int j = 0; j < 10; ++j)
9600       ;
9601   }
9602 #pragma omp for
9603   for (int i = 0; i < 10; ++i) {
9604 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
9605     for (int j = 0; j < 10; ++j)
9606       ;
9607   }
9608 #pragma omp for
9609   for (int i = 0; i < 10; ++i) {
9610 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
9611     for (int j = 0; j < 10; ++j)
9612       ;
9613   }
9614 #pragma omp for
9615   for (int i = 0; i < 10; ++i) {
9616 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
9617     for (int j = 0; j < 10; ++j)
9618       ;
9619   }
9620 #pragma omp for
9621   for (int i = 0; i < 10; ++i) {
9622 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
9623     for (int j = 0; j < 10; ++j)
9624       ;
9625   }
9626 #pragma omp for
9627   for (int i = 0; i < 10; ++i) {
9628 #pragma omp target teams // OK
9629     a++;
9630   }
9631 #pragma omp for
9632   for (int i = 0; i < 10; ++i) {
9633 #pragma omp target teams distribute // OK
9634     for (int j = 0; j < 10; ++j)
9635       ;
9636   }
9637 #pragma omp for
9638   for (int i = 0; i < 10; ++i) {
9639 #pragma omp target teams distribute parallel for // OK
9640     for (int j = 0; j < 10; ++j)
9641       ;
9642   }
9643 #pragma omp for
9644   for (int i = 0; i < 10; ++i) {
9645 #pragma omp target teams distribute parallel for simd // OK
9646     for (int j = 0; j < 10; ++j)
9647       ;
9648   }
9649 #pragma omp for
9650   for (int i = 0; i < 10; ++i) {
9651 #pragma omp target teams distribute simd // OK
9652     for (int j = 0; j < 10; ++j)
9653       ;
9654   }
9655 
9656 // FOR SIMD DIRECTIVE
9657 #pragma omp for simd
9658   for (int i = 0; i < 10; ++i) {
9659 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9660     for (int i = 0; i < 10; ++i)
9661       ;
9662   }
9663 #pragma omp for simd
9664   for (int i = 0; i < 10; ++i) {
9665 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9666     for (int i = 0; i < 10; ++i)
9667       ;
9668   }
9669 #pragma omp for simd
9670   for (int i = 0; i < 10; ++i) {
9671 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9672     for (int i = 0; i < 10; ++i)
9673       ;
9674   }
9675 #pragma omp for simd
9676   for (int i = 0; i < 10; ++i) {
9677 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9678     for (int i = 0; i < 10; ++i)
9679       ;
9680   }
9681 #pragma omp for simd
9682   for (int i = 0; i < 10; ++i) {
9683 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9684     {
9685       bar();
9686     }
9687   }
9688 #pragma omp for simd
9689   for (int i = 0; i < 10; ++i) {
9690 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9691     {
9692       bar();
9693     }
9694   }
9695 #pragma omp for simd
9696   for (int i = 0; i < 10; ++i) {
9697 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9698     bar();
9699 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9700     bar();
9701   }
9702 #pragma omp for simd
9703   for (int i = 0; i < 10; ++i) {
9704 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9705     bar();
9706 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9707     bar();
9708   }
9709 #pragma omp for simd
9710   for (int i = 0; i < 10; ++i) {
9711 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9712     for (int i = 0; i < 10; ++i)
9713       ;
9714   }
9715 #pragma omp for simd
9716   for (int i = 0; i < 10; ++i) {
9717 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9718     for (int i = 0; i < 10; ++i)
9719       ;
9720   }
9721 #pragma omp for simd
9722   for (int i = 0; i < 10; ++i) {
9723 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9724     {
9725       bar();
9726     }
9727   }
9728 #pragma omp for simd
9729   for (int i = 0; i < 10; ++i) {
9730 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9731     {
9732       bar();
9733     }
9734   }
9735 #pragma omp for simd
9736   for (int i = 0; i < 10; ++i) {
9737 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9738     bar();
9739   }
9740 #pragma omp for simd
9741   for (int i = 0; i < 10; ++i) {
9742 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9743     bar();
9744   }
9745 #pragma omp for simd
9746   for (int i = 0; i < 10; ++i) {
9747 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9748     bar();
9749   }
9750 #pragma omp for simd
9751   for (int i = 0; i < 10; ++i) {
9752 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9753     bar();
9754   }
9755 #pragma omp for simd
9756   for (int i = 0; i < 10; ++i) {
9757 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9758     bar();
9759   }
9760 #pragma omp for simd
9761   for (int i = 0; i < 10; ++i) {
9762 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9763     ++a;
9764   }
9765 #pragma omp for simd
9766   for (int i = 0; i < 10; ++i) {
9767 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9768     ++a;
9769   }
9770 #pragma omp for simd
9771   for (int i = 0; i < 10; ++i) {
9772 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9773     ++a;
9774   }
9775 #pragma omp for simd
9776   for (int i = 0; i < 10; ++i) {
9777 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9778     for (int i = 0; i < 10; ++i)
9779       ;
9780   }
9781 #pragma omp for simd
9782   for (int i = 0; i < 10; ++i) {
9783 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9784     ++a;
9785   }
9786 #pragma omp for simd
9787   for (int i = 0; i < 10; ++i) {
9788 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9789     ++a;
9790   }
9791 #pragma omp for simd
9792   for (int i = 0; i < 10; ++i) {
9793 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9794     ++a;
9795   }
9796 #pragma omp for simd
9797   for (int i = 0; i < 10; ++i) {
9798 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9799   for (int i = 0; i < 10; ++i)
9800     ++a;
9801   }
9802 #pragma omp for simd
9803   for (int i = 0; i < 10; ++i) {
9804 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9805     for (int j = 0; j < 10; ++j)
9806       ;
9807   }
9808 #pragma omp for simd
9809   for (int i = 0; i < 10; ++i) {
9810 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9811     ++a;
9812   }
9813 #pragma omp for simd
9814   for (int i = 0; i < 10; ++i) {
9815 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9816     for (int j = 0; j < 10; ++j)
9817       ;
9818   }
9819 #pragma omp for simd
9820   for (int i = 0; i < 10; ++i) {
9821 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9822     for (int j = 0; j < 10; ++j)
9823       ;
9824   }
9825 #pragma omp for simd
9826   for (int i = 0; i < 10; ++i) {
9827 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9828     for (int j = 0; j < 10; ++j)
9829       ;
9830   }
9831 #pragma omp for simd
9832   for (int i = 0; i < 10; ++i) {
9833 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9834     for (int j = 0; j < 10; ++j)
9835       ;
9836   }
9837 #pragma omp for simd
9838   for (int i = 0; i < 10; ++i) {
9839 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9840     for (int j = 0; j < 10; ++j)
9841       ;
9842   }
9843 #pragma omp for simd
9844   for (int i = 0; i < 10; ++i) {
9845 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9846     for (int j = 0; j < 10; ++j)
9847       ;
9848   }
9849 #pragma omp for simd
9850   for (int i = 0; i < 10; ++i) {
9851 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9852     for (int j = 0; j < 10; ++j)
9853       ;
9854   }
9855 #pragma omp for simd
9856   for (int i = 0; i < 10; ++i) {
9857 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9858     for (int j = 0; j < 10; ++j)
9859       ;
9860   }
9861 #pragma omp for simd
9862   for (int i = 0; i < 10; ++i) {
9863 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9864     a++;
9865   }
9866 #pragma omp for simd
9867   for (int i = 0; i < 10; ++i) {
9868 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9869     for (int j = 0; j < 10; ++j)
9870       ;
9871   }
9872 #pragma omp for simd
9873   for (int i = 0; i < 10; ++i) {
9874 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9875     for (int j = 0; j < 10; ++j)
9876       ;
9877   }
9878 #pragma omp for simd
9879   for (int i = 0; i < 10; ++i) {
9880 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9881     for (int j = 0; j < 10; ++j)
9882       ;
9883   }
9884 #pragma omp for simd
9885   for (int i = 0; i < 10; ++i) {
9886 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9887     for (int j = 0; j < 10; ++j)
9888       ;
9889   }
9890 
9891 // SECTIONS DIRECTIVE
9892 #pragma omp sections
9893   {
9894 #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?}}
9895     for (int i = 0; i < 10; ++i)
9896       ;
9897   }
9898 #pragma omp sections
9899   {
9900 #pragma omp simd
9901     for (int i = 0; i < 10; ++i)
9902       ;
9903   }
9904 #pragma omp sections
9905   {
9906 #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?}}
9907     for (int i = 0; i < 10; ++i)
9908       ;
9909   }
9910 #pragma omp sections
9911   {
9912 #pragma omp parallel
9913     for (int i = 0; i < 10; ++i)
9914       ;
9915   }
9916 #pragma omp sections
9917   {
9918 #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?}}
9919     {
9920       bar();
9921     }
9922   }
9923 #pragma omp sections
9924   {
9925 #pragma omp section
9926     {
9927       bar();
9928     }
9929   }
9930 #pragma omp sections
9931   {
9932 #pragma omp critical
9933     bar();
9934 #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?}}
9935     bar();
9936 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
9937     bar();
9938   }
9939 #pragma omp sections
9940   {
9941 #pragma omp parallel
9942     {
9943 #pragma omp single // OK
9944       {
9945         bar();
9946       }
9947 #pragma omp for // OK
9948       for (int i = 0; i < 10; ++i)
9949         ;
9950 #pragma omp for simd // OK
9951       for (int i = 0; i < 10; ++i)
9952         ;
9953 #pragma omp sections // OK
9954       {
9955         bar();
9956       }
9957     }
9958   }
9959 #pragma omp sections
9960   {
9961 #pragma omp parallel for
9962     for (int i = 0; i < 10; ++i)
9963       ;
9964   }
9965 #pragma omp sections
9966   {
9967 #pragma omp parallel for simd
9968     for (int i = 0; i < 10; ++i)
9969       ;
9970   }
9971 #pragma omp sections
9972   {
9973 #pragma omp parallel sections
9974     {
9975       bar();
9976     }
9977   }
9978 #pragma omp sections
9979   {
9980 #pragma omp task
9981     {
9982       bar();
9983     }
9984   }
9985 #pragma omp sections
9986   {
9987 #pragma omp taskyield
9988   }
9989 #pragma omp sections
9990   {
9991 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
9992     bar();
9993   }
9994 #pragma omp sections
9995   {
9996 #pragma omp taskwait
9997   }
9998 #pragma omp sections
9999   {
10000 #pragma omp flush
10001   }
10002 #pragma omp sections
10003   {
10004 #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?}}
10005     bar();
10006   }
10007 #pragma omp sections
10008   {
10009 #pragma omp atomic
10010     ++a;
10011   }
10012 #pragma omp sections
10013   {
10014 #pragma omp target
10015     ++a;
10016   }
10017 #pragma omp sections
10018   {
10019 #pragma omp target parallel
10020     ++a;
10021   }
10022 #pragma omp sections
10023   {
10024 #pragma omp target parallel for
10025     for (int i = 0; i < 10; ++i)
10026       ;
10027   }
10028 #pragma omp sections
10029   {
10030 #pragma omp target enter data map(to: a)
10031   }
10032 #pragma omp sections
10033   {
10034 #pragma omp target exit data map(from: a)
10035   }
10036 #pragma omp sections
10037   {
10038 #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?}}
10039     ++a;
10040   }
10041 #pragma omp sections
10042   {
10043 #pragma omp taskloop
10044   for (int i = 0; i < 10; ++i)
10045     ++a;
10046   }
10047 #pragma omp sections
10048   {
10049 #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?}}
10050     for (int i = 0; i < 10; ++i)
10051       ;
10052   }
10053 #pragma omp sections
10054   {
10055 #pragma omp target update to(a)
10056   }
10057 #pragma omp sections
10058   {
10059 #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?}}
10060     for (int i = 0; i < 10; ++i)
10061       ;
10062   }
10063 #pragma omp sections
10064   {
10065 #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?}}
10066     for (int i = 0; i < 10; ++i)
10067       ;
10068   }
10069 #pragma omp sections
10070   {
10071 #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?}}
10072     for (int i = 0; i < 10; ++i)
10073       ;
10074   }
10075 #pragma omp sections
10076   {
10077 #pragma omp target simd // OK
10078     for (int i = 0; i < 10; ++i)
10079       ;
10080   }
10081 #pragma omp sections
10082   {
10083 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10084     for (int i = 0; i < 10; ++i)
10085       ;
10086   }
10087 #pragma omp sections
10088   {
10089 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10090     for (int i = 0; i < 10; ++i)
10091       ;
10092   }
10093 #pragma omp sections
10094   {
10095 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10096     for (int i = 0; i < 10; ++i)
10097       ;
10098   }
10099 #pragma omp sections
10100   {
10101 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10102     for (int i = 0; i < 10; ++i)
10103       ;
10104   }
10105 #pragma omp sections
10106   {
10107 #pragma omp target teams // OK
10108     a++;
10109   }
10110 #pragma omp sections
10111   {
10112 #pragma omp target teams distribute // OK
10113     for (int i = 0; i < 10; ++i)
10114       ;
10115   }
10116 #pragma omp sections
10117   {
10118 #pragma omp target teams distribute parallel for // OK
10119     for (int i = 0; i < 10; ++i)
10120       ;
10121   }
10122 #pragma omp sections
10123   {
10124 #pragma omp target teams distribute parallel for simd // OK
10125     for (int i = 0; i < 10; ++i)
10126       ;
10127   }
10128 #pragma omp sections
10129   {
10130 #pragma omp target teams distribute simd // OK
10131     for (int i = 0; i < 10; ++i)
10132       ;
10133   }
10134 
10135 // SECTION DIRECTIVE
10136 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
10137   {
10138     bar();
10139   }
10140 #pragma omp sections
10141   {
10142 #pragma omp section
10143     {
10144 #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?}}
10145       for (int i = 0; i < 10; ++i)
10146         ;
10147     }
10148   }
10149 #pragma omp sections
10150   {
10151 #pragma omp section
10152     {
10153 #pragma omp simd
10154       for (int i = 0; i < 10; ++i)
10155         ;
10156     }
10157   }
10158 #pragma omp sections
10159   {
10160 #pragma omp section
10161     {
10162 #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?}}
10163       for (int i = 0; i < 10; ++i)
10164         ;
10165     }
10166   }
10167 #pragma omp sections
10168   {
10169 #pragma omp section
10170     {
10171 #pragma omp parallel
10172       for (int i = 0; i < 10; ++i)
10173         ;
10174     }
10175   }
10176 #pragma omp sections
10177   {
10178 #pragma omp section
10179     {
10180 #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?}}
10181       {
10182         bar();
10183       }
10184     }
10185   }
10186 #pragma omp sections
10187   {
10188 #pragma omp section
10189     {
10190 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
10191       {
10192         bar();
10193       }
10194     }
10195   }
10196 #pragma omp sections
10197   {
10198 #pragma omp section
10199     {
10200 #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?}}
10201       bar();
10202 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
10203       bar();
10204 #pragma omp critical
10205       bar();
10206     }
10207   }
10208 #pragma omp sections
10209   {
10210 #pragma omp section
10211     {
10212 #pragma omp parallel
10213       {
10214 #pragma omp single // OK
10215         {
10216           bar();
10217         }
10218 #pragma omp for // OK
10219         for (int i = 0; i < 10; ++i)
10220           ;
10221 #pragma omp for simd // OK
10222         for (int i = 0; i < 10; ++i)
10223           ;
10224 #pragma omp sections // OK
10225         {
10226           bar();
10227         }
10228       }
10229     }
10230   }
10231 #pragma omp sections
10232   {
10233 #pragma omp section
10234     {
10235 #pragma omp parallel for
10236       for (int i = 0; i < 10; ++i)
10237         ;
10238     }
10239   }
10240 #pragma omp sections
10241   {
10242 #pragma omp section
10243     {
10244 #pragma omp parallel for simd
10245       for (int i = 0; i < 10; ++i)
10246         ;
10247     }
10248   }
10249 #pragma omp sections
10250   {
10251 #pragma omp section
10252     {
10253 #pragma omp parallel sections
10254       {
10255         bar();
10256       }
10257     }
10258   }
10259 #pragma omp sections
10260   {
10261 #pragma omp section
10262     {
10263 #pragma omp task
10264       {
10265         bar();
10266       }
10267     }
10268   }
10269 #pragma omp sections
10270   {
10271 #pragma omp section
10272     {
10273 #pragma omp taskyield
10274       bar();
10275     }
10276   }
10277 #pragma omp sections
10278   {
10279 #pragma omp section
10280     {
10281 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
10282       bar();
10283     }
10284   }
10285 #pragma omp sections
10286   {
10287 #pragma omp section
10288     {
10289 #pragma omp taskwait
10290       bar();
10291     }
10292   }
10293 #pragma omp sections
10294   {
10295 #pragma omp section
10296     {
10297 #pragma omp flush
10298       bar();
10299     }
10300   }
10301 #pragma omp sections
10302   {
10303 #pragma omp section
10304     {
10305 #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?}}
10306       bar();
10307     }
10308   }
10309 #pragma omp sections
10310   {
10311 #pragma omp section
10312     {
10313 #pragma omp atomic
10314       ++a;
10315     }
10316   }
10317 #pragma omp sections
10318   {
10319 #pragma omp section
10320     {
10321 #pragma omp target
10322       ++a;
10323     }
10324   }
10325 #pragma omp sections
10326   {
10327 #pragma omp section
10328     {
10329 #pragma omp target parallel
10330       ++a;
10331     }
10332   }
10333 #pragma omp sections
10334   {
10335 #pragma omp section
10336     {
10337 #pragma omp target parallel for
10338       for (int i = 0; i < 10; ++i)
10339         ;
10340     }
10341   }
10342 #pragma omp sections
10343   {
10344 #pragma omp section
10345     {
10346 #pragma omp target enter data map(to: a)
10347       ++a;
10348     }
10349   }
10350 #pragma omp sections
10351   {
10352 #pragma omp section
10353     {
10354 #pragma omp target exit data map(from: a)
10355       ++a;
10356     }
10357   }
10358 #pragma omp sections
10359   {
10360 #pragma omp section
10361     {
10362 #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?}}
10363       ++a;
10364     }
10365   }
10366 #pragma omp sections
10367   {
10368 #pragma omp section
10369     {
10370 #pragma omp taskloop
10371   for (int i = 0; i < 10; ++i)
10372       ++a;
10373     }
10374   }
10375 #pragma omp sections
10376   {
10377 #pragma omp section
10378 #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?}}
10379     for (int i = 0; i < 10; ++i)
10380       ;
10381   }
10382 #pragma omp sections
10383   {
10384 #pragma omp section
10385     {
10386 #pragma omp target update to(a)
10387       a++;
10388     }
10389   }
10390 #pragma omp sections
10391   {
10392 #pragma omp section
10393 #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?}}
10394     for (int i = 0; i < 10; ++i)
10395       ;
10396   }
10397 #pragma omp sections
10398   {
10399 #pragma omp section
10400 #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?}}
10401     for (int i = 0; i < 10; ++i)
10402       ;
10403   }
10404 #pragma omp sections
10405   {
10406 #pragma omp section
10407 #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?}}
10408     for (int i = 0; i < 10; ++i)
10409       ;
10410   }
10411 #pragma omp sections
10412   {
10413 #pragma omp section
10414 #pragma omp target simd // OK
10415     for (int i = 0; i < 10; ++i)
10416       ;
10417   }
10418 #pragma omp sections
10419   {
10420 #pragma omp section
10421 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10422     for (int i = 0; i < 10; ++i)
10423       ;
10424   }
10425 #pragma omp sections
10426   {
10427 #pragma omp section
10428 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10429     for (int i = 0; i < 10; ++i)
10430       ;
10431   }
10432 #pragma omp sections
10433   {
10434 #pragma omp section
10435 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10436     for (int i = 0; i < 10; ++i)
10437       ;
10438   }
10439 #pragma omp sections
10440   {
10441 #pragma omp section
10442 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10443     for (int i = 0; i < 10; ++i)
10444       ;
10445   }
10446 #pragma omp sections
10447   {
10448 #pragma omp section
10449 #pragma omp target teams // OK
10450     a++;
10451   }
10452 #pragma omp sections
10453   {
10454 #pragma omp section
10455 #pragma omp target teams distribute // OK
10456     for (int i = 0; i < 10; ++i)
10457       ;
10458   }
10459 #pragma omp sections
10460   {
10461 #pragma omp section
10462 #pragma omp target teams distribute parallel for // OK
10463     for (int i = 0; i < 10; ++i)
10464       ;
10465   }
10466 #pragma omp sections
10467   {
10468 #pragma omp section
10469 #pragma omp target teams distribute parallel for simd // OK
10470     for (int i = 0; i < 10; ++i)
10471       ;
10472   }
10473 #pragma omp sections
10474   {
10475 #pragma omp section
10476 #pragma omp target teams distribute simd // OK
10477     for (int i = 0; i < 10; ++i)
10478       ;
10479   }
10480 
10481 // SINGLE DIRECTIVE
10482 #pragma omp single
10483   {
10484 #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?}}
10485     for (int i = 0; i < 10; ++i)
10486       ;
10487   }
10488 #pragma omp single
10489   {
10490 #pragma omp simd
10491     for (int i = 0; i < 10; ++i)
10492       ;
10493   }
10494 #pragma omp single
10495   {
10496 #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?}}
10497     for (int i = 0; i < 10; ++i)
10498       ;
10499   }
10500 #pragma omp single
10501   {
10502 #pragma omp parallel
10503     for (int i = 0; i < 10; ++i)
10504       ;
10505   }
10506 #pragma omp single
10507   {
10508 #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?}}
10509     {
10510       bar();
10511     }
10512 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
10513     bar();
10514 #pragma omp critical
10515     bar();
10516   }
10517 #pragma omp single
10518   {
10519 #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?}}
10520     {
10521       bar();
10522     }
10523   }
10524 #pragma omp single
10525   {
10526 #pragma omp parallel
10527     {
10528 #pragma omp single // OK
10529       {
10530         bar();
10531       }
10532 #pragma omp for // OK
10533       for (int i = 0; i < 10; ++i)
10534         ;
10535 #pragma omp for simd // OK
10536       for (int i = 0; i < 10; ++i)
10537         ;
10538 #pragma omp sections // OK
10539       {
10540         bar();
10541       }
10542     }
10543   }
10544 #pragma omp single
10545   {
10546 #pragma omp parallel for
10547     for (int i = 0; i < 10; ++i)
10548       ;
10549   }
10550 #pragma omp single
10551   {
10552 #pragma omp parallel for simd
10553     for (int i = 0; i < 10; ++i)
10554       ;
10555   }
10556 #pragma omp single
10557   {
10558 #pragma omp parallel sections
10559     {
10560       bar();
10561     }
10562   }
10563 #pragma omp single
10564   {
10565 #pragma omp task
10566     {
10567       bar();
10568     }
10569   }
10570 #pragma omp single
10571   {
10572 #pragma omp taskyield
10573     bar();
10574   }
10575 #pragma omp single
10576   {
10577 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
10578     bar();
10579   }
10580 #pragma omp single
10581   {
10582 #pragma omp taskwait
10583     bar();
10584   }
10585 #pragma omp single
10586   {
10587 #pragma omp flush
10588     bar();
10589   }
10590 #pragma omp single
10591   {
10592 #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?}}
10593     bar();
10594   }
10595 #pragma omp single
10596   {
10597 #pragma omp atomic
10598     ++a;
10599   }
10600 #pragma omp single
10601   {
10602 #pragma omp target
10603     ++a;
10604   }
10605 #pragma omp single
10606   {
10607 #pragma omp target parallel
10608     ++a;
10609   }
10610 #pragma omp single
10611   {
10612 #pragma omp target parallel for
10613     for (int i = 0; i < 10; ++i)
10614       ;
10615   }
10616 #pragma omp single
10617   {
10618 #pragma omp target enter data map(to: a)
10619     ++a;
10620   }
10621 #pragma omp single
10622   {
10623 #pragma omp target exit data map(from: a)
10624     ++a;
10625   }
10626 #pragma omp single
10627   {
10628 #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?}}
10629     ++a;
10630   }
10631 #pragma omp single
10632   {
10633 #pragma omp taskloop
10634   for (int i = 0; i < 10; ++i)
10635     ++a;
10636   }
10637 #pragma omp single
10638   {
10639 #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?}}
10640     for (int i = 0; i < 10; ++i)
10641       ;
10642   }
10643 #pragma omp single
10644   {
10645 #pragma omp target update to(a)
10646     a++;
10647   }
10648 #pragma omp single
10649   {
10650 #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?}}
10651     for (int i = 0; i < 10; ++i)
10652       ;
10653   }
10654 #pragma omp single
10655   {
10656 #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?}}
10657     for (int i = 0; i < 10; ++i)
10658       ;
10659   }
10660 #pragma omp single
10661   {
10662 #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?}}
10663     for (int i = 0; i < 10; ++i)
10664       ;
10665   }
10666 #pragma omp single
10667   {
10668 #pragma omp target simd // OK
10669     for (int i = 0; i < 10; ++i)
10670       ;
10671   }
10672 #pragma omp single
10673   {
10674 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10675     for (int i = 0; i < 10; ++i)
10676       ;
10677   }
10678 #pragma omp single
10679   {
10680 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10681     for (int i = 0; i < 10; ++i)
10682       ;
10683   }
10684 #pragma omp single
10685   {
10686 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10687     for (int i = 0; i < 10; ++i)
10688       ;
10689   }
10690 #pragma omp single
10691   {
10692 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10693     for (int i = 0; i < 10; ++i)
10694       ;
10695   }
10696 #pragma omp single
10697   {
10698 #pragma omp target teams // oK
10699     a++;
10700   }
10701 #pragma omp single
10702   {
10703 #pragma omp target teams distribute // OK
10704     for (int i = 0; i < 10; ++i)
10705       ;
10706   }
10707 #pragma omp single
10708   {
10709 #pragma omp target teams distribute parallel for // OK
10710     for (int i = 0; i < 10; ++i)
10711       ;
10712   }
10713 #pragma omp single
10714   {
10715 #pragma omp target teams distribute parallel for simd // OK
10716     for (int i = 0; i < 10; ++i)
10717       ;
10718   }
10719 #pragma omp single
10720   {
10721 #pragma omp target teams distribute simd // OK
10722     for (int i = 0; i < 10; ++i)
10723       ;
10724   }
10725 
10726 // MASTER DIRECTIVE
10727 #pragma omp master
10728   {
10729 #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?}}
10730     for (int i = 0; i < 10; ++i)
10731       ;
10732   }
10733 #pragma omp master
10734   {
10735 #pragma omp simd
10736     for (int i = 0; i < 10; ++i)
10737       ;
10738   }
10739 #pragma omp master
10740   {
10741 #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?}}
10742     for (int i = 0; i < 10; ++i)
10743       ;
10744   }
10745 #pragma omp master
10746   {
10747 #pragma omp parallel
10748     for (int i = 0; i < 10; ++i)
10749       ;
10750   }
10751 #pragma omp master
10752   {
10753 #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?}}
10754     {
10755       bar();
10756     }
10757   }
10758 #pragma omp master
10759   {
10760 #pragma omp master // OK, though second 'master' is redundant
10761     {
10762       bar();
10763     }
10764   }
10765 #pragma omp master
10766   {
10767 #pragma omp critical
10768     {
10769       bar();
10770     }
10771   }
10772 #pragma omp master
10773   {
10774 #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?}}
10775     {
10776       bar();
10777     }
10778   }
10779 #pragma omp master
10780   {
10781 #pragma omp parallel
10782     {
10783 #pragma omp master // OK
10784       {
10785         bar();
10786       }
10787 #pragma omp for // OK
10788       for (int i = 0; i < 10; ++i)
10789         ;
10790 #pragma omp for simd // OK
10791       for (int i = 0; i < 10; ++i)
10792         ;
10793 #pragma omp sections // OK
10794       {
10795         bar();
10796       }
10797     }
10798   }
10799 #pragma omp master
10800   {
10801 #pragma omp parallel for
10802     for (int i = 0; i < 10; ++i)
10803       ;
10804   }
10805 #pragma omp master
10806   {
10807 #pragma omp parallel for simd
10808     for (int i = 0; i < 10; ++i)
10809       ;
10810   }
10811 #pragma omp master
10812   {
10813 #pragma omp parallel sections
10814     {
10815       bar();
10816     }
10817   }
10818 #pragma omp master
10819   {
10820 #pragma omp task
10821     {
10822       bar();
10823     }
10824   }
10825 #pragma omp master
10826   {
10827 #pragma omp taskyield
10828     bar();
10829   }
10830 #pragma omp master
10831   {
10832 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
10833     bar();
10834   }
10835 #pragma omp master
10836   {
10837 #pragma omp taskwait
10838     bar();
10839   }
10840 #pragma omp master
10841   {
10842 #pragma omp flush
10843     bar();
10844   }
10845 #pragma omp master
10846   {
10847 #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?}}
10848     bar();
10849   }
10850 #pragma omp master
10851   {
10852 #pragma omp atomic
10853     ++a;
10854   }
10855 #pragma omp master
10856   {
10857 #pragma omp target
10858     ++a;
10859   }
10860 #pragma omp master
10861   {
10862 #pragma omp target parallel
10863     ++a;
10864   }
10865 #pragma omp master
10866   {
10867 #pragma omp target parallel for
10868     for (int i = 0; i < 10; ++i)
10869       ;
10870   }
10871 #pragma omp master
10872   {
10873 #pragma omp target enter data map(to: a)
10874     ++a;
10875   }
10876 #pragma omp master
10877   {
10878 #pragma omp target exit data map(from: a)
10879     ++a;
10880   }
10881 #pragma omp master
10882   {
10883 #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?}}
10884     ++a;
10885   }
10886 #pragma omp master
10887   {
10888 #pragma omp taskloop
10889   for (int i = 0; i < 10; ++i)
10890     ++a;
10891   }
10892 #pragma omp master
10893   {
10894 #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?}}
10895     for (int i = 0; i < 10; ++i)
10896       ;
10897   }
10898 #pragma omp master
10899   {
10900 #pragma omp target update to(a)
10901     ++a;
10902   }
10903 #pragma omp master
10904   {
10905 #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?}}
10906     for (int i = 0; i < 10; ++i)
10907       ;
10908   }
10909 #pragma omp master
10910   {
10911 #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?}}
10912     for (int i = 0; i < 10; ++i)
10913       ;
10914   }
10915 #pragma omp master
10916   {
10917 #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?}}
10918     for (int i = 0; i < 10; ++i)
10919       ;
10920   }
10921 #pragma omp master
10922   {
10923 #pragma omp target simd // OK
10924     for (int i = 0; i < 10; ++i)
10925       ;
10926   }
10927 #pragma omp master
10928   {
10929 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10930     for (int i = 0; i < 10; ++i)
10931       ;
10932   }
10933 #pragma omp master
10934   {
10935 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10936     for (int i = 0; i < 10; ++i)
10937       ;
10938   }
10939 #pragma omp master
10940   {
10941 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10942     for (int i = 0; i < 10; ++i)
10943       ;
10944   }
10945 #pragma omp master
10946   {
10947 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10948     for (int i = 0; i < 10; ++i)
10949       ;
10950   }
10951 #pragma omp master
10952   {
10953 #pragma omp target teams // OK
10954     a++;
10955   }
10956 #pragma omp master
10957   {
10958 #pragma omp target teams distribute // OK
10959     for (int i = 0; i < 10; ++i)
10960       ;
10961   }
10962 #pragma omp master
10963   {
10964 #pragma omp target teams distribute parallel for // OK
10965     for (int i = 0; i < 10; ++i)
10966       ;
10967   }
10968 #pragma omp master
10969   {
10970 #pragma omp target teams distribute parallel for simd // OK
10971     for (int i = 0; i < 10; ++i)
10972       ;
10973   }
10974 #pragma omp master
10975   {
10976 #pragma omp target teams distribute simd // OK
10977     for (int i = 0; i < 10; ++i)
10978       ;
10979   }
10980 
10981 // CRITICAL DIRECTIVE
10982 #pragma omp critical
10983   {
10984 #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?}}
10985     for (int i = 0; i < 10; ++i)
10986       ;
10987   }
10988 #pragma omp critical
10989   {
10990 #pragma omp simd
10991     for (int i = 0; i < 10; ++i)
10992       ;
10993   }
10994 #pragma omp critical
10995   {
10996 #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?}}
10997     for (int i = 0; i < 10; ++i)
10998       ;
10999   }
11000 #pragma omp critical
11001   {
11002 #pragma omp parallel
11003     for (int i = 0; i < 10; ++i)
11004       ;
11005   }
11006 #pragma omp critical
11007   {
11008 #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?}}
11009     {
11010       bar();
11011     }
11012   }
11013 #pragma omp critical
11014   {
11015 #pragma omp master // OK, though second 'master' is redundant
11016     {
11017       bar();
11018     }
11019   }
11020 #pragma omp critical
11021   {
11022 #pragma omp critical
11023     {
11024       bar();
11025     }
11026   }
11027 #pragma omp critical
11028   {
11029 #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?}}
11030     {
11031       bar();
11032     }
11033   }
11034 #pragma omp critical
11035   {
11036 #pragma omp parallel
11037     {
11038 #pragma omp master // OK
11039       {
11040         bar();
11041       }
11042 #pragma omp for // OK
11043       for (int i = 0; i < 10; ++i)
11044         ;
11045 #pragma omp for simd // OK
11046       for (int i = 0; i < 10; ++i)
11047         ;
11048 #pragma omp sections // OK
11049       {
11050         bar();
11051       }
11052     }
11053   }
11054 #pragma omp critical
11055   {
11056 #pragma omp parallel for
11057     for (int i = 0; i < 10; ++i)
11058       ;
11059   }
11060 #pragma omp critical
11061   {
11062 #pragma omp parallel for simd
11063     for (int i = 0; i < 10; ++i)
11064       ;
11065   }
11066 #pragma omp critical
11067   {
11068 #pragma omp parallel sections
11069     {
11070       bar();
11071     }
11072   }
11073 #pragma omp critical
11074   {
11075 #pragma omp task
11076     {
11077       bar();
11078     }
11079   }
11080 #pragma omp critical
11081   {
11082 #pragma omp taskyield
11083     bar();
11084   }
11085 #pragma omp critical
11086   {
11087 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
11088     bar();
11089   }
11090 #pragma omp critical
11091   {
11092 #pragma omp taskwait
11093     bar();
11094   }
11095 #pragma omp critical(Belka)
11096   {
11097 #pragma omp critical(Strelka)
11098     bar();
11099   }
11100 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
11101   {
11102 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
11103     {
11104 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
11105       {
11106 #pragma omp parallel
11107 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
11108         {
11109           bar();
11110         }
11111       }
11112     }
11113   }
11114 #pragma omp critical
11115   {
11116 #pragma omp flush
11117     bar();
11118   }
11119 #pragma omp critical
11120   {
11121 #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?}}
11122     bar();
11123   }
11124 #pragma omp critical
11125   {
11126 #pragma omp atomic
11127     ++a;
11128   }
11129 #pragma omp critical
11130   {
11131 #pragma omp target
11132     ++a;
11133   }
11134 #pragma omp critical
11135   {
11136 #pragma omp target parallel
11137     ++a;
11138   }
11139 #pragma omp critical
11140   {
11141 #pragma omp target parallel for
11142     for (int i = 0; i < 10; ++i)
11143       ;
11144   }
11145 #pragma omp critical
11146   {
11147 #pragma omp target enter data map(to: a)
11148     ++a;
11149   }
11150 #pragma omp critical
11151   {
11152 #pragma omp target exit data map(from: a)
11153     ++a;
11154   }
11155 #pragma omp critical
11156   {
11157 #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?}}
11158     ++a;
11159   }
11160 #pragma omp critical
11161   {
11162 #pragma omp taskloop
11163   for (int i = 0; i < 10; ++i)
11164     ++a;
11165   }
11166 #pragma omp critical
11167   {
11168 #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?}}
11169     for (int i = 0; i < 10; ++i)
11170       ;
11171   }
11172 #pragma omp critical
11173   {
11174 #pragma omp target update to(a)
11175     a++;
11176   }
11177 #pragma omp critical
11178   {
11179 #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?}}
11180     for (int i = 0; i < 10; ++i)
11181       ;
11182   }
11183 #pragma omp critical
11184   {
11185 #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?}}
11186     for (int i = 0; i < 10; ++i)
11187       ;
11188   }
11189 #pragma omp critical
11190   {
11191 #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?}}
11192     for (int i = 0; i < 10; ++i)
11193       ;
11194   }
11195 #pragma omp critical
11196   {
11197 #pragma omp target simd // OK
11198     for (int i = 0; i < 10; ++i)
11199       ;
11200   }
11201 #pragma omp critical
11202   {
11203 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
11204     for (int i = 0; i < 10; ++i)
11205       ;
11206   }
11207 #pragma omp critical
11208   {
11209 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
11210     for (int i = 0; i < 10; ++i)
11211       ;
11212   }
11213 #pragma omp critical
11214   {
11215 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11216     for (int i = 0; i < 10; ++i)
11217       ;
11218   }
11219 #pragma omp critical
11220   {
11221 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11222     for (int i = 0; i < 10; ++i)
11223       ;
11224   }
11225 #pragma omp critical
11226   {
11227 #pragma omp target teams // OK
11228     a++;
11229   }
11230 #pragma omp critical
11231   {
11232 #pragma omp target teams distribute // OK
11233     for (int i = 0; i < 10; ++i)
11234       ;
11235   }
11236 #pragma omp critical
11237   {
11238 #pragma omp target teams distribute parallel for // OK
11239     for (int i = 0; i < 10; ++i)
11240       ;
11241   }
11242 #pragma omp critical
11243   {
11244 #pragma omp target teams distribute parallel for simd // OK
11245     for (int i = 0; i < 10; ++i)
11246       ;
11247   }
11248 #pragma omp critical
11249   {
11250 #pragma omp target teams distribute simd // OK
11251     for (int i = 0; i < 10; ++i)
11252       ;
11253   }
11254 
11255 // PARALLEL FOR DIRECTIVE
11256 #pragma omp parallel for
11257   for (int i = 0; i < 10; ++i) {
11258 #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?}}
11259     for (int i = 0; i < 10; ++i)
11260       ;
11261   }
11262 #pragma omp parallel for
11263   for (int i = 0; i < 10; ++i) {
11264 #pragma omp simd
11265     for (int i = 0; i < 10; ++i)
11266       ;
11267   }
11268 #pragma omp parallel for
11269   for (int i = 0; i < 10; ++i) {
11270 #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?}}
11271     for (int i = 0; i < 10; ++i)
11272       ;
11273   }
11274 
11275 #pragma omp parallel for
11276   for (int i = 0; i < 10; ++i) {
11277 #pragma omp parallel
11278     for (int i = 0; i < 10; ++i)
11279       ;
11280   }
11281 #pragma omp parallel for
11282   for (int i = 0; i < 10; ++i) {
11283 #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?}}
11284     {
11285       bar();
11286     }
11287   }
11288 #pragma omp parallel for
11289   for (int i = 0; i < 10; ++i) {
11290 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
11291     {
11292       bar();
11293     }
11294   }
11295 #pragma omp parallel for
11296   for (int i = 0; i < 10; ++i) {
11297 #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?}}
11298     {
11299       bar();
11300     }
11301 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11302     {
11303       bar();
11304     }
11305 #pragma omp critical
11306     {
11307       bar();
11308     }
11309   }
11310 #pragma omp parallel for
11311   for (int i = 0; i < 10; ++i) {
11312 #pragma omp parallel
11313     {
11314 #pragma omp single // OK
11315       {
11316         bar();
11317       }
11318 #pragma omp master // OK
11319       {
11320         bar();
11321       }
11322 #pragma omp critical // OK
11323       {
11324         bar();
11325       }
11326 #pragma omp for // OK
11327       for (int i = 0; i < 10; ++i)
11328         ;
11329 #pragma omp for simd // OK
11330       for (int i = 0; i < 10; ++i)
11331         ;
11332 #pragma omp sections // OK
11333       {
11334         bar();
11335       }
11336     }
11337   }
11338 #pragma omp parallel for
11339   for (int i = 0; i < 10; ++i) {
11340 #pragma omp parallel for
11341     for (int i = 0; i < 10; ++i)
11342       ;
11343   }
11344 #pragma omp parallel for
11345   for (int i = 0; i < 10; ++i) {
11346 #pragma omp parallel for simd
11347     for (int i = 0; i < 10; ++i)
11348       ;
11349   }
11350 #pragma omp parallel for
11351   for (int i = 0; i < 10; ++i) {
11352 #pragma omp parallel sections
11353     {
11354       bar();
11355     }
11356   }
11357 #pragma omp parallel for
11358   for (int i = 0; i < 10; ++i) {
11359 #pragma omp task
11360     {
11361       bar();
11362     }
11363   }
11364 #pragma omp parallel for
11365   for (int i = 0; i < 10; ++i) {
11366 #pragma omp taskyield
11367     bar();
11368   }
11369 #pragma omp parallel for
11370   for (int i = 0; i < 10; ++i) {
11371 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11372     bar();
11373   }
11374 #pragma omp parallel for
11375   for (int i = 0; i < 10; ++i) {
11376 #pragma omp taskwait
11377     bar();
11378   }
11379 #pragma omp parallel for
11380   for (int i = 0; i < 10; ++i) {
11381 #pragma omp flush
11382     bar();
11383   }
11384 #pragma omp parallel for
11385   for (int i = 0; i < 10; ++i) {
11386 #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?}}
11387     bar();
11388   }
11389 #pragma omp parallel for ordered
11390   for (int i = 0; i < 10; ++i) {
11391 #pragma omp ordered // OK
11392     bar();
11393   }
11394 #pragma omp parallel for
11395   for (int i = 0; i < 10; ++i) {
11396 #pragma omp atomic
11397     ++a;
11398   }
11399 #pragma omp parallel for
11400   for (int i = 0; i < 10; ++i) {
11401 #pragma omp target
11402     ++a;
11403   }
11404 #pragma omp parallel for
11405   for (int i = 0; i < 10; ++i) {
11406 #pragma omp target parallel
11407     ++a;
11408   }
11409 #pragma omp parallel for
11410   for (int i = 0; i < 10; ++i) {
11411 #pragma omp target parallel for
11412     for (int i = 0; i < 10; ++i)
11413       ;
11414   }
11415 #pragma omp parallel for
11416   for (int i = 0; i < 10; ++i) {
11417 #pragma omp target enter data map(to: a)
11418     ++a;
11419   }
11420 #pragma omp parallel for
11421   for (int i = 0; i < 10; ++i) {
11422 #pragma omp target exit data map(from: a)
11423     ++a;
11424   }
11425 #pragma omp parallel for
11426   for (int i = 0; i < 10; ++i) {
11427 #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?}}
11428     ++a;
11429   }
11430 #pragma omp parallel for
11431   for (int i = 0; i < 10; ++i) {
11432 #pragma omp taskloop
11433   for (int i = 0; i < 10; ++i)
11434     ++a;
11435   }
11436 #pragma omp parallel for
11437   for (int i = 0; i < 10; ++i) {
11438 #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?}}
11439     for (int j = 0; j < 10; ++j)
11440       ;
11441   }
11442 #pragma omp parallel for
11443   for (int i = 0; i < 10; ++i) {
11444 #pragma omp target update to(a)
11445     a++;
11446   }
11447 #pragma omp parallel for
11448   for (int i = 0; i < 10; ++i) {
11449 #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?}}
11450     for (int j = 0; j < 10; ++j)
11451       ;
11452   }
11453 #pragma omp parallel for
11454   for (int i = 0; i < 10; ++i) {
11455 #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?}}
11456     for (int j = 0; j < 10; ++j)
11457       ;
11458   }
11459 #pragma omp parallel for
11460   for (int i = 0; i < 10; ++i) {
11461 #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?}}
11462     for (int j = 0; j < 10; ++j)
11463       ;
11464   }
11465 #pragma omp parallel for
11466   for (int i = 0; i < 10; ++i) {
11467 #pragma omp target simd // OK
11468     for (int j = 0; j < 10; ++j)
11469       ;
11470   }
11471 #pragma omp parallel for
11472   for (int i = 0; i < 10; ++i) {
11473 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
11474     for (int j = 0; j < 10; ++j)
11475       ;
11476   }
11477 #pragma omp parallel for
11478   for (int i = 0; i < 10; ++i) {
11479 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
11480     for (int j = 0; j < 10; ++j)
11481       ;
11482   }
11483 #pragma omp parallel for
11484   for (int i = 0; i < 10; ++i) {
11485 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11486     for (int j = 0; j < 10; ++j)
11487       ;
11488   }
11489 #pragma omp parallel for
11490   for (int i = 0; i < 10; ++i) {
11491 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11492     for (int j = 0; j < 10; ++j)
11493       ;
11494   }
11495 #pragma omp parallel for
11496   for (int i = 0; i < 10; ++i) {
11497 #pragma omp target teams // OK
11498     a++;
11499   }
11500 #pragma omp parallel for
11501   for (int i = 0; i < 10; ++i) {
11502 #pragma omp target teams distribute // OK
11503     for (int j = 0; j < 10; ++j)
11504       ;
11505   }
11506 #pragma omp parallel for
11507   for (int i = 0; i < 10; ++i) {
11508 #pragma omp target teams distribute parallel for // OK
11509     for (int j = 0; j < 10; ++j)
11510       ;
11511   }
11512 #pragma omp parallel for
11513   for (int i = 0; i < 10; ++i) {
11514 #pragma omp target teams distribute parallel for simd // OK
11515     for (int j = 0; j < 10; ++j)
11516       ;
11517   }
11518 #pragma omp parallel for
11519   for (int i = 0; i < 10; ++i) {
11520 #pragma omp target teams distribute simd // OK
11521     for (int j = 0; j < 10; ++j)
11522       ;
11523   }
11524 
11525 // PARALLEL FOR SIMD DIRECTIVE
11526 #pragma omp parallel for simd
11527   for (int i = 0; i < 10; ++i) {
11528 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11529     for (int i = 0; i < 10; ++i)
11530       ;
11531   }
11532 #pragma omp parallel for simd
11533   for (int i = 0; i < 10; ++i) {
11534 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
11535     for (int i = 0; i < 10; ++i)
11536       ;
11537   }
11538 #pragma omp parallel for simd
11539   for (int i = 0; i < 10; ++i) {
11540 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11541     for (int i = 0; i < 10; ++i)
11542       ;
11543   }
11544 #pragma omp parallel for simd
11545   for (int i = 0; i < 10; ++i) {
11546 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11547     for (int i = 0; i < 10; ++i)
11548       ;
11549   }
11550 #pragma omp parallel for simd
11551   for (int i = 0; i < 10; ++i) {
11552 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11553     {
11554       bar();
11555     }
11556   }
11557 #pragma omp parallel for simd
11558   for (int i = 0; i < 10; ++i) {
11559 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11560     {
11561       bar();
11562     }
11563   }
11564 #pragma omp parallel for simd
11565   for (int i = 0; i < 10; ++i) {
11566 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11567     {
11568       bar();
11569     }
11570   }
11571 
11572 #pragma omp parallel for simd
11573   for (int i = 0; i < 10; ++i) {
11574 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11575     {
11576       bar();
11577     }
11578   }
11579 
11580 #pragma omp parallel for simd
11581   for (int i = 0; i < 10; ++i) {
11582 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11583     {
11584       bar();
11585     }
11586   }
11587 
11588 #pragma omp parallel for simd
11589   for (int i = 0; i < 10; ++i) {
11590 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11591     {
11592 #pragma omp single
11593       {
11594         bar();
11595       }
11596 #pragma omp for
11597       for (int i = 0; i < 10; ++i)
11598         ;
11599 #pragma omp for simd
11600       for (int i = 0; i < 10; ++i)
11601         ;
11602 #pragma omp sections
11603       {
11604         bar();
11605       }
11606     }
11607   }
11608 #pragma omp parallel for simd
11609   for (int i = 0; i < 10; ++i) {
11610 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11611     for (int i = 0; i < 10; ++i)
11612       ;
11613   }
11614 #pragma omp parallel for simd
11615   for (int i = 0; i < 10; ++i) {
11616 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
11617     for (int i = 0; i < 10; ++i)
11618       ;
11619   }
11620 #pragma omp parallel for simd
11621   for (int i = 0; i < 10; ++i) {
11622 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11623     {
11624       bar();
11625     }
11626   }
11627 #pragma omp parallel for simd
11628   for (int i = 0; i < 10; ++i) {
11629 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11630     {
11631       bar();
11632     }
11633   }
11634 #pragma omp parallel for simd
11635   for (int i = 0; i < 10; ++i) {
11636 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11637     bar();
11638   }
11639 #pragma omp parallel for simd
11640   for (int i = 0; i < 10; ++i) {
11641 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11642     bar();
11643   }
11644 #pragma omp parallel for simd
11645   for (int i = 0; i < 10; ++i) {
11646 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11647     bar();
11648   }
11649 #pragma omp parallel for simd
11650   for (int i = 0; i < 10; ++i) {
11651 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11652     bar();
11653   }
11654 #pragma omp parallel for simd
11655   for (int i = 0; i < 10; ++i) {
11656 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11657     bar();
11658   }
11659 #pragma omp parallel for simd
11660   for (int i = 0; i < 10; ++i) {
11661 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11662     bar();
11663   }
11664 #pragma omp parallel for simd
11665   for (int i = 0; i < 10; ++i) {
11666 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11667     ++a;
11668   }
11669 #pragma omp parallel for simd
11670   for (int i = 0; i < 10; ++i) {
11671 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11672     ++a;
11673   }
11674 #pragma omp parallel for simd
11675   for (int i = 0; i < 10; ++i) {
11676 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11677     ++a;
11678   }
11679 #pragma omp parallel for simd
11680   for (int i = 0; i < 10; ++i) {
11681 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11682     for (int i = 0; i < 10; ++i)
11683       ;
11684   }
11685 #pragma omp parallel for simd
11686   for (int i = 0; i < 10; ++i) {
11687 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11688     ++a;
11689   }
11690 #pragma omp parallel for simd
11691   for (int i = 0; i < 10; ++i) {
11692 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11693     ++a;
11694   }
11695 #pragma omp parallel for simd
11696   for (int i = 0; i < 10; ++i) {
11697 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11698     ++a;
11699   }
11700 #pragma omp parallel for simd
11701   for (int i = 0; i < 10; ++i) {
11702 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11703   for (int i = 0; i < 10; ++i)
11704     ++a;
11705   }
11706 #pragma omp parallel for simd
11707   for (int i = 0; i < 10; ++i) {
11708 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11709     for (int j = 0; j < 10; ++j)
11710       ;
11711   }
11712 #pragma omp parallel for simd
11713   for (int i = 0; i < 10; ++i) {
11714 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11715     a++;
11716   }
11717 #pragma omp parallel for simd
11718   for (int i = 0; i < 10; ++i) {
11719 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11720     for (int j = 0; j < 10; ++j)
11721       ;
11722   }
11723 #pragma omp parallel for simd
11724   for (int i = 0; i < 10; ++i) {
11725 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11726     for (int j = 0; j < 10; ++j)
11727       ;
11728   }
11729 #pragma omp parallel for simd
11730   for (int i = 0; i < 10; ++i) {
11731 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11732     for (int j = 0; j < 10; ++j)
11733       ;
11734   }
11735 #pragma omp parallel for simd
11736   for (int i = 0; i < 10; ++i) {
11737 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11738     for (int j = 0; j < 10; ++j)
11739       ;
11740   }
11741 #pragma omp parallel for simd
11742   for (int i = 0; i < 10; ++i) {
11743 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11744     for (int j = 0; j < 10; ++j)
11745       ;
11746   }
11747 #pragma omp parallel for simd
11748   for (int i = 0; i < 10; ++i) {
11749 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11750     for (int j = 0; j < 10; ++j)
11751       ;
11752   }
11753 #pragma omp parallel for simd
11754   for (int i = 0; i < 10; ++i) {
11755 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11756     for (int j = 0; j < 10; ++j)
11757       ;
11758   }
11759 #pragma omp parallel for simd
11760   for (int i = 0; i < 10; ++i) {
11761 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11762     for (int j = 0; j < 10; ++j)
11763       ;
11764   }
11765 #pragma omp parallel for simd
11766   for (int i = 0; i < 10; ++i) {
11767 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11768     a++;
11769   }
11770 #pragma omp parallel for simd
11771   for (int i = 0; i < 10; ++i) {
11772 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11773     for (int j = 0; j < 10; ++j)
11774       ;
11775   }
11776 #pragma omp parallel for simd
11777   for (int i = 0; i < 10; ++i) {
11778 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11779     for (int j = 0; j < 10; ++j)
11780       ;
11781   }
11782 #pragma omp parallel for simd
11783   for (int i = 0; i < 10; ++i) {
11784 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11785     for (int j = 0; j < 10; ++j)
11786       ;
11787   }
11788 #pragma omp parallel for simd
11789   for (int i = 0; i < 10; ++i) {
11790 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11791     for (int j = 0; j < 10; ++j)
11792       ;
11793   }
11794 
11795 // PARALLEL SECTIONS DIRECTIVE
11796 #pragma omp parallel sections
11797   {
11798 #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?}}
11799     for (int i = 0; i < 10; ++i)
11800       ;
11801   }
11802 #pragma omp parallel sections
11803   {
11804 #pragma omp simd
11805     for (int i = 0; i < 10; ++i)
11806       ;
11807   }
11808 #pragma omp parallel sections
11809   {
11810 #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?}}
11811     for (int i = 0; i < 10; ++i)
11812       ;
11813   }
11814 #pragma omp parallel sections
11815   {
11816 #pragma omp parallel
11817     for (int i = 0; i < 10; ++i)
11818       ;
11819   }
11820 #pragma omp parallel sections
11821   {
11822 #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?}}
11823     {
11824       bar();
11825     }
11826   }
11827 #pragma omp parallel sections
11828   {
11829 #pragma omp section
11830     {
11831       bar();
11832     }
11833   }
11834 #pragma omp parallel sections
11835   {
11836 #pragma omp section
11837     {
11838 #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?}}
11839       bar();
11840 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
11841       bar();
11842 #pragma omp critical
11843       bar();
11844     }
11845   }
11846 #pragma omp parallel sections
11847   {
11848 #pragma omp parallel
11849     {
11850 #pragma omp single // OK
11851       {
11852         bar();
11853       }
11854 #pragma omp master // OK
11855       {
11856         bar();
11857       }
11858 #pragma omp critical // OK
11859       {
11860         bar();
11861       }
11862 #pragma omp for // OK
11863       for (int i = 0; i < 10; ++i)
11864         ;
11865 #pragma omp for simd // OK
11866       for (int i = 0; i < 10; ++i)
11867         ;
11868 #pragma omp sections // OK
11869       {
11870         bar();
11871       }
11872     }
11873   }
11874 #pragma omp parallel sections
11875   {
11876 #pragma omp parallel for
11877     for (int i = 0; i < 10; ++i)
11878       ;
11879   }
11880 #pragma omp parallel sections
11881   {
11882 #pragma omp parallel for simd
11883     for (int i = 0; i < 10; ++i)
11884       ;
11885   }
11886 #pragma omp parallel sections
11887   {
11888 #pragma omp parallel sections
11889     {
11890       bar();
11891     }
11892   }
11893 #pragma omp parallel sections
11894   {
11895 #pragma omp task
11896     {
11897       bar();
11898     }
11899   }
11900 #pragma omp parallel sections
11901   {
11902 #pragma omp taskyield
11903   }
11904 #pragma omp parallel sections
11905   {
11906 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
11907   }
11908 #pragma omp parallel sections
11909   {
11910 #pragma omp taskwait
11911   }
11912 #pragma omp parallel sections
11913   {
11914 #pragma omp flush
11915   }
11916 #pragma omp parallel sections
11917   {
11918 #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?}}
11919     bar();
11920   }
11921 #pragma omp parallel sections
11922   {
11923 #pragma omp atomic
11924     ++a;
11925   }
11926 #pragma omp parallel sections
11927   {
11928 #pragma omp target
11929     ++a;
11930   }
11931 #pragma omp parallel sections
11932   {
11933 #pragma omp target parallel
11934     ++a;
11935   }
11936 #pragma omp parallel sections
11937   {
11938 #pragma omp target parallel for
11939     for (int i = 0; i < 10; ++i)
11940       ;
11941   }
11942 #pragma omp parallel sections
11943   {
11944 #pragma omp target enter data map(to: a)
11945   }
11946 #pragma omp parallel sections
11947   {
11948 #pragma omp target exit data map(from: a)
11949   }
11950 #pragma omp parallel sections
11951   {
11952 #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?}}
11953     ++a;
11954   }
11955 #pragma omp parallel sections
11956   {
11957 #pragma omp taskloop
11958   for (int i = 0; i < 10; ++i)
11959     ++a;
11960   }
11961 #pragma omp parallel sections
11962   {
11963 #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?}}
11964     for (int i = 0; i < 10; ++i)
11965       ;
11966   }
11967 #pragma omp parallel sections
11968   {
11969 #pragma omp target update to(a)
11970   }
11971 #pragma omp parallel sections
11972   {
11973 #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?}}
11974     for (int i = 0; i < 10; ++i)
11975       ;
11976   }
11977 #pragma omp parallel sections
11978   {
11979 #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?}}
11980     for (int i = 0; i < 10; ++i)
11981       ;
11982   }
11983 #pragma omp parallel sections
11984   {
11985 #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?}}
11986     for (int i = 0; i < 10; ++i)
11987       ;
11988   }
11989 #pragma omp parallel sections
11990   {
11991 #pragma omp target simd // OK
11992     for (int i = 0; i < 10; ++i)
11993       ;
11994   }
11995 #pragma omp parallel sections
11996   {
11997 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
11998     for (int i = 0; i < 10; ++i)
11999       ;
12000   }
12001 #pragma omp parallel sections
12002   {
12003 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
12004     for (int i = 0; i < 10; ++i)
12005       ;
12006   }
12007 #pragma omp parallel sections
12008   {
12009 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12010     for (int i = 0; i < 10; ++i)
12011       ;
12012   }
12013 #pragma omp parallel sections
12014   {
12015 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12016     for (int i = 0; i < 10; ++i)
12017       ;
12018   }
12019 #pragma omp parallel sections
12020   {
12021 #pragma omp target teams // OK
12022     a++;
12023   }
12024 #pragma omp parallel sections
12025   {
12026 #pragma omp target teams distribute // OK
12027     for (int i = 0; i < 10; ++i)
12028       ;
12029   }
12030 #pragma omp parallel sections
12031   {
12032 #pragma omp target teams distribute parallel for // OK
12033     for (int i = 0; i < 10; ++i)
12034       ;
12035   }
12036 #pragma omp parallel sections
12037   {
12038 #pragma omp target teams distribute parallel for simd // OK
12039     for (int i = 0; i < 10; ++i)
12040       ;
12041   }
12042 #pragma omp parallel sections
12043   {
12044 #pragma omp target teams distribute simd // OK
12045     for (int i = 0; i < 10; ++i)
12046       ;
12047   }
12048 
12049 // TASK DIRECTIVE
12050 #pragma omp task
12051 #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?}}
12052   for (int i = 0; i < 10; ++i)
12053     ;
12054 #pragma omp task
12055 #pragma omp simd
12056   for (int i = 0; i < 10; ++i)
12057     ;
12058 #pragma omp task
12059 #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?}}
12060   for (int i = 0; i < 10; ++i)
12061     ;
12062 #pragma omp task
12063 #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?}}
12064   {
12065     bar();
12066   }
12067 #pragma omp task
12068 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
12069   {
12070     bar();
12071   }
12072 #pragma omp task
12073 #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?}}
12074   bar();
12075 #pragma omp task
12076 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
12077   bar();
12078 #pragma omp task
12079 #pragma omp critical
12080   bar();
12081 #pragma omp task
12082 #pragma omp parallel for
12083   for (int i = 0; i < 10; ++i)
12084     ;
12085 #pragma omp task
12086 #pragma omp parallel for simd
12087   for (int i = 0; i < 10; ++i)
12088     ;
12089 #pragma omp task
12090 #pragma omp parallel sections
12091   {
12092     bar();
12093   }
12094 #pragma omp task
12095 #pragma omp task
12096   {
12097     bar();
12098   }
12099 #pragma omp task
12100   {
12101 #pragma omp taskyield
12102     bar();
12103   }
12104 #pragma omp task
12105   {
12106 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
12107     bar();
12108   }
12109 #pragma omp task
12110   {
12111 #pragma omp taskwait
12112     bar();
12113   }
12114 #pragma omp task
12115   {
12116 #pragma omp flush
12117     bar();
12118   }
12119 #pragma omp task
12120   {
12121 #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?}}
12122     bar();
12123   }
12124 #pragma omp task
12125   {
12126 #pragma omp atomic
12127     ++a;
12128   }
12129 #pragma omp task
12130   {
12131 #pragma omp target
12132     ++a;
12133   }
12134 #pragma omp task
12135   {
12136 #pragma omp target parallel
12137     ++a;
12138   }
12139 #pragma omp task
12140 #pragma omp target parallel for
12141   for (int i = 0; i < 10; ++i)
12142     ;
12143 #pragma omp task
12144   {
12145 #pragma omp target enter data map(to: a)
12146     ++a;
12147   }
12148 #pragma omp task
12149   {
12150 #pragma omp target exit data map(from: a)
12151     ++a;
12152   }
12153 #pragma omp task
12154   {
12155 #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?}}
12156     ++a;
12157   }
12158 #pragma omp task
12159   {
12160 #pragma omp taskloop
12161   for (int i = 0; i < 10; ++i)
12162     ++a;
12163   }
12164 #pragma omp task
12165   {
12166 #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?}}
12167     for (int i = 0; i < 10; ++i)
12168       ;
12169   }
12170 #pragma omp task
12171   {
12172 #pragma omp target update to(a)
12173     a++;
12174   }
12175 #pragma omp task
12176   {
12177 #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?}}
12178     for (int i = 0; i < 10; ++i)
12179       ;
12180   }
12181 #pragma omp task
12182   {
12183 #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?}}
12184     for (int i = 0; i < 10; ++i)
12185       ;
12186   }
12187 #pragma omp task
12188   {
12189 #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?}}
12190     for (int i = 0; i < 10; ++i)
12191       ;
12192   }
12193 #pragma omp task
12194   {
12195 #pragma omp target simd // OK
12196     for (int i = 0; i < 10; ++i)
12197       ;
12198   }
12199 #pragma omp task
12200   {
12201 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
12202     for (int i = 0; i < 10; ++i)
12203       ;
12204   }
12205 #pragma omp task
12206   {
12207 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
12208     for (int i = 0; i < 10; ++i)
12209       ;
12210   }
12211 #pragma omp task
12212   {
12213 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12214     for (int i = 0; i < 10; ++i)
12215       ;
12216   }
12217 #pragma omp task
12218   {
12219 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12220     for (int i = 0; i < 10; ++i)
12221       ;
12222   }
12223 #pragma omp task
12224   {
12225 #pragma omp target teams // OK
12226     a++;
12227   }
12228 #pragma omp task
12229   {
12230 #pragma omp target teams distribute // OK
12231     for (int i = 0; i < 10; ++i)
12232       ;
12233   }
12234 #pragma omp task
12235   {
12236 #pragma omp target teams distribute parallel for // OK
12237     for (int i = 0; i < 10; ++i)
12238       ;
12239   }
12240 #pragma omp task
12241   {
12242 #pragma omp target teams distribute parallel for simd // OK
12243     for (int i = 0; i < 10; ++i)
12244       ;
12245   }
12246 #pragma omp task
12247   {
12248 #pragma omp target teams distribute simd // OK
12249     for (int i = 0; i < 10; ++i)
12250       ;
12251   }
12252 
12253 // ATOMIC DIRECTIVE
12254 #pragma omp atomic
12255   // 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}}
12256   // expected-note@+1 {{expected an expression statement}}
12257   {
12258 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12259     for (int i = 0; i < 10; ++i)
12260       ;
12261   }
12262 #pragma omp atomic
12263   // 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}}
12264   // expected-note@+1 {{expected an expression statement}}
12265   {
12266 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12267     for (int i = 0; i < 10; ++i)
12268       ;
12269   }
12270 #pragma omp atomic
12271   // 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}}
12272   // expected-note@+1 {{expected an expression statement}}
12273   {
12274 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12275     for (int i = 0; i < 10; ++i)
12276       ;
12277   }
12278 #pragma omp atomic
12279   // 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}}
12280   // expected-note@+1 {{expected an expression statement}}
12281   {
12282 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12283     for (int i = 0; i < 10; ++i)
12284       ;
12285   }
12286 #pragma omp atomic
12287   // 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}}
12288   // expected-note@+1 {{expected an expression statement}}
12289   {
12290 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12291     {
12292       bar();
12293     }
12294   }
12295 #pragma omp atomic
12296   // 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}}
12297   // expected-note@+1 {{expected an expression statement}}
12298   {
12299 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12300     {
12301       bar();
12302     }
12303   }
12304 #pragma omp atomic
12305   // 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}}
12306   // expected-note@+1 {{expected an expression statement}}
12307   {
12308 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12309     {
12310       bar();
12311     }
12312   }
12313 #pragma omp atomic
12314   // 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}}
12315   // expected-note@+1 {{expected an expression statement}}
12316   {
12317 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12318     {
12319       bar();
12320     }
12321   }
12322 #pragma omp atomic
12323   // 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}}
12324   // expected-note@+1 {{expected an expression statement}}
12325   {
12326 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12327     {
12328       bar();
12329     }
12330   }
12331 #pragma omp atomic
12332   // 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}}
12333   // expected-note@+1 {{expected an expression statement}}
12334   {
12335 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12336     for (int i = 0; i < 10; ++i)
12337       ;
12338   }
12339 #pragma omp atomic
12340   // 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}}
12341   // expected-note@+1 {{expected an expression statement}}
12342   {
12343 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12344     for (int i = 0; i < 10; ++i)
12345       ;
12346   }
12347 #pragma omp atomic
12348   // 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}}
12349   // expected-note@+1 {{expected an expression statement}}
12350   {
12351 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12352     {
12353       bar();
12354     }
12355   }
12356 #pragma omp atomic
12357   // 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}}
12358   // expected-note@+1 {{expected an expression statement}}
12359   {
12360 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12361     {
12362       bar();
12363     }
12364   }
12365 #pragma omp atomic
12366   // 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}}
12367   // expected-note@+1 {{expected an expression statement}}
12368   {
12369 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12370     bar();
12371   }
12372 #pragma omp atomic
12373   // 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}}
12374   // expected-note@+1 {{expected an expression statement}}
12375   {
12376 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12377     bar();
12378   }
12379 #pragma omp atomic
12380   // 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}}
12381   // expected-note@+1 {{expected an expression statement}}
12382   {
12383 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12384     bar();
12385   }
12386 #pragma omp atomic
12387   // 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}}
12388   // expected-note@+1 {{expected an expression statement}}
12389   {
12390 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12391     bar();
12392   }
12393 #pragma omp atomic
12394   // 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}}
12395   // expected-note@+1 {{expected an expression statement}}
12396   {
12397 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12398     bar();
12399   }
12400 #pragma omp atomic
12401   // 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}}
12402   // expected-note@+1 {{expected an expression statement}}
12403   {
12404 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12405     ++a;
12406   }
12407 #pragma omp atomic
12408   // 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}}
12409   // expected-note@+1 {{expected an expression statement}}
12410   {
12411 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12412     ++a;
12413   }
12414 #pragma omp atomic
12415   // 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}}
12416   // expected-note@+1 {{expected an expression statement}}
12417   {
12418 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12419     ++a;
12420   }
12421 #pragma omp atomic
12422   // 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}}
12423   // expected-note@+1 {{expected an expression statement}}
12424   {
12425 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12426     for (int i = 0; i < 10; ++i)
12427       ;
12428   }
12429 #pragma omp atomic
12430   // 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}}
12431   // expected-note@+1 {{expected an expression statement}}
12432   {
12433 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12434     ++a;
12435   }
12436 #pragma omp atomic
12437   // 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}}
12438   // expected-note@+1 {{expected an expression statement}}
12439   {
12440 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12441     ++a;
12442   }
12443 #pragma omp atomic
12444   // 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}}
12445   // expected-note@+1 {{expected an expression statement}}
12446   {
12447 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12448     ++a;
12449   }
12450 #pragma omp atomic
12451   // 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}}
12452   // expected-note@+1 {{expected an expression statement}}
12453   {
12454 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12455   for (int i = 0; i < 10; ++i)
12456     ++a;
12457   }
12458 #pragma omp atomic
12459   // 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}}
12460   // expected-note@+1 {{expected an expression statement}}
12461   {
12462 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12463     for (int i = 0; i < 10; ++i)
12464       ;
12465   }
12466 #pragma omp atomic
12467   // 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}}
12468   // expected-note@+1 {{expected an expression statement}}
12469   {
12470 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12471   }
12472 #pragma omp atomic
12473   // 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}}
12474   // expected-note@+1 {{expected an expression statement}}
12475   {
12476 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12477     for (int i = 0; i < 10; ++i)
12478       ;
12479   }
12480 #pragma omp atomic
12481   // 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}}
12482   // expected-note@+1 {{expected an expression statement}}
12483   {
12484 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12485     for (int i = 0; i < 10; ++i)
12486       ;
12487   }
12488 #pragma omp atomic
12489   // 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}}
12490   // expected-note@+1 {{expected an expression statement}}
12491   {
12492 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12493     for (int i = 0; i < 10; ++i)
12494       ;
12495   }
12496 #pragma omp atomic
12497   // 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}}
12498   // expected-note@+1 {{expected an expression statement}}
12499   {
12500 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12501     for (int i = 0; i < 10; ++i)
12502       ;
12503   }
12504 #pragma omp atomic
12505   // 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}}
12506   // expected-note@+1 {{expected an expression statement}}
12507   {
12508 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12509     for (int i = 0; i < 10; ++i)
12510       ;
12511   }
12512 #pragma omp atomic
12513   // 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}}
12514   // expected-note@+1 {{expected an expression statement}}
12515   {
12516 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12517     for (int i = 0; i < 10; ++i)
12518       ;
12519   }
12520 #pragma omp atomic
12521   // 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}}
12522   // expected-note@+1 {{expected an expression statement}}
12523   {
12524 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12525     for (int i = 0; i < 10; ++i)
12526       ;
12527   }
12528 #pragma omp atomic
12529   // 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}}
12530   // expected-note@+1 {{expected an expression statement}}
12531   {
12532 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12533     for (int i = 0; i < 10; ++i)
12534       ;
12535   }
12536 #pragma omp atomic
12537   // 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}}
12538   // expected-note@+1 {{expected an expression statement}}
12539   {
12540 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12541     a++;
12542   }
12543 #pragma omp atomic
12544   // 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}}
12545   // expected-note@+1 {{expected an expression statement}}
12546   {
12547 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12548     for (int i = 0; i < 10; ++i)
12549       ;
12550   }
12551 #pragma omp atomic
12552   // 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}}
12553   // expected-note@+1 {{expected an expression statement}}
12554   {
12555 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12556     for (int i = 0; i < 10; ++i)
12557       ;
12558   }
12559 #pragma omp atomic
12560   // 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}}
12561   // expected-note@+1 {{expected an expression statement}}
12562   {
12563 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12564     for (int i = 0; i < 10; ++i)
12565       ;
12566   }
12567 #pragma omp atomic
12568   // 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}}
12569   // expected-note@+1 {{expected an expression statement}}
12570   {
12571 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12572     for (int i = 0; i < 10; ++i)
12573       ;
12574   }
12575 
12576 // TARGET DIRECTIVE
12577 #pragma omp target
12578 #pragma omp parallel
12579   bar();
12580 #pragma omp target
12581 #pragma omp for
12582   for (int i = 0; i < 10; ++i)
12583     ;
12584 #pragma omp target
12585 #pragma omp simd
12586   for (int i = 0; i < 10; ++i)
12587     ;
12588 #pragma omp target
12589 #pragma omp for simd
12590   for (int i = 0; i < 10; ++i)
12591     ;
12592 #pragma omp target
12593 #pragma omp sections
12594   {
12595     bar();
12596   }
12597 #pragma omp target
12598 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
12599   {
12600     bar();
12601   }
12602 #pragma omp target
12603 #pragma omp single
12604   bar();
12605 
12606 #pragma omp target
12607 #pragma omp master
12608   {
12609     bar();
12610   }
12611 #pragma omp target
12612 #pragma omp critical
12613   {
12614     bar();
12615   }
12616 #pragma omp target
12617 #pragma omp parallel for
12618   for (int i = 0; i < 10; ++i)
12619     ;
12620 #pragma omp target
12621 #pragma omp parallel for simd
12622   for (int i = 0; i < 10; ++i)
12623     ;
12624 #pragma omp target
12625 #pragma omp parallel sections
12626   {
12627     bar();
12628   }
12629 #pragma omp target
12630 #pragma omp task
12631   {
12632     bar();
12633   }
12634 #pragma omp target
12635   {
12636 #pragma omp taskyield
12637     bar();
12638   }
12639 #pragma omp target
12640   {
12641 #pragma omp barrier
12642     bar();
12643   }
12644 #pragma omp target
12645   {
12646 #pragma omp taskwait
12647     bar();
12648   }
12649 #pragma omp target
12650   {
12651 #pragma omp flush
12652     bar();
12653   }
12654 #pragma omp target
12655   {
12656 #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?}}
12657     bar();
12658   }
12659 #pragma omp target
12660   {
12661 #pragma omp atomic
12662     ++a;
12663   }
12664 #pragma omp target
12665   {
12666 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
12667     ++a;
12668   }
12669 #pragma omp target
12670   {
12671 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
12672     ++a;
12673   }
12674 #pragma omp target
12675 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
12676   for (int i = 0; i < 10; ++i)
12677     ;
12678 #pragma omp target
12679   {
12680 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
12681   }
12682 #pragma omp target
12683   {
12684 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
12685   }
12686 #pragma omp target
12687   {
12688 #pragma omp teams
12689     ++a;
12690   }
12691 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
12692   {
12693     ++a;          // expected-note {{statement outside teams construct here}}
12694 #pragma omp teams // expected-note {{nested teams construct here}}
12695     ++a;
12696   }
12697 #pragma omp target
12698   {
12699 #pragma omp taskloop
12700   for (int i = 0; i < 10; ++i)
12701     ++a;
12702   }
12703 #pragma omp target
12704   {
12705 #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?}}
12706     for (int i = 0; i < 10; ++i)
12707       ;
12708   }
12709 #pragma omp atomic
12710   // 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}}
12711   // expected-note@+1 {{expected an expression statement}}
12712   {
12713 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12714     a++;
12715   }
12716 #pragma omp target
12717   {
12718 #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?}}
12719     for (int i = 0; i < 10; ++i)
12720       ;
12721   }
12722 #pragma omp target
12723   {
12724 #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?}}
12725     for (int i = 0; i < 10; ++i)
12726       ;
12727   }
12728 #pragma omp target
12729   {
12730 #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?}}
12731     for (int i = 0; i < 10; ++i)
12732       ;
12733   }
12734 #pragma omp target
12735   {
12736 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
12737     for (int i = 0; i < 10; ++i)
12738       ;
12739   }
12740 #pragma omp target
12741   {
12742 #pragma omp teams distribute // OK
12743     for (int i = 0; i < 10; ++i)
12744       ;
12745   }
12746 #pragma omp target
12747   {
12748 #pragma omp teams distribute simd // OK
12749     for (int i = 0; i < 10; ++i)
12750       ;
12751   }
12752 #pragma omp target
12753   {
12754 #pragma omp teams distribute parallel for simd // OK
12755     for (int i = 0; i < 10; ++i)
12756       ;
12757   }
12758 #pragma omp target
12759   {
12760 #pragma omp teams distribute parallel for // OK
12761     for (int i = 0; i < 10; ++i)
12762       ;
12763   }
12764 #pragma omp target
12765   {
12766 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
12767     a++;
12768   }
12769 #pragma omp target
12770   {
12771 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
12772     for (int i = 0; i < 10; ++i)
12773       ;
12774   }
12775 #pragma omp target
12776   {
12777 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
12778     for (int i = 0; i < 10; ++i)
12779       ;
12780   }
12781 #pragma omp target
12782   {
12783 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
12784     for (int i = 0; i < 10; ++i)
12785       ;
12786   }
12787 #pragma omp target
12788   {
12789 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
12790     for (int i = 0; i < 10; ++i)
12791       ;
12792   }
12793 
12794 // TARGET PARALLEL DIRECTIVE
12795 #pragma omp target parallel
12796 #pragma omp parallel
12797   bar();
12798 #pragma omp target parallel
12799 #pragma omp for
12800   for (int i = 0; i < 10; ++i)
12801     ;
12802 #pragma omp target parallel
12803 #pragma omp simd
12804   for (int i = 0; i < 10; ++i)
12805     ;
12806 #pragma omp target parallel
12807 #pragma omp for simd
12808   for (int i = 0; i < 10; ++i)
12809     ;
12810 #pragma omp target parallel
12811 #pragma omp sections
12812   {
12813     bar();
12814   }
12815 #pragma omp target parallel
12816 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
12817   {
12818     bar();
12819   }
12820 #pragma omp target parallel
12821 #pragma omp single
12822   bar();
12823 
12824 #pragma omp target parallel
12825 #pragma omp master
12826   {
12827     bar();
12828   }
12829 #pragma omp target parallel
12830 #pragma omp critical
12831   {
12832     bar();
12833   }
12834 #pragma omp target parallel
12835 #pragma omp parallel for
12836   for (int i = 0; i < 10; ++i)
12837     ;
12838 #pragma omp target parallel
12839 #pragma omp parallel for simd
12840   for (int i = 0; i < 10; ++i)
12841     ;
12842 #pragma omp target parallel
12843 #pragma omp parallel sections
12844   {
12845     bar();
12846   }
12847 #pragma omp target parallel
12848 #pragma omp task
12849   {
12850     bar();
12851   }
12852 #pragma omp target parallel
12853   {
12854 #pragma omp taskyield
12855     bar();
12856   }
12857 #pragma omp target parallel
12858   {
12859 #pragma omp barrier
12860     bar();
12861   }
12862 #pragma omp target parallel
12863   {
12864 #pragma omp taskwait
12865     bar();
12866   }
12867 #pragma omp target parallel
12868   {
12869 #pragma omp flush
12870     bar();
12871   }
12872 #pragma omp target parallel
12873   {
12874 #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?}}
12875     bar();
12876   }
12877 #pragma omp target parallel
12878   {
12879 #pragma omp atomic
12880     ++a;
12881   }
12882 #pragma omp target parallel
12883   {
12884 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
12885     ++a;
12886   }
12887 #pragma omp target parallel
12888   {
12889 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
12890     ++a;
12891   }
12892 #pragma omp target parallel
12893 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
12894   for (int i = 0; i < 10; ++i)
12895     ;
12896 #pragma omp target parallel
12897   {
12898 #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?}}
12899     ++a;
12900   }
12901 #pragma omp target parallel
12902   {
12903     ++a;
12904 #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?}}
12905     ++a;
12906   }
12907 #pragma omp target parallel
12908   {
12909 #pragma omp taskloop
12910   for (int i = 0; i < 10; ++i)
12911     ++a;
12912   }
12913 #pragma omp target parallel
12914   {
12915 #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?}}
12916     for (int i = 0; i < 10; ++i)
12917       ;
12918   }
12919 #pragma omp target parallel
12920   {
12921 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12922   }
12923 #pragma omp target parallel
12924   {
12925 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12926   }
12927 #pragma omp target parallel
12928   {
12929 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12930   }
12931 #pragma omp target parallel
12932   {
12933 #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?}}
12934     for (int i = 0; i < 10; ++i)
12935       ;
12936   }
12937 #pragma omp target parallel
12938   {
12939 #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?}}
12940     for (int i = 0; i < 10; ++i)
12941       ;
12942   }
12943 #pragma omp target parallel
12944   {
12945 #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?}}
12946     for (int i = 0; i < 10; ++i)
12947       ;
12948   }
12949 #pragma omp target parallel
12950   {
12951 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
12952     for (int i = 0; i < 10; ++i)
12953       ;
12954   }
12955 #pragma omp target parallel
12956   {
12957 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
12958     for (int i = 0; i < 10; ++i)
12959       ;
12960   }
12961 #pragma omp target parallel
12962   {
12963 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
12964     for (int i = 0; i < 10; ++i)
12965       ;
12966   }
12967 #pragma omp target parallel
12968   {
12969 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12970     for (int i = 0; i < 10; ++i)
12971       ;
12972   }
12973 #pragma omp target parallel
12974   {
12975 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12976     for (int i = 0; i < 10; ++i)
12977       ;
12978   }
12979 #pragma omp target parallel
12980   {
12981 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
12982     a++;
12983   }
12984 #pragma omp target parallel
12985   {
12986 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
12987     for (int i = 0; i < 10; ++i)
12988       ;
12989   }
12990 #pragma omp target parallel
12991   {
12992 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
12993     for (int i = 0; i < 10; ++i)
12994       ;
12995   }
12996 #pragma omp target parallel
12997   {
12998 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
12999     for (int i = 0; i < 10; ++i)
13000       ;
13001   }
13002 #pragma omp target parallel
13003   {
13004 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13005     for (int i = 0; i < 10; ++i)
13006       ;
13007   }
13008 
13009 // TARGET PARALLEL FOR DIRECTIVE
13010 #pragma omp target parallel for
13011   for (int i = 0; i < 10; ++i) {
13012 #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?}}
13013     for (int i = 0; i < 10; ++i)
13014       ;
13015   }
13016 #pragma omp target parallel for
13017   for (int i = 0; i < 10; ++i) {
13018 #pragma omp simd
13019     for (int i = 0; i < 10; ++i)
13020       ;
13021   }
13022 #pragma omp target parallel for
13023   for (int i = 0; i < 10; ++i) {
13024 #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?}}
13025     for (int i = 0; i < 10; ++i)
13026       ;
13027   }
13028 #pragma omp target parallel for
13029   for (int i = 0; i < 10; ++i) {
13030 #pragma omp parallel
13031     for (int i = 0; i < 10; ++i)
13032       ;
13033   }
13034 #pragma omp target parallel for
13035   for (int i = 0; i < 10; ++i) {
13036 #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?}}
13037     {
13038       bar();
13039     }
13040   }
13041 #pragma omp target parallel for
13042   for (int i = 0; i < 10; ++i) {
13043 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
13044     {
13045       bar();
13046     }
13047   }
13048 #pragma omp target parallel for
13049   for (int i = 0; i < 10; ++i) {
13050 #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?}}
13051     {
13052       bar();
13053     }
13054   }
13055 
13056 #pragma omp target parallel for
13057   for (int i = 0; i < 10; ++i) {
13058 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13059     {
13060       bar();
13061     }
13062   }
13063 
13064 #pragma omp target parallel for
13065   for (int i = 0; i < 10; ++i) {
13066 #pragma omp critical
13067     {
13068       bar();
13069     }
13070   }
13071 
13072 #pragma omp target parallel for
13073   for (int i = 0; i < 10; ++i) {
13074 #pragma omp parallel
13075     {
13076 #pragma omp single // OK
13077       {
13078         bar();
13079       }
13080 #pragma omp for // OK
13081       for (int i = 0; i < 10; ++i)
13082         ;
13083 #pragma omp for simd // OK
13084       for (int i = 0; i < 10; ++i)
13085         ;
13086 #pragma omp sections // OK
13087       {
13088         bar();
13089       }
13090     }
13091   }
13092 #pragma omp target parallel for
13093   for (int i = 0; i < 10; ++i) {
13094 #pragma omp parallel for
13095     for (int i = 0; i < 10; ++i)
13096       ;
13097   }
13098 #pragma omp target parallel for
13099   for (int i = 0; i < 10; ++i) {
13100 #pragma omp parallel for simd
13101     for (int i = 0; i < 10; ++i)
13102       ;
13103   }
13104 #pragma omp target parallel for
13105   for (int i = 0; i < 10; ++i) {
13106 #pragma omp parallel sections
13107     {
13108       bar();
13109     }
13110   }
13111 #pragma omp target parallel for
13112   for (int i = 0; i < 10; ++i) {
13113 #pragma omp task
13114     {
13115       bar();
13116     }
13117   }
13118 #pragma omp target parallel for
13119   for (int i = 0; i < 10; ++i) {
13120 #pragma omp taskyield
13121     bar();
13122   }
13123 #pragma omp target parallel for
13124   for (int i = 0; i < 10; ++i) {
13125 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13126     bar();
13127   }
13128 #pragma omp target parallel for
13129   for (int i = 0; i < 10; ++i) {
13130 #pragma omp taskwait
13131     bar();
13132   }
13133 #pragma omp target parallel for
13134   for (int i = 0; i < 10; ++i) {
13135 #pragma omp flush
13136     bar();
13137   }
13138 #pragma omp target parallel for
13139   for (int i = 0; i < 10; ++i) {
13140 #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?}}
13141     bar();
13142   }
13143 #pragma omp target parallel for ordered
13144   for (int i = 0; i < 10; ++i) {
13145 #pragma omp ordered // OK
13146     bar();
13147   }
13148 #pragma omp target parallel for
13149   for (int i = 0; i < 10; ++i) {
13150 #pragma omp atomic
13151     ++a;
13152   }
13153 #pragma omp target parallel for
13154   for (int i = 0; i < 10; ++i) {
13155 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
13156     ++a;
13157   }
13158 #pragma omp target parallel for
13159   for (int i = 0; i < 10; ++i) {
13160 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
13161     ++a;
13162   }
13163 #pragma omp target parallel for
13164   for (int i = 0; i < 10; ++i) {
13165 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13166     for (int i = 0; i < 10; ++i)
13167       ;
13168   }
13169 #pragma omp target parallel for
13170   for (int i = 0; i < 10; ++i) {
13171 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13172     ++a;
13173   }
13174 #pragma omp target parallel for
13175   for (int i = 0; i < 10; ++i) {
13176 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13177     ++a;
13178   }
13179 #pragma omp target parallel for
13180   for (int i = 0; i < 10; ++i) {
13181 #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?}}
13182     ++a;
13183   }
13184 #pragma omp target parallel for
13185   for (int i = 0; i < 10; ++i) {
13186 #pragma omp taskloop
13187   for (int i = 0; i < 10; ++i)
13188     ++a;
13189   }
13190 #pragma omp target parallel for
13191   for (int i = 0; i < 10; ++i) {
13192 #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?}}
13193     for (int j = 0; j < 10; ++j)
13194       ;
13195   }
13196 #pragma omp target parallel for
13197   for (int i = 0; i < 10; ++i) {
13198 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13199     a++;
13200   }
13201 #pragma omp target parallel for
13202   for (int i = 0; i < 10; ++i) {
13203 #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?}}
13204     for (int j = 0; j < 10; ++j)
13205       ;
13206   }
13207 #pragma omp target parallel for
13208   for (int i = 0; i < 10; ++i) {
13209 #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?}}
13210     for (int j = 0; j < 10; ++j)
13211       ;
13212   }
13213 #pragma omp target parallel for
13214   for (int i = 0; i < 10; ++i) {
13215 #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?}}
13216     for (int j = 0; j < 10; ++j)
13217       ;
13218   }
13219 #pragma omp target parallel for
13220   for (int i = 0; i < 10; ++i) {
13221 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13222     for (int j = 0; j < 10; ++j)
13223       ;
13224   }
13225 #pragma omp target parallel for
13226   for (int i = 0; i < 10; ++i) {
13227 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
13228     for (int j = 0; j < 10; ++j)
13229       ;
13230   }
13231 #pragma omp target parallel for
13232   for (int i = 0; i < 10; ++i) {
13233 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
13234     for (int j = 0; j < 10; ++j)
13235       ;
13236   }
13237 #pragma omp target parallel for
13238   for (int i = 0; i < 10; ++i) {
13239 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13240     for (int j = 0; j < 10; ++j)
13241       ;
13242   }
13243 #pragma omp target parallel for
13244   for (int i = 0; i < 10; ++i) {
13245 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13246     for (int j = 0; j < 10; ++j)
13247       ;
13248   }
13249 #pragma omp target parallel for
13250   for (int i = 0; i < 10; ++i) {
13251 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
13252     a++;
13253   }
13254 #pragma omp target parallel for
13255   for (int i = 0; i < 10; ++i) {
13256 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
13257     for (int j = 0; j < 10; ++j)
13258       ;
13259   }
13260 #pragma omp target parallel for
13261   for (int i = 0; i < 10; ++i) {
13262 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13263     for (int j = 0; j < 10; ++j)
13264       ;
13265   }
13266 #pragma omp target parallel for
13267   for (int i = 0; i < 10; ++i) {
13268 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13269     for (int j = 0; j < 10; ++j)
13270       ;
13271   }
13272 #pragma omp target parallel for
13273   for (int i = 0; i < 10; ++i) {
13274 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13275     for (int j = 0; j < 10; ++j)
13276       ;
13277   }
13278 
13279 // TEAMS DIRECTIVE
13280 #pragma omp target
13281 #pragma omp teams
13282 #pragma omp parallel
13283   bar();
13284 #pragma omp target
13285 #pragma omp teams
13286 #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?}}
13287   for (int i = 0; i < 10; ++i)
13288     ;
13289 #pragma omp target
13290 #pragma omp teams
13291 #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?}}
13292   for (int i = 0; i < 10; ++i)
13293     ;
13294 #pragma omp target
13295 #pragma omp teams
13296 #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?}}
13297   for (int i = 0; i < 10; ++i)
13298     ;
13299 #pragma omp target
13300 #pragma omp teams
13301 #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?}}
13302   {
13303     bar();
13304   }
13305 #pragma omp target
13306 #pragma omp teams
13307 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
13308   {
13309     bar();
13310   }
13311 #pragma omp target
13312 #pragma omp teams
13313 #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?}}
13314   bar();
13315 
13316 #pragma omp target
13317 #pragma omp teams
13318 #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?}}
13319   {
13320     bar();
13321   }
13322 #pragma omp target
13323 #pragma omp teams
13324 #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?}}
13325   {
13326     bar();
13327   }
13328 #pragma omp target
13329 #pragma omp teams
13330 #pragma omp parallel for
13331   for (int i = 0; i < 10; ++i)
13332     ;
13333 #pragma omp target
13334 #pragma omp teams
13335 #pragma omp parallel for simd
13336   for (int i = 0; i < 10; ++i)
13337     ;
13338 #pragma omp target
13339 #pragma omp teams
13340 #pragma omp parallel sections
13341   {
13342     bar();
13343   }
13344 #pragma omp target
13345 #pragma omp teams
13346 #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?}}
13347   {
13348     bar();
13349   }
13350 #pragma omp target
13351 #pragma omp teams
13352   {
13353 #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?}}
13354     bar();
13355   }
13356 #pragma omp target
13357 #pragma omp teams
13358   {
13359 #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?}}
13360     bar();
13361   }
13362 #pragma omp target
13363 #pragma omp teams
13364   {
13365 #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?}}
13366     bar();
13367   }
13368 #pragma omp target
13369 #pragma omp teams
13370   {
13371 #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?}}
13372     bar();
13373   }
13374 #pragma omp target
13375 #pragma omp teams
13376   {
13377 #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?}}
13378     bar();
13379   }
13380 #pragma omp target
13381 #pragma omp teams
13382   {
13383 #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?}}
13384     ++a;
13385   }
13386 #pragma omp target
13387 #pragma omp teams
13388   {
13389 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13390     ++a;
13391   }
13392 #pragma omp target
13393 #pragma omp teams
13394   {
13395 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13396     ++a;
13397   }
13398 #pragma omp target
13399 #pragma omp teams
13400 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13401   for (int i = 0; i < 10; ++i)
13402     ;
13403 #pragma omp target
13404 #pragma omp teams
13405   {
13406 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13407   }
13408 #pragma omp target
13409 #pragma omp teams
13410   {
13411 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13412   }
13413 #pragma omp target
13414 #pragma omp teams
13415   {
13416 #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?}}
13417     ++a;
13418   }
13419 #pragma omp target
13420 #pragma omp teams
13421   {
13422 #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?}}
13423   for (int i = 0; i < 10; ++i)
13424     ++a;
13425   }
13426 #pragma omp target
13427 #pragma omp teams
13428 #pragma omp distribute
13429   for (int i = 0; i < 10; ++i)
13430     ;
13431 #pragma omp target
13432 #pragma omp teams
13433 #pragma omp distribute
13434   for (int i = 0; i < 10; ++i)
13435     ;
13436 #pragma omp distribute
13437   for (int j = 0; j < 10; ++j)
13438     ;
13439 #pragma omp target
13440 #pragma omp teams
13441   {
13442 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
13443     ++a;
13444   }
13445 #pragma omp target
13446 #pragma omp teams
13447 #pragma omp distribute parallel for
13448   for (int i = 0; i < 10; ++i)
13449     ;
13450 #pragma omp target
13451 #pragma omp teams
13452   {
13453 #pragma omp distribute parallel for
13454   for (int i = 0; i < 10; ++i)
13455     ;
13456 #pragma omp distribute parallel for
13457   for (int j = 0; j < 10; ++j)
13458     ;
13459   }
13460 #pragma omp target
13461 #pragma omp teams
13462   {
13463 #pragma omp distribute parallel for simd
13464   for (int i = 0; i < 10; ++i)
13465     ;
13466 #pragma omp distribute parallel for simd
13467   for (int j = 0; j < 10; ++j)
13468     ;
13469   }
13470 #pragma omp target
13471 #pragma omp teams
13472   {
13473 #pragma omp distribute simd
13474   for (int i = 0; i < 10; ++i)
13475     ;
13476 #pragma omp distribute simd
13477   for (int j = 0; j < 10; ++j)
13478     ;
13479   }
13480 #pragma omp target
13481 #pragma omp teams
13482   {
13483 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13484   for (int i = 0; i < 10; ++i)
13485     ;
13486   }
13487 #pragma omp target
13488 #pragma omp teams
13489   {
13490 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
13491   for (int i = 0; i < 10; ++i)
13492     ;
13493   }
13494 #pragma omp target
13495 #pragma omp teams
13496   {
13497 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
13498   for (int i = 0; i < 10; ++i)
13499     ;
13500   }
13501 #pragma omp target
13502 #pragma omp teams
13503   {
13504 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13505   for (int i = 0; i < 10; ++i)
13506     ;
13507   }
13508 #pragma omp target
13509 #pragma omp teams
13510   {
13511 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13512   for (int i = 0; i < 10; ++i)
13513     ;
13514   }
13515 #pragma omp target
13516 #pragma omp teams
13517   {
13518 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13519     a++;
13520   }
13521 #pragma omp target
13522 #pragma omp teams
13523   {
13524 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13525   for (int i = 0; i < 10; ++i)
13526     ;
13527   }
13528 #pragma omp target
13529 #pragma omp teams
13530   {
13531 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13532   for (int i = 0; i < 10; ++i)
13533     ;
13534   }
13535 #pragma omp target
13536 #pragma omp teams
13537   {
13538 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13539   for (int i = 0; i < 10; ++i)
13540     ;
13541   }
13542 #pragma omp target
13543 #pragma omp teams
13544   {
13545 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13546   for (int i = 0; i < 10; ++i)
13547     ;
13548   }
13549 
13550 // TASKLOOP DIRECTIVE
13551 #pragma omp taskloop
13552   for (int i = 0; i < 10; ++i) {
13553 #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?}}
13554     for (int i = 0; i < 10; ++i)
13555       ;
13556   }
13557 #pragma omp taskloop
13558   for (int i = 0; i < 10; ++i) {
13559 #pragma omp simd
13560     for (int i = 0; i < 10; ++i)
13561       ;
13562   }
13563 #pragma omp taskloop
13564   for (int i = 0; i < 10; ++i) {
13565 #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?}}
13566     for (int i = 0; i < 10; ++i)
13567       ;
13568   }
13569 #pragma omp taskloop
13570   for (int i = 0; i < 10; ++i) {
13571 #pragma omp parallel
13572     for (int i = 0; i < 10; ++i)
13573       ;
13574   }
13575 #pragma omp taskloop
13576   for (int i = 0; i < 10; ++i) {
13577 #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?}}
13578     {
13579       bar();
13580     }
13581   }
13582 #pragma omp taskloop
13583   for (int i = 0; i < 10; ++i) {
13584 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
13585     {
13586       bar();
13587     }
13588   }
13589 #pragma omp taskloop
13590   for (int i = 0; i < 10; ++i) {
13591 #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?}}
13592     {
13593       bar();
13594     }
13595   }
13596 
13597 #pragma omp taskloop
13598   for (int i = 0; i < 10; ++i) {
13599 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
13600     {
13601       bar();
13602     }
13603   }
13604 #pragma omp taskloop
13605   for (int i = 0; i < 10; ++i) {
13606 #pragma omp critical
13607     {
13608       bar();
13609     }
13610   }
13611 #pragma omp taskloop
13612   for (int i = 0; i < 10; ++i) {
13613 #pragma omp parallel
13614     {
13615 #pragma omp single // OK
13616       {
13617         bar();
13618       }
13619 #pragma omp for // OK
13620       for (int i = 0; i < 10; ++i)
13621         ;
13622 #pragma omp sections // OK
13623       {
13624         bar();
13625       }
13626     }
13627   }
13628 #pragma omp taskloop
13629   for (int i = 0; i < 10; ++i) {
13630 #pragma omp parallel for
13631     for (int i = 0; i < 10; ++i)
13632       ;
13633   }
13634 #pragma omp taskloop
13635   for (int i = 0; i < 10; ++i) {
13636 #pragma omp parallel for simd
13637     for (int i = 0; i < 10; ++i)
13638       ;
13639   }
13640 #pragma omp taskloop
13641   for (int i = 0; i < 10; ++i) {
13642 #pragma omp parallel sections
13643     {
13644       bar();
13645     }
13646   }
13647 #pragma omp taskloop
13648   for (int i = 0; i < 10; ++i) {
13649 #pragma omp task
13650     {
13651       bar();
13652     }
13653   }
13654 #pragma omp taskloop
13655   for (int i = 0; i < 10; ++i) {
13656 #pragma omp taskyield
13657     bar();
13658   }
13659 #pragma omp taskloop
13660   for (int i = 0; i < 10; ++i) {
13661 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
13662     bar();
13663   }
13664 #pragma omp taskloop
13665   for (int i = 0; i < 10; ++i) {
13666 #pragma omp taskwait
13667     bar();
13668   }
13669 #pragma omp taskloop
13670   for (int i = 0; i < 10; ++i) {
13671 #pragma omp flush
13672     bar();
13673   }
13674 #pragma omp taskloop
13675   for (int i = 0; i < 10; ++i) {
13676 #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?}}
13677     bar();
13678   }
13679 #pragma omp taskloop
13680   for (int i = 0; i < 10; ++i) {
13681 #pragma omp atomic
13682     ++a;
13683   }
13684 #pragma omp taskloop
13685   for (int i = 0; i < 10; ++i) {
13686 #pragma omp target
13687     ++a;
13688   }
13689 #pragma omp taskloop
13690   for (int i = 0; i < 10; ++i) {
13691 #pragma omp target parallel
13692     ++a;
13693   }
13694 #pragma omp taskloop
13695   for (int i = 0; i < 10; ++i) {
13696 #pragma omp target parallel for
13697     for (int i = 0; i < 10; ++i)
13698       ;
13699   }
13700 #pragma omp taskloop
13701   for (int i = 0; i < 10; ++i) {
13702 #pragma omp target enter data map(to: a)
13703     ++a;
13704   }
13705 #pragma omp taskloop
13706   for (int i = 0; i < 10; ++i) {
13707 #pragma omp target exit data map(from: a)
13708     ++a;
13709   }
13710 #pragma omp taskloop
13711   for (int i = 0; i < 10; ++i) {
13712 #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?}}
13713     ++a;
13714   }
13715 #pragma omp taskloop
13716   for (int i = 0; i < 10; ++i) {
13717 #pragma omp taskloop
13718   for (int i = 0; i < 10; ++i)
13719     ++a;
13720   }
13721 #pragma omp taskloop
13722   for (int i = 0; i < 10; ++i) {
13723 #pragma omp target update to(a)
13724     ++a;
13725   }
13726 #pragma omp taskloop
13727   for (int i = 0; i < 10; ++i) {
13728 #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?}}
13729     for (int i = 0; i < 10; ++i)
13730       ;
13731   }
13732 #pragma omp taskloop
13733   for (int i = 0; i < 10; ++i) {
13734 #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?}}
13735     for (int i = 0; i < 10; ++i)
13736       ;
13737   }
13738 #pragma omp taskloop
13739   for (int i = 0; i < 10; ++i) {
13740 #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?}}
13741     for (int i = 0; i < 10; ++i)
13742       ;
13743   }
13744 #pragma omp taskloop
13745   for (int i = 0; i < 10; ++i) {
13746 #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?}}
13747     for (int i = 0; i < 10; ++i)
13748       ;
13749   }
13750 #pragma omp taskloop
13751   for (int i = 0; i < 10; ++i) {
13752 #pragma omp target simd // OK
13753     for (int i = 0; i < 10; ++i)
13754       ;
13755   }
13756 #pragma omp taskloop
13757   for (int i = 0; i < 10; ++i) {
13758 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
13759     for (int i = 0; i < 10; ++i)
13760       ;
13761   }
13762 #pragma omp taskloop
13763   for (int i = 0; i < 10; ++i) {
13764 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
13765     for (int i = 0; i < 10; ++i)
13766       ;
13767   }
13768 #pragma omp taskloop
13769   for (int i = 0; i < 10; ++i) {
13770 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13771     for (int i = 0; i < 10; ++i)
13772       ;
13773   }
13774 #pragma omp taskloop
13775   for (int i = 0; i < 10; ++i) {
13776 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13777     for (int i = 0; i < 10; ++i)
13778       ;
13779   }
13780 #pragma omp taskloop
13781   for (int i = 0; i < 10; ++i) {
13782 #pragma omp target teams // OK
13783     a++;
13784   }
13785 #pragma omp taskloop
13786   for (int i = 0; i < 10; ++i) {
13787 #pragma omp target teams distribute // OK
13788     for (int i = 0; i < 10; ++i)
13789       ;
13790   }
13791 #pragma omp taskloop
13792   for (int i = 0; i < 10; ++i) {
13793 #pragma omp target teams distribute parallel for // OK
13794     for (int i = 0; i < 10; ++i)
13795       ;
13796   }
13797 #pragma omp taskloop
13798   for (int i = 0; i < 10; ++i) {
13799 #pragma omp target teams distribute parallel for simd // OK
13800     for (int i = 0; i < 10; ++i)
13801       ;
13802   }
13803 #pragma omp taskloop
13804   for (int i = 0; i < 10; ++i) {
13805 #pragma omp target teams distribute simd // OK
13806     for (int i = 0; i < 10; ++i)
13807       ;
13808   }
13809 
13810 // DISTRIBUTE DIRECTIVE
13811 #pragma omp target
13812 #pragma omp teams
13813 #pragma omp distribute
13814   for (int i = 0; i < 10; ++i) {
13815 #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?}}
13816     for (int i = 0; i < 10; ++i)
13817       ;
13818   }
13819 #pragma omp target
13820 #pragma omp teams
13821 #pragma omp distribute
13822   for (int i = 0; i < 10; ++i) {
13823 #pragma omp for
13824     for (int i = 0; i < 10; ++i)
13825       ;
13826   }
13827 #pragma omp target
13828 #pragma omp teams
13829 #pragma omp distribute
13830   for (int i = 0; i < 10; ++i) {
13831 #pragma omp simd
13832     for (int i = 0; i < 10; ++i)
13833       ;
13834   }
13835 #pragma omp target
13836 #pragma omp teams
13837 #pragma omp distribute
13838   for (int i = 0; i < 10; ++i) {
13839 #pragma omp for simd
13840     for (int i = 0; i < 10; ++i)
13841       ;
13842   }
13843 #pragma omp target
13844 #pragma omp teams
13845 #pragma omp distribute
13846   for (int i = 0; i < 10; ++i) {
13847 #pragma omp parallel
13848     for (int i = 0; i < 10; ++i)
13849       ;
13850   }
13851 #pragma omp target
13852 #pragma omp teams
13853 #pragma omp distribute
13854   for (int i = 0; i < 10; ++i) {
13855 #pragma omp sections
13856     {
13857       bar();
13858     }
13859   }
13860 #pragma omp target
13861 #pragma omp teams
13862 #pragma omp distribute
13863   for (int i = 0; i < 10; ++i) {
13864 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
13865     {
13866       bar();
13867     }
13868   }
13869 #pragma omp target
13870 #pragma omp teams
13871 #pragma omp distribute
13872   for (int i = 0; i < 10; ++i) {
13873 #pragma omp single
13874     {
13875       bar();
13876     }
13877   }
13878 #pragma omp target
13879 #pragma omp teams
13880 #pragma omp distribute
13881   for (int i = 0; i < 10; ++i) {
13882 #pragma omp master
13883     {
13884       bar();
13885     }
13886   }
13887 #pragma omp target
13888 #pragma omp teams
13889 #pragma omp distribute
13890   for (int i = 0; i < 10; ++i) {
13891 #pragma omp critical
13892     {
13893       bar();
13894     }
13895   }
13896 #pragma omp target
13897 #pragma omp teams
13898 #pragma omp distribute
13899   for (int i = 0; i < 10; ++i) {
13900 #pragma omp parallel
13901     {
13902 #pragma omp single
13903       {
13904 	bar();
13905       }
13906     }
13907   }
13908 #pragma omp target
13909 #pragma omp teams
13910 #pragma omp distribute
13911   for (int i = 0; i < 10; ++i) {
13912 #pragma omp parallel for
13913     for (int i = 0; i < 10; ++i)
13914       ;
13915   }
13916 #pragma omp target
13917 #pragma omp teams
13918 #pragma omp distribute
13919   for (int i = 0; i < 10; ++i) {
13920 #pragma omp parallel for simd
13921     for (int i = 0; i < 10; ++i)
13922       ;
13923   }
13924 #pragma omp target
13925 #pragma omp teams
13926 #pragma omp distribute
13927   for (int i = 0; i < 10; ++i) {
13928 #pragma omp parallel sections
13929     {
13930       bar();
13931     }
13932   }
13933 #pragma omp target
13934 #pragma omp teams
13935 #pragma omp distribute
13936   for (int i = 0; i < 10; ++i) {
13937 #pragma omp task
13938     {
13939       bar();
13940     }
13941   }
13942 #pragma omp target
13943 #pragma omp teams
13944 #pragma omp distribute
13945   for (int i = 0; i < 10; ++i) {
13946 #pragma omp taskyield
13947     bar();
13948   }
13949 #pragma omp target
13950 #pragma omp teams
13951 #pragma omp distribute
13952   for (int i = 0; i < 10; ++i) {
13953 #pragma omp barrier
13954     bar();
13955   }
13956 #pragma omp target
13957 #pragma omp teams
13958 #pragma omp distribute
13959   for (int i = 0; i < 10; ++i) {
13960 #pragma omp taskwait
13961     bar();
13962   }
13963 #pragma omp target
13964 #pragma omp teams
13965 #pragma omp distribute
13966   for (int i = 0; i < 10; ++i) {
13967 #pragma omp flush
13968     bar();
13969   }
13970 #pragma omp target
13971 #pragma omp teams
13972 #pragma omp distribute
13973   for (int i = 0; i < 10; ++i) {
13974 #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?}}
13975     bar();
13976   }
13977 #pragma omp target
13978 #pragma omp teams
13979 #pragma omp distribute
13980   for (int i = 0; i < 10; ++i) {
13981 #pragma omp atomic
13982     ++a;
13983   }
13984 #pragma omp target
13985 #pragma omp teams
13986 #pragma omp distribute
13987   for (int i = 0; i < 10; ++i) {
13988 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13989     ++a;
13990   }
13991 #pragma omp target
13992 #pragma omp teams
13993 #pragma omp distribute
13994   for (int i = 0; i < 10; ++i) {
13995 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13996     ++a;
13997   }
13998 #pragma omp target
13999 #pragma omp teams
14000 #pragma omp distribute
14001   for (int i = 0; i < 10; ++i) {
14002 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14003     for (int i = 0; i < 10; ++i)
14004       ;
14005   }
14006 #pragma omp target
14007 #pragma omp teams
14008 #pragma omp distribute
14009   for (int i = 0; i < 10; ++i) {
14010 #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?}}
14011     ++a;
14012   }
14013 #pragma omp target
14014 #pragma omp teams
14015 #pragma omp distribute
14016   for (int i = 0; i < 10; ++i) {
14017 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14018     ++a;
14019   }
14020 #pragma omp target
14021 #pragma omp teams
14022 #pragma omp distribute
14023   for (int i = 0; i < 10; ++i) {
14024 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14025     ++a;
14026   }
14027 #pragma omp target
14028 #pragma omp teams
14029 #pragma omp distribute
14030   for (int i = 0; i < 10; ++i) {
14031 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14032     ++a;
14033   }
14034 #pragma omp target
14035 #pragma omp teams
14036 #pragma omp distribute
14037   for (int i = 0; i < 10; ++i) {
14038 #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?}}
14039   for (int i = 0; i < 10; ++i)
14040     ++a;
14041   }
14042 #pragma omp target
14043 #pragma omp teams
14044 #pragma omp distribute
14045   for (int i = 0; i < 10; ++i) {
14046 #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?}}
14047   for (int i = 0; i < 10; ++i)
14048     ++a;
14049   }
14050 #pragma omp target
14051 #pragma omp teams
14052 #pragma omp distribute
14053   for (int i = 0; i < 10; ++i) {
14054 #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?}}
14055   for (int i = 0; i < 10; ++i)
14056     ++a;
14057   }
14058 #pragma omp target
14059 #pragma omp teams
14060 #pragma omp distribute
14061   for (int i = 0; i < 10; ++i) {
14062 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14063   for (int i = 0; i < 10; ++i)
14064     ++a;
14065   }
14066 #pragma omp target
14067 #pragma omp teams
14068 #pragma omp distribute
14069   for (int i = 0; i < 10; ++i) {
14070 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14071   for (int i = 0; i < 10; ++i)
14072     ++a;
14073   }
14074 #pragma omp target
14075 #pragma omp teams
14076 #pragma omp distribute
14077   for (int i = 0; i < 10; ++i) {
14078 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14079   for (int i = 0; i < 10; ++i)
14080     ++a;
14081   }
14082 #pragma omp target
14083 #pragma omp teams
14084 #pragma omp distribute
14085   for (int i = 0; i < 10; ++i) {
14086 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14087   for (int i = 0; i < 10; ++i)
14088     ++a;
14089   }
14090 #pragma omp target
14091 #pragma omp teams
14092 #pragma omp distribute
14093   for (int i = 0; i < 10; ++i) {
14094 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14095   for (int i = 0; i < 10; ++i)
14096     ++a;
14097   }
14098 #pragma omp target
14099 #pragma omp teams
14100 #pragma omp distribute
14101   for (int i = 0; i < 10; ++i) {
14102 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14103   for (int i = 0; i < 10; ++i)
14104     ++a;
14105   }
14106 #pragma omp target
14107 #pragma omp teams
14108 #pragma omp distribute
14109   for (int i = 0; i < 10; ++i) {
14110 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14111   for (int i = 0; i < 10; ++i)
14112     ++a;
14113   }
14114 #pragma omp target
14115 #pragma omp teams
14116 #pragma omp distribute
14117   for (int i = 0; i < 10; ++i) {
14118 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14119   for (int i = 0; i < 10; ++i)
14120     ++a;
14121   }
14122 
14123 // DISTRIBUTE PARALLEL FOR DIRECTIVE
14124 #pragma omp target
14125 #pragma omp teams
14126 #pragma omp distribute parallel for
14127   for (int i = 0; i < 10; ++i) {
14128 #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?}}
14129     for (int i = 0; i < 10; ++i)
14130       ;
14131   }
14132 
14133 #pragma omp target
14134 #pragma omp teams
14135 #pragma omp distribute parallel for
14136   for (int i = 0; i < 10; ++i) {
14137 #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?}}
14138     for (int i = 0; i < 10; ++i)
14139       ;
14140   }
14141 #pragma omp target
14142 #pragma omp teams
14143 #pragma omp distribute parallel for
14144   for (int i = 0; i < 10; ++i) {
14145 #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?}}
14146     for (int i = 0; i < 10; ++i)
14147       ;
14148   }
14149 #pragma omp target
14150 #pragma omp teams
14151 #pragma omp distribute parallel for
14152   for (int i = 0; i < 10; ++i) {
14153 #pragma omp simd
14154     for (int i = 0; i < 10; ++i)
14155       ;
14156   }
14157 #pragma omp target
14158 #pragma omp teams
14159 #pragma omp distribute parallel for
14160   for (int i = 0; i < 10; ++i) {
14161 #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?}}
14162     for (int i = 0; i < 10; ++i)
14163       ;
14164   }
14165 #pragma omp target
14166 #pragma omp teams
14167 #pragma omp distribute parallel for
14168   for (int i = 0; i < 10; ++i) {
14169 #pragma omp parallel
14170     for (int i = 0; i < 10; ++i)
14171       ;
14172   }
14173 #pragma omp target
14174 #pragma omp teams
14175 #pragma omp distribute parallel for
14176   for (int i = 0; i < 10; ++i) {
14177 #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?}}
14178     {
14179       bar();
14180     }
14181   }
14182 #pragma omp target
14183 #pragma omp teams
14184 #pragma omp distribute parallel for
14185   for (int i = 0; i < 10; ++i) {
14186 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
14187     {
14188       bar();
14189     }
14190   }
14191 #pragma omp target
14192 #pragma omp teams
14193 #pragma omp distribute parallel for
14194   for (int i = 0; i < 10; ++i) {
14195 #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?}}
14196     {
14197       bar();
14198     }
14199   }
14200 #pragma omp target
14201 #pragma omp teams
14202 #pragma omp distribute parallel for
14203   for (int i = 0; i < 10; ++i) {
14204 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14205     {
14206       bar();
14207     }
14208   }
14209 #pragma omp target
14210 #pragma omp teams
14211 #pragma omp distribute parallel for
14212   for (int i = 0; i < 10; ++i) {
14213 #pragma omp critical
14214     {
14215       bar();
14216     }
14217   }
14218 #pragma omp target
14219 #pragma omp teams
14220 #pragma omp distribute parallel for
14221   for (int i = 0; i < 10; ++i) {
14222 #pragma omp parallel
14223     {
14224 #pragma omp single
14225       {
14226 	bar();
14227       }
14228     }
14229   }
14230 #pragma omp target
14231 #pragma omp teams
14232 #pragma omp distribute parallel for
14233   for (int i = 0; i < 10; ++i) {
14234 #pragma omp parallel for
14235     for (int i = 0; i < 10; ++i)
14236       ;
14237   }
14238 #pragma omp target
14239 #pragma omp teams
14240 #pragma omp distribute parallel for
14241   for (int i = 0; i < 10; ++i) {
14242 #pragma omp parallel for simd
14243     for (int i = 0; i < 10; ++i)
14244       ;
14245   }
14246 #pragma omp target
14247 #pragma omp teams
14248 #pragma omp distribute parallel for
14249   for (int i = 0; i < 10; ++i) {
14250 #pragma omp parallel sections
14251     {
14252       bar();
14253     }
14254   }
14255 #pragma omp target
14256 #pragma omp teams
14257 #pragma omp distribute parallel for
14258   for (int i = 0; i < 10; ++i) {
14259 #pragma omp task
14260     {
14261       bar();
14262     }
14263   }
14264 #pragma omp target
14265 #pragma omp teams
14266 #pragma omp distribute parallel for
14267   for (int i = 0; i < 10; ++i) {
14268 #pragma omp taskyield
14269     bar();
14270   }
14271 #pragma omp target
14272 #pragma omp teams
14273 #pragma omp distribute parallel for
14274   for (int i = 0; i < 10; ++i) {
14275 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14276     bar();
14277   }
14278 #pragma omp target
14279 #pragma omp teams
14280 #pragma omp distribute parallel for
14281   for (int i = 0; i < 10; ++i) {
14282 #pragma omp taskwait
14283     bar();
14284   }
14285 #pragma omp target
14286 #pragma omp teams
14287 #pragma omp distribute parallel for
14288   for (int i = 0; i < 10; ++i) {
14289 #pragma omp flush
14290     bar();
14291   }
14292 #pragma omp target
14293 #pragma omp teams
14294 #pragma omp distribute parallel for
14295   for (int i = 0; i < 10; ++i) {
14296 #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?}}
14297     bar();
14298   }
14299 #pragma omp target
14300 #pragma omp teams
14301 #pragma omp distribute parallel for
14302   for (int i = 0; i < 10; ++i) {
14303 #pragma omp atomic
14304     ++a;
14305   }
14306 #pragma omp target
14307 #pragma omp teams
14308 #pragma omp distribute parallel for
14309   for (int i = 0; i < 10; ++i) {
14310 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14311     ++a;
14312   }
14313 #pragma omp target
14314 #pragma omp teams
14315 #pragma omp distribute parallel for
14316   for (int i = 0; i < 10; ++i) {
14317 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14318     ++a;
14319   }
14320 #pragma omp target
14321 #pragma omp teams
14322 #pragma omp distribute parallel for
14323   for (int i = 0; i < 10; ++i) {
14324 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14325     for (int i = 0; i < 10; ++i)
14326       ;
14327   }
14328 #pragma omp target
14329 #pragma omp teams
14330 #pragma omp distribute parallel for
14331   for (int i = 0; i < 10; ++i) {
14332 #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?}}
14333     ++a;
14334   }
14335 #pragma omp target
14336 #pragma omp teams
14337 #pragma omp distribute parallel for
14338   for (int i = 0; i < 10; ++i) {
14339 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14340     ++a;
14341   }
14342 #pragma omp target
14343 #pragma omp teams
14344 #pragma omp distribute parallel for
14345   for (int i = 0; i < 10; ++i) {
14346 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14347     ++a;
14348   }
14349 #pragma omp target
14350 #pragma omp teams
14351 #pragma omp distribute parallel for
14352   for (int i = 0; i < 10; ++i) {
14353 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14354     ++a;
14355   }
14356 #pragma omp target
14357 #pragma omp teams
14358 #pragma omp distribute parallel for
14359   for (int i = 0; i < 10; ++i) {
14360 #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?}}
14361   for (int i = 0; i < 10; ++i)
14362     ++a;
14363   }
14364 #pragma omp target
14365 #pragma omp teams
14366 #pragma omp distribute parallel for
14367   for (int i = 0; i < 10; ++i) {
14368 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14369   for (int i = 0; i < 10; ++i)
14370     ++a;
14371   }
14372 #pragma omp target
14373 #pragma omp teams
14374 #pragma omp distribute parallel for
14375   for (int i = 0; i < 10; ++i) {
14376 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
14377   for (int i = 0; i < 10; ++i)
14378     ++a;
14379   }
14380 #pragma omp target
14381 #pragma omp teams
14382 #pragma omp distribute parallel for
14383   for (int i = 0; i < 10; ++i) {
14384 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
14385   for (int i = 0; i < 10; ++i)
14386     ++a;
14387   }
14388 #pragma omp target
14389 #pragma omp teams
14390 #pragma omp distribute parallel for
14391   for (int i = 0; i < 10; ++i) {
14392 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
14393   for (int i = 0; i < 10; ++i)
14394     ++a;
14395   }
14396 #pragma omp target
14397 #pragma omp teams
14398 #pragma omp distribute parallel for
14399   for (int i = 0; i < 10; ++i) {
14400 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
14401   for (int i = 0; i < 10; ++i)
14402     ++a;
14403   }
14404 #pragma omp target
14405 #pragma omp teams
14406 #pragma omp distribute parallel for
14407   for (int i = 0; i < 10; ++i) {
14408 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14409     ++a;
14410   }
14411 #pragma omp target
14412 #pragma omp teams
14413 #pragma omp distribute parallel for
14414   for (int i = 0; i < 10; ++i) {
14415 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14416   for (int i = 0; i < 10; ++i)
14417     ++a;
14418   }
14419 #pragma omp target
14420 #pragma omp teams
14421 #pragma omp distribute parallel for
14422   for (int i = 0; i < 10; ++i) {
14423 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14424   for (int i = 0; i < 10; ++i)
14425     ++a;
14426   }
14427 #pragma omp target
14428 #pragma omp teams
14429 #pragma omp distribute parallel for
14430   for (int i = 0; i < 10; ++i) {
14431 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14432   for (int i = 0; i < 10; ++i)
14433     ++a;
14434   }
14435 #pragma omp target
14436 #pragma omp teams
14437 #pragma omp distribute parallel for
14438   for (int i = 0; i < 10; ++i) {
14439 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14440   for (int i = 0; i < 10; ++i)
14441     ++a;
14442   }
14443 
14444 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
14445 #pragma omp target
14446 #pragma omp teams
14447 #pragma omp distribute parallel for simd
14448   for (int i = 0; i < 10; ++i) {
14449 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14450     for (int i = 0; i < 10; ++i)
14451       ;
14452   }
14453 #pragma omp target
14454 #pragma omp teams
14455 #pragma omp distribute parallel for simd
14456   for (int i = 0; i < 10; ++i) {
14457 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14458     for (int i = 0; i < 10; ++i)
14459       ;
14460   }
14461 #pragma omp target
14462 #pragma omp teams
14463 #pragma omp distribute parallel for simd
14464   for (int i = 0; i < 10; ++i) {
14465 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14466     for (int i = 0; i < 10; ++i)
14467       ;
14468   }
14469 #pragma omp target
14470 #pragma omp teams
14471 #pragma omp distribute parallel for simd
14472   for (int i = 0; i < 10; ++i) {
14473 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
14474     for (int i = 0; i < 10; ++i)
14475       ;
14476   }
14477 #pragma omp target
14478 #pragma omp teams
14479 #pragma omp distribute parallel for simd
14480   for (int i = 0; i < 10; ++i) {
14481 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14482     for (int i = 0; i < 10; ++i)
14483       ;
14484   }
14485 #pragma omp target
14486 #pragma omp teams
14487 #pragma omp distribute parallel for simd
14488   for (int i = 0; i < 10; ++i) {
14489 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14490     for (int i = 0; i < 10; ++i)
14491       ;
14492   }
14493 #pragma omp target
14494 #pragma omp teams
14495 #pragma omp distribute parallel for simd
14496   for (int i = 0; i < 10; ++i) {
14497 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14498     {
14499       bar();
14500     }
14501   }
14502 #pragma omp target
14503 #pragma omp teams
14504 #pragma omp distribute parallel for simd
14505   for (int i = 0; i < 10; ++i) {
14506 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14507     {
14508       bar();
14509     }
14510   }
14511 #pragma omp target
14512 #pragma omp teams
14513 #pragma omp distribute parallel for simd
14514   for (int i = 0; i < 10; ++i) {
14515 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14516     {
14517       bar();
14518     }
14519   }
14520 #pragma omp target
14521 #pragma omp teams
14522 #pragma omp distribute parallel for simd
14523   for (int i = 0; i < 10; ++i) {
14524 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14525     {
14526       bar();
14527     }
14528   }
14529 #pragma omp target
14530 #pragma omp teams
14531 #pragma omp distribute parallel for simd
14532   for (int i = 0; i < 10; ++i) {
14533 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14534     {
14535       bar();
14536     }
14537   }
14538 #pragma omp target
14539 #pragma omp teams
14540 #pragma omp distribute parallel for simd
14541   for (int i = 0; i < 10; ++i) {
14542 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14543     {
14544 #pragma omp single
14545       {
14546 	bar();
14547       }
14548     }
14549   }
14550 #pragma omp target
14551 #pragma omp teams
14552 #pragma omp distribute parallel for simd
14553   for (int i = 0; i < 10; ++i) {
14554 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14555     for (int i = 0; i < 10; ++i)
14556       ;
14557   }
14558 #pragma omp target
14559 #pragma omp teams
14560 #pragma omp distribute parallel for simd
14561   for (int i = 0; i < 10; ++i) {
14562 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14563     for (int i = 0; i < 10; ++i)
14564       ;
14565   }
14566 #pragma omp target
14567 #pragma omp teams
14568 #pragma omp distribute parallel for simd
14569   for (int i = 0; i < 10; ++i) {
14570 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14571     {
14572       bar();
14573     }
14574   }
14575 #pragma omp target
14576 #pragma omp teams
14577 #pragma omp distribute parallel for simd
14578   for (int i = 0; i < 10; ++i) {
14579 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14580     {
14581       bar();
14582     }
14583   }
14584 #pragma omp target
14585 #pragma omp teams
14586 #pragma omp distribute parallel for simd
14587   for (int i = 0; i < 10; ++i) {
14588 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14589     bar();
14590   }
14591 #pragma omp target
14592 #pragma omp teams
14593 #pragma omp distribute parallel for simd
14594   for (int i = 0; i < 10; ++i) {
14595 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14596     bar();
14597   }
14598 #pragma omp target
14599 #pragma omp teams
14600 #pragma omp distribute parallel for simd
14601   for (int i = 0; i < 10; ++i) {
14602 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14603     bar();
14604   }
14605 #pragma omp target
14606 #pragma omp teams
14607 #pragma omp distribute parallel for simd
14608   for (int i = 0; i < 10; ++i) {
14609 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14610     bar();
14611   }
14612 #pragma omp target
14613 #pragma omp teams
14614 #pragma omp distribute parallel for simd
14615   for (int i = 0; i < 10; ++i) {
14616 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14617     bar();
14618   }
14619 #pragma omp target
14620 #pragma omp teams
14621 #pragma omp distribute parallel for simd
14622   for (int i = 0; i < 10; ++i) {
14623 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14624     ++a;
14625   }
14626 #pragma omp target
14627 #pragma omp teams
14628 #pragma omp distribute parallel for simd
14629   for (int i = 0; i < 10; ++i) {
14630 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14631     ++a;
14632   }
14633 #pragma omp target
14634 #pragma omp teams
14635 #pragma omp distribute parallel for simd
14636   for (int i = 0; i < 10; ++i) {
14637 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14638     ++a;
14639   }
14640 #pragma omp target
14641 #pragma omp teams
14642 #pragma omp distribute parallel for simd
14643   for (int i = 0; i < 10; ++i) {
14644 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14645     ++a;
14646   }
14647 #pragma omp target
14648 #pragma omp teams
14649 #pragma omp distribute parallel for simd
14650   for (int i = 0; i < 10; ++i) {
14651 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14652     ++a;
14653   }
14654 #pragma omp target
14655 #pragma omp teams
14656 #pragma omp distribute parallel for simd
14657   for (int i = 0; i < 10; ++i) {
14658 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14659     ++a;
14660   }
14661 #pragma omp target
14662 #pragma omp teams
14663 #pragma omp distribute parallel for simd
14664   for (int i = 0; i < 10; ++i) {
14665 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14666     ++a;
14667   }
14668 #pragma omp target
14669 #pragma omp teams
14670 #pragma omp distribute parallel for simd
14671   for (int i = 0; i < 10; ++i) {
14672 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14673     for (int i = 0; i < 10; ++i)
14674       ;
14675   }
14676 #pragma omp target
14677 #pragma omp teams
14678 #pragma omp distribute parallel for simd
14679   for (int i = 0; i < 10; ++i) {
14680 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14681     for (int i = 0; i < 10; ++i)
14682       ;
14683   }
14684 #pragma omp target
14685 #pragma omp teams
14686 #pragma omp distribute parallel for simd
14687   for (int i = 0; i < 10; ++i) {
14688 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14689     for (int i = 0; i < 10; ++i)
14690       ;
14691   }
14692 #pragma omp target
14693 #pragma omp teams
14694 #pragma omp distribute parallel for simd
14695   for (int i = 0; i < 10; ++i) {
14696 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14697     for (int i = 0; i < 10; ++i)
14698       ;
14699   }
14700 #pragma omp target
14701 #pragma omp teams
14702 #pragma omp distribute parallel for simd
14703   for (int i = 0; i < 10; ++i) {
14704 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14705     for (int i = 0; i < 10; ++i)
14706       ;
14707   }
14708 #pragma omp target
14709 #pragma omp teams
14710 #pragma omp distribute parallel for simd
14711   for (int i = 0; i < 10; ++i) {
14712 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14713     for (int i = 0; i < 10; ++i)
14714       ;
14715   }
14716 #pragma omp target
14717 #pragma omp teams
14718 #pragma omp distribute parallel for simd
14719   for (int i = 0; i < 10; ++i) {
14720 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14721     a++;
14722   }
14723 #pragma omp target
14724 #pragma omp teams
14725 #pragma omp distribute parallel for simd
14726   for (int i = 0; i < 10; ++i) {
14727 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14728     for (int i = 0; i < 10; ++i)
14729       ;
14730   }
14731 #pragma omp target
14732 #pragma omp teams
14733 #pragma omp distribute parallel for simd
14734   for (int i = 0; i < 10; ++i) {
14735 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14736     for (int i = 0; i < 10; ++i)
14737       ;
14738   }
14739 #pragma omp target
14740 #pragma omp teams
14741 #pragma omp distribute parallel for simd
14742   for (int i = 0; i < 10; ++i) {
14743 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14744     for (int i = 0; i < 10; ++i)
14745       ;
14746   }
14747 #pragma omp target
14748 #pragma omp teams
14749 #pragma omp distribute parallel for simd
14750   for (int i = 0; i < 10; ++i) {
14751 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14752     for (int i = 0; i < 10; ++i)
14753       ;
14754   }
14755 
14756 // DISTRIBUTE SIMD DIRECTIVE
14757 #pragma omp target
14758 #pragma omp teams
14759 #pragma omp distribute simd
14760   for (int i = 0; i < 10; ++i) {
14761 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14762     for (int i = 0; i < 10; ++i)
14763       ;
14764   }
14765 #pragma omp target
14766 #pragma omp teams
14767 #pragma omp distribute simd
14768   for (int i = 0; i < 10; ++i) {
14769 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14770     for (int i = 0; i < 10; ++i)
14771       ;
14772   }
14773 #pragma omp target
14774 #pragma omp teams
14775 #pragma omp distribute simd
14776   for (int i = 0; i < 10; ++i) {
14777 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14778     for (int i = 0; i < 10; ++i)
14779       ;
14780   }
14781 #pragma omp target
14782 #pragma omp teams
14783 #pragma omp distribute simd
14784   for (int i = 0; i < 10; ++i) {
14785 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
14786     for (int i = 0; i < 10; ++i)
14787       ;
14788   }
14789 #pragma omp target
14790 #pragma omp teams
14791 #pragma omp distribute simd
14792   for (int i = 0; i < 10; ++i) {
14793 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14794     for (int i = 0; i < 10; ++i)
14795       ;
14796   }
14797 #pragma omp target
14798 #pragma omp teams
14799 #pragma omp distribute simd
14800   for (int i = 0; i < 10; ++i) {
14801 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14802     for (int i = 0; i < 10; ++i)
14803       ;
14804   }
14805 #pragma omp target
14806 #pragma omp teams
14807 #pragma omp distribute simd
14808   for (int i = 0; i < 10; ++i) {
14809 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14810     {
14811       bar();
14812     }
14813   }
14814 #pragma omp target
14815 #pragma omp teams
14816 #pragma omp distribute simd
14817   for (int i = 0; i < 10; ++i) {
14818 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14819     {
14820       bar();
14821     }
14822   }
14823 #pragma omp target
14824 #pragma omp teams
14825 #pragma omp distribute simd
14826   for (int i = 0; i < 10; ++i) {
14827 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14828     {
14829       bar();
14830     }
14831   }
14832 #pragma omp target
14833 #pragma omp teams
14834 #pragma omp distribute simd
14835   for (int i = 0; i < 10; ++i) {
14836 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14837     {
14838       bar();
14839     }
14840   }
14841 #pragma omp target
14842 #pragma omp teams
14843 #pragma omp distribute simd
14844   for (int i = 0; i < 10; ++i) {
14845 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14846     {
14847       bar();
14848     }
14849   }
14850 #pragma omp target
14851 #pragma omp teams
14852 #pragma omp distribute simd
14853   for (int i = 0; i < 10; ++i) {
14854 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14855     {
14856 #pragma omp single
14857       {
14858 	bar();
14859       }
14860     }
14861   }
14862 #pragma omp target
14863 #pragma omp teams
14864 #pragma omp distribute simd
14865   for (int i = 0; i < 10; ++i) {
14866 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14867     for (int i = 0; i < 10; ++i)
14868       ;
14869   }
14870 #pragma omp target
14871 #pragma omp teams
14872 #pragma omp distribute simd
14873   for (int i = 0; i < 10; ++i) {
14874 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14875     for (int i = 0; i < 10; ++i)
14876       ;
14877   }
14878 #pragma omp target
14879 #pragma omp teams
14880 #pragma omp distribute simd
14881   for (int i = 0; i < 10; ++i) {
14882 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14883     {
14884       bar();
14885     }
14886   }
14887 #pragma omp target
14888 #pragma omp teams
14889 #pragma omp distribute simd
14890   for (int i = 0; i < 10; ++i) {
14891 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14892     {
14893       bar();
14894     }
14895   }
14896 #pragma omp target
14897 #pragma omp teams
14898 #pragma omp distribute simd
14899   for (int i = 0; i < 10; ++i) {
14900 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14901     bar();
14902   }
14903 #pragma omp target
14904 #pragma omp teams
14905 #pragma omp distribute simd
14906   for (int i = 0; i < 10; ++i) {
14907 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14908     bar();
14909   }
14910 #pragma omp target
14911 #pragma omp teams
14912 #pragma omp distribute simd
14913   for (int i = 0; i < 10; ++i) {
14914 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14915     bar();
14916   }
14917 #pragma omp target
14918 #pragma omp teams
14919 #pragma omp distribute simd
14920   for (int i = 0; i < 10; ++i) {
14921 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14922     bar();
14923   }
14924 #pragma omp target
14925 #pragma omp teams
14926 #pragma omp distribute simd
14927   for (int i = 0; i < 10; ++i) {
14928 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14929     bar();
14930   }
14931 #pragma omp target
14932 #pragma omp teams
14933 #pragma omp distribute simd
14934   for (int i = 0; i < 10; ++i) {
14935 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14936     ++a;
14937   }
14938 #pragma omp target
14939 #pragma omp teams
14940 #pragma omp distribute simd
14941   for (int i = 0; i < 10; ++i) {
14942 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14943     ++a;
14944   }
14945 #pragma omp target
14946 #pragma omp teams
14947 #pragma omp distribute simd
14948   for (int i = 0; i < 10; ++i) {
14949 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14950     ++a;
14951   }
14952 #pragma omp target
14953 #pragma omp teams
14954 #pragma omp distribute simd
14955   for (int i = 0; i < 10; ++i) {
14956 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14957     ++a;
14958   }
14959 #pragma omp target
14960 #pragma omp teams
14961 #pragma omp distribute simd
14962   for (int i = 0; i < 10; ++i) {
14963 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14964     ++a;
14965   }
14966 #pragma omp target
14967 #pragma omp teams
14968 #pragma omp distribute simd
14969   for (int i = 0; i < 10; ++i) {
14970 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14971     ++a;
14972   }
14973 #pragma omp target
14974 #pragma omp teams
14975 #pragma omp distribute simd
14976   for (int i = 0; i < 10; ++i) {
14977 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14978     ++a;
14979   }
14980 #pragma omp target
14981 #pragma omp teams
14982 #pragma omp distribute simd
14983   for (int i = 0; i < 10; ++i) {
14984 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14985     for (int i = 0; i < 10; ++i)
14986       ;
14987   }
14988 #pragma omp target
14989 #pragma omp teams
14990 #pragma omp distribute simd
14991   for (int i = 0; i < 10; ++i) {
14992 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14993     for (int i = 0; i < 10; ++i)
14994       ;
14995   }
14996 #pragma omp target
14997 #pragma omp teams
14998 #pragma omp distribute simd
14999   for (int i = 0; i < 10; ++i) {
15000 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15001     for (int i = 0; i < 10; ++i)
15002       ;
15003   }
15004 #pragma omp target
15005 #pragma omp teams
15006 #pragma omp distribute simd
15007   for (int i = 0; i < 10; ++i) {
15008 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15009     for (int i = 0; i < 10; ++i)
15010       ;
15011   }
15012 #pragma omp target
15013 #pragma omp teams
15014 #pragma omp distribute simd
15015   for (int i = 0; i < 10; ++i) {
15016 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15017     for (int i = 0; i < 10; ++i)
15018       ;
15019   }
15020 #pragma omp target
15021 #pragma omp teams
15022 #pragma omp distribute simd
15023   for (int i = 0; i < 10; ++i) {
15024 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15025     for (int i = 0; i < 10; ++i)
15026       ;
15027   }
15028 #pragma omp target
15029 #pragma omp teams
15030 #pragma omp distribute simd
15031   for (int i = 0; i < 10; ++i) {
15032 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15033     a++;
15034   }
15035 #pragma omp target
15036 #pragma omp teams
15037 #pragma omp distribute simd
15038   for (int i = 0; i < 10; ++i) {
15039 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15040     for (int i = 0; i < 10; ++i)
15041       ;
15042   }
15043 #pragma omp target
15044 #pragma omp teams
15045 #pragma omp distribute simd
15046   for (int i = 0; i < 10; ++i) {
15047 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15048     for (int i = 0; i < 10; ++i)
15049       ;
15050   }
15051 #pragma omp target
15052 #pragma omp teams
15053 #pragma omp distribute simd
15054   for (int i = 0; i < 10; ++i) {
15055 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15056     for (int i = 0; i < 10; ++i)
15057       ;
15058   }
15059 #pragma omp target
15060 #pragma omp teams
15061 #pragma omp distribute simd
15062   for (int i = 0; i < 10; ++i) {
15063 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15064     for (int i = 0; i < 10; ++i)
15065       ;
15066   }
15067 
15068 // TARGET SIMD DIRECTIVE
15069 #pragma omp target simd
15070   for (int i = 0; i < 10; ++i) {
15071 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15072     for (int i = 0; i < 10; ++i)
15073       ;
15074   }
15075 #pragma omp target simd
15076   for (int i = 0; i < 10; ++i) {
15077 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15078     for (int i = 0; i < 10; ++i)
15079       ;
15080   }
15081 #pragma omp target simd
15082   for (int i = 0; i < 10; ++i) {
15083 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15084     for (int i = 0; i < 10; ++i)
15085       ;
15086   }
15087 #pragma omp target simd
15088   for (int i = 0; i < 10; ++i) {
15089 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15090     for (int i = 0; i < 10; ++i)
15091       ;
15092   }
15093 #pragma omp target simd
15094   for (int i = 0; i < 10; ++i) {
15095 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15096     for (int i = 0; i < 10; ++i)
15097       ;
15098   }
15099 #pragma omp target simd
15100   for (int i = 0; i < 10; ++i) {
15101 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15102     for (int i = 0; i < 10; ++i)
15103       ;
15104   }
15105 #pragma omp target simd
15106   for (int i = 0; i < 10; ++i) {
15107 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15108     {
15109       bar();
15110     }
15111   }
15112 #pragma omp target simd
15113   for (int i = 0; i < 10; ++i) {
15114 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15115     {
15116       bar();
15117     }
15118   }
15119 #pragma omp target simd
15120   for (int i = 0; i < 10; ++i) {
15121 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15122     {
15123       bar();
15124     }
15125   }
15126 #pragma omp target simd
15127   for (int i = 0; i < 10; ++i) {
15128 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15129     {
15130       bar();
15131     }
15132   }
15133 #pragma omp target simd
15134   for (int i = 0; i < 10; ++i) {
15135 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15136     {
15137       bar();
15138     }
15139   }
15140 #pragma omp target simd
15141   for (int i = 0; i < 10; ++i) {
15142 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15143     {
15144 #pragma omp single
15145       {
15146 	bar();
15147       }
15148     }
15149   }
15150 #pragma omp target simd
15151   for (int i = 0; i < 10; ++i) {
15152 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15153     for (int i = 0; i < 10; ++i)
15154       ;
15155   }
15156 #pragma omp target simd
15157   for (int i = 0; i < 10; ++i) {
15158 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15159     for (int i = 0; i < 10; ++i)
15160       ;
15161   }
15162 #pragma omp target simd
15163   for (int i = 0; i < 10; ++i) {
15164 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15165     {
15166       bar();
15167     }
15168   }
15169 #pragma omp target simd
15170   for (int i = 0; i < 10; ++i) {
15171 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15172     {
15173       bar();
15174     }
15175   }
15176 #pragma omp target simd
15177   for (int i = 0; i < 10; ++i) {
15178 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15179     bar();
15180   }
15181 #pragma omp target simd
15182   for (int i = 0; i < 10; ++i) {
15183 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15184     bar();
15185   }
15186 #pragma omp target simd
15187   for (int i = 0; i < 10; ++i) {
15188 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15189     bar();
15190   }
15191 #pragma omp target simd
15192   for (int i = 0; i < 10; ++i) {
15193 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15194     bar();
15195   }
15196 #pragma omp target simd
15197   for (int i = 0; i < 10; ++i) {
15198 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15199     bar();
15200   }
15201 #pragma omp target simd
15202   for (int i = 0; i < 10; ++i) {
15203 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15204     ++a;
15205   }
15206 #pragma omp target simd
15207   for (int i = 0; i < 10; ++i) {
15208 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15209     ++a;
15210   }
15211 #pragma omp target simd
15212   for (int i = 0; i < 10; ++i) {
15213 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15214     ++a;
15215   }
15216 #pragma omp target simd
15217   for (int i = 0; i < 10; ++i) {
15218 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15219     ++a;
15220   }
15221 #pragma omp target simd
15222   for (int i = 0; i < 10; ++i) {
15223 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15224     ++a;
15225   }
15226 #pragma omp target simd
15227   for (int i = 0; i < 10; ++i) {
15228 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15229     ++a;
15230   }
15231 #pragma omp target simd
15232   for (int i = 0; i < 10; ++i) {
15233 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15234     ++a;
15235   }
15236 #pragma omp target simd
15237   for (int i = 0; i < 10; ++i) {
15238 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15239     for (int i = 0; i < 10; ++i)
15240       ;
15241   }
15242 #pragma omp target simd
15243   for (int i = 0; i < 10; ++i) {
15244 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15245     for (int i = 0; i < 10; ++i)
15246       ;
15247   }
15248 #pragma omp target simd
15249   for (int i = 0; i < 10; ++i) {
15250 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15251     for (int i = 0; i < 10; ++i)
15252       ;
15253   }
15254 #pragma omp target simd
15255   for (int i = 0; i < 10; ++i) {
15256 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15257     for (int i = 0; i < 10; ++i)
15258       ;
15259   }
15260 #pragma omp target simd
15261   for (int i = 0; i < 10; ++i) {
15262 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15263     for (int i = 0; i < 10; ++i)
15264       ;
15265   }
15266 #pragma omp target simd
15267   for (int i = 0; i < 10; ++i) {
15268 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15269     for (int i = 0; i < 10; ++i)
15270       ;
15271   }
15272 #pragma omp target simd
15273   for (int i = 0; i < 10; ++i) {
15274 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15275     a++;
15276   }
15277 #pragma omp target simd
15278   for (int i = 0; i < 10; ++i) {
15279 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15280     for (int i = 0; i < 10; ++i)
15281       ;
15282   }
15283 #pragma omp target simd
15284   for (int i = 0; i < 10; ++i) {
15285 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15286     for (int i = 0; i < 10; ++i)
15287       ;
15288   }
15289 #pragma omp target simd
15290   for (int i = 0; i < 10; ++i) {
15291 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15292     for (int i = 0; i < 10; ++i)
15293       ;
15294   }
15295 #pragma omp target simd
15296   for (int i = 0; i < 10; ++i) {
15297 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15298     for (int i = 0; i < 10; ++i)
15299       ;
15300   }
15301 
15302 // TEAMS DISTRIBUTE DIRECTIVE
15303 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15304   for (int i = 0; i < 10; ++i)
15305     ;
15306 #pragma omp target
15307 #pragma omp teams distribute
15308   for (int i = 0; i < 10; ++i) {
15309 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
15310     for (int i = 0; i < 10; ++i)
15311       ;
15312   }
15313 #pragma omp target
15314 #pragma omp teams distribute
15315   for (int i = 0; i < 10; ++i) {
15316 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
15317     for (int i = 0; i < 10; ++i)
15318       ;
15319   }
15320 #pragma omp target
15321 #pragma omp teams distribute
15322   for (int i = 0; i < 10; ++i) {
15323 #pragma omp for // OK
15324     for (int i = 0; i < 10; ++i)
15325       ;
15326   }
15327 #pragma omp target
15328 #pragma omp teams distribute
15329   for (int i = 0; i < 10; ++i) {
15330 #pragma omp simd // OK
15331     for (int i = 0; i < 10; ++i)
15332       ;
15333   }
15334 #pragma omp target
15335 #pragma omp teams distribute
15336   for (int i = 0; i < 10; ++i) {
15337 #pragma omp for simd // OK
15338     for (int i = 0; i < 10; ++i)
15339       ;
15340   }
15341 #pragma omp target
15342 #pragma omp teams distribute
15343   for (int i = 0; i < 10; ++i) {
15344 #pragma omp parallel // OK
15345     for (int i = 0; i < 10; ++i)
15346       ;
15347   }
15348 #pragma omp target
15349 #pragma omp teams distribute
15350   for (int i = 0; i < 10; ++i) {
15351 #pragma omp sections // OK
15352     {
15353       bar();
15354     }
15355   }
15356 #pragma omp target
15357 #pragma omp teams distribute
15358   for (int i = 0; i < 10; ++i) {
15359 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
15360     {
15361       bar();
15362     }
15363   }
15364 #pragma omp target
15365 #pragma omp teams distribute
15366   for (int i = 0; i < 10; ++i) {
15367 #pragma omp single // OK
15368     {
15369       bar();
15370     }
15371   }
15372 #pragma omp target
15373 #pragma omp teams distribute
15374   for (int i = 0; i < 10; ++i) {
15375 #pragma omp master // OK
15376     {
15377       bar();
15378     }
15379   }
15380 #pragma omp target
15381 #pragma omp teams distribute
15382   for (int i = 0; i < 10; ++i) {
15383 #pragma omp critical // OK
15384     {
15385       bar();
15386     }
15387   }
15388 #pragma omp target
15389 #pragma omp teams distribute
15390   for (int i = 0; i < 10; ++i) {
15391 #pragma omp parallel // OK
15392     {
15393 #pragma omp single
15394       {
15395 	bar();
15396       }
15397     }
15398   }
15399 #pragma omp target
15400 #pragma omp teams distribute
15401   for (int i = 0; i < 10; ++i) {
15402 #pragma omp parallel for // OK
15403     for (int i = 0; i < 10; ++i)
15404       ;
15405   }
15406 #pragma omp target
15407 #pragma omp teams distribute
15408   for (int i = 0; i < 10; ++i) {
15409 #pragma omp parallel for simd // OK
15410     for (int i = 0; i < 10; ++i)
15411       ;
15412   }
15413 #pragma omp target
15414 #pragma omp teams distribute
15415   for (int i = 0; i < 10; ++i) {
15416 #pragma omp parallel sections // OK
15417     {
15418       bar();
15419     }
15420   }
15421 #pragma omp target
15422 #pragma omp teams distribute
15423   for (int i = 0; i < 10; ++i) {
15424 #pragma omp task // OK
15425     {
15426       bar();
15427     }
15428   }
15429 #pragma omp target
15430 #pragma omp teams distribute
15431   for (int i = 0; i < 10; ++i) {
15432 #pragma omp taskyield // OK
15433     bar();
15434   }
15435 #pragma omp target
15436 #pragma omp teams distribute
15437   for (int i = 0; i < 10; ++i) {
15438 #pragma omp barrier // OK
15439     bar();
15440   }
15441 #pragma omp target
15442 #pragma omp teams distribute
15443   for (int i = 0; i < 10; ++i) {
15444 #pragma omp taskwait // OK
15445     bar();
15446   }
15447 #pragma omp target
15448 #pragma omp teams distribute
15449   for (int i = 0; i < 10; ++i) {
15450 #pragma omp flush // OK
15451     bar();
15452   }
15453 #pragma omp target
15454 #pragma omp teams distribute
15455   for (int i = 0; i < 10; ++i) {
15456 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
15457     bar();
15458   }
15459 #pragma omp target
15460 #pragma omp teams distribute
15461   for (int i = 0; i < 10; ++i) {
15462 #pragma omp atomic // OK
15463     ++a;
15464   }
15465 #pragma omp target
15466 #pragma omp teams distribute
15467   for (int i = 0; i < 10; ++i) {
15468 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15469     ++a;
15470   }
15471 #pragma omp target
15472 #pragma omp teams distribute
15473   for (int i = 0; i < 10; ++i) {
15474 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
15475     ++a;
15476   }
15477 #pragma omp target
15478 #pragma omp teams distribute
15479   for (int i = 0; i < 10; ++i) {
15480 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15481     for (int i = 0; i < 10; ++i)
15482       ;
15483   }
15484 #pragma omp target
15485 #pragma omp teams distribute
15486   for (int i = 0; i < 10; ++i) {
15487 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15488     ++a;
15489   }
15490 #pragma omp target
15491 #pragma omp teams distribute
15492   for (int i = 0; i < 10; ++i) {
15493 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15494     ++a;
15495   }
15496 #pragma omp target
15497 #pragma omp teams distribute
15498   for (int i = 0; i < 10; ++i) {
15499 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
15500     ++a;
15501   }
15502 #pragma omp target
15503 #pragma omp teams distribute
15504   for (int i = 0; i < 10; ++i) {
15505 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15506     ++a;
15507   }
15508 #pragma omp target
15509 #pragma omp teams distribute
15510   for (int i = 0; i < 10; ++i) {
15511 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
15512     for (int i = 0; i < 10; ++i)
15513       ++a;
15514   }
15515 #pragma omp target
15516 #pragma omp teams distribute
15517   for (int i = 0; i < 10; ++i) {
15518 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15519     for (int i = 0; i < 10; ++i)
15520       ++a;
15521   }
15522 #pragma omp target
15523 #pragma omp teams distribute
15524   for (int i = 0; i < 10; ++i) {
15525 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
15526     for (int i = 0; i < 10; ++i)
15527       ++a;
15528   }
15529 #pragma omp target
15530 #pragma omp teams distribute
15531   for (int i = 0; i < 10; ++i) {
15532 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
15533     for (int i = 0; i < 10; ++i)
15534       ++a;
15535   }
15536 #pragma omp target
15537 #pragma omp teams distribute
15538   for (int i = 0; i < 10; ++i) {
15539 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
15540     for (int i = 0; i < 10; ++i)
15541       ++a;
15542   }
15543 #pragma omp target
15544 #pragma omp teams distribute
15545   for (int i = 0; i < 10; ++i) {
15546 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
15547     for (int i = 0; i < 10; ++i)
15548       ++a;
15549   }
15550 #pragma omp target
15551 #pragma omp teams distribute
15552   for (int i = 0; i < 10; ++i) {
15553 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15554     ++a;
15555   }
15556 #pragma omp target
15557 #pragma omp teams distribute
15558   for (int i = 0; i < 10; ++i) {
15559 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15560     for (int i = 0; i < 10; ++i)
15561       ++a;
15562   }
15563 #pragma omp target
15564 #pragma omp teams distribute
15565   for (int i = 0; i < 10; ++i) {
15566 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15567     for (int i = 0; i < 10; ++i)
15568       ++a;
15569   }
15570 #pragma omp target
15571 #pragma omp teams distribute
15572   for (int i = 0; i < 10; ++i) {
15573 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15574     for (int i = 0; i < 10; ++i)
15575       ++a;
15576   }
15577 #pragma omp target
15578 #pragma omp teams distribute
15579   for (int i = 0; i < 10; ++i) {
15580 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
15581     for (int i = 0; i < 10; ++i)
15582       ++a;
15583   }
15584 
15585 // TEAMS DISTRIBUTE SIMD DIRECTIVE
15586 #pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15587   for (int i = 0; i < 10; ++i)
15588     ;
15589 #pragma omp target
15590 #pragma omp teams distribute simd
15591   for (int i = 0; i < 10; ++i) {
15592 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15593     for (int i = 0; i < 10; ++i)
15594       ;
15595   }
15596 #pragma omp target
15597 #pragma omp teams distribute simd
15598   for (int i = 0; i < 10; ++i) {
15599 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15600     for (int i = 0; i < 10; ++i)
15601       ;
15602   }
15603 #pragma omp target
15604 #pragma omp teams distribute simd
15605   for (int i = 0; i < 10; ++i) {
15606 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15607     for (int i = 0; i < 10; ++i)
15608       ;
15609   }
15610 #pragma omp target
15611 #pragma omp teams distribute simd
15612   for (int i = 0; i < 10; ++i) {
15613 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15614     for (int i = 0; i < 10; ++i)
15615       ;
15616   }
15617 #pragma omp target
15618 #pragma omp teams distribute simd
15619   for (int i = 0; i < 10; ++i) {
15620 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15621     for (int i = 0; i < 10; ++i)
15622       ;
15623   }
15624 #pragma omp target
15625 #pragma omp teams distribute simd
15626   for (int i = 0; i < 10; ++i) {
15627 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15628     for (int i = 0; i < 10; ++i)
15629       ;
15630   }
15631 #pragma omp target
15632 #pragma omp teams distribute simd
15633   for (int i = 0; i < 10; ++i) {
15634 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15635     {
15636       bar();
15637     }
15638   }
15639 #pragma omp target
15640 #pragma omp teams distribute simd
15641   for (int i = 0; i < 10; ++i) {
15642 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15643     {
15644       bar();
15645     }
15646   }
15647 #pragma omp target
15648 #pragma omp teams distribute simd
15649   for (int i = 0; i < 10; ++i) {
15650 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15651     {
15652       bar();
15653     }
15654   }
15655 #pragma omp target
15656 #pragma omp teams distribute simd
15657   for (int i = 0; i < 10; ++i) {
15658 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15659     {
15660       bar();
15661     }
15662   }
15663 #pragma omp target
15664 #pragma omp teams distribute simd
15665   for (int i = 0; i < 10; ++i) {
15666 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15667     {
15668       bar();
15669     }
15670   }
15671 #pragma omp target
15672 #pragma omp teams distribute simd
15673   for (int i = 0; i < 10; ++i) {
15674 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15675     {
15676 #pragma omp single
15677       {
15678 	bar();
15679       }
15680     }
15681   }
15682 #pragma omp target
15683 #pragma omp teams distribute simd
15684   for (int i = 0; i < 10; ++i) {
15685 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15686     for (int i = 0; i < 10; ++i)
15687       ;
15688   }
15689 #pragma omp target
15690 #pragma omp teams distribute simd
15691   for (int i = 0; i < 10; ++i) {
15692 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15693     for (int i = 0; i < 10; ++i)
15694       ;
15695   }
15696 #pragma omp target
15697 #pragma omp teams distribute simd
15698   for (int i = 0; i < 10; ++i) {
15699 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15700     {
15701       bar();
15702     }
15703   }
15704 #pragma omp target
15705 #pragma omp teams distribute simd
15706   for (int i = 0; i < 10; ++i) {
15707 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15708     {
15709       bar();
15710     }
15711   }
15712 #pragma omp target
15713 #pragma omp teams distribute simd
15714   for (int i = 0; i < 10; ++i) {
15715 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15716     bar();
15717   }
15718 #pragma omp target
15719 #pragma omp teams distribute simd
15720   for (int i = 0; i < 10; ++i) {
15721 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15722     bar();
15723   }
15724 #pragma omp target
15725 #pragma omp teams distribute simd
15726   for (int i = 0; i < 10; ++i) {
15727 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15728     bar();
15729   }
15730 #pragma omp target
15731 #pragma omp teams distribute simd
15732   for (int i = 0; i < 10; ++i) {
15733 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15734     bar();
15735   }
15736 #pragma omp target
15737 #pragma omp teams distribute simd
15738   for (int i = 0; i < 10; ++i) {
15739 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15740     bar();
15741   }
15742 #pragma omp target
15743 #pragma omp teams distribute simd
15744   for (int i = 0; i < 10; ++i) {
15745 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15746     ++a;
15747   }
15748 #pragma omp target
15749 #pragma omp teams distribute simd
15750   for (int i = 0; i < 10; ++i) {
15751 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15752     ++a;
15753   }
15754 #pragma omp target
15755 #pragma omp teams distribute simd
15756   for (int i = 0; i < 10; ++i) {
15757 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15758     ++a;
15759   }
15760 #pragma omp target
15761 #pragma omp teams distribute simd
15762   for (int i = 0; i < 10; ++i) {
15763 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15764     for (int i = 0; i < 10; ++i)
15765       ;
15766   }
15767 #pragma omp target
15768 #pragma omp teams distribute simd
15769   for (int i = 0; i < 10; ++i) {
15770 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15771     ++a;
15772   }
15773 #pragma omp target
15774 #pragma omp teams distribute simd
15775   for (int i = 0; i < 10; ++i) {
15776 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15777     ++a;
15778   }
15779 #pragma omp target
15780 #pragma omp teams distribute simd
15781   for (int i = 0; i < 10; ++i) {
15782 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15783     ++a;
15784   }
15785 #pragma omp target
15786 #pragma omp teams distribute simd
15787   for (int i = 0; i < 10; ++i) {
15788 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15789     ++a;
15790   }
15791 #pragma omp target
15792 #pragma omp teams distribute simd
15793   for (int i = 0; i < 10; ++i) {
15794 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15795     for (int i = 0; i < 10; ++i)
15796       ++a;
15797   }
15798 #pragma omp target
15799 #pragma omp teams distribute simd
15800   for (int i = 0; i < 10; ++i) {
15801 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15802     for (int i = 0; i < 10; ++i)
15803       ++a;
15804   }
15805 #pragma omp target
15806 #pragma omp teams distribute simd
15807   for (int i = 0; i < 10; ++i) {
15808 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15809     for (int i = 0; i < 10; ++i)
15810       ++a;
15811   }
15812 #pragma omp target
15813 #pragma omp teams distribute simd
15814   for (int i = 0; i < 10; ++i) {
15815 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15816     for (int i = 0; i < 10; ++i)
15817       ++a;
15818   }
15819 #pragma omp target
15820 #pragma omp teams distribute simd
15821   for (int i = 0; i < 10; ++i) {
15822 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15823     for (int i = 0; i < 10; ++i)
15824       ++a;
15825   }
15826 #pragma omp target
15827 #pragma omp teams distribute simd
15828   for (int i = 0; i < 10; ++i) {
15829 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15830     for (int i = 0; i < 10; ++i)
15831       ++a;
15832   }
15833 #pragma omp target
15834 #pragma omp teams distribute simd
15835   for (int i = 0; i < 10; ++i) {
15836 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15837     ++a;
15838   }
15839 #pragma omp target
15840 #pragma omp teams distribute simd
15841   for (int i = 0; i < 10; ++i) {
15842 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15843     for (int i = 0; i < 10; ++i)
15844       ++a;
15845   }
15846 #pragma omp target
15847 #pragma omp teams distribute simd
15848   for (int i = 0; i < 10; ++i) {
15849 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15850     for (int i = 0; i < 10; ++i)
15851       ++a;
15852   }
15853 #pragma omp target
15854 #pragma omp teams distribute simd
15855   for (int i = 0; i < 10; ++i) {
15856 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15857     for (int i = 0; i < 10; ++i)
15858       ++a;
15859   }
15860 #pragma omp target
15861 #pragma omp teams distribute simd
15862   for (int i = 0; i < 10; ++i) {
15863 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15864     for (int i = 0; i < 10; ++i)
15865       ++a;
15866   }
15867 
15868 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
15869 #pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15870   for (int i = 0; i < 10; ++i)
15871     ;
15872 #pragma omp target
15873 #pragma omp teams distribute parallel for simd
15874   for (int i = 0; i < 10; ++i) {
15875 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15876     for (int i = 0; i < 10; ++i)
15877       ;
15878   }
15879 #pragma omp target
15880 #pragma omp teams distribute parallel for simd
15881   for (int i = 0; i < 10; ++i) {
15882 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15883     for (int i = 0; i < 10; ++i)
15884       ;
15885   }
15886 #pragma omp target
15887 #pragma omp teams distribute parallel for simd
15888   for (int i = 0; i < 10; ++i) {
15889 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15890     for (int i = 0; i < 10; ++i)
15891       ;
15892   }
15893 #pragma omp target
15894 #pragma omp teams distribute parallel for simd
15895   for (int i = 0; i < 10; ++i) {
15896 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15897     for (int i = 0; i < 10; ++i)
15898       ;
15899   }
15900 #pragma omp target
15901 #pragma omp teams distribute parallel for simd
15902   for (int i = 0; i < 10; ++i) {
15903 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15904     for (int i = 0; i < 10; ++i)
15905       ;
15906   }
15907 #pragma omp target
15908 #pragma omp teams distribute parallel for simd
15909   for (int i = 0; i < 10; ++i) {
15910 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15911     for (int i = 0; i < 10; ++i)
15912       ;
15913   }
15914 #pragma omp target
15915 #pragma omp teams distribute parallel for simd
15916   for (int i = 0; i < 10; ++i) {
15917 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15918     {
15919       bar();
15920     }
15921   }
15922 #pragma omp target
15923 #pragma omp teams distribute parallel for simd
15924   for (int i = 0; i < 10; ++i) {
15925 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15926     {
15927       bar();
15928     }
15929   }
15930 #pragma omp target
15931 #pragma omp teams distribute parallel for simd
15932   for (int i = 0; i < 10; ++i) {
15933 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15934     {
15935       bar();
15936     }
15937   }
15938 #pragma omp target
15939 #pragma omp teams distribute parallel for simd
15940   for (int i = 0; i < 10; ++i) {
15941 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15942     {
15943       bar();
15944     }
15945   }
15946 #pragma omp target
15947 #pragma omp teams distribute parallel for simd
15948   for (int i = 0; i < 10; ++i) {
15949 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15950     {
15951       bar();
15952     }
15953   }
15954 #pragma omp target
15955 #pragma omp teams distribute parallel for simd
15956   for (int i = 0; i < 10; ++i) {
15957 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15958     {
15959 #pragma omp single
15960       {
15961 	bar();
15962       }
15963     }
15964   }
15965 #pragma omp target
15966 #pragma omp teams distribute parallel for simd
15967   for (int i = 0; i < 10; ++i) {
15968 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15969     for (int i = 0; i < 10; ++i)
15970       ;
15971   }
15972 #pragma omp target
15973 #pragma omp teams distribute parallel for simd
15974   for (int i = 0; i < 10; ++i) {
15975 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15976     for (int i = 0; i < 10; ++i)
15977       ;
15978   }
15979 #pragma omp target
15980 #pragma omp teams distribute parallel for simd
15981   for (int i = 0; i < 10; ++i) {
15982 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15983     {
15984       bar();
15985     }
15986   }
15987 #pragma omp target
15988 #pragma omp teams distribute parallel for simd
15989   for (int i = 0; i < 10; ++i) {
15990 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15991     {
15992       bar();
15993     }
15994   }
15995 #pragma omp target
15996 #pragma omp teams distribute parallel for simd
15997   for (int i = 0; i < 10; ++i) {
15998 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15999     bar();
16000   }
16001 #pragma omp target
16002 #pragma omp teams distribute parallel for simd
16003   for (int i = 0; i < 10; ++i) {
16004 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16005     bar();
16006   }
16007 #pragma omp target
16008 #pragma omp teams distribute parallel for simd
16009   for (int i = 0; i < 10; ++i) {
16010 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16011     bar();
16012   }
16013 #pragma omp target
16014 #pragma omp teams distribute parallel for simd
16015   for (int i = 0; i < 10; ++i) {
16016 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16017     bar();
16018   }
16019 #pragma omp target
16020 #pragma omp teams distribute parallel for simd
16021   for (int i = 0; i < 10; ++i) {
16022 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16023     bar();
16024   }
16025 #pragma omp target
16026 #pragma omp teams distribute parallel for simd
16027   for (int i = 0; i < 10; ++i) {
16028 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16029     ++a;
16030   }
16031 #pragma omp target
16032 #pragma omp teams distribute parallel for simd
16033   for (int i = 0; i < 10; ++i) {
16034 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16035     ++a;
16036   }
16037 #pragma omp target
16038 #pragma omp teams distribute parallel for simd
16039   for (int i = 0; i < 10; ++i) {
16040 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16041     ++a;
16042   }
16043 #pragma omp target
16044 #pragma omp teams distribute parallel for simd
16045   for (int i = 0; i < 10; ++i) {
16046 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16047     for (int i = 0; i < 10; ++i)
16048       ;
16049   }
16050 #pragma omp target
16051 #pragma omp teams distribute parallel for simd
16052   for (int i = 0; i < 10; ++i) {
16053 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16054     ++a;
16055   }
16056 #pragma omp target
16057 #pragma omp teams distribute parallel for simd
16058   for (int i = 0; i < 10; ++i) {
16059 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16060     ++a;
16061   }
16062 #pragma omp target
16063 #pragma omp teams distribute parallel for simd
16064   for (int i = 0; i < 10; ++i) {
16065 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16066     ++a;
16067   }
16068 #pragma omp target
16069 #pragma omp teams distribute parallel for simd
16070   for (int i = 0; i < 10; ++i) {
16071 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16072     ++a;
16073   }
16074 #pragma omp target
16075 #pragma omp teams distribute parallel for simd
16076   for (int i = 0; i < 10; ++i) {
16077 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16078     for (int i = 0; i < 10; ++i)
16079       ++a;
16080   }
16081 #pragma omp target
16082 #pragma omp teams distribute parallel for simd
16083   for (int i = 0; i < 10; ++i) {
16084 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16085     for (int i = 0; i < 10; ++i)
16086       ++a;
16087   }
16088 #pragma omp target
16089 #pragma omp teams distribute parallel for simd
16090   for (int i = 0; i < 10; ++i) {
16091 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16092     for (int i = 0; i < 10; ++i)
16093       ++a;
16094   }
16095 #pragma omp target
16096 #pragma omp teams distribute parallel for simd
16097   for (int i = 0; i < 10; ++i) {
16098 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16099     for (int i = 0; i < 10; ++i)
16100       ++a;
16101   }
16102 #pragma omp target
16103 #pragma omp teams distribute parallel for simd
16104   for (int i = 0; i < 10; ++i) {
16105 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16106     for (int i = 0; i < 10; ++i)
16107       ++a;
16108   }
16109 #pragma omp target
16110 #pragma omp teams distribute parallel for simd
16111   for (int i = 0; i < 10; ++i) {
16112 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16113     for (int i = 0; i < 10; ++i)
16114       ++a;
16115   }
16116 #pragma omp target
16117 #pragma omp teams distribute parallel for simd
16118   for (int i = 0; i < 10; ++i) {
16119 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16120     ++a;
16121   }
16122 #pragma omp target
16123 #pragma omp teams distribute parallel for simd
16124   for (int i = 0; i < 10; ++i) {
16125 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16126     for (int i = 0; i < 10; ++i)
16127       ++a;
16128   }
16129 #pragma omp target
16130 #pragma omp teams distribute parallel for simd
16131   for (int i = 0; i < 10; ++i) {
16132 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16133     for (int i = 0; i < 10; ++i)
16134       ++a;
16135   }
16136 #pragma omp target
16137 #pragma omp teams distribute parallel for simd
16138   for (int i = 0; i < 10; ++i) {
16139 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16140     for (int i = 0; i < 10; ++i)
16141       ++a;
16142   }
16143 #pragma omp target
16144 #pragma omp teams distribute parallel for simd
16145   for (int i = 0; i < 10; ++i) {
16146 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16147     for (int i = 0; i < 10; ++i)
16148       ++a;
16149   }
16150 
16151 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16152 #pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16153   for (int i = 0; i < 10; ++i)
16154     ;
16155 #pragma omp target
16156 #pragma omp teams distribute parallel for
16157   for (int i = 0; i < 10; ++i) {
16158 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
16159     for (int i = 0; i < 10; ++i)
16160       ;
16161   }
16162 #pragma omp target
16163 #pragma omp teams distribute parallel for
16164   for (int i = 0; i < 10; ++i) {
16165 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
16166     for (int i = 0; i < 10; ++i)
16167       ;
16168   }
16169 #pragma omp target
16170 #pragma omp teams distribute parallel for
16171   for (int i = 0; i < 10; ++i) {
16172 #pragma omp for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
16173     for (int i = 0; i < 10; ++i)
16174       ;
16175   }
16176 #pragma omp target
16177 #pragma omp teams distribute parallel for
16178   for (int i = 0; i < 10; ++i) {
16179 #pragma omp simd // OK
16180     for (int i = 0; i < 10; ++i)
16181       ;
16182   }
16183 #pragma omp target
16184 #pragma omp teams distribute parallel for
16185   for (int i = 0; i < 10; ++i) {
16186 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
16187     for (int i = 0; i < 10; ++i)
16188       ;
16189   }
16190 #pragma omp target
16191 #pragma omp teams distribute parallel for
16192   for (int i = 0; i < 10; ++i) {
16193 #pragma omp parallel // OK
16194     for (int i = 0; i < 10; ++i)
16195       ;
16196   }
16197 #pragma omp target
16198 #pragma omp teams distribute parallel for
16199   for (int i = 0; i < 10; ++i) {
16200 #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
16201     {
16202       bar();
16203     }
16204   }
16205 #pragma omp target
16206 #pragma omp teams distribute parallel for
16207   for (int i = 0; i < 10; ++i) {
16208 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
16209     {
16210       bar();
16211     }
16212   }
16213 #pragma omp target
16214 #pragma omp teams distribute parallel for
16215   for (int i = 0; i < 10; ++i) {
16216 #pragma omp single // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
16217     {
16218       bar();
16219     }
16220   }
16221 #pragma omp target
16222 #pragma omp teams distribute parallel for
16223   for (int i = 0; i < 10; ++i) {
16224 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16225     {
16226       bar();
16227     }
16228   }
16229 #pragma omp target
16230 #pragma omp teams distribute parallel for
16231   for (int i = 0; i < 10; ++i) {
16232 #pragma omp critical // OK
16233     {
16234       bar();
16235     }
16236   }
16237 #pragma omp target
16238 #pragma omp teams distribute parallel for
16239   for (int i = 0; i < 10; ++i) {
16240 #pragma omp parallel // OK
16241     {
16242 #pragma omp single
16243       {
16244 	bar();
16245       }
16246     }
16247   }
16248 #pragma omp target
16249 #pragma omp teams distribute parallel for
16250   for (int i = 0; i < 10; ++i) {
16251 #pragma omp parallel for // OK
16252     for (int i = 0; i < 10; ++i)
16253       ;
16254   }
16255 #pragma omp target
16256 #pragma omp teams distribute parallel for
16257   for (int i = 0; i < 10; ++i) {
16258 #pragma omp parallel for simd // OK
16259     for (int i = 0; i < 10; ++i)
16260       ;
16261   }
16262 #pragma omp target
16263 #pragma omp teams distribute parallel for
16264   for (int i = 0; i < 10; ++i) {
16265 #pragma omp parallel sections // OK
16266     {
16267       bar();
16268     }
16269   }
16270 #pragma omp target
16271 #pragma omp teams distribute parallel for
16272   for (int i = 0; i < 10; ++i) {
16273 #pragma omp task // OK
16274     {
16275       bar();
16276     }
16277   }
16278 #pragma omp target
16279 #pragma omp teams distribute parallel for
16280   for (int i = 0; i < 10; ++i) {
16281 #pragma omp taskyield // OK
16282     bar();
16283   }
16284 #pragma omp target
16285 #pragma omp teams distribute parallel for
16286   for (int i = 0; i < 10; ++i) {
16287 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16288     bar();
16289   }
16290 #pragma omp target
16291 #pragma omp teams distribute parallel for
16292   for (int i = 0; i < 10; ++i) {
16293 #pragma omp taskwait // OK
16294     bar();
16295   }
16296 #pragma omp target
16297 #pragma omp teams distribute parallel for
16298   for (int i = 0; i < 10; ++i) {
16299 #pragma omp flush // OK
16300     bar();
16301   }
16302 #pragma omp target
16303 #pragma omp teams distribute parallel for
16304   for (int i = 0; i < 10; ++i) {
16305 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
16306     bar();
16307   }
16308 #pragma omp target
16309 #pragma omp teams distribute parallel for
16310   for (int i = 0; i < 10; ++i) {
16311 #pragma omp atomic // OK
16312     ++a;
16313   }
16314 #pragma omp target
16315 #pragma omp teams distribute parallel for
16316   for (int i = 0; i < 10; ++i) {
16317 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
16318     ++a;
16319   }
16320 #pragma omp target
16321 #pragma omp teams distribute parallel for
16322   for (int i = 0; i < 10; ++i) {
16323 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
16324     ++a;
16325   }
16326 #pragma omp target
16327 #pragma omp teams distribute parallel for
16328   for (int i = 0; i < 10; ++i) {
16329 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
16330     for (int i = 0; i < 10; ++i)
16331       ;
16332   }
16333 #pragma omp target
16334 #pragma omp teams distribute parallel for
16335   for (int i = 0; i < 10; ++i) {
16336 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
16337     ++a;
16338   }
16339 #pragma omp target
16340 #pragma omp teams distribute parallel for
16341   for (int i = 0; i < 10; ++i) {
16342 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
16343     ++a;
16344   }
16345 #pragma omp target
16346 #pragma omp teams distribute parallel for
16347   for (int i = 0; i < 10; ++i) {
16348 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
16349     ++a;
16350   }
16351 #pragma omp target
16352 #pragma omp teams distribute parallel for
16353   for (int i = 0; i < 10; ++i) {
16354 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
16355     ++a;
16356   }
16357 #pragma omp target
16358 #pragma omp teams distribute parallel for
16359   for (int i = 0; i < 10; ++i) {
16360 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
16361     for (int i = 0; i < 10; ++i)
16362       ++a;
16363   }
16364 #pragma omp target
16365 #pragma omp teams distribute parallel for
16366   for (int i = 0; i < 10; ++i) {
16367 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
16368     for (int i = 0; i < 10; ++i)
16369       ++a;
16370   }
16371 #pragma omp target
16372 #pragma omp teams distribute parallel for
16373   for (int i = 0; i < 10; ++i) {
16374 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
16375     for (int i = 0; i < 10; ++i)
16376       ++a;
16377   }
16378 #pragma omp target
16379 #pragma omp teams distribute parallel for
16380   for (int i = 0; i < 10; ++i) {
16381 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
16382     for (int i = 0; i < 10; ++i)
16383       ++a;
16384   }
16385 #pragma omp target
16386 #pragma omp teams distribute parallel for
16387   for (int i = 0; i < 10; ++i) {
16388 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
16389     for (int i = 0; i < 10; ++i)
16390       ++a;
16391   }
16392 #pragma omp target
16393 #pragma omp teams distribute parallel for
16394   for (int i = 0; i < 10; ++i) {
16395 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
16396     for (int i = 0; i < 10; ++i)
16397       ++a;
16398   }
16399 #pragma omp target
16400 #pragma omp teams distribute parallel for
16401   for (int i = 0; i < 10; ++i) {
16402 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
16403     ++a;
16404   }
16405 #pragma omp target
16406 #pragma omp teams distribute parallel for
16407   for (int i = 0; i < 10; ++i) {
16408 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
16409     for (int i = 0; i < 10; ++i)
16410       ++a;
16411   }
16412 #pragma omp target
16413 #pragma omp teams distribute parallel for
16414   for (int i = 0; i < 10; ++i) {
16415 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
16416     for (int i = 0; i < 10; ++i)
16417       ++a;
16418   }
16419 #pragma omp target
16420 #pragma omp teams distribute parallel for
16421   for (int i = 0; i < 10; ++i) {
16422 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16423     for (int i = 0; i < 10; ++i)
16424       ++a;
16425   }
16426 #pragma omp target
16427 #pragma omp teams distribute parallel for
16428   for (int i = 0; i < 10; ++i) {
16429 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16430     for (int i = 0; i < 10; ++i)
16431       ++a;
16432   }
16433 
16434 // TARGET TEAMS DIRECTIVE
16435 #pragma omp target teams
16436 #pragma omp parallel
16437   bar();
16438 #pragma omp target teams
16439 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
16440   for (int i = 0; i < 10; ++i)
16441     ;
16442 #pragma omp target teams
16443 #pragma omp simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
16444   for (int i = 0; i < 10; ++i)
16445     ;
16446 #pragma omp target teams
16447 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
16448   for (int i = 0; i < 10; ++i)
16449     ;
16450 #pragma omp target teams
16451 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
16452   {
16453     bar();
16454   }
16455 #pragma omp target teams
16456 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
16457   {
16458     bar();
16459   }
16460 #pragma omp target teams
16461 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
16462   bar();
16463 
16464 #pragma omp target teams
16465 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
16466   {
16467     bar();
16468   }
16469 #pragma omp target teams
16470 #pragma omp critical // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
16471   {
16472     bar();
16473   }
16474 #pragma omp target teams
16475 #pragma omp parallel for
16476   for (int i = 0; i < 10; ++i)
16477     ;
16478 #pragma omp target teams
16479 #pragma omp parallel for simd
16480   for (int i = 0; i < 10; ++i)
16481     ;
16482 #pragma omp target teams
16483 #pragma omp parallel sections
16484   {
16485     bar();
16486   }
16487 #pragma omp target teams
16488 #pragma omp task // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
16489   {
16490     bar();
16491   }
16492 #pragma omp target teams
16493   {
16494 #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
16495     bar();
16496   }
16497 #pragma omp target teams
16498   {
16499 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
16500     bar();
16501   }
16502 #pragma omp target teams
16503   {
16504 #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
16505     bar();
16506   }
16507 #pragma omp target teams
16508   {
16509 #pragma omp flush // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
16510     bar();
16511   }
16512 #pragma omp target teams
16513   {
16514 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
16515     bar();
16516   }
16517 #pragma omp target teams
16518   {
16519 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
16520     ++a;
16521   }
16522 #pragma omp target teams
16523   {
16524 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
16525     ++a;
16526   }
16527 #pragma omp target teams
16528   {
16529 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
16530     ++a;
16531   }
16532 #pragma omp target teams
16533 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
16534   for (int i = 0; i < 10; ++i)
16535     ;
16536 #pragma omp target teams
16537   {
16538 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16539   }
16540 #pragma omp target teams
16541   {
16542 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16543   }
16544 #pragma omp target teams
16545   {
16546 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
16547     ++a;
16548   }
16549 #pragma omp target teams
16550   {
16551 #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
16552   for (int i = 0; i < 10; ++i)
16553     ++a;
16554   }
16555 #pragma omp target teams
16556 #pragma omp distribute
16557   for (int i = 0; i < 10; ++i)
16558     ;
16559 #pragma omp target teams
16560   {
16561 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
16562     ++a;
16563   }
16564 #pragma omp target teams
16565 #pragma omp distribute parallel for
16566   for (int i = 0; i < 10; ++i)
16567     ;
16568 #pragma omp target teams
16569   {
16570 #pragma omp distribute parallel for
16571   for (int i = 0; i < 10; ++i)
16572     ;
16573 #pragma omp distribute parallel for
16574   for (int j = 0; j < 10; ++j)
16575     ;
16576   }
16577 #pragma omp target teams
16578   {
16579 #pragma omp distribute parallel for simd
16580   for (int i = 0; i < 10; ++i)
16581     ;
16582 #pragma omp distribute parallel for simd
16583   for (int j = 0; j < 10; ++j)
16584     ;
16585   }
16586 #pragma omp target teams
16587   {
16588 #pragma omp distribute simd
16589   for (int i = 0; i < 10; ++i)
16590     ;
16591 #pragma omp distribute simd
16592   for (int j = 0; j < 10; ++j)
16593     ;
16594   }
16595 #pragma omp target teams
16596   {
16597 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
16598   for (int i = 0; i < 10; ++i)
16599     ;
16600   }
16601 #pragma omp target teams
16602   {
16603 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
16604   for (int i = 0; i < 10; ++i)
16605     ;
16606   }
16607 #pragma omp target teams
16608   {
16609 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
16610   for (int i = 0; i < 10; ++i)
16611     ;
16612   }
16613 #pragma omp target teams
16614   {
16615 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
16616   for (int i = 0; i < 10; ++i)
16617     ;
16618   }
16619 #pragma omp target teams
16620   {
16621 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
16622   for (int i = 0; i < 10; ++i)
16623     ;
16624   }
16625 #pragma omp target teams
16626   {
16627 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
16628     a++;
16629   }
16630 #pragma omp target teams
16631   {
16632 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
16633   for (int i = 0; i < 10; ++i)
16634     ;
16635   }
16636 #pragma omp target teams
16637   {
16638 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
16639   for (int i = 0; i < 10; ++i)
16640     ;
16641   }
16642 #pragma omp target teams
16643   {
16644 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
16645   for (int i = 0; i < 10; ++i)
16646     ;
16647   }
16648 #pragma omp target teams
16649   {
16650 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
16651   for (int i = 0; i < 10; ++i)
16652     ;
16653   }
16654 
16655 // TARGET TEAMS DISTRIBUTE DIRECTIVE
16656 #pragma omp target teams distribute // OK
16657   for (int i = 0; i < 10; ++i)
16658     ;
16659 #pragma omp target teams distribute
16660   for (int i = 0; i < 10; ++i) {
16661 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
16662     for (int i = 0; i < 10; ++i)
16663       ;
16664   }
16665 #pragma omp target teams distribute
16666   for (int i = 0; i < 10; ++i) {
16667 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
16668     for (int i = 0; i < 10; ++i)
16669       ;
16670   }
16671 #pragma omp target teams distribute
16672   for (int i = 0; i < 10; ++i) {
16673 #pragma omp for // OK
16674     for (int i = 0; i < 10; ++i)
16675       ;
16676   }
16677 #pragma omp target teams distribute
16678   for (int i = 0; i < 10; ++i) {
16679 #pragma omp simd // OK
16680     for (int i = 0; i < 10; ++i)
16681       ;
16682   }
16683 #pragma omp target teams distribute
16684   for (int i = 0; i < 10; ++i) {
16685 #pragma omp for simd // OK
16686     for (int i = 0; i < 10; ++i)
16687       ;
16688   }
16689 #pragma omp target teams distribute
16690   for (int i = 0; i < 10; ++i) {
16691 #pragma omp parallel // OK
16692     for (int i = 0; i < 10; ++i)
16693       ;
16694   }
16695 #pragma omp target teams distribute
16696   for (int i = 0; i < 10; ++i) {
16697 #pragma omp sections // OK
16698     {
16699       bar();
16700     }
16701   }
16702 #pragma omp target teams distribute
16703   for (int i = 0; i < 10; ++i) {
16704 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
16705     {
16706       bar();
16707     }
16708   }
16709 #pragma omp target teams distribute
16710   for (int i = 0; i < 10; ++i) {
16711 #pragma omp single // OK
16712     {
16713       bar();
16714     }
16715   }
16716 #pragma omp target teams distribute
16717   for (int i = 0; i < 10; ++i) {
16718 #pragma omp master // OK
16719     {
16720       bar();
16721     }
16722   }
16723 #pragma omp target teams distribute
16724   for (int i = 0; i < 10; ++i) {
16725 #pragma omp critical // OK
16726     {
16727       bar();
16728     }
16729   }
16730 #pragma omp target teams distribute
16731   for (int i = 0; i < 10; ++i) {
16732 #pragma omp parallel // OK
16733     {
16734 #pragma omp single
16735       {
16736 	bar();
16737       }
16738     }
16739   }
16740 #pragma omp target teams distribute
16741   for (int i = 0; i < 10; ++i) {
16742 #pragma omp parallel for // OK
16743     for (int i = 0; i < 10; ++i)
16744       ;
16745   }
16746 #pragma omp target teams distribute
16747   for (int i = 0; i < 10; ++i) {
16748 #pragma omp parallel for simd // OK
16749     for (int i = 0; i < 10; ++i)
16750       ;
16751   }
16752 #pragma omp target teams distribute
16753   for (int i = 0; i < 10; ++i) {
16754 #pragma omp parallel sections // OK
16755     {
16756       bar();
16757     }
16758   }
16759 #pragma omp target teams distribute
16760   for (int i = 0; i < 10; ++i) {
16761 #pragma omp task // OK
16762     {
16763       bar();
16764     }
16765   }
16766 #pragma omp target teams distribute
16767   for (int i = 0; i < 10; ++i) {
16768 #pragma omp taskyield // OK
16769     bar();
16770   }
16771 #pragma omp target teams distribute
16772   for (int i = 0; i < 10; ++i) {
16773 #pragma omp barrier // OK
16774     bar();
16775   }
16776 #pragma omp target teams distribute
16777   for (int i = 0; i < 10; ++i) {
16778 #pragma omp taskwait // OK
16779     bar();
16780   }
16781 #pragma omp target teams distribute
16782   for (int i = 0; i < 10; ++i) {
16783 #pragma omp flush // OK
16784     bar();
16785   }
16786 #pragma omp target teams distribute
16787   for (int i = 0; i < 10; ++i) {
16788 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
16789     bar();
16790   }
16791 #pragma omp target teams distribute
16792   for (int i = 0; i < 10; ++i) {
16793 #pragma omp atomic // OK
16794     ++a;
16795   }
16796 #pragma omp target teams distribute
16797   for (int i = 0; i < 10; ++i) {
16798 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16799     ++a;
16800   }
16801 #pragma omp target teams distribute
16802   for (int i = 0; i < 10; ++i) {
16803 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16804     ++a;
16805   }
16806 #pragma omp target teams distribute
16807   for (int i = 0; i < 10; ++i) {
16808 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16809     for (int i = 0; i < 10; ++i)
16810       ;
16811   }
16812 #pragma omp target teams distribute
16813   for (int i = 0; i < 10; ++i) {
16814 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16815     ++a;
16816   }
16817 #pragma omp target teams distribute
16818   for (int i = 0; i < 10; ++i) {
16819 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16820     ++a;
16821   }
16822 #pragma omp target teams distribute
16823   for (int i = 0; i < 10; ++i) {
16824 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
16825     ++a;
16826   }
16827 #pragma omp target teams distribute
16828   for (int i = 0; i < 10; ++i) {
16829 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16830     ++a;
16831   }
16832 #pragma omp target teams distribute
16833   for (int i = 0; i < 10; ++i) {
16834 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
16835     for (int i = 0; i < 10; ++i)
16836       ++a;
16837   }
16838 #pragma omp target teams distribute
16839   for (int i = 0; i < 10; ++i) {
16840 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16841     for (int i = 0; i < 10; ++i)
16842       ++a;
16843   }
16844 #pragma omp target teams distribute
16845   for (int i = 0; i < 10; ++i) {
16846 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
16847     for (int i = 0; i < 10; ++i)
16848       ++a;
16849   }
16850 #pragma omp target teams distribute
16851   for (int i = 0; i < 10; ++i) {
16852 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
16853     for (int i = 0; i < 10; ++i)
16854       ++a;
16855   }
16856 #pragma omp target teams distribute
16857   for (int i = 0; i < 10; ++i) {
16858 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
16859     for (int i = 0; i < 10; ++i)
16860       ++a;
16861   }
16862 #pragma omp target teams distribute
16863   for (int i = 0; i < 10; ++i) {
16864 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
16865     for (int i = 0; i < 10; ++i)
16866       ++a;
16867   }
16868 #pragma omp target teams distribute
16869   for (int i = 0; i < 10; ++i) {
16870 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16871     ++a;
16872   }
16873 #pragma omp target teams distribute
16874   for (int i = 0; i < 10; ++i) {
16875 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16876     for (int i = 0; i < 10; ++i)
16877       ++a;
16878   }
16879 #pragma omp target teams distribute
16880   for (int i = 0; i < 10; ++i) {
16881 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16882     for (int i = 0; i < 10; ++i)
16883       ++a;
16884   }
16885 #pragma omp target teams distribute
16886   for (int i = 0; i < 10; ++i) {
16887 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16888     for (int i = 0; i < 10; ++i)
16889       ++a;
16890   }
16891 #pragma omp target teams distribute
16892   for (int i = 0; i < 10; ++i) {
16893 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16894     for (int i = 0; i < 10; ++i)
16895       ++a;
16896   }
16897 
16898 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16899 #pragma omp target teams distribute parallel for // OK
16900   for (int i = 0; i < 10; ++i)
16901     ;
16902 #pragma omp target teams distribute parallel for
16903   for (int i = 0; i < 10; ++i) {
16904 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
16905     for (int i = 0; i < 10; ++i)
16906       ;
16907   }
16908 #pragma omp target teams distribute parallel for
16909   for (int i = 0; i < 10; ++i) {
16910 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
16911     for (int i = 0; i < 10; ++i)
16912       ;
16913   }
16914 #pragma omp target teams distribute parallel for
16915   for (int i = 0; i < 10; ++i) {
16916 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
16917     for (int i = 0; i < 10; ++i)
16918       ;
16919   }
16920 #pragma omp target teams distribute parallel for
16921   for (int i = 0; i < 10; ++i) {
16922 #pragma omp simd // OK
16923     for (int i = 0; i < 10; ++i)
16924       ;
16925   }
16926 #pragma omp target teams distribute parallel for
16927   for (int i = 0; i < 10; ++i) {
16928 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
16929     for (int i = 0; i < 10; ++i)
16930       ;
16931   }
16932 #pragma omp target teams distribute parallel for
16933   for (int i = 0; i < 10; ++i) {
16934 #pragma omp parallel // OK
16935     for (int i = 0; i < 10; ++i)
16936       ;
16937   }
16938 #pragma omp target teams distribute parallel for
16939   for (int i = 0; i < 10; ++i) {
16940 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
16941     {
16942       bar();
16943     }
16944   }
16945 #pragma omp target teams distribute parallel for
16946   for (int i = 0; i < 10; ++i) {
16947 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
16948     {
16949       bar();
16950     }
16951   }
16952 #pragma omp target teams distribute parallel for
16953   for (int i = 0; i < 10; ++i) {
16954 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
16955     {
16956       bar();
16957     }
16958   }
16959 #pragma omp target teams distribute parallel for
16960   for (int i = 0; i < 10; ++i) {
16961 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
16962     {
16963       bar();
16964     }
16965   }
16966 #pragma omp target teams distribute parallel for
16967   for (int i = 0; i < 10; ++i) {
16968 #pragma omp critical // OK
16969     {
16970       bar();
16971     }
16972   }
16973 #pragma omp target teams distribute parallel for
16974   for (int i = 0; i < 10; ++i) {
16975 #pragma omp parallel // OK
16976     {
16977 #pragma omp single
16978       {
16979 	bar();
16980       }
16981     }
16982   }
16983 #pragma omp target teams distribute parallel for
16984   for (int i = 0; i < 10; ++i) {
16985 #pragma omp parallel for // OK
16986     for (int i = 0; i < 10; ++i)
16987       ;
16988   }
16989 #pragma omp target teams distribute parallel for
16990   for (int i = 0; i < 10; ++i) {
16991 #pragma omp parallel for simd // OK
16992     for (int i = 0; i < 10; ++i)
16993       ;
16994   }
16995 #pragma omp target teams distribute parallel for
16996   for (int i = 0; i < 10; ++i) {
16997 #pragma omp parallel sections // OK
16998     {
16999       bar();
17000     }
17001   }
17002 #pragma omp target teams distribute parallel for
17003   for (int i = 0; i < 10; ++i) {
17004 #pragma omp task // OK
17005     {
17006       bar();
17007     }
17008   }
17009 #pragma omp target teams distribute parallel for
17010   for (int i = 0; i < 10; ++i) {
17011 #pragma omp taskyield // OK
17012     bar();
17013   }
17014 #pragma omp target teams distribute parallel for
17015   for (int i = 0; i < 10; ++i) {
17016 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17017     bar();
17018   }
17019 #pragma omp target teams distribute parallel for
17020   for (int i = 0; i < 10; ++i) {
17021 #pragma omp taskwait // OK
17022     bar();
17023   }
17024 #pragma omp target teams distribute parallel for
17025   for (int i = 0; i < 10; ++i) {
17026 #pragma omp flush // OK
17027     bar();
17028   }
17029 #pragma omp target teams distribute parallel for
17030   for (int i = 0; i < 10; ++i) {
17031 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
17032     bar();
17033   }
17034 #pragma omp target teams distribute parallel for
17035   for (int i = 0; i < 10; ++i) {
17036 #pragma omp atomic // OK
17037     ++a;
17038   }
17039 #pragma omp target teams distribute parallel for
17040   for (int i = 0; i < 10; ++i) {
17041 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17042     ++a;
17043   }
17044 #pragma omp target teams distribute parallel for
17045   for (int i = 0; i < 10; ++i) {
17046 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17047     ++a;
17048   }
17049 #pragma omp target teams distribute parallel for
17050   for (int i = 0; i < 10; ++i) {
17051 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17052     for (int i = 0; i < 10; ++i)
17053       ;
17054   }
17055 #pragma omp target teams distribute parallel for
17056   for (int i = 0; i < 10; ++i) {
17057 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17058     ++a;
17059   }
17060 #pragma omp target teams distribute parallel for
17061   for (int i = 0; i < 10; ++i) {
17062 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17063     ++a;
17064   }
17065 #pragma omp target teams distribute parallel for
17066   for (int i = 0; i < 10; ++i) {
17067 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
17068     ++a;
17069   }
17070 #pragma omp target teams distribute parallel for
17071   for (int i = 0; i < 10; ++i) {
17072 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17073     ++a;
17074   }
17075 #pragma omp target teams distribute parallel for
17076   for (int i = 0; i < 10; ++i) {
17077 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
17078     for (int i = 0; i < 10; ++i)
17079       ++a;
17080   }
17081 #pragma omp target teams distribute parallel for
17082   for (int i = 0; i < 10; ++i) {
17083 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17084     for (int i = 0; i < 10; ++i)
17085       ++a;
17086   }
17087 #pragma omp target teams distribute parallel for
17088   for (int i = 0; i < 10; ++i) {
17089 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
17090     for (int i = 0; i < 10; ++i)
17091       ++a;
17092   }
17093 #pragma omp target teams distribute parallel for
17094   for (int i = 0; i < 10; ++i) {
17095 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
17096     for (int i = 0; i < 10; ++i)
17097       ++a;
17098   }
17099 #pragma omp target teams distribute parallel for
17100   for (int i = 0; i < 10; ++i) {
17101 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
17102     for (int i = 0; i < 10; ++i)
17103       ++a;
17104   }
17105 #pragma omp target teams distribute parallel for
17106   for (int i = 0; i < 10; ++i) {
17107 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
17108     for (int i = 0; i < 10; ++i)
17109       ++a;
17110   }
17111 #pragma omp target teams distribute parallel for
17112   for (int i = 0; i < 10; ++i) {
17113 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17114     ++a;
17115   }
17116 #pragma omp target teams distribute parallel for
17117   for (int i = 0; i < 10; ++i) {
17118 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17119     for (int i = 0; i < 10; ++i)
17120       ++a;
17121   }
17122 #pragma omp target teams distribute parallel for
17123   for (int i = 0; i < 10; ++i) {
17124 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17125     for (int i = 0; i < 10; ++i)
17126       ++a;
17127   }
17128 #pragma omp target teams distribute parallel for
17129   for (int i = 0; i < 10; ++i) {
17130 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17131     for (int i = 0; i < 10; ++i)
17132       ++a;
17133   }
17134 #pragma omp target teams distribute parallel for
17135   for (int i = 0; i < 10; ++i) {
17136 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17137     for (int i = 0; i < 10; ++i)
17138       ++a;
17139   }
17140 
17141 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
17142 #pragma omp target teams distribute parallel for simd // OK
17143   for (int i = 0; i < 10; ++i)
17144     ;
17145 #pragma omp target teams distribute parallel for simd
17146   for (int i = 0; i < 10; ++i) {
17147 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17148     for (int i = 0; i < 10; ++i)
17149       ;
17150   }
17151 #pragma omp target teams distribute parallel for simd
17152   for (int i = 0; i < 10; ++i) {
17153 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17154     for (int i = 0; i < 10; ++i)
17155       ;
17156   }
17157 #pragma omp target teams distribute parallel for simd
17158   for (int i = 0; i < 10; ++i) {
17159 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17160     for (int i = 0; i < 10; ++i)
17161       ;
17162   }
17163 #pragma omp target teams distribute parallel for simd
17164   for (int i = 0; i < 10; ++i) {
17165 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17166     for (int i = 0; i < 10; ++i)
17167       ;
17168   }
17169 #pragma omp target teams distribute parallel for simd
17170   for (int i = 0; i < 10; ++i) {
17171 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17172     for (int i = 0; i < 10; ++i)
17173       ;
17174   }
17175 #pragma omp target teams distribute parallel for simd
17176   for (int i = 0; i < 10; ++i) {
17177 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17178     for (int i = 0; i < 10; ++i)
17179       ;
17180   }
17181 #pragma omp target teams distribute parallel for simd
17182   for (int i = 0; i < 10; ++i) {
17183 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17184     {
17185       bar();
17186     }
17187   }
17188 #pragma omp target teams distribute parallel for simd
17189   for (int i = 0; i < 10; ++i) {
17190 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17191     {
17192       bar();
17193     }
17194   }
17195 #pragma omp target teams distribute parallel for simd
17196   for (int i = 0; i < 10; ++i) {
17197 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17198     {
17199       bar();
17200     }
17201   }
17202 #pragma omp target teams distribute parallel for simd
17203   for (int i = 0; i < 10; ++i) {
17204 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17205     {
17206       bar();
17207     }
17208   }
17209 #pragma omp target teams distribute parallel for simd
17210   for (int i = 0; i < 10; ++i) {
17211 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17212     {
17213       bar();
17214     }
17215   }
17216 #pragma omp target teams distribute parallel for simd
17217   for (int i = 0; i < 10; ++i) {
17218 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17219     {
17220 #pragma omp single
17221       {
17222 	bar();
17223       }
17224     }
17225   }
17226 #pragma omp target teams distribute parallel for simd
17227   for (int i = 0; i < 10; ++i) {
17228 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17229     for (int i = 0; i < 10; ++i)
17230       ;
17231   }
17232 #pragma omp target teams distribute parallel for simd
17233   for (int i = 0; i < 10; ++i) {
17234 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17235     for (int i = 0; i < 10; ++i)
17236       ;
17237   }
17238 #pragma omp target teams distribute parallel for simd
17239   for (int i = 0; i < 10; ++i) {
17240 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17241     {
17242       bar();
17243     }
17244   }
17245 #pragma omp target teams distribute parallel for simd
17246   for (int i = 0; i < 10; ++i) {
17247 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17248     {
17249       bar();
17250     }
17251   }
17252 #pragma omp target teams distribute parallel for simd
17253   for (int i = 0; i < 10; ++i) {
17254 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17255     bar();
17256   }
17257 #pragma omp target teams distribute parallel for simd
17258   for (int i = 0; i < 10; ++i) {
17259 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17260     bar();
17261   }
17262 #pragma omp target teams distribute parallel for simd
17263   for (int i = 0; i < 10; ++i) {
17264 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17265     bar();
17266   }
17267 #pragma omp target teams distribute parallel for simd
17268   for (int i = 0; i < 10; ++i) {
17269 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17270     bar();
17271   }
17272 #pragma omp target teams distribute parallel for simd
17273   for (int i = 0; i < 10; ++i) {
17274 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17275     bar();
17276   }
17277 #pragma omp target teams distribute parallel for simd
17278   for (int i = 0; i < 10; ++i) {
17279 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
17280     ++a;
17281   }
17282 #pragma omp target teams distribute parallel for simd
17283   for (int i = 0; i < 10; ++i) {
17284 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17285     ++a;
17286   }
17287 #pragma omp target teams distribute parallel for simd
17288   for (int i = 0; i < 10; ++i) {
17289 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17290     ++a;
17291   }
17292 #pragma omp target teams distribute parallel for simd
17293   for (int i = 0; i < 10; ++i) {
17294 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17295     for (int i = 0; i < 10; ++i)
17296       ;
17297   }
17298 #pragma omp target teams distribute parallel for simd
17299   for (int i = 0; i < 10; ++i) {
17300 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17301     ++a;
17302   }
17303 #pragma omp target teams distribute parallel for simd
17304   for (int i = 0; i < 10; ++i) {
17305 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17306     ++a;
17307   }
17308 #pragma omp target teams distribute parallel for simd
17309   for (int i = 0; i < 10; ++i) {
17310 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17311     ++a;
17312   }
17313 #pragma omp target teams distribute parallel for simd
17314   for (int i = 0; i < 10; ++i) {
17315 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17316     ++a;
17317   }
17318 #pragma omp target teams distribute parallel for simd
17319   for (int i = 0; i < 10; ++i) {
17320 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17321     for (int i = 0; i < 10; ++i)
17322       ++a;
17323   }
17324 #pragma omp target teams distribute parallel for simd
17325   for (int i = 0; i < 10; ++i) {
17326 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17327     for (int i = 0; i < 10; ++i)
17328       ++a;
17329   }
17330 #pragma omp target teams distribute parallel for simd
17331   for (int i = 0; i < 10; ++i) {
17332 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17333     for (int i = 0; i < 10; ++i)
17334       ++a;
17335   }
17336 #pragma omp target teams distribute parallel for simd
17337   for (int i = 0; i < 10; ++i) {
17338 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17339     for (int i = 0; i < 10; ++i)
17340       ++a;
17341   }
17342 #pragma omp target teams distribute parallel for simd
17343   for (int i = 0; i < 10; ++i) {
17344 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17345     for (int i = 0; i < 10; ++i)
17346       ++a;
17347   }
17348 #pragma omp target teams distribute parallel for simd
17349   for (int i = 0; i < 10; ++i) {
17350 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17351     for (int i = 0; i < 10; ++i)
17352       ;
17353   }
17354 #pragma omp target teams distribute parallel for simd
17355   for (int i = 0; i < 10; ++i) {
17356 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17357     a++;
17358   }
17359 #pragma omp target teams distribute parallel for simd
17360   for (int i = 0; i < 10; ++i) {
17361 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17362     for (int i = 0; i < 10; ++i)
17363       ;
17364   }
17365 #pragma omp target teams distribute parallel for simd
17366   for (int i = 0; i < 10; ++i) {
17367 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17368     for (int i = 0; i < 10; ++i)
17369       ;
17370   }
17371 #pragma omp target teams distribute parallel for simd
17372   for (int i = 0; i < 10; ++i) {
17373 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17374     for (int i = 0; i < 10; ++i)
17375       ;
17376   }
17377 #pragma omp target teams distribute parallel for simd
17378   for (int i = 0; i < 10; ++i) {
17379 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17380     for (int i = 0; i < 10; ++i)
17381       ;
17382   }
17383 
17384 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
17385 #pragma omp target teams distribute simd // OK
17386   for (int i = 0; i < 10; ++i)
17387     ;
17388 #pragma omp target teams distribute simd
17389   for (int i = 0; i < 10; ++i) {
17390 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17391     for (int i = 0; i < 10; ++i)
17392       ;
17393   }
17394 #pragma omp target teams distribute simd
17395   for (int i = 0; i < 10; ++i) {
17396 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17397     for (int i = 0; i < 10; ++i)
17398       ;
17399   }
17400 #pragma omp target teams distribute simd
17401   for (int i = 0; i < 10; ++i) {
17402 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17403     for (int i = 0; i < 10; ++i)
17404       ;
17405   }
17406 #pragma omp target teams distribute simd
17407   for (int i = 0; i < 10; ++i) {
17408 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17409     for (int i = 0; i < 10; ++i)
17410       ;
17411   }
17412 #pragma omp target teams distribute simd
17413   for (int i = 0; i < 10; ++i) {
17414 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17415     for (int i = 0; i < 10; ++i)
17416       ;
17417   }
17418 #pragma omp target teams distribute simd
17419   for (int i = 0; i < 10; ++i) {
17420 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17421     for (int i = 0; i < 10; ++i)
17422       ;
17423   }
17424 #pragma omp target teams distribute simd
17425   for (int i = 0; i < 10; ++i) {
17426 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17427     {
17428       bar();
17429     }
17430   }
17431 #pragma omp target teams distribute simd
17432   for (int i = 0; i < 10; ++i) {
17433 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17434     {
17435       bar();
17436     }
17437   }
17438 #pragma omp target teams distribute simd
17439   for (int i = 0; i < 10; ++i) {
17440 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17441     {
17442       bar();
17443     }
17444   }
17445 #pragma omp target teams distribute simd
17446   for (int i = 0; i < 10; ++i) {
17447 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17448     {
17449       bar();
17450     }
17451   }
17452 #pragma omp target teams distribute simd
17453   for (int i = 0; i < 10; ++i) {
17454 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17455     {
17456       bar();
17457     }
17458   }
17459 #pragma omp target teams distribute simd
17460   for (int i = 0; i < 10; ++i) {
17461 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17462     {
17463 #pragma omp single
17464       {
17465 	bar();
17466       }
17467     }
17468   }
17469 #pragma omp target teams distribute simd
17470   for (int i = 0; i < 10; ++i) {
17471 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17472     for (int i = 0; i < 10; ++i)
17473       ;
17474   }
17475 #pragma omp target teams distribute simd
17476   for (int i = 0; i < 10; ++i) {
17477 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17478     for (int i = 0; i < 10; ++i)
17479       ;
17480   }
17481 #pragma omp target teams distribute simd
17482   for (int i = 0; i < 10; ++i) {
17483 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17484     {
17485       bar();
17486     }
17487   }
17488 #pragma omp target teams distribute simd
17489   for (int i = 0; i < 10; ++i) {
17490 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17491     {
17492       bar();
17493     }
17494   }
17495 #pragma omp target teams distribute simd
17496   for (int i = 0; i < 10; ++i) {
17497 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17498     bar();
17499   }
17500 #pragma omp target teams distribute simd
17501   for (int i = 0; i < 10; ++i) {
17502 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17503     bar();
17504   }
17505 #pragma omp target teams distribute simd
17506   for (int i = 0; i < 10; ++i) {
17507 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17508     bar();
17509   }
17510 #pragma omp target teams distribute simd
17511   for (int i = 0; i < 10; ++i) {
17512 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17513     bar();
17514   }
17515 #pragma omp target teams distribute simd
17516   for (int i = 0; i < 10; ++i) {
17517 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17518     bar();
17519   }
17520 #pragma omp target teams distribute simd
17521   for (int i = 0; i < 10; ++i) {
17522 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
17523     ++a;
17524   }
17525 #pragma omp target teams distribute simd
17526   for (int i = 0; i < 10; ++i) {
17527 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17528     ++a;
17529   }
17530 #pragma omp target teams distribute simd
17531   for (int i = 0; i < 10; ++i) {
17532 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17533     ++a;
17534   }
17535 #pragma omp target teams distribute simd
17536   for (int i = 0; i < 10; ++i) {
17537 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17538     for (int i = 0; i < 10; ++i)
17539       ;
17540   }
17541 #pragma omp target teams distribute simd
17542   for (int i = 0; i < 10; ++i) {
17543 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17544     ++a;
17545   }
17546 #pragma omp target teams distribute simd
17547   for (int i = 0; i < 10; ++i) {
17548 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17549     ++a;
17550   }
17551 #pragma omp target teams distribute simd
17552   for (int i = 0; i < 10; ++i) {
17553 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17554     ++a;
17555   }
17556 #pragma omp target teams distribute simd
17557   for (int i = 0; i < 10; ++i) {
17558 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17559     ++a;
17560   }
17561 #pragma omp target teams distribute simd
17562   for (int i = 0; i < 10; ++i) {
17563 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17564     for (int i = 0; i < 10; ++i)
17565       ++a;
17566   }
17567 #pragma omp target teams distribute simd
17568   for (int i = 0; i < 10; ++i) {
17569 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17570     for (int i = 0; i < 10; ++i)
17571       ++a;
17572   }
17573 #pragma omp target teams distribute simd
17574   for (int i = 0; i < 10; ++i) {
17575 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17576     for (int i = 0; i < 10; ++i)
17577       ++a;
17578   }
17579 #pragma omp target teams distribute simd
17580   for (int i = 0; i < 10; ++i) {
17581 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17582     for (int i = 0; i < 10; ++i)
17583       ++a;
17584   }
17585 #pragma omp target teams distribute simd
17586   for (int i = 0; i < 10; ++i) {
17587 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17588     for (int i = 0; i < 10; ++i)
17589       ++a;
17590   }
17591 #pragma omp target teams distribute simd
17592   for (int i = 0; i < 10; ++i) {
17593 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17594     for (int i = 0; i < 10; ++i)
17595       ;
17596   }
17597 #pragma omp target teams distribute simd
17598   for (int i = 0; i < 10; ++i) {
17599 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17600     a++;
17601   }
17602 #pragma omp target teams distribute simd
17603   for (int i = 0; i < 10; ++i) {
17604 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17605     for (int i = 0; i < 10; ++i)
17606       ;
17607   }
17608 #pragma omp target teams distribute simd
17609   for (int i = 0; i < 10; ++i) {
17610 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17611     for (int i = 0; i < 10; ++i)
17612       ;
17613   }
17614 #pragma omp target teams distribute simd
17615   for (int i = 0; i < 10; ++i) {
17616 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17617     for (int i = 0; i < 10; ++i)
17618       ;
17619   }
17620 #pragma omp target teams distribute simd
17621   for (int i = 0; i < 10; ++i) {
17622 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17623     for (int i = 0; i < 10; ++i)
17624       ;
17625   }
17626 
17627   return foo<int>();
17628 }
17629 
17630