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 
194 // SIMD DIRECTIVE
195 #pragma omp simd
196   for (int i = 0; i < 10; ++i) {
197 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
198     for (int i = 0; i < 10; ++i)
199       ;
200   }
201 #pragma omp simd
202   for (int i = 0; i < 10; ++i) {
203 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
204     for (int i = 0; i < 10; ++i)
205       ;
206   }
207 #pragma omp simd
208   for (int i = 0; i < 10; ++i) {
209 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
210     for (int i = 0; i < 10; ++i)
211       ;
212   }
213 #pragma omp simd
214   for (int i = 0; i < 10; ++i) {
215 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
216     for (int i = 0; i < 10; ++i)
217       ;
218   }
219 #pragma omp simd
220   for (int i = 0; i < 10; ++i) {
221 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
222     {
223       bar();
224     }
225   }
226 #pragma omp simd
227   for (int i = 0; i < 10; ++i) {
228 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
229     {
230       bar();
231     }
232   }
233 #pragma omp simd
234   for (int i = 0; i < 10; ++i) {
235 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
236     {
237       bar();
238     }
239   }
240 #pragma omp simd
241   for (int i = 0; i < 10; ++i) {
242 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
243     {
244       bar();
245     }
246   }
247 #pragma omp simd
248   for (int i = 0; i < 10; ++i) {
249 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
250     {
251       bar();
252     }
253   }
254 #pragma omp simd
255   for (int i = 0; i < 10; ++i) {
256 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
257     for (int i = 0; i < 10; ++i)
258       ;
259   }
260 #pragma omp simd
261   for (int i = 0; i < 10; ++i) {
262 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
263     for (int i = 0; i < 10; ++i)
264       ;
265   }
266 #pragma omp simd
267   for (int i = 0; i < 10; ++i) {
268 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
269     {
270       bar();
271     }
272   }
273 #pragma omp simd
274   for (int i = 0; i < 10; ++i) {
275 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
276     {
277       bar();
278     }
279   }
280 #pragma omp simd
281   for (int i = 0; i < 10; ++i) {
282 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
283     bar();
284   }
285 #pragma omp simd
286   for (int i = 0; i < 10; ++i) {
287 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
288     bar();
289   }
290 #pragma omp simd
291   for (int i = 0; i < 10; ++i) {
292 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
293     bar();
294   }
295 #pragma omp simd
296   for (int i = 0; i < 10; ++i) {
297 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
298     bar();
299   }
300 #pragma omp simd
301   for (int i = 0; i < 10; ++i) {
302 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
303     bar();
304   }
305 #pragma omp simd
306   for (int i = 0; i < 10; ++i) {
307 #pragma omp ordered simd // OK
308     bar();
309   }
310 #pragma omp simd
311   for (int i = 0; i < 10; ++i) {
312 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
313     bar();
314   }
315 #pragma omp simd
316   for (int i = 0; i < 10; ++i) {
317 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
318     ++a;
319   }
320 #pragma omp simd
321   for (int i = 0; i < 10; ++i) {
322 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
323     ++a;
324   }
325 #pragma omp simd
326   for (int i = 0; i < 10; ++i) {
327 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
328     ++a;
329   }
330 #pragma omp simd
331   for (int i = 0; i < 10; ++i) {
332 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
333     for (int i = 0; i < 10; ++i)
334       ;
335   }
336 #pragma omp simd
337   for (int i = 0; i < 10; ++i) {
338 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
339     ++a;
340   }
341 #pragma omp simd
342   for (int i = 0; i < 10; ++i) {
343 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
344     ++a;
345   }
346 #pragma omp simd
347   for (int i = 0; i < 10; ++i) {
348 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
349     ++a;
350   }
351 #pragma omp simd
352   for (int i = 0; i < 10; ++i) {
353 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
354   for (int i = 0; i < 10; ++i)
355     ++a;
356   }
357 #pragma omp simd
358   for (int i = 0; i < 10; ++i) {
359 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
360     for (int j = 0; j < 10; ++j)
361       ;
362   }
363 #pragma omp simd
364   for (int i = 0; i < 10; ++i) {
365 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
366   }
367 #pragma omp simd
368   for (int i = 0; i < 10; ++i) {
369 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
370     for (int j = 0; j < 10; ++j)
371       ;
372   }
373 #pragma omp simd
374   for (int i = 0; i < 10; ++i) {
375 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
376     for (int j = 0; j < 10; ++j)
377       ;
378   }
379 #pragma omp simd
380   for (int i = 0; i < 10; ++i) {
381 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
382     for (int j = 0; j < 10; ++j)
383       ;
384   }
385 #pragma omp simd
386   for (int i = 0; i < 10; ++i) {
387 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
388     for (int j = 0; j < 10; ++j)
389       ;
390   }
391 #pragma omp simd
392   for (int i = 0; i < 10; ++i) {
393 #pragma omp teams distribute // 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 teams distribute 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 teams distribute parallel for 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 teams distribute parallel for // 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 target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
418     ++a;
419   }
420 
421 // FOR DIRECTIVE
422 #pragma omp for
423   for (int i = 0; i < 10; ++i) {
424 #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?}}
425     for (int i = 0; i < 10; ++i)
426       ;
427   }
428 #pragma omp for
429   for (int i = 0; i < 10; ++i) {
430 #pragma omp simd
431     for (int i = 0; i < 10; ++i)
432       ;
433   }
434 #pragma omp for
435   for (int i = 0; i < 10; ++i) {
436 #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?}}
437     for (int i = 0; i < 10; ++i)
438       ;
439   }
440 #pragma omp for
441   for (int i = 0; i < 10; ++i) {
442 #pragma omp parallel
443     for (int i = 0; i < 10; ++i)
444       ;
445   }
446 #pragma omp for
447   for (int i = 0; i < 10; ++i) {
448 #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?}}
449     {
450       bar();
451     }
452   }
453 #pragma omp for
454   for (int i = 0; i < 10; ++i) {
455 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
456     {
457       bar();
458     }
459   }
460 #pragma omp for
461   for (int i = 0; i < 10; ++i) {
462 #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?}}
463     {
464       bar();
465     }
466   }
467 
468 #pragma omp for
469   for (int i = 0; i < 10; ++i) {
470 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
471     {
472       bar();
473     }
474   }
475 #pragma omp for
476   for (int i = 0; i < 10; ++i) {
477 #pragma omp critical
478     {
479       bar();
480     }
481   }
482 #pragma omp for
483   for (int i = 0; i < 10; ++i) {
484 #pragma omp parallel
485     {
486 #pragma omp single // OK
487       {
488         bar();
489       }
490 #pragma omp for // OK
491       for (int i = 0; i < 10; ++i)
492         ;
493 #pragma omp sections // OK
494       {
495         bar();
496       }
497     }
498   }
499 #pragma omp for
500   for (int i = 0; i < 10; ++i) {
501 #pragma omp parallel for
502     for (int i = 0; i < 10; ++i)
503       ;
504   }
505 #pragma omp for
506   for (int i = 0; i < 10; ++i) {
507 #pragma omp parallel for simd
508     for (int i = 0; i < 10; ++i)
509       ;
510   }
511 #pragma omp for
512   for (int i = 0; i < 10; ++i) {
513 #pragma omp parallel sections
514     {
515       bar();
516     }
517   }
518 #pragma omp for
519   for (int i = 0; i < 10; ++i) {
520 #pragma omp task
521     {
522       bar();
523     }
524   }
525 #pragma omp for
526   for (int i = 0; i < 10; ++i) {
527 #pragma omp taskyield
528     bar();
529   }
530 #pragma omp for
531   for (int i = 0; i < 10; ++i) {
532 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
533     bar();
534   }
535 #pragma omp for
536   for (int i = 0; i < 10; ++i) {
537 #pragma omp taskwait
538     bar();
539   }
540 #pragma omp for
541   for (int i = 0; i < 10; ++i) {
542 #pragma omp flush
543     bar();
544   }
545 #pragma omp for
546   for (int i = 0; i < 10; ++i) {
547 #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?}}
548     bar();
549   }
550 #pragma omp for ordered
551   for (int i = 0; i < 10; ++i) {
552 #pragma omp ordered // OK
553     bar();
554   }
555 #pragma omp for
556   for (int i = 0; i < 10; ++i) {
557 #pragma omp atomic
558     ++a;
559   }
560 #pragma omp for
561   for (int i = 0; i < 10; ++i) {
562 #pragma omp target
563     ++a;
564   }
565 #pragma omp for
566   for (int i = 0; i < 10; ++i) {
567 #pragma omp target parallel
568     ++a;
569   }
570 #pragma omp for
571   for (int i = 0; i < 10; ++i) {
572 #pragma omp target parallel for
573     for (int i = 0; i < 10; ++i)
574       ;
575   }
576 #pragma omp for
577   for (int i = 0; i < 10; ++i) {
578 #pragma omp target enter data map(to: a)
579     ++a;
580   }
581 #pragma omp for
582   for (int i = 0; i < 10; ++i) {
583 #pragma omp target exit data map(from: a)
584     ++a;
585   }
586 #pragma omp for
587   for (int i = 0; i < 10; ++i) {
588 #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?}}
589     ++a;
590   }
591 #pragma omp for
592   for (int i = 0; i < 10; ++i) {
593 #pragma omp taskloop
594   for (int i = 0; i < 10; ++i)
595     ++a;
596   }
597 #pragma omp for
598   for (int i = 0; i < 10; ++i) {
599 #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?}}
600     for (int j = 0; j < 10; ++j)
601       ;
602   }
603 #pragma omp for
604   for (int i = 0; i < 10; ++i) {
605 #pragma omp target update to(a)
606   }
607 #pragma omp for
608   for (int i = 0; i < 10; ++i) {
609 #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?}}
610     for (int j = 0; j < 10; ++j)
611       ;
612   }
613 #pragma omp for
614   for (int i = 0; i < 10; ++i) {
615 #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?}}
616     for (int j = 0; j < 10; ++j)
617       ;
618   }
619 #pragma omp for
620   for (int i = 0; i < 10; ++i) {
621 #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?}}
622     for (int j = 0; j < 10; ++j)
623       ;
624   }
625 #pragma omp for
626   for (int i = 0; i < 10; ++i) {
627 #pragma omp target simd // OK
628     for (int j = 0; j < 10; ++j)
629       ;
630   }
631 #pragma omp for
632   for (int i = 0; i < 10; ++i) {
633 #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?}}
634     for (int j = 0; j < 10; ++j)
635       ;
636   }
637 #pragma omp for
638   for (int i = 0; i < 10; ++i) {
639 #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?}}
640     for (int j = 0; j < 10; ++j)
641       ;
642   }
643 #pragma omp for
644   for (int i = 0; i < 10; ++i) {
645 #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?}}
646     for (int j = 0; j < 10; ++j)
647       ;
648   }
649 #pragma omp for
650   for (int i = 0; i < 10; ++i) {
651 #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?}}
652     for (int j = 0; j < 10; ++j)
653       ;
654   }
655 #pragma omp for
656   for (int i = 0; i < 10; ++i) {
657 #pragma omp target teams // OK
658     ++a;
659   }
660 
661 // FOR SIMD DIRECTIVE
662 #pragma omp for simd
663   for (int i = 0; i < 10; ++i) {
664 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
665     for (int i = 0; i < 10; ++i)
666       ;
667   }
668 #pragma omp for simd
669   for (int i = 0; i < 10; ++i) {
670 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
671     for (int i = 0; i < 10; ++i)
672       ;
673   }
674 #pragma omp for simd
675   for (int i = 0; i < 10; ++i) {
676 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
677     for (int i = 0; i < 10; ++i)
678       ;
679   }
680 #pragma omp for simd
681   for (int i = 0; i < 10; ++i) {
682 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
683     for (int i = 0; i < 10; ++i)
684       ;
685   }
686 #pragma omp for simd
687   for (int i = 0; i < 10; ++i) {
688 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
689     {
690       bar();
691     }
692   }
693 #pragma omp for simd
694   for (int i = 0; i < 10; ++i) {
695 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
696     {
697       bar();
698     }
699   }
700 #pragma omp for simd
701   for (int i = 0; i < 10; ++i) {
702 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
703     {
704       bar();
705     }
706   }
707 #pragma omp for simd
708   for (int i = 0; i < 10; ++i) {
709 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
710     {
711       bar();
712     }
713   }
714 #pragma omp for simd
715   for (int i = 0; i < 10; ++i) {
716 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
717     {
718       bar();
719     }
720   }
721 #pragma omp for simd
722   for (int i = 0; i < 10; ++i) {
723 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
724     for (int i = 0; i < 10; ++i)
725       ;
726   }
727 #pragma omp for simd
728   for (int i = 0; i < 10; ++i) {
729 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
730     for (int i = 0; i < 10; ++i)
731       ;
732   }
733 #pragma omp for simd
734   for (int i = 0; i < 10; ++i) {
735 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
736     {
737       bar();
738     }
739   }
740 #pragma omp for simd
741   for (int i = 0; i < 10; ++i) {
742 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
743     {
744       bar();
745     }
746   }
747 #pragma omp for simd
748   for (int i = 0; i < 10; ++i) {
749 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
750     bar();
751   }
752 #pragma omp for simd
753   for (int i = 0; i < 10; ++i) {
754 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
755     bar();
756   }
757 #pragma omp for simd
758   for (int i = 0; i < 10; ++i) {
759 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
760     bar();
761   }
762 #pragma omp for simd
763   for (int i = 0; i < 10; ++i) {
764 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
765     bar();
766   }
767 #pragma omp for simd
768   for (int i = 0; i < 10; ++i) {
769 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
770     bar();
771   }
772 #pragma omp for simd
773   for (int i = 0; i < 10; ++i) {
774 #pragma omp ordered simd // OK
775     bar();
776   }
777 #pragma omp for simd
778   for (int i = 0; i < 10; ++i) {
779 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
780     bar();
781   }
782 #pragma omp for simd
783   for (int i = 0; i < 10; ++i) {
784 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
785     ++a;
786   }
787 #pragma omp for simd
788   for (int i = 0; i < 10; ++i) {
789 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
790     ++a;
791   }
792 #pragma omp for simd
793   for (int i = 0; i < 10; ++i) {
794 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
795     ++a;
796   }
797 #pragma omp for simd
798   for (int i = 0; i < 10; ++i) {
799 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
800     for (int i = 0; i < 10; ++i)
801       ;
802   }
803 #pragma omp for simd
804   for (int i = 0; i < 10; ++i) {
805 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
806     ++a;
807   }
808 #pragma omp for simd
809   for (int i = 0; i < 10; ++i) {
810 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
811     ++a;
812   }
813 #pragma omp for simd
814   for (int i = 0; i < 10; ++i) {
815 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
816     ++a;
817   }
818 #pragma omp for simd
819   for (int i = 0; i < 10; ++i) {
820 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
821   for (int i = 0; i < 10; ++i)
822     ++a;
823   }
824 #pragma omp for simd
825   for (int i = 0; i < 10; ++i) {
826 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
827     for (int j = 0; j < 10; ++j)
828       ;
829   }
830 #pragma omp for simd
831   for (int i = 0; i < 10; ++i) {
832 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
833     bar();
834   }
835 #pragma omp for simd
836   for (int i = 0; i < 10; ++i) {
837 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
838     for (int j = 0; j < 10; ++j)
839       ;
840   }
841 #pragma omp for simd
842   for (int i = 0; i < 10; ++i) {
843 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
844     for (int j = 0; j < 10; ++j)
845       ;
846   }
847 #pragma omp for simd
848   for (int i = 0; i < 10; ++i) {
849 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
850     for (int j = 0; j < 10; ++j)
851       ;
852   }
853 #pragma omp for simd
854   for (int i = 0; i < 10; ++i) {
855 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
856     for (int j = 0; j < 10; ++j)
857       ;
858   }
859 #pragma omp for simd
860   for (int i = 0; i < 10; ++i) {
861 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
862     for (int j = 0; j < 10; ++j)
863       ;
864   }
865 #pragma omp for simd
866   for (int i = 0; i < 10; ++i) {
867 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
868     for (int j = 0; j < 10; ++j)
869       ;
870   }
871 #pragma omp for simd
872   for (int i = 0; i < 10; ++i) {
873 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
874     for (int j = 0; j < 10; ++j)
875       ;
876   }
877 #pragma omp for simd
878   for (int i = 0; i < 10; ++i) {
879 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
880     for (int j = 0; j < 10; ++j)
881       ;
882   }
883 #pragma omp for simd
884   for (int i = 0; i < 10; ++i) {
885 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
886     a++;
887   }
888 
889 // SECTIONS DIRECTIVE
890 #pragma omp sections
891   {
892 #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?}}
893     for (int i = 0; i < 10; ++i)
894       ;
895   }
896 #pragma omp sections
897   {
898 #pragma omp simd
899     for (int i = 0; i < 10; ++i)
900       ;
901   }
902 #pragma omp sections
903   {
904 #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?}}
905     for (int i = 0; i < 10; ++i)
906       ;
907   }
908 #pragma omp sections
909   {
910 #pragma omp parallel
911     for (int i = 0; i < 10; ++i)
912       ;
913   }
914 #pragma omp sections
915   {
916 #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?}}
917     {
918       bar();
919     }
920   }
921 #pragma omp sections
922   {
923 #pragma omp section
924     {
925       bar();
926     }
927   }
928 #pragma omp sections
929   {
930 #pragma omp parallel
931     {
932 #pragma omp single // OK
933       {
934         bar();
935       }
936 #pragma omp for // OK
937       for (int i = 0; i < 10; ++i)
938         ;
939 #pragma omp sections // OK
940       {
941         bar();
942       }
943     }
944   }
945 #pragma omp sections
946   {
947 #pragma omp parallel
948     {
949 #pragma omp master // OK
950       {
951         bar();
952       }
953 #pragma omp for // OK
954       for (int i = 0; i < 10; ++i)
955         ;
956 #pragma omp master // OK
957       {
958         bar();
959       }
960     }
961 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
962     bar();
963   }
964 #pragma omp sections
965   {
966 #pragma omp parallel
967     {
968 #pragma omp critical(A) // OK
969       {
970         bar();
971       }
972 #pragma omp for // OK
973       for (int i = 0; i < 10; ++i)
974         ;
975 #pragma omp critical // OK
976       {
977         bar();
978       }
979     }
980 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
981     bar();
982   }
983 #pragma omp sections
984   {
985 #pragma omp parallel for
986     for (int i = 0; i < 10; ++i)
987       ;
988   }
989 #pragma omp sections
990   {
991 #pragma omp parallel for simd
992     for (int i = 0; i < 10; ++i)
993       ;
994   }
995 #pragma omp sections
996   {
997 #pragma omp parallel sections
998     {
999       bar();
1000     }
1001   }
1002 #pragma omp sections
1003   {
1004 #pragma omp task
1005     {
1006       bar();
1007     }
1008   }
1009 #pragma omp sections
1010   {
1011 #pragma omp taskyield
1012   }
1013 #pragma omp sections
1014   {
1015 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1016   }
1017 #pragma omp sections
1018   {
1019 #pragma omp taskwait
1020   }
1021 #pragma omp sections
1022   {
1023 #pragma omp flush
1024   }
1025 #pragma omp sections
1026   {
1027 #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?}}
1028     bar();
1029   }
1030 #pragma omp sections
1031   {
1032 #pragma omp atomic
1033     ++a;
1034   }
1035 #pragma omp sections
1036   {
1037 #pragma omp target
1038     ++a;
1039   }
1040 #pragma omp sections
1041   {
1042 #pragma omp target parallel
1043     ++a;
1044   }
1045 #pragma omp sections
1046   {
1047 #pragma omp target parallel for
1048     for (int i = 0; i < 10; ++i)
1049       ;
1050   }
1051 #pragma omp sections
1052   {
1053 #pragma omp target enter data map(to: a)
1054   }
1055 #pragma omp sections
1056   {
1057 #pragma omp target exit data map(from: a)
1058   }
1059 #pragma omp sections
1060   {
1061 #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?}}
1062     ++a;
1063   }
1064 #pragma omp sections
1065   {
1066 #pragma omp taskloop
1067   for (int i = 0; i < 10; ++i)
1068     ++a;
1069   }
1070 #pragma omp sections
1071   {
1072 #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?}}
1073     for (int i = 0; i < 10; ++i)
1074       ;
1075   }
1076 #pragma omp sections
1077   {
1078 #pragma omp target update to(a)
1079   }
1080 #pragma omp sections
1081   {
1082 #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?}}
1083     for (int i = 0; i < 10; ++i)
1084       ;
1085   }
1086 #pragma omp sections
1087   {
1088 #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?}}
1089     for (int i = 0; i < 10; ++i)
1090       ;
1091   }
1092 #pragma omp sections
1093   {
1094 #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?}}
1095     for (int i = 0; i < 10; ++i)
1096       ;
1097   }
1098 #pragma omp sections
1099   {
1100 #pragma omp target simd // OK
1101     for (int i = 0; i < 10; ++i)
1102       ;
1103   }
1104 #pragma omp sections
1105   {
1106 #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?}}
1107     for (int i = 0; i < 10; ++i)
1108       ;
1109   }
1110 #pragma omp sections
1111   {
1112 #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?}}
1113     for (int i = 0; i < 10; ++i)
1114       ;
1115   }
1116 #pragma omp sections
1117   {
1118 #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?}}
1119     for (int i = 0; i < 10; ++i)
1120       ;
1121   }
1122 #pragma omp sections
1123   {
1124 #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?}}
1125     for (int i = 0; i < 10; ++i)
1126       ;
1127   }
1128 #pragma omp sections
1129   {
1130 #pragma omp target teams // OK
1131     ++a;
1132   }
1133 
1134 // SECTION DIRECTIVE
1135 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1136   {
1137     bar();
1138   }
1139 #pragma omp sections
1140   {
1141 #pragma omp section
1142     {
1143 #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?}}
1144       for (int i = 0; i < 10; ++i)
1145         ;
1146     }
1147   }
1148 #pragma omp sections
1149   {
1150 #pragma omp section
1151     {
1152 #pragma omp simd
1153       for (int i = 0; i < 10; ++i)
1154         ;
1155     }
1156   }
1157 #pragma omp sections
1158   {
1159 #pragma omp section
1160     {
1161 #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?}}
1162       for (int i = 0; i < 10; ++i)
1163         ;
1164     }
1165   }
1166 #pragma omp sections
1167   {
1168 #pragma omp section
1169     {
1170 #pragma omp parallel
1171       for (int i = 0; i < 10; ++i)
1172         ;
1173     }
1174   }
1175 #pragma omp sections
1176   {
1177 #pragma omp section
1178     {
1179 #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?}}
1180       {
1181         bar();
1182       }
1183     }
1184   }
1185 #pragma omp sections
1186   {
1187 #pragma omp section
1188     {
1189 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1190       {
1191         bar();
1192       }
1193     }
1194   }
1195 #pragma omp sections
1196   {
1197 #pragma omp section
1198     {
1199 #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?}}
1200       bar();
1201 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1202       bar();
1203 #pragma omp critical
1204       bar();
1205     }
1206   }
1207 #pragma omp sections
1208   {
1209 #pragma omp section
1210     {
1211 #pragma omp parallel
1212       {
1213 #pragma omp single // OK
1214         {
1215           bar();
1216         }
1217 #pragma omp for // OK
1218         for (int i = 0; i < 10; ++i)
1219           ;
1220 #pragma omp for simd // OK
1221         for (int i = 0; i < 10; ++i)
1222           ;
1223 #pragma omp sections // OK
1224         {
1225           bar();
1226         }
1227       }
1228     }
1229   }
1230 #pragma omp sections
1231   {
1232 #pragma omp section
1233     {
1234 #pragma omp parallel for
1235       for (int i = 0; i < 10; ++i)
1236         ;
1237     }
1238   }
1239 #pragma omp sections
1240   {
1241 #pragma omp section
1242     {
1243 #pragma omp parallel for simd
1244       for (int i = 0; i < 10; ++i)
1245         ;
1246     }
1247   }
1248 #pragma omp sections
1249   {
1250 #pragma omp section
1251     {
1252 #pragma omp parallel sections
1253       {
1254         bar();
1255       }
1256     }
1257   }
1258 #pragma omp sections
1259   {
1260 #pragma omp section
1261     {
1262 #pragma omp task
1263       {
1264         bar();
1265       }
1266     }
1267   }
1268 #pragma omp sections
1269   {
1270 #pragma omp section
1271     {
1272 #pragma omp taskyield
1273       bar();
1274     }
1275   }
1276 #pragma omp sections
1277   {
1278 #pragma omp section
1279     {
1280 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1281       bar();
1282     }
1283   }
1284 #pragma omp sections
1285   {
1286 #pragma omp section
1287     {
1288 #pragma omp taskwait
1289       bar();
1290     }
1291   }
1292 #pragma omp sections
1293   {
1294 #pragma omp section
1295     {
1296 #pragma omp flush
1297       bar();
1298     }
1299   }
1300 #pragma omp sections
1301   {
1302 #pragma omp section
1303     {
1304 #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?}}
1305       bar();
1306     }
1307   }
1308 #pragma omp sections
1309   {
1310 #pragma omp section
1311 #pragma omp atomic
1312     ++a;
1313   }
1314 #pragma omp sections
1315   {
1316 #pragma omp section
1317 #pragma omp target
1318     ++a;
1319   }
1320 #pragma omp sections
1321   {
1322 #pragma omp section
1323 #pragma omp target parallel
1324     ++a;
1325   }
1326 #pragma omp sections
1327   {
1328 #pragma omp section
1329     {
1330 #pragma omp target parallel for
1331       for (int i = 0; i < 10; ++i)
1332         ;
1333     }
1334   }
1335 #pragma omp sections
1336   {
1337 #pragma omp section
1338     {
1339 #pragma omp target enter data map(to: a)
1340       ++a;
1341     }
1342   }
1343 #pragma omp sections
1344   {
1345 #pragma omp section
1346     {
1347 #pragma omp target exit data map(from: a)
1348       ++a;
1349     }
1350   }
1351 #pragma omp sections
1352   {
1353 #pragma omp section
1354 #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?}}
1355     ++a;
1356   }
1357 #pragma omp sections
1358   {
1359 #pragma omp section
1360 #pragma omp taskloop
1361   for (int i = 0; i < 10; ++i)
1362     ++a;
1363   }
1364 #pragma omp sections
1365   {
1366 #pragma omp section
1367 #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?}}
1368     for (int i = 0; i < 10; ++i)
1369       ;
1370   }
1371 #pragma omp sections
1372   {
1373 #pragma omp section
1374     {
1375       bar();
1376 #pragma omp target update to(a)
1377     }
1378   }
1379 #pragma omp sections
1380   {
1381 #pragma omp section
1382 #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?}}
1383     for (int i = 0; i < 10; ++i)
1384       ;
1385   }
1386 #pragma omp sections
1387   {
1388 #pragma omp section
1389 #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?}}
1390     for (int i = 0; i < 10; ++i)
1391       ;
1392   }
1393 #pragma omp sections
1394   {
1395 #pragma omp section
1396 #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?}}
1397     for (int i = 0; i < 10; ++i)
1398       ;
1399   }
1400 #pragma omp sections
1401   {
1402 #pragma omp section
1403 #pragma omp target simd // OK
1404     for (int i = 0; i < 10; ++i)
1405       ;
1406   }
1407 #pragma omp sections
1408   {
1409 #pragma omp section
1410 #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?}}
1411     for (int i = 0; i < 10; ++i)
1412       ;
1413   }
1414 #pragma omp sections
1415   {
1416 #pragma omp section
1417 #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?}}
1418     for (int i = 0; i < 10; ++i)
1419       ;
1420   }
1421 #pragma omp sections
1422   {
1423 #pragma omp section
1424 #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?}}
1425     for (int i = 0; i < 10; ++i)
1426       ;
1427   }
1428 #pragma omp sections
1429   {
1430 #pragma omp section
1431 #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?}}
1432     for (int i = 0; i < 10; ++i)
1433       ;
1434   }
1435 #pragma omp sections
1436   {
1437 #pragma omp section
1438 #pragma omp target teams // OK
1439     ++a;
1440   }
1441 
1442 // SINGLE DIRECTIVE
1443 #pragma omp single
1444   {
1445 #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?}}
1446     for (int i = 0; i < 10; ++i)
1447       ;
1448   }
1449 #pragma omp single
1450   {
1451 #pragma omp simd
1452     for (int i = 0; i < 10; ++i)
1453       ;
1454   }
1455 #pragma omp single
1456   {
1457 #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?}}
1458     for (int i = 0; i < 10; ++i)
1459       ;
1460   }
1461 #pragma omp single
1462   {
1463 #pragma omp parallel
1464     for (int i = 0; i < 10; ++i)
1465       ;
1466   }
1467 #pragma omp single
1468   {
1469 #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?}}
1470     {
1471       bar();
1472     }
1473   }
1474 #pragma omp single
1475   {
1476 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1477     {
1478       bar();
1479     }
1480   }
1481 #pragma omp single
1482   {
1483 #pragma omp critical
1484     {
1485       bar();
1486     }
1487   }
1488 #pragma omp single
1489   {
1490 #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?}}
1491     {
1492       bar();
1493     }
1494   }
1495 #pragma omp single
1496   {
1497 #pragma omp parallel
1498     {
1499 #pragma omp single // OK
1500       {
1501         bar();
1502       }
1503 #pragma omp for // OK
1504       for (int i = 0; i < 10; ++i)
1505         ;
1506 #pragma omp for simd // OK
1507       for (int i = 0; i < 10; ++i)
1508         ;
1509 #pragma omp sections // OK
1510       {
1511         bar();
1512       }
1513     }
1514   }
1515 #pragma omp single
1516   {
1517 #pragma omp parallel for
1518     for (int i = 0; i < 10; ++i)
1519       ;
1520   }
1521 #pragma omp single
1522   {
1523 #pragma omp parallel for simd
1524     for (int i = 0; i < 10; ++i)
1525       ;
1526   }
1527 #pragma omp single
1528   {
1529 #pragma omp parallel sections
1530     {
1531       bar();
1532     }
1533   }
1534 #pragma omp single
1535   {
1536 #pragma omp task
1537     {
1538       bar();
1539     }
1540   }
1541 #pragma omp single
1542   {
1543 #pragma omp taskyield
1544     bar();
1545   }
1546 #pragma omp single
1547   {
1548 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1549     bar();
1550   }
1551 #pragma omp single
1552   {
1553 #pragma omp taskwait
1554     bar();
1555   }
1556 #pragma omp single
1557   {
1558 #pragma omp flush
1559     bar();
1560   }
1561 #pragma omp single
1562   {
1563 #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?}}
1564     bar();
1565   }
1566 #pragma omp single
1567   {
1568 #pragma omp atomic
1569     ++a;
1570   }
1571 #pragma omp single
1572   {
1573 #pragma omp target
1574     ++a;
1575   }
1576 #pragma omp single
1577   {
1578 #pragma omp target parallel
1579     ++a;
1580   }
1581 #pragma omp single
1582   {
1583 #pragma omp target parallel for
1584     for (int i = 0; i < 10; ++i)
1585       ;
1586   }
1587 #pragma omp single
1588   {
1589 #pragma omp target enter data map(to: a)
1590     ++a;
1591   }
1592 #pragma omp single
1593   {
1594 #pragma omp target exit data map(from: a)
1595     ++a;
1596   }
1597 #pragma omp single
1598   {
1599 #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?}}
1600     ++a;
1601   }
1602 #pragma omp single
1603   {
1604 #pragma omp taskloop
1605   for (int i = 0; i < 10; ++i)
1606     ++a;
1607   }
1608 #pragma omp single
1609   {
1610 #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?}}
1611     for (int i = 0; i < 10; ++i)
1612       ;
1613   }
1614 #pragma omp single
1615   {
1616 #pragma omp target update to(a)
1617     bar();
1618   }
1619 #pragma omp single
1620   {
1621 #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?}}
1622     for (int i = 0; i < 10; ++i)
1623       ;
1624   }
1625 #pragma omp single
1626   {
1627 #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?}}
1628     for (int i = 0; i < 10; ++i)
1629       ;
1630   }
1631 #pragma omp single
1632   {
1633 #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?}}
1634     for (int i = 0; i < 10; ++i)
1635       ;
1636   }
1637 #pragma omp single
1638   {
1639 #pragma omp target simd // OK
1640     for (int i = 0; i < 10; ++i)
1641       ;
1642   }
1643 #pragma omp single
1644   {
1645 #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?}}
1646     for (int i = 0; i < 10; ++i)
1647       ;
1648   }
1649 #pragma omp single
1650   {
1651 #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?}}
1652     for (int i = 0; i < 10; ++i)
1653       ;
1654   }
1655 #pragma omp single
1656   {
1657 #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?}}
1658     for (int i = 0; i < 10; ++i)
1659       ;
1660   }
1661 #pragma omp single
1662   {
1663 #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?}}
1664     for (int i = 0; i < 10; ++i)
1665       ;
1666   }
1667 #pragma omp single
1668   {
1669 #pragma omp target teams // OK
1670     ++a;
1671   }
1672 
1673 // MASTER DIRECTIVE
1674 #pragma omp master
1675   {
1676 #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?}}
1677     for (int i = 0; i < 10; ++i)
1678       ;
1679   }
1680 #pragma omp master
1681   {
1682 #pragma omp simd
1683     for (int i = 0; i < 10; ++i)
1684       ;
1685   }
1686 #pragma omp master
1687   {
1688 #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?}}
1689     for (int i = 0; i < 10; ++i)
1690       ;
1691   }
1692 #pragma omp master
1693   {
1694 #pragma omp parallel
1695     for (int i = 0; i < 10; ++i)
1696       ;
1697   }
1698 #pragma omp master
1699   {
1700 #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?}}
1701     {
1702       bar();
1703     }
1704   }
1705 #pragma omp master
1706   {
1707 #pragma omp master // OK, though second 'master' is redundant
1708     {
1709       bar();
1710     }
1711   }
1712 #pragma omp master
1713   {
1714 #pragma omp critical
1715     {
1716       bar();
1717     }
1718   }
1719 #pragma omp master
1720   {
1721 #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?}}
1722     {
1723       bar();
1724     }
1725   }
1726 #pragma omp master
1727   {
1728 #pragma omp parallel
1729     {
1730 #pragma omp master // OK
1731       {
1732         bar();
1733       }
1734 #pragma omp for // OK
1735       for (int i = 0; i < 10; ++i)
1736         ;
1737 #pragma omp for simd // OK
1738       for (int i = 0; i < 10; ++i)
1739         ;
1740 #pragma omp sections // OK
1741       {
1742         bar();
1743       }
1744     }
1745   }
1746 #pragma omp master
1747   {
1748 #pragma omp parallel for
1749     for (int i = 0; i < 10; ++i)
1750       ;
1751   }
1752 #pragma omp master
1753   {
1754 #pragma omp parallel for simd
1755     for (int i = 0; i < 10; ++i)
1756       ;
1757   }
1758 #pragma omp master
1759   {
1760 #pragma omp parallel sections
1761     {
1762       bar();
1763     }
1764   }
1765 #pragma omp master
1766   {
1767 #pragma omp task
1768     {
1769       bar();
1770     }
1771   }
1772 #pragma omp master
1773   {
1774 #pragma omp taskyield
1775     bar();
1776   }
1777 #pragma omp master
1778   {
1779 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1780     bar();
1781   }
1782 #pragma omp master
1783   {
1784 #pragma omp taskwait
1785     bar();
1786   }
1787 #pragma omp master
1788   {
1789 #pragma omp flush
1790     bar();
1791   }
1792 #pragma omp master
1793   {
1794 #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?}}
1795     bar();
1796   }
1797 #pragma omp master
1798   {
1799 #pragma omp atomic
1800     ++a;
1801   }
1802 #pragma omp master
1803   {
1804 #pragma omp target
1805     ++a;
1806   }
1807 #pragma omp master
1808   {
1809 #pragma omp target parallel
1810     ++a;
1811   }
1812 #pragma omp master
1813   {
1814 #pragma omp target parallel for
1815     for (int i = 0; i < 10; ++i)
1816       ;
1817   }
1818 #pragma omp master
1819   {
1820 #pragma omp target enter data map(to: a)
1821     ++a;
1822   }
1823 #pragma omp master
1824   {
1825 #pragma omp target exit data map(from: a)
1826     ++a;
1827   }
1828 #pragma omp master
1829   {
1830 #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?}}
1831     ++a;
1832   }
1833 #pragma omp master
1834   {
1835 #pragma omp taskloop
1836   for (int i = 0; i < 10; ++i)
1837     ++a;
1838   }
1839 #pragma omp master
1840   {
1841 #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?}}
1842     for (int i = 0; i < 10; ++i)
1843       ;
1844   }
1845 #pragma omp master
1846   {
1847 #pragma omp target update to(a)
1848     bar();
1849   }
1850 #pragma omp master
1851   {
1852 #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?}}
1853     for (int i = 0; i < 10; ++i)
1854       ;
1855   }
1856 #pragma omp master
1857   {
1858 #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?}}
1859     for (int i = 0; i < 10; ++i)
1860       ;
1861   }
1862 #pragma omp master
1863   {
1864 #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?}}
1865     for (int i = 0; i < 10; ++i)
1866       ;
1867   }
1868 #pragma omp master
1869   {
1870 #pragma omp target simd // OK
1871     for (int i = 0; i < 10; ++i)
1872       ;
1873   }
1874 #pragma omp master
1875   {
1876 #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?}}
1877     for (int i = 0; i < 10; ++i)
1878       ;
1879   }
1880 #pragma omp master
1881   {
1882 #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?}}
1883     for (int i = 0; i < 10; ++i)
1884       ;
1885   }
1886 #pragma omp master
1887   {
1888 #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?}}
1889     for (int i = 0; i < 10; ++i)
1890       ;
1891   }
1892 #pragma omp master
1893   {
1894 #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?}}
1895     for (int i = 0; i < 10; ++i)
1896       ;
1897   }
1898 #pragma omp master
1899   {
1900 #pragma omp target teams // OK
1901     a++;
1902   }
1903 
1904 // CRITICAL DIRECTIVE
1905 #pragma omp critical
1906   {
1907 #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?}}
1908     for (int i = 0; i < 10; ++i)
1909       ;
1910   }
1911 #pragma omp critical
1912   {
1913 #pragma omp simd
1914     for (int i = 0; i < 10; ++i)
1915       ;
1916   }
1917 #pragma omp critical
1918   {
1919 #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?}}
1920     for (int i = 0; i < 10; ++i)
1921       ;
1922   }
1923 #pragma omp critical
1924   {
1925 #pragma omp parallel
1926     for (int i = 0; i < 10; ++i)
1927       ;
1928   }
1929 #pragma omp critical
1930   {
1931 #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?}}
1932     {
1933       bar();
1934     }
1935   }
1936 #pragma omp critical
1937   {
1938 #pragma omp master // OK, though second 'master' is redundant
1939     {
1940       bar();
1941     }
1942   }
1943 #pragma omp critical
1944   {
1945 #pragma omp critical
1946     {
1947       bar();
1948     }
1949   }
1950 #pragma omp critical
1951   {
1952 #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?}}
1953     {
1954       bar();
1955     }
1956   }
1957 #pragma omp critical
1958   {
1959 #pragma omp parallel
1960     {
1961 #pragma omp master // OK
1962       {
1963         bar();
1964       }
1965 #pragma omp for // OK
1966       for (int i = 0; i < 10; ++i)
1967         ;
1968 #pragma omp for simd // OK
1969       for (int i = 0; i < 10; ++i)
1970         ;
1971 #pragma omp sections // OK
1972       {
1973         bar();
1974       }
1975     }
1976   }
1977 #pragma omp critical
1978   {
1979 #pragma omp parallel for
1980     for (int i = 0; i < 10; ++i)
1981       ;
1982   }
1983 #pragma omp critical
1984   {
1985 #pragma omp parallel for simd
1986     for (int i = 0; i < 10; ++i)
1987       ;
1988   }
1989 #pragma omp critical
1990   {
1991 #pragma omp parallel sections
1992     {
1993       bar();
1994     }
1995   }
1996 #pragma omp critical
1997   {
1998 #pragma omp task
1999     {
2000       bar();
2001     }
2002   }
2003 #pragma omp critical
2004   {
2005 #pragma omp taskyield
2006     bar();
2007   }
2008 #pragma omp critical
2009   {
2010 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2011     bar();
2012   }
2013 #pragma omp critical
2014   {
2015 #pragma omp taskwait
2016     bar();
2017   }
2018 #pragma omp critical(Tuzik)
2019   {
2020 #pragma omp critical(grelka)
2021     bar();
2022   }
2023 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2024   {
2025 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2026     {
2027 #pragma omp critical(Tuzik)
2028       {
2029 #pragma omp parallel
2030 #pragma omp critical(grelka)
2031         {
2032           bar();
2033         }
2034       }
2035     }
2036   }
2037 #pragma omp critical
2038   {
2039 #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?}}
2040     bar();
2041   }
2042 #pragma omp critical
2043   {
2044 #pragma omp atomic
2045     ++a;
2046   }
2047 #pragma omp critical
2048   {
2049 #pragma omp target
2050     ++a;
2051   }
2052 #pragma omp critical
2053   {
2054 #pragma omp target parallel
2055     ++a;
2056   }
2057 #pragma omp critical
2058   {
2059 #pragma omp target parallel for
2060     for (int i = 0; i < 10; ++i)
2061       ;
2062   }
2063 #pragma omp critical
2064   {
2065 #pragma omp target enter data map(to: a)
2066     ++a;
2067   }
2068 #pragma omp critical
2069   {
2070 #pragma omp target exit data map(from: a)
2071     ++a;
2072   }
2073 #pragma omp critical
2074   {
2075 #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?}}
2076     ++a;
2077   }
2078 #pragma omp critical
2079   {
2080 #pragma omp taskloop
2081   for (int i = 0; i < 10; ++i)
2082     ++a;
2083   }
2084 #pragma omp critical
2085   {
2086 #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?}}
2087     for (int i = 0; i < 10; ++i)
2088       ;
2089   }
2090 #pragma omp critical
2091   {
2092 #pragma omp target update to(a)
2093     bar();
2094   }
2095 #pragma omp critical
2096   {
2097 #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?}}
2098     for (int i = 0; i < 10; ++i)
2099       ;
2100   }
2101 #pragma omp critical
2102   {
2103 #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?}}
2104     for (int i = 0; i < 10; ++i)
2105       ;
2106   }
2107 #pragma omp critical
2108   {
2109 #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?}}
2110     for (int i = 0; i < 10; ++i)
2111       ;
2112   }
2113 #pragma omp critical
2114   {
2115 #pragma omp target simd // OK
2116     for (int i = 0; i < 10; ++i)
2117       ;
2118   }
2119 #pragma omp critical
2120   {
2121 #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?}}
2122     for (int i = 0; i < 10; ++i)
2123       ;
2124   }
2125 #pragma omp critical
2126   {
2127 #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?}}
2128     for (int i = 0; i < 10; ++i)
2129       ;
2130   }
2131 #pragma omp critical
2132   {
2133 #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?}}
2134     for (int i = 0; i < 10; ++i)
2135       ;
2136   }
2137 #pragma omp critical
2138   {
2139 #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?}}
2140     for (int i = 0; i < 10; ++i)
2141       ;
2142   }
2143 #pragma omp critical
2144   {
2145 #pragma omp target teams // OK
2146     a++;
2147   }
2148 
2149 // PARALLEL FOR DIRECTIVE
2150 #pragma omp parallel for
2151   for (int i = 0; i < 10; ++i) {
2152 #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?}}
2153     for (int i = 0; i < 10; ++i)
2154       ;
2155   }
2156 #pragma omp parallel for
2157   for (int i = 0; i < 10; ++i) {
2158 #pragma omp simd
2159     for (int i = 0; i < 10; ++i)
2160       ;
2161   }
2162 #pragma omp parallel for
2163   for (int i = 0; i < 10; ++i) {
2164 #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?}}
2165     for (int i = 0; i < 10; ++i)
2166       ;
2167   }
2168 #pragma omp parallel for
2169   for (int i = 0; i < 10; ++i) {
2170 #pragma omp parallel
2171     for (int i = 0; i < 10; ++i)
2172       ;
2173   }
2174 #pragma omp parallel for
2175   for (int i = 0; i < 10; ++i) {
2176 #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?}}
2177     {
2178       bar();
2179     }
2180   }
2181 #pragma omp parallel for
2182   for (int i = 0; i < 10; ++i) {
2183 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2184     {
2185       bar();
2186     }
2187   }
2188 #pragma omp parallel for
2189   for (int i = 0; i < 10; ++i) {
2190 #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?}}
2191     {
2192       bar();
2193     }
2194   }
2195 
2196 #pragma omp parallel for
2197   for (int i = 0; i < 10; ++i) {
2198 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2199     {
2200       bar();
2201     }
2202   }
2203 
2204 #pragma omp parallel for
2205   for (int i = 0; i < 10; ++i) {
2206 #pragma omp critical
2207     {
2208       bar();
2209     }
2210   }
2211 
2212 #pragma omp parallel for
2213   for (int i = 0; i < 10; ++i) {
2214 #pragma omp parallel
2215     {
2216 #pragma omp single // OK
2217       {
2218         bar();
2219       }
2220 #pragma omp for // OK
2221       for (int i = 0; i < 10; ++i)
2222         ;
2223 #pragma omp for simd // OK
2224       for (int i = 0; i < 10; ++i)
2225         ;
2226 #pragma omp sections // OK
2227       {
2228         bar();
2229       }
2230     }
2231   }
2232 #pragma omp parallel for
2233   for (int i = 0; i < 10; ++i) {
2234 #pragma omp parallel for
2235     for (int i = 0; i < 10; ++i)
2236       ;
2237   }
2238 #pragma omp parallel for
2239   for (int i = 0; i < 10; ++i) {
2240 #pragma omp parallel for simd
2241     for (int i = 0; i < 10; ++i)
2242       ;
2243   }
2244 #pragma omp parallel for
2245   for (int i = 0; i < 10; ++i) {
2246 #pragma omp parallel sections
2247     {
2248       bar();
2249     }
2250   }
2251 #pragma omp parallel for
2252   for (int i = 0; i < 10; ++i) {
2253 #pragma omp task
2254     {
2255       bar();
2256     }
2257   }
2258 #pragma omp parallel for
2259   for (int i = 0; i < 10; ++i) {
2260 #pragma omp taskyield
2261     bar();
2262   }
2263 #pragma omp parallel for
2264   for (int i = 0; i < 10; ++i) {
2265 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2266     bar();
2267   }
2268 #pragma omp parallel for
2269   for (int i = 0; i < 10; ++i) {
2270 #pragma omp taskwait
2271     bar();
2272   }
2273 #pragma omp parallel for
2274   for (int i = 0; i < 10; ++i) {
2275 #pragma omp flush
2276     bar();
2277   }
2278 #pragma omp parallel for
2279   for (int i = 0; i < 10; ++i) {
2280 #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?}}
2281     bar();
2282   }
2283 #pragma omp parallel for ordered
2284   for (int i = 0; i < 10; ++i) {
2285 #pragma omp ordered // OK
2286     bar();
2287   }
2288 #pragma omp parallel for
2289   for (int i = 0; i < 10; ++i) {
2290 #pragma omp atomic
2291     ++a;
2292   }
2293 #pragma omp parallel for
2294   for (int i = 0; i < 10; ++i) {
2295 #pragma omp target
2296     ++a;
2297   }
2298 #pragma omp parallel for
2299   for (int i = 0; i < 10; ++i) {
2300 #pragma omp target parallel
2301     ++a;
2302   }
2303 #pragma omp parallel for
2304   for (int i = 0; i < 10; ++i) {
2305 #pragma omp target parallel for
2306     for (int i = 0; i < 10; ++i)
2307       ;
2308   }
2309 #pragma omp parallel for
2310   for (int i = 0; i < 10; ++i) {
2311 #pragma omp target enter data map(to: a)
2312     ++a;
2313   }
2314 #pragma omp parallel for
2315   for (int i = 0; i < 10; ++i) {
2316 #pragma omp target exit data map(from: a)
2317     ++a;
2318   }
2319 #pragma omp parallel for
2320   for (int i = 0; i < 10; ++i) {
2321 #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?}}
2322     ++a;
2323   }
2324 #pragma omp parallel for
2325   for (int i = 0; i < 10; ++i) {
2326 #pragma omp taskloop
2327   for (int i = 0; i < 10; ++i)
2328     ++a;
2329   }
2330 #pragma omp parallel for
2331   for (int i = 0; i < 10; ++i) {
2332 #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?}}
2333     for (int j = 0; j < 10; ++j)
2334       ;
2335   }
2336 #pragma omp parallel for
2337   for (int i = 0; i < 10; ++i) {
2338 #pragma omp target update to(a)
2339   }
2340 #pragma omp parallel for
2341   for (int i = 0; i < 10; ++i) {
2342 #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?}}
2343     for (int j = 0; j < 10; ++j)
2344       ;
2345   }
2346 #pragma omp parallel for
2347   for (int i = 0; i < 10; ++i) {
2348 #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?}}
2349     for (int j = 0; j < 10; ++j)
2350       ;
2351   }
2352 #pragma omp parallel for
2353   for (int i = 0; i < 10; ++i) {
2354 #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?}}
2355     for (int j = 0; j < 10; ++j)
2356       ;
2357   }
2358 #pragma omp parallel for
2359   for (int i = 0; i < 10; ++i) {
2360 #pragma omp target simd // OK
2361     for (int j = 0; j < 10; ++j)
2362       ;
2363   }
2364 #pragma omp parallel for
2365   for (int i = 0; i < 10; ++i) {
2366 #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?}}
2367     for (int j = 0; j < 10; ++j)
2368       ;
2369   }
2370 #pragma omp parallel for
2371   for (int i = 0; i < 10; ++i) {
2372 #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?}}
2373     for (int j = 0; j < 10; ++j)
2374       ;
2375   }
2376 #pragma omp parallel for
2377   for (int i = 0; i < 10; ++i) {
2378 #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?}}
2379     for (int j = 0; j < 10; ++j)
2380       ;
2381   }
2382 #pragma omp parallel for
2383   for (int i = 0; i < 10; ++i) {
2384 #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?}}
2385     for (int j = 0; j < 10; ++j)
2386       ;
2387   }
2388 #pragma omp parallel for
2389   for (int i = 0; i < 10; ++i) {
2390 #pragma omp target teams // OK
2391     a++;
2392   }
2393 
2394 // PARALLEL FOR SIMD DIRECTIVE
2395 #pragma omp parallel for simd
2396   for (int i = 0; i < 10; ++i) {
2397 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2398     for (int i = 0; i < 10; ++i)
2399       ;
2400   }
2401 #pragma omp parallel for simd
2402   for (int i = 0; i < 10; ++i) {
2403 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2404     for (int i = 0; i < 10; ++i)
2405       ;
2406   }
2407 #pragma omp parallel for simd
2408   for (int i = 0; i < 10; ++i) {
2409 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2410     for (int i = 0; i < 10; ++i)
2411       ;
2412   }
2413 #pragma omp parallel for simd
2414   for (int i = 0; i < 10; ++i) {
2415 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2416     for (int i = 0; i < 10; ++i)
2417       ;
2418   }
2419 #pragma omp parallel for simd
2420   for (int i = 0; i < 10; ++i) {
2421 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2422     {
2423       bar();
2424     }
2425   }
2426 #pragma omp parallel for simd
2427   for (int i = 0; i < 10; ++i) {
2428 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2429     {
2430       bar();
2431     }
2432   }
2433 #pragma omp parallel for simd
2434   for (int i = 0; i < 10; ++i) {
2435 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2436     {
2437       bar();
2438     }
2439   }
2440 
2441 #pragma omp parallel for simd
2442   for (int i = 0; i < 10; ++i) {
2443 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2444     {
2445       bar();
2446     }
2447   }
2448 
2449 #pragma omp parallel for simd
2450   for (int i = 0; i < 10; ++i) {
2451 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2452     {
2453       bar();
2454     }
2455   }
2456 
2457 #pragma omp parallel for simd
2458   for (int i = 0; i < 10; ++i) {
2459 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2460     {
2461 #pragma omp single
2462       {
2463         bar();
2464       }
2465 #pragma omp for
2466       for (int i = 0; i < 10; ++i)
2467         ;
2468 #pragma omp for simd
2469       for (int i = 0; i < 10; ++i)
2470         ;
2471 #pragma omp sections
2472       {
2473         bar();
2474       }
2475     }
2476   }
2477 #pragma omp parallel for simd
2478   for (int i = 0; i < 10; ++i) {
2479 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2480     for (int i = 0; i < 10; ++i)
2481       ;
2482   }
2483 #pragma omp parallel for simd
2484   for (int i = 0; i < 10; ++i) {
2485 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2486     for (int i = 0; i < 10; ++i)
2487       ;
2488   }
2489 #pragma omp parallel for simd
2490   for (int i = 0; i < 10; ++i) {
2491 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2492     {
2493       bar();
2494     }
2495   }
2496 #pragma omp parallel for simd
2497   for (int i = 0; i < 10; ++i) {
2498 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2499     {
2500       bar();
2501     }
2502   }
2503 #pragma omp parallel for simd
2504   for (int i = 0; i < 10; ++i) {
2505 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2506     bar();
2507   }
2508 #pragma omp parallel for simd
2509   for (int i = 0; i < 10; ++i) {
2510 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2511     bar();
2512   }
2513 #pragma omp parallel for simd
2514   for (int i = 0; i < 10; ++i) {
2515 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2516     bar();
2517   }
2518 #pragma omp parallel for simd
2519   for (int i = 0; i < 10; ++i) {
2520 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2521     bar();
2522   }
2523 #pragma omp parallel for simd
2524   for (int i = 0; i < 10; ++i) {
2525 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2526     bar();
2527   }
2528 #pragma omp parallel for simd
2529   for (int i = 0; i < 10; ++i) {
2530 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2531     bar();
2532   }
2533 #pragma omp parallel for simd
2534   for (int i = 0; i < 10; ++i) {
2535 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2536     ++a;
2537   }
2538 #pragma omp parallel for simd
2539   for (int i = 0; i < 10; ++i) {
2540 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2541     ++a;
2542   }
2543 #pragma omp parallel for simd
2544   for (int i = 0; i < 10; ++i) {
2545 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2546     ++a;
2547   }
2548 #pragma omp parallel for simd
2549   for (int i = 0; i < 10; ++i) {
2550 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2551     for (int i = 0; i < 10; ++i)
2552       ;
2553   }
2554 #pragma omp parallel for simd
2555   for (int i = 0; i < 10; ++i) {
2556 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2557     ++a;
2558   }
2559 #pragma omp parallel for simd
2560   for (int i = 0; i < 10; ++i) {
2561 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2562     ++a;
2563   }
2564 #pragma omp parallel for simd
2565   for (int i = 0; i < 10; ++i) {
2566 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2567     ++a;
2568   }
2569 #pragma omp parallel for simd
2570   for (int i = 0; i < 10; ++i) {
2571 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2572   for (int i = 0; i < 10; ++i)
2573     ++a;
2574   }
2575 #pragma omp parallel for simd
2576   for (int i = 0; i < 10; ++i) {
2577 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2578     for (int j = 0; j < 10; ++j)
2579       ;
2580   }
2581 #pragma omp parallel for simd
2582   for (int i = 0; i < 10; ++i) {
2583 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2584     bar();
2585   }
2586 #pragma omp parallel for simd
2587   for (int i = 0; i < 10; ++i) {
2588 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2589     for (int j = 0; j < 10; ++j)
2590       ;
2591   }
2592 #pragma omp parallel for simd
2593   for (int i = 0; i < 10; ++i) {
2594 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2595     for (int j = 0; j < 10; ++j)
2596       ;
2597   }
2598 #pragma omp parallel for simd
2599   for (int i = 0; i < 10; ++i) {
2600 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2601     for (int j = 0; j < 10; ++j)
2602       ;
2603   }
2604 #pragma omp parallel for simd
2605   for (int i = 0; i < 10; ++i) {
2606 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2607     for (int j = 0; j < 10; ++j)
2608       ;
2609   }
2610 #pragma omp parallel for simd
2611   for (int i = 0; i < 10; ++i) {
2612 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2613     for (int j = 0; j < 10; ++j)
2614       ;
2615   }
2616 #pragma omp parallel for simd
2617   for (int i = 0; i < 10; ++i) {
2618 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2619     for (int j = 0; j < 10; ++j)
2620       ;
2621   }
2622 #pragma omp parallel for simd
2623   for (int i = 0; i < 10; ++i) {
2624 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2625     for (int j = 0; j < 10; ++j)
2626       ;
2627   }
2628 #pragma omp parallel for simd
2629   for (int i = 0; i < 10; ++i) {
2630 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2631     for (int j = 0; j < 10; ++j)
2632       ;
2633   }
2634 #pragma omp parallel for simd
2635   for (int i = 0; i < 10; ++i) {
2636 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2637     a++;
2638   }
2639 
2640 // PARALLEL SECTIONS DIRECTIVE
2641 #pragma omp parallel sections
2642   {
2643 #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?}}
2644     for (int i = 0; i < 10; ++i)
2645       ;
2646   }
2647 #pragma omp parallel sections
2648   {
2649 #pragma omp simd
2650     for (int i = 0; i < 10; ++i)
2651       ;
2652   }
2653 #pragma omp parallel sections
2654   {
2655 #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?}}
2656     for (int i = 0; i < 10; ++i)
2657       ;
2658   }
2659 #pragma omp parallel sections
2660   {
2661 #pragma omp parallel
2662     for (int i = 0; i < 10; ++i)
2663       ;
2664   }
2665 #pragma omp parallel sections
2666   {
2667 #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?}}
2668     {
2669       bar();
2670     }
2671   }
2672 #pragma omp parallel sections
2673   {
2674 #pragma omp section
2675     {
2676       bar();
2677     }
2678   }
2679 #pragma omp parallel sections
2680   {
2681 #pragma omp section
2682     {
2683 #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?}}
2684       bar();
2685     }
2686   }
2687 #pragma omp parallel sections
2688   {
2689 #pragma omp section
2690     {
2691 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2692       bar();
2693     }
2694   }
2695 #pragma omp parallel sections
2696   {
2697 #pragma omp section
2698     {
2699 #pragma omp critical
2700       bar();
2701     }
2702   }
2703 #pragma omp parallel sections
2704   {
2705 #pragma omp parallel
2706     {
2707 #pragma omp single // OK
2708       {
2709         bar();
2710       }
2711 #pragma omp for // OK
2712       for (int i = 0; i < 10; ++i)
2713         ;
2714 #pragma omp for simd // OK
2715       for (int i = 0; i < 10; ++i)
2716         ;
2717 #pragma omp sections // OK
2718       {
2719         bar();
2720       }
2721     }
2722   }
2723 #pragma omp parallel sections
2724   {
2725 #pragma omp parallel for
2726     for (int i = 0; i < 10; ++i)
2727       ;
2728   }
2729 #pragma omp parallel sections
2730   {
2731 #pragma omp parallel for simd
2732     for (int i = 0; i < 10; ++i)
2733       ;
2734   }
2735 #pragma omp parallel sections
2736   {
2737 #pragma omp parallel sections
2738     {
2739       bar();
2740     }
2741   }
2742 #pragma omp parallel sections
2743   {
2744 #pragma omp task
2745     {
2746       bar();
2747     }
2748   }
2749 #pragma omp parallel sections
2750   {
2751 #pragma omp taskyield
2752   }
2753 #pragma omp parallel sections
2754   {
2755 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
2756   }
2757 #pragma omp parallel sections
2758   {
2759 #pragma omp taskwait
2760   }
2761 #pragma omp parallel sections
2762   {
2763 #pragma omp flush
2764   }
2765 #pragma omp parallel sections
2766   {
2767 #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?}}
2768     bar();
2769   }
2770 #pragma omp parallel sections
2771   {
2772 #pragma omp atomic
2773     ++a;
2774   }
2775 #pragma omp parallel sections
2776   {
2777 #pragma omp target
2778     ++a;
2779   }
2780 #pragma omp parallel sections
2781   {
2782 #pragma omp target parallel
2783     ++a;
2784   }
2785 #pragma omp parallel sections
2786   {
2787 #pragma omp target parallel for
2788     for (int i = 0; i < 10; ++i)
2789       ;
2790   }
2791 #pragma omp parallel sections
2792   {
2793 #pragma omp target enter data map(to: a)
2794   }
2795 #pragma omp parallel sections
2796   {
2797 #pragma omp target exit data map(from: a)
2798   }
2799 #pragma omp parallel sections
2800   {
2801 #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?}}
2802     ++a;
2803   }
2804 #pragma omp parallel sections
2805   {
2806 #pragma omp taskloop
2807   for (int i = 0; i < 10; ++i)
2808     ++a;
2809   }
2810 #pragma omp parallel sections
2811   {
2812 #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?}}
2813     for (int i = 0; i < 10; ++i)
2814       ;
2815   }
2816 #pragma omp parallel sections
2817   {
2818 #pragma omp target update to(a)
2819   }
2820 #pragma omp parallel sections
2821   {
2822 #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?}}
2823     for (int i = 0; i < 10; ++i)
2824       ;
2825   }
2826 #pragma omp parallel sections
2827   {
2828 #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?}}
2829     for (int i = 0; i < 10; ++i)
2830       ;
2831   }
2832 #pragma omp parallel sections
2833   {
2834 #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?}}
2835     for (int i = 0; i < 10; ++i)
2836       ;
2837   }
2838 #pragma omp parallel sections
2839   {
2840 #pragma omp target simd // OK
2841     for (int i = 0; i < 10; ++i)
2842       ;
2843   }
2844 #pragma omp parallel sections
2845   {
2846 #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?}}
2847     for (int i = 0; i < 10; ++i)
2848       ;
2849   }
2850 #pragma omp parallel sections
2851   {
2852 #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?}}
2853     for (int i = 0; i < 10; ++i)
2854       ;
2855   }
2856 #pragma omp parallel sections
2857   {
2858 #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?}}
2859     for (int i = 0; i < 10; ++i)
2860       ;
2861   }
2862 #pragma omp parallel sections
2863   {
2864 #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?}}
2865     for (int i = 0; i < 10; ++i)
2866       ;
2867   }
2868 #pragma omp parallel sections
2869   {
2870 #pragma omp target teams // OK
2871     a++;
2872   }
2873 
2874 // TASK DIRECTIVE
2875 #pragma omp task
2876 #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?}}
2877   for (int i = 0; i < 10; ++i)
2878     ;
2879 #pragma omp task
2880 #pragma omp simd
2881   for (int i = 0; i < 10; ++i)
2882     ;
2883 #pragma omp task
2884 #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?}}
2885   for (int i = 0; i < 10; ++i)
2886     ;
2887 #pragma omp task
2888 #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?}}
2889   {
2890     bar();
2891   }
2892 #pragma omp task
2893 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
2894   {
2895     bar();
2896   }
2897 #pragma omp task
2898 #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?}}
2899   bar();
2900 #pragma omp task
2901 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
2902   bar();
2903 #pragma omp task
2904 #pragma omp critical
2905   bar();
2906 
2907 #pragma omp task
2908 #pragma omp parallel for
2909   for (int i = 0; i < 10; ++i)
2910     ;
2911 #pragma omp task
2912 #pragma omp parallel for simd
2913   for (int i = 0; i < 10; ++i)
2914     ;
2915 #pragma omp task
2916 #pragma omp parallel sections
2917   {
2918     bar();
2919   }
2920 #pragma omp task
2921 #pragma omp task
2922   {
2923     bar();
2924   }
2925 #pragma omp task
2926   {
2927 #pragma omp taskyield
2928     bar();
2929   }
2930 #pragma omp task
2931   {
2932 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
2933     bar();
2934   }
2935 #pragma omp task
2936   {
2937 #pragma omp taskwait
2938     bar();
2939   }
2940 #pragma omp task
2941   {
2942 #pragma omp flush
2943     bar();
2944   }
2945 #pragma omp task
2946   {
2947 #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?}}
2948     bar();
2949   }
2950 #pragma omp task
2951   {
2952 #pragma omp atomic
2953     ++a;
2954   }
2955 #pragma omp task
2956   {
2957 #pragma omp target
2958     ++a;
2959   }
2960 #pragma omp task
2961   {
2962 #pragma omp target parallel
2963     ++a;
2964   }
2965 #pragma omp task
2966 #pragma omp target parallel for
2967   for (int i = 0; i < 10; ++i)
2968     ;
2969 #pragma omp task
2970   {
2971 #pragma omp target enter data map(to: a)
2972     ++a;
2973   }
2974 #pragma omp task
2975   {
2976 #pragma omp target exit data map(from: a)
2977     ++a;
2978   }
2979 #pragma omp task
2980   {
2981 #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?}}
2982     ++a;
2983   }
2984 #pragma omp task
2985   {
2986 #pragma omp taskloop
2987   for (int i = 0; i < 10; ++i)
2988     ++a;
2989   }
2990 #pragma omp task
2991   {
2992 #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?}}
2993     for (int i = 0; i < 10; ++i)
2994       ;
2995   }
2996 #pragma omp task
2997   {
2998 #pragma omp target update to(a)
2999     bar();
3000   }
3001 #pragma omp task
3002   {
3003 #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?}}
3004     for (int i = 0; i < 10; ++i)
3005       ;
3006   }
3007 #pragma omp task
3008   {
3009 #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?}}
3010     for (int i = 0; i < 10; ++i)
3011       ;
3012   }
3013 #pragma omp task
3014   {
3015 #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?}}
3016     for (int i = 0; i < 10; ++i)
3017       ;
3018   }
3019 #pragma omp task
3020   {
3021 #pragma omp target simd // OK
3022     for (int i = 0; i < 10; ++i)
3023       ;
3024   }
3025 #pragma omp task
3026   {
3027 #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?}}
3028     for (int i = 0; i < 10; ++i)
3029       ;
3030   }
3031 #pragma omp task
3032   {
3033 #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?}}
3034     for (int i = 0; i < 10; ++i)
3035       ;
3036   }
3037 #pragma omp task
3038   {
3039 #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?}}
3040     for (int i = 0; i < 10; ++i)
3041       ;
3042   }
3043 #pragma omp task
3044   {
3045 #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?}}
3046     for (int i = 0; i < 10; ++i)
3047       ;
3048   }
3049 #pragma omp task
3050   {
3051 #pragma omp target teams // OK
3052     a++;
3053   }
3054 
3055 // ORDERED DIRECTIVE
3056 #pragma omp ordered
3057   {
3058 #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?}}
3059     for (int i = 0; i < 10; ++i)
3060       ;
3061   }
3062 #pragma omp ordered
3063   {
3064 #pragma omp simd
3065     for (int i = 0; i < 10; ++i)
3066       ;
3067   }
3068 #pragma omp ordered
3069   {
3070 #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?}}
3071     for (int i = 0; i < 10; ++i)
3072       ;
3073   }
3074 #pragma omp ordered
3075   {
3076 #pragma omp parallel
3077     for (int i = 0; i < 10; ++i)
3078       ;
3079   }
3080 #pragma omp ordered
3081   {
3082 #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?}}
3083     {
3084       bar();
3085     }
3086   }
3087 #pragma omp ordered
3088   {
3089 #pragma omp master // OK, though second 'ordered' is redundant
3090     {
3091       bar();
3092     }
3093   }
3094 #pragma omp ordered
3095   {
3096 #pragma omp critical
3097     {
3098       bar();
3099     }
3100   }
3101 #pragma omp ordered
3102   {
3103 #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?}}
3104     {
3105       bar();
3106     }
3107   }
3108 #pragma omp ordered
3109   {
3110 #pragma omp parallel for ordered
3111     for (int j = 0; j < 10; ++j) {
3112 #pragma omp ordered // OK
3113       {
3114         bar();
3115       }
3116     }
3117   }
3118 #pragma omp ordered
3119   {
3120 #pragma omp parallel for simd ordered
3121     for (int j = 0; j < 10; ++j) {
3122 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3123       {
3124         bar();
3125       }
3126     }
3127   }
3128 #pragma omp ordered
3129   {
3130 #pragma omp parallel for simd ordered
3131     for (int j = 0; j < 10; ++j) {
3132 #pragma omp ordered simd
3133       {
3134         bar();
3135       }
3136     }
3137   }
3138 #pragma omp ordered
3139   {
3140 #pragma omp parallel for
3141     for (int i = 0; i < 10; ++i)
3142       ;
3143   }
3144 #pragma omp ordered
3145   {
3146 #pragma omp parallel for simd
3147     for (int i = 0; i < 10; ++i)
3148       ;
3149   }
3150 #pragma omp ordered
3151   {
3152 #pragma omp parallel sections
3153     {
3154       bar();
3155     }
3156   }
3157 #pragma omp ordered
3158   {
3159 #pragma omp task
3160     {
3161       bar();
3162     }
3163   }
3164 #pragma omp ordered
3165   {
3166 #pragma omp taskyield
3167     bar();
3168   }
3169 #pragma omp ordered
3170   {
3171 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3172     bar();
3173   }
3174 #pragma omp ordered
3175   {
3176 #pragma omp taskwait
3177     bar();
3178   }
3179 #pragma omp ordered
3180   {
3181 #pragma omp flush
3182     bar();
3183   }
3184 #pragma omp ordered
3185   {
3186 #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?}}
3187     bar();
3188   }
3189 #pragma omp ordered
3190   {
3191 #pragma omp atomic
3192     ++a;
3193   }
3194 #pragma omp ordered
3195   {
3196 #pragma omp target
3197     ++a;
3198   }
3199 #pragma omp ordered
3200   {
3201 #pragma omp target parallel
3202     ++a;
3203   }
3204 #pragma omp ordered
3205   {
3206 #pragma omp target parallel for ordered
3207     for (int j = 0; j < 10; ++j) {
3208 #pragma omp ordered // OK
3209       {
3210         bar();
3211       }
3212     }
3213   }
3214 #pragma omp ordered
3215   {
3216 #pragma omp target parallel for
3217     for (int i = 0; i < 10; ++i)
3218       ;
3219   }
3220 #pragma omp ordered
3221   {
3222 #pragma omp target enter data map(to: a)
3223     ++a;
3224   }
3225 #pragma omp ordered
3226   {
3227 #pragma omp target exit data map(from: a)
3228     ++a;
3229   }
3230 #pragma omp ordered
3231   {
3232 #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?}}
3233     ++a;
3234   }
3235 #pragma omp ordered
3236   {
3237 #pragma omp taskloop
3238   for (int i = 0; i < 10; ++i)
3239     ++a;
3240   }
3241 #pragma omp ordered
3242   {
3243 #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?}}
3244     for (int i = 0; i < 10; ++i)
3245       ;
3246   }
3247 #pragma omp ordered
3248   {
3249     bar();
3250 #pragma omp target update to(a)
3251     bar();
3252   }
3253 #pragma omp ordered
3254   {
3255 #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?}}
3256     for (int i = 0; i < 10; ++i)
3257       ;
3258   }
3259 #pragma omp ordered
3260   {
3261 #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?}}
3262     for (int i = 0; i < 10; ++i)
3263       ;
3264   }
3265 #pragma omp ordered
3266   {
3267 #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?}}
3268     for (int i = 0; i < 10; ++i)
3269       ;
3270   }
3271 #pragma omp ordered
3272   {
3273 #pragma omp target simd // OK
3274     for (int i = 0; i < 10; ++i)
3275       ;
3276   }
3277 #pragma omp ordered
3278   {
3279 #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?}}
3280     for (int i = 0; i < 10; ++i)
3281       ;
3282   }
3283 #pragma omp ordered
3284   {
3285 #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?}}
3286     for (int i = 0; i < 10; ++i)
3287       ;
3288   }
3289 #pragma omp ordered
3290   {
3291 #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?}}
3292     for (int i = 0; i < 10; ++i)
3293       ;
3294   }
3295 #pragma omp ordered
3296   {
3297 #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?}}
3298     for (int i = 0; i < 10; ++i)
3299       ;
3300   }
3301 #pragma omp ordered
3302   {
3303 #pragma omp target teams // OK
3304     a++;
3305   }
3306 
3307 // ATOMIC DIRECTIVE
3308 #pragma omp atomic
3309   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3310   // expected-note@+1 {{expected an expression statement}}
3311   {
3312 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3313     for (int i = 0; i < 10; ++i)
3314       ;
3315   }
3316 #pragma omp atomic
3317   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3318   // expected-note@+1 {{expected an expression statement}}
3319   {
3320 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3321     for (int i = 0; i < 10; ++i)
3322       ;
3323   }
3324 #pragma omp atomic
3325   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3326   // expected-note@+1 {{expected an expression statement}}
3327   {
3328 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3329     for (int i = 0; i < 10; ++i)
3330       ;
3331   }
3332 #pragma omp atomic
3333   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3334   // expected-note@+1 {{expected an expression statement}}
3335   {
3336 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3337     for (int i = 0; i < 10; ++i)
3338       ;
3339   }
3340 #pragma omp atomic
3341   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3342   // expected-note@+1 {{expected an expression statement}}
3343   {
3344 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3345     {
3346       bar();
3347     }
3348   }
3349 #pragma omp atomic
3350   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3351   // expected-note@+1 {{expected an expression statement}}
3352   {
3353 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3354     {
3355       bar();
3356     }
3357   }
3358 #pragma omp atomic
3359   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3360   // expected-note@+1 {{expected an expression statement}}
3361   {
3362 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3363     {
3364       bar();
3365     }
3366   }
3367 #pragma omp atomic
3368   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3369   // expected-note@+1 {{expected an expression statement}}
3370   {
3371 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3372     {
3373       bar();
3374     }
3375   }
3376 #pragma omp atomic
3377   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3378   // expected-note@+1 {{expected an expression statement}}
3379   {
3380 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3381     {
3382       bar();
3383     }
3384   }
3385 #pragma omp atomic
3386   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3387   // expected-note@+1 {{expected an expression statement}}
3388   {
3389 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3390     for (int i = 0; i < 10; ++i)
3391       ;
3392   }
3393 #pragma omp atomic
3394   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3395   // expected-note@+1 {{expected an expression statement}}
3396   {
3397 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3398     for (int i = 0; i < 10; ++i)
3399       ;
3400   }
3401 #pragma omp atomic
3402   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3403   // expected-note@+1 {{expected an expression statement}}
3404   {
3405 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3406     {
3407       bar();
3408     }
3409   }
3410 #pragma omp atomic
3411   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3412   // expected-note@+1 {{expected an expression statement}}
3413   {
3414 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3415     {
3416       bar();
3417     }
3418   }
3419 #pragma omp atomic
3420   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3421   // expected-note@+1 {{expected an expression statement}}
3422   {
3423 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3424     bar();
3425   }
3426 #pragma omp atomic
3427   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3428   // expected-note@+1 {{expected an expression statement}}
3429   {
3430 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3431     bar();
3432   }
3433 #pragma omp atomic
3434   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3435   // expected-note@+1 {{expected an expression statement}}
3436   {
3437 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3438     bar();
3439   }
3440 #pragma omp atomic
3441   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3442   // expected-note@+1 {{expected an expression statement}}
3443   {
3444 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3445     bar();
3446   }
3447 #pragma omp atomic
3448   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3449   // expected-note@+1 {{expected an expression statement}}
3450   {
3451 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3452     bar();
3453   }
3454 #pragma omp atomic
3455   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3456   // expected-note@+1 {{expected an expression statement}}
3457   {
3458 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3459     ++a;
3460   }
3461 #pragma omp atomic
3462   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3463   // expected-note@+1 {{expected an expression statement}}
3464   {
3465 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3466     ++a;
3467   }
3468 #pragma omp atomic
3469   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3470   // expected-note@+1 {{expected an expression statement}}
3471   {
3472 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3473     ++a;
3474   }
3475 #pragma omp atomic
3476   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3477   // expected-note@+1 {{expected an expression statement}}
3478   {
3479 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3480     for (int i = 0; i < 10; ++i)
3481       ;
3482   }
3483 #pragma omp atomic
3484   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3485   // expected-note@+1 {{expected an expression statement}}
3486   {
3487 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3488     ++a;
3489   }
3490 #pragma omp atomic
3491   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3492   // expected-note@+1 {{expected an expression statement}}
3493   {
3494 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3495     ++a;
3496   }
3497 #pragma omp atomic
3498   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3499   // expected-note@+1 {{expected an expression statement}}
3500   {
3501 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3502     ++a;
3503   }
3504 #pragma omp atomic
3505   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3506   // expected-note@+1 {{expected an expression statement}}
3507   {
3508 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3509   for (int i = 0; i < 10; ++i)
3510     ++a;
3511   }
3512 #pragma omp atomic
3513   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3514   // expected-note@+1 {{expected an expression statement}}
3515   {
3516 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3517     for (int i = 0; i < 10; ++i)
3518       ;
3519   }
3520 #pragma omp atomic
3521   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3522   // expected-note@+1 {{expected an expression statement}}
3523   {
3524 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3525     bar();
3526   }
3527 #pragma omp atomic
3528   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3529   // expected-note@+1 {{expected an expression statement}}
3530   {
3531 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3532     for (int i = 0; i < 10; ++i)
3533       ;
3534   }
3535 #pragma omp atomic
3536   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3537   // expected-note@+1 {{expected an expression statement}}
3538   {
3539 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3540     for (int i = 0; i < 10; ++i)
3541       ;
3542   }
3543 #pragma omp atomic
3544   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3545   // expected-note@+1 {{expected an expression statement}}
3546   {
3547 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3548     for (int i = 0; i < 10; ++i)
3549       ;
3550   }
3551 #pragma omp atomic
3552   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3553   // expected-note@+1 {{expected an expression statement}}
3554   {
3555 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3556     for (int i = 0; i < 10; ++i)
3557       ;
3558   }
3559 #pragma omp atomic
3560   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3561   // expected-note@+1 {{expected an expression statement}}
3562   {
3563 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3564     for (int i = 0; i < 10; ++i)
3565       ;
3566   }
3567 #pragma omp atomic
3568   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3569   // expected-note@+1 {{expected an expression statement}}
3570   {
3571 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3572     for (int i = 0; i < 10; ++i)
3573       ;
3574   }
3575 #pragma omp atomic
3576   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3577   // expected-note@+1 {{expected an expression statement}}
3578   {
3579 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3580     for (int i = 0; i < 10; ++i)
3581       ;
3582   }
3583 #pragma omp atomic
3584   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3585   // expected-note@+1 {{expected an expression statement}}
3586   {
3587 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3588     for (int i = 0; i < 10; ++i)
3589       ;
3590   }
3591 #pragma omp atomic
3592   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3593   // expected-note@+1 {{expected an expression statement}}
3594   {
3595 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3596     a++;
3597   }
3598 
3599 // TARGET DIRECTIVE
3600 #pragma omp target
3601 #pragma omp parallel
3602   bar();
3603 #pragma omp target
3604 #pragma omp for
3605   for (int i = 0; i < 10; ++i)
3606     ;
3607 #pragma omp target
3608 #pragma omp simd
3609   for (int i = 0; i < 10; ++i)
3610     ;
3611 #pragma omp target
3612 #pragma omp for simd
3613   for (int i = 0; i < 10; ++i)
3614     ;
3615 #pragma omp target
3616 #pragma omp sections
3617   {
3618     bar();
3619   }
3620 #pragma omp target
3621 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3622   {
3623     bar();
3624   }
3625 #pragma omp target
3626 #pragma omp single
3627   bar();
3628 
3629 #pragma omp target
3630 #pragma omp master
3631   {
3632     bar();
3633   }
3634 #pragma omp target
3635 #pragma omp critical
3636   {
3637     bar();
3638   }
3639 #pragma omp target
3640 #pragma omp parallel for
3641   for (int i = 0; i < 10; ++i)
3642     ;
3643 #pragma omp target
3644 #pragma omp parallel for simd
3645   for (int i = 0; i < 10; ++i)
3646     ;
3647 #pragma omp target
3648 #pragma omp parallel sections
3649   {
3650     bar();
3651   }
3652 #pragma omp target
3653 #pragma omp task
3654   {
3655     bar();
3656   }
3657 #pragma omp target
3658   {
3659 #pragma omp taskyield
3660     bar();
3661   }
3662 #pragma omp target
3663   {
3664 #pragma omp barrier
3665     bar();
3666   }
3667 #pragma omp target
3668   {
3669 #pragma omp taskwait
3670     bar();
3671   }
3672 #pragma omp target
3673   {
3674 #pragma omp flush
3675     bar();
3676   }
3677 #pragma omp target
3678   {
3679 #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?}}
3680     bar();
3681   }
3682 #pragma omp target
3683   {
3684 #pragma omp atomic
3685     ++a;
3686   }
3687 #pragma omp target
3688   {
3689 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
3690     ++a;
3691   }
3692 #pragma omp target
3693   {
3694 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
3695     ++a;
3696   }
3697 #pragma omp target
3698 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
3699   for (int i = 0; i < 10; ++i)
3700     ;
3701 #pragma omp target
3702   {
3703 #pragma omp teams
3704     ++a;
3705   }
3706 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3707   {
3708     ++a;           // expected-note {{statement outside teams construct here}}
3709 #pragma omp teams  // expected-note {{nested teams construct here}}
3710     ++a;
3711   }
3712 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3713   {
3714     while (0)      // expected-note {{statement outside teams construct here}}
3715 #pragma omp teams  // expected-note {{nested teams construct here}}
3716     ++a;
3717   }
3718 #pragma omp target
3719   {
3720 #pragma omp taskloop
3721   for (int i = 0; i < 10; ++i)
3722     ++a;
3723   }
3724 #pragma omp target
3725   {
3726 #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?}}
3727     for (int i = 0; i < 10; ++i)
3728       ;
3729   }
3730 #pragma omp target
3731   {
3732 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
3733   }
3734 #pragma omp target
3735   {
3736 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
3737   }
3738 #pragma omp target
3739   {
3740 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
3741   }
3742 #pragma omp target
3743   {
3744 #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?}}
3745     for (int i = 0; i < 10; ++i)
3746       ;
3747   }
3748 #pragma omp target
3749   {
3750 #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?}}
3751     for (int i = 0; i < 10; ++i)
3752       ;
3753   }
3754 #pragma omp target
3755   {
3756 #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?}}
3757     for (int i = 0; i < 10; ++i)
3758       ;
3759   }
3760 #pragma omp target
3761   {
3762 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
3763     for (int i = 0; i < 10; ++i)
3764       ;
3765   }
3766 #pragma omp target
3767   {
3768 #pragma omp teams distribute // OK
3769     for (int i = 0; i < 10; ++i)
3770       ;
3771   }
3772 #pragma omp target
3773   {
3774 #pragma omp teams distribute simd // OK
3775     for (int i = 0; i < 10; ++i)
3776       ;
3777   }
3778 #pragma omp target
3779   {
3780 #pragma omp teams distribute parallel for simd // OK
3781     for (int i = 0; i < 10; ++i)
3782       ;
3783   }
3784 #pragma omp target
3785   {
3786 #pragma omp teams distribute parallel for // OK
3787     for (int i = 0; i < 10; ++i)
3788       ;
3789   }
3790 #pragma omp target
3791   {
3792 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
3793     for (int i = 0; i < 10; ++i)
3794       ;
3795   }
3796 
3797 // TARGET PARALLEL DIRECTIVE
3798 #pragma omp target parallel
3799 #pragma omp parallel
3800   bar();
3801 #pragma omp target parallel
3802 #pragma omp for
3803   for (int i = 0; i < 10; ++i)
3804     ;
3805 #pragma omp target parallel
3806 #pragma omp simd
3807   for (int i = 0; i < 10; ++i)
3808     ;
3809 #pragma omp target parallel
3810 #pragma omp for simd
3811   for (int i = 0; i < 10; ++i)
3812     ;
3813 #pragma omp target parallel
3814 #pragma omp sections
3815   {
3816     bar();
3817   }
3818 #pragma omp target parallel
3819 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
3820   {
3821     bar();
3822   }
3823 #pragma omp target parallel
3824 #pragma omp single
3825   bar();
3826 
3827 #pragma omp target parallel
3828 #pragma omp master
3829   {
3830     bar();
3831   }
3832 #pragma omp target parallel
3833 #pragma omp critical
3834   {
3835     bar();
3836   }
3837 #pragma omp target parallel
3838 #pragma omp parallel for
3839   for (int i = 0; i < 10; ++i)
3840     ;
3841 #pragma omp target parallel
3842 #pragma omp parallel for simd
3843   for (int i = 0; i < 10; ++i)
3844     ;
3845 #pragma omp target parallel
3846 #pragma omp parallel sections
3847   {
3848     bar();
3849   }
3850 #pragma omp target parallel
3851 #pragma omp task
3852   {
3853     bar();
3854   }
3855 #pragma omp target parallel
3856   {
3857 #pragma omp taskyield
3858     bar();
3859   }
3860 #pragma omp target parallel
3861   {
3862 #pragma omp barrier
3863     bar();
3864   }
3865 #pragma omp target parallel
3866   {
3867 #pragma omp taskwait
3868     bar();
3869   }
3870 #pragma omp target parallel
3871   {
3872 #pragma omp flush
3873     bar();
3874   }
3875 #pragma omp target parallel
3876   {
3877 #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?}}
3878     bar();
3879   }
3880 #pragma omp target parallel
3881   {
3882 #pragma omp atomic
3883     ++a;
3884   }
3885 #pragma omp target parallel
3886   {
3887 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
3888     ++a;
3889   }
3890 #pragma omp target parallel
3891   {
3892 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
3893     ++a;
3894   }
3895 #pragma omp target parallel
3896 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
3897   for (int i = 0; i < 10; ++i)
3898     ;
3899 #pragma omp target parallel
3900   {
3901 #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?}}
3902     ++a;
3903   }
3904 #pragma omp target parallel
3905   {
3906     ++a;
3907 #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?}}
3908     ++a;
3909   }
3910 #pragma omp target parallel
3911   {
3912 #pragma omp taskloop
3913   for (int i = 0; i < 10; ++i)
3914     ++a;
3915   }
3916 #pragma omp target parallel
3917   {
3918 #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?}}
3919     for (int i = 0; i < 10; ++i)
3920       ;
3921   }
3922 #pragma omp target parallel
3923   {
3924 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3925   }
3926 #pragma omp target parallel
3927   {
3928 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3929   }
3930 #pragma omp target parallel
3931   {
3932 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3933   }
3934 #pragma omp target parallel
3935   {
3936 #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?}}
3937     for (int i = 0; i < 10; ++i)
3938       ;
3939   }
3940 #pragma omp target parallel
3941   {
3942 #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?}}
3943     for (int i = 0; i < 10; ++i)
3944       ;
3945   }
3946 #pragma omp target parallel
3947   {
3948 #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?}}
3949     for (int i = 0; i < 10; ++i)
3950       ;
3951   }
3952 #pragma omp target parallel
3953   {
3954 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
3955     for (int i = 0; i < 10; ++i)
3956       ;
3957   }
3958 #pragma omp target parallel
3959   {
3960 #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?}}
3961     for (int i = 0; i < 10; ++i)
3962       ;
3963   }
3964 #pragma omp target parallel
3965   {
3966 #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?}}
3967     for (int i = 0; i < 10; ++i)
3968       ;
3969   }
3970 #pragma omp target parallel
3971   {
3972 #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?}}
3973     for (int i = 0; i < 10; ++i)
3974       ;
3975   }
3976 #pragma omp target parallel
3977   {
3978 #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?}}
3979     for (int i = 0; i < 10; ++i)
3980       ;
3981   }
3982 #pragma omp target parallel
3983   {
3984 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
3985     a++;
3986   }
3987 
3988 // TARGET PARALLEL FOR DIRECTIVE
3989 #pragma omp target parallel for
3990   for (int i = 0; i < 10; ++i) {
3991 #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?}}
3992     for (int i = 0; i < 10; ++i)
3993       ;
3994   }
3995 #pragma omp target parallel for
3996   for (int i = 0; i < 10; ++i) {
3997 #pragma omp simd
3998     for (int i = 0; i < 10; ++i)
3999       ;
4000   }
4001 #pragma omp target parallel for
4002   for (int i = 0; i < 10; ++i) {
4003 #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?}}
4004     for (int i = 0; i < 10; ++i)
4005       ;
4006   }
4007 #pragma omp target parallel for
4008   for (int i = 0; i < 10; ++i) {
4009 #pragma omp parallel
4010     for (int i = 0; i < 10; ++i)
4011       ;
4012   }
4013 #pragma omp target parallel for
4014   for (int i = 0; i < 10; ++i) {
4015 #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?}}
4016     {
4017       bar();
4018     }
4019   }
4020 #pragma omp target parallel for
4021   for (int i = 0; i < 10; ++i) {
4022 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
4023     {
4024       bar();
4025     }
4026   }
4027 #pragma omp target parallel for
4028   for (int i = 0; i < 10; ++i) {
4029 #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?}}
4030     {
4031       bar();
4032     }
4033   }
4034 
4035 #pragma omp target parallel for
4036   for (int i = 0; i < 10; ++i) {
4037 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4038     {
4039       bar();
4040     }
4041   }
4042 
4043 #pragma omp target parallel for
4044   for (int i = 0; i < 10; ++i) {
4045 #pragma omp critical
4046     {
4047       bar();
4048     }
4049   }
4050 
4051 #pragma omp target parallel for
4052   for (int i = 0; i < 10; ++i) {
4053 #pragma omp parallel
4054     {
4055 #pragma omp single // OK
4056       {
4057         bar();
4058       }
4059 #pragma omp for // OK
4060       for (int i = 0; i < 10; ++i)
4061         ;
4062 #pragma omp for simd // OK
4063       for (int i = 0; i < 10; ++i)
4064         ;
4065 #pragma omp sections // OK
4066       {
4067         bar();
4068       }
4069     }
4070   }
4071 #pragma omp target parallel for
4072   for (int i = 0; i < 10; ++i) {
4073 #pragma omp parallel for
4074     for (int i = 0; i < 10; ++i)
4075       ;
4076   }
4077 #pragma omp target parallel for
4078   for (int i = 0; i < 10; ++i) {
4079 #pragma omp parallel for simd
4080     for (int i = 0; i < 10; ++i)
4081       ;
4082   }
4083 #pragma omp target parallel for
4084   for (int i = 0; i < 10; ++i) {
4085 #pragma omp parallel sections
4086     {
4087       bar();
4088     }
4089   }
4090 #pragma omp target parallel for
4091   for (int i = 0; i < 10; ++i) {
4092 #pragma omp task
4093     {
4094       bar();
4095     }
4096   }
4097 #pragma omp target parallel for
4098   for (int i = 0; i < 10; ++i) {
4099 #pragma omp taskyield
4100     bar();
4101   }
4102 #pragma omp target parallel for
4103   for (int i = 0; i < 10; ++i) {
4104 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4105     bar();
4106   }
4107 #pragma omp target parallel for
4108   for (int i = 0; i < 10; ++i) {
4109 #pragma omp taskwait
4110     bar();
4111   }
4112 #pragma omp target parallel for
4113   for (int i = 0; i < 10; ++i) {
4114 #pragma omp flush
4115     bar();
4116   }
4117 #pragma omp target parallel for
4118   for (int i = 0; i < 10; ++i) {
4119 #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?}}
4120     bar();
4121   }
4122 #pragma omp target parallel for ordered
4123   for (int i = 0; i < 10; ++i) {
4124 #pragma omp ordered // OK
4125     bar();
4126   }
4127 #pragma omp target parallel for
4128   for (int i = 0; i < 10; ++i) {
4129 #pragma omp atomic
4130     ++a;
4131   }
4132 #pragma omp target parallel for
4133   for (int i = 0; i < 10; ++i) {
4134 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
4135     ++a;
4136   }
4137 #pragma omp target parallel for
4138   for (int i = 0; i < 10; ++i) {
4139 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
4140     ++a;
4141   }
4142 #pragma omp target parallel for
4143   for (int i = 0; i < 10; ++i) {
4144 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4145     for (int i = 0; i < 10; ++i)
4146       ;
4147   }
4148 #pragma omp target parallel for
4149   for (int i = 0; i < 10; ++i) {
4150 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4151     ++a;
4152   }
4153 #pragma omp target parallel for
4154   for (int i = 0; i < 10; ++i) {
4155 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4156     ++a;
4157   }
4158 #pragma omp target parallel for
4159   for (int i = 0; i < 10; ++i) {
4160 #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?}}
4161     ++a;
4162   }
4163 #pragma omp target parallel for
4164   for (int i = 0; i < 10; ++i) {
4165 #pragma omp taskloop
4166   for (int i = 0; i < 10; ++i)
4167     ++a;
4168   }
4169 #pragma omp target parallel for
4170   for (int i = 0; i < 10; ++i) {
4171 #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?}}
4172     for (int j = 0; j < 10; ++j)
4173       ;
4174   }
4175 #pragma omp target parallel for
4176   for (int i = 0; i < 10; ++i) {
4177 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4178   }
4179 #pragma omp target parallel for
4180   for (int i = 0; i < 10; ++i) {
4181 #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?}}
4182     for (int j = 0; j < 10; ++j)
4183       ;
4184   }
4185 #pragma omp target parallel for
4186   for (int i = 0; i < 10; ++i) {
4187 #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?}}
4188     for (int j = 0; j < 10; ++j)
4189       ;
4190   }
4191 #pragma omp target parallel for
4192   for (int i = 0; i < 10; ++i) {
4193 #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?}}
4194     for (int j = 0; j < 10; ++j)
4195       ;
4196   }
4197 #pragma omp target parallel for
4198   for (int i = 0; i < 10; ++i) {
4199 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4200     for (int j = 0; j < 10; ++j)
4201       ;
4202   }
4203 #pragma omp target parallel for
4204   for (int i = 0; i < 10; ++i) {
4205 #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?}}
4206     for (int j = 0; j < 10; ++j)
4207       ;
4208   }
4209 #pragma omp target parallel for
4210   for (int i = 0; i < 10; ++i) {
4211 #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?}}
4212     for (int j = 0; j < 10; ++j)
4213       ;
4214   }
4215 #pragma omp target parallel for
4216   for (int i = 0; i < 10; ++i) {
4217 #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?}}
4218     for (int j = 0; j < 10; ++j)
4219       ;
4220   }
4221 #pragma omp target parallel for
4222   for (int i = 0; i < 10; ++i) {
4223 #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?}}
4224     for (int j = 0; j < 10; ++j)
4225       ;
4226   }
4227 #pragma omp target parallel for
4228   for (int i = 0; i < 10; ++i) {
4229 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
4230     a++;
4231   }
4232 
4233 // TEAMS DIRECTIVE
4234 #pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
4235   bar();
4236 #pragma omp target
4237 #pragma omp teams
4238 #pragma omp parallel
4239   bar();
4240 #pragma omp target
4241 #pragma omp teams
4242 #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?}}
4243   for (int i = 0; i < 10; ++i)
4244     ;
4245 #pragma omp target
4246 #pragma omp teams
4247 #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?}}
4248   for (int i = 0; i < 10; ++i)
4249     ;
4250 #pragma omp target
4251 #pragma omp teams
4252 #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?}}
4253   for (int i = 0; i < 10; ++i)
4254     ;
4255 #pragma omp target
4256 #pragma omp teams
4257 #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?}}
4258   {
4259     bar();
4260   }
4261 #pragma omp target
4262 #pragma omp teams
4263 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
4264   {
4265     bar();
4266   }
4267 #pragma omp target
4268 #pragma omp teams
4269 #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?}}
4270   bar();
4271 
4272 #pragma omp target
4273 #pragma omp teams
4274 #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?}}
4275   {
4276     bar();
4277   }
4278 #pragma omp target
4279 #pragma omp teams
4280 #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?}}
4281   {
4282     bar();
4283   }
4284 #pragma omp target
4285 #pragma omp teams
4286 #pragma omp parallel for
4287   for (int i = 0; i < 10; ++i)
4288     ;
4289 #pragma omp target
4290 #pragma omp teams
4291 #pragma omp parallel for simd
4292   for (int i = 0; i < 10; ++i)
4293     ;
4294 #pragma omp target
4295 #pragma omp teams
4296 #pragma omp parallel sections
4297   {
4298     bar();
4299   }
4300 #pragma omp target
4301 #pragma omp teams
4302 #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?}}
4303   {
4304     bar();
4305   }
4306 #pragma omp target
4307 #pragma omp teams
4308   {
4309 #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?}}
4310     bar();
4311   }
4312 #pragma omp target
4313 #pragma omp teams
4314   {
4315 #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?}}
4316     bar();
4317   }
4318 #pragma omp target
4319 #pragma omp teams
4320   {
4321 #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?}}
4322     bar();
4323   }
4324 #pragma omp target
4325 #pragma omp teams
4326   {
4327 #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?}}
4328     bar();
4329   }
4330 #pragma omp target
4331 #pragma omp teams
4332   {
4333 #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?}}
4334     bar();
4335   }
4336 #pragma omp target
4337 #pragma omp teams
4338   {
4339 #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?}}
4340     ++a;
4341   }
4342 #pragma omp target
4343 #pragma omp teams
4344   {
4345 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4346     ++a;
4347   }
4348 #pragma omp target
4349 #pragma omp teams
4350   {
4351 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4352     ++a;
4353   }
4354 #pragma omp target
4355 #pragma omp teams
4356 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4357   for (int i = 0; i < 10; ++i)
4358     ;
4359 #pragma omp target
4360 #pragma omp teams
4361   {
4362 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4363     ++a;
4364   }
4365 #pragma omp target
4366 #pragma omp teams
4367   {
4368 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4369     ++a;
4370   }
4371 #pragma omp target
4372 #pragma omp teams
4373   {
4374 #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?}}
4375     ++a;
4376   }
4377 #pragma omp target
4378 #pragma omp teams
4379   {
4380 #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?}}
4381   for (int i = 0; i < 10; ++i)
4382     ++a;
4383   }
4384 #pragma omp target
4385 #pragma omp teams
4386 #pragma omp distribute
4387   for (int i = 0; i < 10; ++i)
4388     ;
4389 #pragma omp target
4390 #pragma omp teams
4391 #pragma omp distribute
4392   for (int i = 0; i < 10; ++i)
4393     ;
4394 #pragma omp distribute
4395   for (int j = 0; j < 10; ++j)
4396     ;
4397 #pragma omp target
4398 #pragma omp teams
4399   {
4400 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4401   }
4402 #pragma omp target
4403 #pragma omp teams
4404   {
4405 #pragma omp distribute parallel for
4406   for (int i = 0; i < 10; ++i)
4407     ;
4408 #pragma omp distribute parallel for
4409   for (int j = 0; j < 10; ++j)
4410     ;
4411   }
4412 #pragma omp target
4413 #pragma omp teams
4414   {
4415 #pragma omp distribute parallel for simd
4416   for (int i = 0; i < 10; ++i)
4417     ;
4418 #pragma omp distribute parallel for simd
4419   for (int j = 0; j < 10; ++j)
4420     ;
4421   }
4422 #pragma omp target
4423 #pragma omp teams
4424   {
4425 #pragma omp distribute simd
4426   for (int i = 0; i < 10; ++i)
4427     ;
4428 #pragma omp distribute simd
4429   for (int j = 0; j < 10; ++j)
4430     ;
4431   }
4432 #pragma omp target
4433 #pragma omp teams
4434   {
4435 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4436   for (int i = 0; i < 10; ++i)
4437     ;
4438   }
4439 #pragma omp target
4440 #pragma omp teams
4441   {
4442 #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?}}
4443   for (int i = 0; i < 10; ++i)
4444     ;
4445   }
4446 #pragma omp target
4447 #pragma omp teams
4448   {
4449 #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?}}
4450   for (int i = 0; i < 10; ++i)
4451     ;
4452   }
4453 #pragma omp target
4454 #pragma omp teams
4455   {
4456 #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?}}
4457   for (int i = 0; i < 10; ++i)
4458     ;
4459   }
4460 #pragma omp target
4461 #pragma omp teams
4462   {
4463 #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?}}
4464   for (int i = 0; i < 10; ++i)
4465     ;
4466   }
4467 #pragma omp target
4468 #pragma omp teams
4469   {
4470 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4471     a++;
4472   }
4473 
4474 // TASKLOOP DIRECTIVE
4475 #pragma omp taskloop
4476   for (int i = 0; i < 10; ++i) {
4477 #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?}}
4478     for (int i = 0; i < 10; ++i)
4479       ;
4480   }
4481 #pragma omp taskloop
4482   for (int i = 0; i < 10; ++i) {
4483 #pragma omp simd
4484     for (int i = 0; i < 10; ++i)
4485       ;
4486   }
4487 #pragma omp taskloop
4488   for (int i = 0; i < 10; ++i) {
4489 #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?}}
4490     for (int i = 0; i < 10; ++i)
4491       ;
4492   }
4493 #pragma omp taskloop
4494   for (int i = 0; i < 10; ++i) {
4495 #pragma omp parallel
4496     for (int i = 0; i < 10; ++i)
4497       ;
4498   }
4499 #pragma omp taskloop
4500   for (int i = 0; i < 10; ++i) {
4501 #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?}}
4502     {
4503       bar();
4504     }
4505   }
4506 #pragma omp taskloop
4507   for (int i = 0; i < 10; ++i) {
4508 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
4509     {
4510       bar();
4511     }
4512   }
4513 #pragma omp taskloop
4514   for (int i = 0; i < 10; ++i) {
4515 #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?}}
4516     {
4517       bar();
4518     }
4519   }
4520 
4521 #pragma omp taskloop
4522   for (int i = 0; i < 10; ++i) {
4523 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
4524     {
4525       bar();
4526     }
4527   }
4528 #pragma omp taskloop
4529   for (int i = 0; i < 10; ++i) {
4530 #pragma omp critical
4531     {
4532       bar();
4533     }
4534   }
4535 #pragma omp taskloop
4536   for (int i = 0; i < 10; ++i) {
4537 #pragma omp parallel
4538     {
4539 #pragma omp single // OK
4540       {
4541         bar();
4542       }
4543 #pragma omp for // OK
4544       for (int i = 0; i < 10; ++i)
4545         ;
4546 #pragma omp sections // OK
4547       {
4548         bar();
4549       }
4550     }
4551   }
4552 #pragma omp taskloop
4553   for (int i = 0; i < 10; ++i) {
4554 #pragma omp parallel for
4555     for (int i = 0; i < 10; ++i)
4556       ;
4557   }
4558 #pragma omp taskloop
4559   for (int i = 0; i < 10; ++i) {
4560 #pragma omp parallel for simd
4561     for (int i = 0; i < 10; ++i)
4562       ;
4563   }
4564 #pragma omp taskloop
4565   for (int i = 0; i < 10; ++i) {
4566 #pragma omp parallel sections
4567     {
4568       bar();
4569     }
4570   }
4571 #pragma omp taskloop
4572   for (int i = 0; i < 10; ++i) {
4573 #pragma omp task
4574     {
4575       bar();
4576     }
4577   }
4578 #pragma omp taskloop
4579   for (int i = 0; i < 10; ++i) {
4580 #pragma omp taskyield
4581     bar();
4582   }
4583 #pragma omp taskloop
4584   for (int i = 0; i < 10; ++i) {
4585 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
4586     bar();
4587   }
4588 #pragma omp taskloop
4589   for (int i = 0; i < 10; ++i) {
4590 #pragma omp taskwait
4591     bar();
4592   }
4593 #pragma omp taskloop
4594   for (int i = 0; i < 10; ++i) {
4595 #pragma omp flush
4596     bar();
4597   }
4598 #pragma omp taskloop
4599   for (int i = 0; i < 10; ++i) {
4600 #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?}}
4601     bar();
4602   }
4603 #pragma omp taskloop
4604   for (int i = 0; i < 10; ++i) {
4605 #pragma omp atomic
4606     ++a;
4607   }
4608 #pragma omp taskloop
4609   for (int i = 0; i < 10; ++i) {
4610 #pragma omp target
4611     ++a;
4612   }
4613 #pragma omp taskloop
4614   for (int i = 0; i < 10; ++i) {
4615 #pragma omp target parallel
4616     ++a;
4617   }
4618 #pragma omp taskloop
4619   for (int i = 0; i < 10; ++i) {
4620 #pragma omp target parallel for
4621     for (int i = 0; i < 10; ++i)
4622       ;
4623   }
4624 #pragma omp taskloop
4625   for (int i = 0; i < 10; ++i) {
4626 #pragma omp target enter data map(to: a)
4627     ++a;
4628   }
4629 #pragma omp taskloop
4630   for (int i = 0; i < 10; ++i) {
4631 #pragma omp target exit data map(from: a)
4632     ++a;
4633   }
4634 #pragma omp taskloop
4635   for (int i = 0; i < 10; ++i) {
4636 #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?}}
4637     ++a;
4638   }
4639 #pragma omp taskloop
4640   for (int i = 0; i < 10; ++i) {
4641 #pragma omp taskloop
4642   for (int i = 0; i < 10; ++i)
4643     ++a;
4644   }
4645 #pragma omp taskloop
4646   for (int i = 0; i < 10; ++i) {
4647 #pragma omp target update to(a)
4648     bar();
4649   }
4650 #pragma omp taskloop
4651   for (int i = 0; i < 10; ++i) {
4652 #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?}}
4653   for (int j = 0; j < 10; ++j)
4654     ++a;
4655   }
4656 #pragma omp taskloop
4657   for (int i = 0; i < 10; ++i) {
4658 #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?}}
4659   for (int j = 0; j < 10; ++j)
4660     ++a;
4661   }
4662 #pragma omp taskloop
4663   for (int i = 0; i < 10; ++i) {
4664 #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?}}
4665   for (int j = 0; j < 10; ++j)
4666     ++a;
4667   }
4668 #pragma omp taskloop
4669   for (int i = 0; i < 10; ++i) {
4670 #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?}}
4671   for (int j = 0; j < 10; ++j)
4672     ++a;
4673   }
4674 #pragma omp taskloop
4675   for (int i = 0; i < 10; ++i) {
4676 #pragma omp target simd // OK
4677   for (int j = 0; j < 10; ++j)
4678     ++a;
4679   }
4680 #pragma omp taskloop
4681   for (int i = 0; i < 10; ++i) {
4682 #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?}}
4683   for (int j = 0; j < 10; ++j)
4684     ++a;
4685   }
4686 #pragma omp taskloop
4687   for (int i = 0; i < 10; ++i) {
4688 #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?}}
4689   for (int j = 0; j < 10; ++j)
4690     ++a;
4691   }
4692 #pragma omp taskloop
4693   for (int i = 0; i < 10; ++i) {
4694 #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?}}
4695   for (int j = 0; j < 10; ++j)
4696     ++a;
4697   }
4698 #pragma omp taskloop
4699   for (int i = 0; i < 10; ++i) {
4700 #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?}}
4701   for (int j = 0; j < 10; ++j)
4702     ++a;
4703   }
4704 #pragma omp taskloop
4705   for (int i = 0; i < 10; ++i) {
4706 #pragma omp target teams // OK
4707     ++a;
4708   }
4709 
4710 // DISTRIBUTE DIRECTIVE
4711 #pragma omp target
4712 #pragma omp teams
4713 #pragma omp distribute
4714   for (int i = 0; i < 10; ++i) {
4715 #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?}}
4716     for (int i = 0; i < 10; ++i)
4717       ;
4718   }
4719 #pragma omp target
4720 #pragma omp teams
4721 #pragma omp distribute
4722   for (int i = 0; i < 10; ++i) {
4723 #pragma omp for
4724     for (int i = 0; i < 10; ++i)
4725       ;
4726   }
4727 #pragma omp target
4728 #pragma omp teams
4729 #pragma omp distribute
4730   for (int i = 0; i < 10; ++i) {
4731 #pragma omp simd
4732     for (int i = 0; i < 10; ++i)
4733       ;
4734   }
4735 #pragma omp target
4736 #pragma omp teams
4737 #pragma omp distribute
4738   for (int i = 0; i < 10; ++i) {
4739 #pragma omp for simd
4740     for (int i = 0; i < 10; ++i)
4741       ;
4742   }
4743 #pragma omp target
4744 #pragma omp teams
4745 #pragma omp distribute
4746   for (int i = 0; i < 10; ++i) {
4747 #pragma omp parallel
4748     for (int i = 0; i < 10; ++i)
4749       ;
4750   }
4751 #pragma omp target
4752 #pragma omp teams
4753 #pragma omp distribute
4754   for (int i = 0; i < 10; ++i) {
4755 #pragma omp sections
4756     {
4757       bar();
4758     }
4759   }
4760 #pragma omp target
4761 #pragma omp teams
4762 #pragma omp distribute
4763   for (int i = 0; i < 10; ++i) {
4764 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
4765     {
4766       bar();
4767     }
4768   }
4769 #pragma omp target
4770 #pragma omp teams
4771 #pragma omp distribute
4772   for (int i = 0; i < 10; ++i) {
4773 #pragma omp single
4774     {
4775       bar();
4776     }
4777   }
4778 #pragma omp target
4779 #pragma omp teams
4780 #pragma omp distribute
4781   for (int i = 0; i < 10; ++i) {
4782 #pragma omp master
4783     {
4784       bar();
4785     }
4786   }
4787 #pragma omp target
4788 #pragma omp teams
4789 #pragma omp distribute
4790   for (int i = 0; i < 10; ++i) {
4791 #pragma omp critical
4792     {
4793       bar();
4794     }
4795   }
4796 #pragma omp target
4797 #pragma omp teams
4798 #pragma omp distribute
4799   for (int i = 0; i < 10; ++i) {
4800 #pragma omp parallel
4801     {
4802 #pragma omp single
4803       {
4804 	bar();
4805       }
4806     }
4807   }
4808 #pragma omp target
4809 #pragma omp teams
4810 #pragma omp distribute
4811   for (int i = 0; i < 10; ++i) {
4812 #pragma omp parallel for
4813     for (int i = 0; i < 10; ++i)
4814       ;
4815   }
4816 #pragma omp target
4817 #pragma omp teams
4818 #pragma omp distribute
4819   for (int i = 0; i < 10; ++i) {
4820 #pragma omp parallel for simd
4821     for (int i = 0; i < 10; ++i)
4822       ;
4823   }
4824 #pragma omp target
4825 #pragma omp teams
4826 #pragma omp distribute
4827   for (int i = 0; i < 10; ++i) {
4828 #pragma omp parallel sections
4829     {
4830       bar();
4831     }
4832   }
4833 #pragma omp target
4834 #pragma omp teams
4835 #pragma omp distribute
4836   for (int i = 0; i < 10; ++i) {
4837 #pragma omp task
4838     {
4839       bar();
4840     }
4841   }
4842 #pragma omp target
4843 #pragma omp teams
4844 #pragma omp distribute
4845   for (int i = 0; i < 10; ++i) {
4846 #pragma omp taskyield
4847     bar();
4848   }
4849 #pragma omp target
4850 #pragma omp teams
4851 #pragma omp distribute
4852   for (int i = 0; i < 10; ++i) {
4853 #pragma omp barrier
4854     bar();
4855   }
4856 #pragma omp target
4857 #pragma omp teams
4858 #pragma omp distribute
4859   for (int i = 0; i < 10; ++i) {
4860 #pragma omp taskwait
4861     bar();
4862   }
4863 #pragma omp target
4864 #pragma omp teams
4865 #pragma omp distribute
4866   for (int i = 0; i < 10; ++i) {
4867 #pragma omp flush
4868     bar();
4869   }
4870 #pragma omp target
4871 #pragma omp teams
4872 #pragma omp distribute
4873   for (int i = 0; i < 10; ++i) {
4874 #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?}}
4875     bar();
4876   }
4877 #pragma omp target
4878 #pragma omp teams
4879 #pragma omp distribute
4880   for (int i = 0; i < 10; ++i) {
4881 #pragma omp atomic
4882     ++a;
4883   }
4884 #pragma omp target
4885 #pragma omp teams
4886 #pragma omp distribute
4887   for (int i = 0; i < 10; ++i) {
4888 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4889     ++a;
4890   }
4891 #pragma omp target
4892 #pragma omp teams
4893 #pragma omp distribute
4894   for (int i = 0; i < 10; ++i) {
4895 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4896     ++a;
4897   }
4898 #pragma omp target
4899 #pragma omp teams
4900 #pragma omp distribute
4901   for (int i = 0; i < 10; ++i) {
4902 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4903     for (int i = 0; i < 10; ++i)
4904       ;
4905   }
4906 #pragma omp target
4907 #pragma omp teams
4908 #pragma omp distribute
4909   for (int i = 0; i < 10; ++i) {
4910 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4911     ++a;
4912   }
4913 #pragma omp target
4914 #pragma omp teams
4915 #pragma omp distribute
4916   for (int i = 0; i < 10; ++i) {
4917 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4918     ++a;
4919   }
4920 #pragma omp target
4921 #pragma omp teams
4922 #pragma omp distribute
4923   for (int i = 0; i < 10; ++i) {
4924 #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?}}
4925     ++a;
4926   }
4927 #pragma omp target
4928 #pragma omp teams
4929 #pragma omp distribute
4930   for (int i = 0; i < 10; ++i) {
4931 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4932     ++a;
4933   }
4934 #pragma omp target
4935 #pragma omp teams
4936 #pragma omp distribute
4937   for (int i = 0; i < 10; ++i) {
4938 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4939     for (int j = 0; j < 10; ++j)
4940       ;
4941   }
4942 #pragma omp target
4943 #pragma omp teams
4944 #pragma omp distribute
4945   for (int i = 0; i < 10; ++i) {
4946 #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?}}
4947     for (int j = 0; j < 10; ++j)
4948       ;
4949   }
4950 #pragma omp target
4951 #pragma omp teams
4952 #pragma omp distribute
4953   for (int i = 0; i < 10; ++i) {
4954 #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?}}
4955     for (int j = 0; j < 10; ++j)
4956       ;
4957   }
4958 #pragma omp target
4959 #pragma omp teams
4960 #pragma omp distribute
4961   for (int i = 0; i < 10; ++i) {
4962 #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?}}
4963     for (int j = 0; j < 10; ++j)
4964       ;
4965   }
4966 #pragma omp target
4967 #pragma omp teams
4968 #pragma omp distribute
4969   for (int i = 0; i < 10; ++i) {
4970 #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?}}
4971     for (int j = 0; j < 10; ++j)
4972       ;
4973   }
4974 #pragma omp target
4975 #pragma omp teams
4976 #pragma omp distribute
4977   for (int i = 0; i < 10; ++i) {
4978 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4979     a++;
4980   }
4981 
4982 // DISTRIBUTE PARALLEL FOR DIRECTIVE
4983 #pragma omp target
4984 #pragma omp teams
4985 #pragma omp distribute parallel for
4986   for (int i = 0; i < 10; ++i) {
4987 #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?}}
4988     for (int i = 0; i < 10; ++i)
4989       ;
4990   }
4991 #pragma omp target
4992 #pragma omp teams
4993 #pragma omp distribute parallel for
4994   for (int i = 0; i < 10; ++i) {
4995 #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?}}
4996     for (int i = 0; i < 10; ++i)
4997       ;
4998   }
4999 #pragma omp target
5000 #pragma omp teams
5001 #pragma omp distribute parallel for
5002   for (int i = 0; i < 10; ++i) {
5003 #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?}}
5004     for (int i = 0; i < 10; ++i)
5005       ;
5006   }
5007 #pragma omp target
5008 #pragma omp teams
5009 #pragma omp distribute parallel for
5010   for (int i = 0; i < 10; ++i) {
5011 #pragma omp simd
5012     for (int i = 0; i < 10; ++i)
5013       ;
5014   }
5015 #pragma omp target
5016 #pragma omp teams
5017 #pragma omp distribute parallel for
5018   for (int i = 0; i < 10; ++i) {
5019 #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?}}
5020     for (int i = 0; i < 10; ++i)
5021       ;
5022   }
5023 #pragma omp target
5024 #pragma omp teams
5025 #pragma omp distribute parallel for
5026   for (int i = 0; i < 10; ++i) {
5027 #pragma omp parallel
5028     for (int i = 0; i < 10; ++i)
5029       ;
5030   }
5031 #pragma omp target
5032 #pragma omp teams
5033 #pragma omp distribute parallel for
5034   for (int i = 0; i < 10; ++i) {
5035 #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?}}
5036     {
5037       bar();
5038     }
5039   }
5040 #pragma omp target
5041 #pragma omp teams
5042 #pragma omp distribute parallel for
5043   for (int i = 0; i < 10; ++i) {
5044 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
5045     {
5046       bar();
5047     }
5048   }
5049 #pragma omp target
5050 #pragma omp teams
5051 #pragma omp distribute parallel for
5052   for (int i = 0; i < 10; ++i) {
5053 #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?}}
5054     {
5055       bar();
5056     }
5057   }
5058 #pragma omp target
5059 #pragma omp teams
5060 #pragma omp distribute parallel for
5061   for (int i = 0; i < 10; ++i) {
5062 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5063     {
5064       bar();
5065     }
5066   }
5067 #pragma omp target
5068 #pragma omp teams
5069 #pragma omp distribute parallel for
5070   for (int i = 0; i < 10; ++i) {
5071 #pragma omp critical
5072     {
5073       bar();
5074     }
5075   }
5076 #pragma omp target
5077 #pragma omp teams
5078 #pragma omp distribute parallel for
5079   for (int i = 0; i < 10; ++i) {
5080 #pragma omp parallel
5081     {
5082 #pragma omp single
5083       {
5084 	bar();
5085       }
5086     }
5087   }
5088 #pragma omp target
5089 #pragma omp teams
5090 #pragma omp distribute parallel for
5091   for (int i = 0; i < 10; ++i) {
5092 #pragma omp parallel for
5093     for (int i = 0; i < 10; ++i)
5094       ;
5095   }
5096 #pragma omp target
5097 #pragma omp teams
5098 #pragma omp distribute parallel for
5099   for (int i = 0; i < 10; ++i) {
5100 #pragma omp parallel for simd
5101     for (int i = 0; i < 10; ++i)
5102       ;
5103   }
5104 #pragma omp target
5105 #pragma omp teams
5106 #pragma omp distribute parallel for
5107   for (int i = 0; i < 10; ++i) {
5108 #pragma omp parallel sections
5109     {
5110       bar();
5111     }
5112   }
5113 #pragma omp target
5114 #pragma omp teams
5115 #pragma omp distribute parallel for
5116   for (int i = 0; i < 10; ++i) {
5117 #pragma omp task
5118     {
5119       bar();
5120     }
5121   }
5122 #pragma omp target
5123 #pragma omp teams
5124 #pragma omp distribute parallel for
5125   for (int i = 0; i < 10; ++i) {
5126 #pragma omp taskyield
5127     bar();
5128   }
5129 #pragma omp target
5130 #pragma omp teams
5131 #pragma omp distribute parallel for
5132   for (int i = 0; i < 10; ++i) {
5133 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5134     bar();
5135   }
5136 #pragma omp target
5137 #pragma omp teams
5138 #pragma omp distribute parallel for
5139   for (int i = 0; i < 10; ++i) {
5140 #pragma omp taskwait
5141     bar();
5142   }
5143 #pragma omp target
5144 #pragma omp teams
5145 #pragma omp distribute parallel for
5146   for (int i = 0; i < 10; ++i) {
5147 #pragma omp flush
5148     bar();
5149   }
5150 #pragma omp target
5151 #pragma omp teams
5152 #pragma omp distribute parallel for
5153   for (int i = 0; i < 10; ++i) {
5154 #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?}}
5155     bar();
5156   }
5157 #pragma omp target
5158 #pragma omp teams
5159 #pragma omp distribute parallel for
5160   for (int i = 0; i < 10; ++i) {
5161 #pragma omp atomic
5162     ++a;
5163   }
5164 #pragma omp target
5165 #pragma omp teams
5166 #pragma omp distribute parallel for
5167   for (int i = 0; i < 10; ++i) {
5168 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5169     ++a;
5170   }
5171 #pragma omp target
5172 #pragma omp teams
5173 #pragma omp distribute parallel for
5174   for (int i = 0; i < 10; ++i) {
5175 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5176     ++a;
5177   }
5178 #pragma omp target
5179 #pragma omp teams
5180 #pragma omp distribute parallel for
5181   for (int i = 0; i < 10; ++i) {
5182 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5183     for (int i = 0; i < 10; ++i)
5184       ;
5185   }
5186 #pragma omp target
5187 #pragma omp teams
5188 #pragma omp distribute parallel for
5189   for (int i = 0; i < 10; ++i) {
5190 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5191     ++a;
5192   }
5193 #pragma omp target
5194 #pragma omp teams
5195 #pragma omp distribute parallel for
5196   for (int i = 0; i < 10; ++i) {
5197 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5198     ++a;
5199   }
5200 #pragma omp target
5201 #pragma omp teams
5202 #pragma omp distribute parallel for
5203   for (int i = 0; i < 10; ++i) {
5204 #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?}}
5205     ++a;
5206   }
5207 #pragma omp target
5208 #pragma omp teams
5209 #pragma omp distribute parallel for
5210   for (int i = 0; i < 10; ++i) {
5211 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5212     ++a;
5213   }
5214 #pragma omp target
5215 #pragma omp teams
5216 #pragma omp distribute parallel for
5217   for (int i = 0; i < 10; ++i) {
5218 #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?}}
5219     for (int i = 0; i < 10; ++i)
5220       ;
5221   }
5222 #pragma omp target
5223 #pragma omp teams
5224 #pragma omp distribute parallel for
5225   for (int i = 0; i < 10; ++i) {
5226 #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?}}
5227     for (int i = 0; i < 10; ++i)
5228       ;
5229   }
5230 #pragma omp target
5231 #pragma omp teams
5232 #pragma omp distribute parallel for
5233   for (int i = 0; i < 10; ++i) {
5234 #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?}}
5235     for (int i = 0; i < 10; ++i)
5236       ;
5237   }
5238 #pragma omp target
5239 #pragma omp teams
5240 #pragma omp distribute parallel for
5241   for (int i = 0; i < 10; ++i) {
5242 #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?}}
5243     for (int i = 0; i < 10; ++i)
5244       ;
5245   }
5246 #pragma omp target
5247 #pragma omp teams
5248 #pragma omp distribute parallel for
5249   for (int i = 0; i < 10; ++i) {
5250 #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?}}
5251     for (int i = 0; i < 10; ++i)
5252       ;
5253   }
5254 #pragma omp target
5255 #pragma omp teams
5256 #pragma omp distribute parallel for
5257   for (int i = 0; i < 10; ++i) {
5258 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5259     a++;
5260   }
5261 
5262 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
5263 #pragma omp target
5264 #pragma omp teams
5265 #pragma omp distribute parallel for simd
5266   for (int i = 0; i < 10; ++i) {
5267 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5268     for (int i = 0; i < 10; ++i)
5269       ;
5270   }
5271 #pragma omp target
5272 #pragma omp teams
5273 #pragma omp distribute parallel for simd
5274   for (int i = 0; i < 10; ++i) {
5275 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5276     for (int i = 0; i < 10; ++i)
5277       ;
5278   }
5279 #pragma omp target
5280 #pragma omp teams
5281 #pragma omp distribute parallel for simd
5282   for (int i = 0; i < 10; ++i) {
5283 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5284     for (int i = 0; i < 10; ++i)
5285       ;
5286   }
5287 #pragma omp target
5288 #pragma omp teams
5289 #pragma omp distribute parallel for simd
5290   for (int i = 0; i < 10; ++i) {
5291 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5292     for (int i = 0; i < 10; ++i)
5293       ;
5294   }
5295 #pragma omp target
5296 #pragma omp teams
5297 #pragma omp distribute parallel for simd
5298   for (int i = 0; i < 10; ++i) {
5299 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5300     for (int i = 0; i < 10; ++i)
5301       ;
5302   }
5303 #pragma omp target
5304 #pragma omp teams
5305 #pragma omp distribute parallel for simd
5306   for (int i = 0; i < 10; ++i) {
5307 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5308     for (int i = 0; i < 10; ++i)
5309       ;
5310   }
5311 #pragma omp target
5312 #pragma omp teams
5313 #pragma omp distribute parallel for simd
5314   for (int i = 0; i < 10; ++i) {
5315 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5316     {
5317       bar();
5318     }
5319   }
5320 #pragma omp target
5321 #pragma omp teams
5322 #pragma omp distribute parallel for simd
5323   for (int i = 0; i < 10; ++i) {
5324 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5325     {
5326       bar();
5327     }
5328   }
5329 #pragma omp target
5330 #pragma omp teams
5331 #pragma omp distribute parallel for simd
5332   for (int i = 0; i < 10; ++i) {
5333 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5334     {
5335       bar();
5336     }
5337   }
5338 #pragma omp target
5339 #pragma omp teams
5340 #pragma omp distribute parallel for simd
5341   for (int i = 0; i < 10; ++i) {
5342 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5343     {
5344       bar();
5345     }
5346   }
5347 #pragma omp target
5348 #pragma omp teams
5349 #pragma omp distribute parallel for simd
5350   for (int i = 0; i < 10; ++i) {
5351 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5352     {
5353       bar();
5354     }
5355   }
5356 #pragma omp target
5357 #pragma omp teams
5358 #pragma omp distribute parallel for simd
5359   for (int i = 0; i < 10; ++i) {
5360 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5361     {
5362 #pragma omp single
5363       {
5364 	bar();
5365       }
5366     }
5367   }
5368 #pragma omp target
5369 #pragma omp teams
5370 #pragma omp distribute parallel for simd
5371   for (int i = 0; i < 10; ++i) {
5372 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5373     for (int i = 0; i < 10; ++i)
5374       ;
5375   }
5376 #pragma omp target
5377 #pragma omp teams
5378 #pragma omp distribute parallel for simd
5379   for (int i = 0; i < 10; ++i) {
5380 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5381     for (int i = 0; i < 10; ++i)
5382       ;
5383   }
5384 #pragma omp target
5385 #pragma omp teams
5386 #pragma omp distribute parallel for simd
5387   for (int i = 0; i < 10; ++i) {
5388 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5389     {
5390       bar();
5391     }
5392   }
5393 #pragma omp target
5394 #pragma omp teams
5395 #pragma omp distribute parallel for simd
5396   for (int i = 0; i < 10; ++i) {
5397 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5398     {
5399       bar();
5400     }
5401   }
5402 #pragma omp target
5403 #pragma omp teams
5404 #pragma omp distribute parallel for simd
5405   for (int i = 0; i < 10; ++i) {
5406 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5407     bar();
5408   }
5409 #pragma omp target
5410 #pragma omp teams
5411 #pragma omp distribute parallel for simd
5412   for (int i = 0; i < 10; ++i) {
5413 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5414     bar();
5415   }
5416 #pragma omp target
5417 #pragma omp teams
5418 #pragma omp distribute parallel for simd
5419   for (int i = 0; i < 10; ++i) {
5420 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5421     bar();
5422   }
5423 #pragma omp target
5424 #pragma omp teams
5425 #pragma omp distribute parallel for simd
5426   for (int i = 0; i < 10; ++i) {
5427 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5428     bar();
5429   }
5430 #pragma omp target
5431 #pragma omp teams
5432 #pragma omp distribute parallel for simd
5433   for (int i = 0; i < 10; ++i) {
5434 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5435     bar();
5436   }
5437 #pragma omp target
5438 #pragma omp teams
5439 #pragma omp distribute parallel for simd
5440   for (int i = 0; i < 10; ++i) {
5441 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5442     ++a;
5443   }
5444 #pragma omp target
5445 #pragma omp teams
5446 #pragma omp distribute parallel for simd
5447   for (int i = 0; i < 10; ++i) {
5448 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5449     ++a;
5450   }
5451 #pragma omp target
5452 #pragma omp teams
5453 #pragma omp distribute parallel for simd
5454   for (int i = 0; i < 10; ++i) {
5455 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5456     ++a;
5457   }
5458 #pragma omp target
5459 #pragma omp teams
5460 #pragma omp distribute parallel for simd
5461   for (int i = 0; i < 10; ++i) {
5462 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5463     for (int i = 0; i < 10; ++i)
5464       ;
5465   }
5466 #pragma omp target
5467 #pragma omp teams
5468 #pragma omp distribute parallel for simd
5469   for (int i = 0; i < 10; ++i) {
5470 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5471     ++a;
5472   }
5473 #pragma omp target
5474 #pragma omp teams
5475 #pragma omp distribute parallel for simd
5476   for (int i = 0; i < 10; ++i) {
5477 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5478     ++a;
5479   }
5480 #pragma omp target
5481 #pragma omp teams
5482 #pragma omp distribute parallel for simd
5483   for (int i = 0; i < 10; ++i) {
5484 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5485     ++a;
5486   }
5487 #pragma omp target
5488 #pragma omp teams
5489 #pragma omp distribute parallel for simd
5490   for (int i = 0; i < 10; ++i) {
5491 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5492     ++a;
5493   }
5494 #pragma omp target
5495 #pragma omp teams
5496 #pragma omp distribute parallel for simd
5497   for (int i = 0; i < 10; ++i) {
5498 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5499     for (int i = 0; i < 10; ++i)
5500       ++a;
5501   }
5502 #pragma omp target
5503 #pragma omp teams
5504 #pragma omp distribute parallel for simd
5505   for (int i = 0; i < 10; ++i) {
5506 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5507     for (int i = 0; i < 10; ++i)
5508       ++a;
5509   }
5510 #pragma omp target
5511 #pragma omp teams
5512 #pragma omp distribute parallel for simd
5513   for (int i = 0; i < 10; ++i) {
5514 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5515     for (int i = 0; i < 10; ++i)
5516       ++a;
5517   }
5518 #pragma omp target
5519 #pragma omp teams
5520 #pragma omp distribute parallel for simd
5521   for (int i = 0; i < 10; ++i) {
5522 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5523     for (int i = 0; i < 10; ++i)
5524       ++a;
5525   }
5526 #pragma omp target
5527 #pragma omp teams
5528 #pragma omp distribute parallel for simd
5529   for (int i = 0; i < 10; ++i) {
5530 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5531     for (int i = 0; i < 10; ++i)
5532       ++a;
5533   }
5534 #pragma omp target
5535 #pragma omp teams
5536 #pragma omp distribute parallel for simd
5537   for (int i = 0; i < 10; ++i) {
5538 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5539     for (int i = 0; i < 10; ++i)
5540       ++a;
5541   }
5542 #pragma omp target
5543 #pragma omp teams
5544 #pragma omp distribute parallel for simd
5545   for (int i = 0; i < 10; ++i) {
5546 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5547     ++a;
5548   }
5549 
5550 // TARGET SIMD DIRECTIVE
5551 #pragma omp target simd
5552   for (int i = 0; i < 10; ++i) {
5553 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5554     for (int i = 0; i < 10; ++i)
5555       ;
5556   }
5557 #pragma omp target simd
5558   for (int i = 0; i < 10; ++i) {
5559 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5560     for (int i = 0; i < 10; ++i)
5561       ;
5562   }
5563 #pragma omp target simd
5564   for (int i = 0; i < 10; ++i) {
5565 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5566     for (int i = 0; i < 10; ++i)
5567       ;
5568   }
5569 #pragma omp target simd
5570   for (int i = 0; i < 10; ++i) {
5571 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5572     for (int i = 0; i < 10; ++i)
5573       ;
5574   }
5575 #pragma omp target simd
5576   for (int i = 0; i < 10; ++i) {
5577 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5578     for (int i = 0; i < 10; ++i)
5579       ;
5580   }
5581 #pragma omp target simd
5582   for (int i = 0; i < 10; ++i) {
5583 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5584     for (int i = 0; i < 10; ++i)
5585       ;
5586   }
5587 #pragma omp target simd
5588   for (int i = 0; i < 10; ++i) {
5589 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5590     {
5591       bar();
5592     }
5593   }
5594 #pragma omp target simd
5595   for (int i = 0; i < 10; ++i) {
5596 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5597     {
5598       bar();
5599     }
5600   }
5601 #pragma omp target simd
5602   for (int i = 0; i < 10; ++i) {
5603 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5604     {
5605       bar();
5606     }
5607   }
5608 #pragma omp target simd
5609   for (int i = 0; i < 10; ++i) {
5610 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5611     {
5612       bar();
5613     }
5614   }
5615 #pragma omp target simd
5616   for (int i = 0; i < 10; ++i) {
5617 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5618     {
5619       bar();
5620     }
5621   }
5622 #pragma omp target simd
5623   for (int i = 0; i < 10; ++i) {
5624 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5625     {
5626 #pragma omp single
5627       {
5628 	bar();
5629       }
5630     }
5631   }
5632 #pragma omp target simd
5633   for (int i = 0; i < 10; ++i) {
5634 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5635     for (int i = 0; i < 10; ++i)
5636       ;
5637   }
5638 #pragma omp target simd
5639   for (int i = 0; i < 10; ++i) {
5640 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5641     for (int i = 0; i < 10; ++i)
5642       ;
5643   }
5644 #pragma omp target simd
5645   for (int i = 0; i < 10; ++i) {
5646 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5647     {
5648       bar();
5649     }
5650   }
5651 #pragma omp target simd
5652   for (int i = 0; i < 10; ++i) {
5653 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5654     {
5655       bar();
5656     }
5657   }
5658 #pragma omp target simd
5659   for (int i = 0; i < 10; ++i) {
5660 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5661     bar();
5662   }
5663 #pragma omp target simd
5664   for (int i = 0; i < 10; ++i) {
5665 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5666     bar();
5667   }
5668 #pragma omp target simd
5669   for (int i = 0; i < 10; ++i) {
5670 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5671     bar();
5672   }
5673 #pragma omp target simd
5674   for (int i = 0; i < 10; ++i) {
5675 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5676     bar();
5677   }
5678 #pragma omp target simd
5679   for (int i = 0; i < 10; ++i) {
5680 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5681     bar();
5682   }
5683 #pragma omp target simd
5684   for (int i = 0; i < 10; ++i) {
5685 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5686     ++a;
5687   }
5688 #pragma omp target simd
5689   for (int i = 0; i < 10; ++i) {
5690 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5691     ++a;
5692   }
5693 #pragma omp target simd
5694   for (int i = 0; i < 10; ++i) {
5695 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5696     ++a;
5697   }
5698 #pragma omp target simd
5699   for (int i = 0; i < 10; ++i) {
5700 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5701     for (int i = 0; i < 10; ++i)
5702       ;
5703   }
5704 #pragma omp target simd
5705   for (int i = 0; i < 10; ++i) {
5706 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5707     ++a;
5708   }
5709 #pragma omp target simd
5710   for (int i = 0; i < 10; ++i) {
5711 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5712     ++a;
5713   }
5714 #pragma omp target simd
5715   for (int i = 0; i < 10; ++i) {
5716 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5717     ++a;
5718   }
5719 #pragma omp target simd
5720   for (int i = 0; i < 10; ++i) {
5721 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5722     ++a;
5723   }
5724 #pragma omp target simd
5725   for (int i = 0; i < 10; ++i) {
5726 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5727     for (int i = 0; i < 10; ++i)
5728       ++a;
5729   }
5730 #pragma omp target simd
5731   for (int i = 0; i < 10; ++i) {
5732 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5733     for (int i = 0; i < 10; ++i)
5734       ++a;
5735   }
5736 #pragma omp target simd
5737   for (int i = 0; i < 10; ++i) {
5738 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5739     for (int i = 0; i < 10; ++i)
5740       ++a;
5741   }
5742 #pragma omp target simd
5743   for (int i = 0; i < 10; ++i) {
5744 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5745     for (int i = 0; i < 10; ++i)
5746       ++a;
5747   }
5748 #pragma omp target simd
5749   for (int i = 0; i < 10; ++i) {
5750 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5751     for (int i = 0; i < 10; ++i)
5752       ++a;
5753   }
5754 
5755  // TEAMS DISTRIBUTE DIRECTIVE
5756 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5757   for (int i = 0; i < 10; ++i)
5758     ;
5759 #pragma omp target
5760 #pragma omp teams distribute
5761   for (int i = 0; i < 10; ++i) {
5762 #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?}}
5763     for (int i = 0; i < 10; ++i)
5764       ;
5765   }
5766 #pragma omp target
5767 #pragma omp teams distribute
5768   for (int i = 0; i < 10; ++i) {
5769 #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?}}
5770     for (int i = 0; i < 10; ++i)
5771       ;
5772   }
5773 #pragma omp target
5774 #pragma omp teams distribute
5775   for (int i = 0; i < 10; ++i) {
5776 #pragma omp for // OK
5777     for (int i = 0; i < 10; ++i)
5778       ;
5779   }
5780 #pragma omp target
5781 #pragma omp teams distribute
5782   for (int i = 0; i < 10; ++i) {
5783 #pragma omp simd // OK
5784     for (int i = 0; i < 10; ++i)
5785       ;
5786   }
5787 #pragma omp target
5788 #pragma omp teams distribute
5789   for (int i = 0; i < 10; ++i) {
5790 #pragma omp for simd // OK
5791     for (int i = 0; i < 10; ++i)
5792       ;
5793   }
5794 #pragma omp target
5795 #pragma omp teams distribute
5796   for (int i = 0; i < 10; ++i) {
5797 #pragma omp parallel // OK
5798     for (int i = 0; i < 10; ++i)
5799       ;
5800   }
5801 #pragma omp target
5802 #pragma omp teams distribute
5803   for (int i = 0; i < 10; ++i) {
5804 #pragma omp sections // OK
5805     {
5806       bar();
5807     }
5808   }
5809 #pragma omp target
5810 #pragma omp teams distribute
5811   for (int i = 0; i < 10; ++i) {
5812 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
5813     {
5814       bar();
5815     }
5816   }
5817 #pragma omp target
5818 #pragma omp teams distribute
5819   for (int i = 0; i < 10; ++i) {
5820 #pragma omp single // OK
5821     {
5822       bar();
5823     }
5824   }
5825 #pragma omp target
5826 #pragma omp teams distribute
5827   for (int i = 0; i < 10; ++i) {
5828 #pragma omp master // OK
5829     {
5830       bar();
5831     }
5832   }
5833 #pragma omp target
5834 #pragma omp teams distribute
5835   for (int i = 0; i < 10; ++i) {
5836 #pragma omp critical // OK
5837     {
5838       bar();
5839     }
5840   }
5841 #pragma omp target
5842 #pragma omp teams distribute
5843   for (int i = 0; i < 10; ++i) {
5844 #pragma omp parallel // OK
5845     {
5846 #pragma omp single
5847       {
5848 	bar();
5849       }
5850     }
5851   }
5852 #pragma omp target
5853 #pragma omp teams distribute
5854   for (int i = 0; i < 10; ++i) {
5855 #pragma omp parallel for // OK
5856     for (int i = 0; i < 10; ++i)
5857       ;
5858   }
5859 #pragma omp target
5860 #pragma omp teams distribute
5861   for (int i = 0; i < 10; ++i) {
5862 #pragma omp parallel for simd // OK
5863     for (int i = 0; i < 10; ++i)
5864       ;
5865   }
5866 #pragma omp target
5867 #pragma omp teams distribute
5868   for (int i = 0; i < 10; ++i) {
5869 #pragma omp parallel sections // OK
5870     {
5871       bar();
5872     }
5873   }
5874 #pragma omp target
5875 #pragma omp teams distribute
5876   for (int i = 0; i < 10; ++i) {
5877 #pragma omp task // OK
5878     {
5879       bar();
5880     }
5881   }
5882 #pragma omp target
5883 #pragma omp teams distribute
5884   for (int i = 0; i < 10; ++i) {
5885 #pragma omp taskyield // OK
5886     bar();
5887   }
5888 #pragma omp target
5889 #pragma omp teams distribute
5890   for (int i = 0; i < 10; ++i) {
5891 #pragma omp barrier // OK
5892     bar();
5893   }
5894 #pragma omp target
5895 #pragma omp teams distribute
5896   for (int i = 0; i < 10; ++i) {
5897 #pragma omp taskwait // OK
5898     bar();
5899   }
5900 #pragma omp target
5901 #pragma omp teams distribute
5902   for (int i = 0; i < 10; ++i) {
5903 #pragma omp flush // OK
5904     bar();
5905   }
5906 #pragma omp target
5907 #pragma omp teams distribute
5908   for (int i = 0; i < 10; ++i) {
5909 #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?}}
5910     bar();
5911   }
5912 #pragma omp target
5913 #pragma omp teams distribute
5914   for (int i = 0; i < 10; ++i) {
5915 #pragma omp atomic // OK
5916     ++a;
5917   }
5918 #pragma omp target
5919 #pragma omp teams distribute
5920   for (int i = 0; i < 10; ++i) {
5921 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5922     ++a;
5923   }
5924 #pragma omp target
5925 #pragma omp teams distribute
5926   for (int i = 0; i < 10; ++i) {
5927 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
5928     ++a;
5929   }
5930 #pragma omp target
5931 #pragma omp teams distribute
5932   for (int i = 0; i < 10; ++i) {
5933 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5934     for (int i = 0; i < 10; ++i)
5935       ;
5936   }
5937 #pragma omp target
5938 #pragma omp teams distribute
5939   for (int i = 0; i < 10; ++i) {
5940 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5941     ++a;
5942   }
5943 #pragma omp target
5944 #pragma omp teams distribute
5945   for (int i = 0; i < 10; ++i) {
5946 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5947     ++a;
5948   }
5949 #pragma omp target
5950 #pragma omp teams distribute
5951   for (int i = 0; i < 10; ++i) {
5952 #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?}}
5953     ++a;
5954   }
5955 #pragma omp target
5956 #pragma omp teams distribute
5957   for (int i = 0; i < 10; ++i) {
5958 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5959     ++a;
5960   }
5961 #pragma omp target
5962 #pragma omp teams distribute
5963   for (int i = 0; i < 10; ++i) {
5964 #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?}}
5965     for (int i = 0; i < 10; ++i)
5966       ++a;
5967   }
5968 #pragma omp target
5969 #pragma omp teams distribute
5970   for (int i = 0; i < 10; ++i) {
5971 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5972     for (int i = 0; i < 10; ++i)
5973       ++a;
5974   }
5975 #pragma omp target
5976 #pragma omp teams distribute
5977   for (int i = 0; i < 10; ++i) {
5978 #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?}}
5979     for (int i = 0; i < 10; ++i)
5980       ++a;
5981   }
5982 #pragma omp target
5983 #pragma omp teams distribute
5984   for (int i = 0; i < 10; ++i) {
5985 #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?}}
5986     for (int i = 0; i < 10; ++i)
5987       ++a;
5988   }
5989 #pragma omp target
5990 #pragma omp teams distribute
5991   for (int i = 0; i < 10; ++i) {
5992 #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?}}
5993     for (int i = 0; i < 10; ++i)
5994       ++a;
5995   }
5996 
5997  // TEAMS DISTRIBUTE DIRECTIVE
5998 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5999   for (int i = 0; i < 10; ++i)
6000     ;
6001 #pragma omp target
6002 #pragma omp teams distribute
6003   for (int i = 0; i < 10; ++i) {
6004 #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?}}
6005     for (int i = 0; i < 10; ++i)
6006       ;
6007   }
6008 #pragma omp target
6009 #pragma omp teams distribute
6010   for (int i = 0; i < 10; ++i) {
6011 #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?}}
6012     for (int i = 0; i < 10; ++i)
6013       ;
6014   }
6015 #pragma omp target
6016 #pragma omp teams distribute
6017   for (int i = 0; i < 10; ++i) {
6018 #pragma omp for // OK
6019     for (int i = 0; i < 10; ++i)
6020       ;
6021   }
6022 #pragma omp target
6023 #pragma omp teams distribute
6024   for (int i = 0; i < 10; ++i) {
6025 #pragma omp simd // OK
6026     for (int i = 0; i < 10; ++i)
6027       ;
6028   }
6029 #pragma omp target
6030 #pragma omp teams distribute
6031   for (int i = 0; i < 10; ++i) {
6032 #pragma omp for simd // OK
6033     for (int i = 0; i < 10; ++i)
6034       ;
6035   }
6036 #pragma omp target
6037 #pragma omp teams distribute
6038   for (int i = 0; i < 10; ++i) {
6039 #pragma omp parallel // OK
6040     for (int i = 0; i < 10; ++i)
6041       ;
6042   }
6043 #pragma omp target
6044 #pragma omp teams distribute
6045   for (int i = 0; i < 10; ++i) {
6046 #pragma omp sections // OK
6047     {
6048       bar();
6049     }
6050   }
6051 #pragma omp target
6052 #pragma omp teams distribute
6053   for (int i = 0; i < 10; ++i) {
6054 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6055     {
6056       bar();
6057     }
6058   }
6059 #pragma omp target
6060 #pragma omp teams distribute
6061   for (int i = 0; i < 10; ++i) {
6062 #pragma omp single // OK
6063     {
6064       bar();
6065     }
6066   }
6067 #pragma omp target
6068 #pragma omp teams distribute
6069   for (int i = 0; i < 10; ++i) {
6070 #pragma omp master // OK
6071     {
6072       bar();
6073     }
6074   }
6075 #pragma omp target
6076 #pragma omp teams distribute
6077   for (int i = 0; i < 10; ++i) {
6078 #pragma omp critical // OK
6079     {
6080       bar();
6081     }
6082   }
6083 #pragma omp target
6084 #pragma omp teams distribute
6085   for (int i = 0; i < 10; ++i) {
6086 #pragma omp parallel // OK
6087     {
6088 #pragma omp single
6089       {
6090 	bar();
6091       }
6092     }
6093   }
6094 #pragma omp target
6095 #pragma omp teams distribute
6096   for (int i = 0; i < 10; ++i) {
6097 #pragma omp parallel for // OK
6098     for (int i = 0; i < 10; ++i)
6099       ;
6100   }
6101 #pragma omp target
6102 #pragma omp teams distribute
6103   for (int i = 0; i < 10; ++i) {
6104 #pragma omp parallel for simd // OK
6105     for (int i = 0; i < 10; ++i)
6106       ;
6107   }
6108 #pragma omp target
6109 #pragma omp teams distribute
6110   for (int i = 0; i < 10; ++i) {
6111 #pragma omp parallel sections // OK
6112     {
6113       bar();
6114     }
6115   }
6116 #pragma omp target
6117 #pragma omp teams distribute
6118   for (int i = 0; i < 10; ++i) {
6119 #pragma omp task // OK
6120     {
6121       bar();
6122     }
6123   }
6124 #pragma omp target
6125 #pragma omp teams distribute
6126   for (int i = 0; i < 10; ++i) {
6127 #pragma omp taskyield // OK
6128     bar();
6129   }
6130 #pragma omp target
6131 #pragma omp teams distribute
6132   for (int i = 0; i < 10; ++i) {
6133 #pragma omp barrier // OK
6134     bar();
6135   }
6136 #pragma omp target
6137 #pragma omp teams distribute
6138   for (int i = 0; i < 10; ++i) {
6139 #pragma omp taskwait // OK
6140     bar();
6141   }
6142 #pragma omp target
6143 #pragma omp teams distribute
6144   for (int i = 0; i < 10; ++i) {
6145 #pragma omp flush // OK
6146     bar();
6147   }
6148 #pragma omp target
6149 #pragma omp teams distribute
6150   for (int i = 0; i < 10; ++i) {
6151 #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?}}
6152     bar();
6153   }
6154 #pragma omp target
6155 #pragma omp teams distribute
6156   for (int i = 0; i < 10; ++i) {
6157 #pragma omp atomic // OK
6158     ++a;
6159   }
6160 #pragma omp target
6161 #pragma omp teams distribute
6162   for (int i = 0; i < 10; ++i) {
6163 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6164     ++a;
6165   }
6166 #pragma omp target
6167 #pragma omp teams distribute
6168   for (int i = 0; i < 10; ++i) {
6169 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6170     ++a;
6171   }
6172 #pragma omp target
6173 #pragma omp teams distribute
6174   for (int i = 0; i < 10; ++i) {
6175 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6176     for (int i = 0; i < 10; ++i)
6177       ;
6178   }
6179 #pragma omp target
6180 #pragma omp teams distribute
6181   for (int i = 0; i < 10; ++i) {
6182 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6183     ++a;
6184   }
6185 #pragma omp target
6186 #pragma omp teams distribute
6187   for (int i = 0; i < 10; ++i) {
6188 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6189     ++a;
6190   }
6191 #pragma omp target
6192 #pragma omp teams distribute
6193   for (int i = 0; i < 10; ++i) {
6194 #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?}}
6195     ++a;
6196   }
6197 #pragma omp target
6198 #pragma omp teams distribute
6199   for (int i = 0; i < 10; ++i) {
6200 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6201     ++a;
6202   }
6203 #pragma omp target
6204 #pragma omp teams distribute
6205   for (int i = 0; i < 10; ++i) {
6206 #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?}}
6207     for (int i = 0; i < 10; ++i)
6208       ++a;
6209   }
6210 #pragma omp target
6211 #pragma omp teams distribute
6212   for (int i = 0; i < 10; ++i) {
6213 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6214     for (int i = 0; i < 10; ++i)
6215       ++a;
6216   }
6217 #pragma omp target
6218 #pragma omp teams distribute
6219   for (int i = 0; i < 10; ++i) {
6220 #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?}}
6221     for (int i = 0; i < 10; ++i)
6222       ++a;
6223   }
6224 #pragma omp target
6225 #pragma omp teams distribute
6226   for (int i = 0; i < 10; ++i) {
6227 #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?}}
6228     for (int i = 0; i < 10; ++i)
6229       ++a;
6230   }
6231 #pragma omp target
6232 #pragma omp teams distribute
6233   for (int i = 0; i < 10; ++i) {
6234 #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?}}
6235     for (int i = 0; i < 10; ++i)
6236       ++a;
6237   }
6238 #pragma omp target
6239 #pragma omp teams distribute
6240   for (int i = 0; i < 10; ++i) {
6241 #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?}}
6242     for (int i = 0; i < 10; ++i)
6243       ++a;
6244   }
6245 #pragma omp target
6246 #pragma omp teams distribute
6247   for (int i = 0; i < 10; ++i) {
6248 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6249     ++a;
6250   }
6251 
6252 // TEAMS DISTRIBUTE SIMD DIRECTIVE
6253 #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?}}
6254   for (int i = 0; i < 10; ++i)
6255     ;
6256 #pragma omp target
6257 #pragma omp teams distribute simd
6258   for (int i = 0; i < 10; ++i) {
6259 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6260     for (int i = 0; i < 10; ++i)
6261       ;
6262   }
6263 #pragma omp target
6264 #pragma omp teams distribute simd
6265   for (int i = 0; i < 10; ++i) {
6266 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6267     for (int i = 0; i < 10; ++i)
6268       ;
6269   }
6270 #pragma omp target
6271 #pragma omp teams distribute simd
6272   for (int i = 0; i < 10; ++i) {
6273 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6274     for (int i = 0; i < 10; ++i)
6275       ;
6276   }
6277 #pragma omp target
6278 #pragma omp teams distribute simd
6279   for (int i = 0; i < 10; ++i) {
6280 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6281     for (int i = 0; i < 10; ++i)
6282       ;
6283   }
6284 #pragma omp target
6285 #pragma omp teams distribute simd
6286   for (int i = 0; i < 10; ++i) {
6287 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6288     for (int i = 0; i < 10; ++i)
6289       ;
6290   }
6291 #pragma omp target
6292 #pragma omp teams distribute simd
6293   for (int i = 0; i < 10; ++i) {
6294 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6295     for (int i = 0; i < 10; ++i)
6296       ;
6297   }
6298 #pragma omp target
6299 #pragma omp teams distribute simd
6300   for (int i = 0; i < 10; ++i) {
6301 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6302     {
6303       bar();
6304     }
6305   }
6306 #pragma omp target
6307 #pragma omp teams distribute simd
6308   for (int i = 0; i < 10; ++i) {
6309 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6310     {
6311       bar();
6312     }
6313   }
6314 #pragma omp target
6315 #pragma omp teams distribute simd
6316   for (int i = 0; i < 10; ++i) {
6317 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6318     {
6319       bar();
6320     }
6321   }
6322 #pragma omp target
6323 #pragma omp teams distribute simd
6324   for (int i = 0; i < 10; ++i) {
6325 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6326     {
6327       bar();
6328     }
6329   }
6330 #pragma omp target
6331 #pragma omp teams distribute simd
6332   for (int i = 0; i < 10; ++i) {
6333 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6334     {
6335       bar();
6336     }
6337   }
6338 #pragma omp target
6339 #pragma omp teams distribute simd
6340   for (int i = 0; i < 10; ++i) {
6341 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6342     {
6343 #pragma omp single
6344       {
6345 	bar();
6346       }
6347     }
6348   }
6349 #pragma omp target
6350 #pragma omp teams distribute simd
6351   for (int i = 0; i < 10; ++i) {
6352 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6353     for (int i = 0; i < 10; ++i)
6354       ;
6355   }
6356 #pragma omp target
6357 #pragma omp teams distribute simd
6358   for (int i = 0; i < 10; ++i) {
6359 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6360     for (int i = 0; i < 10; ++i)
6361       ;
6362   }
6363 #pragma omp target
6364 #pragma omp teams distribute simd
6365   for (int i = 0; i < 10; ++i) {
6366 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6367     {
6368       bar();
6369     }
6370   }
6371 #pragma omp target
6372 #pragma omp teams distribute simd
6373   for (int i = 0; i < 10; ++i) {
6374 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6375     {
6376       bar();
6377     }
6378   }
6379 #pragma omp target
6380 #pragma omp teams distribute simd
6381   for (int i = 0; i < 10; ++i) {
6382 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6383     bar();
6384   }
6385 #pragma omp target
6386 #pragma omp teams distribute simd
6387   for (int i = 0; i < 10; ++i) {
6388 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6389     bar();
6390   }
6391 #pragma omp target
6392 #pragma omp teams distribute simd
6393   for (int i = 0; i < 10; ++i) {
6394 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6395     bar();
6396   }
6397 #pragma omp target
6398 #pragma omp teams distribute simd
6399   for (int i = 0; i < 10; ++i) {
6400 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6401     bar();
6402   }
6403 #pragma omp target
6404 #pragma omp teams distribute simd
6405   for (int i = 0; i < 10; ++i) {
6406 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6407     bar();
6408   }
6409 #pragma omp target
6410 #pragma omp teams distribute simd
6411   for (int i = 0; i < 10; ++i) {
6412 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6413     ++a;
6414   }
6415 #pragma omp target
6416 #pragma omp teams distribute simd
6417   for (int i = 0; i < 10; ++i) {
6418 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6419     ++a;
6420   }
6421 #pragma omp target
6422 #pragma omp teams distribute simd
6423   for (int i = 0; i < 10; ++i) {
6424 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6425     ++a;
6426   }
6427 #pragma omp target
6428 #pragma omp teams distribute simd
6429   for (int i = 0; i < 10; ++i) {
6430 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6431     for (int i = 0; i < 10; ++i)
6432       ;
6433   }
6434 #pragma omp target
6435 #pragma omp teams distribute simd
6436   for (int i = 0; i < 10; ++i) {
6437 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6438     ++a;
6439   }
6440 #pragma omp target
6441 #pragma omp teams distribute simd
6442   for (int i = 0; i < 10; ++i) {
6443 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6444     ++a;
6445   }
6446 #pragma omp target
6447 #pragma omp teams distribute simd
6448   for (int i = 0; i < 10; ++i) {
6449 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6450     ++a;
6451   }
6452 #pragma omp target
6453 #pragma omp teams distribute simd
6454   for (int i = 0; i < 10; ++i) {
6455 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6456     ++a;
6457   }
6458 #pragma omp target
6459 #pragma omp teams distribute simd
6460   for (int i = 0; i < 10; ++i) {
6461 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6462     for (int i = 0; i < 10; ++i)
6463       ++a;
6464   }
6465 #pragma omp target
6466 #pragma omp teams distribute simd
6467   for (int i = 0; i < 10; ++i) {
6468 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6469     for (int i = 0; i < 10; ++i)
6470       ++a;
6471   }
6472 #pragma omp target
6473 #pragma omp teams distribute simd
6474   for (int i = 0; i < 10; ++i) {
6475 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6476     for (int i = 0; i < 10; ++i)
6477       ++a;
6478   }
6479 #pragma omp target
6480 #pragma omp teams distribute simd
6481   for (int i = 0; i < 10; ++i) {
6482 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6483     for (int i = 0; i < 10; ++i)
6484       ++a;
6485   }
6486 #pragma omp target
6487 #pragma omp teams distribute simd
6488   for (int i = 0; i < 10; ++i) {
6489 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6490     for (int i = 0; i < 10; ++i)
6491       ++a;
6492   }
6493 #pragma omp target
6494 #pragma omp teams distribute simd
6495   for (int i = 0; i < 10; ++i) {
6496 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6497     for (int i = 0; i < 10; ++i)
6498       ++a;
6499   }
6500 #pragma omp target
6501 #pragma omp teams distribute simd
6502   for (int i = 0; i < 10; ++i) {
6503 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6504     ++a;
6505   }
6506 
6507 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
6508 #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?}}
6509   for (int i = 0; i < 10; ++i)
6510     ;
6511 #pragma omp target
6512 #pragma omp teams distribute parallel for simd
6513   for (int i = 0; i < 10; ++i) {
6514 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6515     for (int i = 0; i < 10; ++i)
6516       ;
6517   }
6518 #pragma omp target
6519 #pragma omp teams distribute parallel for simd
6520   for (int i = 0; i < 10; ++i) {
6521 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6522     for (int i = 0; i < 10; ++i)
6523       ;
6524   }
6525 #pragma omp target
6526 #pragma omp teams distribute parallel for simd
6527   for (int i = 0; i < 10; ++i) {
6528 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6529     for (int i = 0; i < 10; ++i)
6530       ;
6531   }
6532 #pragma omp target
6533 #pragma omp teams distribute parallel for simd
6534   for (int i = 0; i < 10; ++i) {
6535 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6536     for (int i = 0; i < 10; ++i)
6537       ;
6538   }
6539 #pragma omp target
6540 #pragma omp teams distribute parallel for simd
6541   for (int i = 0; i < 10; ++i) {
6542 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6543     for (int i = 0; i < 10; ++i)
6544       ;
6545   }
6546 #pragma omp target
6547 #pragma omp teams distribute parallel for simd
6548   for (int i = 0; i < 10; ++i) {
6549 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6550     for (int i = 0; i < 10; ++i)
6551       ;
6552   }
6553 #pragma omp target
6554 #pragma omp teams distribute parallel for simd
6555   for (int i = 0; i < 10; ++i) {
6556 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6557     {
6558       bar();
6559     }
6560   }
6561 #pragma omp target
6562 #pragma omp teams distribute parallel for simd
6563   for (int i = 0; i < 10; ++i) {
6564 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6565     {
6566       bar();
6567     }
6568   }
6569 #pragma omp target
6570 #pragma omp teams distribute parallel for simd
6571   for (int i = 0; i < 10; ++i) {
6572 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6573     {
6574       bar();
6575     }
6576   }
6577 #pragma omp target
6578 #pragma omp teams distribute parallel for simd
6579   for (int i = 0; i < 10; ++i) {
6580 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6581     {
6582       bar();
6583     }
6584   }
6585 #pragma omp target
6586 #pragma omp teams distribute parallel for simd
6587   for (int i = 0; i < 10; ++i) {
6588 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6589     {
6590       bar();
6591     }
6592   }
6593 #pragma omp target
6594 #pragma omp teams distribute parallel for simd
6595   for (int i = 0; i < 10; ++i) {
6596 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6597     {
6598 #pragma omp single
6599       {
6600 	bar();
6601       }
6602     }
6603   }
6604 #pragma omp target
6605 #pragma omp teams distribute parallel for simd
6606   for (int i = 0; i < 10; ++i) {
6607 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6608     for (int i = 0; i < 10; ++i)
6609       ;
6610   }
6611 #pragma omp target
6612 #pragma omp teams distribute parallel for simd
6613   for (int i = 0; i < 10; ++i) {
6614 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6615     for (int i = 0; i < 10; ++i)
6616       ;
6617   }
6618 #pragma omp target
6619 #pragma omp teams distribute parallel for simd
6620   for (int i = 0; i < 10; ++i) {
6621 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6622     {
6623       bar();
6624     }
6625   }
6626 #pragma omp target
6627 #pragma omp teams distribute parallel for simd
6628   for (int i = 0; i < 10; ++i) {
6629 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6630     {
6631       bar();
6632     }
6633   }
6634 #pragma omp target
6635 #pragma omp teams distribute parallel for simd
6636   for (int i = 0; i < 10; ++i) {
6637 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6638     bar();
6639   }
6640 #pragma omp target
6641 #pragma omp teams distribute parallel for simd
6642   for (int i = 0; i < 10; ++i) {
6643 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6644     bar();
6645   }
6646 #pragma omp target
6647 #pragma omp teams distribute parallel for simd
6648   for (int i = 0; i < 10; ++i) {
6649 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6650     bar();
6651   }
6652 #pragma omp target
6653 #pragma omp teams distribute parallel for simd
6654   for (int i = 0; i < 10; ++i) {
6655 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6656     bar();
6657   }
6658 #pragma omp target
6659 #pragma omp teams distribute parallel for simd
6660   for (int i = 0; i < 10; ++i) {
6661 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6662     bar();
6663   }
6664 #pragma omp target
6665 #pragma omp teams distribute parallel for simd
6666   for (int i = 0; i < 10; ++i) {
6667 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6668     ++a;
6669   }
6670 #pragma omp target
6671 #pragma omp teams distribute parallel for simd
6672   for (int i = 0; i < 10; ++i) {
6673 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6674     ++a;
6675   }
6676 #pragma omp target
6677 #pragma omp teams distribute parallel for simd
6678   for (int i = 0; i < 10; ++i) {
6679 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6680     ++a;
6681   }
6682 #pragma omp target
6683 #pragma omp teams distribute parallel for simd
6684   for (int i = 0; i < 10; ++i) {
6685 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6686     for (int i = 0; i < 10; ++i)
6687       ;
6688   }
6689 #pragma omp target
6690 #pragma omp teams distribute parallel for simd
6691   for (int i = 0; i < 10; ++i) {
6692 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6693     ++a;
6694   }
6695 #pragma omp target
6696 #pragma omp teams distribute parallel for simd
6697   for (int i = 0; i < 10; ++i) {
6698 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6699     ++a;
6700   }
6701 #pragma omp target
6702 #pragma omp teams distribute parallel for simd
6703   for (int i = 0; i < 10; ++i) {
6704 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6705     ++a;
6706   }
6707 #pragma omp target
6708 #pragma omp teams distribute parallel for simd
6709   for (int i = 0; i < 10; ++i) {
6710 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6711     ++a;
6712   }
6713 #pragma omp target
6714 #pragma omp teams distribute parallel for simd
6715   for (int i = 0; i < 10; ++i) {
6716 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6717     for (int i = 0; i < 10; ++i)
6718       ++a;
6719   }
6720 #pragma omp target
6721 #pragma omp teams distribute parallel for simd
6722   for (int i = 0; i < 10; ++i) {
6723 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6724     for (int i = 0; i < 10; ++i)
6725       ++a;
6726   }
6727 #pragma omp target
6728 #pragma omp teams distribute parallel for simd
6729   for (int i = 0; i < 10; ++i) {
6730 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6731     for (int i = 0; i < 10; ++i)
6732       ++a;
6733   }
6734 #pragma omp target
6735 #pragma omp teams distribute parallel for simd
6736   for (int i = 0; i < 10; ++i) {
6737 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6738     for (int i = 0; i < 10; ++i)
6739       ++a;
6740   }
6741 #pragma omp target
6742 #pragma omp teams distribute parallel for simd
6743   for (int i = 0; i < 10; ++i) {
6744 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6745     for (int i = 0; i < 10; ++i)
6746       ++a;
6747   }
6748 #pragma omp target
6749 #pragma omp teams distribute parallel for simd
6750   for (int i = 0; i < 10; ++i) {
6751 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6752     for (int i = 0; i < 10; ++i)
6753       ++a;
6754   }
6755 #pragma omp target
6756 #pragma omp teams distribute parallel for simd
6757   for (int i = 0; i < 10; ++i) {
6758 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6759     ++a;
6760   }
6761 
6762 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
6763 #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?}}
6764   for (int i = 0; i < 10; ++i)
6765     ;
6766 #pragma omp target
6767 #pragma omp teams distribute parallel for
6768   for (int i = 0; i < 10; ++i) {
6769 #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?}}
6770     for (int i = 0; i < 10; ++i)
6771       ;
6772   }
6773 #pragma omp target
6774 #pragma omp teams distribute parallel for
6775   for (int i = 0; i < 10; ++i) {
6776 #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?}}
6777     for (int i = 0; i < 10; ++i)
6778       ;
6779   }
6780 #pragma omp target
6781 #pragma omp teams distribute parallel for
6782   for (int i = 0; i < 10; ++i) {
6783 #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?}}
6784     for (int i = 0; i < 10; ++i)
6785       ;
6786   }
6787 #pragma omp target
6788 #pragma omp teams distribute parallel for
6789   for (int i = 0; i < 10; ++i) {
6790 #pragma omp simd // OK
6791     for (int i = 0; i < 10; ++i)
6792       ;
6793   }
6794 #pragma omp target
6795 #pragma omp teams distribute parallel for
6796   for (int i = 0; i < 10; ++i) {
6797 #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?}}
6798     for (int i = 0; i < 10; ++i)
6799       ;
6800   }
6801 #pragma omp target
6802 #pragma omp teams distribute parallel for
6803   for (int i = 0; i < 10; ++i) {
6804 #pragma omp parallel // OK
6805     for (int i = 0; i < 10; ++i)
6806       ;
6807   }
6808 #pragma omp target
6809 #pragma omp teams distribute parallel for
6810   for (int i = 0; i < 10; ++i) {
6811 #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?}}
6812     {
6813       bar();
6814     }
6815   }
6816 #pragma omp target
6817 #pragma omp teams distribute parallel for
6818   for (int i = 0; i < 10; ++i) {
6819 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
6820     {
6821       bar();
6822     }
6823   }
6824 #pragma omp target
6825 #pragma omp teams distribute parallel for
6826   for (int i = 0; i < 10; ++i) {
6827 #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?}}
6828     {
6829       bar();
6830     }
6831   }
6832 #pragma omp target
6833 #pragma omp teams distribute parallel for
6834   for (int i = 0; i < 10; ++i) {
6835 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
6836     {
6837       bar();
6838     }
6839   }
6840 #pragma omp target
6841 #pragma omp teams distribute parallel for
6842   for (int i = 0; i < 10; ++i) {
6843 #pragma omp critical // OK
6844     {
6845       bar();
6846     }
6847   }
6848 #pragma omp target
6849 #pragma omp teams distribute parallel for
6850   for (int i = 0; i < 10; ++i) {
6851 #pragma omp parallel // OK
6852     {
6853 #pragma omp single
6854       {
6855 	bar();
6856       }
6857     }
6858   }
6859 #pragma omp target
6860 #pragma omp teams distribute parallel for
6861   for (int i = 0; i < 10; ++i) {
6862 #pragma omp parallel for // OK
6863     for (int i = 0; i < 10; ++i)
6864       ;
6865   }
6866 #pragma omp target
6867 #pragma omp teams distribute parallel for
6868   for (int i = 0; i < 10; ++i) {
6869 #pragma omp parallel for simd // OK
6870     for (int i = 0; i < 10; ++i)
6871       ;
6872   }
6873 #pragma omp target
6874 #pragma omp teams distribute parallel for
6875   for (int i = 0; i < 10; ++i) {
6876 #pragma omp parallel sections // OK
6877     {
6878       bar();
6879     }
6880   }
6881 #pragma omp target
6882 #pragma omp teams distribute parallel for
6883   for (int i = 0; i < 10; ++i) {
6884 #pragma omp task // OK
6885     {
6886       bar();
6887     }
6888   }
6889 #pragma omp target
6890 #pragma omp teams distribute parallel for
6891   for (int i = 0; i < 10; ++i) {
6892 #pragma omp taskyield // OK
6893     bar();
6894   }
6895 #pragma omp target
6896 #pragma omp teams distribute parallel for
6897   for (int i = 0; i < 10; ++i) {
6898 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
6899     bar();
6900   }
6901 #pragma omp target
6902 #pragma omp teams distribute parallel for
6903   for (int i = 0; i < 10; ++i) {
6904 #pragma omp taskwait // OK
6905     bar();
6906   }
6907 #pragma omp target
6908 #pragma omp teams distribute parallel for
6909   for (int i = 0; i < 10; ++i) {
6910 #pragma omp flush // OK
6911     bar();
6912   }
6913 #pragma omp target
6914 #pragma omp teams distribute parallel for
6915   for (int i = 0; i < 10; ++i) {
6916 #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?}}
6917     bar();
6918   }
6919 #pragma omp target
6920 #pragma omp teams distribute parallel for
6921   for (int i = 0; i < 10; ++i) {
6922 #pragma omp atomic // OK
6923     ++a;
6924   }
6925 #pragma omp target
6926 #pragma omp teams distribute parallel for
6927   for (int i = 0; i < 10; ++i) {
6928 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6929     ++a;
6930   }
6931 #pragma omp target
6932 #pragma omp teams distribute parallel for
6933   for (int i = 0; i < 10; ++i) {
6934 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6935     ++a;
6936   }
6937 #pragma omp target
6938 #pragma omp teams distribute parallel for
6939   for (int i = 0; i < 10; ++i) {
6940 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6941     for (int i = 0; i < 10; ++i)
6942       ;
6943   }
6944 #pragma omp target
6945 #pragma omp teams distribute parallel for
6946   for (int i = 0; i < 10; ++i) {
6947 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6948     ++a;
6949   }
6950 #pragma omp target
6951 #pragma omp teams distribute parallel for
6952   for (int i = 0; i < 10; ++i) {
6953 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6954     ++a;
6955   }
6956 #pragma omp target
6957 #pragma omp teams distribute parallel for
6958   for (int i = 0; i < 10; ++i) {
6959 #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?}}
6960     ++a;
6961   }
6962 #pragma omp target
6963 #pragma omp teams distribute parallel for
6964   for (int i = 0; i < 10; ++i) {
6965 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6966     ++a;
6967   }
6968 #pragma omp target
6969 #pragma omp teams distribute parallel for
6970   for (int i = 0; i < 10; ++i) {
6971 #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?}}
6972     for (int i = 0; i < 10; ++i)
6973       ++a;
6974   }
6975 #pragma omp target
6976 #pragma omp teams distribute parallel for
6977   for (int i = 0; i < 10; ++i) {
6978 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6979     for (int i = 0; i < 10; ++i)
6980       ++a;
6981   }
6982 #pragma omp target
6983 #pragma omp teams distribute parallel for
6984   for (int i = 0; i < 10; ++i) {
6985 #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?}}
6986     for (int i = 0; i < 10; ++i)
6987       ++a;
6988   }
6989 #pragma omp target
6990 #pragma omp teams distribute parallel for
6991   for (int i = 0; i < 10; ++i) {
6992 #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?}}
6993     for (int i = 0; i < 10; ++i)
6994       ++a;
6995   }
6996 #pragma omp target
6997 #pragma omp teams distribute parallel for
6998   for (int i = 0; i < 10; ++i) {
6999 #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?}}
7000     for (int i = 0; i < 10; ++i)
7001       ++a;
7002   }
7003 #pragma omp target
7004 #pragma omp teams distribute parallel for
7005   for (int i = 0; i < 10; ++i) {
7006 #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?}}
7007     for (int i = 0; i < 10; ++i)
7008       ++a;
7009   }
7010 #pragma omp target
7011 #pragma omp teams distribute parallel for
7012   for (int i = 0; i < 10; ++i) {
7013 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7014     ++a;
7015   }
7016 
7017 // TARGET TEAMS DIRECTIVE
7018 #pragma omp target teams
7019 #pragma omp parallel
7020   bar();
7021 #pragma omp target teams
7022 #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?}}
7023   for (int i = 0; i < 10; ++i)
7024     ;
7025 #pragma omp target teams
7026 #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?}}
7027   for (int i = 0; i < 10; ++i)
7028     ;
7029 #pragma omp target teams
7030 #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?}}
7031   for (int i = 0; i < 10; ++i)
7032     ;
7033 #pragma omp target teams
7034 #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?}}
7035   {
7036     bar();
7037   }
7038 #pragma omp target teams
7039 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
7040   {
7041     bar();
7042   }
7043 #pragma omp target teams
7044 #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?}}
7045   bar();
7046 
7047 #pragma omp target teams
7048 #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?}}
7049   {
7050     bar();
7051   }
7052 #pragma omp target teams
7053 #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?}}
7054   {
7055     bar();
7056   }
7057 #pragma omp target teams
7058 #pragma omp parallel for
7059   for (int i = 0; i < 10; ++i)
7060     ;
7061 #pragma omp target teams
7062 #pragma omp parallel for simd
7063   for (int i = 0; i < 10; ++i)
7064     ;
7065 #pragma omp target teams
7066 #pragma omp parallel sections
7067   {
7068     bar();
7069   }
7070 #pragma omp target teams
7071 #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?}}
7072   {
7073     bar();
7074   }
7075 #pragma omp target teams
7076   {
7077 #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?}}
7078     bar();
7079   }
7080 #pragma omp target teams
7081   {
7082 #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?}}
7083     bar();
7084   }
7085 #pragma omp target teams
7086   {
7087 #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?}}
7088     bar();
7089   }
7090 #pragma omp target teams
7091   {
7092 #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?}}
7093     bar();
7094   }
7095 #pragma omp target teams
7096   {
7097 #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?}}
7098     bar();
7099   }
7100 #pragma omp target teams
7101   {
7102 #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?}}
7103     ++a;
7104   }
7105 #pragma omp target teams
7106   {
7107 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
7108     ++a;
7109   }
7110 #pragma omp target teams
7111   {
7112 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
7113     ++a;
7114   }
7115 #pragma omp target teams
7116 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
7117   for (int i = 0; i < 10; ++i)
7118     ;
7119 #pragma omp target teams
7120   {
7121 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7122   }
7123 #pragma omp target teams
7124   {
7125 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7126   }
7127 #pragma omp target teams
7128   {
7129 #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?}}
7130     ++a;
7131   }
7132 #pragma omp target teams
7133   {
7134 #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?}}
7135   for (int i = 0; i < 10; ++i)
7136     ++a;
7137   }
7138 #pragma omp target teams
7139 #pragma omp distribute
7140   for (int i = 0; i < 10; ++i)
7141     ;
7142 #pragma omp target teams
7143   {
7144 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
7145     ++a;
7146   }
7147 #pragma omp target teams
7148 #pragma omp distribute parallel for
7149   for (int i = 0; i < 10; ++i)
7150     ;
7151 #pragma omp target teams
7152   {
7153 #pragma omp distribute parallel for
7154   for (int i = 0; i < 10; ++i)
7155     ;
7156 #pragma omp distribute parallel for
7157   for (int j = 0; j < 10; ++j)
7158     ;
7159   }
7160 #pragma omp target teams
7161   {
7162 #pragma omp distribute parallel for simd
7163   for (int i = 0; i < 10; ++i)
7164     ;
7165 #pragma omp distribute parallel for simd
7166   for (int j = 0; j < 10; ++j)
7167     ;
7168   }
7169 #pragma omp target teams
7170   {
7171 #pragma omp distribute simd
7172   for (int i = 0; i < 10; ++i)
7173     ;
7174 #pragma omp distribute simd
7175   for (int j = 0; j < 10; ++j)
7176     ;
7177   }
7178 #pragma omp target teams
7179   {
7180 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
7181   for (int i = 0; i < 10; ++i)
7182     ;
7183   }
7184 #pragma omp target teams
7185   {
7186 #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?}}
7187   for (int i = 0; i < 10; ++i)
7188     ;
7189   }
7190 #pragma omp target teams
7191   {
7192 #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?}}
7193   for (int i = 0; i < 10; ++i)
7194     ;
7195   }
7196 #pragma omp target teams
7197   {
7198 #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?}}
7199   for (int i = 0; i < 10; ++i)
7200     ;
7201   }
7202 #pragma omp target teams
7203   {
7204 #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?}}
7205   for (int i = 0; i < 10; ++i)
7206     ;
7207   }
7208 #pragma omp target teams
7209   {
7210 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
7211     a++;
7212   }
7213 
7214 }
7215 
7216 void foo() {
7217   int a = 0;
7218 // PARALLEL DIRECTIVE
7219 #pragma omp parallel
7220 #pragma omp for
7221   for (int i = 0; i < 10; ++i)
7222     ;
7223 #pragma omp parallel
7224 #pragma omp simd
7225   for (int i = 0; i < 10; ++i)
7226     ;
7227 #pragma omp parallel
7228 #pragma omp for simd
7229   for (int i = 0; i < 10; ++i)
7230     ;
7231 #pragma omp parallel
7232 #pragma omp sections
7233   {
7234     bar();
7235   }
7236 #pragma omp parallel
7237 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
7238   {
7239     bar();
7240   }
7241 #pragma omp parallel
7242 #pragma omp sections
7243   {
7244     bar();
7245   }
7246 #pragma omp parallel
7247 #pragma omp single
7248   bar();
7249 #pragma omp parallel
7250 #pragma omp master
7251   bar();
7252 #pragma omp parallel
7253 #pragma omp critical
7254   bar();
7255 #pragma omp parallel
7256 #pragma omp parallel for
7257   for (int i = 0; i < 10; ++i)
7258     ;
7259 #pragma omp parallel
7260 #pragma omp parallel for simd
7261   for (int i = 0; i < 10; ++i)
7262     ;
7263 #pragma omp parallel
7264 #pragma omp parallel sections
7265   {
7266     bar();
7267   }
7268 #pragma omp parallel
7269 #pragma omp task
7270   {
7271     bar();
7272   }
7273 #pragma omp parallel
7274   {
7275 #pragma omp taskyield
7276     bar();
7277   }
7278 #pragma omp parallel
7279   {
7280 #pragma omp barrier
7281     bar();
7282   }
7283 #pragma omp parallel
7284   {
7285 #pragma omp taskwait
7286     bar();
7287   }
7288 #pragma omp parallel
7289   {
7290 #pragma omp flush
7291     bar();
7292   }
7293 #pragma omp parallel
7294   {
7295 #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?}}
7296     bar();
7297   }
7298 #pragma omp parallel
7299   {
7300 #pragma omp atomic
7301     ++a;
7302   }
7303 #pragma omp parallel
7304   {
7305 #pragma omp target
7306     ++a;
7307   }
7308 #pragma omp parallel
7309   {
7310 #pragma omp target parallel
7311     ++a;
7312   }
7313 #pragma omp parallel
7314 #pragma omp target parallel for
7315   for (int i = 0; i < 10; ++i)
7316     ;
7317 #pragma omp parallel
7318   {
7319 #pragma omp target enter data map(to: a)
7320     ++a;
7321   }
7322 #pragma omp parallel
7323   {
7324 #pragma omp target exit data map(from: a)
7325     ++a;
7326   }
7327 #pragma omp parallel
7328   {
7329 #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?}}
7330     ++a;
7331   }
7332 #pragma omp parallel
7333   {
7334 #pragma omp taskloop
7335   for (int i = 0; i < 10; ++i)
7336     ++a;
7337   }
7338 #pragma omp parallel
7339   {
7340 #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?}}
7341     for (int i = 0; i < 10; ++i)
7342       ;
7343   }
7344 #pragma omp parallel
7345   {
7346 #pragma omp target update to(a)
7347     a++;
7348   }
7349 #pragma omp parallel
7350   {
7351 #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?}}
7352     for (int i = 0; i < 10; ++i)
7353       ;
7354   }
7355 #pragma omp parallel
7356   {
7357 #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?}}
7358     for (int i = 0; i < 10; ++i)
7359       ;
7360   }
7361 #pragma omp parallel
7362   {
7363 #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?}}
7364     for (int i = 0; i < 10; ++i)
7365       ;
7366   }
7367 #pragma omp parallel
7368   {
7369 #pragma omp target simd // OK
7370     for (int i = 0; i < 10; ++i)
7371       ;
7372   }
7373 #pragma omp parallel
7374   {
7375 #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?}}
7376     for (int i = 0; i < 10; ++i)
7377       ;
7378   }
7379 #pragma omp parallel
7380   {
7381 #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?}}
7382     for (int i = 0; i < 10; ++i)
7383       ;
7384   }
7385 #pragma omp parallel
7386   {
7387 #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?}}
7388     for (int i = 0; i < 10; ++i)
7389       ;
7390   }
7391 #pragma omp parallel
7392   {
7393 #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?}}
7394     for (int i = 0; i < 10; ++i)
7395       ;
7396   }
7397 #pragma omp parallel
7398   {
7399 #pragma omp target teams // OK
7400     a++;
7401   }
7402 
7403 // SIMD DIRECTIVE
7404 #pragma omp simd
7405   for (int i = 0; i < 10; ++i) {
7406 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7407     for (int i = 0; i < 10; ++i)
7408       ;
7409   }
7410 #pragma omp simd
7411   for (int i = 0; i < 10; ++i) {
7412 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7413     for (int i = 0; i < 10; ++i)
7414       ;
7415   }
7416 #pragma omp simd
7417   for (int i = 0; i < 10; ++i) {
7418 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7419     for (int i = 0; i < 10; ++i)
7420       ;
7421   }
7422 #pragma omp simd
7423   for (int i = 0; i < 10; ++i) {
7424 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7425     for (int i = 0; i < 10; ++i)
7426       ;
7427   }
7428 #pragma omp simd
7429   for (int i = 0; i < 10; ++i) {
7430 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7431     {
7432       bar();
7433     }
7434   }
7435 #pragma omp simd
7436   for (int i = 0; i < 10; ++i) {
7437 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7438     {
7439       bar();
7440     }
7441   }
7442 #pragma omp simd
7443   for (int i = 0; i < 10; ++i) {
7444 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7445     bar();
7446 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7447     bar();
7448   }
7449 #pragma omp simd
7450   for (int i = 0; i < 10; ++i) {
7451 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7452     bar();
7453 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7454     bar();
7455   }
7456 #pragma omp simd
7457   for (int i = 0; i < 10; ++i) {
7458 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7459     for (int i = 0; i < 10; ++i)
7460       ;
7461   }
7462 #pragma omp simd
7463   for (int i = 0; i < 10; ++i) {
7464 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7465     for (int i = 0; i < 10; ++i)
7466       ;
7467   }
7468 #pragma omp simd
7469   for (int i = 0; i < 10; ++i) {
7470 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7471     {
7472       bar();
7473     }
7474   }
7475 #pragma omp simd
7476   for (int i = 0; i < 10; ++i) {
7477 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7478     {
7479       bar();
7480     }
7481   }
7482 #pragma omp simd
7483   for (int i = 0; i < 10; ++i) {
7484 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7485     bar();
7486   }
7487 #pragma omp simd
7488   for (int i = 0; i < 10; ++i) {
7489 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7490     bar();
7491   }
7492 #pragma omp simd
7493   for (int i = 0; i < 10; ++i) {
7494 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7495     bar();
7496   }
7497 #pragma omp simd
7498   for (int i = 0; i < 10; ++i) {
7499 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7500     bar();
7501   }
7502 #pragma omp simd
7503   for (int i = 0; i < 10; ++i) {
7504 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7505     bar();
7506   }
7507 #pragma omp simd
7508   for (int i = 0; i < 10; ++i) {
7509 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7510     ++a;
7511   }
7512 #pragma omp simd
7513   for (int i = 0; i < 10; ++i) {
7514 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7515     ++a;
7516   }
7517 #pragma omp simd
7518   for (int i = 0; i < 10; ++i) {
7519 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7520     ++a;
7521   }
7522 #pragma omp simd
7523   for (int i = 0; i < 10; ++i) {
7524 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7525     for (int i = 0; i < 10; ++i)
7526       ;
7527   }
7528 #pragma omp simd
7529   for (int i = 0; i < 10; ++i) {
7530 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7531     ++a;
7532   }
7533 #pragma omp simd
7534   for (int i = 0; i < 10; ++i) {
7535 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7536     ++a;
7537   }
7538 #pragma omp simd
7539   for (int i = 0; i < 10; ++i) {
7540 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7541     ++a;
7542   }
7543 #pragma omp simd
7544   for (int i = 0; i < 10; ++i) {
7545 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7546   for (int i = 0; i < 10; ++i)
7547     ++a;
7548   }
7549 #pragma omp simd
7550   for (int i = 0; i < 10; ++i) {
7551 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7552     for (int j = 0; j < 10; ++j)
7553       ;
7554   }
7555 #pragma omp simd
7556   for (int i = 0; i < 10; ++i) {
7557 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7558     a++;
7559   }
7560 #pragma omp simd
7561   for (int i = 0; i < 10; ++i) {
7562 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7563     for (int j = 0; j < 10; ++j)
7564       ;
7565   }
7566 #pragma omp simd
7567   for (int i = 0; i < 10; ++i) {
7568 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7569     for (int j = 0; j < 10; ++j)
7570       ;
7571   }
7572 #pragma omp simd
7573   for (int i = 0; i < 10; ++i) {
7574 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7575     for (int j = 0; j < 10; ++j)
7576       ;
7577   }
7578 #pragma omp simd
7579   for (int i = 0; i < 10; ++i) {
7580 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7581     for (int j = 0; j < 10; ++j)
7582       ;
7583   }
7584 #pragma omp simd
7585   for (int i = 0; i < 10; ++i) {
7586 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7587     for (int j = 0; j < 10; ++j)
7588       ;
7589   }
7590 #pragma omp simd
7591   for (int i = 0; i < 10; ++i) {
7592 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7593     for (int j = 0; j < 10; ++j)
7594       ;
7595   }
7596 #pragma omp simd
7597   for (int i = 0; i < 10; ++i) {
7598 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7599     for (int j = 0; j < 10; ++j)
7600       ;
7601   }
7602 #pragma omp simd
7603   for (int i = 0; i < 10; ++i) {
7604 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7605     for (int j = 0; j < 10; ++j)
7606       ;
7607   }
7608 #pragma omp simd
7609   for (int i = 0; i < 10; ++i) {
7610 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7611     a++;
7612   }
7613 
7614 // FOR DIRECTIVE
7615 #pragma omp for
7616   for (int i = 0; i < 10; ++i) {
7617 #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?}}
7618     for (int i = 0; i < 10; ++i)
7619       ;
7620   }
7621 #pragma omp for
7622   for (int i = 0; i < 10; ++i) {
7623 #pragma omp simd
7624     for (int i = 0; i < 10; ++i)
7625       ;
7626   }
7627 #pragma omp for
7628   for (int i = 0; i < 10; ++i) {
7629 #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?}}
7630     for (int i = 0; i < 10; ++i)
7631       ;
7632   }
7633 #pragma omp for
7634   for (int i = 0; i < 10; ++i) {
7635 #pragma omp parallel
7636     for (int i = 0; i < 10; ++i)
7637       ;
7638   }
7639 #pragma omp for
7640   for (int i = 0; i < 10; ++i) {
7641 #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?}}
7642     {
7643       bar();
7644     }
7645   }
7646 #pragma omp for
7647   for (int i = 0; i < 10; ++i) {
7648 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
7649     {
7650       bar();
7651     }
7652   }
7653 #pragma omp for
7654   for (int i = 0; i < 10; ++i) {
7655 #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?}}
7656     bar();
7657 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
7658     bar();
7659 #pragma omp critical
7660     bar();
7661   }
7662 #pragma omp for
7663   for (int i = 0; i < 10; ++i) {
7664 #pragma omp parallel
7665     {
7666 #pragma omp single // OK
7667       {
7668         bar();
7669       }
7670 #pragma omp for // OK
7671       for (int i = 0; i < 10; ++i)
7672         ;
7673 #pragma omp for simd // OK
7674       for (int i = 0; i < 10; ++i)
7675         ;
7676 #pragma omp sections // OK
7677       {
7678         bar();
7679       }
7680     }
7681   }
7682 #pragma omp for
7683   for (int i = 0; i < 10; ++i) {
7684 #pragma omp parallel for
7685     for (int i = 0; i < 10; ++i)
7686       ;
7687   }
7688 #pragma omp for
7689   for (int i = 0; i < 10; ++i) {
7690 #pragma omp parallel for simd
7691     for (int i = 0; i < 10; ++i)
7692       ;
7693   }
7694 #pragma omp for
7695   for (int i = 0; i < 10; ++i) {
7696 #pragma omp parallel sections
7697     {
7698       bar();
7699     }
7700   }
7701 #pragma omp for
7702   for (int i = 0; i < 10; ++i) {
7703 #pragma omp task
7704     {
7705       bar();
7706     }
7707   }
7708 #pragma omp for
7709   for (int i = 0; i < 10; ++i) {
7710 #pragma omp taskyield
7711     bar();
7712   }
7713 #pragma omp for
7714   for (int i = 0; i < 10; ++i) {
7715 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
7716     bar();
7717   }
7718 #pragma omp for
7719   for (int i = 0; i < 10; ++i) {
7720 #pragma omp taskwait
7721     bar();
7722   }
7723 #pragma omp for
7724   for (int i = 0; i < 10; ++i) {
7725 #pragma omp flush
7726     bar();
7727   }
7728 #pragma omp for
7729   for (int i = 0; i < 10; ++i) {
7730 #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?}}
7731     bar();
7732   }
7733 #pragma omp for ordered
7734   for (int i = 0; i < 10; ++i) {
7735 #pragma omp ordered // OK
7736     bar();
7737   }
7738 #pragma omp for
7739   for (int i = 0; i < 10; ++i) {
7740 #pragma omp atomic
7741     ++a;
7742   }
7743 #pragma omp for
7744   for (int i = 0; i < 10; ++i) {
7745 #pragma omp target
7746     ++a;
7747   }
7748 #pragma omp for
7749   for (int i = 0; i < 10; ++i) {
7750 #pragma omp target parallel
7751     ++a;
7752   }
7753 #pragma omp for
7754   for (int i = 0; i < 10; ++i) {
7755 #pragma omp target parallel for
7756     for (int i = 0; i < 10; ++i)
7757       ;
7758   }
7759 #pragma omp for
7760   for (int i = 0; i < 10; ++i) {
7761 #pragma omp target enter data map(to: a)
7762     ++a;
7763   }
7764 #pragma omp for
7765   for (int i = 0; i < 10; ++i) {
7766 #pragma omp target exit data map(from: a)
7767     ++a;
7768   }
7769 #pragma omp for
7770   for (int i = 0; i < 10; ++i) {
7771 #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?}}
7772     ++a;
7773   }
7774 #pragma omp for
7775   for (int i = 0; i < 10; ++i) {
7776 #pragma omp taskloop
7777   for (int i = 0; i < 10; ++i)
7778     ++a;
7779   }
7780 #pragma omp for
7781   for (int i = 0; i < 10; ++i) {
7782 #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?}}
7783     for (int j = 0; j < 10; ++j)
7784       ;
7785   }
7786 #pragma omp for
7787   for (int i = 0; i < 10; ++i) {
7788 #pragma omp target update to(a)
7789     ++a;
7790   }
7791 #pragma omp for
7792   for (int i = 0; i < 10; ++i) {
7793 #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?}}
7794     for (int j = 0; j < 10; ++j)
7795       ;
7796   }
7797 #pragma omp for
7798   for (int i = 0; i < 10; ++i) {
7799 #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?}}
7800     for (int j = 0; j < 10; ++j)
7801       ;
7802   }
7803 #pragma omp for
7804   for (int i = 0; i < 10; ++i) {
7805 #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?}}
7806     for (int j = 0; j < 10; ++j)
7807       ;
7808   }
7809 #pragma omp for
7810   for (int i = 0; i < 10; ++i) {
7811 #pragma omp target simd // OK
7812     for (int j = 0; j < 10; ++j)
7813       ;
7814   }
7815 #pragma omp for
7816   for (int i = 0; i < 10; ++i) {
7817 #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?}}
7818     for (int j = 0; j < 10; ++j)
7819       ;
7820   }
7821 #pragma omp for
7822   for (int i = 0; i < 10; ++i) {
7823 #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?}}
7824     for (int j = 0; j < 10; ++j)
7825       ;
7826   }
7827 #pragma omp for
7828   for (int i = 0; i < 10; ++i) {
7829 #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?}}
7830     for (int j = 0; j < 10; ++j)
7831       ;
7832   }
7833 #pragma omp for
7834   for (int i = 0; i < 10; ++i) {
7835 #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?}}
7836     for (int j = 0; j < 10; ++j)
7837       ;
7838   }
7839 #pragma omp for
7840   for (int i = 0; i < 10; ++i) {
7841 #pragma omp target teams // OK
7842     a++;
7843   }
7844 
7845 // FOR SIMD DIRECTIVE
7846 #pragma omp for simd
7847   for (int i = 0; i < 10; ++i) {
7848 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7849     for (int i = 0; i < 10; ++i)
7850       ;
7851   }
7852 #pragma omp for simd
7853   for (int i = 0; i < 10; ++i) {
7854 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7855     for (int i = 0; i < 10; ++i)
7856       ;
7857   }
7858 #pragma omp for simd
7859   for (int i = 0; i < 10; ++i) {
7860 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7861     for (int i = 0; i < 10; ++i)
7862       ;
7863   }
7864 #pragma omp for simd
7865   for (int i = 0; i < 10; ++i) {
7866 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7867     for (int i = 0; i < 10; ++i)
7868       ;
7869   }
7870 #pragma omp for simd
7871   for (int i = 0; i < 10; ++i) {
7872 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7873     {
7874       bar();
7875     }
7876   }
7877 #pragma omp for simd
7878   for (int i = 0; i < 10; ++i) {
7879 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7880     {
7881       bar();
7882     }
7883   }
7884 #pragma omp for simd
7885   for (int i = 0; i < 10; ++i) {
7886 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7887     bar();
7888 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7889     bar();
7890   }
7891 #pragma omp for simd
7892   for (int i = 0; i < 10; ++i) {
7893 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7894     bar();
7895 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7896     bar();
7897   }
7898 #pragma omp for simd
7899   for (int i = 0; i < 10; ++i) {
7900 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7901     for (int i = 0; i < 10; ++i)
7902       ;
7903   }
7904 #pragma omp for simd
7905   for (int i = 0; i < 10; ++i) {
7906 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7907     for (int i = 0; i < 10; ++i)
7908       ;
7909   }
7910 #pragma omp for simd
7911   for (int i = 0; i < 10; ++i) {
7912 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7913     {
7914       bar();
7915     }
7916   }
7917 #pragma omp for simd
7918   for (int i = 0; i < 10; ++i) {
7919 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7920     {
7921       bar();
7922     }
7923   }
7924 #pragma omp for simd
7925   for (int i = 0; i < 10; ++i) {
7926 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7927     bar();
7928   }
7929 #pragma omp for simd
7930   for (int i = 0; i < 10; ++i) {
7931 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7932     bar();
7933   }
7934 #pragma omp for simd
7935   for (int i = 0; i < 10; ++i) {
7936 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7937     bar();
7938   }
7939 #pragma omp for simd
7940   for (int i = 0; i < 10; ++i) {
7941 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7942     bar();
7943   }
7944 #pragma omp for simd
7945   for (int i = 0; i < 10; ++i) {
7946 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7947     bar();
7948   }
7949 #pragma omp for simd
7950   for (int i = 0; i < 10; ++i) {
7951 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7952     ++a;
7953   }
7954 #pragma omp for simd
7955   for (int i = 0; i < 10; ++i) {
7956 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7957     ++a;
7958   }
7959 #pragma omp for simd
7960   for (int i = 0; i < 10; ++i) {
7961 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7962     ++a;
7963   }
7964 #pragma omp for simd
7965   for (int i = 0; i < 10; ++i) {
7966 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7967     for (int i = 0; i < 10; ++i)
7968       ;
7969   }
7970 #pragma omp for simd
7971   for (int i = 0; i < 10; ++i) {
7972 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7973     ++a;
7974   }
7975 #pragma omp for simd
7976   for (int i = 0; i < 10; ++i) {
7977 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7978     ++a;
7979   }
7980 #pragma omp for simd
7981   for (int i = 0; i < 10; ++i) {
7982 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7983     ++a;
7984   }
7985 #pragma omp for simd
7986   for (int i = 0; i < 10; ++i) {
7987 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7988   for (int i = 0; i < 10; ++i)
7989     ++a;
7990   }
7991 #pragma omp for simd
7992   for (int i = 0; i < 10; ++i) {
7993 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7994     for (int j = 0; j < 10; ++j)
7995       ;
7996   }
7997 #pragma omp for simd
7998   for (int i = 0; i < 10; ++i) {
7999 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8000     ++a;
8001   }
8002 #pragma omp for simd
8003   for (int i = 0; i < 10; ++i) {
8004 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8005     for (int j = 0; j < 10; ++j)
8006       ;
8007   }
8008 #pragma omp for simd
8009   for (int i = 0; i < 10; ++i) {
8010 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8011     for (int j = 0; j < 10; ++j)
8012       ;
8013   }
8014 #pragma omp for simd
8015   for (int i = 0; i < 10; ++i) {
8016 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8017     for (int j = 0; j < 10; ++j)
8018       ;
8019   }
8020 #pragma omp for simd
8021   for (int i = 0; i < 10; ++i) {
8022 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8023     for (int j = 0; j < 10; ++j)
8024       ;
8025   }
8026 #pragma omp for simd
8027   for (int i = 0; i < 10; ++i) {
8028 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8029     for (int j = 0; j < 10; ++j)
8030       ;
8031   }
8032 #pragma omp for simd
8033   for (int i = 0; i < 10; ++i) {
8034 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8035     for (int j = 0; j < 10; ++j)
8036       ;
8037   }
8038 #pragma omp for simd
8039   for (int i = 0; i < 10; ++i) {
8040 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8041     for (int j = 0; j < 10; ++j)
8042       ;
8043   }
8044 #pragma omp for simd
8045   for (int i = 0; i < 10; ++i) {
8046 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8047     for (int j = 0; j < 10; ++j)
8048       ;
8049   }
8050 #pragma omp for simd
8051   for (int i = 0; i < 10; ++i) {
8052 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8053     a++;
8054   }
8055 
8056 // SECTIONS DIRECTIVE
8057 #pragma omp sections
8058   {
8059 #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?}}
8060     for (int i = 0; i < 10; ++i)
8061       ;
8062   }
8063 #pragma omp sections
8064   {
8065 #pragma omp simd
8066     for (int i = 0; i < 10; ++i)
8067       ;
8068   }
8069 #pragma omp sections
8070   {
8071 #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?}}
8072     for (int i = 0; i < 10; ++i)
8073       ;
8074   }
8075 #pragma omp sections
8076   {
8077 #pragma omp parallel
8078     for (int i = 0; i < 10; ++i)
8079       ;
8080   }
8081 #pragma omp sections
8082   {
8083 #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?}}
8084     {
8085       bar();
8086     }
8087   }
8088 #pragma omp sections
8089   {
8090 #pragma omp section
8091     {
8092       bar();
8093     }
8094   }
8095 #pragma omp sections
8096   {
8097 #pragma omp critical
8098     bar();
8099 #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?}}
8100     bar();
8101 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
8102     bar();
8103   }
8104 #pragma omp sections
8105   {
8106 #pragma omp parallel
8107     {
8108 #pragma omp single // OK
8109       {
8110         bar();
8111       }
8112 #pragma omp for // OK
8113       for (int i = 0; i < 10; ++i)
8114         ;
8115 #pragma omp for simd // OK
8116       for (int i = 0; i < 10; ++i)
8117         ;
8118 #pragma omp sections // OK
8119       {
8120         bar();
8121       }
8122     }
8123   }
8124 #pragma omp sections
8125   {
8126 #pragma omp parallel for
8127     for (int i = 0; i < 10; ++i)
8128       ;
8129   }
8130 #pragma omp sections
8131   {
8132 #pragma omp parallel for simd
8133     for (int i = 0; i < 10; ++i)
8134       ;
8135   }
8136 #pragma omp sections
8137   {
8138 #pragma omp parallel sections
8139     {
8140       bar();
8141     }
8142   }
8143 #pragma omp sections
8144   {
8145 #pragma omp task
8146     {
8147       bar();
8148     }
8149   }
8150 #pragma omp sections
8151   {
8152 #pragma omp taskyield
8153   }
8154 #pragma omp sections
8155   {
8156 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
8157     bar();
8158   }
8159 #pragma omp sections
8160   {
8161 #pragma omp taskwait
8162   }
8163 #pragma omp sections
8164   {
8165 #pragma omp flush
8166   }
8167 #pragma omp sections
8168   {
8169 #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?}}
8170     bar();
8171   }
8172 #pragma omp sections
8173   {
8174 #pragma omp atomic
8175     ++a;
8176   }
8177 #pragma omp sections
8178   {
8179 #pragma omp target
8180     ++a;
8181   }
8182 #pragma omp sections
8183   {
8184 #pragma omp target parallel
8185     ++a;
8186   }
8187 #pragma omp sections
8188   {
8189 #pragma omp target parallel for
8190     for (int i = 0; i < 10; ++i)
8191       ;
8192   }
8193 #pragma omp sections
8194   {
8195 #pragma omp target enter data map(to: a)
8196   }
8197 #pragma omp sections
8198   {
8199 #pragma omp target exit data map(from: a)
8200   }
8201 #pragma omp sections
8202   {
8203 #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?}}
8204     ++a;
8205   }
8206 #pragma omp sections
8207   {
8208 #pragma omp taskloop
8209   for (int i = 0; i < 10; ++i)
8210     ++a;
8211   }
8212 #pragma omp sections
8213   {
8214 #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?}}
8215     for (int i = 0; i < 10; ++i)
8216       ;
8217   }
8218 #pragma omp sections
8219   {
8220 #pragma omp target update to(a)
8221   }
8222 #pragma omp sections
8223   {
8224 #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?}}
8225     for (int i = 0; i < 10; ++i)
8226       ;
8227   }
8228 #pragma omp sections
8229   {
8230 #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?}}
8231     for (int i = 0; i < 10; ++i)
8232       ;
8233   }
8234 #pragma omp sections
8235   {
8236 #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?}}
8237     for (int i = 0; i < 10; ++i)
8238       ;
8239   }
8240 #pragma omp sections
8241   {
8242 #pragma omp target simd // OK
8243     for (int i = 0; i < 10; ++i)
8244       ;
8245   }
8246 #pragma omp sections
8247   {
8248 #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?}}
8249     for (int i = 0; i < 10; ++i)
8250       ;
8251   }
8252 #pragma omp sections
8253   {
8254 #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?}}
8255     for (int i = 0; i < 10; ++i)
8256       ;
8257   }
8258 #pragma omp sections
8259   {
8260 #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?}}
8261     for (int i = 0; i < 10; ++i)
8262       ;
8263   }
8264 #pragma omp sections
8265   {
8266 #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?}}
8267     for (int i = 0; i < 10; ++i)
8268       ;
8269   }
8270 #pragma omp sections
8271   {
8272 #pragma omp target teams // OK
8273     a++;
8274   }
8275 
8276 // SECTION DIRECTIVE
8277 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
8278   {
8279     bar();
8280   }
8281 #pragma omp sections
8282   {
8283 #pragma omp section
8284     {
8285 #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?}}
8286       for (int i = 0; i < 10; ++i)
8287         ;
8288     }
8289   }
8290 #pragma omp sections
8291   {
8292 #pragma omp section
8293     {
8294 #pragma omp simd
8295       for (int i = 0; i < 10; ++i)
8296         ;
8297     }
8298   }
8299 #pragma omp sections
8300   {
8301 #pragma omp section
8302     {
8303 #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?}}
8304       for (int i = 0; i < 10; ++i)
8305         ;
8306     }
8307   }
8308 #pragma omp sections
8309   {
8310 #pragma omp section
8311     {
8312 #pragma omp parallel
8313       for (int i = 0; i < 10; ++i)
8314         ;
8315     }
8316   }
8317 #pragma omp sections
8318   {
8319 #pragma omp section
8320     {
8321 #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?}}
8322       {
8323         bar();
8324       }
8325     }
8326   }
8327 #pragma omp sections
8328   {
8329 #pragma omp section
8330     {
8331 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
8332       {
8333         bar();
8334       }
8335     }
8336   }
8337 #pragma omp sections
8338   {
8339 #pragma omp section
8340     {
8341 #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?}}
8342       bar();
8343 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
8344       bar();
8345 #pragma omp critical
8346       bar();
8347     }
8348   }
8349 #pragma omp sections
8350   {
8351 #pragma omp section
8352     {
8353 #pragma omp parallel
8354       {
8355 #pragma omp single // OK
8356         {
8357           bar();
8358         }
8359 #pragma omp for // OK
8360         for (int i = 0; i < 10; ++i)
8361           ;
8362 #pragma omp for simd // OK
8363         for (int i = 0; i < 10; ++i)
8364           ;
8365 #pragma omp sections // OK
8366         {
8367           bar();
8368         }
8369       }
8370     }
8371   }
8372 #pragma omp sections
8373   {
8374 #pragma omp section
8375     {
8376 #pragma omp parallel for
8377       for (int i = 0; i < 10; ++i)
8378         ;
8379     }
8380   }
8381 #pragma omp sections
8382   {
8383 #pragma omp section
8384     {
8385 #pragma omp parallel for simd
8386       for (int i = 0; i < 10; ++i)
8387         ;
8388     }
8389   }
8390 #pragma omp sections
8391   {
8392 #pragma omp section
8393     {
8394 #pragma omp parallel sections
8395       {
8396         bar();
8397       }
8398     }
8399   }
8400 #pragma omp sections
8401   {
8402 #pragma omp section
8403     {
8404 #pragma omp task
8405       {
8406         bar();
8407       }
8408     }
8409   }
8410 #pragma omp sections
8411   {
8412 #pragma omp section
8413     {
8414 #pragma omp taskyield
8415       bar();
8416     }
8417   }
8418 #pragma omp sections
8419   {
8420 #pragma omp section
8421     {
8422 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
8423       bar();
8424     }
8425   }
8426 #pragma omp sections
8427   {
8428 #pragma omp section
8429     {
8430 #pragma omp taskwait
8431       bar();
8432     }
8433   }
8434 #pragma omp sections
8435   {
8436 #pragma omp section
8437     {
8438 #pragma omp flush
8439       bar();
8440     }
8441   }
8442 #pragma omp sections
8443   {
8444 #pragma omp section
8445     {
8446 #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?}}
8447       bar();
8448     }
8449   }
8450 #pragma omp sections
8451   {
8452 #pragma omp section
8453     {
8454 #pragma omp atomic
8455       ++a;
8456     }
8457   }
8458 #pragma omp sections
8459   {
8460 #pragma omp section
8461     {
8462 #pragma omp target
8463       ++a;
8464     }
8465   }
8466 #pragma omp sections
8467   {
8468 #pragma omp section
8469     {
8470 #pragma omp target parallel
8471       ++a;
8472     }
8473   }
8474 #pragma omp sections
8475   {
8476 #pragma omp section
8477     {
8478 #pragma omp target parallel for
8479       for (int i = 0; i < 10; ++i)
8480         ;
8481     }
8482   }
8483 #pragma omp sections
8484   {
8485 #pragma omp section
8486     {
8487 #pragma omp target enter data map(to: a)
8488       ++a;
8489     }
8490   }
8491 #pragma omp sections
8492   {
8493 #pragma omp section
8494     {
8495 #pragma omp target exit data map(from: a)
8496       ++a;
8497     }
8498   }
8499 #pragma omp sections
8500   {
8501 #pragma omp section
8502     {
8503 #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?}}
8504       ++a;
8505     }
8506   }
8507 #pragma omp sections
8508   {
8509 #pragma omp section
8510     {
8511 #pragma omp taskloop
8512   for (int i = 0; i < 10; ++i)
8513       ++a;
8514     }
8515   }
8516 #pragma omp sections
8517   {
8518 #pragma omp section
8519 #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?}}
8520     for (int i = 0; i < 10; ++i)
8521       ;
8522   }
8523 #pragma omp sections
8524   {
8525 #pragma omp section
8526     {
8527 #pragma omp target update to(a)
8528       a++;
8529     }
8530   }
8531 #pragma omp sections
8532   {
8533 #pragma omp section
8534 #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?}}
8535     for (int i = 0; i < 10; ++i)
8536       ;
8537   }
8538 #pragma omp sections
8539   {
8540 #pragma omp section
8541 #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?}}
8542     for (int i = 0; i < 10; ++i)
8543       ;
8544   }
8545 #pragma omp sections
8546   {
8547 #pragma omp section
8548 #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?}}
8549     for (int i = 0; i < 10; ++i)
8550       ;
8551   }
8552 #pragma omp sections
8553   {
8554 #pragma omp section
8555 #pragma omp target simd // OK
8556     for (int i = 0; i < 10; ++i)
8557       ;
8558   }
8559 #pragma omp sections
8560   {
8561 #pragma omp section
8562 #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?}}
8563     for (int i = 0; i < 10; ++i)
8564       ;
8565   }
8566 #pragma omp sections
8567   {
8568 #pragma omp section
8569 #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?}}
8570     for (int i = 0; i < 10; ++i)
8571       ;
8572   }
8573 #pragma omp sections
8574   {
8575 #pragma omp section
8576 #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?}}
8577     for (int i = 0; i < 10; ++i)
8578       ;
8579   }
8580 #pragma omp sections
8581   {
8582 #pragma omp section
8583 #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?}}
8584     for (int i = 0; i < 10; ++i)
8585       ;
8586   }
8587 #pragma omp sections
8588   {
8589 #pragma omp section
8590 #pragma omp target teams // OK
8591     a++;
8592   }
8593 
8594 // SINGLE DIRECTIVE
8595 #pragma omp single
8596   {
8597 #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?}}
8598     for (int i = 0; i < 10; ++i)
8599       ;
8600   }
8601 #pragma omp single
8602   {
8603 #pragma omp simd
8604     for (int i = 0; i < 10; ++i)
8605       ;
8606   }
8607 #pragma omp single
8608   {
8609 #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?}}
8610     for (int i = 0; i < 10; ++i)
8611       ;
8612   }
8613 #pragma omp single
8614   {
8615 #pragma omp parallel
8616     for (int i = 0; i < 10; ++i)
8617       ;
8618   }
8619 #pragma omp single
8620   {
8621 #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?}}
8622     {
8623       bar();
8624     }
8625 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
8626     bar();
8627 #pragma omp critical
8628     bar();
8629   }
8630 #pragma omp single
8631   {
8632 #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?}}
8633     {
8634       bar();
8635     }
8636   }
8637 #pragma omp single
8638   {
8639 #pragma omp parallel
8640     {
8641 #pragma omp single // OK
8642       {
8643         bar();
8644       }
8645 #pragma omp for // OK
8646       for (int i = 0; i < 10; ++i)
8647         ;
8648 #pragma omp for simd // OK
8649       for (int i = 0; i < 10; ++i)
8650         ;
8651 #pragma omp sections // OK
8652       {
8653         bar();
8654       }
8655     }
8656   }
8657 #pragma omp single
8658   {
8659 #pragma omp parallel for
8660     for (int i = 0; i < 10; ++i)
8661       ;
8662   }
8663 #pragma omp single
8664   {
8665 #pragma omp parallel for simd
8666     for (int i = 0; i < 10; ++i)
8667       ;
8668   }
8669 #pragma omp single
8670   {
8671 #pragma omp parallel sections
8672     {
8673       bar();
8674     }
8675   }
8676 #pragma omp single
8677   {
8678 #pragma omp task
8679     {
8680       bar();
8681     }
8682   }
8683 #pragma omp single
8684   {
8685 #pragma omp taskyield
8686     bar();
8687   }
8688 #pragma omp single
8689   {
8690 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
8691     bar();
8692   }
8693 #pragma omp single
8694   {
8695 #pragma omp taskwait
8696     bar();
8697   }
8698 #pragma omp single
8699   {
8700 #pragma omp flush
8701     bar();
8702   }
8703 #pragma omp single
8704   {
8705 #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?}}
8706     bar();
8707   }
8708 #pragma omp single
8709   {
8710 #pragma omp atomic
8711     ++a;
8712   }
8713 #pragma omp single
8714   {
8715 #pragma omp target
8716     ++a;
8717   }
8718 #pragma omp single
8719   {
8720 #pragma omp target parallel
8721     ++a;
8722   }
8723 #pragma omp single
8724   {
8725 #pragma omp target parallel for
8726     for (int i = 0; i < 10; ++i)
8727       ;
8728   }
8729 #pragma omp single
8730   {
8731 #pragma omp target enter data map(to: a)
8732     ++a;
8733   }
8734 #pragma omp single
8735   {
8736 #pragma omp target exit data map(from: a)
8737     ++a;
8738   }
8739 #pragma omp single
8740   {
8741 #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?}}
8742     ++a;
8743   }
8744 #pragma omp single
8745   {
8746 #pragma omp taskloop
8747   for (int i = 0; i < 10; ++i)
8748     ++a;
8749   }
8750 #pragma omp single
8751   {
8752 #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?}}
8753     for (int i = 0; i < 10; ++i)
8754       ;
8755   }
8756 #pragma omp single
8757   {
8758 #pragma omp target update to(a)
8759     a++;
8760   }
8761 #pragma omp single
8762   {
8763 #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?}}
8764     for (int i = 0; i < 10; ++i)
8765       ;
8766   }
8767 #pragma omp single
8768   {
8769 #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?}}
8770     for (int i = 0; i < 10; ++i)
8771       ;
8772   }
8773 #pragma omp single
8774   {
8775 #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?}}
8776     for (int i = 0; i < 10; ++i)
8777       ;
8778   }
8779 #pragma omp single
8780   {
8781 #pragma omp target simd // OK
8782     for (int i = 0; i < 10; ++i)
8783       ;
8784   }
8785 #pragma omp single
8786   {
8787 #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?}}
8788     for (int i = 0; i < 10; ++i)
8789       ;
8790   }
8791 #pragma omp single
8792   {
8793 #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?}}
8794     for (int i = 0; i < 10; ++i)
8795       ;
8796   }
8797 #pragma omp single
8798   {
8799 #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?}}
8800     for (int i = 0; i < 10; ++i)
8801       ;
8802   }
8803 #pragma omp single
8804   {
8805 #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?}}
8806     for (int i = 0; i < 10; ++i)
8807       ;
8808   }
8809 #pragma omp single
8810   {
8811 #pragma omp target teams // oK
8812     a++;
8813   }
8814 
8815 // MASTER DIRECTIVE
8816 #pragma omp master
8817   {
8818 #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?}}
8819     for (int i = 0; i < 10; ++i)
8820       ;
8821   }
8822 #pragma omp master
8823   {
8824 #pragma omp simd
8825     for (int i = 0; i < 10; ++i)
8826       ;
8827   }
8828 #pragma omp master
8829   {
8830 #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?}}
8831     for (int i = 0; i < 10; ++i)
8832       ;
8833   }
8834 #pragma omp master
8835   {
8836 #pragma omp parallel
8837     for (int i = 0; i < 10; ++i)
8838       ;
8839   }
8840 #pragma omp master
8841   {
8842 #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?}}
8843     {
8844       bar();
8845     }
8846   }
8847 #pragma omp master
8848   {
8849 #pragma omp master // OK, though second 'master' is redundant
8850     {
8851       bar();
8852     }
8853   }
8854 #pragma omp master
8855   {
8856 #pragma omp critical
8857     {
8858       bar();
8859     }
8860   }
8861 #pragma omp master
8862   {
8863 #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?}}
8864     {
8865       bar();
8866     }
8867   }
8868 #pragma omp master
8869   {
8870 #pragma omp parallel
8871     {
8872 #pragma omp master // OK
8873       {
8874         bar();
8875       }
8876 #pragma omp for // OK
8877       for (int i = 0; i < 10; ++i)
8878         ;
8879 #pragma omp for simd // OK
8880       for (int i = 0; i < 10; ++i)
8881         ;
8882 #pragma omp sections // OK
8883       {
8884         bar();
8885       }
8886     }
8887   }
8888 #pragma omp master
8889   {
8890 #pragma omp parallel for
8891     for (int i = 0; i < 10; ++i)
8892       ;
8893   }
8894 #pragma omp master
8895   {
8896 #pragma omp parallel for simd
8897     for (int i = 0; i < 10; ++i)
8898       ;
8899   }
8900 #pragma omp master
8901   {
8902 #pragma omp parallel sections
8903     {
8904       bar();
8905     }
8906   }
8907 #pragma omp master
8908   {
8909 #pragma omp task
8910     {
8911       bar();
8912     }
8913   }
8914 #pragma omp master
8915   {
8916 #pragma omp taskyield
8917     bar();
8918   }
8919 #pragma omp master
8920   {
8921 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
8922     bar();
8923   }
8924 #pragma omp master
8925   {
8926 #pragma omp taskwait
8927     bar();
8928   }
8929 #pragma omp master
8930   {
8931 #pragma omp flush
8932     bar();
8933   }
8934 #pragma omp master
8935   {
8936 #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?}}
8937     bar();
8938   }
8939 #pragma omp master
8940   {
8941 #pragma omp atomic
8942     ++a;
8943   }
8944 #pragma omp master
8945   {
8946 #pragma omp target
8947     ++a;
8948   }
8949 #pragma omp master
8950   {
8951 #pragma omp target parallel
8952     ++a;
8953   }
8954 #pragma omp master
8955   {
8956 #pragma omp target parallel for
8957     for (int i = 0; i < 10; ++i)
8958       ;
8959   }
8960 #pragma omp master
8961   {
8962 #pragma omp target enter data map(to: a)
8963     ++a;
8964   }
8965 #pragma omp master
8966   {
8967 #pragma omp target exit data map(from: a)
8968     ++a;
8969   }
8970 #pragma omp master
8971   {
8972 #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?}}
8973     ++a;
8974   }
8975 #pragma omp master
8976   {
8977 #pragma omp taskloop
8978   for (int i = 0; i < 10; ++i)
8979     ++a;
8980   }
8981 #pragma omp master
8982   {
8983 #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?}}
8984     for (int i = 0; i < 10; ++i)
8985       ;
8986   }
8987 #pragma omp master
8988   {
8989 #pragma omp target update to(a)
8990     ++a;
8991   }
8992 #pragma omp master
8993   {
8994 #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?}}
8995     for (int i = 0; i < 10; ++i)
8996       ;
8997   }
8998 #pragma omp master
8999   {
9000 #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?}}
9001     for (int i = 0; i < 10; ++i)
9002       ;
9003   }
9004 #pragma omp master
9005   {
9006 #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?}}
9007     for (int i = 0; i < 10; ++i)
9008       ;
9009   }
9010 #pragma omp master
9011   {
9012 #pragma omp target simd // OK
9013     for (int i = 0; i < 10; ++i)
9014       ;
9015   }
9016 #pragma omp master
9017   {
9018 #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?}}
9019     for (int i = 0; i < 10; ++i)
9020       ;
9021   }
9022 #pragma omp master
9023   {
9024 #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?}}
9025     for (int i = 0; i < 10; ++i)
9026       ;
9027   }
9028 #pragma omp master
9029   {
9030 #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?}}
9031     for (int i = 0; i < 10; ++i)
9032       ;
9033   }
9034 #pragma omp master
9035   {
9036 #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?}}
9037     for (int i = 0; i < 10; ++i)
9038       ;
9039   }
9040 #pragma omp master
9041   {
9042 #pragma omp target teams // OK
9043     a++;
9044   }
9045 
9046 // CRITICAL DIRECTIVE
9047 #pragma omp critical
9048   {
9049 #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?}}
9050     for (int i = 0; i < 10; ++i)
9051       ;
9052   }
9053 #pragma omp critical
9054   {
9055 #pragma omp simd
9056     for (int i = 0; i < 10; ++i)
9057       ;
9058   }
9059 #pragma omp critical
9060   {
9061 #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?}}
9062     for (int i = 0; i < 10; ++i)
9063       ;
9064   }
9065 #pragma omp critical
9066   {
9067 #pragma omp parallel
9068     for (int i = 0; i < 10; ++i)
9069       ;
9070   }
9071 #pragma omp critical
9072   {
9073 #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?}}
9074     {
9075       bar();
9076     }
9077   }
9078 #pragma omp critical
9079   {
9080 #pragma omp master // OK, though second 'master' is redundant
9081     {
9082       bar();
9083     }
9084   }
9085 #pragma omp critical
9086   {
9087 #pragma omp critical
9088     {
9089       bar();
9090     }
9091   }
9092 #pragma omp critical
9093   {
9094 #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?}}
9095     {
9096       bar();
9097     }
9098   }
9099 #pragma omp critical
9100   {
9101 #pragma omp parallel
9102     {
9103 #pragma omp master // OK
9104       {
9105         bar();
9106       }
9107 #pragma omp for // OK
9108       for (int i = 0; i < 10; ++i)
9109         ;
9110 #pragma omp for simd // OK
9111       for (int i = 0; i < 10; ++i)
9112         ;
9113 #pragma omp sections // OK
9114       {
9115         bar();
9116       }
9117     }
9118   }
9119 #pragma omp critical
9120   {
9121 #pragma omp parallel for
9122     for (int i = 0; i < 10; ++i)
9123       ;
9124   }
9125 #pragma omp critical
9126   {
9127 #pragma omp parallel for simd
9128     for (int i = 0; i < 10; ++i)
9129       ;
9130   }
9131 #pragma omp critical
9132   {
9133 #pragma omp parallel sections
9134     {
9135       bar();
9136     }
9137   }
9138 #pragma omp critical
9139   {
9140 #pragma omp task
9141     {
9142       bar();
9143     }
9144   }
9145 #pragma omp critical
9146   {
9147 #pragma omp taskyield
9148     bar();
9149   }
9150 #pragma omp critical
9151   {
9152 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
9153     bar();
9154   }
9155 #pragma omp critical
9156   {
9157 #pragma omp taskwait
9158     bar();
9159   }
9160 #pragma omp critical(Belka)
9161   {
9162 #pragma omp critical(Strelka)
9163     bar();
9164   }
9165 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
9166   {
9167 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
9168     {
9169 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
9170       {
9171 #pragma omp parallel
9172 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
9173         {
9174           bar();
9175         }
9176       }
9177     }
9178   }
9179 #pragma omp critical
9180   {
9181 #pragma omp flush
9182     bar();
9183   }
9184 #pragma omp critical
9185   {
9186 #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?}}
9187     bar();
9188   }
9189 #pragma omp critical
9190   {
9191 #pragma omp atomic
9192     ++a;
9193   }
9194 #pragma omp critical
9195   {
9196 #pragma omp target
9197     ++a;
9198   }
9199 #pragma omp critical
9200   {
9201 #pragma omp target parallel
9202     ++a;
9203   }
9204 #pragma omp critical
9205   {
9206 #pragma omp target parallel for
9207     for (int i = 0; i < 10; ++i)
9208       ;
9209   }
9210 #pragma omp critical
9211   {
9212 #pragma omp target enter data map(to: a)
9213     ++a;
9214   }
9215 #pragma omp critical
9216   {
9217 #pragma omp target exit data map(from: a)
9218     ++a;
9219   }
9220 #pragma omp critical
9221   {
9222 #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?}}
9223     ++a;
9224   }
9225 #pragma omp critical
9226   {
9227 #pragma omp taskloop
9228   for (int i = 0; i < 10; ++i)
9229     ++a;
9230   }
9231 #pragma omp critical
9232   {
9233 #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?}}
9234     for (int i = 0; i < 10; ++i)
9235       ;
9236   }
9237 #pragma omp critical
9238   {
9239 #pragma omp target update to(a)
9240     a++;
9241   }
9242 #pragma omp critical
9243   {
9244 #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?}}
9245     for (int i = 0; i < 10; ++i)
9246       ;
9247   }
9248 #pragma omp critical
9249   {
9250 #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?}}
9251     for (int i = 0; i < 10; ++i)
9252       ;
9253   }
9254 #pragma omp critical
9255   {
9256 #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?}}
9257     for (int i = 0; i < 10; ++i)
9258       ;
9259   }
9260 #pragma omp critical
9261   {
9262 #pragma omp target simd // OK
9263     for (int i = 0; i < 10; ++i)
9264       ;
9265   }
9266 #pragma omp critical
9267   {
9268 #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?}}
9269     for (int i = 0; i < 10; ++i)
9270       ;
9271   }
9272 #pragma omp critical
9273   {
9274 #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?}}
9275     for (int i = 0; i < 10; ++i)
9276       ;
9277   }
9278 #pragma omp critical
9279   {
9280 #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?}}
9281     for (int i = 0; i < 10; ++i)
9282       ;
9283   }
9284 #pragma omp critical
9285   {
9286 #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?}}
9287     for (int i = 0; i < 10; ++i)
9288       ;
9289   }
9290 #pragma omp critical
9291   {
9292 #pragma omp target teams // OK
9293     a++;
9294   }
9295 
9296 // PARALLEL FOR DIRECTIVE
9297 #pragma omp parallel for
9298   for (int i = 0; i < 10; ++i) {
9299 #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?}}
9300     for (int i = 0; i < 10; ++i)
9301       ;
9302   }
9303 #pragma omp parallel for
9304   for (int i = 0; i < 10; ++i) {
9305 #pragma omp simd
9306     for (int i = 0; i < 10; ++i)
9307       ;
9308   }
9309 #pragma omp parallel for
9310   for (int i = 0; i < 10; ++i) {
9311 #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?}}
9312     for (int i = 0; i < 10; ++i)
9313       ;
9314   }
9315 
9316 #pragma omp parallel for
9317   for (int i = 0; i < 10; ++i) {
9318 #pragma omp parallel
9319     for (int i = 0; i < 10; ++i)
9320       ;
9321   }
9322 #pragma omp parallel for
9323   for (int i = 0; i < 10; ++i) {
9324 #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?}}
9325     {
9326       bar();
9327     }
9328   }
9329 #pragma omp parallel for
9330   for (int i = 0; i < 10; ++i) {
9331 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
9332     {
9333       bar();
9334     }
9335   }
9336 #pragma omp parallel for
9337   for (int i = 0; i < 10; ++i) {
9338 #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?}}
9339     {
9340       bar();
9341     }
9342 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
9343     {
9344       bar();
9345     }
9346 #pragma omp critical
9347     {
9348       bar();
9349     }
9350   }
9351 #pragma omp parallel for
9352   for (int i = 0; i < 10; ++i) {
9353 #pragma omp parallel
9354     {
9355 #pragma omp single // OK
9356       {
9357         bar();
9358       }
9359 #pragma omp master // OK
9360       {
9361         bar();
9362       }
9363 #pragma omp critical // OK
9364       {
9365         bar();
9366       }
9367 #pragma omp for // OK
9368       for (int i = 0; i < 10; ++i)
9369         ;
9370 #pragma omp for simd // OK
9371       for (int i = 0; i < 10; ++i)
9372         ;
9373 #pragma omp sections // OK
9374       {
9375         bar();
9376       }
9377     }
9378   }
9379 #pragma omp parallel for
9380   for (int i = 0; i < 10; ++i) {
9381 #pragma omp parallel for
9382     for (int i = 0; i < 10; ++i)
9383       ;
9384   }
9385 #pragma omp parallel for
9386   for (int i = 0; i < 10; ++i) {
9387 #pragma omp parallel for simd
9388     for (int i = 0; i < 10; ++i)
9389       ;
9390   }
9391 #pragma omp parallel for
9392   for (int i = 0; i < 10; ++i) {
9393 #pragma omp parallel sections
9394     {
9395       bar();
9396     }
9397   }
9398 #pragma omp parallel for
9399   for (int i = 0; i < 10; ++i) {
9400 #pragma omp task
9401     {
9402       bar();
9403     }
9404   }
9405 #pragma omp parallel for
9406   for (int i = 0; i < 10; ++i) {
9407 #pragma omp taskyield
9408     bar();
9409   }
9410 #pragma omp parallel for
9411   for (int i = 0; i < 10; ++i) {
9412 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
9413     bar();
9414   }
9415 #pragma omp parallel for
9416   for (int i = 0; i < 10; ++i) {
9417 #pragma omp taskwait
9418     bar();
9419   }
9420 #pragma omp parallel for
9421   for (int i = 0; i < 10; ++i) {
9422 #pragma omp flush
9423     bar();
9424   }
9425 #pragma omp parallel for
9426   for (int i = 0; i < 10; ++i) {
9427 #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?}}
9428     bar();
9429   }
9430 #pragma omp parallel for ordered
9431   for (int i = 0; i < 10; ++i) {
9432 #pragma omp ordered // OK
9433     bar();
9434   }
9435 #pragma omp parallel for
9436   for (int i = 0; i < 10; ++i) {
9437 #pragma omp atomic
9438     ++a;
9439   }
9440 #pragma omp parallel for
9441   for (int i = 0; i < 10; ++i) {
9442 #pragma omp target
9443     ++a;
9444   }
9445 #pragma omp parallel for
9446   for (int i = 0; i < 10; ++i) {
9447 #pragma omp target parallel
9448     ++a;
9449   }
9450 #pragma omp parallel for
9451   for (int i = 0; i < 10; ++i) {
9452 #pragma omp target parallel for
9453     for (int i = 0; i < 10; ++i)
9454       ;
9455   }
9456 #pragma omp parallel for
9457   for (int i = 0; i < 10; ++i) {
9458 #pragma omp target enter data map(to: a)
9459     ++a;
9460   }
9461 #pragma omp parallel for
9462   for (int i = 0; i < 10; ++i) {
9463 #pragma omp target exit data map(from: a)
9464     ++a;
9465   }
9466 #pragma omp parallel for
9467   for (int i = 0; i < 10; ++i) {
9468 #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?}}
9469     ++a;
9470   }
9471 #pragma omp parallel for
9472   for (int i = 0; i < 10; ++i) {
9473 #pragma omp taskloop
9474   for (int i = 0; i < 10; ++i)
9475     ++a;
9476   }
9477 #pragma omp parallel for
9478   for (int i = 0; i < 10; ++i) {
9479 #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?}}
9480     for (int j = 0; j < 10; ++j)
9481       ;
9482   }
9483 #pragma omp parallel for
9484   for (int i = 0; i < 10; ++i) {
9485 #pragma omp target update to(a)
9486     a++;
9487   }
9488 #pragma omp parallel for
9489   for (int i = 0; i < 10; ++i) {
9490 #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?}}
9491     for (int j = 0; j < 10; ++j)
9492       ;
9493   }
9494 #pragma omp parallel for
9495   for (int i = 0; i < 10; ++i) {
9496 #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?}}
9497     for (int j = 0; j < 10; ++j)
9498       ;
9499   }
9500 #pragma omp parallel for
9501   for (int i = 0; i < 10; ++i) {
9502 #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?}}
9503     for (int j = 0; j < 10; ++j)
9504       ;
9505   }
9506 #pragma omp parallel for
9507   for (int i = 0; i < 10; ++i) {
9508 #pragma omp target simd // OK
9509     for (int j = 0; j < 10; ++j)
9510       ;
9511   }
9512 #pragma omp parallel for
9513   for (int i = 0; i < 10; ++i) {
9514 #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?}}
9515     for (int j = 0; j < 10; ++j)
9516       ;
9517   }
9518 #pragma omp parallel for
9519   for (int i = 0; i < 10; ++i) {
9520 #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?}}
9521     for (int j = 0; j < 10; ++j)
9522       ;
9523   }
9524 #pragma omp parallel for
9525   for (int i = 0; i < 10; ++i) {
9526 #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?}}
9527     for (int j = 0; j < 10; ++j)
9528       ;
9529   }
9530 #pragma omp parallel for
9531   for (int i = 0; i < 10; ++i) {
9532 #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?}}
9533     for (int j = 0; j < 10; ++j)
9534       ;
9535   }
9536 #pragma omp parallel for
9537   for (int i = 0; i < 10; ++i) {
9538 #pragma omp target teams // OK
9539     a++;
9540   }
9541 
9542 // PARALLEL FOR SIMD DIRECTIVE
9543 #pragma omp parallel for simd
9544   for (int i = 0; i < 10; ++i) {
9545 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9546     for (int i = 0; i < 10; ++i)
9547       ;
9548   }
9549 #pragma omp parallel for simd
9550   for (int i = 0; i < 10; ++i) {
9551 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9552     for (int i = 0; i < 10; ++i)
9553       ;
9554   }
9555 #pragma omp parallel for simd
9556   for (int i = 0; i < 10; ++i) {
9557 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9558     for (int i = 0; i < 10; ++i)
9559       ;
9560   }
9561 #pragma omp parallel for simd
9562   for (int i = 0; i < 10; ++i) {
9563 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9564     for (int i = 0; i < 10; ++i)
9565       ;
9566   }
9567 #pragma omp parallel for simd
9568   for (int i = 0; i < 10; ++i) {
9569 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9570     {
9571       bar();
9572     }
9573   }
9574 #pragma omp parallel for simd
9575   for (int i = 0; i < 10; ++i) {
9576 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9577     {
9578       bar();
9579     }
9580   }
9581 #pragma omp parallel for simd
9582   for (int i = 0; i < 10; ++i) {
9583 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9584     {
9585       bar();
9586     }
9587   }
9588 
9589 #pragma omp parallel for simd
9590   for (int i = 0; i < 10; ++i) {
9591 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9592     {
9593       bar();
9594     }
9595   }
9596 
9597 #pragma omp parallel for simd
9598   for (int i = 0; i < 10; ++i) {
9599 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9600     {
9601       bar();
9602     }
9603   }
9604 
9605 #pragma omp parallel for simd
9606   for (int i = 0; i < 10; ++i) {
9607 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9608     {
9609 #pragma omp single
9610       {
9611         bar();
9612       }
9613 #pragma omp for
9614       for (int i = 0; i < 10; ++i)
9615         ;
9616 #pragma omp for simd
9617       for (int i = 0; i < 10; ++i)
9618         ;
9619 #pragma omp sections
9620       {
9621         bar();
9622       }
9623     }
9624   }
9625 #pragma omp parallel for simd
9626   for (int i = 0; i < 10; ++i) {
9627 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9628     for (int i = 0; i < 10; ++i)
9629       ;
9630   }
9631 #pragma omp parallel for simd
9632   for (int i = 0; i < 10; ++i) {
9633 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
9634     for (int i = 0; i < 10; ++i)
9635       ;
9636   }
9637 #pragma omp parallel for simd
9638   for (int i = 0; i < 10; ++i) {
9639 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9640     {
9641       bar();
9642     }
9643   }
9644 #pragma omp parallel for simd
9645   for (int i = 0; i < 10; ++i) {
9646 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9647     {
9648       bar();
9649     }
9650   }
9651 #pragma omp parallel for simd
9652   for (int i = 0; i < 10; ++i) {
9653 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9654     bar();
9655   }
9656 #pragma omp parallel for simd
9657   for (int i = 0; i < 10; ++i) {
9658 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9659     bar();
9660   }
9661 #pragma omp parallel for simd
9662   for (int i = 0; i < 10; ++i) {
9663 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9664     bar();
9665   }
9666 #pragma omp parallel for simd
9667   for (int i = 0; i < 10; ++i) {
9668 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9669     bar();
9670   }
9671 #pragma omp parallel for simd
9672   for (int i = 0; i < 10; ++i) {
9673 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9674     bar();
9675   }
9676 #pragma omp parallel for simd
9677   for (int i = 0; i < 10; ++i) {
9678 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9679     bar();
9680   }
9681 #pragma omp parallel for simd
9682   for (int i = 0; i < 10; ++i) {
9683 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9684     ++a;
9685   }
9686 #pragma omp parallel for simd
9687   for (int i = 0; i < 10; ++i) {
9688 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9689     ++a;
9690   }
9691 #pragma omp parallel for simd
9692   for (int i = 0; i < 10; ++i) {
9693 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9694     ++a;
9695   }
9696 #pragma omp parallel for simd
9697   for (int i = 0; i < 10; ++i) {
9698 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9699     for (int i = 0; i < 10; ++i)
9700       ;
9701   }
9702 #pragma omp parallel for simd
9703   for (int i = 0; i < 10; ++i) {
9704 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9705     ++a;
9706   }
9707 #pragma omp parallel for simd
9708   for (int i = 0; i < 10; ++i) {
9709 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9710     ++a;
9711   }
9712 #pragma omp parallel for simd
9713   for (int i = 0; i < 10; ++i) {
9714 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9715     ++a;
9716   }
9717 #pragma omp parallel for simd
9718   for (int i = 0; i < 10; ++i) {
9719 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9720   for (int i = 0; i < 10; ++i)
9721     ++a;
9722   }
9723 #pragma omp parallel for simd
9724   for (int i = 0; i < 10; ++i) {
9725 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9726     for (int j = 0; j < 10; ++j)
9727       ;
9728   }
9729 #pragma omp parallel for simd
9730   for (int i = 0; i < 10; ++i) {
9731 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9732     a++;
9733   }
9734 #pragma omp parallel for simd
9735   for (int i = 0; i < 10; ++i) {
9736 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9737     for (int j = 0; j < 10; ++j)
9738       ;
9739   }
9740 #pragma omp parallel for simd
9741   for (int i = 0; i < 10; ++i) {
9742 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9743     for (int j = 0; j < 10; ++j)
9744       ;
9745   }
9746 #pragma omp parallel for simd
9747   for (int i = 0; i < 10; ++i) {
9748 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9749     for (int j = 0; j < 10; ++j)
9750       ;
9751   }
9752 #pragma omp parallel for simd
9753   for (int i = 0; i < 10; ++i) {
9754 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9755     for (int j = 0; j < 10; ++j)
9756       ;
9757   }
9758 #pragma omp parallel for simd
9759   for (int i = 0; i < 10; ++i) {
9760 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9761     for (int j = 0; j < 10; ++j)
9762       ;
9763   }
9764 #pragma omp parallel for simd
9765   for (int i = 0; i < 10; ++i) {
9766 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9767     for (int j = 0; j < 10; ++j)
9768       ;
9769   }
9770 #pragma omp parallel for simd
9771   for (int i = 0; i < 10; ++i) {
9772 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9773     for (int j = 0; j < 10; ++j)
9774       ;
9775   }
9776 #pragma omp parallel for simd
9777   for (int i = 0; i < 10; ++i) {
9778 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9779     for (int j = 0; j < 10; ++j)
9780       ;
9781   }
9782 #pragma omp parallel for simd
9783   for (int i = 0; i < 10; ++i) {
9784 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9785     a++;
9786   }
9787 
9788 // PARALLEL SECTIONS DIRECTIVE
9789 #pragma omp parallel sections
9790   {
9791 #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?}}
9792     for (int i = 0; i < 10; ++i)
9793       ;
9794   }
9795 #pragma omp parallel sections
9796   {
9797 #pragma omp simd
9798     for (int i = 0; i < 10; ++i)
9799       ;
9800   }
9801 #pragma omp parallel sections
9802   {
9803 #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?}}
9804     for (int i = 0; i < 10; ++i)
9805       ;
9806   }
9807 #pragma omp parallel sections
9808   {
9809 #pragma omp parallel
9810     for (int i = 0; i < 10; ++i)
9811       ;
9812   }
9813 #pragma omp parallel sections
9814   {
9815 #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?}}
9816     {
9817       bar();
9818     }
9819   }
9820 #pragma omp parallel sections
9821   {
9822 #pragma omp section
9823     {
9824       bar();
9825     }
9826   }
9827 #pragma omp parallel sections
9828   {
9829 #pragma omp section
9830     {
9831 #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?}}
9832       bar();
9833 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
9834       bar();
9835 #pragma omp critical
9836       bar();
9837     }
9838   }
9839 #pragma omp parallel sections
9840   {
9841 #pragma omp parallel
9842     {
9843 #pragma omp single // OK
9844       {
9845         bar();
9846       }
9847 #pragma omp master // OK
9848       {
9849         bar();
9850       }
9851 #pragma omp critical // OK
9852       {
9853         bar();
9854       }
9855 #pragma omp for // OK
9856       for (int i = 0; i < 10; ++i)
9857         ;
9858 #pragma omp for simd // OK
9859       for (int i = 0; i < 10; ++i)
9860         ;
9861 #pragma omp sections // OK
9862       {
9863         bar();
9864       }
9865     }
9866   }
9867 #pragma omp parallel sections
9868   {
9869 #pragma omp parallel for
9870     for (int i = 0; i < 10; ++i)
9871       ;
9872   }
9873 #pragma omp parallel sections
9874   {
9875 #pragma omp parallel for simd
9876     for (int i = 0; i < 10; ++i)
9877       ;
9878   }
9879 #pragma omp parallel sections
9880   {
9881 #pragma omp parallel sections
9882     {
9883       bar();
9884     }
9885   }
9886 #pragma omp parallel sections
9887   {
9888 #pragma omp task
9889     {
9890       bar();
9891     }
9892   }
9893 #pragma omp parallel sections
9894   {
9895 #pragma omp taskyield
9896   }
9897 #pragma omp parallel sections
9898   {
9899 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
9900   }
9901 #pragma omp parallel sections
9902   {
9903 #pragma omp taskwait
9904   }
9905 #pragma omp parallel sections
9906   {
9907 #pragma omp flush
9908   }
9909 #pragma omp parallel sections
9910   {
9911 #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?}}
9912     bar();
9913   }
9914 #pragma omp parallel sections
9915   {
9916 #pragma omp atomic
9917     ++a;
9918   }
9919 #pragma omp parallel sections
9920   {
9921 #pragma omp target
9922     ++a;
9923   }
9924 #pragma omp parallel sections
9925   {
9926 #pragma omp target parallel
9927     ++a;
9928   }
9929 #pragma omp parallel sections
9930   {
9931 #pragma omp target parallel for
9932     for (int i = 0; i < 10; ++i)
9933       ;
9934   }
9935 #pragma omp parallel sections
9936   {
9937 #pragma omp target enter data map(to: a)
9938   }
9939 #pragma omp parallel sections
9940   {
9941 #pragma omp target exit data map(from: a)
9942   }
9943 #pragma omp parallel sections
9944   {
9945 #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?}}
9946     ++a;
9947   }
9948 #pragma omp parallel sections
9949   {
9950 #pragma omp taskloop
9951   for (int i = 0; i < 10; ++i)
9952     ++a;
9953   }
9954 #pragma omp parallel sections
9955   {
9956 #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?}}
9957     for (int i = 0; i < 10; ++i)
9958       ;
9959   }
9960 #pragma omp parallel sections
9961   {
9962 #pragma omp target update to(a)
9963   }
9964 #pragma omp parallel sections
9965   {
9966 #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?}}
9967     for (int i = 0; i < 10; ++i)
9968       ;
9969   }
9970 #pragma omp parallel sections
9971   {
9972 #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?}}
9973     for (int i = 0; i < 10; ++i)
9974       ;
9975   }
9976 #pragma omp parallel sections
9977   {
9978 #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?}}
9979     for (int i = 0; i < 10; ++i)
9980       ;
9981   }
9982 #pragma omp parallel sections
9983   {
9984 #pragma omp target simd // OK
9985     for (int i = 0; i < 10; ++i)
9986       ;
9987   }
9988 #pragma omp parallel sections
9989   {
9990 #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?}}
9991     for (int i = 0; i < 10; ++i)
9992       ;
9993   }
9994 #pragma omp parallel sections
9995   {
9996 #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?}}
9997     for (int i = 0; i < 10; ++i)
9998       ;
9999   }
10000 #pragma omp parallel sections
10001   {
10002 #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?}}
10003     for (int i = 0; i < 10; ++i)
10004       ;
10005   }
10006 #pragma omp parallel sections
10007   {
10008 #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?}}
10009     for (int i = 0; i < 10; ++i)
10010       ;
10011   }
10012 #pragma omp parallel sections
10013   {
10014 #pragma omp target teams // OK
10015     a++;
10016   }
10017 
10018 // TASK DIRECTIVE
10019 #pragma omp task
10020 #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?}}
10021   for (int i = 0; i < 10; ++i)
10022     ;
10023 #pragma omp task
10024 #pragma omp simd
10025   for (int i = 0; i < 10; ++i)
10026     ;
10027 #pragma omp task
10028 #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?}}
10029   for (int i = 0; i < 10; ++i)
10030     ;
10031 #pragma omp task
10032 #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?}}
10033   {
10034     bar();
10035   }
10036 #pragma omp task
10037 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
10038   {
10039     bar();
10040   }
10041 #pragma omp task
10042 #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?}}
10043   bar();
10044 #pragma omp task
10045 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
10046   bar();
10047 #pragma omp task
10048 #pragma omp critical
10049   bar();
10050 #pragma omp task
10051 #pragma omp parallel for
10052   for (int i = 0; i < 10; ++i)
10053     ;
10054 #pragma omp task
10055 #pragma omp parallel for simd
10056   for (int i = 0; i < 10; ++i)
10057     ;
10058 #pragma omp task
10059 #pragma omp parallel sections
10060   {
10061     bar();
10062   }
10063 #pragma omp task
10064 #pragma omp task
10065   {
10066     bar();
10067   }
10068 #pragma omp task
10069   {
10070 #pragma omp taskyield
10071     bar();
10072   }
10073 #pragma omp task
10074   {
10075 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
10076     bar();
10077   }
10078 #pragma omp task
10079   {
10080 #pragma omp taskwait
10081     bar();
10082   }
10083 #pragma omp task
10084   {
10085 #pragma omp flush
10086     bar();
10087   }
10088 #pragma omp task
10089   {
10090 #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?}}
10091     bar();
10092   }
10093 #pragma omp task
10094   {
10095 #pragma omp atomic
10096     ++a;
10097   }
10098 #pragma omp task
10099   {
10100 #pragma omp target
10101     ++a;
10102   }
10103 #pragma omp task
10104   {
10105 #pragma omp target parallel
10106     ++a;
10107   }
10108 #pragma omp task
10109 #pragma omp target parallel for
10110   for (int i = 0; i < 10; ++i)
10111     ;
10112 #pragma omp task
10113   {
10114 #pragma omp target enter data map(to: a)
10115     ++a;
10116   }
10117 #pragma omp task
10118   {
10119 #pragma omp target exit data map(from: a)
10120     ++a;
10121   }
10122 #pragma omp task
10123   {
10124 #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?}}
10125     ++a;
10126   }
10127 #pragma omp task
10128   {
10129 #pragma omp taskloop
10130   for (int i = 0; i < 10; ++i)
10131     ++a;
10132   }
10133 #pragma omp task
10134   {
10135 #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?}}
10136     for (int i = 0; i < 10; ++i)
10137       ;
10138   }
10139 #pragma omp task
10140   {
10141 #pragma omp target update to(a)
10142     a++;
10143   }
10144 #pragma omp task
10145   {
10146 #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?}}
10147     for (int i = 0; i < 10; ++i)
10148       ;
10149   }
10150 #pragma omp task
10151   {
10152 #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?}}
10153     for (int i = 0; i < 10; ++i)
10154       ;
10155   }
10156 #pragma omp task
10157   {
10158 #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?}}
10159     for (int i = 0; i < 10; ++i)
10160       ;
10161   }
10162 #pragma omp task
10163   {
10164 #pragma omp target simd // OK
10165     for (int i = 0; i < 10; ++i)
10166       ;
10167   }
10168 #pragma omp task
10169   {
10170 #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?}}
10171     for (int i = 0; i < 10; ++i)
10172       ;
10173   }
10174 #pragma omp task
10175   {
10176 #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?}}
10177     for (int i = 0; i < 10; ++i)
10178       ;
10179   }
10180 #pragma omp task
10181   {
10182 #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?}}
10183     for (int i = 0; i < 10; ++i)
10184       ;
10185   }
10186 #pragma omp task
10187   {
10188 #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?}}
10189     for (int i = 0; i < 10; ++i)
10190       ;
10191   }
10192 #pragma omp task
10193   {
10194 #pragma omp target teams // OK
10195     a++;
10196   }
10197 
10198 // ATOMIC DIRECTIVE
10199 #pragma omp atomic
10200   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10201   // expected-note@+1 {{expected an expression statement}}
10202   {
10203 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10204     for (int i = 0; i < 10; ++i)
10205       ;
10206   }
10207 #pragma omp atomic
10208   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10209   // expected-note@+1 {{expected an expression statement}}
10210   {
10211 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10212     for (int i = 0; i < 10; ++i)
10213       ;
10214   }
10215 #pragma omp atomic
10216   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10217   // expected-note@+1 {{expected an expression statement}}
10218   {
10219 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10220     for (int i = 0; i < 10; ++i)
10221       ;
10222   }
10223 #pragma omp atomic
10224   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10225   // expected-note@+1 {{expected an expression statement}}
10226   {
10227 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10228     for (int i = 0; i < 10; ++i)
10229       ;
10230   }
10231 #pragma omp atomic
10232   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10233   // expected-note@+1 {{expected an expression statement}}
10234   {
10235 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10236     {
10237       bar();
10238     }
10239   }
10240 #pragma omp atomic
10241   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10242   // expected-note@+1 {{expected an expression statement}}
10243   {
10244 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10245     {
10246       bar();
10247     }
10248   }
10249 #pragma omp atomic
10250   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10251   // expected-note@+1 {{expected an expression statement}}
10252   {
10253 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10254     {
10255       bar();
10256     }
10257   }
10258 #pragma omp atomic
10259   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10260   // expected-note@+1 {{expected an expression statement}}
10261   {
10262 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10263     {
10264       bar();
10265     }
10266   }
10267 #pragma omp atomic
10268   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10269   // expected-note@+1 {{expected an expression statement}}
10270   {
10271 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10272     {
10273       bar();
10274     }
10275   }
10276 #pragma omp atomic
10277   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10278   // expected-note@+1 {{expected an expression statement}}
10279   {
10280 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10281     for (int i = 0; i < 10; ++i)
10282       ;
10283   }
10284 #pragma omp atomic
10285   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10286   // expected-note@+1 {{expected an expression statement}}
10287   {
10288 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10289     for (int i = 0; i < 10; ++i)
10290       ;
10291   }
10292 #pragma omp atomic
10293   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10294   // expected-note@+1 {{expected an expression statement}}
10295   {
10296 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10297     {
10298       bar();
10299     }
10300   }
10301 #pragma omp atomic
10302   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10303   // expected-note@+1 {{expected an expression statement}}
10304   {
10305 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10306     {
10307       bar();
10308     }
10309   }
10310 #pragma omp atomic
10311   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10312   // expected-note@+1 {{expected an expression statement}}
10313   {
10314 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10315     bar();
10316   }
10317 #pragma omp atomic
10318   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10319   // expected-note@+1 {{expected an expression statement}}
10320   {
10321 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10322     bar();
10323   }
10324 #pragma omp atomic
10325   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10326   // expected-note@+1 {{expected an expression statement}}
10327   {
10328 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10329     bar();
10330   }
10331 #pragma omp atomic
10332   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10333   // expected-note@+1 {{expected an expression statement}}
10334   {
10335 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10336     bar();
10337   }
10338 #pragma omp atomic
10339   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10340   // expected-note@+1 {{expected an expression statement}}
10341   {
10342 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10343     bar();
10344   }
10345 #pragma omp atomic
10346   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10347   // expected-note@+1 {{expected an expression statement}}
10348   {
10349 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10350     ++a;
10351   }
10352 #pragma omp atomic
10353   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10354   // expected-note@+1 {{expected an expression statement}}
10355   {
10356 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10357     ++a;
10358   }
10359 #pragma omp atomic
10360   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10361   // expected-note@+1 {{expected an expression statement}}
10362   {
10363 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10364     ++a;
10365   }
10366 #pragma omp atomic
10367   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10368   // expected-note@+1 {{expected an expression statement}}
10369   {
10370 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10371     for (int i = 0; i < 10; ++i)
10372       ;
10373   }
10374 #pragma omp atomic
10375   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10376   // expected-note@+1 {{expected an expression statement}}
10377   {
10378 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10379     ++a;
10380   }
10381 #pragma omp atomic
10382   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10383   // expected-note@+1 {{expected an expression statement}}
10384   {
10385 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10386     ++a;
10387   }
10388 #pragma omp atomic
10389   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10390   // expected-note@+1 {{expected an expression statement}}
10391   {
10392 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10393     ++a;
10394   }
10395 #pragma omp atomic
10396   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10397   // expected-note@+1 {{expected an expression statement}}
10398   {
10399 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10400   for (int i = 0; i < 10; ++i)
10401     ++a;
10402   }
10403 #pragma omp atomic
10404   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10405   // expected-note@+1 {{expected an expression statement}}
10406   {
10407 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10408     for (int i = 0; i < 10; ++i)
10409       ;
10410   }
10411 #pragma omp atomic
10412   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10413   // expected-note@+1 {{expected an expression statement}}
10414   {
10415 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10416   }
10417 #pragma omp atomic
10418   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10419   // expected-note@+1 {{expected an expression statement}}
10420   {
10421 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10422     for (int i = 0; i < 10; ++i)
10423       ;
10424   }
10425 #pragma omp atomic
10426   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10427   // expected-note@+1 {{expected an expression statement}}
10428   {
10429 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10430     for (int i = 0; i < 10; ++i)
10431       ;
10432   }
10433 #pragma omp atomic
10434   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10435   // expected-note@+1 {{expected an expression statement}}
10436   {
10437 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10438     for (int i = 0; i < 10; ++i)
10439       ;
10440   }
10441 #pragma omp atomic
10442   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10443   // expected-note@+1 {{expected an expression statement}}
10444   {
10445 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10446     for (int i = 0; i < 10; ++i)
10447       ;
10448   }
10449 #pragma omp atomic
10450   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10451   // expected-note@+1 {{expected an expression statement}}
10452   {
10453 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10454     for (int i = 0; i < 10; ++i)
10455       ;
10456   }
10457 #pragma omp atomic
10458   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10459   // expected-note@+1 {{expected an expression statement}}
10460   {
10461 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10462     for (int i = 0; i < 10; ++i)
10463       ;
10464   }
10465 #pragma omp atomic
10466   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10467   // expected-note@+1 {{expected an expression statement}}
10468   {
10469 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10470     for (int i = 0; i < 10; ++i)
10471       ;
10472   }
10473 #pragma omp atomic
10474   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10475   // expected-note@+1 {{expected an expression statement}}
10476   {
10477 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10478     for (int i = 0; i < 10; ++i)
10479       ;
10480   }
10481 #pragma omp atomic
10482   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10483   // expected-note@+1 {{expected an expression statement}}
10484   {
10485 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10486     a++;
10487   }
10488 
10489 // TARGET DIRECTIVE
10490 #pragma omp target
10491 #pragma omp parallel
10492   bar();
10493 #pragma omp target
10494 #pragma omp for
10495   for (int i = 0; i < 10; ++i)
10496     ;
10497 #pragma omp target
10498 #pragma omp simd
10499   for (int i = 0; i < 10; ++i)
10500     ;
10501 #pragma omp target
10502 #pragma omp for simd
10503   for (int i = 0; i < 10; ++i)
10504     ;
10505 #pragma omp target
10506 #pragma omp sections
10507   {
10508     bar();
10509   }
10510 #pragma omp target
10511 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
10512   {
10513     bar();
10514   }
10515 #pragma omp target
10516 #pragma omp single
10517   bar();
10518 
10519 #pragma omp target
10520 #pragma omp master
10521   {
10522     bar();
10523   }
10524 #pragma omp target
10525 #pragma omp critical
10526   {
10527     bar();
10528   }
10529 #pragma omp target
10530 #pragma omp parallel for
10531   for (int i = 0; i < 10; ++i)
10532     ;
10533 #pragma omp target
10534 #pragma omp parallel for simd
10535   for (int i = 0; i < 10; ++i)
10536     ;
10537 #pragma omp target
10538 #pragma omp parallel sections
10539   {
10540     bar();
10541   }
10542 #pragma omp target
10543 #pragma omp task
10544   {
10545     bar();
10546   }
10547 #pragma omp target
10548   {
10549 #pragma omp taskyield
10550     bar();
10551   }
10552 #pragma omp target
10553   {
10554 #pragma omp barrier
10555     bar();
10556   }
10557 #pragma omp target
10558   {
10559 #pragma omp taskwait
10560     bar();
10561   }
10562 #pragma omp target
10563   {
10564 #pragma omp flush
10565     bar();
10566   }
10567 #pragma omp target
10568   {
10569 #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?}}
10570     bar();
10571   }
10572 #pragma omp target
10573   {
10574 #pragma omp atomic
10575     ++a;
10576   }
10577 #pragma omp target
10578   {
10579 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
10580     ++a;
10581   }
10582 #pragma omp target
10583   {
10584 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
10585     ++a;
10586   }
10587 #pragma omp target
10588 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
10589   for (int i = 0; i < 10; ++i)
10590     ;
10591 #pragma omp target
10592   {
10593 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
10594   }
10595 #pragma omp target
10596   {
10597 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
10598   }
10599 #pragma omp target
10600   {
10601 #pragma omp teams
10602     ++a;
10603   }
10604 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
10605   {
10606     ++a;          // expected-note {{statement outside teams construct here}}
10607 #pragma omp teams // expected-note {{nested teams construct here}}
10608     ++a;
10609   }
10610 #pragma omp target
10611   {
10612 #pragma omp taskloop
10613   for (int i = 0; i < 10; ++i)
10614     ++a;
10615   }
10616 #pragma omp target
10617   {
10618 #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?}}
10619     for (int i = 0; i < 10; ++i)
10620       ;
10621   }
10622 #pragma omp atomic
10623   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10624   // expected-note@+1 {{expected an expression statement}}
10625   {
10626 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10627     a++;
10628   }
10629 #pragma omp target
10630   {
10631 #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?}}
10632     for (int i = 0; i < 10; ++i)
10633       ;
10634   }
10635 #pragma omp target
10636   {
10637 #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?}}
10638     for (int i = 0; i < 10; ++i)
10639       ;
10640   }
10641 #pragma omp target
10642   {
10643 #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?}}
10644     for (int i = 0; i < 10; ++i)
10645       ;
10646   }
10647 #pragma omp target
10648   {
10649 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
10650     for (int i = 0; i < 10; ++i)
10651       ;
10652   }
10653 #pragma omp target
10654   {
10655 #pragma omp teams distribute // OK
10656     for (int i = 0; i < 10; ++i)
10657       ;
10658   }
10659 #pragma omp target
10660   {
10661 #pragma omp teams distribute simd // OK
10662     for (int i = 0; i < 10; ++i)
10663       ;
10664   }
10665 #pragma omp target
10666   {
10667 #pragma omp teams distribute parallel for simd // OK
10668     for (int i = 0; i < 10; ++i)
10669       ;
10670   }
10671 #pragma omp target
10672   {
10673 #pragma omp teams distribute parallel for // OK
10674     for (int i = 0; i < 10; ++i)
10675       ;
10676   }
10677 #pragma omp target
10678   {
10679 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
10680     a++;
10681   }
10682 
10683 // TARGET PARALLEL DIRECTIVE
10684 #pragma omp target parallel
10685 #pragma omp parallel
10686   bar();
10687 #pragma omp target parallel
10688 #pragma omp for
10689   for (int i = 0; i < 10; ++i)
10690     ;
10691 #pragma omp target parallel
10692 #pragma omp simd
10693   for (int i = 0; i < 10; ++i)
10694     ;
10695 #pragma omp target parallel
10696 #pragma omp for simd
10697   for (int i = 0; i < 10; ++i)
10698     ;
10699 #pragma omp target parallel
10700 #pragma omp sections
10701   {
10702     bar();
10703   }
10704 #pragma omp target parallel
10705 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
10706   {
10707     bar();
10708   }
10709 #pragma omp target parallel
10710 #pragma omp single
10711   bar();
10712 
10713 #pragma omp target parallel
10714 #pragma omp master
10715   {
10716     bar();
10717   }
10718 #pragma omp target parallel
10719 #pragma omp critical
10720   {
10721     bar();
10722   }
10723 #pragma omp target parallel
10724 #pragma omp parallel for
10725   for (int i = 0; i < 10; ++i)
10726     ;
10727 #pragma omp target parallel
10728 #pragma omp parallel for simd
10729   for (int i = 0; i < 10; ++i)
10730     ;
10731 #pragma omp target parallel
10732 #pragma omp parallel sections
10733   {
10734     bar();
10735   }
10736 #pragma omp target parallel
10737 #pragma omp task
10738   {
10739     bar();
10740   }
10741 #pragma omp target parallel
10742   {
10743 #pragma omp taskyield
10744     bar();
10745   }
10746 #pragma omp target parallel
10747   {
10748 #pragma omp barrier
10749     bar();
10750   }
10751 #pragma omp target parallel
10752   {
10753 #pragma omp taskwait
10754     bar();
10755   }
10756 #pragma omp target parallel
10757   {
10758 #pragma omp flush
10759     bar();
10760   }
10761 #pragma omp target parallel
10762   {
10763 #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?}}
10764     bar();
10765   }
10766 #pragma omp target parallel
10767   {
10768 #pragma omp atomic
10769     ++a;
10770   }
10771 #pragma omp target parallel
10772   {
10773 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
10774     ++a;
10775   }
10776 #pragma omp target parallel
10777   {
10778 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
10779     ++a;
10780   }
10781 #pragma omp target parallel
10782 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
10783   for (int i = 0; i < 10; ++i)
10784     ;
10785 #pragma omp target parallel
10786   {
10787 #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?}}
10788     ++a;
10789   }
10790 #pragma omp target parallel
10791   {
10792     ++a;
10793 #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?}}
10794     ++a;
10795   }
10796 #pragma omp target parallel
10797   {
10798 #pragma omp taskloop
10799   for (int i = 0; i < 10; ++i)
10800     ++a;
10801   }
10802 #pragma omp target parallel
10803   {
10804 #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?}}
10805     for (int i = 0; i < 10; ++i)
10806       ;
10807   }
10808 #pragma omp target parallel
10809   {
10810 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
10811   }
10812 #pragma omp target parallel
10813   {
10814 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
10815   }
10816 #pragma omp target parallel
10817   {
10818 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
10819   }
10820 #pragma omp target parallel
10821   {
10822 #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?}}
10823     for (int i = 0; i < 10; ++i)
10824       ;
10825   }
10826 #pragma omp target parallel
10827   {
10828 #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?}}
10829     for (int i = 0; i < 10; ++i)
10830       ;
10831   }
10832 #pragma omp target parallel
10833   {
10834 #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?}}
10835     for (int i = 0; i < 10; ++i)
10836       ;
10837   }
10838 #pragma omp target parallel
10839   {
10840 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
10841     for (int i = 0; i < 10; ++i)
10842       ;
10843   }
10844 #pragma omp target parallel
10845   {
10846 #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?}}
10847     for (int i = 0; i < 10; ++i)
10848       ;
10849   }
10850 #pragma omp target parallel
10851   {
10852 #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?}}
10853     for (int i = 0; i < 10; ++i)
10854       ;
10855   }
10856 #pragma omp target parallel
10857   {
10858 #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?}}
10859     for (int i = 0; i < 10; ++i)
10860       ;
10861   }
10862 #pragma omp target parallel
10863   {
10864 #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?}}
10865     for (int i = 0; i < 10; ++i)
10866       ;
10867   }
10868 #pragma omp target parallel
10869   {
10870 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
10871     a++;
10872   }
10873 
10874 // TARGET PARALLEL FOR DIRECTIVE
10875 #pragma omp target parallel for
10876   for (int i = 0; i < 10; ++i) {
10877 #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?}}
10878     for (int i = 0; i < 10; ++i)
10879       ;
10880   }
10881 #pragma omp target parallel for
10882   for (int i = 0; i < 10; ++i) {
10883 #pragma omp simd
10884     for (int i = 0; i < 10; ++i)
10885       ;
10886   }
10887 #pragma omp target parallel for
10888   for (int i = 0; i < 10; ++i) {
10889 #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?}}
10890     for (int i = 0; i < 10; ++i)
10891       ;
10892   }
10893 #pragma omp target parallel for
10894   for (int i = 0; i < 10; ++i) {
10895 #pragma omp parallel
10896     for (int i = 0; i < 10; ++i)
10897       ;
10898   }
10899 #pragma omp target parallel for
10900   for (int i = 0; i < 10; ++i) {
10901 #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?}}
10902     {
10903       bar();
10904     }
10905   }
10906 #pragma omp target parallel for
10907   for (int i = 0; i < 10; ++i) {
10908 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
10909     {
10910       bar();
10911     }
10912   }
10913 #pragma omp target parallel for
10914   for (int i = 0; i < 10; ++i) {
10915 #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?}}
10916     {
10917       bar();
10918     }
10919   }
10920 
10921 #pragma omp target parallel for
10922   for (int i = 0; i < 10; ++i) {
10923 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
10924     {
10925       bar();
10926     }
10927   }
10928 
10929 #pragma omp target parallel for
10930   for (int i = 0; i < 10; ++i) {
10931 #pragma omp critical
10932     {
10933       bar();
10934     }
10935   }
10936 
10937 #pragma omp target parallel for
10938   for (int i = 0; i < 10; ++i) {
10939 #pragma omp parallel
10940     {
10941 #pragma omp single // OK
10942       {
10943         bar();
10944       }
10945 #pragma omp for // OK
10946       for (int i = 0; i < 10; ++i)
10947         ;
10948 #pragma omp for simd // OK
10949       for (int i = 0; i < 10; ++i)
10950         ;
10951 #pragma omp sections // OK
10952       {
10953         bar();
10954       }
10955     }
10956   }
10957 #pragma omp target parallel for
10958   for (int i = 0; i < 10; ++i) {
10959 #pragma omp parallel for
10960     for (int i = 0; i < 10; ++i)
10961       ;
10962   }
10963 #pragma omp target parallel for
10964   for (int i = 0; i < 10; ++i) {
10965 #pragma omp parallel for simd
10966     for (int i = 0; i < 10; ++i)
10967       ;
10968   }
10969 #pragma omp target parallel for
10970   for (int i = 0; i < 10; ++i) {
10971 #pragma omp parallel sections
10972     {
10973       bar();
10974     }
10975   }
10976 #pragma omp target parallel for
10977   for (int i = 0; i < 10; ++i) {
10978 #pragma omp task
10979     {
10980       bar();
10981     }
10982   }
10983 #pragma omp target parallel for
10984   for (int i = 0; i < 10; ++i) {
10985 #pragma omp taskyield
10986     bar();
10987   }
10988 #pragma omp target parallel for
10989   for (int i = 0; i < 10; ++i) {
10990 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
10991     bar();
10992   }
10993 #pragma omp target parallel for
10994   for (int i = 0; i < 10; ++i) {
10995 #pragma omp taskwait
10996     bar();
10997   }
10998 #pragma omp target parallel for
10999   for (int i = 0; i < 10; ++i) {
11000 #pragma omp flush
11001     bar();
11002   }
11003 #pragma omp target parallel for
11004   for (int i = 0; i < 10; ++i) {
11005 #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?}}
11006     bar();
11007   }
11008 #pragma omp target parallel for ordered
11009   for (int i = 0; i < 10; ++i) {
11010 #pragma omp ordered // OK
11011     bar();
11012   }
11013 #pragma omp target parallel for
11014   for (int i = 0; i < 10; ++i) {
11015 #pragma omp atomic
11016     ++a;
11017   }
11018 #pragma omp target parallel for
11019   for (int i = 0; i < 10; ++i) {
11020 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
11021     ++a;
11022   }
11023 #pragma omp target parallel for
11024   for (int i = 0; i < 10; ++i) {
11025 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
11026     ++a;
11027   }
11028 #pragma omp target parallel for
11029   for (int i = 0; i < 10; ++i) {
11030 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
11031     for (int i = 0; i < 10; ++i)
11032       ;
11033   }
11034 #pragma omp target parallel for
11035   for (int i = 0; i < 10; ++i) {
11036 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
11037     ++a;
11038   }
11039 #pragma omp target parallel for
11040   for (int i = 0; i < 10; ++i) {
11041 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
11042     ++a;
11043   }
11044 #pragma omp target parallel for
11045   for (int i = 0; i < 10; ++i) {
11046 #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?}}
11047     ++a;
11048   }
11049 #pragma omp target parallel for
11050   for (int i = 0; i < 10; ++i) {
11051 #pragma omp taskloop
11052   for (int i = 0; i < 10; ++i)
11053     ++a;
11054   }
11055 #pragma omp target parallel for
11056   for (int i = 0; i < 10; ++i) {
11057 #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?}}
11058     for (int j = 0; j < 10; ++j)
11059       ;
11060   }
11061 #pragma omp target parallel for
11062   for (int i = 0; i < 10; ++i) {
11063 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
11064     a++;
11065   }
11066 #pragma omp target parallel for
11067   for (int i = 0; i < 10; ++i) {
11068 #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?}}
11069     for (int j = 0; j < 10; ++j)
11070       ;
11071   }
11072 #pragma omp target parallel for
11073   for (int i = 0; i < 10; ++i) {
11074 #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?}}
11075     for (int j = 0; j < 10; ++j)
11076       ;
11077   }
11078 #pragma omp target parallel for
11079   for (int i = 0; i < 10; ++i) {
11080 #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?}}
11081     for (int j = 0; j < 10; ++j)
11082       ;
11083   }
11084 #pragma omp target parallel for
11085   for (int i = 0; i < 10; ++i) {
11086 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
11087     for (int j = 0; j < 10; ++j)
11088       ;
11089   }
11090 #pragma omp target parallel for
11091   for (int i = 0; i < 10; ++i) {
11092 #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?}}
11093     for (int j = 0; j < 10; ++j)
11094       ;
11095   }
11096 #pragma omp target parallel for
11097   for (int i = 0; i < 10; ++i) {
11098 #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?}}
11099     for (int j = 0; j < 10; ++j)
11100       ;
11101   }
11102 #pragma omp target parallel for
11103   for (int i = 0; i < 10; ++i) {
11104 #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?}}
11105     for (int j = 0; j < 10; ++j)
11106       ;
11107   }
11108 #pragma omp target parallel for
11109   for (int i = 0; i < 10; ++i) {
11110 #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?}}
11111     for (int j = 0; j < 10; ++j)
11112       ;
11113   }
11114 #pragma omp target parallel for
11115   for (int i = 0; i < 10; ++i) {
11116 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
11117     a++;
11118   }
11119 
11120 // TEAMS DIRECTIVE
11121 #pragma omp target
11122 #pragma omp teams
11123 #pragma omp parallel
11124   bar();
11125 #pragma omp target
11126 #pragma omp teams
11127 #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?}}
11128   for (int i = 0; i < 10; ++i)
11129     ;
11130 #pragma omp target
11131 #pragma omp teams
11132 #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?}}
11133   for (int i = 0; i < 10; ++i)
11134     ;
11135 #pragma omp target
11136 #pragma omp teams
11137 #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?}}
11138   for (int i = 0; i < 10; ++i)
11139     ;
11140 #pragma omp target
11141 #pragma omp teams
11142 #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?}}
11143   {
11144     bar();
11145   }
11146 #pragma omp target
11147 #pragma omp teams
11148 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
11149   {
11150     bar();
11151   }
11152 #pragma omp target
11153 #pragma omp teams
11154 #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?}}
11155   bar();
11156 
11157 #pragma omp target
11158 #pragma omp teams
11159 #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?}}
11160   {
11161     bar();
11162   }
11163 #pragma omp target
11164 #pragma omp teams
11165 #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?}}
11166   {
11167     bar();
11168   }
11169 #pragma omp target
11170 #pragma omp teams
11171 #pragma omp parallel for
11172   for (int i = 0; i < 10; ++i)
11173     ;
11174 #pragma omp target
11175 #pragma omp teams
11176 #pragma omp parallel for simd
11177   for (int i = 0; i < 10; ++i)
11178     ;
11179 #pragma omp target
11180 #pragma omp teams
11181 #pragma omp parallel sections
11182   {
11183     bar();
11184   }
11185 #pragma omp target
11186 #pragma omp teams
11187 #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?}}
11188   {
11189     bar();
11190   }
11191 #pragma omp target
11192 #pragma omp teams
11193   {
11194 #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?}}
11195     bar();
11196   }
11197 #pragma omp target
11198 #pragma omp teams
11199   {
11200 #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?}}
11201     bar();
11202   }
11203 #pragma omp target
11204 #pragma omp teams
11205   {
11206 #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?}}
11207     bar();
11208   }
11209 #pragma omp target
11210 #pragma omp teams
11211   {
11212 #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?}}
11213     bar();
11214   }
11215 #pragma omp target
11216 #pragma omp teams
11217   {
11218 #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?}}
11219     bar();
11220   }
11221 #pragma omp target
11222 #pragma omp teams
11223   {
11224 #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?}}
11225     ++a;
11226   }
11227 #pragma omp target
11228 #pragma omp teams
11229   {
11230 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
11231     ++a;
11232   }
11233 #pragma omp target
11234 #pragma omp teams
11235   {
11236 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
11237     ++a;
11238   }
11239 #pragma omp target
11240 #pragma omp teams
11241 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
11242   for (int i = 0; i < 10; ++i)
11243     ;
11244 #pragma omp target
11245 #pragma omp teams
11246   {
11247 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
11248   }
11249 #pragma omp target
11250 #pragma omp teams
11251   {
11252 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
11253   }
11254 #pragma omp target
11255 #pragma omp teams
11256   {
11257 #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?}}
11258     ++a;
11259   }
11260 #pragma omp target
11261 #pragma omp teams
11262   {
11263 #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?}}
11264   for (int i = 0; i < 10; ++i)
11265     ++a;
11266   }
11267 #pragma omp target
11268 #pragma omp teams
11269 #pragma omp distribute
11270   for (int i = 0; i < 10; ++i)
11271     ;
11272 #pragma omp target
11273 #pragma omp teams
11274 #pragma omp distribute
11275   for (int i = 0; i < 10; ++i)
11276     ;
11277 #pragma omp distribute
11278   for (int j = 0; j < 10; ++j)
11279     ;
11280 #pragma omp target
11281 #pragma omp teams
11282   {
11283 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
11284     ++a;
11285   }
11286 #pragma omp target
11287 #pragma omp teams
11288 #pragma omp distribute parallel for
11289   for (int i = 0; i < 10; ++i)
11290     ;
11291 #pragma omp target
11292 #pragma omp teams
11293   {
11294 #pragma omp distribute parallel for
11295   for (int i = 0; i < 10; ++i)
11296     ;
11297 #pragma omp distribute parallel for
11298   for (int j = 0; j < 10; ++j)
11299     ;
11300   }
11301 #pragma omp target
11302 #pragma omp teams
11303   {
11304 #pragma omp distribute parallel for simd
11305   for (int i = 0; i < 10; ++i)
11306     ;
11307 #pragma omp distribute parallel for simd
11308   for (int j = 0; j < 10; ++j)
11309     ;
11310   }
11311 #pragma omp target
11312 #pragma omp teams
11313   {
11314 #pragma omp distribute simd
11315   for (int i = 0; i < 10; ++i)
11316     ;
11317 #pragma omp distribute simd
11318   for (int j = 0; j < 10; ++j)
11319     ;
11320   }
11321 #pragma omp target
11322 #pragma omp teams
11323   {
11324 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
11325   for (int i = 0; i < 10; ++i)
11326     ;
11327   }
11328 #pragma omp target
11329 #pragma omp teams
11330   {
11331 #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?}}
11332   for (int i = 0; i < 10; ++i)
11333     ;
11334   }
11335 #pragma omp target
11336 #pragma omp teams
11337   {
11338 #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?}}
11339   for (int i = 0; i < 10; ++i)
11340     ;
11341   }
11342 #pragma omp target
11343 #pragma omp teams
11344   {
11345 #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?}}
11346   for (int i = 0; i < 10; ++i)
11347     ;
11348   }
11349 #pragma omp target
11350 #pragma omp teams
11351   {
11352 #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?}}
11353   for (int i = 0; i < 10; ++i)
11354     ;
11355   }
11356 #pragma omp target
11357 #pragma omp teams
11358   {
11359 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
11360     a++;
11361   }
11362 
11363 // TASKLOOP DIRECTIVE
11364 #pragma omp taskloop
11365   for (int i = 0; i < 10; ++i) {
11366 #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?}}
11367     for (int i = 0; i < 10; ++i)
11368       ;
11369   }
11370 #pragma omp taskloop
11371   for (int i = 0; i < 10; ++i) {
11372 #pragma omp simd
11373     for (int i = 0; i < 10; ++i)
11374       ;
11375   }
11376 #pragma omp taskloop
11377   for (int i = 0; i < 10; ++i) {
11378 #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?}}
11379     for (int i = 0; i < 10; ++i)
11380       ;
11381   }
11382 #pragma omp taskloop
11383   for (int i = 0; i < 10; ++i) {
11384 #pragma omp parallel
11385     for (int i = 0; i < 10; ++i)
11386       ;
11387   }
11388 #pragma omp taskloop
11389   for (int i = 0; i < 10; ++i) {
11390 #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?}}
11391     {
11392       bar();
11393     }
11394   }
11395 #pragma omp taskloop
11396   for (int i = 0; i < 10; ++i) {
11397 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
11398     {
11399       bar();
11400     }
11401   }
11402 #pragma omp taskloop
11403   for (int i = 0; i < 10; ++i) {
11404 #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?}}
11405     {
11406       bar();
11407     }
11408   }
11409 
11410 #pragma omp taskloop
11411   for (int i = 0; i < 10; ++i) {
11412 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
11413     {
11414       bar();
11415     }
11416   }
11417 #pragma omp taskloop
11418   for (int i = 0; i < 10; ++i) {
11419 #pragma omp critical
11420     {
11421       bar();
11422     }
11423   }
11424 #pragma omp taskloop
11425   for (int i = 0; i < 10; ++i) {
11426 #pragma omp parallel
11427     {
11428 #pragma omp single // OK
11429       {
11430         bar();
11431       }
11432 #pragma omp for // OK
11433       for (int i = 0; i < 10; ++i)
11434         ;
11435 #pragma omp sections // OK
11436       {
11437         bar();
11438       }
11439     }
11440   }
11441 #pragma omp taskloop
11442   for (int i = 0; i < 10; ++i) {
11443 #pragma omp parallel for
11444     for (int i = 0; i < 10; ++i)
11445       ;
11446   }
11447 #pragma omp taskloop
11448   for (int i = 0; i < 10; ++i) {
11449 #pragma omp parallel for simd
11450     for (int i = 0; i < 10; ++i)
11451       ;
11452   }
11453 #pragma omp taskloop
11454   for (int i = 0; i < 10; ++i) {
11455 #pragma omp parallel sections
11456     {
11457       bar();
11458     }
11459   }
11460 #pragma omp taskloop
11461   for (int i = 0; i < 10; ++i) {
11462 #pragma omp task
11463     {
11464       bar();
11465     }
11466   }
11467 #pragma omp taskloop
11468   for (int i = 0; i < 10; ++i) {
11469 #pragma omp taskyield
11470     bar();
11471   }
11472 #pragma omp taskloop
11473   for (int i = 0; i < 10; ++i) {
11474 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
11475     bar();
11476   }
11477 #pragma omp taskloop
11478   for (int i = 0; i < 10; ++i) {
11479 #pragma omp taskwait
11480     bar();
11481   }
11482 #pragma omp taskloop
11483   for (int i = 0; i < 10; ++i) {
11484 #pragma omp flush
11485     bar();
11486   }
11487 #pragma omp taskloop
11488   for (int i = 0; i < 10; ++i) {
11489 #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?}}
11490     bar();
11491   }
11492 #pragma omp taskloop
11493   for (int i = 0; i < 10; ++i) {
11494 #pragma omp atomic
11495     ++a;
11496   }
11497 #pragma omp taskloop
11498   for (int i = 0; i < 10; ++i) {
11499 #pragma omp target
11500     ++a;
11501   }
11502 #pragma omp taskloop
11503   for (int i = 0; i < 10; ++i) {
11504 #pragma omp target parallel
11505     ++a;
11506   }
11507 #pragma omp taskloop
11508   for (int i = 0; i < 10; ++i) {
11509 #pragma omp target parallel for
11510     for (int i = 0; i < 10; ++i)
11511       ;
11512   }
11513 #pragma omp taskloop
11514   for (int i = 0; i < 10; ++i) {
11515 #pragma omp target enter data map(to: a)
11516     ++a;
11517   }
11518 #pragma omp taskloop
11519   for (int i = 0; i < 10; ++i) {
11520 #pragma omp target exit data map(from: a)
11521     ++a;
11522   }
11523 #pragma omp taskloop
11524   for (int i = 0; i < 10; ++i) {
11525 #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?}}
11526     ++a;
11527   }
11528 #pragma omp taskloop
11529   for (int i = 0; i < 10; ++i) {
11530 #pragma omp taskloop
11531   for (int i = 0; i < 10; ++i)
11532     ++a;
11533   }
11534 #pragma omp taskloop
11535   for (int i = 0; i < 10; ++i) {
11536 #pragma omp target update to(a)
11537     ++a;
11538   }
11539 #pragma omp taskloop
11540   for (int i = 0; i < 10; ++i) {
11541 #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?}}
11542     for (int i = 0; i < 10; ++i)
11543       ;
11544   }
11545 #pragma omp taskloop
11546   for (int i = 0; i < 10; ++i) {
11547 #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?}}
11548     for (int i = 0; i < 10; ++i)
11549       ;
11550   }
11551 #pragma omp taskloop
11552   for (int i = 0; i < 10; ++i) {
11553 #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?}}
11554     for (int i = 0; i < 10; ++i)
11555       ;
11556   }
11557 #pragma omp taskloop
11558   for (int i = 0; i < 10; ++i) {
11559 #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?}}
11560     for (int i = 0; i < 10; ++i)
11561       ;
11562   }
11563 #pragma omp taskloop
11564   for (int i = 0; i < 10; ++i) {
11565 #pragma omp target simd // OK
11566     for (int i = 0; i < 10; ++i)
11567       ;
11568   }
11569 #pragma omp taskloop
11570   for (int i = 0; i < 10; ++i) {
11571 #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?}}
11572     for (int i = 0; i < 10; ++i)
11573       ;
11574   }
11575 #pragma omp taskloop
11576   for (int i = 0; i < 10; ++i) {
11577 #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?}}
11578     for (int i = 0; i < 10; ++i)
11579       ;
11580   }
11581 #pragma omp taskloop
11582   for (int i = 0; i < 10; ++i) {
11583 #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?}}
11584     for (int i = 0; i < 10; ++i)
11585       ;
11586   }
11587 #pragma omp taskloop
11588   for (int i = 0; i < 10; ++i) {
11589 #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?}}
11590     for (int i = 0; i < 10; ++i)
11591       ;
11592   }
11593 #pragma omp taskloop
11594   for (int i = 0; i < 10; ++i) {
11595 #pragma omp target teams // OK
11596     a++;
11597   }
11598 
11599 // DISTRIBUTE DIRECTIVE
11600 #pragma omp target
11601 #pragma omp teams
11602 #pragma omp distribute
11603   for (int i = 0; i < 10; ++i) {
11604 #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?}}
11605     for (int i = 0; i < 10; ++i)
11606       ;
11607   }
11608 #pragma omp target
11609 #pragma omp teams
11610 #pragma omp distribute
11611   for (int i = 0; i < 10; ++i) {
11612 #pragma omp for
11613     for (int i = 0; i < 10; ++i)
11614       ;
11615   }
11616 #pragma omp target
11617 #pragma omp teams
11618 #pragma omp distribute
11619   for (int i = 0; i < 10; ++i) {
11620 #pragma omp simd
11621     for (int i = 0; i < 10; ++i)
11622       ;
11623   }
11624 #pragma omp target
11625 #pragma omp teams
11626 #pragma omp distribute
11627   for (int i = 0; i < 10; ++i) {
11628 #pragma omp for simd
11629     for (int i = 0; i < 10; ++i)
11630       ;
11631   }
11632 #pragma omp target
11633 #pragma omp teams
11634 #pragma omp distribute
11635   for (int i = 0; i < 10; ++i) {
11636 #pragma omp parallel
11637     for (int i = 0; i < 10; ++i)
11638       ;
11639   }
11640 #pragma omp target
11641 #pragma omp teams
11642 #pragma omp distribute
11643   for (int i = 0; i < 10; ++i) {
11644 #pragma omp sections
11645     {
11646       bar();
11647     }
11648   }
11649 #pragma omp target
11650 #pragma omp teams
11651 #pragma omp distribute
11652   for (int i = 0; i < 10; ++i) {
11653 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
11654     {
11655       bar();
11656     }
11657   }
11658 #pragma omp target
11659 #pragma omp teams
11660 #pragma omp distribute
11661   for (int i = 0; i < 10; ++i) {
11662 #pragma omp single
11663     {
11664       bar();
11665     }
11666   }
11667 #pragma omp target
11668 #pragma omp teams
11669 #pragma omp distribute
11670   for (int i = 0; i < 10; ++i) {
11671 #pragma omp master
11672     {
11673       bar();
11674     }
11675   }
11676 #pragma omp target
11677 #pragma omp teams
11678 #pragma omp distribute
11679   for (int i = 0; i < 10; ++i) {
11680 #pragma omp critical
11681     {
11682       bar();
11683     }
11684   }
11685 #pragma omp target
11686 #pragma omp teams
11687 #pragma omp distribute
11688   for (int i = 0; i < 10; ++i) {
11689 #pragma omp parallel
11690     {
11691 #pragma omp single
11692       {
11693 	bar();
11694       }
11695     }
11696   }
11697 #pragma omp target
11698 #pragma omp teams
11699 #pragma omp distribute
11700   for (int i = 0; i < 10; ++i) {
11701 #pragma omp parallel for
11702     for (int i = 0; i < 10; ++i)
11703       ;
11704   }
11705 #pragma omp target
11706 #pragma omp teams
11707 #pragma omp distribute
11708   for (int i = 0; i < 10; ++i) {
11709 #pragma omp parallel for simd
11710     for (int i = 0; i < 10; ++i)
11711       ;
11712   }
11713 #pragma omp target
11714 #pragma omp teams
11715 #pragma omp distribute
11716   for (int i = 0; i < 10; ++i) {
11717 #pragma omp parallel sections
11718     {
11719       bar();
11720     }
11721   }
11722 #pragma omp target
11723 #pragma omp teams
11724 #pragma omp distribute
11725   for (int i = 0; i < 10; ++i) {
11726 #pragma omp task
11727     {
11728       bar();
11729     }
11730   }
11731 #pragma omp target
11732 #pragma omp teams
11733 #pragma omp distribute
11734   for (int i = 0; i < 10; ++i) {
11735 #pragma omp taskyield
11736     bar();
11737   }
11738 #pragma omp target
11739 #pragma omp teams
11740 #pragma omp distribute
11741   for (int i = 0; i < 10; ++i) {
11742 #pragma omp barrier
11743     bar();
11744   }
11745 #pragma omp target
11746 #pragma omp teams
11747 #pragma omp distribute
11748   for (int i = 0; i < 10; ++i) {
11749 #pragma omp taskwait
11750     bar();
11751   }
11752 #pragma omp target
11753 #pragma omp teams
11754 #pragma omp distribute
11755   for (int i = 0; i < 10; ++i) {
11756 #pragma omp flush
11757     bar();
11758   }
11759 #pragma omp target
11760 #pragma omp teams
11761 #pragma omp distribute
11762   for (int i = 0; i < 10; ++i) {
11763 #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?}}
11764     bar();
11765   }
11766 #pragma omp target
11767 #pragma omp teams
11768 #pragma omp distribute
11769   for (int i = 0; i < 10; ++i) {
11770 #pragma omp atomic
11771     ++a;
11772   }
11773 #pragma omp target
11774 #pragma omp teams
11775 #pragma omp distribute
11776   for (int i = 0; i < 10; ++i) {
11777 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
11778     ++a;
11779   }
11780 #pragma omp target
11781 #pragma omp teams
11782 #pragma omp distribute
11783   for (int i = 0; i < 10; ++i) {
11784 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
11785     ++a;
11786   }
11787 #pragma omp target
11788 #pragma omp teams
11789 #pragma omp distribute
11790   for (int i = 0; i < 10; ++i) {
11791 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
11792     for (int i = 0; i < 10; ++i)
11793       ;
11794   }
11795 #pragma omp target
11796 #pragma omp teams
11797 #pragma omp distribute
11798   for (int i = 0; i < 10; ++i) {
11799 #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?}}
11800     ++a;
11801   }
11802 #pragma omp target
11803 #pragma omp teams
11804 #pragma omp distribute
11805   for (int i = 0; i < 10; ++i) {
11806 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
11807     ++a;
11808   }
11809 #pragma omp target
11810 #pragma omp teams
11811 #pragma omp distribute
11812   for (int i = 0; i < 10; ++i) {
11813 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
11814     ++a;
11815   }
11816 #pragma omp target
11817 #pragma omp teams
11818 #pragma omp distribute
11819   for (int i = 0; i < 10; ++i) {
11820 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
11821     ++a;
11822   }
11823 #pragma omp target
11824 #pragma omp teams
11825 #pragma omp distribute
11826   for (int i = 0; i < 10; ++i) {
11827 #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?}}
11828   for (int i = 0; i < 10; ++i)
11829     ++a;
11830   }
11831 #pragma omp target
11832 #pragma omp teams
11833 #pragma omp distribute
11834   for (int i = 0; i < 10; ++i) {
11835 #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?}}
11836   for (int i = 0; i < 10; ++i)
11837     ++a;
11838   }
11839 #pragma omp target
11840 #pragma omp teams
11841 #pragma omp distribute
11842   for (int i = 0; i < 10; ++i) {
11843 #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?}}
11844   for (int i = 0; i < 10; ++i)
11845     ++a;
11846   }
11847 #pragma omp target
11848 #pragma omp teams
11849 #pragma omp distribute
11850   for (int i = 0; i < 10; ++i) {
11851 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
11852   for (int i = 0; i < 10; ++i)
11853     ++a;
11854   }
11855 #pragma omp target
11856 #pragma omp teams
11857 #pragma omp distribute
11858   for (int i = 0; i < 10; ++i) {
11859 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
11860   for (int i = 0; i < 10; ++i)
11861     ++a;
11862   }
11863 #pragma omp target
11864 #pragma omp teams
11865 #pragma omp distribute
11866   for (int i = 0; i < 10; ++i) {
11867 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
11868   for (int i = 0; i < 10; ++i)
11869     ++a;
11870   }
11871 #pragma omp target
11872 #pragma omp teams
11873 #pragma omp distribute
11874   for (int i = 0; i < 10; ++i) {
11875 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
11876   for (int i = 0; i < 10; ++i)
11877     ++a;
11878   }
11879 
11880 // DISTRIBUTE PARALLEL FOR DIRECTIVE
11881 #pragma omp target
11882 #pragma omp teams
11883 #pragma omp distribute parallel for
11884   for (int i = 0; i < 10; ++i) {
11885 #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?}}
11886     for (int i = 0; i < 10; ++i)
11887       ;
11888   }
11889 
11890 #pragma omp target
11891 #pragma omp teams
11892 #pragma omp distribute parallel for
11893   for (int i = 0; i < 10; ++i) {
11894 #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?}}
11895     for (int i = 0; i < 10; ++i)
11896       ;
11897   }
11898 #pragma omp target
11899 #pragma omp teams
11900 #pragma omp distribute parallel for
11901   for (int i = 0; i < 10; ++i) {
11902 #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?}}
11903     for (int i = 0; i < 10; ++i)
11904       ;
11905   }
11906 #pragma omp target
11907 #pragma omp teams
11908 #pragma omp distribute parallel for
11909   for (int i = 0; i < 10; ++i) {
11910 #pragma omp simd
11911     for (int i = 0; i < 10; ++i)
11912       ;
11913   }
11914 #pragma omp target
11915 #pragma omp teams
11916 #pragma omp distribute parallel for
11917   for (int i = 0; i < 10; ++i) {
11918 #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?}}
11919     for (int i = 0; i < 10; ++i)
11920       ;
11921   }
11922 #pragma omp target
11923 #pragma omp teams
11924 #pragma omp distribute parallel for
11925   for (int i = 0; i < 10; ++i) {
11926 #pragma omp parallel
11927     for (int i = 0; i < 10; ++i)
11928       ;
11929   }
11930 #pragma omp target
11931 #pragma omp teams
11932 #pragma omp distribute parallel for
11933   for (int i = 0; i < 10; ++i) {
11934 #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?}}
11935     {
11936       bar();
11937     }
11938   }
11939 #pragma omp target
11940 #pragma omp teams
11941 #pragma omp distribute parallel for
11942   for (int i = 0; i < 10; ++i) {
11943 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
11944     {
11945       bar();
11946     }
11947   }
11948 #pragma omp target
11949 #pragma omp teams
11950 #pragma omp distribute parallel for
11951   for (int i = 0; i < 10; ++i) {
11952 #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?}}
11953     {
11954       bar();
11955     }
11956   }
11957 #pragma omp target
11958 #pragma omp teams
11959 #pragma omp distribute parallel for
11960   for (int i = 0; i < 10; ++i) {
11961 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
11962     {
11963       bar();
11964     }
11965   }
11966 #pragma omp target
11967 #pragma omp teams
11968 #pragma omp distribute parallel for
11969   for (int i = 0; i < 10; ++i) {
11970 #pragma omp critical
11971     {
11972       bar();
11973     }
11974   }
11975 #pragma omp target
11976 #pragma omp teams
11977 #pragma omp distribute parallel for
11978   for (int i = 0; i < 10; ++i) {
11979 #pragma omp parallel
11980     {
11981 #pragma omp single
11982       {
11983 	bar();
11984       }
11985     }
11986   }
11987 #pragma omp target
11988 #pragma omp teams
11989 #pragma omp distribute parallel for
11990   for (int i = 0; i < 10; ++i) {
11991 #pragma omp parallel for
11992     for (int i = 0; i < 10; ++i)
11993       ;
11994   }
11995 #pragma omp target
11996 #pragma omp teams
11997 #pragma omp distribute parallel for
11998   for (int i = 0; i < 10; ++i) {
11999 #pragma omp parallel for simd
12000     for (int i = 0; i < 10; ++i)
12001       ;
12002   }
12003 #pragma omp target
12004 #pragma omp teams
12005 #pragma omp distribute parallel for
12006   for (int i = 0; i < 10; ++i) {
12007 #pragma omp parallel sections
12008     {
12009       bar();
12010     }
12011   }
12012 #pragma omp target
12013 #pragma omp teams
12014 #pragma omp distribute parallel for
12015   for (int i = 0; i < 10; ++i) {
12016 #pragma omp task
12017     {
12018       bar();
12019     }
12020   }
12021 #pragma omp target
12022 #pragma omp teams
12023 #pragma omp distribute parallel for
12024   for (int i = 0; i < 10; ++i) {
12025 #pragma omp taskyield
12026     bar();
12027   }
12028 #pragma omp target
12029 #pragma omp teams
12030 #pragma omp distribute parallel for
12031   for (int i = 0; i < 10; ++i) {
12032 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
12033     bar();
12034   }
12035 #pragma omp target
12036 #pragma omp teams
12037 #pragma omp distribute parallel for
12038   for (int i = 0; i < 10; ++i) {
12039 #pragma omp taskwait
12040     bar();
12041   }
12042 #pragma omp target
12043 #pragma omp teams
12044 #pragma omp distribute parallel for
12045   for (int i = 0; i < 10; ++i) {
12046 #pragma omp flush
12047     bar();
12048   }
12049 #pragma omp target
12050 #pragma omp teams
12051 #pragma omp distribute parallel for
12052   for (int i = 0; i < 10; ++i) {
12053 #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?}}
12054     bar();
12055   }
12056 #pragma omp target
12057 #pragma omp teams
12058 #pragma omp distribute parallel for
12059   for (int i = 0; i < 10; ++i) {
12060 #pragma omp atomic
12061     ++a;
12062   }
12063 #pragma omp target
12064 #pragma omp teams
12065 #pragma omp distribute parallel for
12066   for (int i = 0; i < 10; ++i) {
12067 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
12068     ++a;
12069   }
12070 #pragma omp target
12071 #pragma omp teams
12072 #pragma omp distribute parallel for
12073   for (int i = 0; i < 10; ++i) {
12074 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
12075     ++a;
12076   }
12077 #pragma omp target
12078 #pragma omp teams
12079 #pragma omp distribute parallel for
12080   for (int i = 0; i < 10; ++i) {
12081 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
12082     for (int i = 0; i < 10; ++i)
12083       ;
12084   }
12085 #pragma omp target
12086 #pragma omp teams
12087 #pragma omp distribute parallel for
12088   for (int i = 0; i < 10; ++i) {
12089 #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?}}
12090     ++a;
12091   }
12092 #pragma omp target
12093 #pragma omp teams
12094 #pragma omp distribute parallel for
12095   for (int i = 0; i < 10; ++i) {
12096 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
12097     ++a;
12098   }
12099 #pragma omp target
12100 #pragma omp teams
12101 #pragma omp distribute parallel for
12102   for (int i = 0; i < 10; ++i) {
12103 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
12104     ++a;
12105   }
12106 #pragma omp target
12107 #pragma omp teams
12108 #pragma omp distribute parallel for
12109   for (int i = 0; i < 10; ++i) {
12110 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
12111     ++a;
12112   }
12113 #pragma omp target
12114 #pragma omp teams
12115 #pragma omp distribute parallel for
12116   for (int i = 0; i < 10; ++i) {
12117 #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?}}
12118   for (int i = 0; i < 10; ++i)
12119     ++a;
12120   }
12121 #pragma omp target
12122 #pragma omp teams
12123 #pragma omp distribute parallel for
12124   for (int i = 0; i < 10; ++i) {
12125 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
12126   for (int i = 0; i < 10; ++i)
12127     ++a;
12128   }
12129 #pragma omp target
12130 #pragma omp teams
12131 #pragma omp distribute parallel for
12132   for (int i = 0; i < 10; ++i) {
12133 #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?}}
12134   for (int i = 0; i < 10; ++i)
12135     ++a;
12136   }
12137 #pragma omp target
12138 #pragma omp teams
12139 #pragma omp distribute parallel for
12140   for (int i = 0; i < 10; ++i) {
12141 #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?}}
12142   for (int i = 0; i < 10; ++i)
12143     ++a;
12144   }
12145 #pragma omp target
12146 #pragma omp teams
12147 #pragma omp distribute parallel for
12148   for (int i = 0; i < 10; ++i) {
12149 #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?}}
12150   for (int i = 0; i < 10; ++i)
12151     ++a;
12152   }
12153 #pragma omp target
12154 #pragma omp teams
12155 #pragma omp distribute parallel for
12156   for (int i = 0; i < 10; ++i) {
12157 #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?}}
12158   for (int i = 0; i < 10; ++i)
12159     ++a;
12160   }
12161 #pragma omp target
12162 #pragma omp teams
12163 #pragma omp distribute parallel for
12164   for (int i = 0; i < 10; ++i) {
12165 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
12166     ++a;
12167   }
12168 
12169 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
12170 #pragma omp target
12171 #pragma omp teams
12172 #pragma omp distribute parallel for simd
12173   for (int i = 0; i < 10; ++i) {
12174 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12175     for (int i = 0; i < 10; ++i)
12176       ;
12177   }
12178 #pragma omp target
12179 #pragma omp teams
12180 #pragma omp distribute parallel for simd
12181   for (int i = 0; i < 10; ++i) {
12182 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12183     for (int i = 0; i < 10; ++i)
12184       ;
12185   }
12186 #pragma omp target
12187 #pragma omp teams
12188 #pragma omp distribute parallel for simd
12189   for (int i = 0; i < 10; ++i) {
12190 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12191     for (int i = 0; i < 10; ++i)
12192       ;
12193   }
12194 #pragma omp target
12195 #pragma omp teams
12196 #pragma omp distribute parallel for simd
12197   for (int i = 0; i < 10; ++i) {
12198 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12199     for (int i = 0; i < 10; ++i)
12200       ;
12201   }
12202 #pragma omp target
12203 #pragma omp teams
12204 #pragma omp distribute parallel for simd
12205   for (int i = 0; i < 10; ++i) {
12206 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12207     for (int i = 0; i < 10; ++i)
12208       ;
12209   }
12210 #pragma omp target
12211 #pragma omp teams
12212 #pragma omp distribute parallel for simd
12213   for (int i = 0; i < 10; ++i) {
12214 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12215     for (int i = 0; i < 10; ++i)
12216       ;
12217   }
12218 #pragma omp target
12219 #pragma omp teams
12220 #pragma omp distribute parallel for simd
12221   for (int i = 0; i < 10; ++i) {
12222 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12223     {
12224       bar();
12225     }
12226   }
12227 #pragma omp target
12228 #pragma omp teams
12229 #pragma omp distribute parallel for simd
12230   for (int i = 0; i < 10; ++i) {
12231 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12232     {
12233       bar();
12234     }
12235   }
12236 #pragma omp target
12237 #pragma omp teams
12238 #pragma omp distribute parallel for simd
12239   for (int i = 0; i < 10; ++i) {
12240 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12241     {
12242       bar();
12243     }
12244   }
12245 #pragma omp target
12246 #pragma omp teams
12247 #pragma omp distribute parallel for simd
12248   for (int i = 0; i < 10; ++i) {
12249 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12250     {
12251       bar();
12252     }
12253   }
12254 #pragma omp target
12255 #pragma omp teams
12256 #pragma omp distribute parallel for simd
12257   for (int i = 0; i < 10; ++i) {
12258 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12259     {
12260       bar();
12261     }
12262   }
12263 #pragma omp target
12264 #pragma omp teams
12265 #pragma omp distribute parallel for simd
12266   for (int i = 0; i < 10; ++i) {
12267 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12268     {
12269 #pragma omp single
12270       {
12271 	bar();
12272       }
12273     }
12274   }
12275 #pragma omp target
12276 #pragma omp teams
12277 #pragma omp distribute parallel for simd
12278   for (int i = 0; i < 10; ++i) {
12279 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12280     for (int i = 0; i < 10; ++i)
12281       ;
12282   }
12283 #pragma omp target
12284 #pragma omp teams
12285 #pragma omp distribute parallel for simd
12286   for (int i = 0; i < 10; ++i) {
12287 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12288     for (int i = 0; i < 10; ++i)
12289       ;
12290   }
12291 #pragma omp target
12292 #pragma omp teams
12293 #pragma omp distribute parallel for simd
12294   for (int i = 0; i < 10; ++i) {
12295 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12296     {
12297       bar();
12298     }
12299   }
12300 #pragma omp target
12301 #pragma omp teams
12302 #pragma omp distribute parallel for simd
12303   for (int i = 0; i < 10; ++i) {
12304 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12305     {
12306       bar();
12307     }
12308   }
12309 #pragma omp target
12310 #pragma omp teams
12311 #pragma omp distribute parallel for simd
12312   for (int i = 0; i < 10; ++i) {
12313 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12314     bar();
12315   }
12316 #pragma omp target
12317 #pragma omp teams
12318 #pragma omp distribute parallel for simd
12319   for (int i = 0; i < 10; ++i) {
12320 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12321     bar();
12322   }
12323 #pragma omp target
12324 #pragma omp teams
12325 #pragma omp distribute parallel for simd
12326   for (int i = 0; i < 10; ++i) {
12327 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12328     bar();
12329   }
12330 #pragma omp target
12331 #pragma omp teams
12332 #pragma omp distribute parallel for simd
12333   for (int i = 0; i < 10; ++i) {
12334 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12335     bar();
12336   }
12337 #pragma omp target
12338 #pragma omp teams
12339 #pragma omp distribute parallel for simd
12340   for (int i = 0; i < 10; ++i) {
12341 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12342     bar();
12343   }
12344 #pragma omp target
12345 #pragma omp teams
12346 #pragma omp distribute parallel for simd
12347   for (int i = 0; i < 10; ++i) {
12348 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12349     ++a;
12350   }
12351 #pragma omp target
12352 #pragma omp teams
12353 #pragma omp distribute parallel for simd
12354   for (int i = 0; i < 10; ++i) {
12355 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12356     ++a;
12357   }
12358 #pragma omp target
12359 #pragma omp teams
12360 #pragma omp distribute parallel for simd
12361   for (int i = 0; i < 10; ++i) {
12362 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12363     ++a;
12364   }
12365 #pragma omp target
12366 #pragma omp teams
12367 #pragma omp distribute parallel for simd
12368   for (int i = 0; i < 10; ++i) {
12369 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12370     ++a;
12371   }
12372 #pragma omp target
12373 #pragma omp teams
12374 #pragma omp distribute parallel for simd
12375   for (int i = 0; i < 10; ++i) {
12376 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12377     ++a;
12378   }
12379 #pragma omp target
12380 #pragma omp teams
12381 #pragma omp distribute parallel for simd
12382   for (int i = 0; i < 10; ++i) {
12383 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12384     ++a;
12385   }
12386 #pragma omp target
12387 #pragma omp teams
12388 #pragma omp distribute parallel for simd
12389   for (int i = 0; i < 10; ++i) {
12390 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12391     ++a;
12392   }
12393 #pragma omp target
12394 #pragma omp teams
12395 #pragma omp distribute parallel for simd
12396   for (int i = 0; i < 10; ++i) {
12397 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12398     for (int i = 0; i < 10; ++i)
12399       ;
12400   }
12401 #pragma omp target
12402 #pragma omp teams
12403 #pragma omp distribute parallel for simd
12404   for (int i = 0; i < 10; ++i) {
12405 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12406     for (int i = 0; i < 10; ++i)
12407       ;
12408   }
12409 #pragma omp target
12410 #pragma omp teams
12411 #pragma omp distribute parallel for simd
12412   for (int i = 0; i < 10; ++i) {
12413 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12414     for (int i = 0; i < 10; ++i)
12415       ;
12416   }
12417 #pragma omp target
12418 #pragma omp teams
12419 #pragma omp distribute parallel for simd
12420   for (int i = 0; i < 10; ++i) {
12421 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12422     for (int i = 0; i < 10; ++i)
12423       ;
12424   }
12425 #pragma omp target
12426 #pragma omp teams
12427 #pragma omp distribute parallel for simd
12428   for (int i = 0; i < 10; ++i) {
12429 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12430     for (int i = 0; i < 10; ++i)
12431       ;
12432   }
12433 #pragma omp target
12434 #pragma omp teams
12435 #pragma omp distribute parallel for simd
12436   for (int i = 0; i < 10; ++i) {
12437 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12438     for (int i = 0; i < 10; ++i)
12439       ;
12440   }
12441 #pragma omp target
12442 #pragma omp teams
12443 #pragma omp distribute parallel for simd
12444   for (int i = 0; i < 10; ++i) {
12445 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12446     a++;
12447   }
12448 
12449 // DISTRIBUTE SIMD DIRECTIVE
12450 #pragma omp target
12451 #pragma omp teams
12452 #pragma omp distribute simd
12453   for (int i = 0; i < 10; ++i) {
12454 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12455     for (int i = 0; i < 10; ++i)
12456       ;
12457   }
12458 #pragma omp target
12459 #pragma omp teams
12460 #pragma omp distribute simd
12461   for (int i = 0; i < 10; ++i) {
12462 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12463     for (int i = 0; i < 10; ++i)
12464       ;
12465   }
12466 #pragma omp target
12467 #pragma omp teams
12468 #pragma omp distribute simd
12469   for (int i = 0; i < 10; ++i) {
12470 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12471     for (int i = 0; i < 10; ++i)
12472       ;
12473   }
12474 #pragma omp target
12475 #pragma omp teams
12476 #pragma omp distribute simd
12477   for (int i = 0; i < 10; ++i) {
12478 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12479     for (int i = 0; i < 10; ++i)
12480       ;
12481   }
12482 #pragma omp target
12483 #pragma omp teams
12484 #pragma omp distribute simd
12485   for (int i = 0; i < 10; ++i) {
12486 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12487     for (int i = 0; i < 10; ++i)
12488       ;
12489   }
12490 #pragma omp target
12491 #pragma omp teams
12492 #pragma omp distribute simd
12493   for (int i = 0; i < 10; ++i) {
12494 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12495     for (int i = 0; i < 10; ++i)
12496       ;
12497   }
12498 #pragma omp target
12499 #pragma omp teams
12500 #pragma omp distribute simd
12501   for (int i = 0; i < 10; ++i) {
12502 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12503     {
12504       bar();
12505     }
12506   }
12507 #pragma omp target
12508 #pragma omp teams
12509 #pragma omp distribute simd
12510   for (int i = 0; i < 10; ++i) {
12511 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12512     {
12513       bar();
12514     }
12515   }
12516 #pragma omp target
12517 #pragma omp teams
12518 #pragma omp distribute simd
12519   for (int i = 0; i < 10; ++i) {
12520 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12521     {
12522       bar();
12523     }
12524   }
12525 #pragma omp target
12526 #pragma omp teams
12527 #pragma omp distribute simd
12528   for (int i = 0; i < 10; ++i) {
12529 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12530     {
12531       bar();
12532     }
12533   }
12534 #pragma omp target
12535 #pragma omp teams
12536 #pragma omp distribute simd
12537   for (int i = 0; i < 10; ++i) {
12538 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12539     {
12540       bar();
12541     }
12542   }
12543 #pragma omp target
12544 #pragma omp teams
12545 #pragma omp distribute simd
12546   for (int i = 0; i < 10; ++i) {
12547 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12548     {
12549 #pragma omp single
12550       {
12551 	bar();
12552       }
12553     }
12554   }
12555 #pragma omp target
12556 #pragma omp teams
12557 #pragma omp distribute simd
12558   for (int i = 0; i < 10; ++i) {
12559 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12560     for (int i = 0; i < 10; ++i)
12561       ;
12562   }
12563 #pragma omp target
12564 #pragma omp teams
12565 #pragma omp distribute simd
12566   for (int i = 0; i < 10; ++i) {
12567 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12568     for (int i = 0; i < 10; ++i)
12569       ;
12570   }
12571 #pragma omp target
12572 #pragma omp teams
12573 #pragma omp distribute simd
12574   for (int i = 0; i < 10; ++i) {
12575 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12576     {
12577       bar();
12578     }
12579   }
12580 #pragma omp target
12581 #pragma omp teams
12582 #pragma omp distribute simd
12583   for (int i = 0; i < 10; ++i) {
12584 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12585     {
12586       bar();
12587     }
12588   }
12589 #pragma omp target
12590 #pragma omp teams
12591 #pragma omp distribute simd
12592   for (int i = 0; i < 10; ++i) {
12593 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12594     bar();
12595   }
12596 #pragma omp target
12597 #pragma omp teams
12598 #pragma omp distribute simd
12599   for (int i = 0; i < 10; ++i) {
12600 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12601     bar();
12602   }
12603 #pragma omp target
12604 #pragma omp teams
12605 #pragma omp distribute simd
12606   for (int i = 0; i < 10; ++i) {
12607 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12608     bar();
12609   }
12610 #pragma omp target
12611 #pragma omp teams
12612 #pragma omp distribute simd
12613   for (int i = 0; i < 10; ++i) {
12614 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12615     bar();
12616   }
12617 #pragma omp target
12618 #pragma omp teams
12619 #pragma omp distribute simd
12620   for (int i = 0; i < 10; ++i) {
12621 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12622     bar();
12623   }
12624 #pragma omp target
12625 #pragma omp teams
12626 #pragma omp distribute simd
12627   for (int i = 0; i < 10; ++i) {
12628 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12629     ++a;
12630   }
12631 #pragma omp target
12632 #pragma omp teams
12633 #pragma omp distribute simd
12634   for (int i = 0; i < 10; ++i) {
12635 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12636     ++a;
12637   }
12638 #pragma omp target
12639 #pragma omp teams
12640 #pragma omp distribute simd
12641   for (int i = 0; i < 10; ++i) {
12642 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12643     ++a;
12644   }
12645 #pragma omp target
12646 #pragma omp teams
12647 #pragma omp distribute simd
12648   for (int i = 0; i < 10; ++i) {
12649 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12650     ++a;
12651   }
12652 #pragma omp target
12653 #pragma omp teams
12654 #pragma omp distribute simd
12655   for (int i = 0; i < 10; ++i) {
12656 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12657     ++a;
12658   }
12659 #pragma omp target
12660 #pragma omp teams
12661 #pragma omp distribute simd
12662   for (int i = 0; i < 10; ++i) {
12663 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12664     ++a;
12665   }
12666 #pragma omp target
12667 #pragma omp teams
12668 #pragma omp distribute simd
12669   for (int i = 0; i < 10; ++i) {
12670 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12671     ++a;
12672   }
12673 #pragma omp target
12674 #pragma omp teams
12675 #pragma omp distribute simd
12676   for (int i = 0; i < 10; ++i) {
12677 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12678     for (int i = 0; i < 10; ++i)
12679       ;
12680   }
12681 #pragma omp target
12682 #pragma omp teams
12683 #pragma omp distribute simd
12684   for (int i = 0; i < 10; ++i) {
12685 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12686     for (int i = 0; i < 10; ++i)
12687       ;
12688   }
12689 #pragma omp target
12690 #pragma omp teams
12691 #pragma omp distribute simd
12692   for (int i = 0; i < 10; ++i) {
12693 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12694     for (int i = 0; i < 10; ++i)
12695       ;
12696   }
12697 #pragma omp target
12698 #pragma omp teams
12699 #pragma omp distribute simd
12700   for (int i = 0; i < 10; ++i) {
12701 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12702     for (int i = 0; i < 10; ++i)
12703       ;
12704   }
12705 #pragma omp target
12706 #pragma omp teams
12707 #pragma omp distribute simd
12708   for (int i = 0; i < 10; ++i) {
12709 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12710     for (int i = 0; i < 10; ++i)
12711       ;
12712   }
12713 #pragma omp target
12714 #pragma omp teams
12715 #pragma omp distribute simd
12716   for (int i = 0; i < 10; ++i) {
12717 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12718     for (int i = 0; i < 10; ++i)
12719       ;
12720   }
12721 #pragma omp target
12722 #pragma omp teams
12723 #pragma omp distribute simd
12724   for (int i = 0; i < 10; ++i) {
12725 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12726     a++;
12727   }
12728 
12729 // TARGET SIMD DIRECTIVE
12730 #pragma omp target simd
12731   for (int i = 0; i < 10; ++i) {
12732 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12733     for (int i = 0; i < 10; ++i)
12734       ;
12735   }
12736 #pragma omp target simd
12737   for (int i = 0; i < 10; ++i) {
12738 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12739     for (int i = 0; i < 10; ++i)
12740       ;
12741   }
12742 #pragma omp target simd
12743   for (int i = 0; i < 10; ++i) {
12744 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12745     for (int i = 0; i < 10; ++i)
12746       ;
12747   }
12748 #pragma omp target simd
12749   for (int i = 0; i < 10; ++i) {
12750 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12751     for (int i = 0; i < 10; ++i)
12752       ;
12753   }
12754 #pragma omp target simd
12755   for (int i = 0; i < 10; ++i) {
12756 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12757     for (int i = 0; i < 10; ++i)
12758       ;
12759   }
12760 #pragma omp target simd
12761   for (int i = 0; i < 10; ++i) {
12762 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12763     for (int i = 0; i < 10; ++i)
12764       ;
12765   }
12766 #pragma omp target simd
12767   for (int i = 0; i < 10; ++i) {
12768 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12769     {
12770       bar();
12771     }
12772   }
12773 #pragma omp target simd
12774   for (int i = 0; i < 10; ++i) {
12775 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12776     {
12777       bar();
12778     }
12779   }
12780 #pragma omp target simd
12781   for (int i = 0; i < 10; ++i) {
12782 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12783     {
12784       bar();
12785     }
12786   }
12787 #pragma omp target simd
12788   for (int i = 0; i < 10; ++i) {
12789 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12790     {
12791       bar();
12792     }
12793   }
12794 #pragma omp target simd
12795   for (int i = 0; i < 10; ++i) {
12796 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12797     {
12798       bar();
12799     }
12800   }
12801 #pragma omp target simd
12802   for (int i = 0; i < 10; ++i) {
12803 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12804     {
12805 #pragma omp single
12806       {
12807 	bar();
12808       }
12809     }
12810   }
12811 #pragma omp target simd
12812   for (int i = 0; i < 10; ++i) {
12813 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12814     for (int i = 0; i < 10; ++i)
12815       ;
12816   }
12817 #pragma omp target simd
12818   for (int i = 0; i < 10; ++i) {
12819 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12820     for (int i = 0; i < 10; ++i)
12821       ;
12822   }
12823 #pragma omp target simd
12824   for (int i = 0; i < 10; ++i) {
12825 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12826     {
12827       bar();
12828     }
12829   }
12830 #pragma omp target simd
12831   for (int i = 0; i < 10; ++i) {
12832 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12833     {
12834       bar();
12835     }
12836   }
12837 #pragma omp target simd
12838   for (int i = 0; i < 10; ++i) {
12839 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12840     bar();
12841   }
12842 #pragma omp target simd
12843   for (int i = 0; i < 10; ++i) {
12844 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12845     bar();
12846   }
12847 #pragma omp target simd
12848   for (int i = 0; i < 10; ++i) {
12849 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12850     bar();
12851   }
12852 #pragma omp target simd
12853   for (int i = 0; i < 10; ++i) {
12854 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12855     bar();
12856   }
12857 #pragma omp target simd
12858   for (int i = 0; i < 10; ++i) {
12859 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12860     bar();
12861   }
12862 #pragma omp target simd
12863   for (int i = 0; i < 10; ++i) {
12864 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12865     ++a;
12866   }
12867 #pragma omp target simd
12868   for (int i = 0; i < 10; ++i) {
12869 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12870     ++a;
12871   }
12872 #pragma omp target simd
12873   for (int i = 0; i < 10; ++i) {
12874 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12875     ++a;
12876   }
12877 #pragma omp target simd
12878   for (int i = 0; i < 10; ++i) {
12879 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12880     ++a;
12881   }
12882 #pragma omp target simd
12883   for (int i = 0; i < 10; ++i) {
12884 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12885     ++a;
12886   }
12887 #pragma omp target simd
12888   for (int i = 0; i < 10; ++i) {
12889 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12890     ++a;
12891   }
12892 #pragma omp target simd
12893   for (int i = 0; i < 10; ++i) {
12894 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12895     ++a;
12896   }
12897 #pragma omp target simd
12898   for (int i = 0; i < 10; ++i) {
12899 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12900     for (int i = 0; i < 10; ++i)
12901       ;
12902   }
12903 #pragma omp target simd
12904   for (int i = 0; i < 10; ++i) {
12905 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12906     for (int i = 0; i < 10; ++i)
12907       ;
12908   }
12909 #pragma omp target simd
12910   for (int i = 0; i < 10; ++i) {
12911 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12912     for (int i = 0; i < 10; ++i)
12913       ;
12914   }
12915 #pragma omp target simd
12916   for (int i = 0; i < 10; ++i) {
12917 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12918     for (int i = 0; i < 10; ++i)
12919       ;
12920   }
12921 #pragma omp target simd
12922   for (int i = 0; i < 10; ++i) {
12923 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12924     for (int i = 0; i < 10; ++i)
12925       ;
12926   }
12927 #pragma omp target simd
12928   for (int i = 0; i < 10; ++i) {
12929 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12930     for (int i = 0; i < 10; ++i)
12931       ;
12932   }
12933 #pragma omp target simd
12934   for (int i = 0; i < 10; ++i) {
12935 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12936     a++;
12937   }
12938 
12939 // TEAMS DISTRIBUTE DIRECTIVE
12940 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
12941   for (int i = 0; i < 10; ++i)
12942     ;
12943 #pragma omp target
12944 #pragma omp teams distribute
12945   for (int i = 0; i < 10; ++i) {
12946 #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?}}
12947     for (int i = 0; i < 10; ++i)
12948       ;
12949   }
12950 #pragma omp target
12951 #pragma omp teams distribute
12952   for (int i = 0; i < 10; ++i) {
12953 #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?}}
12954     for (int i = 0; i < 10; ++i)
12955       ;
12956   }
12957 #pragma omp target
12958 #pragma omp teams distribute
12959   for (int i = 0; i < 10; ++i) {
12960 #pragma omp for // OK
12961     for (int i = 0; i < 10; ++i)
12962       ;
12963   }
12964 #pragma omp target
12965 #pragma omp teams distribute
12966   for (int i = 0; i < 10; ++i) {
12967 #pragma omp simd // OK
12968     for (int i = 0; i < 10; ++i)
12969       ;
12970   }
12971 #pragma omp target
12972 #pragma omp teams distribute
12973   for (int i = 0; i < 10; ++i) {
12974 #pragma omp for simd // OK
12975     for (int i = 0; i < 10; ++i)
12976       ;
12977   }
12978 #pragma omp target
12979 #pragma omp teams distribute
12980   for (int i = 0; i < 10; ++i) {
12981 #pragma omp parallel // OK
12982     for (int i = 0; i < 10; ++i)
12983       ;
12984   }
12985 #pragma omp target
12986 #pragma omp teams distribute
12987   for (int i = 0; i < 10; ++i) {
12988 #pragma omp sections // OK
12989     {
12990       bar();
12991     }
12992   }
12993 #pragma omp target
12994 #pragma omp teams distribute
12995   for (int i = 0; i < 10; ++i) {
12996 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
12997     {
12998       bar();
12999     }
13000   }
13001 #pragma omp target
13002 #pragma omp teams distribute
13003   for (int i = 0; i < 10; ++i) {
13004 #pragma omp single // OK
13005     {
13006       bar();
13007     }
13008   }
13009 #pragma omp target
13010 #pragma omp teams distribute
13011   for (int i = 0; i < 10; ++i) {
13012 #pragma omp master // OK
13013     {
13014       bar();
13015     }
13016   }
13017 #pragma omp target
13018 #pragma omp teams distribute
13019   for (int i = 0; i < 10; ++i) {
13020 #pragma omp critical // OK
13021     {
13022       bar();
13023     }
13024   }
13025 #pragma omp target
13026 #pragma omp teams distribute
13027   for (int i = 0; i < 10; ++i) {
13028 #pragma omp parallel // OK
13029     {
13030 #pragma omp single
13031       {
13032 	bar();
13033       }
13034     }
13035   }
13036 #pragma omp target
13037 #pragma omp teams distribute
13038   for (int i = 0; i < 10; ++i) {
13039 #pragma omp parallel for // OK
13040     for (int i = 0; i < 10; ++i)
13041       ;
13042   }
13043 #pragma omp target
13044 #pragma omp teams distribute
13045   for (int i = 0; i < 10; ++i) {
13046 #pragma omp parallel for simd // OK
13047     for (int i = 0; i < 10; ++i)
13048       ;
13049   }
13050 #pragma omp target
13051 #pragma omp teams distribute
13052   for (int i = 0; i < 10; ++i) {
13053 #pragma omp parallel sections // OK
13054     {
13055       bar();
13056     }
13057   }
13058 #pragma omp target
13059 #pragma omp teams distribute
13060   for (int i = 0; i < 10; ++i) {
13061 #pragma omp task // OK
13062     {
13063       bar();
13064     }
13065   }
13066 #pragma omp target
13067 #pragma omp teams distribute
13068   for (int i = 0; i < 10; ++i) {
13069 #pragma omp taskyield // OK
13070     bar();
13071   }
13072 #pragma omp target
13073 #pragma omp teams distribute
13074   for (int i = 0; i < 10; ++i) {
13075 #pragma omp barrier // OK
13076     bar();
13077   }
13078 #pragma omp target
13079 #pragma omp teams distribute
13080   for (int i = 0; i < 10; ++i) {
13081 #pragma omp taskwait // OK
13082     bar();
13083   }
13084 #pragma omp target
13085 #pragma omp teams distribute
13086   for (int i = 0; i < 10; ++i) {
13087 #pragma omp flush // OK
13088     bar();
13089   }
13090 #pragma omp target
13091 #pragma omp teams distribute
13092   for (int i = 0; i < 10; ++i) {
13093 #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?}}
13094     bar();
13095   }
13096 #pragma omp target
13097 #pragma omp teams distribute
13098   for (int i = 0; i < 10; ++i) {
13099 #pragma omp atomic // OK
13100     ++a;
13101   }
13102 #pragma omp target
13103 #pragma omp teams distribute
13104   for (int i = 0; i < 10; ++i) {
13105 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13106     ++a;
13107   }
13108 #pragma omp target
13109 #pragma omp teams distribute
13110   for (int i = 0; i < 10; ++i) {
13111 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
13112     ++a;
13113   }
13114 #pragma omp target
13115 #pragma omp teams distribute
13116   for (int i = 0; i < 10; ++i) {
13117 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13118     for (int i = 0; i < 10; ++i)
13119       ;
13120   }
13121 #pragma omp target
13122 #pragma omp teams distribute
13123   for (int i = 0; i < 10; ++i) {
13124 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13125     ++a;
13126   }
13127 #pragma omp target
13128 #pragma omp teams distribute
13129   for (int i = 0; i < 10; ++i) {
13130 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13131     ++a;
13132   }
13133 #pragma omp target
13134 #pragma omp teams distribute
13135   for (int i = 0; i < 10; ++i) {
13136 #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?}}
13137     ++a;
13138   }
13139 #pragma omp target
13140 #pragma omp teams distribute
13141   for (int i = 0; i < 10; ++i) {
13142 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
13143     ++a;
13144   }
13145 #pragma omp target
13146 #pragma omp teams distribute
13147   for (int i = 0; i < 10; ++i) {
13148 #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?}}
13149     for (int i = 0; i < 10; ++i)
13150       ++a;
13151   }
13152 #pragma omp target
13153 #pragma omp teams distribute
13154   for (int i = 0; i < 10; ++i) {
13155 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13156     for (int i = 0; i < 10; ++i)
13157       ++a;
13158   }
13159 #pragma omp target
13160 #pragma omp teams distribute
13161   for (int i = 0; i < 10; ++i) {
13162 #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?}}
13163     for (int i = 0; i < 10; ++i)
13164       ++a;
13165   }
13166 #pragma omp target
13167 #pragma omp teams distribute
13168   for (int i = 0; i < 10; ++i) {
13169 #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?}}
13170     for (int i = 0; i < 10; ++i)
13171       ++a;
13172   }
13173 #pragma omp target
13174 #pragma omp teams distribute
13175   for (int i = 0; i < 10; ++i) {
13176 #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?}}
13177     for (int i = 0; i < 10; ++i)
13178       ++a;
13179   }
13180 #pragma omp target
13181 #pragma omp teams distribute
13182   for (int i = 0; i < 10; ++i) {
13183 #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?}}
13184     for (int i = 0; i < 10; ++i)
13185       ++a;
13186   }
13187 #pragma omp target
13188 #pragma omp teams distribute
13189   for (int i = 0; i < 10; ++i) {
13190 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13191     ++a;
13192   }
13193 
13194 // TEAMS DISTRIBUTE SIMD DIRECTIVE
13195 #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?}}
13196   for (int i = 0; i < 10; ++i)
13197     ;
13198 #pragma omp target
13199 #pragma omp teams distribute simd
13200   for (int i = 0; i < 10; ++i) {
13201 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13202     for (int i = 0; i < 10; ++i)
13203       ;
13204   }
13205 #pragma omp target
13206 #pragma omp teams distribute simd
13207   for (int i = 0; i < 10; ++i) {
13208 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13209     for (int i = 0; i < 10; ++i)
13210       ;
13211   }
13212 #pragma omp target
13213 #pragma omp teams distribute simd
13214   for (int i = 0; i < 10; ++i) {
13215 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13216     for (int i = 0; i < 10; ++i)
13217       ;
13218   }
13219 #pragma omp target
13220 #pragma omp teams distribute simd
13221   for (int i = 0; i < 10; ++i) {
13222 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
13223     for (int i = 0; i < 10; ++i)
13224       ;
13225   }
13226 #pragma omp target
13227 #pragma omp teams distribute simd
13228   for (int i = 0; i < 10; ++i) {
13229 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13230     for (int i = 0; i < 10; ++i)
13231       ;
13232   }
13233 #pragma omp target
13234 #pragma omp teams distribute simd
13235   for (int i = 0; i < 10; ++i) {
13236 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13237     for (int i = 0; i < 10; ++i)
13238       ;
13239   }
13240 #pragma omp target
13241 #pragma omp teams distribute simd
13242   for (int i = 0; i < 10; ++i) {
13243 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13244     {
13245       bar();
13246     }
13247   }
13248 #pragma omp target
13249 #pragma omp teams distribute simd
13250   for (int i = 0; i < 10; ++i) {
13251 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13252     {
13253       bar();
13254     }
13255   }
13256 #pragma omp target
13257 #pragma omp teams distribute simd
13258   for (int i = 0; i < 10; ++i) {
13259 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13260     {
13261       bar();
13262     }
13263   }
13264 #pragma omp target
13265 #pragma omp teams distribute simd
13266   for (int i = 0; i < 10; ++i) {
13267 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13268     {
13269       bar();
13270     }
13271   }
13272 #pragma omp target
13273 #pragma omp teams distribute simd
13274   for (int i = 0; i < 10; ++i) {
13275 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13276     {
13277       bar();
13278     }
13279   }
13280 #pragma omp target
13281 #pragma omp teams distribute simd
13282   for (int i = 0; i < 10; ++i) {
13283 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13284     {
13285 #pragma omp single
13286       {
13287 	bar();
13288       }
13289     }
13290   }
13291 #pragma omp target
13292 #pragma omp teams distribute simd
13293   for (int i = 0; i < 10; ++i) {
13294 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13295     for (int i = 0; i < 10; ++i)
13296       ;
13297   }
13298 #pragma omp target
13299 #pragma omp teams distribute simd
13300   for (int i = 0; i < 10; ++i) {
13301 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13302     for (int i = 0; i < 10; ++i)
13303       ;
13304   }
13305 #pragma omp target
13306 #pragma omp teams distribute simd
13307   for (int i = 0; i < 10; ++i) {
13308 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13309     {
13310       bar();
13311     }
13312   }
13313 #pragma omp target
13314 #pragma omp teams distribute simd
13315   for (int i = 0; i < 10; ++i) {
13316 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13317     {
13318       bar();
13319     }
13320   }
13321 #pragma omp target
13322 #pragma omp teams distribute simd
13323   for (int i = 0; i < 10; ++i) {
13324 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13325     bar();
13326   }
13327 #pragma omp target
13328 #pragma omp teams distribute simd
13329   for (int i = 0; i < 10; ++i) {
13330 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13331     bar();
13332   }
13333 #pragma omp target
13334 #pragma omp teams distribute simd
13335   for (int i = 0; i < 10; ++i) {
13336 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13337     bar();
13338   }
13339 #pragma omp target
13340 #pragma omp teams distribute simd
13341   for (int i = 0; i < 10; ++i) {
13342 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13343     bar();
13344   }
13345 #pragma omp target
13346 #pragma omp teams distribute simd
13347   for (int i = 0; i < 10; ++i) {
13348 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13349     bar();
13350   }
13351 #pragma omp target
13352 #pragma omp teams distribute simd
13353   for (int i = 0; i < 10; ++i) {
13354 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13355     ++a;
13356   }
13357 #pragma omp target
13358 #pragma omp teams distribute simd
13359   for (int i = 0; i < 10; ++i) {
13360 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13361     ++a;
13362   }
13363 #pragma omp target
13364 #pragma omp teams distribute simd
13365   for (int i = 0; i < 10; ++i) {
13366 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13367     ++a;
13368   }
13369 #pragma omp target
13370 #pragma omp teams distribute simd
13371   for (int i = 0; i < 10; ++i) {
13372 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13373     for (int i = 0; i < 10; ++i)
13374       ;
13375   }
13376 #pragma omp target
13377 #pragma omp teams distribute simd
13378   for (int i = 0; i < 10; ++i) {
13379 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13380     ++a;
13381   }
13382 #pragma omp target
13383 #pragma omp teams distribute simd
13384   for (int i = 0; i < 10; ++i) {
13385 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13386     ++a;
13387   }
13388 #pragma omp target
13389 #pragma omp teams distribute simd
13390   for (int i = 0; i < 10; ++i) {
13391 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13392     ++a;
13393   }
13394 #pragma omp target
13395 #pragma omp teams distribute simd
13396   for (int i = 0; i < 10; ++i) {
13397 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13398     ++a;
13399   }
13400 #pragma omp target
13401 #pragma omp teams distribute simd
13402   for (int i = 0; i < 10; ++i) {
13403 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13404     for (int i = 0; i < 10; ++i)
13405       ++a;
13406   }
13407 #pragma omp target
13408 #pragma omp teams distribute simd
13409   for (int i = 0; i < 10; ++i) {
13410 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13411     for (int i = 0; i < 10; ++i)
13412       ++a;
13413   }
13414 #pragma omp target
13415 #pragma omp teams distribute simd
13416   for (int i = 0; i < 10; ++i) {
13417 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13418     for (int i = 0; i < 10; ++i)
13419       ++a;
13420   }
13421 #pragma omp target
13422 #pragma omp teams distribute simd
13423   for (int i = 0; i < 10; ++i) {
13424 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13425     for (int i = 0; i < 10; ++i)
13426       ++a;
13427   }
13428 #pragma omp target
13429 #pragma omp teams distribute simd
13430   for (int i = 0; i < 10; ++i) {
13431 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13432     for (int i = 0; i < 10; ++i)
13433       ++a;
13434   }
13435 #pragma omp target
13436 #pragma omp teams distribute simd
13437   for (int i = 0; i < 10; ++i) {
13438 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13439     for (int i = 0; i < 10; ++i)
13440       ++a;
13441   }
13442 #pragma omp target
13443 #pragma omp teams distribute simd
13444   for (int i = 0; i < 10; ++i) {
13445 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13446     ++a;
13447   }
13448 
13449 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
13450 #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?}}
13451   for (int i = 0; i < 10; ++i)
13452     ;
13453 #pragma omp target
13454 #pragma omp teams distribute parallel for simd
13455   for (int i = 0; i < 10; ++i) {
13456 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13457     for (int i = 0; i < 10; ++i)
13458       ;
13459   }
13460 #pragma omp target
13461 #pragma omp teams distribute parallel for simd
13462   for (int i = 0; i < 10; ++i) {
13463 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13464     for (int i = 0; i < 10; ++i)
13465       ;
13466   }
13467 #pragma omp target
13468 #pragma omp teams distribute parallel for simd
13469   for (int i = 0; i < 10; ++i) {
13470 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13471     for (int i = 0; i < 10; ++i)
13472       ;
13473   }
13474 #pragma omp target
13475 #pragma omp teams distribute parallel for simd
13476   for (int i = 0; i < 10; ++i) {
13477 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
13478     for (int i = 0; i < 10; ++i)
13479       ;
13480   }
13481 #pragma omp target
13482 #pragma omp teams distribute parallel for simd
13483   for (int i = 0; i < 10; ++i) {
13484 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13485     for (int i = 0; i < 10; ++i)
13486       ;
13487   }
13488 #pragma omp target
13489 #pragma omp teams distribute parallel for simd
13490   for (int i = 0; i < 10; ++i) {
13491 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13492     for (int i = 0; i < 10; ++i)
13493       ;
13494   }
13495 #pragma omp target
13496 #pragma omp teams distribute parallel for simd
13497   for (int i = 0; i < 10; ++i) {
13498 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13499     {
13500       bar();
13501     }
13502   }
13503 #pragma omp target
13504 #pragma omp teams distribute parallel for simd
13505   for (int i = 0; i < 10; ++i) {
13506 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13507     {
13508       bar();
13509     }
13510   }
13511 #pragma omp target
13512 #pragma omp teams distribute parallel for simd
13513   for (int i = 0; i < 10; ++i) {
13514 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13515     {
13516       bar();
13517     }
13518   }
13519 #pragma omp target
13520 #pragma omp teams distribute parallel for simd
13521   for (int i = 0; i < 10; ++i) {
13522 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13523     {
13524       bar();
13525     }
13526   }
13527 #pragma omp target
13528 #pragma omp teams distribute parallel for simd
13529   for (int i = 0; i < 10; ++i) {
13530 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13531     {
13532       bar();
13533     }
13534   }
13535 #pragma omp target
13536 #pragma omp teams distribute parallel for simd
13537   for (int i = 0; i < 10; ++i) {
13538 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13539     {
13540 #pragma omp single
13541       {
13542 	bar();
13543       }
13544     }
13545   }
13546 #pragma omp target
13547 #pragma omp teams distribute parallel for simd
13548   for (int i = 0; i < 10; ++i) {
13549 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13550     for (int i = 0; i < 10; ++i)
13551       ;
13552   }
13553 #pragma omp target
13554 #pragma omp teams distribute parallel for simd
13555   for (int i = 0; i < 10; ++i) {
13556 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13557     for (int i = 0; i < 10; ++i)
13558       ;
13559   }
13560 #pragma omp target
13561 #pragma omp teams distribute parallel for simd
13562   for (int i = 0; i < 10; ++i) {
13563 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13564     {
13565       bar();
13566     }
13567   }
13568 #pragma omp target
13569 #pragma omp teams distribute parallel for simd
13570   for (int i = 0; i < 10; ++i) {
13571 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13572     {
13573       bar();
13574     }
13575   }
13576 #pragma omp target
13577 #pragma omp teams distribute parallel for simd
13578   for (int i = 0; i < 10; ++i) {
13579 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13580     bar();
13581   }
13582 #pragma omp target
13583 #pragma omp teams distribute parallel for simd
13584   for (int i = 0; i < 10; ++i) {
13585 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13586     bar();
13587   }
13588 #pragma omp target
13589 #pragma omp teams distribute parallel for simd
13590   for (int i = 0; i < 10; ++i) {
13591 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13592     bar();
13593   }
13594 #pragma omp target
13595 #pragma omp teams distribute parallel for simd
13596   for (int i = 0; i < 10; ++i) {
13597 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13598     bar();
13599   }
13600 #pragma omp target
13601 #pragma omp teams distribute parallel for simd
13602   for (int i = 0; i < 10; ++i) {
13603 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13604     bar();
13605   }
13606 #pragma omp target
13607 #pragma omp teams distribute parallel for simd
13608   for (int i = 0; i < 10; ++i) {
13609 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13610     ++a;
13611   }
13612 #pragma omp target
13613 #pragma omp teams distribute parallel for simd
13614   for (int i = 0; i < 10; ++i) {
13615 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13616     ++a;
13617   }
13618 #pragma omp target
13619 #pragma omp teams distribute parallel for simd
13620   for (int i = 0; i < 10; ++i) {
13621 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13622     ++a;
13623   }
13624 #pragma omp target
13625 #pragma omp teams distribute parallel for simd
13626   for (int i = 0; i < 10; ++i) {
13627 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13628     for (int i = 0; i < 10; ++i)
13629       ;
13630   }
13631 #pragma omp target
13632 #pragma omp teams distribute parallel for simd
13633   for (int i = 0; i < 10; ++i) {
13634 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13635     ++a;
13636   }
13637 #pragma omp target
13638 #pragma omp teams distribute parallel for simd
13639   for (int i = 0; i < 10; ++i) {
13640 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13641     ++a;
13642   }
13643 #pragma omp target
13644 #pragma omp teams distribute parallel for simd
13645   for (int i = 0; i < 10; ++i) {
13646 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13647     ++a;
13648   }
13649 #pragma omp target
13650 #pragma omp teams distribute parallel for simd
13651   for (int i = 0; i < 10; ++i) {
13652 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13653     ++a;
13654   }
13655 #pragma omp target
13656 #pragma omp teams distribute parallel for simd
13657   for (int i = 0; i < 10; ++i) {
13658 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13659     for (int i = 0; i < 10; ++i)
13660       ++a;
13661   }
13662 #pragma omp target
13663 #pragma omp teams distribute parallel for simd
13664   for (int i = 0; i < 10; ++i) {
13665 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13666     for (int i = 0; i < 10; ++i)
13667       ++a;
13668   }
13669 #pragma omp target
13670 #pragma omp teams distribute parallel for simd
13671   for (int i = 0; i < 10; ++i) {
13672 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13673     for (int i = 0; i < 10; ++i)
13674       ++a;
13675   }
13676 #pragma omp target
13677 #pragma omp teams distribute parallel for simd
13678   for (int i = 0; i < 10; ++i) {
13679 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13680     for (int i = 0; i < 10; ++i)
13681       ++a;
13682   }
13683 #pragma omp target
13684 #pragma omp teams distribute parallel for simd
13685   for (int i = 0; i < 10; ++i) {
13686 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13687     for (int i = 0; i < 10; ++i)
13688       ++a;
13689   }
13690 #pragma omp target
13691 #pragma omp teams distribute parallel for simd
13692   for (int i = 0; i < 10; ++i) {
13693 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13694     for (int i = 0; i < 10; ++i)
13695       ++a;
13696   }
13697 #pragma omp target
13698 #pragma omp teams distribute parallel for simd
13699   for (int i = 0; i < 10; ++i) {
13700 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13701     ++a;
13702   }
13703 
13704 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
13705 #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?}}
13706   for (int i = 0; i < 10; ++i)
13707     ;
13708 #pragma omp target
13709 #pragma omp teams distribute parallel for
13710   for (int i = 0; i < 10; ++i) {
13711 #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?}}
13712     for (int i = 0; i < 10; ++i)
13713       ;
13714   }
13715 #pragma omp target
13716 #pragma omp teams distribute parallel for
13717   for (int i = 0; i < 10; ++i) {
13718 #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?}}
13719     for (int i = 0; i < 10; ++i)
13720       ;
13721   }
13722 #pragma omp target
13723 #pragma omp teams distribute parallel for
13724   for (int i = 0; i < 10; ++i) {
13725 #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?}}
13726     for (int i = 0; i < 10; ++i)
13727       ;
13728   }
13729 #pragma omp target
13730 #pragma omp teams distribute parallel for
13731   for (int i = 0; i < 10; ++i) {
13732 #pragma omp simd // OK
13733     for (int i = 0; i < 10; ++i)
13734       ;
13735   }
13736 #pragma omp target
13737 #pragma omp teams distribute parallel for
13738   for (int i = 0; i < 10; ++i) {
13739 #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?}}
13740     for (int i = 0; i < 10; ++i)
13741       ;
13742   }
13743 #pragma omp target
13744 #pragma omp teams distribute parallel for
13745   for (int i = 0; i < 10; ++i) {
13746 #pragma omp parallel // OK
13747     for (int i = 0; i < 10; ++i)
13748       ;
13749   }
13750 #pragma omp target
13751 #pragma omp teams distribute parallel for
13752   for (int i = 0; i < 10; ++i) {
13753 #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?}}
13754     {
13755       bar();
13756     }
13757   }
13758 #pragma omp target
13759 #pragma omp teams distribute parallel for
13760   for (int i = 0; i < 10; ++i) {
13761 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
13762     {
13763       bar();
13764     }
13765   }
13766 #pragma omp target
13767 #pragma omp teams distribute parallel for
13768   for (int i = 0; i < 10; ++i) {
13769 #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?}}
13770     {
13771       bar();
13772     }
13773   }
13774 #pragma omp target
13775 #pragma omp teams distribute parallel for
13776   for (int i = 0; i < 10; ++i) {
13777 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
13778     {
13779       bar();
13780     }
13781   }
13782 #pragma omp target
13783 #pragma omp teams distribute parallel for
13784   for (int i = 0; i < 10; ++i) {
13785 #pragma omp critical // OK
13786     {
13787       bar();
13788     }
13789   }
13790 #pragma omp target
13791 #pragma omp teams distribute parallel for
13792   for (int i = 0; i < 10; ++i) {
13793 #pragma omp parallel // OK
13794     {
13795 #pragma omp single
13796       {
13797 	bar();
13798       }
13799     }
13800   }
13801 #pragma omp target
13802 #pragma omp teams distribute parallel for
13803   for (int i = 0; i < 10; ++i) {
13804 #pragma omp parallel for // OK
13805     for (int i = 0; i < 10; ++i)
13806       ;
13807   }
13808 #pragma omp target
13809 #pragma omp teams distribute parallel for
13810   for (int i = 0; i < 10; ++i) {
13811 #pragma omp parallel for simd // OK
13812     for (int i = 0; i < 10; ++i)
13813       ;
13814   }
13815 #pragma omp target
13816 #pragma omp teams distribute parallel for
13817   for (int i = 0; i < 10; ++i) {
13818 #pragma omp parallel sections // OK
13819     {
13820       bar();
13821     }
13822   }
13823 #pragma omp target
13824 #pragma omp teams distribute parallel for
13825   for (int i = 0; i < 10; ++i) {
13826 #pragma omp task // OK
13827     {
13828       bar();
13829     }
13830   }
13831 #pragma omp target
13832 #pragma omp teams distribute parallel for
13833   for (int i = 0; i < 10; ++i) {
13834 #pragma omp taskyield // OK
13835     bar();
13836   }
13837 #pragma omp target
13838 #pragma omp teams distribute parallel for
13839   for (int i = 0; i < 10; ++i) {
13840 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
13841     bar();
13842   }
13843 #pragma omp target
13844 #pragma omp teams distribute parallel for
13845   for (int i = 0; i < 10; ++i) {
13846 #pragma omp taskwait // OK
13847     bar();
13848   }
13849 #pragma omp target
13850 #pragma omp teams distribute parallel for
13851   for (int i = 0; i < 10; ++i) {
13852 #pragma omp flush // OK
13853     bar();
13854   }
13855 #pragma omp target
13856 #pragma omp teams distribute parallel for
13857   for (int i = 0; i < 10; ++i) {
13858 #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?}}
13859     bar();
13860   }
13861 #pragma omp target
13862 #pragma omp teams distribute parallel for
13863   for (int i = 0; i < 10; ++i) {
13864 #pragma omp atomic // OK
13865     ++a;
13866   }
13867 #pragma omp target
13868 #pragma omp teams distribute parallel for
13869   for (int i = 0; i < 10; ++i) {
13870 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13871     ++a;
13872   }
13873 #pragma omp target
13874 #pragma omp teams distribute parallel for
13875   for (int i = 0; i < 10; ++i) {
13876 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
13877     ++a;
13878   }
13879 #pragma omp target
13880 #pragma omp teams distribute parallel for
13881   for (int i = 0; i < 10; ++i) {
13882 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13883     for (int i = 0; i < 10; ++i)
13884       ;
13885   }
13886 #pragma omp target
13887 #pragma omp teams distribute parallel for
13888   for (int i = 0; i < 10; ++i) {
13889 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13890     ++a;
13891   }
13892 #pragma omp target
13893 #pragma omp teams distribute parallel for
13894   for (int i = 0; i < 10; ++i) {
13895 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13896     ++a;
13897   }
13898 #pragma omp target
13899 #pragma omp teams distribute parallel for
13900   for (int i = 0; i < 10; ++i) {
13901 #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?}}
13902     ++a;
13903   }
13904 #pragma omp target
13905 #pragma omp teams distribute parallel for
13906   for (int i = 0; i < 10; ++i) {
13907 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
13908     ++a;
13909   }
13910 #pragma omp target
13911 #pragma omp teams distribute parallel for
13912   for (int i = 0; i < 10; ++i) {
13913 #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?}}
13914     for (int i = 0; i < 10; ++i)
13915       ++a;
13916   }
13917 #pragma omp target
13918 #pragma omp teams distribute parallel for
13919   for (int i = 0; i < 10; ++i) {
13920 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13921     for (int i = 0; i < 10; ++i)
13922       ++a;
13923   }
13924 #pragma omp target
13925 #pragma omp teams distribute parallel for
13926   for (int i = 0; i < 10; ++i) {
13927 #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?}}
13928     for (int i = 0; i < 10; ++i)
13929       ++a;
13930   }
13931 #pragma omp target
13932 #pragma omp teams distribute parallel for
13933   for (int i = 0; i < 10; ++i) {
13934 #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?}}
13935     for (int i = 0; i < 10; ++i)
13936       ++a;
13937   }
13938 #pragma omp target
13939 #pragma omp teams distribute parallel for
13940   for (int i = 0; i < 10; ++i) {
13941 #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?}}
13942     for (int i = 0; i < 10; ++i)
13943       ++a;
13944   }
13945 #pragma omp target
13946 #pragma omp teams distribute parallel for
13947   for (int i = 0; i < 10; ++i) {
13948 #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?}}
13949     for (int i = 0; i < 10; ++i)
13950       ++a;
13951   }
13952 #pragma omp target
13953 #pragma omp teams distribute parallel for
13954   for (int i = 0; i < 10; ++i) {
13955 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13956     ++a;
13957   }
13958 
13959 // TARGET TEAMS DIRECTIVE
13960 #pragma omp target teams
13961 #pragma omp parallel
13962   bar();
13963 #pragma omp target teams
13964 #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?}}
13965   for (int i = 0; i < 10; ++i)
13966     ;
13967 #pragma omp target teams
13968 #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?}}
13969   for (int i = 0; i < 10; ++i)
13970     ;
13971 #pragma omp target teams
13972 #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?}}
13973   for (int i = 0; i < 10; ++i)
13974     ;
13975 #pragma omp target teams
13976 #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?}}
13977   {
13978     bar();
13979   }
13980 #pragma omp target teams
13981 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
13982   {
13983     bar();
13984   }
13985 #pragma omp target teams
13986 #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?}}
13987   bar();
13988 
13989 #pragma omp target teams
13990 #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?}}
13991   {
13992     bar();
13993   }
13994 #pragma omp target teams
13995 #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?}}
13996   {
13997     bar();
13998   }
13999 #pragma omp target teams
14000 #pragma omp parallel for
14001   for (int i = 0; i < 10; ++i)
14002     ;
14003 #pragma omp target teams
14004 #pragma omp parallel for simd
14005   for (int i = 0; i < 10; ++i)
14006     ;
14007 #pragma omp target teams
14008 #pragma omp parallel sections
14009   {
14010     bar();
14011   }
14012 #pragma omp target teams
14013 #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?}}
14014   {
14015     bar();
14016   }
14017 #pragma omp target teams
14018   {
14019 #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?}}
14020     bar();
14021   }
14022 #pragma omp target teams
14023   {
14024 #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?}}
14025     bar();
14026   }
14027 #pragma omp target teams
14028   {
14029 #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?}}
14030     bar();
14031   }
14032 #pragma omp target teams
14033   {
14034 #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?}}
14035     bar();
14036   }
14037 #pragma omp target teams
14038   {
14039 #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?}}
14040     bar();
14041   }
14042 #pragma omp target teams
14043   {
14044 #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?}}
14045     ++a;
14046   }
14047 #pragma omp target teams
14048   {
14049 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
14050     ++a;
14051   }
14052 #pragma omp target teams
14053   {
14054 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
14055     ++a;
14056   }
14057 #pragma omp target teams
14058 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
14059   for (int i = 0; i < 10; ++i)
14060     ;
14061 #pragma omp target teams
14062   {
14063 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
14064   }
14065 #pragma omp target teams
14066   {
14067 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
14068   }
14069 #pragma omp target teams
14070   {
14071 #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?}}
14072     ++a;
14073   }
14074 #pragma omp target teams
14075   {
14076 #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?}}
14077   for (int i = 0; i < 10; ++i)
14078     ++a;
14079   }
14080 #pragma omp target teams
14081 #pragma omp distribute
14082   for (int i = 0; i < 10; ++i)
14083     ;
14084 #pragma omp target teams
14085   {
14086 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
14087     ++a;
14088   }
14089 #pragma omp target teams
14090 #pragma omp distribute parallel for
14091   for (int i = 0; i < 10; ++i)
14092     ;
14093 #pragma omp target teams
14094   {
14095 #pragma omp distribute parallel for
14096   for (int i = 0; i < 10; ++i)
14097     ;
14098 #pragma omp distribute parallel for
14099   for (int j = 0; j < 10; ++j)
14100     ;
14101   }
14102 #pragma omp target teams
14103   {
14104 #pragma omp distribute parallel for simd
14105   for (int i = 0; i < 10; ++i)
14106     ;
14107 #pragma omp distribute parallel for simd
14108   for (int j = 0; j < 10; ++j)
14109     ;
14110   }
14111 #pragma omp target teams
14112   {
14113 #pragma omp distribute simd
14114   for (int i = 0; i < 10; ++i)
14115     ;
14116 #pragma omp distribute simd
14117   for (int j = 0; j < 10; ++j)
14118     ;
14119   }
14120 #pragma omp target teams
14121   {
14122 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
14123   for (int i = 0; i < 10; ++i)
14124     ;
14125   }
14126 #pragma omp target teams
14127   {
14128 #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?}}
14129   for (int i = 0; i < 10; ++i)
14130     ;
14131   }
14132 #pragma omp target teams
14133   {
14134 #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?}}
14135   for (int i = 0; i < 10; ++i)
14136     ;
14137   }
14138 #pragma omp target teams
14139   {
14140 #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?}}
14141   for (int i = 0; i < 10; ++i)
14142     ;
14143   }
14144 #pragma omp target teams
14145   {
14146 #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?}}
14147   for (int i = 0; i < 10; ++i)
14148     ;
14149   }
14150 #pragma omp target teams
14151   {
14152 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
14153     a++;
14154   }
14155 
14156   return foo<int>();
14157 }
14158 
14159