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 
189 // SIMD DIRECTIVE
190 #pragma omp simd
191   for (int i = 0; i < 10; ++i) {
192 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
193     for (int i = 0; i < 10; ++i)
194       ;
195   }
196 #pragma omp simd
197   for (int i = 0; i < 10; ++i) {
198 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
199     for (int i = 0; i < 10; ++i)
200       ;
201   }
202 #pragma omp simd
203   for (int i = 0; i < 10; ++i) {
204 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
205     for (int i = 0; i < 10; ++i)
206       ;
207   }
208 #pragma omp simd
209   for (int i = 0; i < 10; ++i) {
210 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
211     for (int i = 0; i < 10; ++i)
212       ;
213   }
214 #pragma omp simd
215   for (int i = 0; i < 10; ++i) {
216 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
217     {
218       bar();
219     }
220   }
221 #pragma omp simd
222   for (int i = 0; i < 10; ++i) {
223 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
224     {
225       bar();
226     }
227   }
228 #pragma omp simd
229   for (int i = 0; i < 10; ++i) {
230 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
231     {
232       bar();
233     }
234   }
235 #pragma omp simd
236   for (int i = 0; i < 10; ++i) {
237 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
238     {
239       bar();
240     }
241   }
242 #pragma omp simd
243   for (int i = 0; i < 10; ++i) {
244 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
245     {
246       bar();
247     }
248   }
249 #pragma omp simd
250   for (int i = 0; i < 10; ++i) {
251 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
252     for (int i = 0; i < 10; ++i)
253       ;
254   }
255 #pragma omp simd
256   for (int i = 0; i < 10; ++i) {
257 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
258     for (int i = 0; i < 10; ++i)
259       ;
260   }
261 #pragma omp simd
262   for (int i = 0; i < 10; ++i) {
263 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
264     {
265       bar();
266     }
267   }
268 #pragma omp simd
269   for (int i = 0; i < 10; ++i) {
270 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
271     {
272       bar();
273     }
274   }
275 #pragma omp simd
276   for (int i = 0; i < 10; ++i) {
277 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
278     bar();
279   }
280 #pragma omp simd
281   for (int i = 0; i < 10; ++i) {
282 #pragma omp barrier // 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 taskwait // 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 flush // 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 ordered // 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 simd // OK
303     bar();
304   }
305 #pragma omp simd
306   for (int i = 0; i < 10; ++i) {
307 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
308     bar();
309   }
310 #pragma omp simd
311   for (int i = 0; i < 10; ++i) {
312 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
313     ++a;
314   }
315 #pragma omp simd
316   for (int i = 0; i < 10; ++i) {
317 #pragma omp target // 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 parallel // 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 for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
328     for (int i = 0; i < 10; ++i)
329       ;
330   }
331 #pragma omp simd
332   for (int i = 0; i < 10; ++i) {
333 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
334     ++a;
335   }
336 #pragma omp simd
337   for (int i = 0; i < 10; ++i) {
338 #pragma omp target exit data map(from: 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 teams // 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 taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
349   for (int i = 0; i < 10; ++i)
350     ++a;
351   }
352 #pragma omp simd
353   for (int i = 0; i < 10; ++i) {
354 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
355     for (int j = 0; j < 10; ++j)
356       ;
357   }
358 #pragma omp simd
359   for (int i = 0; i < 10; ++i) {
360 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
361   }
362 #pragma omp simd
363   for (int i = 0; i < 10; ++i) {
364 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
365     for (int j = 0; j < 10; ++j)
366       ;
367   }
368 #pragma omp simd
369   for (int i = 0; i < 10; ++i) {
370 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
371     for (int j = 0; j < 10; ++j)
372       ;
373   }
374 #pragma omp simd
375   for (int i = 0; i < 10; ++i) {
376 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
377     for (int j = 0; j < 10; ++j)
378       ;
379   }
380 #pragma omp simd
381   for (int i = 0; i < 10; ++i) {
382 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
383     for (int j = 0; j < 10; ++j)
384       ;
385   }
386 #pragma omp simd
387   for (int i = 0; i < 10; ++i) {
388 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
389     for (int j = 0; j < 10; ++j)
390       ;
391   }
392 #pragma omp simd
393   for (int i = 0; i < 10; ++i) {
394 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
395     for (int j = 0; j < 10; ++j)
396       ;
397   }
398 #pragma omp simd
399   for (int i = 0; i < 10; ++i) {
400 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
401     for (int j = 0; j < 10; ++j)
402       ;
403   }
404 #pragma omp simd
405   for (int i = 0; i < 10; ++i) {
406 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
407     for (int j = 0; j < 10; ++j)
408       ;
409   }
410 
411 // FOR DIRECTIVE
412 #pragma omp for
413   for (int i = 0; i < 10; ++i) {
414 #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?}}
415     for (int i = 0; i < 10; ++i)
416       ;
417   }
418 #pragma omp for
419   for (int i = 0; i < 10; ++i) {
420 #pragma omp simd
421     for (int i = 0; i < 10; ++i)
422       ;
423   }
424 #pragma omp for
425   for (int i = 0; i < 10; ++i) {
426 #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?}}
427     for (int i = 0; i < 10; ++i)
428       ;
429   }
430 #pragma omp for
431   for (int i = 0; i < 10; ++i) {
432 #pragma omp parallel
433     for (int i = 0; i < 10; ++i)
434       ;
435   }
436 #pragma omp for
437   for (int i = 0; i < 10; ++i) {
438 #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?}}
439     {
440       bar();
441     }
442   }
443 #pragma omp for
444   for (int i = 0; i < 10; ++i) {
445 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
446     {
447       bar();
448     }
449   }
450 #pragma omp for
451   for (int i = 0; i < 10; ++i) {
452 #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?}}
453     {
454       bar();
455     }
456   }
457 
458 #pragma omp for
459   for (int i = 0; i < 10; ++i) {
460 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
461     {
462       bar();
463     }
464   }
465 #pragma omp for
466   for (int i = 0; i < 10; ++i) {
467 #pragma omp critical
468     {
469       bar();
470     }
471   }
472 #pragma omp for
473   for (int i = 0; i < 10; ++i) {
474 #pragma omp parallel
475     {
476 #pragma omp single // OK
477       {
478         bar();
479       }
480 #pragma omp for // OK
481       for (int i = 0; i < 10; ++i)
482         ;
483 #pragma omp sections // OK
484       {
485         bar();
486       }
487     }
488   }
489 #pragma omp for
490   for (int i = 0; i < 10; ++i) {
491 #pragma omp parallel for
492     for (int i = 0; i < 10; ++i)
493       ;
494   }
495 #pragma omp for
496   for (int i = 0; i < 10; ++i) {
497 #pragma omp parallel for simd
498     for (int i = 0; i < 10; ++i)
499       ;
500   }
501 #pragma omp for
502   for (int i = 0; i < 10; ++i) {
503 #pragma omp parallel sections
504     {
505       bar();
506     }
507   }
508 #pragma omp for
509   for (int i = 0; i < 10; ++i) {
510 #pragma omp task
511     {
512       bar();
513     }
514   }
515 #pragma omp for
516   for (int i = 0; i < 10; ++i) {
517 #pragma omp taskyield
518     bar();
519   }
520 #pragma omp for
521   for (int i = 0; i < 10; ++i) {
522 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
523     bar();
524   }
525 #pragma omp for
526   for (int i = 0; i < 10; ++i) {
527 #pragma omp taskwait
528     bar();
529   }
530 #pragma omp for
531   for (int i = 0; i < 10; ++i) {
532 #pragma omp flush
533     bar();
534   }
535 #pragma omp for
536   for (int i = 0; i < 10; ++i) {
537 #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?}}
538     bar();
539   }
540 #pragma omp for ordered
541   for (int i = 0; i < 10; ++i) {
542 #pragma omp ordered // OK
543     bar();
544   }
545 #pragma omp for
546   for (int i = 0; i < 10; ++i) {
547 #pragma omp atomic
548     ++a;
549   }
550 #pragma omp for
551   for (int i = 0; i < 10; ++i) {
552 #pragma omp target
553     ++a;
554   }
555 #pragma omp for
556   for (int i = 0; i < 10; ++i) {
557 #pragma omp target parallel
558     ++a;
559   }
560 #pragma omp for
561   for (int i = 0; i < 10; ++i) {
562 #pragma omp target parallel for
563     for (int i = 0; i < 10; ++i)
564       ;
565   }
566 #pragma omp for
567   for (int i = 0; i < 10; ++i) {
568 #pragma omp target enter data map(to: a)
569     ++a;
570   }
571 #pragma omp for
572   for (int i = 0; i < 10; ++i) {
573 #pragma omp target exit data map(from: a)
574     ++a;
575   }
576 #pragma omp for
577   for (int i = 0; i < 10; ++i) {
578 #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?}}
579     ++a;
580   }
581 #pragma omp for
582   for (int i = 0; i < 10; ++i) {
583 #pragma omp taskloop
584   for (int i = 0; i < 10; ++i)
585     ++a;
586   }
587 #pragma omp for
588   for (int i = 0; i < 10; ++i) {
589 #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?}}
590     for (int j = 0; j < 10; ++j)
591       ;
592   }
593 #pragma omp for
594   for (int i = 0; i < 10; ++i) {
595 #pragma omp target update to(a)
596   }
597 #pragma omp for
598   for (int i = 0; i < 10; ++i) {
599 #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?}}
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 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?}}
606     for (int j = 0; j < 10; ++j)
607       ;
608   }
609 #pragma omp for
610   for (int i = 0; i < 10; ++i) {
611 #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?}}
612     for (int j = 0; j < 10; ++j)
613       ;
614   }
615 #pragma omp for
616   for (int i = 0; i < 10; ++i) {
617 #pragma omp target simd // OK
618     for (int j = 0; j < 10; ++j)
619       ;
620   }
621 #pragma omp for
622   for (int i = 0; i < 10; ++i) {
623 #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?}}
624     for (int j = 0; j < 10; ++j)
625       ;
626   }
627 #pragma omp for
628   for (int i = 0; i < 10; ++i) {
629 #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?}}
630     for (int j = 0; j < 10; ++j)
631       ;
632   }
633 #pragma omp for
634   for (int i = 0; i < 10; ++i) {
635 #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?}}
636     for (int j = 0; j < 10; ++j)
637       ;
638   }
639 #pragma omp for
640   for (int i = 0; i < 10; ++i) {
641 #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?}}
642     for (int j = 0; j < 10; ++j)
643       ;
644   }
645 
646 // FOR SIMD DIRECTIVE
647 #pragma omp for simd
648   for (int i = 0; i < 10; ++i) {
649 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
650     for (int i = 0; i < 10; ++i)
651       ;
652   }
653 #pragma omp for simd
654   for (int i = 0; i < 10; ++i) {
655 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
656     for (int i = 0; i < 10; ++i)
657       ;
658   }
659 #pragma omp for simd
660   for (int i = 0; i < 10; ++i) {
661 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
662     for (int i = 0; i < 10; ++i)
663       ;
664   }
665 #pragma omp for simd
666   for (int i = 0; i < 10; ++i) {
667 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
668     for (int i = 0; i < 10; ++i)
669       ;
670   }
671 #pragma omp for simd
672   for (int i = 0; i < 10; ++i) {
673 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
674     {
675       bar();
676     }
677   }
678 #pragma omp for simd
679   for (int i = 0; i < 10; ++i) {
680 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
681     {
682       bar();
683     }
684   }
685 #pragma omp for simd
686   for (int i = 0; i < 10; ++i) {
687 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
688     {
689       bar();
690     }
691   }
692 #pragma omp for simd
693   for (int i = 0; i < 10; ++i) {
694 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
695     {
696       bar();
697     }
698   }
699 #pragma omp for simd
700   for (int i = 0; i < 10; ++i) {
701 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
702     {
703       bar();
704     }
705   }
706 #pragma omp for simd
707   for (int i = 0; i < 10; ++i) {
708 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
709     for (int i = 0; i < 10; ++i)
710       ;
711   }
712 #pragma omp for simd
713   for (int i = 0; i < 10; ++i) {
714 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
715     for (int i = 0; i < 10; ++i)
716       ;
717   }
718 #pragma omp for simd
719   for (int i = 0; i < 10; ++i) {
720 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
721     {
722       bar();
723     }
724   }
725 #pragma omp for simd
726   for (int i = 0; i < 10; ++i) {
727 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
728     {
729       bar();
730     }
731   }
732 #pragma omp for simd
733   for (int i = 0; i < 10; ++i) {
734 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
735     bar();
736   }
737 #pragma omp for simd
738   for (int i = 0; i < 10; ++i) {
739 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
740     bar();
741   }
742 #pragma omp for simd
743   for (int i = 0; i < 10; ++i) {
744 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
745     bar();
746   }
747 #pragma omp for simd
748   for (int i = 0; i < 10; ++i) {
749 #pragma omp flush // 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 ordered // 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 ordered simd // OK
760     bar();
761   }
762 #pragma omp for simd
763   for (int i = 0; i < 10; ++i) {
764 #pragma omp ordered threads // 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 atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
770     ++a;
771   }
772 #pragma omp for simd
773   for (int i = 0; i < 10; ++i) {
774 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
775     ++a;
776   }
777 #pragma omp for simd
778   for (int i = 0; i < 10; ++i) {
779 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
780     ++a;
781   }
782 #pragma omp for simd
783   for (int i = 0; i < 10; ++i) {
784 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
785     for (int i = 0; i < 10; ++i)
786       ;
787   }
788 #pragma omp for simd
789   for (int i = 0; i < 10; ++i) {
790 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
791     ++a;
792   }
793 #pragma omp for simd
794   for (int i = 0; i < 10; ++i) {
795 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
796     ++a;
797   }
798 #pragma omp for simd
799   for (int i = 0; i < 10; ++i) {
800 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
801     ++a;
802   }
803 #pragma omp for simd
804   for (int i = 0; i < 10; ++i) {
805 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
806   for (int i = 0; i < 10; ++i)
807     ++a;
808   }
809 #pragma omp for simd
810   for (int i = 0; i < 10; ++i) {
811 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
812     for (int j = 0; j < 10; ++j)
813       ;
814   }
815 #pragma omp for simd
816   for (int i = 0; i < 10; ++i) {
817 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
818     bar();
819   }
820 #pragma omp for simd
821   for (int i = 0; i < 10; ++i) {
822 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
823     for (int j = 0; j < 10; ++j)
824       ;
825   }
826 #pragma omp for simd
827   for (int i = 0; i < 10; ++i) {
828 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
829     for (int j = 0; j < 10; ++j)
830       ;
831   }
832 #pragma omp for simd
833   for (int i = 0; i < 10; ++i) {
834 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
835     for (int j = 0; j < 10; ++j)
836       ;
837   }
838 #pragma omp for simd
839   for (int i = 0; i < 10; ++i) {
840 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
841     for (int j = 0; j < 10; ++j)
842       ;
843   }
844 #pragma omp for simd
845   for (int i = 0; i < 10; ++i) {
846 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
847     for (int j = 0; j < 10; ++j)
848       ;
849   }
850 #pragma omp for simd
851   for (int i = 0; i < 10; ++i) {
852 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
853     for (int j = 0; j < 10; ++j)
854       ;
855   }
856 #pragma omp for simd
857   for (int i = 0; i < 10; ++i) {
858 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
859     for (int j = 0; j < 10; ++j)
860       ;
861   }
862 #pragma omp for simd
863   for (int i = 0; i < 10; ++i) {
864 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
865     for (int j = 0; j < 10; ++j)
866       ;
867   }
868 
869 // SECTIONS DIRECTIVE
870 #pragma omp sections
871   {
872 #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?}}
873     for (int i = 0; i < 10; ++i)
874       ;
875   }
876 #pragma omp sections
877   {
878 #pragma omp simd
879     for (int i = 0; i < 10; ++i)
880       ;
881   }
882 #pragma omp sections
883   {
884 #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?}}
885     for (int i = 0; i < 10; ++i)
886       ;
887   }
888 #pragma omp sections
889   {
890 #pragma omp parallel
891     for (int i = 0; i < 10; ++i)
892       ;
893   }
894 #pragma omp sections
895   {
896 #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?}}
897     {
898       bar();
899     }
900   }
901 #pragma omp sections
902   {
903 #pragma omp section
904     {
905       bar();
906     }
907   }
908 #pragma omp sections
909   {
910 #pragma omp parallel
911     {
912 #pragma omp single // OK
913       {
914         bar();
915       }
916 #pragma omp for // OK
917       for (int i = 0; i < 10; ++i)
918         ;
919 #pragma omp sections // OK
920       {
921         bar();
922       }
923     }
924   }
925 #pragma omp sections
926   {
927 #pragma omp parallel
928     {
929 #pragma omp master // OK
930       {
931         bar();
932       }
933 #pragma omp for // OK
934       for (int i = 0; i < 10; ++i)
935         ;
936 #pragma omp master // OK
937       {
938         bar();
939       }
940     }
941 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
942     bar();
943   }
944 #pragma omp sections
945   {
946 #pragma omp parallel
947     {
948 #pragma omp critical(A) // OK
949       {
950         bar();
951       }
952 #pragma omp for // OK
953       for (int i = 0; i < 10; ++i)
954         ;
955 #pragma omp critical // OK
956       {
957         bar();
958       }
959     }
960 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
961     bar();
962   }
963 #pragma omp sections
964   {
965 #pragma omp parallel for
966     for (int i = 0; i < 10; ++i)
967       ;
968   }
969 #pragma omp sections
970   {
971 #pragma omp parallel for simd
972     for (int i = 0; i < 10; ++i)
973       ;
974   }
975 #pragma omp sections
976   {
977 #pragma omp parallel sections
978     {
979       bar();
980     }
981   }
982 #pragma omp sections
983   {
984 #pragma omp task
985     {
986       bar();
987     }
988   }
989 #pragma omp sections
990   {
991 #pragma omp taskyield
992   }
993 #pragma omp sections
994   {
995 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
996   }
997 #pragma omp sections
998   {
999 #pragma omp taskwait
1000   }
1001 #pragma omp sections
1002   {
1003 #pragma omp flush
1004   }
1005 #pragma omp sections
1006   {
1007 #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?}}
1008     bar();
1009   }
1010 #pragma omp sections
1011   {
1012 #pragma omp atomic
1013     ++a;
1014   }
1015 #pragma omp sections
1016   {
1017 #pragma omp target
1018     ++a;
1019   }
1020 #pragma omp sections
1021   {
1022 #pragma omp target parallel
1023     ++a;
1024   }
1025 #pragma omp sections
1026   {
1027 #pragma omp target parallel for
1028     for (int i = 0; i < 10; ++i)
1029       ;
1030   }
1031 #pragma omp sections
1032   {
1033 #pragma omp target enter data map(to: a)
1034   }
1035 #pragma omp sections
1036   {
1037 #pragma omp target exit data map(from: a)
1038   }
1039 #pragma omp sections
1040   {
1041 #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?}}
1042     ++a;
1043   }
1044 #pragma omp sections
1045   {
1046 #pragma omp taskloop
1047   for (int i = 0; i < 10; ++i)
1048     ++a;
1049   }
1050 #pragma omp sections
1051   {
1052 #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?}}
1053     for (int i = 0; i < 10; ++i)
1054       ;
1055   }
1056 #pragma omp sections
1057   {
1058 #pragma omp target update to(a)
1059   }
1060 #pragma omp sections
1061   {
1062 #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?}}
1063     for (int i = 0; i < 10; ++i)
1064       ;
1065   }
1066 #pragma omp sections
1067   {
1068 #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?}}
1069     for (int i = 0; i < 10; ++i)
1070       ;
1071   }
1072 #pragma omp sections
1073   {
1074 #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?}}
1075     for (int i = 0; i < 10; ++i)
1076       ;
1077   }
1078 #pragma omp sections
1079   {
1080 #pragma omp target simd // OK
1081     for (int i = 0; i < 10; ++i)
1082       ;
1083   }
1084 #pragma omp sections
1085   {
1086 #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?}}
1087     for (int i = 0; i < 10; ++i)
1088       ;
1089   }
1090 #pragma omp sections
1091   {
1092 #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?}}
1093     for (int i = 0; i < 10; ++i)
1094       ;
1095   }
1096 #pragma omp sections
1097   {
1098 #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?}}
1099     for (int i = 0; i < 10; ++i)
1100       ;
1101   }
1102 #pragma omp sections
1103   {
1104 #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?}}
1105     for (int i = 0; i < 10; ++i)
1106       ;
1107   }
1108 
1109 // SECTION DIRECTIVE
1110 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1111   {
1112     bar();
1113   }
1114 #pragma omp sections
1115   {
1116 #pragma omp section
1117     {
1118 #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?}}
1119       for (int i = 0; i < 10; ++i)
1120         ;
1121     }
1122   }
1123 #pragma omp sections
1124   {
1125 #pragma omp section
1126     {
1127 #pragma omp simd
1128       for (int i = 0; i < 10; ++i)
1129         ;
1130     }
1131   }
1132 #pragma omp sections
1133   {
1134 #pragma omp section
1135     {
1136 #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?}}
1137       for (int i = 0; i < 10; ++i)
1138         ;
1139     }
1140   }
1141 #pragma omp sections
1142   {
1143 #pragma omp section
1144     {
1145 #pragma omp parallel
1146       for (int i = 0; i < 10; ++i)
1147         ;
1148     }
1149   }
1150 #pragma omp sections
1151   {
1152 #pragma omp section
1153     {
1154 #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?}}
1155       {
1156         bar();
1157       }
1158     }
1159   }
1160 #pragma omp sections
1161   {
1162 #pragma omp section
1163     {
1164 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1165       {
1166         bar();
1167       }
1168     }
1169   }
1170 #pragma omp sections
1171   {
1172 #pragma omp section
1173     {
1174 #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?}}
1175       bar();
1176 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1177       bar();
1178 #pragma omp critical
1179       bar();
1180     }
1181   }
1182 #pragma omp sections
1183   {
1184 #pragma omp section
1185     {
1186 #pragma omp parallel
1187       {
1188 #pragma omp single // OK
1189         {
1190           bar();
1191         }
1192 #pragma omp for // OK
1193         for (int i = 0; i < 10; ++i)
1194           ;
1195 #pragma omp for simd // OK
1196         for (int i = 0; i < 10; ++i)
1197           ;
1198 #pragma omp sections // OK
1199         {
1200           bar();
1201         }
1202       }
1203     }
1204   }
1205 #pragma omp sections
1206   {
1207 #pragma omp section
1208     {
1209 #pragma omp parallel for
1210       for (int i = 0; i < 10; ++i)
1211         ;
1212     }
1213   }
1214 #pragma omp sections
1215   {
1216 #pragma omp section
1217     {
1218 #pragma omp parallel for simd
1219       for (int i = 0; i < 10; ++i)
1220         ;
1221     }
1222   }
1223 #pragma omp sections
1224   {
1225 #pragma omp section
1226     {
1227 #pragma omp parallel sections
1228       {
1229         bar();
1230       }
1231     }
1232   }
1233 #pragma omp sections
1234   {
1235 #pragma omp section
1236     {
1237 #pragma omp task
1238       {
1239         bar();
1240       }
1241     }
1242   }
1243 #pragma omp sections
1244   {
1245 #pragma omp section
1246     {
1247 #pragma omp taskyield
1248       bar();
1249     }
1250   }
1251 #pragma omp sections
1252   {
1253 #pragma omp section
1254     {
1255 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1256       bar();
1257     }
1258   }
1259 #pragma omp sections
1260   {
1261 #pragma omp section
1262     {
1263 #pragma omp taskwait
1264       bar();
1265     }
1266   }
1267 #pragma omp sections
1268   {
1269 #pragma omp section
1270     {
1271 #pragma omp flush
1272       bar();
1273     }
1274   }
1275 #pragma omp sections
1276   {
1277 #pragma omp section
1278     {
1279 #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?}}
1280       bar();
1281     }
1282   }
1283 #pragma omp sections
1284   {
1285 #pragma omp section
1286 #pragma omp atomic
1287     ++a;
1288   }
1289 #pragma omp sections
1290   {
1291 #pragma omp section
1292 #pragma omp target
1293     ++a;
1294   }
1295 #pragma omp sections
1296   {
1297 #pragma omp section
1298 #pragma omp target parallel
1299     ++a;
1300   }
1301 #pragma omp sections
1302   {
1303 #pragma omp section
1304     {
1305 #pragma omp target parallel for
1306       for (int i = 0; i < 10; ++i)
1307         ;
1308     }
1309   }
1310 #pragma omp sections
1311   {
1312 #pragma omp section
1313     {
1314 #pragma omp target enter data map(to: a)
1315       ++a;
1316     }
1317   }
1318 #pragma omp sections
1319   {
1320 #pragma omp section
1321     {
1322 #pragma omp target exit data map(from: a)
1323       ++a;
1324     }
1325   }
1326 #pragma omp sections
1327   {
1328 #pragma omp section
1329 #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?}}
1330     ++a;
1331   }
1332 #pragma omp sections
1333   {
1334 #pragma omp section
1335 #pragma omp taskloop
1336   for (int i = 0; i < 10; ++i)
1337     ++a;
1338   }
1339 #pragma omp sections
1340   {
1341 #pragma omp section
1342 #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?}}
1343     for (int i = 0; i < 10; ++i)
1344       ;
1345   }
1346 #pragma omp sections
1347   {
1348 #pragma omp section
1349     {
1350       bar();
1351 #pragma omp target update to(a)
1352     }
1353   }
1354 #pragma omp sections
1355   {
1356 #pragma omp section
1357 #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?}}
1358     for (int i = 0; i < 10; ++i)
1359       ;
1360   }
1361 #pragma omp sections
1362   {
1363 #pragma omp section
1364 #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?}}
1365     for (int i = 0; i < 10; ++i)
1366       ;
1367   }
1368 #pragma omp sections
1369   {
1370 #pragma omp section
1371 #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?}}
1372     for (int i = 0; i < 10; ++i)
1373       ;
1374   }
1375 #pragma omp sections
1376   {
1377 #pragma omp section
1378 #pragma omp target simd // OK
1379     for (int i = 0; i < 10; ++i)
1380       ;
1381   }
1382 #pragma omp sections
1383   {
1384 #pragma omp section
1385 #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?}}
1386     for (int i = 0; i < 10; ++i)
1387       ;
1388   }
1389 #pragma omp sections
1390   {
1391 #pragma omp section
1392 #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?}}
1393     for (int i = 0; i < 10; ++i)
1394       ;
1395   }
1396 #pragma omp sections
1397   {
1398 #pragma omp section
1399 #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?}}
1400     for (int i = 0; i < 10; ++i)
1401       ;
1402   }
1403 #pragma omp sections
1404   {
1405 #pragma omp section
1406 #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?}}
1407     for (int i = 0; i < 10; ++i)
1408       ;
1409   }
1410 
1411 // SINGLE DIRECTIVE
1412 #pragma omp single
1413   {
1414 #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?}}
1415     for (int i = 0; i < 10; ++i)
1416       ;
1417   }
1418 #pragma omp single
1419   {
1420 #pragma omp simd
1421     for (int i = 0; i < 10; ++i)
1422       ;
1423   }
1424 #pragma omp single
1425   {
1426 #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?}}
1427     for (int i = 0; i < 10; ++i)
1428       ;
1429   }
1430 #pragma omp single
1431   {
1432 #pragma omp parallel
1433     for (int i = 0; i < 10; ++i)
1434       ;
1435   }
1436 #pragma omp single
1437   {
1438 #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?}}
1439     {
1440       bar();
1441     }
1442   }
1443 #pragma omp single
1444   {
1445 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1446     {
1447       bar();
1448     }
1449   }
1450 #pragma omp single
1451   {
1452 #pragma omp critical
1453     {
1454       bar();
1455     }
1456   }
1457 #pragma omp single
1458   {
1459 #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?}}
1460     {
1461       bar();
1462     }
1463   }
1464 #pragma omp single
1465   {
1466 #pragma omp parallel
1467     {
1468 #pragma omp single // OK
1469       {
1470         bar();
1471       }
1472 #pragma omp for // OK
1473       for (int i = 0; i < 10; ++i)
1474         ;
1475 #pragma omp for simd // OK
1476       for (int i = 0; i < 10; ++i)
1477         ;
1478 #pragma omp sections // OK
1479       {
1480         bar();
1481       }
1482     }
1483   }
1484 #pragma omp single
1485   {
1486 #pragma omp parallel for
1487     for (int i = 0; i < 10; ++i)
1488       ;
1489   }
1490 #pragma omp single
1491   {
1492 #pragma omp parallel for simd
1493     for (int i = 0; i < 10; ++i)
1494       ;
1495   }
1496 #pragma omp single
1497   {
1498 #pragma omp parallel sections
1499     {
1500       bar();
1501     }
1502   }
1503 #pragma omp single
1504   {
1505 #pragma omp task
1506     {
1507       bar();
1508     }
1509   }
1510 #pragma omp single
1511   {
1512 #pragma omp taskyield
1513     bar();
1514   }
1515 #pragma omp single
1516   {
1517 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1518     bar();
1519   }
1520 #pragma omp single
1521   {
1522 #pragma omp taskwait
1523     bar();
1524   }
1525 #pragma omp single
1526   {
1527 #pragma omp flush
1528     bar();
1529   }
1530 #pragma omp single
1531   {
1532 #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?}}
1533     bar();
1534   }
1535 #pragma omp single
1536   {
1537 #pragma omp atomic
1538     ++a;
1539   }
1540 #pragma omp single
1541   {
1542 #pragma omp target
1543     ++a;
1544   }
1545 #pragma omp single
1546   {
1547 #pragma omp target parallel
1548     ++a;
1549   }
1550 #pragma omp single
1551   {
1552 #pragma omp target parallel for
1553     for (int i = 0; i < 10; ++i)
1554       ;
1555   }
1556 #pragma omp single
1557   {
1558 #pragma omp target enter data map(to: a)
1559     ++a;
1560   }
1561 #pragma omp single
1562   {
1563 #pragma omp target exit data map(from: a)
1564     ++a;
1565   }
1566 #pragma omp single
1567   {
1568 #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?}}
1569     ++a;
1570   }
1571 #pragma omp single
1572   {
1573 #pragma omp taskloop
1574   for (int i = 0; i < 10; ++i)
1575     ++a;
1576   }
1577 #pragma omp single
1578   {
1579 #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?}}
1580     for (int i = 0; i < 10; ++i)
1581       ;
1582   }
1583 #pragma omp single
1584   {
1585 #pragma omp target update to(a)
1586     bar();
1587   }
1588 #pragma omp single
1589   {
1590 #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?}}
1591     for (int i = 0; i < 10; ++i)
1592       ;
1593   }
1594 #pragma omp single
1595   {
1596 #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?}}
1597     for (int i = 0; i < 10; ++i)
1598       ;
1599   }
1600 #pragma omp single
1601   {
1602 #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?}}
1603     for (int i = 0; i < 10; ++i)
1604       ;
1605   }
1606 #pragma omp single
1607   {
1608 #pragma omp target simd // OK
1609     for (int i = 0; i < 10; ++i)
1610       ;
1611   }
1612 #pragma omp single
1613   {
1614 #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?}}
1615     for (int i = 0; i < 10; ++i)
1616       ;
1617   }
1618 #pragma omp single
1619   {
1620 #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?}}
1621     for (int i = 0; i < 10; ++i)
1622       ;
1623   }
1624 #pragma omp single
1625   {
1626 #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?}}
1627     for (int i = 0; i < 10; ++i)
1628       ;
1629   }
1630 #pragma omp single
1631   {
1632 #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?}}
1633     for (int i = 0; i < 10; ++i)
1634       ;
1635   }
1636 
1637 // MASTER DIRECTIVE
1638 #pragma omp master
1639   {
1640 #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?}}
1641     for (int i = 0; i < 10; ++i)
1642       ;
1643   }
1644 #pragma omp master
1645   {
1646 #pragma omp simd
1647     for (int i = 0; i < 10; ++i)
1648       ;
1649   }
1650 #pragma omp master
1651   {
1652 #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?}}
1653     for (int i = 0; i < 10; ++i)
1654       ;
1655   }
1656 #pragma omp master
1657   {
1658 #pragma omp parallel
1659     for (int i = 0; i < 10; ++i)
1660       ;
1661   }
1662 #pragma omp master
1663   {
1664 #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?}}
1665     {
1666       bar();
1667     }
1668   }
1669 #pragma omp master
1670   {
1671 #pragma omp master // OK, though second 'master' is redundant
1672     {
1673       bar();
1674     }
1675   }
1676 #pragma omp master
1677   {
1678 #pragma omp critical
1679     {
1680       bar();
1681     }
1682   }
1683 #pragma omp master
1684   {
1685 #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?}}
1686     {
1687       bar();
1688     }
1689   }
1690 #pragma omp master
1691   {
1692 #pragma omp parallel
1693     {
1694 #pragma omp master // OK
1695       {
1696         bar();
1697       }
1698 #pragma omp for // OK
1699       for (int i = 0; i < 10; ++i)
1700         ;
1701 #pragma omp for simd // OK
1702       for (int i = 0; i < 10; ++i)
1703         ;
1704 #pragma omp sections // OK
1705       {
1706         bar();
1707       }
1708     }
1709   }
1710 #pragma omp master
1711   {
1712 #pragma omp parallel for
1713     for (int i = 0; i < 10; ++i)
1714       ;
1715   }
1716 #pragma omp master
1717   {
1718 #pragma omp parallel for simd
1719     for (int i = 0; i < 10; ++i)
1720       ;
1721   }
1722 #pragma omp master
1723   {
1724 #pragma omp parallel sections
1725     {
1726       bar();
1727     }
1728   }
1729 #pragma omp master
1730   {
1731 #pragma omp task
1732     {
1733       bar();
1734     }
1735   }
1736 #pragma omp master
1737   {
1738 #pragma omp taskyield
1739     bar();
1740   }
1741 #pragma omp master
1742   {
1743 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1744     bar();
1745   }
1746 #pragma omp master
1747   {
1748 #pragma omp taskwait
1749     bar();
1750   }
1751 #pragma omp master
1752   {
1753 #pragma omp flush
1754     bar();
1755   }
1756 #pragma omp master
1757   {
1758 #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?}}
1759     bar();
1760   }
1761 #pragma omp master
1762   {
1763 #pragma omp atomic
1764     ++a;
1765   }
1766 #pragma omp master
1767   {
1768 #pragma omp target
1769     ++a;
1770   }
1771 #pragma omp master
1772   {
1773 #pragma omp target parallel
1774     ++a;
1775   }
1776 #pragma omp master
1777   {
1778 #pragma omp target parallel for
1779     for (int i = 0; i < 10; ++i)
1780       ;
1781   }
1782 #pragma omp master
1783   {
1784 #pragma omp target enter data map(to: a)
1785     ++a;
1786   }
1787 #pragma omp master
1788   {
1789 #pragma omp target exit data map(from: a)
1790     ++a;
1791   }
1792 #pragma omp master
1793   {
1794 #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?}}
1795     ++a;
1796   }
1797 #pragma omp master
1798   {
1799 #pragma omp taskloop
1800   for (int i = 0; i < 10; ++i)
1801     ++a;
1802   }
1803 #pragma omp master
1804   {
1805 #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?}}
1806     for (int i = 0; i < 10; ++i)
1807       ;
1808   }
1809 #pragma omp master
1810   {
1811 #pragma omp target update to(a)
1812     bar();
1813   }
1814 #pragma omp master
1815   {
1816 #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?}}
1817     for (int i = 0; i < 10; ++i)
1818       ;
1819   }
1820 #pragma omp master
1821   {
1822 #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?}}
1823     for (int i = 0; i < 10; ++i)
1824       ;
1825   }
1826 #pragma omp master
1827   {
1828 #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?}}
1829     for (int i = 0; i < 10; ++i)
1830       ;
1831   }
1832 #pragma omp master
1833   {
1834 #pragma omp target simd // OK
1835     for (int i = 0; i < 10; ++i)
1836       ;
1837   }
1838 #pragma omp master
1839   {
1840 #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?}}
1841     for (int i = 0; i < 10; ++i)
1842       ;
1843   }
1844 #pragma omp master
1845   {
1846 #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?}}
1847     for (int i = 0; i < 10; ++i)
1848       ;
1849   }
1850 #pragma omp master
1851   {
1852 #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?}}
1853     for (int i = 0; i < 10; ++i)
1854       ;
1855   }
1856 #pragma omp master
1857   {
1858 #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?}}
1859     for (int i = 0; i < 10; ++i)
1860       ;
1861   }
1862 
1863 // CRITICAL DIRECTIVE
1864 #pragma omp critical
1865   {
1866 #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?}}
1867     for (int i = 0; i < 10; ++i)
1868       ;
1869   }
1870 #pragma omp critical
1871   {
1872 #pragma omp simd
1873     for (int i = 0; i < 10; ++i)
1874       ;
1875   }
1876 #pragma omp critical
1877   {
1878 #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?}}
1879     for (int i = 0; i < 10; ++i)
1880       ;
1881   }
1882 #pragma omp critical
1883   {
1884 #pragma omp parallel
1885     for (int i = 0; i < 10; ++i)
1886       ;
1887   }
1888 #pragma omp critical
1889   {
1890 #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?}}
1891     {
1892       bar();
1893     }
1894   }
1895 #pragma omp critical
1896   {
1897 #pragma omp master // OK, though second 'master' is redundant
1898     {
1899       bar();
1900     }
1901   }
1902 #pragma omp critical
1903   {
1904 #pragma omp critical
1905     {
1906       bar();
1907     }
1908   }
1909 #pragma omp critical
1910   {
1911 #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?}}
1912     {
1913       bar();
1914     }
1915   }
1916 #pragma omp critical
1917   {
1918 #pragma omp parallel
1919     {
1920 #pragma omp master // OK
1921       {
1922         bar();
1923       }
1924 #pragma omp for // OK
1925       for (int i = 0; i < 10; ++i)
1926         ;
1927 #pragma omp for simd // OK
1928       for (int i = 0; i < 10; ++i)
1929         ;
1930 #pragma omp sections // OK
1931       {
1932         bar();
1933       }
1934     }
1935   }
1936 #pragma omp critical
1937   {
1938 #pragma omp parallel for
1939     for (int i = 0; i < 10; ++i)
1940       ;
1941   }
1942 #pragma omp critical
1943   {
1944 #pragma omp parallel for simd
1945     for (int i = 0; i < 10; ++i)
1946       ;
1947   }
1948 #pragma omp critical
1949   {
1950 #pragma omp parallel sections
1951     {
1952       bar();
1953     }
1954   }
1955 #pragma omp critical
1956   {
1957 #pragma omp task
1958     {
1959       bar();
1960     }
1961   }
1962 #pragma omp critical
1963   {
1964 #pragma omp taskyield
1965     bar();
1966   }
1967 #pragma omp critical
1968   {
1969 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
1970     bar();
1971   }
1972 #pragma omp critical
1973   {
1974 #pragma omp taskwait
1975     bar();
1976   }
1977 #pragma omp critical(Tuzik)
1978   {
1979 #pragma omp critical(grelka)
1980     bar();
1981   }
1982 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
1983   {
1984 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
1985     {
1986 #pragma omp critical(Tuzik)
1987       {
1988 #pragma omp parallel
1989 #pragma omp critical(grelka)
1990         {
1991           bar();
1992         }
1993       }
1994     }
1995   }
1996 #pragma omp critical
1997   {
1998 #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?}}
1999     bar();
2000   }
2001 #pragma omp critical
2002   {
2003 #pragma omp atomic
2004     ++a;
2005   }
2006 #pragma omp critical
2007   {
2008 #pragma omp target
2009     ++a;
2010   }
2011 #pragma omp critical
2012   {
2013 #pragma omp target parallel
2014     ++a;
2015   }
2016 #pragma omp critical
2017   {
2018 #pragma omp target parallel for
2019     for (int i = 0; i < 10; ++i)
2020       ;
2021   }
2022 #pragma omp critical
2023   {
2024 #pragma omp target enter data map(to: a)
2025     ++a;
2026   }
2027 #pragma omp critical
2028   {
2029 #pragma omp target exit data map(from: a)
2030     ++a;
2031   }
2032 #pragma omp critical
2033   {
2034 #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?}}
2035     ++a;
2036   }
2037 #pragma omp critical
2038   {
2039 #pragma omp taskloop
2040   for (int i = 0; i < 10; ++i)
2041     ++a;
2042   }
2043 #pragma omp critical
2044   {
2045 #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?}}
2046     for (int i = 0; i < 10; ++i)
2047       ;
2048   }
2049 #pragma omp critical
2050   {
2051 #pragma omp target update to(a)
2052     bar();
2053   }
2054 #pragma omp critical
2055   {
2056 #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?}}
2057     for (int i = 0; i < 10; ++i)
2058       ;
2059   }
2060 #pragma omp critical
2061   {
2062 #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?}}
2063     for (int i = 0; i < 10; ++i)
2064       ;
2065   }
2066 #pragma omp critical
2067   {
2068 #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?}}
2069     for (int i = 0; i < 10; ++i)
2070       ;
2071   }
2072 #pragma omp critical
2073   {
2074 #pragma omp target simd // OK
2075     for (int i = 0; i < 10; ++i)
2076       ;
2077   }
2078 #pragma omp critical
2079   {
2080 #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?}}
2081     for (int i = 0; i < 10; ++i)
2082       ;
2083   }
2084 #pragma omp critical
2085   {
2086 #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?}}
2087     for (int i = 0; i < 10; ++i)
2088       ;
2089   }
2090 #pragma omp critical
2091   {
2092 #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?}}
2093     for (int i = 0; i < 10; ++i)
2094       ;
2095   }
2096 #pragma omp critical
2097   {
2098 #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?}}
2099     for (int i = 0; i < 10; ++i)
2100       ;
2101   }
2102 
2103 // PARALLEL FOR DIRECTIVE
2104 #pragma omp parallel for
2105   for (int i = 0; i < 10; ++i) {
2106 #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?}}
2107     for (int i = 0; i < 10; ++i)
2108       ;
2109   }
2110 #pragma omp parallel for
2111   for (int i = 0; i < 10; ++i) {
2112 #pragma omp simd
2113     for (int i = 0; i < 10; ++i)
2114       ;
2115   }
2116 #pragma omp parallel for
2117   for (int i = 0; i < 10; ++i) {
2118 #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?}}
2119     for (int i = 0; i < 10; ++i)
2120       ;
2121   }
2122 #pragma omp parallel for
2123   for (int i = 0; i < 10; ++i) {
2124 #pragma omp parallel
2125     for (int i = 0; i < 10; ++i)
2126       ;
2127   }
2128 #pragma omp parallel for
2129   for (int i = 0; i < 10; ++i) {
2130 #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?}}
2131     {
2132       bar();
2133     }
2134   }
2135 #pragma omp parallel for
2136   for (int i = 0; i < 10; ++i) {
2137 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2138     {
2139       bar();
2140     }
2141   }
2142 #pragma omp parallel for
2143   for (int i = 0; i < 10; ++i) {
2144 #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?}}
2145     {
2146       bar();
2147     }
2148   }
2149 
2150 #pragma omp parallel for
2151   for (int i = 0; i < 10; ++i) {
2152 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2153     {
2154       bar();
2155     }
2156   }
2157 
2158 #pragma omp parallel for
2159   for (int i = 0; i < 10; ++i) {
2160 #pragma omp critical
2161     {
2162       bar();
2163     }
2164   }
2165 
2166 #pragma omp parallel for
2167   for (int i = 0; i < 10; ++i) {
2168 #pragma omp parallel
2169     {
2170 #pragma omp single // OK
2171       {
2172         bar();
2173       }
2174 #pragma omp for // OK
2175       for (int i = 0; i < 10; ++i)
2176         ;
2177 #pragma omp for simd // OK
2178       for (int i = 0; i < 10; ++i)
2179         ;
2180 #pragma omp sections // OK
2181       {
2182         bar();
2183       }
2184     }
2185   }
2186 #pragma omp parallel for
2187   for (int i = 0; i < 10; ++i) {
2188 #pragma omp parallel for
2189     for (int i = 0; i < 10; ++i)
2190       ;
2191   }
2192 #pragma omp parallel for
2193   for (int i = 0; i < 10; ++i) {
2194 #pragma omp parallel for simd
2195     for (int i = 0; i < 10; ++i)
2196       ;
2197   }
2198 #pragma omp parallel for
2199   for (int i = 0; i < 10; ++i) {
2200 #pragma omp parallel sections
2201     {
2202       bar();
2203     }
2204   }
2205 #pragma omp parallel for
2206   for (int i = 0; i < 10; ++i) {
2207 #pragma omp task
2208     {
2209       bar();
2210     }
2211   }
2212 #pragma omp parallel for
2213   for (int i = 0; i < 10; ++i) {
2214 #pragma omp taskyield
2215     bar();
2216   }
2217 #pragma omp parallel for
2218   for (int i = 0; i < 10; ++i) {
2219 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2220     bar();
2221   }
2222 #pragma omp parallel for
2223   for (int i = 0; i < 10; ++i) {
2224 #pragma omp taskwait
2225     bar();
2226   }
2227 #pragma omp parallel for
2228   for (int i = 0; i < 10; ++i) {
2229 #pragma omp flush
2230     bar();
2231   }
2232 #pragma omp parallel for
2233   for (int i = 0; i < 10; ++i) {
2234 #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?}}
2235     bar();
2236   }
2237 #pragma omp parallel for ordered
2238   for (int i = 0; i < 10; ++i) {
2239 #pragma omp ordered // OK
2240     bar();
2241   }
2242 #pragma omp parallel for
2243   for (int i = 0; i < 10; ++i) {
2244 #pragma omp atomic
2245     ++a;
2246   }
2247 #pragma omp parallel for
2248   for (int i = 0; i < 10; ++i) {
2249 #pragma omp target
2250     ++a;
2251   }
2252 #pragma omp parallel for
2253   for (int i = 0; i < 10; ++i) {
2254 #pragma omp target parallel
2255     ++a;
2256   }
2257 #pragma omp parallel for
2258   for (int i = 0; i < 10; ++i) {
2259 #pragma omp target parallel for
2260     for (int i = 0; i < 10; ++i)
2261       ;
2262   }
2263 #pragma omp parallel for
2264   for (int i = 0; i < 10; ++i) {
2265 #pragma omp target enter data map(to: a)
2266     ++a;
2267   }
2268 #pragma omp parallel for
2269   for (int i = 0; i < 10; ++i) {
2270 #pragma omp target exit data map(from: a)
2271     ++a;
2272   }
2273 #pragma omp parallel for
2274   for (int i = 0; i < 10; ++i) {
2275 #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?}}
2276     ++a;
2277   }
2278 #pragma omp parallel for
2279   for (int i = 0; i < 10; ++i) {
2280 #pragma omp taskloop
2281   for (int i = 0; i < 10; ++i)
2282     ++a;
2283   }
2284 #pragma omp parallel for
2285   for (int i = 0; i < 10; ++i) {
2286 #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?}}
2287     for (int j = 0; j < 10; ++j)
2288       ;
2289   }
2290 #pragma omp parallel for
2291   for (int i = 0; i < 10; ++i) {
2292 #pragma omp target update to(a)
2293   }
2294 #pragma omp parallel for
2295   for (int i = 0; i < 10; ++i) {
2296 #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?}}
2297     for (int j = 0; j < 10; ++j)
2298       ;
2299   }
2300 #pragma omp parallel for
2301   for (int i = 0; i < 10; ++i) {
2302 #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?}}
2303     for (int j = 0; j < 10; ++j)
2304       ;
2305   }
2306 #pragma omp parallel for
2307   for (int i = 0; i < 10; ++i) {
2308 #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?}}
2309     for (int j = 0; j < 10; ++j)
2310       ;
2311   }
2312 #pragma omp parallel for
2313   for (int i = 0; i < 10; ++i) {
2314 #pragma omp target simd // OK
2315     for (int j = 0; j < 10; ++j)
2316       ;
2317   }
2318 #pragma omp parallel for
2319   for (int i = 0; i < 10; ++i) {
2320 #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?}}
2321     for (int j = 0; j < 10; ++j)
2322       ;
2323   }
2324 #pragma omp parallel for
2325   for (int i = 0; i < 10; ++i) {
2326 #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?}}
2327     for (int j = 0; j < 10; ++j)
2328       ;
2329   }
2330 #pragma omp parallel for
2331   for (int i = 0; i < 10; ++i) {
2332 #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?}}
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 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?}}
2339     for (int j = 0; j < 10; ++j)
2340       ;
2341   }
2342 
2343 // PARALLEL FOR SIMD DIRECTIVE
2344 #pragma omp parallel for simd
2345   for (int i = 0; i < 10; ++i) {
2346 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2347     for (int i = 0; i < 10; ++i)
2348       ;
2349   }
2350 #pragma omp parallel for simd
2351   for (int i = 0; i < 10; ++i) {
2352 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2353     for (int i = 0; i < 10; ++i)
2354       ;
2355   }
2356 #pragma omp parallel for simd
2357   for (int i = 0; i < 10; ++i) {
2358 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2359     for (int i = 0; i < 10; ++i)
2360       ;
2361   }
2362 #pragma omp parallel for simd
2363   for (int i = 0; i < 10; ++i) {
2364 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2365     for (int i = 0; i < 10; ++i)
2366       ;
2367   }
2368 #pragma omp parallel for simd
2369   for (int i = 0; i < 10; ++i) {
2370 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2371     {
2372       bar();
2373     }
2374   }
2375 #pragma omp parallel for simd
2376   for (int i = 0; i < 10; ++i) {
2377 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2378     {
2379       bar();
2380     }
2381   }
2382 #pragma omp parallel for simd
2383   for (int i = 0; i < 10; ++i) {
2384 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2385     {
2386       bar();
2387     }
2388   }
2389 
2390 #pragma omp parallel for simd
2391   for (int i = 0; i < 10; ++i) {
2392 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2393     {
2394       bar();
2395     }
2396   }
2397 
2398 #pragma omp parallel for simd
2399   for (int i = 0; i < 10; ++i) {
2400 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2401     {
2402       bar();
2403     }
2404   }
2405 
2406 #pragma omp parallel for simd
2407   for (int i = 0; i < 10; ++i) {
2408 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2409     {
2410 #pragma omp single
2411       {
2412         bar();
2413       }
2414 #pragma omp for
2415       for (int i = 0; i < 10; ++i)
2416         ;
2417 #pragma omp for simd
2418       for (int i = 0; i < 10; ++i)
2419         ;
2420 #pragma omp sections
2421       {
2422         bar();
2423       }
2424     }
2425   }
2426 #pragma omp parallel for simd
2427   for (int i = 0; i < 10; ++i) {
2428 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2429     for (int i = 0; i < 10; ++i)
2430       ;
2431   }
2432 #pragma omp parallel for simd
2433   for (int i = 0; i < 10; ++i) {
2434 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2435     for (int i = 0; i < 10; ++i)
2436       ;
2437   }
2438 #pragma omp parallel for simd
2439   for (int i = 0; i < 10; ++i) {
2440 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2441     {
2442       bar();
2443     }
2444   }
2445 #pragma omp parallel for simd
2446   for (int i = 0; i < 10; ++i) {
2447 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2448     {
2449       bar();
2450     }
2451   }
2452 #pragma omp parallel for simd
2453   for (int i = 0; i < 10; ++i) {
2454 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2455     bar();
2456   }
2457 #pragma omp parallel for simd
2458   for (int i = 0; i < 10; ++i) {
2459 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2460     bar();
2461   }
2462 #pragma omp parallel for simd
2463   for (int i = 0; i < 10; ++i) {
2464 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2465     bar();
2466   }
2467 #pragma omp parallel for simd
2468   for (int i = 0; i < 10; ++i) {
2469 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2470     bar();
2471   }
2472 #pragma omp parallel for simd
2473   for (int i = 0; i < 10; ++i) {
2474 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2475     bar();
2476   }
2477 #pragma omp parallel for simd
2478   for (int i = 0; i < 10; ++i) {
2479 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2480     bar();
2481   }
2482 #pragma omp parallel for simd
2483   for (int i = 0; i < 10; ++i) {
2484 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2485     ++a;
2486   }
2487 #pragma omp parallel for simd
2488   for (int i = 0; i < 10; ++i) {
2489 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2490     ++a;
2491   }
2492 #pragma omp parallel for simd
2493   for (int i = 0; i < 10; ++i) {
2494 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2495     ++a;
2496   }
2497 #pragma omp parallel for simd
2498   for (int i = 0; i < 10; ++i) {
2499 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2500     for (int i = 0; i < 10; ++i)
2501       ;
2502   }
2503 #pragma omp parallel for simd
2504   for (int i = 0; i < 10; ++i) {
2505 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2506     ++a;
2507   }
2508 #pragma omp parallel for simd
2509   for (int i = 0; i < 10; ++i) {
2510 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2511     ++a;
2512   }
2513 #pragma omp parallel for simd
2514   for (int i = 0; i < 10; ++i) {
2515 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2516     ++a;
2517   }
2518 #pragma omp parallel for simd
2519   for (int i = 0; i < 10; ++i) {
2520 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2521   for (int i = 0; i < 10; ++i)
2522     ++a;
2523   }
2524 #pragma omp parallel for simd
2525   for (int i = 0; i < 10; ++i) {
2526 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2527     for (int j = 0; j < 10; ++j)
2528       ;
2529   }
2530 #pragma omp parallel for simd
2531   for (int i = 0; i < 10; ++i) {
2532 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2533     bar();
2534   }
2535 #pragma omp parallel for simd
2536   for (int i = 0; i < 10; ++i) {
2537 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2538     for (int j = 0; j < 10; ++j)
2539       ;
2540   }
2541 #pragma omp parallel for simd
2542   for (int i = 0; i < 10; ++i) {
2543 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2544     for (int j = 0; j < 10; ++j)
2545       ;
2546   }
2547 #pragma omp parallel for simd
2548   for (int i = 0; i < 10; ++i) {
2549 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2550     for (int j = 0; j < 10; ++j)
2551       ;
2552   }
2553 #pragma omp parallel for simd
2554   for (int i = 0; i < 10; ++i) {
2555 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2556     for (int j = 0; j < 10; ++j)
2557       ;
2558   }
2559 #pragma omp parallel for simd
2560   for (int i = 0; i < 10; ++i) {
2561 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2562     for (int j = 0; j < 10; ++j)
2563       ;
2564   }
2565 #pragma omp parallel for simd
2566   for (int i = 0; i < 10; ++i) {
2567 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2568     for (int j = 0; j < 10; ++j)
2569       ;
2570   }
2571 #pragma omp parallel for simd
2572   for (int i = 0; i < 10; ++i) {
2573 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2574     for (int j = 0; j < 10; ++j)
2575       ;
2576   }
2577 #pragma omp parallel for simd
2578   for (int i = 0; i < 10; ++i) {
2579 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2580     for (int j = 0; j < 10; ++j)
2581       ;
2582   }
2583 
2584 // PARALLEL SECTIONS DIRECTIVE
2585 #pragma omp parallel sections
2586   {
2587 #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?}}
2588     for (int i = 0; i < 10; ++i)
2589       ;
2590   }
2591 #pragma omp parallel sections
2592   {
2593 #pragma omp simd
2594     for (int i = 0; i < 10; ++i)
2595       ;
2596   }
2597 #pragma omp parallel sections
2598   {
2599 #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?}}
2600     for (int i = 0; i < 10; ++i)
2601       ;
2602   }
2603 #pragma omp parallel sections
2604   {
2605 #pragma omp parallel
2606     for (int i = 0; i < 10; ++i)
2607       ;
2608   }
2609 #pragma omp parallel sections
2610   {
2611 #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?}}
2612     {
2613       bar();
2614     }
2615   }
2616 #pragma omp parallel sections
2617   {
2618 #pragma omp section
2619     {
2620       bar();
2621     }
2622   }
2623 #pragma omp parallel sections
2624   {
2625 #pragma omp section
2626     {
2627 #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?}}
2628       bar();
2629     }
2630   }
2631 #pragma omp parallel sections
2632   {
2633 #pragma omp section
2634     {
2635 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2636       bar();
2637     }
2638   }
2639 #pragma omp parallel sections
2640   {
2641 #pragma omp section
2642     {
2643 #pragma omp critical
2644       bar();
2645     }
2646   }
2647 #pragma omp parallel sections
2648   {
2649 #pragma omp parallel
2650     {
2651 #pragma omp single // OK
2652       {
2653         bar();
2654       }
2655 #pragma omp for // OK
2656       for (int i = 0; i < 10; ++i)
2657         ;
2658 #pragma omp for simd // OK
2659       for (int i = 0; i < 10; ++i)
2660         ;
2661 #pragma omp sections // OK
2662       {
2663         bar();
2664       }
2665     }
2666   }
2667 #pragma omp parallel sections
2668   {
2669 #pragma omp parallel for
2670     for (int i = 0; i < 10; ++i)
2671       ;
2672   }
2673 #pragma omp parallel sections
2674   {
2675 #pragma omp parallel for simd
2676     for (int i = 0; i < 10; ++i)
2677       ;
2678   }
2679 #pragma omp parallel sections
2680   {
2681 #pragma omp parallel sections
2682     {
2683       bar();
2684     }
2685   }
2686 #pragma omp parallel sections
2687   {
2688 #pragma omp task
2689     {
2690       bar();
2691     }
2692   }
2693 #pragma omp parallel sections
2694   {
2695 #pragma omp taskyield
2696   }
2697 #pragma omp parallel sections
2698   {
2699 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
2700   }
2701 #pragma omp parallel sections
2702   {
2703 #pragma omp taskwait
2704   }
2705 #pragma omp parallel sections
2706   {
2707 #pragma omp flush
2708   }
2709 #pragma omp parallel sections
2710   {
2711 #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?}}
2712     bar();
2713   }
2714 #pragma omp parallel sections
2715   {
2716 #pragma omp atomic
2717     ++a;
2718   }
2719 #pragma omp parallel sections
2720   {
2721 #pragma omp target
2722     ++a;
2723   }
2724 #pragma omp parallel sections
2725   {
2726 #pragma omp target parallel
2727     ++a;
2728   }
2729 #pragma omp parallel sections
2730   {
2731 #pragma omp target parallel for
2732     for (int i = 0; i < 10; ++i)
2733       ;
2734   }
2735 #pragma omp parallel sections
2736   {
2737 #pragma omp target enter data map(to: a)
2738   }
2739 #pragma omp parallel sections
2740   {
2741 #pragma omp target exit data map(from: a)
2742   }
2743 #pragma omp parallel sections
2744   {
2745 #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?}}
2746     ++a;
2747   }
2748 #pragma omp parallel sections
2749   {
2750 #pragma omp taskloop
2751   for (int i = 0; i < 10; ++i)
2752     ++a;
2753   }
2754 #pragma omp parallel sections
2755   {
2756 #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?}}
2757     for (int i = 0; i < 10; ++i)
2758       ;
2759   }
2760 #pragma omp parallel sections
2761   {
2762 #pragma omp target update to(a)
2763   }
2764 #pragma omp parallel sections
2765   {
2766 #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?}}
2767     for (int i = 0; i < 10; ++i)
2768       ;
2769   }
2770 #pragma omp parallel sections
2771   {
2772 #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?}}
2773     for (int i = 0; i < 10; ++i)
2774       ;
2775   }
2776 #pragma omp parallel sections
2777   {
2778 #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?}}
2779     for (int i = 0; i < 10; ++i)
2780       ;
2781   }
2782 #pragma omp parallel sections
2783   {
2784 #pragma omp target simd // OK
2785     for (int i = 0; i < 10; ++i)
2786       ;
2787   }
2788 #pragma omp parallel sections
2789   {
2790 #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?}}
2791     for (int i = 0; i < 10; ++i)
2792       ;
2793   }
2794 #pragma omp parallel sections
2795   {
2796 #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?}}
2797     for (int i = 0; i < 10; ++i)
2798       ;
2799   }
2800 #pragma omp parallel sections
2801   {
2802 #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?}}
2803     for (int i = 0; i < 10; ++i)
2804       ;
2805   }
2806 #pragma omp parallel sections
2807   {
2808 #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?}}
2809     for (int i = 0; i < 10; ++i)
2810       ;
2811   }
2812 
2813 // TASK DIRECTIVE
2814 #pragma omp task
2815 #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?}}
2816   for (int i = 0; i < 10; ++i)
2817     ;
2818 #pragma omp task
2819 #pragma omp simd
2820   for (int i = 0; i < 10; ++i)
2821     ;
2822 #pragma omp task
2823 #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?}}
2824   for (int i = 0; i < 10; ++i)
2825     ;
2826 #pragma omp task
2827 #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?}}
2828   {
2829     bar();
2830   }
2831 #pragma omp task
2832 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
2833   {
2834     bar();
2835   }
2836 #pragma omp task
2837 #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?}}
2838   bar();
2839 #pragma omp task
2840 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
2841   bar();
2842 #pragma omp task
2843 #pragma omp critical
2844   bar();
2845 
2846 #pragma omp task
2847 #pragma omp parallel for
2848   for (int i = 0; i < 10; ++i)
2849     ;
2850 #pragma omp task
2851 #pragma omp parallel for simd
2852   for (int i = 0; i < 10; ++i)
2853     ;
2854 #pragma omp task
2855 #pragma omp parallel sections
2856   {
2857     bar();
2858   }
2859 #pragma omp task
2860 #pragma omp task
2861   {
2862     bar();
2863   }
2864 #pragma omp task
2865   {
2866 #pragma omp taskyield
2867     bar();
2868   }
2869 #pragma omp task
2870   {
2871 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
2872     bar();
2873   }
2874 #pragma omp task
2875   {
2876 #pragma omp taskwait
2877     bar();
2878   }
2879 #pragma omp task
2880   {
2881 #pragma omp flush
2882     bar();
2883   }
2884 #pragma omp task
2885   {
2886 #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?}}
2887     bar();
2888   }
2889 #pragma omp task
2890   {
2891 #pragma omp atomic
2892     ++a;
2893   }
2894 #pragma omp task
2895   {
2896 #pragma omp target
2897     ++a;
2898   }
2899 #pragma omp task
2900   {
2901 #pragma omp target parallel
2902     ++a;
2903   }
2904 #pragma omp task
2905 #pragma omp target parallel for
2906   for (int i = 0; i < 10; ++i)
2907     ;
2908 #pragma omp task
2909   {
2910 #pragma omp target enter data map(to: a)
2911     ++a;
2912   }
2913 #pragma omp task
2914   {
2915 #pragma omp target exit data map(from: a)
2916     ++a;
2917   }
2918 #pragma omp task
2919   {
2920 #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?}}
2921     ++a;
2922   }
2923 #pragma omp task
2924   {
2925 #pragma omp taskloop
2926   for (int i = 0; i < 10; ++i)
2927     ++a;
2928   }
2929 #pragma omp task
2930   {
2931 #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?}}
2932     for (int i = 0; i < 10; ++i)
2933       ;
2934   }
2935 #pragma omp task
2936   {
2937 #pragma omp target update to(a)
2938     bar();
2939   }
2940 #pragma omp task
2941   {
2942 #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?}}
2943     for (int i = 0; i < 10; ++i)
2944       ;
2945   }
2946 #pragma omp task
2947   {
2948 #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?}}
2949     for (int i = 0; i < 10; ++i)
2950       ;
2951   }
2952 #pragma omp task
2953   {
2954 #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?}}
2955     for (int i = 0; i < 10; ++i)
2956       ;
2957   }
2958 #pragma omp task
2959   {
2960 #pragma omp target simd // OK
2961     for (int i = 0; i < 10; ++i)
2962       ;
2963   }
2964 #pragma omp task
2965   {
2966 #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?}}
2967     for (int i = 0; i < 10; ++i)
2968       ;
2969   }
2970 #pragma omp task
2971   {
2972 #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?}}
2973     for (int i = 0; i < 10; ++i)
2974       ;
2975   }
2976 #pragma omp task
2977   {
2978 #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?}}
2979     for (int i = 0; i < 10; ++i)
2980       ;
2981   }
2982 #pragma omp task
2983   {
2984 #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?}}
2985     for (int i = 0; i < 10; ++i)
2986       ;
2987   }
2988 
2989 // ORDERED DIRECTIVE
2990 #pragma omp ordered
2991   {
2992 #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?}}
2993     for (int i = 0; i < 10; ++i)
2994       ;
2995   }
2996 #pragma omp ordered
2997   {
2998 #pragma omp simd
2999     for (int i = 0; i < 10; ++i)
3000       ;
3001   }
3002 #pragma omp ordered
3003   {
3004 #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?}}
3005     for (int i = 0; i < 10; ++i)
3006       ;
3007   }
3008 #pragma omp ordered
3009   {
3010 #pragma omp parallel
3011     for (int i = 0; i < 10; ++i)
3012       ;
3013   }
3014 #pragma omp ordered
3015   {
3016 #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?}}
3017     {
3018       bar();
3019     }
3020   }
3021 #pragma omp ordered
3022   {
3023 #pragma omp master // OK, though second 'ordered' is redundant
3024     {
3025       bar();
3026     }
3027   }
3028 #pragma omp ordered
3029   {
3030 #pragma omp critical
3031     {
3032       bar();
3033     }
3034   }
3035 #pragma omp ordered
3036   {
3037 #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?}}
3038     {
3039       bar();
3040     }
3041   }
3042 #pragma omp ordered
3043   {
3044 #pragma omp parallel for ordered
3045     for (int j = 0; j < 10; ++j) {
3046 #pragma omp ordered // OK
3047       {
3048         bar();
3049       }
3050     }
3051   }
3052 #pragma omp ordered
3053   {
3054 #pragma omp parallel for simd ordered
3055     for (int j = 0; j < 10; ++j) {
3056 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3057       {
3058         bar();
3059       }
3060     }
3061   }
3062 #pragma omp ordered
3063   {
3064 #pragma omp parallel for simd ordered
3065     for (int j = 0; j < 10; ++j) {
3066 #pragma omp ordered simd
3067       {
3068         bar();
3069       }
3070     }
3071   }
3072 #pragma omp ordered
3073   {
3074 #pragma omp parallel for
3075     for (int i = 0; i < 10; ++i)
3076       ;
3077   }
3078 #pragma omp ordered
3079   {
3080 #pragma omp parallel for simd
3081     for (int i = 0; i < 10; ++i)
3082       ;
3083   }
3084 #pragma omp ordered
3085   {
3086 #pragma omp parallel sections
3087     {
3088       bar();
3089     }
3090   }
3091 #pragma omp ordered
3092   {
3093 #pragma omp task
3094     {
3095       bar();
3096     }
3097   }
3098 #pragma omp ordered
3099   {
3100 #pragma omp taskyield
3101     bar();
3102   }
3103 #pragma omp ordered
3104   {
3105 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3106     bar();
3107   }
3108 #pragma omp ordered
3109   {
3110 #pragma omp taskwait
3111     bar();
3112   }
3113 #pragma omp ordered
3114   {
3115 #pragma omp flush
3116     bar();
3117   }
3118 #pragma omp ordered
3119   {
3120 #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?}}
3121     bar();
3122   }
3123 #pragma omp ordered
3124   {
3125 #pragma omp atomic
3126     ++a;
3127   }
3128 #pragma omp ordered
3129   {
3130 #pragma omp target
3131     ++a;
3132   }
3133 #pragma omp ordered
3134   {
3135 #pragma omp target parallel
3136     ++a;
3137   }
3138 #pragma omp ordered
3139   {
3140 #pragma omp target parallel for ordered
3141     for (int j = 0; j < 10; ++j) {
3142 #pragma omp ordered // OK
3143       {
3144         bar();
3145       }
3146     }
3147   }
3148 #pragma omp ordered
3149   {
3150 #pragma omp target parallel for
3151     for (int i = 0; i < 10; ++i)
3152       ;
3153   }
3154 #pragma omp ordered
3155   {
3156 #pragma omp target enter data map(to: a)
3157     ++a;
3158   }
3159 #pragma omp ordered
3160   {
3161 #pragma omp target exit data map(from: a)
3162     ++a;
3163   }
3164 #pragma omp ordered
3165   {
3166 #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?}}
3167     ++a;
3168   }
3169 #pragma omp ordered
3170   {
3171 #pragma omp taskloop
3172   for (int i = 0; i < 10; ++i)
3173     ++a;
3174   }
3175 #pragma omp ordered
3176   {
3177 #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?}}
3178     for (int i = 0; i < 10; ++i)
3179       ;
3180   }
3181 #pragma omp ordered
3182   {
3183     bar();
3184 #pragma omp target update to(a)
3185     bar();
3186   }
3187 #pragma omp ordered
3188   {
3189 #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?}}
3190     for (int i = 0; i < 10; ++i)
3191       ;
3192   }
3193 #pragma omp ordered
3194   {
3195 #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?}}
3196     for (int i = 0; i < 10; ++i)
3197       ;
3198   }
3199 #pragma omp ordered
3200   {
3201 #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?}}
3202     for (int i = 0; i < 10; ++i)
3203       ;
3204   }
3205 #pragma omp ordered
3206   {
3207 #pragma omp target simd // OK
3208     for (int i = 0; i < 10; ++i)
3209       ;
3210   }
3211 #pragma omp ordered
3212   {
3213 #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?}}
3214     for (int i = 0; i < 10; ++i)
3215       ;
3216   }
3217 #pragma omp ordered
3218   {
3219 #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?}}
3220     for (int i = 0; i < 10; ++i)
3221       ;
3222   }
3223 #pragma omp ordered
3224   {
3225 #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?}}
3226     for (int i = 0; i < 10; ++i)
3227       ;
3228   }
3229 #pragma omp ordered
3230   {
3231 #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?}}
3232     for (int i = 0; i < 10; ++i)
3233       ;
3234   }
3235 
3236 // ATOMIC DIRECTIVE
3237 #pragma omp atomic
3238   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3239   // expected-note@+1 {{expected an expression statement}}
3240   {
3241 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3242     for (int i = 0; i < 10; ++i)
3243       ;
3244   }
3245 #pragma omp atomic
3246   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3247   // expected-note@+1 {{expected an expression statement}}
3248   {
3249 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3250     for (int i = 0; i < 10; ++i)
3251       ;
3252   }
3253 #pragma omp atomic
3254   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3255   // expected-note@+1 {{expected an expression statement}}
3256   {
3257 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3258     for (int i = 0; i < 10; ++i)
3259       ;
3260   }
3261 #pragma omp atomic
3262   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3263   // expected-note@+1 {{expected an expression statement}}
3264   {
3265 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3266     for (int i = 0; i < 10; ++i)
3267       ;
3268   }
3269 #pragma omp atomic
3270   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3271   // expected-note@+1 {{expected an expression statement}}
3272   {
3273 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3274     {
3275       bar();
3276     }
3277   }
3278 #pragma omp atomic
3279   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3280   // expected-note@+1 {{expected an expression statement}}
3281   {
3282 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3283     {
3284       bar();
3285     }
3286   }
3287 #pragma omp atomic
3288   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3289   // expected-note@+1 {{expected an expression statement}}
3290   {
3291 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3292     {
3293       bar();
3294     }
3295   }
3296 #pragma omp atomic
3297   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3298   // expected-note@+1 {{expected an expression statement}}
3299   {
3300 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3301     {
3302       bar();
3303     }
3304   }
3305 #pragma omp atomic
3306   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3307   // expected-note@+1 {{expected an expression statement}}
3308   {
3309 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3310     {
3311       bar();
3312     }
3313   }
3314 #pragma omp atomic
3315   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3316   // expected-note@+1 {{expected an expression statement}}
3317   {
3318 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3319     for (int i = 0; i < 10; ++i)
3320       ;
3321   }
3322 #pragma omp atomic
3323   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3324   // expected-note@+1 {{expected an expression statement}}
3325   {
3326 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3327     for (int i = 0; i < 10; ++i)
3328       ;
3329   }
3330 #pragma omp atomic
3331   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3332   // expected-note@+1 {{expected an expression statement}}
3333   {
3334 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3335     {
3336       bar();
3337     }
3338   }
3339 #pragma omp atomic
3340   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3341   // expected-note@+1 {{expected an expression statement}}
3342   {
3343 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3344     {
3345       bar();
3346     }
3347   }
3348 #pragma omp atomic
3349   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3350   // expected-note@+1 {{expected an expression statement}}
3351   {
3352 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3353     bar();
3354   }
3355 #pragma omp atomic
3356   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3357   // expected-note@+1 {{expected an expression statement}}
3358   {
3359 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3360     bar();
3361   }
3362 #pragma omp atomic
3363   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3364   // expected-note@+1 {{expected an expression statement}}
3365   {
3366 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3367     bar();
3368   }
3369 #pragma omp atomic
3370   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3371   // expected-note@+1 {{expected an expression statement}}
3372   {
3373 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3374     bar();
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 ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3381     bar();
3382   }
3383 #pragma omp atomic
3384   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3385   // expected-note@+1 {{expected an expression statement}}
3386   {
3387 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3388     ++a;
3389   }
3390 #pragma omp atomic
3391   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3392   // expected-note@+1 {{expected an expression statement}}
3393   {
3394 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3395     ++a;
3396   }
3397 #pragma omp atomic
3398   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3399   // expected-note@+1 {{expected an expression statement}}
3400   {
3401 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3402     ++a;
3403   }
3404 #pragma omp atomic
3405   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3406   // expected-note@+1 {{expected an expression statement}}
3407   {
3408 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3409     for (int i = 0; i < 10; ++i)
3410       ;
3411   }
3412 #pragma omp atomic
3413   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3414   // expected-note@+1 {{expected an expression statement}}
3415   {
3416 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3417     ++a;
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 target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3424     ++a;
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 teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3431     ++a;
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 taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3438   for (int i = 0; i < 10; ++i)
3439     ++a;
3440   }
3441 #pragma omp atomic
3442   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3443   // expected-note@+1 {{expected an expression statement}}
3444   {
3445 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3446     for (int i = 0; i < 10; ++i)
3447       ;
3448   }
3449 #pragma omp atomic
3450   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3451   // expected-note@+1 {{expected an expression statement}}
3452   {
3453 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3454     bar();
3455   }
3456 #pragma omp atomic
3457   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3458   // expected-note@+1 {{expected an expression statement}}
3459   {
3460 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3461     for (int i = 0; i < 10; ++i)
3462       ;
3463   }
3464 #pragma omp atomic
3465   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3466   // expected-note@+1 {{expected an expression statement}}
3467   {
3468 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3469     for (int i = 0; i < 10; ++i)
3470       ;
3471   }
3472 #pragma omp atomic
3473   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3474   // expected-note@+1 {{expected an expression statement}}
3475   {
3476 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3477     for (int i = 0; i < 10; ++i)
3478       ;
3479   }
3480 #pragma omp atomic
3481   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3482   // expected-note@+1 {{expected an expression statement}}
3483   {
3484 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3485     for (int i = 0; i < 10; ++i)
3486       ;
3487   }
3488 #pragma omp atomic
3489   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3490   // expected-note@+1 {{expected an expression statement}}
3491   {
3492 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3493     for (int i = 0; i < 10; ++i)
3494       ;
3495   }
3496 #pragma omp atomic
3497   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3498   // expected-note@+1 {{expected an expression statement}}
3499   {
3500 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3501     for (int i = 0; i < 10; ++i)
3502       ;
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 teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3509     for (int i = 0; i < 10; ++i)
3510       ;
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 teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3517     for (int i = 0; i < 10; ++i)
3518       ;
3519   }
3520 
3521 // TARGET DIRECTIVE
3522 #pragma omp target
3523 #pragma omp parallel
3524   bar();
3525 #pragma omp target
3526 #pragma omp for
3527   for (int i = 0; i < 10; ++i)
3528     ;
3529 #pragma omp target
3530 #pragma omp simd
3531   for (int i = 0; i < 10; ++i)
3532     ;
3533 #pragma omp target
3534 #pragma omp for simd
3535   for (int i = 0; i < 10; ++i)
3536     ;
3537 #pragma omp target
3538 #pragma omp sections
3539   {
3540     bar();
3541   }
3542 #pragma omp target
3543 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3544   {
3545     bar();
3546   }
3547 #pragma omp target
3548 #pragma omp single
3549   bar();
3550 
3551 #pragma omp target
3552 #pragma omp master
3553   {
3554     bar();
3555   }
3556 #pragma omp target
3557 #pragma omp critical
3558   {
3559     bar();
3560   }
3561 #pragma omp target
3562 #pragma omp parallel for
3563   for (int i = 0; i < 10; ++i)
3564     ;
3565 #pragma omp target
3566 #pragma omp parallel for simd
3567   for (int i = 0; i < 10; ++i)
3568     ;
3569 #pragma omp target
3570 #pragma omp parallel sections
3571   {
3572     bar();
3573   }
3574 #pragma omp target
3575 #pragma omp task
3576   {
3577     bar();
3578   }
3579 #pragma omp target
3580   {
3581 #pragma omp taskyield
3582     bar();
3583   }
3584 #pragma omp target
3585   {
3586 #pragma omp barrier
3587     bar();
3588   }
3589 #pragma omp target
3590   {
3591 #pragma omp taskwait
3592     bar();
3593   }
3594 #pragma omp target
3595   {
3596 #pragma omp flush
3597     bar();
3598   }
3599 #pragma omp target
3600   {
3601 #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?}}
3602     bar();
3603   }
3604 #pragma omp target
3605   {
3606 #pragma omp atomic
3607     ++a;
3608   }
3609 #pragma omp target
3610   {
3611 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
3612     ++a;
3613   }
3614 #pragma omp target
3615   {
3616 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
3617     ++a;
3618   }
3619 #pragma omp target
3620 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
3621   for (int i = 0; i < 10; ++i)
3622     ;
3623 #pragma omp target
3624   {
3625 #pragma omp teams
3626     ++a;
3627   }
3628 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3629   {
3630     ++a;           // expected-note {{statement outside teams construct here}}
3631 #pragma omp teams  // expected-note {{nested teams construct here}}
3632     ++a;
3633   }
3634 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3635   {
3636     while (0)      // expected-note {{statement outside teams construct here}}
3637 #pragma omp teams  // expected-note {{nested teams construct here}}
3638     ++a;
3639   }
3640 #pragma omp target
3641   {
3642 #pragma omp taskloop
3643   for (int i = 0; i < 10; ++i)
3644     ++a;
3645   }
3646 #pragma omp target
3647   {
3648 #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?}}
3649     for (int i = 0; i < 10; ++i)
3650       ;
3651   }
3652 #pragma omp target
3653   {
3654 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
3655   }
3656 #pragma omp target
3657   {
3658 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
3659   }
3660 #pragma omp target
3661   {
3662 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
3663   }
3664 #pragma omp target
3665   {
3666 #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?}}
3667     for (int i = 0; i < 10; ++i)
3668       ;
3669   }
3670 #pragma omp target
3671   {
3672 #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?}}
3673     for (int i = 0; i < 10; ++i)
3674       ;
3675   }
3676 #pragma omp target
3677   {
3678 #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?}}
3679     for (int i = 0; i < 10; ++i)
3680       ;
3681   }
3682 #pragma omp target
3683   {
3684 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
3685     for (int i = 0; i < 10; ++i)
3686       ;
3687   }
3688 #pragma omp target
3689   {
3690 #pragma omp teams distribute // OK
3691     for (int i = 0; i < 10; ++i)
3692       ;
3693   }
3694 #pragma omp target
3695   {
3696 #pragma omp teams distribute simd // OK
3697     for (int i = 0; i < 10; ++i)
3698       ;
3699   }
3700 #pragma omp target
3701   {
3702 #pragma omp teams distribute parallel for simd // OK
3703     for (int i = 0; i < 10; ++i)
3704       ;
3705   }
3706 #pragma omp target
3707   {
3708 #pragma omp teams distribute parallel for // OK
3709     for (int i = 0; i < 10; ++i)
3710       ;
3711   }
3712 
3713 // TARGET PARALLEL DIRECTIVE
3714 #pragma omp target parallel
3715 #pragma omp parallel
3716   bar();
3717 #pragma omp target parallel
3718 #pragma omp for
3719   for (int i = 0; i < 10; ++i)
3720     ;
3721 #pragma omp target parallel
3722 #pragma omp simd
3723   for (int i = 0; i < 10; ++i)
3724     ;
3725 #pragma omp target parallel
3726 #pragma omp for simd
3727   for (int i = 0; i < 10; ++i)
3728     ;
3729 #pragma omp target parallel
3730 #pragma omp sections
3731   {
3732     bar();
3733   }
3734 #pragma omp target parallel
3735 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
3736   {
3737     bar();
3738   }
3739 #pragma omp target parallel
3740 #pragma omp single
3741   bar();
3742 
3743 #pragma omp target parallel
3744 #pragma omp master
3745   {
3746     bar();
3747   }
3748 #pragma omp target parallel
3749 #pragma omp critical
3750   {
3751     bar();
3752   }
3753 #pragma omp target parallel
3754 #pragma omp parallel for
3755   for (int i = 0; i < 10; ++i)
3756     ;
3757 #pragma omp target parallel
3758 #pragma omp parallel for simd
3759   for (int i = 0; i < 10; ++i)
3760     ;
3761 #pragma omp target parallel
3762 #pragma omp parallel sections
3763   {
3764     bar();
3765   }
3766 #pragma omp target parallel
3767 #pragma omp task
3768   {
3769     bar();
3770   }
3771 #pragma omp target parallel
3772   {
3773 #pragma omp taskyield
3774     bar();
3775   }
3776 #pragma omp target parallel
3777   {
3778 #pragma omp barrier
3779     bar();
3780   }
3781 #pragma omp target parallel
3782   {
3783 #pragma omp taskwait
3784     bar();
3785   }
3786 #pragma omp target parallel
3787   {
3788 #pragma omp flush
3789     bar();
3790   }
3791 #pragma omp target parallel
3792   {
3793 #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?}}
3794     bar();
3795   }
3796 #pragma omp target parallel
3797   {
3798 #pragma omp atomic
3799     ++a;
3800   }
3801 #pragma omp target parallel
3802   {
3803 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
3804     ++a;
3805   }
3806 #pragma omp target parallel
3807   {
3808 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
3809     ++a;
3810   }
3811 #pragma omp target parallel
3812 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
3813   for (int i = 0; i < 10; ++i)
3814     ;
3815 #pragma omp target parallel
3816   {
3817 #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?}}
3818     ++a;
3819   }
3820 #pragma omp target parallel
3821   {
3822     ++a;
3823 #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?}}
3824     ++a;
3825   }
3826 #pragma omp target parallel
3827   {
3828 #pragma omp taskloop
3829   for (int i = 0; i < 10; ++i)
3830     ++a;
3831   }
3832 #pragma omp target parallel
3833   {
3834 #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?}}
3835     for (int i = 0; i < 10; ++i)
3836       ;
3837   }
3838 #pragma omp target parallel
3839   {
3840 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3841   }
3842 #pragma omp target parallel
3843   {
3844 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3845   }
3846 #pragma omp target parallel
3847   {
3848 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3849   }
3850 #pragma omp target parallel
3851   {
3852 #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?}}
3853     for (int i = 0; i < 10; ++i)
3854       ;
3855   }
3856 #pragma omp target parallel
3857   {
3858 #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?}}
3859     for (int i = 0; i < 10; ++i)
3860       ;
3861   }
3862 #pragma omp target parallel
3863   {
3864 #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?}}
3865     for (int i = 0; i < 10; ++i)
3866       ;
3867   }
3868 #pragma omp target parallel
3869   {
3870 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
3871     for (int i = 0; i < 10; ++i)
3872       ;
3873   }
3874 #pragma omp target parallel
3875   {
3876 #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?}}
3877     for (int i = 0; i < 10; ++i)
3878       ;
3879   }
3880 #pragma omp target parallel
3881   {
3882 #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?}}
3883     for (int i = 0; i < 10; ++i)
3884       ;
3885   }
3886 #pragma omp target parallel
3887   {
3888 #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?}}
3889     for (int i = 0; i < 10; ++i)
3890       ;
3891   }
3892 #pragma omp target parallel
3893   {
3894 #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?}}
3895     for (int i = 0; i < 10; ++i)
3896       ;
3897   }
3898 
3899 // TARGET PARALLEL FOR DIRECTIVE
3900 #pragma omp target parallel for
3901   for (int i = 0; i < 10; ++i) {
3902 #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?}}
3903     for (int i = 0; i < 10; ++i)
3904       ;
3905   }
3906 #pragma omp target parallel for
3907   for (int i = 0; i < 10; ++i) {
3908 #pragma omp simd
3909     for (int i = 0; i < 10; ++i)
3910       ;
3911   }
3912 #pragma omp target parallel for
3913   for (int i = 0; i < 10; ++i) {
3914 #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?}}
3915     for (int i = 0; i < 10; ++i)
3916       ;
3917   }
3918 #pragma omp target parallel for
3919   for (int i = 0; i < 10; ++i) {
3920 #pragma omp parallel
3921     for (int i = 0; i < 10; ++i)
3922       ;
3923   }
3924 #pragma omp target parallel for
3925   for (int i = 0; i < 10; ++i) {
3926 #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?}}
3927     {
3928       bar();
3929     }
3930   }
3931 #pragma omp target parallel for
3932   for (int i = 0; i < 10; ++i) {
3933 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
3934     {
3935       bar();
3936     }
3937   }
3938 #pragma omp target parallel for
3939   for (int i = 0; i < 10; ++i) {
3940 #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?}}
3941     {
3942       bar();
3943     }
3944   }
3945 
3946 #pragma omp target parallel for
3947   for (int i = 0; i < 10; ++i) {
3948 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
3949     {
3950       bar();
3951     }
3952   }
3953 
3954 #pragma omp target parallel for
3955   for (int i = 0; i < 10; ++i) {
3956 #pragma omp critical
3957     {
3958       bar();
3959     }
3960   }
3961 
3962 #pragma omp target parallel for
3963   for (int i = 0; i < 10; ++i) {
3964 #pragma omp parallel
3965     {
3966 #pragma omp single // OK
3967       {
3968         bar();
3969       }
3970 #pragma omp for // OK
3971       for (int i = 0; i < 10; ++i)
3972         ;
3973 #pragma omp for simd // OK
3974       for (int i = 0; i < 10; ++i)
3975         ;
3976 #pragma omp sections // OK
3977       {
3978         bar();
3979       }
3980     }
3981   }
3982 #pragma omp target parallel for
3983   for (int i = 0; i < 10; ++i) {
3984 #pragma omp parallel for
3985     for (int i = 0; i < 10; ++i)
3986       ;
3987   }
3988 #pragma omp target parallel for
3989   for (int i = 0; i < 10; ++i) {
3990 #pragma omp parallel for simd
3991     for (int i = 0; i < 10; ++i)
3992       ;
3993   }
3994 #pragma omp target parallel for
3995   for (int i = 0; i < 10; ++i) {
3996 #pragma omp parallel sections
3997     {
3998       bar();
3999     }
4000   }
4001 #pragma omp target parallel for
4002   for (int i = 0; i < 10; ++i) {
4003 #pragma omp task
4004     {
4005       bar();
4006     }
4007   }
4008 #pragma omp target parallel for
4009   for (int i = 0; i < 10; ++i) {
4010 #pragma omp taskyield
4011     bar();
4012   }
4013 #pragma omp target parallel for
4014   for (int i = 0; i < 10; ++i) {
4015 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4016     bar();
4017   }
4018 #pragma omp target parallel for
4019   for (int i = 0; i < 10; ++i) {
4020 #pragma omp taskwait
4021     bar();
4022   }
4023 #pragma omp target parallel for
4024   for (int i = 0; i < 10; ++i) {
4025 #pragma omp flush
4026     bar();
4027   }
4028 #pragma omp target parallel for
4029   for (int i = 0; i < 10; ++i) {
4030 #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?}}
4031     bar();
4032   }
4033 #pragma omp target parallel for ordered
4034   for (int i = 0; i < 10; ++i) {
4035 #pragma omp ordered // OK
4036     bar();
4037   }
4038 #pragma omp target parallel for
4039   for (int i = 0; i < 10; ++i) {
4040 #pragma omp atomic
4041     ++a;
4042   }
4043 #pragma omp target parallel for
4044   for (int i = 0; i < 10; ++i) {
4045 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
4046     ++a;
4047   }
4048 #pragma omp target parallel for
4049   for (int i = 0; i < 10; ++i) {
4050 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
4051     ++a;
4052   }
4053 #pragma omp target parallel for
4054   for (int i = 0; i < 10; ++i) {
4055 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4056     for (int i = 0; i < 10; ++i)
4057       ;
4058   }
4059 #pragma omp target parallel for
4060   for (int i = 0; i < 10; ++i) {
4061 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4062     ++a;
4063   }
4064 #pragma omp target parallel for
4065   for (int i = 0; i < 10; ++i) {
4066 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4067     ++a;
4068   }
4069 #pragma omp target parallel for
4070   for (int i = 0; i < 10; ++i) {
4071 #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?}}
4072     ++a;
4073   }
4074 #pragma omp target parallel for
4075   for (int i = 0; i < 10; ++i) {
4076 #pragma omp taskloop
4077   for (int i = 0; i < 10; ++i)
4078     ++a;
4079   }
4080 #pragma omp target parallel for
4081   for (int i = 0; i < 10; ++i) {
4082 #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?}}
4083     for (int j = 0; j < 10; ++j)
4084       ;
4085   }
4086 #pragma omp target parallel for
4087   for (int i = 0; i < 10; ++i) {
4088 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4089   }
4090 #pragma omp target parallel for
4091   for (int i = 0; i < 10; ++i) {
4092 #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?}}
4093     for (int j = 0; j < 10; ++j)
4094       ;
4095   }
4096 #pragma omp target parallel for
4097   for (int i = 0; i < 10; ++i) {
4098 #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?}}
4099     for (int j = 0; j < 10; ++j)
4100       ;
4101   }
4102 #pragma omp target parallel for
4103   for (int i = 0; i < 10; ++i) {
4104 #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?}}
4105     for (int j = 0; j < 10; ++j)
4106       ;
4107   }
4108 #pragma omp target parallel for
4109   for (int i = 0; i < 10; ++i) {
4110 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4111     for (int j = 0; j < 10; ++j)
4112       ;
4113   }
4114 #pragma omp target parallel for
4115   for (int i = 0; i < 10; ++i) {
4116 #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?}}
4117     for (int j = 0; j < 10; ++j)
4118       ;
4119   }
4120 #pragma omp target parallel for
4121   for (int i = 0; i < 10; ++i) {
4122 #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?}}
4123     for (int j = 0; j < 10; ++j)
4124       ;
4125   }
4126 #pragma omp target parallel for
4127   for (int i = 0; i < 10; ++i) {
4128 #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?}}
4129     for (int j = 0; j < 10; ++j)
4130       ;
4131   }
4132 #pragma omp target parallel for
4133   for (int i = 0; i < 10; ++i) {
4134 #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?}}
4135     for (int j = 0; j < 10; ++j)
4136       ;
4137   }
4138 
4139 // TEAMS DIRECTIVE
4140 #pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
4141   bar();
4142 #pragma omp target
4143 #pragma omp teams
4144 #pragma omp parallel
4145   bar();
4146 #pragma omp target
4147 #pragma omp teams
4148 #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?}}
4149   for (int i = 0; i < 10; ++i)
4150     ;
4151 #pragma omp target
4152 #pragma omp teams
4153 #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?}}
4154   for (int i = 0; i < 10; ++i)
4155     ;
4156 #pragma omp target
4157 #pragma omp teams
4158 #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?}}
4159   for (int i = 0; i < 10; ++i)
4160     ;
4161 #pragma omp target
4162 #pragma omp teams
4163 #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?}}
4164   {
4165     bar();
4166   }
4167 #pragma omp target
4168 #pragma omp teams
4169 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
4170   {
4171     bar();
4172   }
4173 #pragma omp target
4174 #pragma omp teams
4175 #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?}}
4176   bar();
4177 
4178 #pragma omp target
4179 #pragma omp teams
4180 #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?}}
4181   {
4182     bar();
4183   }
4184 #pragma omp target
4185 #pragma omp teams
4186 #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?}}
4187   {
4188     bar();
4189   }
4190 #pragma omp target
4191 #pragma omp teams
4192 #pragma omp parallel for
4193   for (int i = 0; i < 10; ++i)
4194     ;
4195 #pragma omp target
4196 #pragma omp teams
4197 #pragma omp parallel for simd
4198   for (int i = 0; i < 10; ++i)
4199     ;
4200 #pragma omp target
4201 #pragma omp teams
4202 #pragma omp parallel sections
4203   {
4204     bar();
4205   }
4206 #pragma omp target
4207 #pragma omp teams
4208 #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?}}
4209   {
4210     bar();
4211   }
4212 #pragma omp target
4213 #pragma omp teams
4214   {
4215 #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?}}
4216     bar();
4217   }
4218 #pragma omp target
4219 #pragma omp teams
4220   {
4221 #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?}}
4222     bar();
4223   }
4224 #pragma omp target
4225 #pragma omp teams
4226   {
4227 #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?}}
4228     bar();
4229   }
4230 #pragma omp target
4231 #pragma omp teams
4232   {
4233 #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?}}
4234     bar();
4235   }
4236 #pragma omp target
4237 #pragma omp teams
4238   {
4239 #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?}}
4240     bar();
4241   }
4242 #pragma omp target
4243 #pragma omp teams
4244   {
4245 #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?}}
4246     ++a;
4247   }
4248 #pragma omp target
4249 #pragma omp teams
4250   {
4251 #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}}
4252     ++a;
4253   }
4254 #pragma omp target
4255 #pragma omp teams
4256   {
4257 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4258     ++a;
4259   }
4260 #pragma omp target
4261 #pragma omp teams
4262 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4263   for (int i = 0; i < 10; ++i)
4264     ;
4265 #pragma omp target
4266 #pragma omp teams
4267   {
4268 #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
4269     ++a;
4270   }
4271 #pragma omp target
4272 #pragma omp teams
4273   {
4274 #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}}
4275     ++a;
4276   }
4277 #pragma omp target
4278 #pragma omp teams
4279   {
4280 #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?}}
4281     ++a;
4282   }
4283 #pragma omp target
4284 #pragma omp teams
4285   {
4286 #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?}}
4287   for (int i = 0; i < 10; ++i)
4288     ++a;
4289   }
4290 #pragma omp target
4291 #pragma omp teams
4292 #pragma omp distribute
4293   for (int i = 0; i < 10; ++i)
4294     ;
4295 #pragma omp target
4296 #pragma omp teams
4297 #pragma omp distribute
4298   for (int i = 0; i < 10; ++i)
4299     ;
4300 #pragma omp distribute
4301   for (int j = 0; j < 10; ++j)
4302     ;
4303 #pragma omp target
4304 #pragma omp teams
4305   {
4306 #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}}
4307   }
4308 #pragma omp target
4309 #pragma omp teams
4310   {
4311 #pragma omp distribute parallel for
4312   for (int i = 0; i < 10; ++i)
4313     ;
4314 #pragma omp distribute parallel for
4315   for (int j = 0; j < 10; ++j)
4316     ;
4317   }
4318 #pragma omp target
4319 #pragma omp teams
4320   {
4321 #pragma omp distribute parallel for simd
4322   for (int i = 0; i < 10; ++i)
4323     ;
4324 #pragma omp distribute parallel for simd
4325   for (int j = 0; j < 10; ++j)
4326     ;
4327   }
4328 #pragma omp target
4329 #pragma omp teams
4330   {
4331 #pragma omp distribute simd
4332   for (int i = 0; i < 10; ++i)
4333     ;
4334 #pragma omp distribute simd
4335   for (int j = 0; j < 10; ++j)
4336     ;
4337   }
4338 #pragma omp target
4339 #pragma omp teams
4340   {
4341 #pragma omp target simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target simd' directive into a parallel region?}}
4342   for (int i = 0; i < 10; ++i)
4343     ;
4344   }
4345 #pragma omp target
4346 #pragma omp teams
4347   {
4348 #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?}}
4349   for (int i = 0; i < 10; ++i)
4350     ;
4351   }
4352 #pragma omp target
4353 #pragma omp teams
4354   {
4355 #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?}}
4356   for (int i = 0; i < 10; ++i)
4357     ;
4358   }
4359 #pragma omp target
4360 #pragma omp teams
4361   {
4362 #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?}}
4363   for (int i = 0; i < 10; ++i)
4364     ;
4365   }
4366 #pragma omp target
4367 #pragma omp teams
4368   {
4369 #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?}}
4370   for (int i = 0; i < 10; ++i)
4371     ;
4372   }
4373 
4374 // TASKLOOP DIRECTIVE
4375 #pragma omp taskloop
4376   for (int i = 0; i < 10; ++i) {
4377 #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?}}
4378     for (int i = 0; i < 10; ++i)
4379       ;
4380   }
4381 #pragma omp taskloop
4382   for (int i = 0; i < 10; ++i) {
4383 #pragma omp simd
4384     for (int i = 0; i < 10; ++i)
4385       ;
4386   }
4387 #pragma omp taskloop
4388   for (int i = 0; i < 10; ++i) {
4389 #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?}}
4390     for (int i = 0; i < 10; ++i)
4391       ;
4392   }
4393 #pragma omp taskloop
4394   for (int i = 0; i < 10; ++i) {
4395 #pragma omp parallel
4396     for (int i = 0; i < 10; ++i)
4397       ;
4398   }
4399 #pragma omp taskloop
4400   for (int i = 0; i < 10; ++i) {
4401 #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?}}
4402     {
4403       bar();
4404     }
4405   }
4406 #pragma omp taskloop
4407   for (int i = 0; i < 10; ++i) {
4408 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
4409     {
4410       bar();
4411     }
4412   }
4413 #pragma omp taskloop
4414   for (int i = 0; i < 10; ++i) {
4415 #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?}}
4416     {
4417       bar();
4418     }
4419   }
4420 
4421 #pragma omp taskloop
4422   for (int i = 0; i < 10; ++i) {
4423 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
4424     {
4425       bar();
4426     }
4427   }
4428 #pragma omp taskloop
4429   for (int i = 0; i < 10; ++i) {
4430 #pragma omp critical
4431     {
4432       bar();
4433     }
4434   }
4435 #pragma omp taskloop
4436   for (int i = 0; i < 10; ++i) {
4437 #pragma omp parallel
4438     {
4439 #pragma omp single // OK
4440       {
4441         bar();
4442       }
4443 #pragma omp for // OK
4444       for (int i = 0; i < 10; ++i)
4445         ;
4446 #pragma omp sections // OK
4447       {
4448         bar();
4449       }
4450     }
4451   }
4452 #pragma omp taskloop
4453   for (int i = 0; i < 10; ++i) {
4454 #pragma omp parallel for
4455     for (int i = 0; i < 10; ++i)
4456       ;
4457   }
4458 #pragma omp taskloop
4459   for (int i = 0; i < 10; ++i) {
4460 #pragma omp parallel for simd
4461     for (int i = 0; i < 10; ++i)
4462       ;
4463   }
4464 #pragma omp taskloop
4465   for (int i = 0; i < 10; ++i) {
4466 #pragma omp parallel sections
4467     {
4468       bar();
4469     }
4470   }
4471 #pragma omp taskloop
4472   for (int i = 0; i < 10; ++i) {
4473 #pragma omp task
4474     {
4475       bar();
4476     }
4477   }
4478 #pragma omp taskloop
4479   for (int i = 0; i < 10; ++i) {
4480 #pragma omp taskyield
4481     bar();
4482   }
4483 #pragma omp taskloop
4484   for (int i = 0; i < 10; ++i) {
4485 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
4486     bar();
4487   }
4488 #pragma omp taskloop
4489   for (int i = 0; i < 10; ++i) {
4490 #pragma omp taskwait
4491     bar();
4492   }
4493 #pragma omp taskloop
4494   for (int i = 0; i < 10; ++i) {
4495 #pragma omp flush
4496     bar();
4497   }
4498 #pragma omp taskloop
4499   for (int i = 0; i < 10; ++i) {
4500 #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?}}
4501     bar();
4502   }
4503 #pragma omp taskloop
4504   for (int i = 0; i < 10; ++i) {
4505 #pragma omp atomic
4506     ++a;
4507   }
4508 #pragma omp taskloop
4509   for (int i = 0; i < 10; ++i) {
4510 #pragma omp target
4511     ++a;
4512   }
4513 #pragma omp taskloop
4514   for (int i = 0; i < 10; ++i) {
4515 #pragma omp target parallel
4516     ++a;
4517   }
4518 #pragma omp taskloop
4519   for (int i = 0; i < 10; ++i) {
4520 #pragma omp target parallel for
4521     for (int i = 0; i < 10; ++i)
4522       ;
4523   }
4524 #pragma omp taskloop
4525   for (int i = 0; i < 10; ++i) {
4526 #pragma omp target enter data map(to: a)
4527     ++a;
4528   }
4529 #pragma omp taskloop
4530   for (int i = 0; i < 10; ++i) {
4531 #pragma omp target exit data map(from: a)
4532     ++a;
4533   }
4534 #pragma omp taskloop
4535   for (int i = 0; i < 10; ++i) {
4536 #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?}}
4537     ++a;
4538   }
4539 #pragma omp taskloop
4540   for (int i = 0; i < 10; ++i) {
4541 #pragma omp taskloop
4542   for (int i = 0; i < 10; ++i)
4543     ++a;
4544   }
4545 #pragma omp taskloop
4546   for (int i = 0; i < 10; ++i) {
4547 #pragma omp target update to(a)
4548     bar();
4549   }
4550 #pragma omp taskloop
4551   for (int i = 0; i < 10; ++i) {
4552 #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?}}
4553   for (int j = 0; j < 10; ++j)
4554     ++a;
4555   }
4556 #pragma omp taskloop
4557   for (int i = 0; i < 10; ++i) {
4558 #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?}}
4559   for (int j = 0; j < 10; ++j)
4560     ++a;
4561   }
4562 #pragma omp taskloop
4563   for (int i = 0; i < 10; ++i) {
4564 #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?}}
4565   for (int j = 0; j < 10; ++j)
4566     ++a;
4567   }
4568 #pragma omp taskloop
4569   for (int i = 0; i < 10; ++i) {
4570 #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?}}
4571   for (int j = 0; j < 10; ++j)
4572     ++a;
4573   }
4574 #pragma omp taskloop
4575   for (int i = 0; i < 10; ++i) {
4576 #pragma omp target simd // OK
4577   for (int j = 0; j < 10; ++j)
4578     ++a;
4579   }
4580 #pragma omp taskloop
4581   for (int i = 0; i < 10; ++i) {
4582 #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?}}
4583   for (int j = 0; j < 10; ++j)
4584     ++a;
4585   }
4586 #pragma omp taskloop
4587   for (int i = 0; i < 10; ++i) {
4588 #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?}}
4589   for (int j = 0; j < 10; ++j)
4590     ++a;
4591   }
4592 #pragma omp taskloop
4593   for (int i = 0; i < 10; ++i) {
4594 #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?}}
4595   for (int j = 0; j < 10; ++j)
4596     ++a;
4597   }
4598 #pragma omp taskloop
4599   for (int i = 0; i < 10; ++i) {
4600 #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?}}
4601   for (int j = 0; j < 10; ++j)
4602     ++a;
4603   }
4604 
4605 // DISTRIBUTE DIRECTIVE
4606 #pragma omp target
4607 #pragma omp teams
4608 #pragma omp distribute
4609   for (int i = 0; i < 10; ++i) {
4610 #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?}}
4611     for (int i = 0; i < 10; ++i)
4612       ;
4613   }
4614 #pragma omp target
4615 #pragma omp teams
4616 #pragma omp distribute
4617   for (int i = 0; i < 10; ++i) {
4618 #pragma omp for
4619     for (int i = 0; i < 10; ++i)
4620       ;
4621   }
4622 #pragma omp target
4623 #pragma omp teams
4624 #pragma omp distribute
4625   for (int i = 0; i < 10; ++i) {
4626 #pragma omp simd
4627     for (int i = 0; i < 10; ++i)
4628       ;
4629   }
4630 #pragma omp target
4631 #pragma omp teams
4632 #pragma omp distribute
4633   for (int i = 0; i < 10; ++i) {
4634 #pragma omp for simd
4635     for (int i = 0; i < 10; ++i)
4636       ;
4637   }
4638 #pragma omp target
4639 #pragma omp teams
4640 #pragma omp distribute
4641   for (int i = 0; i < 10; ++i) {
4642 #pragma omp parallel
4643     for (int i = 0; i < 10; ++i)
4644       ;
4645   }
4646 #pragma omp target
4647 #pragma omp teams
4648 #pragma omp distribute
4649   for (int i = 0; i < 10; ++i) {
4650 #pragma omp sections
4651     {
4652       bar();
4653     }
4654   }
4655 #pragma omp target
4656 #pragma omp teams
4657 #pragma omp distribute
4658   for (int i = 0; i < 10; ++i) {
4659 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
4660     {
4661       bar();
4662     }
4663   }
4664 #pragma omp target
4665 #pragma omp teams
4666 #pragma omp distribute
4667   for (int i = 0; i < 10; ++i) {
4668 #pragma omp single
4669     {
4670       bar();
4671     }
4672   }
4673 #pragma omp target
4674 #pragma omp teams
4675 #pragma omp distribute
4676   for (int i = 0; i < 10; ++i) {
4677 #pragma omp master
4678     {
4679       bar();
4680     }
4681   }
4682 #pragma omp target
4683 #pragma omp teams
4684 #pragma omp distribute
4685   for (int i = 0; i < 10; ++i) {
4686 #pragma omp critical
4687     {
4688       bar();
4689     }
4690   }
4691 #pragma omp target
4692 #pragma omp teams
4693 #pragma omp distribute
4694   for (int i = 0; i < 10; ++i) {
4695 #pragma omp parallel
4696     {
4697 #pragma omp single
4698       {
4699 	bar();
4700       }
4701     }
4702   }
4703 #pragma omp target
4704 #pragma omp teams
4705 #pragma omp distribute
4706   for (int i = 0; i < 10; ++i) {
4707 #pragma omp parallel for
4708     for (int i = 0; i < 10; ++i)
4709       ;
4710   }
4711 #pragma omp target
4712 #pragma omp teams
4713 #pragma omp distribute
4714   for (int i = 0; i < 10; ++i) {
4715 #pragma omp parallel for simd
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 parallel sections
4724     {
4725       bar();
4726     }
4727   }
4728 #pragma omp target
4729 #pragma omp teams
4730 #pragma omp distribute
4731   for (int i = 0; i < 10; ++i) {
4732 #pragma omp task
4733     {
4734       bar();
4735     }
4736   }
4737 #pragma omp target
4738 #pragma omp teams
4739 #pragma omp distribute
4740   for (int i = 0; i < 10; ++i) {
4741 #pragma omp taskyield
4742     bar();
4743   }
4744 #pragma omp target
4745 #pragma omp teams
4746 #pragma omp distribute
4747   for (int i = 0; i < 10; ++i) {
4748 #pragma omp barrier
4749     bar();
4750   }
4751 #pragma omp target
4752 #pragma omp teams
4753 #pragma omp distribute
4754   for (int i = 0; i < 10; ++i) {
4755 #pragma omp taskwait
4756     bar();
4757   }
4758 #pragma omp target
4759 #pragma omp teams
4760 #pragma omp distribute
4761   for (int i = 0; i < 10; ++i) {
4762 #pragma omp flush
4763     bar();
4764   }
4765 #pragma omp target
4766 #pragma omp teams
4767 #pragma omp distribute
4768   for (int i = 0; i < 10; ++i) {
4769 #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?}}
4770     bar();
4771   }
4772 #pragma omp target
4773 #pragma omp teams
4774 #pragma omp distribute
4775   for (int i = 0; i < 10; ++i) {
4776 #pragma omp atomic
4777     ++a;
4778   }
4779 #pragma omp target
4780 #pragma omp teams
4781 #pragma omp distribute
4782   for (int i = 0; i < 10; ++i) {
4783 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4784     ++a;
4785   }
4786 #pragma omp target
4787 #pragma omp teams
4788 #pragma omp distribute
4789   for (int i = 0; i < 10; ++i) {
4790 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4791     ++a;
4792   }
4793 #pragma omp target
4794 #pragma omp teams
4795 #pragma omp distribute
4796   for (int i = 0; i < 10; ++i) {
4797 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4798     for (int i = 0; i < 10; ++i)
4799       ;
4800   }
4801 #pragma omp target
4802 #pragma omp teams
4803 #pragma omp distribute
4804   for (int i = 0; i < 10; ++i) {
4805 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4806     ++a;
4807   }
4808 #pragma omp target
4809 #pragma omp teams
4810 #pragma omp distribute
4811   for (int i = 0; i < 10; ++i) {
4812 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4813     ++a;
4814   }
4815 #pragma omp target
4816 #pragma omp teams
4817 #pragma omp distribute
4818   for (int i = 0; i < 10; ++i) {
4819 #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?}}
4820     ++a;
4821   }
4822 #pragma omp target
4823 #pragma omp teams
4824 #pragma omp distribute
4825   for (int i = 0; i < 10; ++i) {
4826 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4827     ++a;
4828   }
4829 #pragma omp target
4830 #pragma omp teams
4831 #pragma omp distribute
4832   for (int i = 0; i < 10; ++i) {
4833 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4834     for (int j = 0; j < 10; ++j)
4835       ;
4836   }
4837 #pragma omp target
4838 #pragma omp teams
4839 #pragma omp distribute
4840   for (int i = 0; i < 10; ++i) {
4841 #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?}}
4842     for (int j = 0; j < 10; ++j)
4843       ;
4844   }
4845 #pragma omp target
4846 #pragma omp teams
4847 #pragma omp distribute
4848   for (int i = 0; i < 10; ++i) {
4849 #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?}}
4850     for (int j = 0; j < 10; ++j)
4851       ;
4852   }
4853 #pragma omp target
4854 #pragma omp teams
4855 #pragma omp distribute
4856   for (int i = 0; i < 10; ++i) {
4857 #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?}}
4858     for (int j = 0; j < 10; ++j)
4859       ;
4860   }
4861 #pragma omp target
4862 #pragma omp teams
4863 #pragma omp distribute
4864   for (int i = 0; i < 10; ++i) {
4865 #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?}}
4866     for (int j = 0; j < 10; ++j)
4867       ;
4868   }
4869 
4870 // DISTRIBUTE PARALLEL FOR DIRECTIVE
4871 #pragma omp target
4872 #pragma omp teams
4873 #pragma omp distribute parallel for
4874   for (int i = 0; i < 10; ++i) {
4875 #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?}}
4876     for (int i = 0; i < 10; ++i)
4877       ;
4878   }
4879 #pragma omp target
4880 #pragma omp teams
4881 #pragma omp distribute parallel for
4882   for (int i = 0; i < 10; ++i) {
4883 #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?}}
4884     for (int i = 0; i < 10; ++i)
4885       ;
4886   }
4887 #pragma omp target
4888 #pragma omp teams
4889 #pragma omp distribute parallel for
4890   for (int i = 0; i < 10; ++i) {
4891 #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?}}
4892     for (int i = 0; i < 10; ++i)
4893       ;
4894   }
4895 #pragma omp target
4896 #pragma omp teams
4897 #pragma omp distribute parallel for
4898   for (int i = 0; i < 10; ++i) {
4899 #pragma omp simd
4900     for (int i = 0; i < 10; ++i)
4901       ;
4902   }
4903 #pragma omp target
4904 #pragma omp teams
4905 #pragma omp distribute parallel for
4906   for (int i = 0; i < 10; ++i) {
4907 #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?}}
4908     for (int i = 0; i < 10; ++i)
4909       ;
4910   }
4911 #pragma omp target
4912 #pragma omp teams
4913 #pragma omp distribute parallel for
4914   for (int i = 0; i < 10; ++i) {
4915 #pragma omp parallel
4916     for (int i = 0; i < 10; ++i)
4917       ;
4918   }
4919 #pragma omp target
4920 #pragma omp teams
4921 #pragma omp distribute parallel for
4922   for (int i = 0; i < 10; ++i) {
4923 #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?}}
4924     {
4925       bar();
4926     }
4927   }
4928 #pragma omp target
4929 #pragma omp teams
4930 #pragma omp distribute parallel for
4931   for (int i = 0; i < 10; ++i) {
4932 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
4933     {
4934       bar();
4935     }
4936   }
4937 #pragma omp target
4938 #pragma omp teams
4939 #pragma omp distribute parallel for
4940   for (int i = 0; i < 10; ++i) {
4941 #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?}}
4942     {
4943       bar();
4944     }
4945   }
4946 #pragma omp target
4947 #pragma omp teams
4948 #pragma omp distribute parallel for
4949   for (int i = 0; i < 10; ++i) {
4950 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
4951     {
4952       bar();
4953     }
4954   }
4955 #pragma omp target
4956 #pragma omp teams
4957 #pragma omp distribute parallel for
4958   for (int i = 0; i < 10; ++i) {
4959 #pragma omp critical
4960     {
4961       bar();
4962     }
4963   }
4964 #pragma omp target
4965 #pragma omp teams
4966 #pragma omp distribute parallel for
4967   for (int i = 0; i < 10; ++i) {
4968 #pragma omp parallel
4969     {
4970 #pragma omp single
4971       {
4972 	bar();
4973       }
4974     }
4975   }
4976 #pragma omp target
4977 #pragma omp teams
4978 #pragma omp distribute parallel for
4979   for (int i = 0; i < 10; ++i) {
4980 #pragma omp parallel for
4981     for (int i = 0; i < 10; ++i)
4982       ;
4983   }
4984 #pragma omp target
4985 #pragma omp teams
4986 #pragma omp distribute parallel for
4987   for (int i = 0; i < 10; ++i) {
4988 #pragma omp parallel for simd
4989     for (int i = 0; i < 10; ++i)
4990       ;
4991   }
4992 #pragma omp target
4993 #pragma omp teams
4994 #pragma omp distribute parallel for
4995   for (int i = 0; i < 10; ++i) {
4996 #pragma omp parallel sections
4997     {
4998       bar();
4999     }
5000   }
5001 #pragma omp target
5002 #pragma omp teams
5003 #pragma omp distribute parallel for
5004   for (int i = 0; i < 10; ++i) {
5005 #pragma omp task
5006     {
5007       bar();
5008     }
5009   }
5010 #pragma omp target
5011 #pragma omp teams
5012 #pragma omp distribute parallel for
5013   for (int i = 0; i < 10; ++i) {
5014 #pragma omp taskyield
5015     bar();
5016   }
5017 #pragma omp target
5018 #pragma omp teams
5019 #pragma omp distribute parallel for
5020   for (int i = 0; i < 10; ++i) {
5021 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5022     bar();
5023   }
5024 #pragma omp target
5025 #pragma omp teams
5026 #pragma omp distribute parallel for
5027   for (int i = 0; i < 10; ++i) {
5028 #pragma omp taskwait
5029     bar();
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 flush
5036     bar();
5037   }
5038 #pragma omp target
5039 #pragma omp teams
5040 #pragma omp distribute parallel for
5041   for (int i = 0; i < 10; ++i) {
5042 #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?}}
5043     bar();
5044   }
5045 #pragma omp target
5046 #pragma omp teams
5047 #pragma omp distribute parallel for
5048   for (int i = 0; i < 10; ++i) {
5049 #pragma omp atomic
5050     ++a;
5051   }
5052 #pragma omp target
5053 #pragma omp teams
5054 #pragma omp distribute parallel for
5055   for (int i = 0; i < 10; ++i) {
5056 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5057     ++a;
5058   }
5059 #pragma omp target
5060 #pragma omp teams
5061 #pragma omp distribute parallel for
5062   for (int i = 0; i < 10; ++i) {
5063 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5064     ++a;
5065   }
5066 #pragma omp target
5067 #pragma omp teams
5068 #pragma omp distribute parallel for
5069   for (int i = 0; i < 10; ++i) {
5070 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5071     for (int i = 0; i < 10; ++i)
5072       ;
5073   }
5074 #pragma omp target
5075 #pragma omp teams
5076 #pragma omp distribute parallel for
5077   for (int i = 0; i < 10; ++i) {
5078 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5079     ++a;
5080   }
5081 #pragma omp target
5082 #pragma omp teams
5083 #pragma omp distribute parallel for
5084   for (int i = 0; i < 10; ++i) {
5085 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5086     ++a;
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 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?}}
5093     ++a;
5094   }
5095 #pragma omp target
5096 #pragma omp teams
5097 #pragma omp distribute parallel for
5098   for (int i = 0; i < 10; ++i) {
5099 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5100     ++a;
5101   }
5102 #pragma omp target
5103 #pragma omp teams
5104 #pragma omp distribute parallel for
5105   for (int i = 0; i < 10; ++i) {
5106 #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?}}
5107     for (int i = 0; i < 10; ++i)
5108       ;
5109   }
5110 #pragma omp target
5111 #pragma omp teams
5112 #pragma omp distribute parallel for
5113   for (int i = 0; i < 10; ++i) {
5114 #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?}}
5115     for (int i = 0; i < 10; ++i)
5116       ;
5117   }
5118 #pragma omp target
5119 #pragma omp teams
5120 #pragma omp distribute parallel for
5121   for (int i = 0; i < 10; ++i) {
5122 #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?}}
5123     for (int i = 0; i < 10; ++i)
5124       ;
5125   }
5126 #pragma omp target
5127 #pragma omp teams
5128 #pragma omp distribute parallel for
5129   for (int i = 0; i < 10; ++i) {
5130 #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?}}
5131     for (int i = 0; i < 10; ++i)
5132       ;
5133   }
5134 #pragma omp target
5135 #pragma omp teams
5136 #pragma omp distribute parallel for
5137   for (int i = 0; i < 10; ++i) {
5138 #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?}}
5139     for (int i = 0; i < 10; ++i)
5140       ;
5141   }
5142 
5143 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
5144 #pragma omp target
5145 #pragma omp teams
5146 #pragma omp distribute parallel for simd
5147   for (int i = 0; i < 10; ++i) {
5148 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5149     for (int i = 0; i < 10; ++i)
5150       ;
5151   }
5152 #pragma omp target
5153 #pragma omp teams
5154 #pragma omp distribute parallel for simd
5155   for (int i = 0; i < 10; ++i) {
5156 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5157     for (int i = 0; i < 10; ++i)
5158       ;
5159   }
5160 #pragma omp target
5161 #pragma omp teams
5162 #pragma omp distribute parallel for simd
5163   for (int i = 0; i < 10; ++i) {
5164 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5165     for (int i = 0; i < 10; ++i)
5166       ;
5167   }
5168 #pragma omp target
5169 #pragma omp teams
5170 #pragma omp distribute parallel for simd
5171   for (int i = 0; i < 10; ++i) {
5172 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5173     for (int i = 0; i < 10; ++i)
5174       ;
5175   }
5176 #pragma omp target
5177 #pragma omp teams
5178 #pragma omp distribute parallel for simd
5179   for (int i = 0; i < 10; ++i) {
5180 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5181     for (int i = 0; i < 10; ++i)
5182       ;
5183   }
5184 #pragma omp target
5185 #pragma omp teams
5186 #pragma omp distribute parallel for simd
5187   for (int i = 0; i < 10; ++i) {
5188 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5189     for (int i = 0; i < 10; ++i)
5190       ;
5191   }
5192 #pragma omp target
5193 #pragma omp teams
5194 #pragma omp distribute parallel for simd
5195   for (int i = 0; i < 10; ++i) {
5196 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5197     {
5198       bar();
5199     }
5200   }
5201 #pragma omp target
5202 #pragma omp teams
5203 #pragma omp distribute parallel for simd
5204   for (int i = 0; i < 10; ++i) {
5205 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5206     {
5207       bar();
5208     }
5209   }
5210 #pragma omp target
5211 #pragma omp teams
5212 #pragma omp distribute parallel for simd
5213   for (int i = 0; i < 10; ++i) {
5214 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5215     {
5216       bar();
5217     }
5218   }
5219 #pragma omp target
5220 #pragma omp teams
5221 #pragma omp distribute parallel for simd
5222   for (int i = 0; i < 10; ++i) {
5223 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5224     {
5225       bar();
5226     }
5227   }
5228 #pragma omp target
5229 #pragma omp teams
5230 #pragma omp distribute parallel for simd
5231   for (int i = 0; i < 10; ++i) {
5232 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5233     {
5234       bar();
5235     }
5236   }
5237 #pragma omp target
5238 #pragma omp teams
5239 #pragma omp distribute parallel for simd
5240   for (int i = 0; i < 10; ++i) {
5241 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5242     {
5243 #pragma omp single
5244       {
5245 	bar();
5246       }
5247     }
5248   }
5249 #pragma omp target
5250 #pragma omp teams
5251 #pragma omp distribute parallel for simd
5252   for (int i = 0; i < 10; ++i) {
5253 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5254     for (int i = 0; i < 10; ++i)
5255       ;
5256   }
5257 #pragma omp target
5258 #pragma omp teams
5259 #pragma omp distribute parallel for simd
5260   for (int i = 0; i < 10; ++i) {
5261 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5262     for (int i = 0; i < 10; ++i)
5263       ;
5264   }
5265 #pragma omp target
5266 #pragma omp teams
5267 #pragma omp distribute parallel for simd
5268   for (int i = 0; i < 10; ++i) {
5269 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5270     {
5271       bar();
5272     }
5273   }
5274 #pragma omp target
5275 #pragma omp teams
5276 #pragma omp distribute parallel for simd
5277   for (int i = 0; i < 10; ++i) {
5278 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5279     {
5280       bar();
5281     }
5282   }
5283 #pragma omp target
5284 #pragma omp teams
5285 #pragma omp distribute parallel for simd
5286   for (int i = 0; i < 10; ++i) {
5287 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5288     bar();
5289   }
5290 #pragma omp target
5291 #pragma omp teams
5292 #pragma omp distribute parallel for simd
5293   for (int i = 0; i < 10; ++i) {
5294 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5295     bar();
5296   }
5297 #pragma omp target
5298 #pragma omp teams
5299 #pragma omp distribute parallel for simd
5300   for (int i = 0; i < 10; ++i) {
5301 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5302     bar();
5303   }
5304 #pragma omp target
5305 #pragma omp teams
5306 #pragma omp distribute parallel for simd
5307   for (int i = 0; i < 10; ++i) {
5308 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5309     bar();
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 ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5316     bar();
5317   }
5318 #pragma omp target
5319 #pragma omp teams
5320 #pragma omp distribute parallel for simd
5321   for (int i = 0; i < 10; ++i) {
5322 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5323     ++a;
5324   }
5325 #pragma omp target
5326 #pragma omp teams
5327 #pragma omp distribute parallel for simd
5328   for (int i = 0; i < 10; ++i) {
5329 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5330     ++a;
5331   }
5332 #pragma omp target
5333 #pragma omp teams
5334 #pragma omp distribute parallel for simd
5335   for (int i = 0; i < 10; ++i) {
5336 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5337     ++a;
5338   }
5339 #pragma omp target
5340 #pragma omp teams
5341 #pragma omp distribute parallel for simd
5342   for (int i = 0; i < 10; ++i) {
5343 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5344     for (int i = 0; i < 10; ++i)
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 target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5352     ++a;
5353   }
5354 #pragma omp target
5355 #pragma omp teams
5356 #pragma omp distribute parallel for simd
5357   for (int i = 0; i < 10; ++i) {
5358 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5359     ++a;
5360   }
5361 #pragma omp target
5362 #pragma omp teams
5363 #pragma omp distribute parallel for simd
5364   for (int i = 0; i < 10; ++i) {
5365 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5366     ++a;
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 target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5373     ++a;
5374   }
5375 #pragma omp target
5376 #pragma omp teams
5377 #pragma omp distribute parallel for simd
5378   for (int i = 0; i < 10; ++i) {
5379 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5380     for (int i = 0; i < 10; ++i)
5381       ++a;
5382   }
5383 #pragma omp target
5384 #pragma omp teams
5385 #pragma omp distribute parallel for simd
5386   for (int i = 0; i < 10; ++i) {
5387 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5388     for (int i = 0; i < 10; ++i)
5389       ++a;
5390   }
5391 #pragma omp target
5392 #pragma omp teams
5393 #pragma omp distribute parallel for simd
5394   for (int i = 0; i < 10; ++i) {
5395 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5396     for (int i = 0; i < 10; ++i)
5397       ++a;
5398   }
5399 #pragma omp target
5400 #pragma omp teams
5401 #pragma omp distribute parallel for simd
5402   for (int i = 0; i < 10; ++i) {
5403 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5404     for (int i = 0; i < 10; ++i)
5405       ++a;
5406   }
5407 #pragma omp target
5408 #pragma omp teams
5409 #pragma omp distribute parallel for simd
5410   for (int i = 0; i < 10; ++i) {
5411 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5412     for (int i = 0; i < 10; ++i)
5413       ++a;
5414   }
5415 #pragma omp target
5416 #pragma omp teams
5417 #pragma omp distribute parallel for simd
5418   for (int i = 0; i < 10; ++i) {
5419 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5420     for (int i = 0; i < 10; ++i)
5421       ++a;
5422   }
5423 
5424 // TARGET SIMD DIRECTIVE
5425 #pragma omp target simd
5426   for (int i = 0; i < 10; ++i) {
5427 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5428     for (int i = 0; i < 10; ++i)
5429       ;
5430   }
5431 #pragma omp target simd
5432   for (int i = 0; i < 10; ++i) {
5433 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5434     for (int i = 0; i < 10; ++i)
5435       ;
5436   }
5437 #pragma omp target simd
5438   for (int i = 0; i < 10; ++i) {
5439 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5440     for (int i = 0; i < 10; ++i)
5441       ;
5442   }
5443 #pragma omp target simd
5444   for (int i = 0; i < 10; ++i) {
5445 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5446     for (int i = 0; i < 10; ++i)
5447       ;
5448   }
5449 #pragma omp target simd
5450   for (int i = 0; i < 10; ++i) {
5451 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5452     for (int i = 0; i < 10; ++i)
5453       ;
5454   }
5455 #pragma omp target simd
5456   for (int i = 0; i < 10; ++i) {
5457 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5458     for (int i = 0; i < 10; ++i)
5459       ;
5460   }
5461 #pragma omp target simd
5462   for (int i = 0; i < 10; ++i) {
5463 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5464     {
5465       bar();
5466     }
5467   }
5468 #pragma omp target simd
5469   for (int i = 0; i < 10; ++i) {
5470 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5471     {
5472       bar();
5473     }
5474   }
5475 #pragma omp target simd
5476   for (int i = 0; i < 10; ++i) {
5477 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5478     {
5479       bar();
5480     }
5481   }
5482 #pragma omp target simd
5483   for (int i = 0; i < 10; ++i) {
5484 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5485     {
5486       bar();
5487     }
5488   }
5489 #pragma omp target simd
5490   for (int i = 0; i < 10; ++i) {
5491 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5492     {
5493       bar();
5494     }
5495   }
5496 #pragma omp target simd
5497   for (int i = 0; i < 10; ++i) {
5498 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5499     {
5500 #pragma omp single
5501       {
5502 	bar();
5503       }
5504     }
5505   }
5506 #pragma omp target simd
5507   for (int i = 0; i < 10; ++i) {
5508 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5509     for (int i = 0; i < 10; ++i)
5510       ;
5511   }
5512 #pragma omp target simd
5513   for (int i = 0; i < 10; ++i) {
5514 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5515     for (int i = 0; i < 10; ++i)
5516       ;
5517   }
5518 #pragma omp target simd
5519   for (int i = 0; i < 10; ++i) {
5520 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5521     {
5522       bar();
5523     }
5524   }
5525 #pragma omp target simd
5526   for (int i = 0; i < 10; ++i) {
5527 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5528     {
5529       bar();
5530     }
5531   }
5532 #pragma omp target simd
5533   for (int i = 0; i < 10; ++i) {
5534 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5535     bar();
5536   }
5537 #pragma omp target simd
5538   for (int i = 0; i < 10; ++i) {
5539 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5540     bar();
5541   }
5542 #pragma omp target simd
5543   for (int i = 0; i < 10; ++i) {
5544 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5545     bar();
5546   }
5547 #pragma omp target simd
5548   for (int i = 0; i < 10; ++i) {
5549 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5550     bar();
5551   }
5552 #pragma omp target simd
5553   for (int i = 0; i < 10; ++i) {
5554 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5555     bar();
5556   }
5557 #pragma omp target simd
5558   for (int i = 0; i < 10; ++i) {
5559 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5560     ++a;
5561   }
5562 #pragma omp target simd
5563   for (int i = 0; i < 10; ++i) {
5564 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5565     ++a;
5566   }
5567 #pragma omp target simd
5568   for (int i = 0; i < 10; ++i) {
5569 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5570     ++a;
5571   }
5572 #pragma omp target simd
5573   for (int i = 0; i < 10; ++i) {
5574 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5575     for (int i = 0; i < 10; ++i)
5576       ;
5577   }
5578 #pragma omp target simd
5579   for (int i = 0; i < 10; ++i) {
5580 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5581     ++a;
5582   }
5583 #pragma omp target simd
5584   for (int i = 0; i < 10; ++i) {
5585 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5586     ++a;
5587   }
5588 #pragma omp target simd
5589   for (int i = 0; i < 10; ++i) {
5590 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5591     ++a;
5592   }
5593 #pragma omp target simd
5594   for (int i = 0; i < 10; ++i) {
5595 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5596     ++a;
5597   }
5598 #pragma omp target simd
5599   for (int i = 0; i < 10; ++i) {
5600 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5601     for (int i = 0; i < 10; ++i)
5602       ++a;
5603   }
5604 #pragma omp target simd
5605   for (int i = 0; i < 10; ++i) {
5606 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5607     for (int i = 0; i < 10; ++i)
5608       ++a;
5609   }
5610 #pragma omp target simd
5611   for (int i = 0; i < 10; ++i) {
5612 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5613     for (int i = 0; i < 10; ++i)
5614       ++a;
5615   }
5616 #pragma omp target simd
5617   for (int i = 0; i < 10; ++i) {
5618 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5619     for (int i = 0; i < 10; ++i)
5620       ++a;
5621   }
5622 #pragma omp target simd
5623   for (int i = 0; i < 10; ++i) {
5624 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5625     for (int i = 0; i < 10; ++i)
5626       ++a;
5627   }
5628 
5629  // TEAMS DISTRIBUTE DIRECTIVE
5630 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5631   for (int i = 0; i < 10; ++i)
5632     ;
5633 #pragma omp target
5634 #pragma omp teams distribute
5635   for (int i = 0; i < 10; ++i) {
5636 #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?}}
5637     for (int i = 0; i < 10; ++i)
5638       ;
5639   }
5640 #pragma omp target
5641 #pragma omp teams distribute
5642   for (int i = 0; i < 10; ++i) {
5643 #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?}}
5644     for (int i = 0; i < 10; ++i)
5645       ;
5646   }
5647 #pragma omp target
5648 #pragma omp teams distribute
5649   for (int i = 0; i < 10; ++i) {
5650 #pragma omp for // OK
5651     for (int i = 0; i < 10; ++i)
5652       ;
5653   }
5654 #pragma omp target
5655 #pragma omp teams distribute
5656   for (int i = 0; i < 10; ++i) {
5657 #pragma omp simd // OK
5658     for (int i = 0; i < 10; ++i)
5659       ;
5660   }
5661 #pragma omp target
5662 #pragma omp teams distribute
5663   for (int i = 0; i < 10; ++i) {
5664 #pragma omp for simd // OK
5665     for (int i = 0; i < 10; ++i)
5666       ;
5667   }
5668 #pragma omp target
5669 #pragma omp teams distribute
5670   for (int i = 0; i < 10; ++i) {
5671 #pragma omp parallel // OK
5672     for (int i = 0; i < 10; ++i)
5673       ;
5674   }
5675 #pragma omp target
5676 #pragma omp teams distribute
5677   for (int i = 0; i < 10; ++i) {
5678 #pragma omp sections // OK
5679     {
5680       bar();
5681     }
5682   }
5683 #pragma omp target
5684 #pragma omp teams distribute
5685   for (int i = 0; i < 10; ++i) {
5686 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
5687     {
5688       bar();
5689     }
5690   }
5691 #pragma omp target
5692 #pragma omp teams distribute
5693   for (int i = 0; i < 10; ++i) {
5694 #pragma omp single // OK
5695     {
5696       bar();
5697     }
5698   }
5699 #pragma omp target
5700 #pragma omp teams distribute
5701   for (int i = 0; i < 10; ++i) {
5702 #pragma omp master // OK
5703     {
5704       bar();
5705     }
5706   }
5707 #pragma omp target
5708 #pragma omp teams distribute
5709   for (int i = 0; i < 10; ++i) {
5710 #pragma omp critical // OK
5711     {
5712       bar();
5713     }
5714   }
5715 #pragma omp target
5716 #pragma omp teams distribute
5717   for (int i = 0; i < 10; ++i) {
5718 #pragma omp parallel // OK
5719     {
5720 #pragma omp single
5721       {
5722 	bar();
5723       }
5724     }
5725   }
5726 #pragma omp target
5727 #pragma omp teams distribute
5728   for (int i = 0; i < 10; ++i) {
5729 #pragma omp parallel for // OK
5730     for (int i = 0; i < 10; ++i)
5731       ;
5732   }
5733 #pragma omp target
5734 #pragma omp teams distribute
5735   for (int i = 0; i < 10; ++i) {
5736 #pragma omp parallel for simd // OK
5737     for (int i = 0; i < 10; ++i)
5738       ;
5739   }
5740 #pragma omp target
5741 #pragma omp teams distribute
5742   for (int i = 0; i < 10; ++i) {
5743 #pragma omp parallel sections // OK
5744     {
5745       bar();
5746     }
5747   }
5748 #pragma omp target
5749 #pragma omp teams distribute
5750   for (int i = 0; i < 10; ++i) {
5751 #pragma omp task // OK
5752     {
5753       bar();
5754     }
5755   }
5756 #pragma omp target
5757 #pragma omp teams distribute
5758   for (int i = 0; i < 10; ++i) {
5759 #pragma omp taskyield // OK
5760     bar();
5761   }
5762 #pragma omp target
5763 #pragma omp teams distribute
5764   for (int i = 0; i < 10; ++i) {
5765 #pragma omp barrier // OK
5766     bar();
5767   }
5768 #pragma omp target
5769 #pragma omp teams distribute
5770   for (int i = 0; i < 10; ++i) {
5771 #pragma omp taskwait // OK
5772     bar();
5773   }
5774 #pragma omp target
5775 #pragma omp teams distribute
5776   for (int i = 0; i < 10; ++i) {
5777 #pragma omp flush // OK
5778     bar();
5779   }
5780 #pragma omp target
5781 #pragma omp teams distribute
5782   for (int i = 0; i < 10; ++i) {
5783 #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?}}
5784     bar();
5785   }
5786 #pragma omp target
5787 #pragma omp teams distribute
5788   for (int i = 0; i < 10; ++i) {
5789 #pragma omp atomic // OK
5790     ++a;
5791   }
5792 #pragma omp target
5793 #pragma omp teams distribute
5794   for (int i = 0; i < 10; ++i) {
5795 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5796     ++a;
5797   }
5798 #pragma omp target
5799 #pragma omp teams distribute
5800   for (int i = 0; i < 10; ++i) {
5801 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
5802     ++a;
5803   }
5804 #pragma omp target
5805 #pragma omp teams distribute
5806   for (int i = 0; i < 10; ++i) {
5807 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5808     for (int i = 0; i < 10; ++i)
5809       ;
5810   }
5811 #pragma omp target
5812 #pragma omp teams distribute
5813   for (int i = 0; i < 10; ++i) {
5814 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5815     ++a;
5816   }
5817 #pragma omp target
5818 #pragma omp teams distribute
5819   for (int i = 0; i < 10; ++i) {
5820 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5821     ++a;
5822   }
5823 #pragma omp target
5824 #pragma omp teams distribute
5825   for (int i = 0; i < 10; ++i) {
5826 #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?}}
5827     ++a;
5828   }
5829 #pragma omp target
5830 #pragma omp teams distribute
5831   for (int i = 0; i < 10; ++i) {
5832 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5833     ++a;
5834   }
5835 #pragma omp target
5836 #pragma omp teams distribute
5837   for (int i = 0; i < 10; ++i) {
5838 #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?}}
5839     for (int i = 0; i < 10; ++i)
5840       ++a;
5841   }
5842 #pragma omp target
5843 #pragma omp teams distribute
5844   for (int i = 0; i < 10; ++i) {
5845 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5846     for (int i = 0; i < 10; ++i)
5847       ++a;
5848   }
5849 #pragma omp target
5850 #pragma omp teams distribute
5851   for (int i = 0; i < 10; ++i) {
5852 #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?}}
5853     for (int i = 0; i < 10; ++i)
5854       ++a;
5855   }
5856 #pragma omp target
5857 #pragma omp teams distribute
5858   for (int i = 0; i < 10; ++i) {
5859 #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?}}
5860     for (int i = 0; i < 10; ++i)
5861       ++a;
5862   }
5863 #pragma omp target
5864 #pragma omp teams distribute
5865   for (int i = 0; i < 10; ++i) {
5866 #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?}}
5867     for (int i = 0; i < 10; ++i)
5868       ++a;
5869   }
5870 
5871  // TEAMS DISTRIBUTE DIRECTIVE
5872 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5873   for (int i = 0; i < 10; ++i)
5874     ;
5875 #pragma omp target
5876 #pragma omp teams distribute
5877   for (int i = 0; i < 10; ++i) {
5878 #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?}}
5879     for (int i = 0; i < 10; ++i)
5880       ;
5881   }
5882 #pragma omp target
5883 #pragma omp teams distribute
5884   for (int i = 0; i < 10; ++i) {
5885 #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?}}
5886     for (int i = 0; i < 10; ++i)
5887       ;
5888   }
5889 #pragma omp target
5890 #pragma omp teams distribute
5891   for (int i = 0; i < 10; ++i) {
5892 #pragma omp for // OK
5893     for (int i = 0; i < 10; ++i)
5894       ;
5895   }
5896 #pragma omp target
5897 #pragma omp teams distribute
5898   for (int i = 0; i < 10; ++i) {
5899 #pragma omp simd // OK
5900     for (int i = 0; i < 10; ++i)
5901       ;
5902   }
5903 #pragma omp target
5904 #pragma omp teams distribute
5905   for (int i = 0; i < 10; ++i) {
5906 #pragma omp for simd // OK
5907     for (int i = 0; i < 10; ++i)
5908       ;
5909   }
5910 #pragma omp target
5911 #pragma omp teams distribute
5912   for (int i = 0; i < 10; ++i) {
5913 #pragma omp parallel // OK
5914     for (int i = 0; i < 10; ++i)
5915       ;
5916   }
5917 #pragma omp target
5918 #pragma omp teams distribute
5919   for (int i = 0; i < 10; ++i) {
5920 #pragma omp sections // OK
5921     {
5922       bar();
5923     }
5924   }
5925 #pragma omp target
5926 #pragma omp teams distribute
5927   for (int i = 0; i < 10; ++i) {
5928 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
5929     {
5930       bar();
5931     }
5932   }
5933 #pragma omp target
5934 #pragma omp teams distribute
5935   for (int i = 0; i < 10; ++i) {
5936 #pragma omp single // OK
5937     {
5938       bar();
5939     }
5940   }
5941 #pragma omp target
5942 #pragma omp teams distribute
5943   for (int i = 0; i < 10; ++i) {
5944 #pragma omp master // OK
5945     {
5946       bar();
5947     }
5948   }
5949 #pragma omp target
5950 #pragma omp teams distribute
5951   for (int i = 0; i < 10; ++i) {
5952 #pragma omp critical // OK
5953     {
5954       bar();
5955     }
5956   }
5957 #pragma omp target
5958 #pragma omp teams distribute
5959   for (int i = 0; i < 10; ++i) {
5960 #pragma omp parallel // OK
5961     {
5962 #pragma omp single
5963       {
5964 	bar();
5965       }
5966     }
5967   }
5968 #pragma omp target
5969 #pragma omp teams distribute
5970   for (int i = 0; i < 10; ++i) {
5971 #pragma omp parallel for // OK
5972     for (int i = 0; i < 10; ++i)
5973       ;
5974   }
5975 #pragma omp target
5976 #pragma omp teams distribute
5977   for (int i = 0; i < 10; ++i) {
5978 #pragma omp parallel for simd // OK
5979     for (int i = 0; i < 10; ++i)
5980       ;
5981   }
5982 #pragma omp target
5983 #pragma omp teams distribute
5984   for (int i = 0; i < 10; ++i) {
5985 #pragma omp parallel sections // OK
5986     {
5987       bar();
5988     }
5989   }
5990 #pragma omp target
5991 #pragma omp teams distribute
5992   for (int i = 0; i < 10; ++i) {
5993 #pragma omp task // OK
5994     {
5995       bar();
5996     }
5997   }
5998 #pragma omp target
5999 #pragma omp teams distribute
6000   for (int i = 0; i < 10; ++i) {
6001 #pragma omp taskyield // OK
6002     bar();
6003   }
6004 #pragma omp target
6005 #pragma omp teams distribute
6006   for (int i = 0; i < 10; ++i) {
6007 #pragma omp barrier // OK
6008     bar();
6009   }
6010 #pragma omp target
6011 #pragma omp teams distribute
6012   for (int i = 0; i < 10; ++i) {
6013 #pragma omp taskwait // OK
6014     bar();
6015   }
6016 #pragma omp target
6017 #pragma omp teams distribute
6018   for (int i = 0; i < 10; ++i) {
6019 #pragma omp flush // OK
6020     bar();
6021   }
6022 #pragma omp target
6023 #pragma omp teams distribute
6024   for (int i = 0; i < 10; ++i) {
6025 #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?}}
6026     bar();
6027   }
6028 #pragma omp target
6029 #pragma omp teams distribute
6030   for (int i = 0; i < 10; ++i) {
6031 #pragma omp atomic // OK
6032     ++a;
6033   }
6034 #pragma omp target
6035 #pragma omp teams distribute
6036   for (int i = 0; i < 10; ++i) {
6037 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6038     ++a;
6039   }
6040 #pragma omp target
6041 #pragma omp teams distribute
6042   for (int i = 0; i < 10; ++i) {
6043 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6044     ++a;
6045   }
6046 #pragma omp target
6047 #pragma omp teams distribute
6048   for (int i = 0; i < 10; ++i) {
6049 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6050     for (int i = 0; i < 10; ++i)
6051       ;
6052   }
6053 #pragma omp target
6054 #pragma omp teams distribute
6055   for (int i = 0; i < 10; ++i) {
6056 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6057     ++a;
6058   }
6059 #pragma omp target
6060 #pragma omp teams distribute
6061   for (int i = 0; i < 10; ++i) {
6062 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6063     ++a;
6064   }
6065 #pragma omp target
6066 #pragma omp teams distribute
6067   for (int i = 0; i < 10; ++i) {
6068 #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?}}
6069     ++a;
6070   }
6071 #pragma omp target
6072 #pragma omp teams distribute
6073   for (int i = 0; i < 10; ++i) {
6074 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6075     ++a;
6076   }
6077 #pragma omp target
6078 #pragma omp teams distribute
6079   for (int i = 0; i < 10; ++i) {
6080 #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?}}
6081     for (int i = 0; i < 10; ++i)
6082       ++a;
6083   }
6084 #pragma omp target
6085 #pragma omp teams distribute
6086   for (int i = 0; i < 10; ++i) {
6087 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6088     for (int i = 0; i < 10; ++i)
6089       ++a;
6090   }
6091 #pragma omp target
6092 #pragma omp teams distribute
6093   for (int i = 0; i < 10; ++i) {
6094 #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?}}
6095     for (int i = 0; i < 10; ++i)
6096       ++a;
6097   }
6098 #pragma omp target
6099 #pragma omp teams distribute
6100   for (int i = 0; i < 10; ++i) {
6101 #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?}}
6102     for (int i = 0; i < 10; ++i)
6103       ++a;
6104   }
6105 #pragma omp target
6106 #pragma omp teams distribute
6107   for (int i = 0; i < 10; ++i) {
6108 #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?}}
6109     for (int i = 0; i < 10; ++i)
6110       ++a;
6111   }
6112 #pragma omp target
6113 #pragma omp teams distribute
6114   for (int i = 0; i < 10; ++i) {
6115 #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?}}
6116     for (int i = 0; i < 10; ++i)
6117       ++a;
6118   }
6119 
6120 // TEAMS DISTRIBUTE SIMD DIRECTIVE
6121 #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?}}
6122   for (int i = 0; i < 10; ++i)
6123     ;
6124 #pragma omp target
6125 #pragma omp teams distribute simd
6126   for (int i = 0; i < 10; ++i) {
6127 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6128     for (int i = 0; i < 10; ++i)
6129       ;
6130   }
6131 #pragma omp target
6132 #pragma omp teams distribute simd
6133   for (int i = 0; i < 10; ++i) {
6134 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6135     for (int i = 0; i < 10; ++i)
6136       ;
6137   }
6138 #pragma omp target
6139 #pragma omp teams distribute simd
6140   for (int i = 0; i < 10; ++i) {
6141 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6142     for (int i = 0; i < 10; ++i)
6143       ;
6144   }
6145 #pragma omp target
6146 #pragma omp teams distribute simd
6147   for (int i = 0; i < 10; ++i) {
6148 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6149     for (int i = 0; i < 10; ++i)
6150       ;
6151   }
6152 #pragma omp target
6153 #pragma omp teams distribute simd
6154   for (int i = 0; i < 10; ++i) {
6155 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6156     for (int i = 0; i < 10; ++i)
6157       ;
6158   }
6159 #pragma omp target
6160 #pragma omp teams distribute simd
6161   for (int i = 0; i < 10; ++i) {
6162 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6163     for (int i = 0; i < 10; ++i)
6164       ;
6165   }
6166 #pragma omp target
6167 #pragma omp teams distribute simd
6168   for (int i = 0; i < 10; ++i) {
6169 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6170     {
6171       bar();
6172     }
6173   }
6174 #pragma omp target
6175 #pragma omp teams distribute simd
6176   for (int i = 0; i < 10; ++i) {
6177 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6178     {
6179       bar();
6180     }
6181   }
6182 #pragma omp target
6183 #pragma omp teams distribute simd
6184   for (int i = 0; i < 10; ++i) {
6185 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6186     {
6187       bar();
6188     }
6189   }
6190 #pragma omp target
6191 #pragma omp teams distribute simd
6192   for (int i = 0; i < 10; ++i) {
6193 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6194     {
6195       bar();
6196     }
6197   }
6198 #pragma omp target
6199 #pragma omp teams distribute simd
6200   for (int i = 0; i < 10; ++i) {
6201 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6202     {
6203       bar();
6204     }
6205   }
6206 #pragma omp target
6207 #pragma omp teams distribute simd
6208   for (int i = 0; i < 10; ++i) {
6209 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6210     {
6211 #pragma omp single
6212       {
6213 	bar();
6214       }
6215     }
6216   }
6217 #pragma omp target
6218 #pragma omp teams distribute simd
6219   for (int i = 0; i < 10; ++i) {
6220 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6221     for (int i = 0; i < 10; ++i)
6222       ;
6223   }
6224 #pragma omp target
6225 #pragma omp teams distribute simd
6226   for (int i = 0; i < 10; ++i) {
6227 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6228     for (int i = 0; i < 10; ++i)
6229       ;
6230   }
6231 #pragma omp target
6232 #pragma omp teams distribute simd
6233   for (int i = 0; i < 10; ++i) {
6234 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6235     {
6236       bar();
6237     }
6238   }
6239 #pragma omp target
6240 #pragma omp teams distribute simd
6241   for (int i = 0; i < 10; ++i) {
6242 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6243     {
6244       bar();
6245     }
6246   }
6247 #pragma omp target
6248 #pragma omp teams distribute simd
6249   for (int i = 0; i < 10; ++i) {
6250 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6251     bar();
6252   }
6253 #pragma omp target
6254 #pragma omp teams distribute simd
6255   for (int i = 0; i < 10; ++i) {
6256 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6257     bar();
6258   }
6259 #pragma omp target
6260 #pragma omp teams distribute simd
6261   for (int i = 0; i < 10; ++i) {
6262 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6263     bar();
6264   }
6265 #pragma omp target
6266 #pragma omp teams distribute simd
6267   for (int i = 0; i < 10; ++i) {
6268 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6269     bar();
6270   }
6271 #pragma omp target
6272 #pragma omp teams distribute simd
6273   for (int i = 0; i < 10; ++i) {
6274 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6275     bar();
6276   }
6277 #pragma omp target
6278 #pragma omp teams distribute simd
6279   for (int i = 0; i < 10; ++i) {
6280 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6281     ++a;
6282   }
6283 #pragma omp target
6284 #pragma omp teams distribute simd
6285   for (int i = 0; i < 10; ++i) {
6286 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6287     ++a;
6288   }
6289 #pragma omp target
6290 #pragma omp teams distribute simd
6291   for (int i = 0; i < 10; ++i) {
6292 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6293     ++a;
6294   }
6295 #pragma omp target
6296 #pragma omp teams distribute simd
6297   for (int i = 0; i < 10; ++i) {
6298 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6299     for (int i = 0; i < 10; ++i)
6300       ;
6301   }
6302 #pragma omp target
6303 #pragma omp teams distribute simd
6304   for (int i = 0; i < 10; ++i) {
6305 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6306     ++a;
6307   }
6308 #pragma omp target
6309 #pragma omp teams distribute simd
6310   for (int i = 0; i < 10; ++i) {
6311 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6312     ++a;
6313   }
6314 #pragma omp target
6315 #pragma omp teams distribute simd
6316   for (int i = 0; i < 10; ++i) {
6317 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6318     ++a;
6319   }
6320 #pragma omp target
6321 #pragma omp teams distribute simd
6322   for (int i = 0; i < 10; ++i) {
6323 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6324     ++a;
6325   }
6326 #pragma omp target
6327 #pragma omp teams distribute simd
6328   for (int i = 0; i < 10; ++i) {
6329 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6330     for (int i = 0; i < 10; ++i)
6331       ++a;
6332   }
6333 #pragma omp target
6334 #pragma omp teams distribute simd
6335   for (int i = 0; i < 10; ++i) {
6336 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6337     for (int i = 0; i < 10; ++i)
6338       ++a;
6339   }
6340 #pragma omp target
6341 #pragma omp teams distribute simd
6342   for (int i = 0; i < 10; ++i) {
6343 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6344     for (int i = 0; i < 10; ++i)
6345       ++a;
6346   }
6347 #pragma omp target
6348 #pragma omp teams distribute simd
6349   for (int i = 0; i < 10; ++i) {
6350 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6351     for (int i = 0; i < 10; ++i)
6352       ++a;
6353   }
6354 #pragma omp target
6355 #pragma omp teams distribute simd
6356   for (int i = 0; i < 10; ++i) {
6357 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6358     for (int i = 0; i < 10; ++i)
6359       ++a;
6360   }
6361 #pragma omp target
6362 #pragma omp teams distribute simd
6363   for (int i = 0; i < 10; ++i) {
6364 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6365     for (int i = 0; i < 10; ++i)
6366       ++a;
6367   }
6368 
6369 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
6370 #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?}}
6371   for (int i = 0; i < 10; ++i)
6372     ;
6373 #pragma omp target
6374 #pragma omp teams distribute parallel for simd
6375   for (int i = 0; i < 10; ++i) {
6376 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6377     for (int i = 0; i < 10; ++i)
6378       ;
6379   }
6380 #pragma omp target
6381 #pragma omp teams distribute parallel for simd
6382   for (int i = 0; i < 10; ++i) {
6383 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6384     for (int i = 0; i < 10; ++i)
6385       ;
6386   }
6387 #pragma omp target
6388 #pragma omp teams distribute parallel for simd
6389   for (int i = 0; i < 10; ++i) {
6390 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6391     for (int i = 0; i < 10; ++i)
6392       ;
6393   }
6394 #pragma omp target
6395 #pragma omp teams distribute parallel for simd
6396   for (int i = 0; i < 10; ++i) {
6397 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6398     for (int i = 0; i < 10; ++i)
6399       ;
6400   }
6401 #pragma omp target
6402 #pragma omp teams distribute parallel for simd
6403   for (int i = 0; i < 10; ++i) {
6404 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6405     for (int i = 0; i < 10; ++i)
6406       ;
6407   }
6408 #pragma omp target
6409 #pragma omp teams distribute parallel for simd
6410   for (int i = 0; i < 10; ++i) {
6411 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6412     for (int i = 0; i < 10; ++i)
6413       ;
6414   }
6415 #pragma omp target
6416 #pragma omp teams distribute parallel for simd
6417   for (int i = 0; i < 10; ++i) {
6418 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6419     {
6420       bar();
6421     }
6422   }
6423 #pragma omp target
6424 #pragma omp teams distribute parallel for simd
6425   for (int i = 0; i < 10; ++i) {
6426 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6427     {
6428       bar();
6429     }
6430   }
6431 #pragma omp target
6432 #pragma omp teams distribute parallel for simd
6433   for (int i = 0; i < 10; ++i) {
6434 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6435     {
6436       bar();
6437     }
6438   }
6439 #pragma omp target
6440 #pragma omp teams distribute parallel for simd
6441   for (int i = 0; i < 10; ++i) {
6442 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6443     {
6444       bar();
6445     }
6446   }
6447 #pragma omp target
6448 #pragma omp teams distribute parallel for simd
6449   for (int i = 0; i < 10; ++i) {
6450 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6451     {
6452       bar();
6453     }
6454   }
6455 #pragma omp target
6456 #pragma omp teams distribute parallel for simd
6457   for (int i = 0; i < 10; ++i) {
6458 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6459     {
6460 #pragma omp single
6461       {
6462 	bar();
6463       }
6464     }
6465   }
6466 #pragma omp target
6467 #pragma omp teams distribute parallel for simd
6468   for (int i = 0; i < 10; ++i) {
6469 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6470     for (int i = 0; i < 10; ++i)
6471       ;
6472   }
6473 #pragma omp target
6474 #pragma omp teams distribute parallel for simd
6475   for (int i = 0; i < 10; ++i) {
6476 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6477     for (int i = 0; i < 10; ++i)
6478       ;
6479   }
6480 #pragma omp target
6481 #pragma omp teams distribute parallel for simd
6482   for (int i = 0; i < 10; ++i) {
6483 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6484     {
6485       bar();
6486     }
6487   }
6488 #pragma omp target
6489 #pragma omp teams distribute parallel for simd
6490   for (int i = 0; i < 10; ++i) {
6491 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6492     {
6493       bar();
6494     }
6495   }
6496 #pragma omp target
6497 #pragma omp teams distribute parallel for simd
6498   for (int i = 0; i < 10; ++i) {
6499 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6500     bar();
6501   }
6502 #pragma omp target
6503 #pragma omp teams distribute parallel for simd
6504   for (int i = 0; i < 10; ++i) {
6505 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6506     bar();
6507   }
6508 #pragma omp target
6509 #pragma omp teams distribute parallel for simd
6510   for (int i = 0; i < 10; ++i) {
6511 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6512     bar();
6513   }
6514 #pragma omp target
6515 #pragma omp teams distribute parallel for simd
6516   for (int i = 0; i < 10; ++i) {
6517 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6518     bar();
6519   }
6520 #pragma omp target
6521 #pragma omp teams distribute parallel for simd
6522   for (int i = 0; i < 10; ++i) {
6523 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6524     bar();
6525   }
6526 #pragma omp target
6527 #pragma omp teams distribute parallel for simd
6528   for (int i = 0; i < 10; ++i) {
6529 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6530     ++a;
6531   }
6532 #pragma omp target
6533 #pragma omp teams distribute parallel for simd
6534   for (int i = 0; i < 10; ++i) {
6535 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6536     ++a;
6537   }
6538 #pragma omp target
6539 #pragma omp teams distribute parallel for simd
6540   for (int i = 0; i < 10; ++i) {
6541 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6542     ++a;
6543   }
6544 #pragma omp target
6545 #pragma omp teams distribute parallel for simd
6546   for (int i = 0; i < 10; ++i) {
6547 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6548     for (int i = 0; i < 10; ++i)
6549       ;
6550   }
6551 #pragma omp target
6552 #pragma omp teams distribute parallel for simd
6553   for (int i = 0; i < 10; ++i) {
6554 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6555     ++a;
6556   }
6557 #pragma omp target
6558 #pragma omp teams distribute parallel for simd
6559   for (int i = 0; i < 10; ++i) {
6560 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6561     ++a;
6562   }
6563 #pragma omp target
6564 #pragma omp teams distribute parallel for simd
6565   for (int i = 0; i < 10; ++i) {
6566 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6567     ++a;
6568   }
6569 #pragma omp target
6570 #pragma omp teams distribute parallel for simd
6571   for (int i = 0; i < 10; ++i) {
6572 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6573     ++a;
6574   }
6575 #pragma omp target
6576 #pragma omp teams distribute parallel for simd
6577   for (int i = 0; i < 10; ++i) {
6578 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6579     for (int i = 0; i < 10; ++i)
6580       ++a;
6581   }
6582 #pragma omp target
6583 #pragma omp teams distribute parallel for simd
6584   for (int i = 0; i < 10; ++i) {
6585 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6586     for (int i = 0; i < 10; ++i)
6587       ++a;
6588   }
6589 #pragma omp target
6590 #pragma omp teams distribute parallel for simd
6591   for (int i = 0; i < 10; ++i) {
6592 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6593     for (int i = 0; i < 10; ++i)
6594       ++a;
6595   }
6596 #pragma omp target
6597 #pragma omp teams distribute parallel for simd
6598   for (int i = 0; i < 10; ++i) {
6599 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6600     for (int i = 0; i < 10; ++i)
6601       ++a;
6602   }
6603 #pragma omp target
6604 #pragma omp teams distribute parallel for simd
6605   for (int i = 0; i < 10; ++i) {
6606 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6607     for (int i = 0; i < 10; ++i)
6608       ++a;
6609   }
6610 #pragma omp target
6611 #pragma omp teams distribute parallel for simd
6612   for (int i = 0; i < 10; ++i) {
6613 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6614     for (int i = 0; i < 10; ++i)
6615       ++a;
6616   }
6617 
6618 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
6619 #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?}}
6620   for (int i = 0; i < 10; ++i)
6621     ;
6622 #pragma omp target
6623 #pragma omp teams distribute parallel for
6624   for (int i = 0; i < 10; ++i) {
6625 #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?}}
6626     for (int i = 0; i < 10; ++i)
6627       ;
6628   }
6629 #pragma omp target
6630 #pragma omp teams distribute parallel for
6631   for (int i = 0; i < 10; ++i) {
6632 #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?}}
6633     for (int i = 0; i < 10; ++i)
6634       ;
6635   }
6636 #pragma omp target
6637 #pragma omp teams distribute parallel for
6638   for (int i = 0; i < 10; ++i) {
6639 #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?}}
6640     for (int i = 0; i < 10; ++i)
6641       ;
6642   }
6643 #pragma omp target
6644 #pragma omp teams distribute parallel for
6645   for (int i = 0; i < 10; ++i) {
6646 #pragma omp simd // OK
6647     for (int i = 0; i < 10; ++i)
6648       ;
6649   }
6650 #pragma omp target
6651 #pragma omp teams distribute parallel for
6652   for (int i = 0; i < 10; ++i) {
6653 #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?}}
6654     for (int i = 0; i < 10; ++i)
6655       ;
6656   }
6657 #pragma omp target
6658 #pragma omp teams distribute parallel for
6659   for (int i = 0; i < 10; ++i) {
6660 #pragma omp parallel // OK
6661     for (int i = 0; i < 10; ++i)
6662       ;
6663   }
6664 #pragma omp target
6665 #pragma omp teams distribute parallel for
6666   for (int i = 0; i < 10; ++i) {
6667 #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?}}
6668     {
6669       bar();
6670     }
6671   }
6672 #pragma omp target
6673 #pragma omp teams distribute parallel for
6674   for (int i = 0; i < 10; ++i) {
6675 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
6676     {
6677       bar();
6678     }
6679   }
6680 #pragma omp target
6681 #pragma omp teams distribute parallel for
6682   for (int i = 0; i < 10; ++i) {
6683 #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?}}
6684     {
6685       bar();
6686     }
6687   }
6688 #pragma omp target
6689 #pragma omp teams distribute parallel for
6690   for (int i = 0; i < 10; ++i) {
6691 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
6692     {
6693       bar();
6694     }
6695   }
6696 #pragma omp target
6697 #pragma omp teams distribute parallel for
6698   for (int i = 0; i < 10; ++i) {
6699 #pragma omp critical // OK
6700     {
6701       bar();
6702     }
6703   }
6704 #pragma omp target
6705 #pragma omp teams distribute parallel for
6706   for (int i = 0; i < 10; ++i) {
6707 #pragma omp parallel // OK
6708     {
6709 #pragma omp single
6710       {
6711 	bar();
6712       }
6713     }
6714   }
6715 #pragma omp target
6716 #pragma omp teams distribute parallel for
6717   for (int i = 0; i < 10; ++i) {
6718 #pragma omp parallel for // OK
6719     for (int i = 0; i < 10; ++i)
6720       ;
6721   }
6722 #pragma omp target
6723 #pragma omp teams distribute parallel for
6724   for (int i = 0; i < 10; ++i) {
6725 #pragma omp parallel for simd // OK
6726     for (int i = 0; i < 10; ++i)
6727       ;
6728   }
6729 #pragma omp target
6730 #pragma omp teams distribute parallel for
6731   for (int i = 0; i < 10; ++i) {
6732 #pragma omp parallel sections // OK
6733     {
6734       bar();
6735     }
6736   }
6737 #pragma omp target
6738 #pragma omp teams distribute parallel for
6739   for (int i = 0; i < 10; ++i) {
6740 #pragma omp task // OK
6741     {
6742       bar();
6743     }
6744   }
6745 #pragma omp target
6746 #pragma omp teams distribute parallel for
6747   for (int i = 0; i < 10; ++i) {
6748 #pragma omp taskyield // OK
6749     bar();
6750   }
6751 #pragma omp target
6752 #pragma omp teams distribute parallel for
6753   for (int i = 0; i < 10; ++i) {
6754 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
6755     bar();
6756   }
6757 #pragma omp target
6758 #pragma omp teams distribute parallel for
6759   for (int i = 0; i < 10; ++i) {
6760 #pragma omp taskwait // OK
6761     bar();
6762   }
6763 #pragma omp target
6764 #pragma omp teams distribute parallel for
6765   for (int i = 0; i < 10; ++i) {
6766 #pragma omp flush // OK
6767     bar();
6768   }
6769 #pragma omp target
6770 #pragma omp teams distribute parallel for
6771   for (int i = 0; i < 10; ++i) {
6772 #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?}}
6773     bar();
6774   }
6775 #pragma omp target
6776 #pragma omp teams distribute parallel for
6777   for (int i = 0; i < 10; ++i) {
6778 #pragma omp atomic // OK
6779     ++a;
6780   }
6781 #pragma omp target
6782 #pragma omp teams distribute parallel for
6783   for (int i = 0; i < 10; ++i) {
6784 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6785     ++a;
6786   }
6787 #pragma omp target
6788 #pragma omp teams distribute parallel for
6789   for (int i = 0; i < 10; ++i) {
6790 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6791     ++a;
6792   }
6793 #pragma omp target
6794 #pragma omp teams distribute parallel for
6795   for (int i = 0; i < 10; ++i) {
6796 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6797     for (int i = 0; i < 10; ++i)
6798       ;
6799   }
6800 #pragma omp target
6801 #pragma omp teams distribute parallel for
6802   for (int i = 0; i < 10; ++i) {
6803 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6804     ++a;
6805   }
6806 #pragma omp target
6807 #pragma omp teams distribute parallel for
6808   for (int i = 0; i < 10; ++i) {
6809 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6810     ++a;
6811   }
6812 #pragma omp target
6813 #pragma omp teams distribute parallel for
6814   for (int i = 0; i < 10; ++i) {
6815 #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?}}
6816     ++a;
6817   }
6818 #pragma omp target
6819 #pragma omp teams distribute parallel for
6820   for (int i = 0; i < 10; ++i) {
6821 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6822     ++a;
6823   }
6824 #pragma omp target
6825 #pragma omp teams distribute parallel for
6826   for (int i = 0; i < 10; ++i) {
6827 #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?}}
6828     for (int i = 0; i < 10; ++i)
6829       ++a;
6830   }
6831 #pragma omp target
6832 #pragma omp teams distribute parallel for
6833   for (int i = 0; i < 10; ++i) {
6834 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6835     for (int i = 0; i < 10; ++i)
6836       ++a;
6837   }
6838 #pragma omp target
6839 #pragma omp teams distribute parallel for
6840   for (int i = 0; i < 10; ++i) {
6841 #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?}}
6842     for (int i = 0; i < 10; ++i)
6843       ++a;
6844   }
6845 #pragma omp target
6846 #pragma omp teams distribute parallel for
6847   for (int i = 0; i < 10; ++i) {
6848 #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?}}
6849     for (int i = 0; i < 10; ++i)
6850       ++a;
6851   }
6852 #pragma omp target
6853 #pragma omp teams distribute parallel for
6854   for (int i = 0; i < 10; ++i) {
6855 #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?}}
6856     for (int i = 0; i < 10; ++i)
6857       ++a;
6858   }
6859 #pragma omp target
6860 #pragma omp teams distribute parallel for
6861   for (int i = 0; i < 10; ++i) {
6862 #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?}}
6863     for (int i = 0; i < 10; ++i)
6864       ++a;
6865   }
6866 }
6867 
6868 void foo() {
6869   int a = 0;
6870 // PARALLEL DIRECTIVE
6871 #pragma omp parallel
6872 #pragma omp for
6873   for (int i = 0; i < 10; ++i)
6874     ;
6875 #pragma omp parallel
6876 #pragma omp simd
6877   for (int i = 0; i < 10; ++i)
6878     ;
6879 #pragma omp parallel
6880 #pragma omp for simd
6881   for (int i = 0; i < 10; ++i)
6882     ;
6883 #pragma omp parallel
6884 #pragma omp sections
6885   {
6886     bar();
6887   }
6888 #pragma omp parallel
6889 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
6890   {
6891     bar();
6892   }
6893 #pragma omp parallel
6894 #pragma omp sections
6895   {
6896     bar();
6897   }
6898 #pragma omp parallel
6899 #pragma omp single
6900   bar();
6901 #pragma omp parallel
6902 #pragma omp master
6903   bar();
6904 #pragma omp parallel
6905 #pragma omp critical
6906   bar();
6907 #pragma omp parallel
6908 #pragma omp parallel for
6909   for (int i = 0; i < 10; ++i)
6910     ;
6911 #pragma omp parallel
6912 #pragma omp parallel for simd
6913   for (int i = 0; i < 10; ++i)
6914     ;
6915 #pragma omp parallel
6916 #pragma omp parallel sections
6917   {
6918     bar();
6919   }
6920 #pragma omp parallel
6921 #pragma omp task
6922   {
6923     bar();
6924   }
6925 #pragma omp parallel
6926   {
6927 #pragma omp taskyield
6928     bar();
6929   }
6930 #pragma omp parallel
6931   {
6932 #pragma omp barrier
6933     bar();
6934   }
6935 #pragma omp parallel
6936   {
6937 #pragma omp taskwait
6938     bar();
6939   }
6940 #pragma omp parallel
6941   {
6942 #pragma omp flush
6943     bar();
6944   }
6945 #pragma omp parallel
6946   {
6947 #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?}}
6948     bar();
6949   }
6950 #pragma omp parallel
6951   {
6952 #pragma omp atomic
6953     ++a;
6954   }
6955 #pragma omp parallel
6956   {
6957 #pragma omp target
6958     ++a;
6959   }
6960 #pragma omp parallel
6961   {
6962 #pragma omp target parallel
6963     ++a;
6964   }
6965 #pragma omp parallel
6966 #pragma omp target parallel for
6967   for (int i = 0; i < 10; ++i)
6968     ;
6969 #pragma omp parallel
6970   {
6971 #pragma omp target enter data map(to: a)
6972     ++a;
6973   }
6974 #pragma omp parallel
6975   {
6976 #pragma omp target exit data map(from: a)
6977     ++a;
6978   }
6979 #pragma omp parallel
6980   {
6981 #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?}}
6982     ++a;
6983   }
6984 #pragma omp parallel
6985   {
6986 #pragma omp taskloop
6987   for (int i = 0; i < 10; ++i)
6988     ++a;
6989   }
6990 #pragma omp parallel
6991   {
6992 #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?}}
6993     for (int i = 0; i < 10; ++i)
6994       ;
6995   }
6996 #pragma omp parallel
6997   {
6998 #pragma omp target update to(a)
6999     a++;
7000   }
7001 #pragma omp parallel
7002   {
7003 #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?}}
7004     for (int i = 0; i < 10; ++i)
7005       ;
7006   }
7007 #pragma omp parallel
7008   {
7009 #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?}}
7010     for (int i = 0; i < 10; ++i)
7011       ;
7012   }
7013 #pragma omp parallel
7014   {
7015 #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?}}
7016     for (int i = 0; i < 10; ++i)
7017       ;
7018   }
7019 #pragma omp parallel
7020   {
7021 #pragma omp target simd // OK
7022     for (int i = 0; i < 10; ++i)
7023       ;
7024   }
7025 #pragma omp parallel
7026   {
7027 #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?}}
7028     for (int i = 0; i < 10; ++i)
7029       ;
7030   }
7031 #pragma omp parallel
7032   {
7033 #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?}}
7034     for (int i = 0; i < 10; ++i)
7035       ;
7036   }
7037 #pragma omp parallel
7038   {
7039 #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?}}
7040     for (int i = 0; i < 10; ++i)
7041       ;
7042   }
7043 #pragma omp parallel
7044   {
7045 #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?}}
7046     for (int i = 0; i < 10; ++i)
7047       ;
7048   }
7049 
7050 // SIMD DIRECTIVE
7051 #pragma omp simd
7052   for (int i = 0; i < 10; ++i) {
7053 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7054     for (int i = 0; i < 10; ++i)
7055       ;
7056   }
7057 #pragma omp simd
7058   for (int i = 0; i < 10; ++i) {
7059 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7060     for (int i = 0; i < 10; ++i)
7061       ;
7062   }
7063 #pragma omp simd
7064   for (int i = 0; i < 10; ++i) {
7065 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7066     for (int i = 0; i < 10; ++i)
7067       ;
7068   }
7069 #pragma omp simd
7070   for (int i = 0; i < 10; ++i) {
7071 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7072     for (int i = 0; i < 10; ++i)
7073       ;
7074   }
7075 #pragma omp simd
7076   for (int i = 0; i < 10; ++i) {
7077 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7078     {
7079       bar();
7080     }
7081   }
7082 #pragma omp simd
7083   for (int i = 0; i < 10; ++i) {
7084 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7085     {
7086       bar();
7087     }
7088   }
7089 #pragma omp simd
7090   for (int i = 0; i < 10; ++i) {
7091 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7092     bar();
7093 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7094     bar();
7095   }
7096 #pragma omp simd
7097   for (int i = 0; i < 10; ++i) {
7098 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7099     bar();
7100 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7101     bar();
7102   }
7103 #pragma omp simd
7104   for (int i = 0; i < 10; ++i) {
7105 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7106     for (int i = 0; i < 10; ++i)
7107       ;
7108   }
7109 #pragma omp simd
7110   for (int i = 0; i < 10; ++i) {
7111 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7112     for (int i = 0; i < 10; ++i)
7113       ;
7114   }
7115 #pragma omp simd
7116   for (int i = 0; i < 10; ++i) {
7117 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7118     {
7119       bar();
7120     }
7121   }
7122 #pragma omp simd
7123   for (int i = 0; i < 10; ++i) {
7124 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7125     {
7126       bar();
7127     }
7128   }
7129 #pragma omp simd
7130   for (int i = 0; i < 10; ++i) {
7131 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7132     bar();
7133   }
7134 #pragma omp simd
7135   for (int i = 0; i < 10; ++i) {
7136 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7137     bar();
7138   }
7139 #pragma omp simd
7140   for (int i = 0; i < 10; ++i) {
7141 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7142     bar();
7143   }
7144 #pragma omp simd
7145   for (int i = 0; i < 10; ++i) {
7146 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7147     bar();
7148   }
7149 #pragma omp simd
7150   for (int i = 0; i < 10; ++i) {
7151 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7152     bar();
7153   }
7154 #pragma omp simd
7155   for (int i = 0; i < 10; ++i) {
7156 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7157     ++a;
7158   }
7159 #pragma omp simd
7160   for (int i = 0; i < 10; ++i) {
7161 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7162     ++a;
7163   }
7164 #pragma omp simd
7165   for (int i = 0; i < 10; ++i) {
7166 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7167     ++a;
7168   }
7169 #pragma omp simd
7170   for (int i = 0; i < 10; ++i) {
7171 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7172     for (int i = 0; i < 10; ++i)
7173       ;
7174   }
7175 #pragma omp simd
7176   for (int i = 0; i < 10; ++i) {
7177 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7178     ++a;
7179   }
7180 #pragma omp simd
7181   for (int i = 0; i < 10; ++i) {
7182 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7183     ++a;
7184   }
7185 #pragma omp simd
7186   for (int i = 0; i < 10; ++i) {
7187 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7188     ++a;
7189   }
7190 #pragma omp simd
7191   for (int i = 0; i < 10; ++i) {
7192 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7193   for (int i = 0; i < 10; ++i)
7194     ++a;
7195   }
7196 #pragma omp simd
7197   for (int i = 0; i < 10; ++i) {
7198 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7199     for (int j = 0; j < 10; ++j)
7200       ;
7201   }
7202 #pragma omp simd
7203   for (int i = 0; i < 10; ++i) {
7204 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7205     a++;
7206   }
7207 #pragma omp simd
7208   for (int i = 0; i < 10; ++i) {
7209 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7210     for (int j = 0; j < 10; ++j)
7211       ;
7212   }
7213 #pragma omp simd
7214   for (int i = 0; i < 10; ++i) {
7215 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7216     for (int j = 0; j < 10; ++j)
7217       ;
7218   }
7219 #pragma omp simd
7220   for (int i = 0; i < 10; ++i) {
7221 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7222     for (int j = 0; j < 10; ++j)
7223       ;
7224   }
7225 #pragma omp simd
7226   for (int i = 0; i < 10; ++i) {
7227 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7228     for (int j = 0; j < 10; ++j)
7229       ;
7230   }
7231 #pragma omp simd
7232   for (int i = 0; i < 10; ++i) {
7233 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7234     for (int j = 0; j < 10; ++j)
7235       ;
7236   }
7237 #pragma omp simd
7238   for (int i = 0; i < 10; ++i) {
7239 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7240     for (int j = 0; j < 10; ++j)
7241       ;
7242   }
7243 #pragma omp simd
7244   for (int i = 0; i < 10; ++i) {
7245 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7246     for (int j = 0; j < 10; ++j)
7247       ;
7248   }
7249 #pragma omp simd
7250   for (int i = 0; i < 10; ++i) {
7251 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7252     for (int j = 0; j < 10; ++j)
7253       ;
7254   }
7255 
7256 // FOR DIRECTIVE
7257 #pragma omp for
7258   for (int i = 0; i < 10; ++i) {
7259 #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?}}
7260     for (int i = 0; i < 10; ++i)
7261       ;
7262   }
7263 #pragma omp for
7264   for (int i = 0; i < 10; ++i) {
7265 #pragma omp simd
7266     for (int i = 0; i < 10; ++i)
7267       ;
7268   }
7269 #pragma omp for
7270   for (int i = 0; i < 10; ++i) {
7271 #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?}}
7272     for (int i = 0; i < 10; ++i)
7273       ;
7274   }
7275 #pragma omp for
7276   for (int i = 0; i < 10; ++i) {
7277 #pragma omp parallel
7278     for (int i = 0; i < 10; ++i)
7279       ;
7280   }
7281 #pragma omp for
7282   for (int i = 0; i < 10; ++i) {
7283 #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?}}
7284     {
7285       bar();
7286     }
7287   }
7288 #pragma omp for
7289   for (int i = 0; i < 10; ++i) {
7290 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
7291     {
7292       bar();
7293     }
7294   }
7295 #pragma omp for
7296   for (int i = 0; i < 10; ++i) {
7297 #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?}}
7298     bar();
7299 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
7300     bar();
7301 #pragma omp critical
7302     bar();
7303   }
7304 #pragma omp for
7305   for (int i = 0; i < 10; ++i) {
7306 #pragma omp parallel
7307     {
7308 #pragma omp single // OK
7309       {
7310         bar();
7311       }
7312 #pragma omp for // OK
7313       for (int i = 0; i < 10; ++i)
7314         ;
7315 #pragma omp for simd // OK
7316       for (int i = 0; i < 10; ++i)
7317         ;
7318 #pragma omp sections // OK
7319       {
7320         bar();
7321       }
7322     }
7323   }
7324 #pragma omp for
7325   for (int i = 0; i < 10; ++i) {
7326 #pragma omp parallel for
7327     for (int i = 0; i < 10; ++i)
7328       ;
7329   }
7330 #pragma omp for
7331   for (int i = 0; i < 10; ++i) {
7332 #pragma omp parallel for simd
7333     for (int i = 0; i < 10; ++i)
7334       ;
7335   }
7336 #pragma omp for
7337   for (int i = 0; i < 10; ++i) {
7338 #pragma omp parallel sections
7339     {
7340       bar();
7341     }
7342   }
7343 #pragma omp for
7344   for (int i = 0; i < 10; ++i) {
7345 #pragma omp task
7346     {
7347       bar();
7348     }
7349   }
7350 #pragma omp for
7351   for (int i = 0; i < 10; ++i) {
7352 #pragma omp taskyield
7353     bar();
7354   }
7355 #pragma omp for
7356   for (int i = 0; i < 10; ++i) {
7357 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
7358     bar();
7359   }
7360 #pragma omp for
7361   for (int i = 0; i < 10; ++i) {
7362 #pragma omp taskwait
7363     bar();
7364   }
7365 #pragma omp for
7366   for (int i = 0; i < 10; ++i) {
7367 #pragma omp flush
7368     bar();
7369   }
7370 #pragma omp for
7371   for (int i = 0; i < 10; ++i) {
7372 #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?}}
7373     bar();
7374   }
7375 #pragma omp for ordered
7376   for (int i = 0; i < 10; ++i) {
7377 #pragma omp ordered // OK
7378     bar();
7379   }
7380 #pragma omp for
7381   for (int i = 0; i < 10; ++i) {
7382 #pragma omp atomic
7383     ++a;
7384   }
7385 #pragma omp for
7386   for (int i = 0; i < 10; ++i) {
7387 #pragma omp target
7388     ++a;
7389   }
7390 #pragma omp for
7391   for (int i = 0; i < 10; ++i) {
7392 #pragma omp target parallel
7393     ++a;
7394   }
7395 #pragma omp for
7396   for (int i = 0; i < 10; ++i) {
7397 #pragma omp target parallel for
7398     for (int i = 0; i < 10; ++i)
7399       ;
7400   }
7401 #pragma omp for
7402   for (int i = 0; i < 10; ++i) {
7403 #pragma omp target enter data map(to: a)
7404     ++a;
7405   }
7406 #pragma omp for
7407   for (int i = 0; i < 10; ++i) {
7408 #pragma omp target exit data map(from: a)
7409     ++a;
7410   }
7411 #pragma omp for
7412   for (int i = 0; i < 10; ++i) {
7413 #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?}}
7414     ++a;
7415   }
7416 #pragma omp for
7417   for (int i = 0; i < 10; ++i) {
7418 #pragma omp taskloop
7419   for (int i = 0; i < 10; ++i)
7420     ++a;
7421   }
7422 #pragma omp for
7423   for (int i = 0; i < 10; ++i) {
7424 #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?}}
7425     for (int j = 0; j < 10; ++j)
7426       ;
7427   }
7428 #pragma omp for
7429   for (int i = 0; i < 10; ++i) {
7430 #pragma omp target update to(a)
7431     ++a;
7432   }
7433 #pragma omp for
7434   for (int i = 0; i < 10; ++i) {
7435 #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?}}
7436     for (int j = 0; j < 10; ++j)
7437       ;
7438   }
7439 #pragma omp for
7440   for (int i = 0; i < 10; ++i) {
7441 #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?}}
7442     for (int j = 0; j < 10; ++j)
7443       ;
7444   }
7445 #pragma omp for
7446   for (int i = 0; i < 10; ++i) {
7447 #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?}}
7448     for (int j = 0; j < 10; ++j)
7449       ;
7450   }
7451 #pragma omp for
7452   for (int i = 0; i < 10; ++i) {
7453 #pragma omp target simd // OK
7454     for (int j = 0; j < 10; ++j)
7455       ;
7456   }
7457 #pragma omp for
7458   for (int i = 0; i < 10; ++i) {
7459 #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?}}
7460     for (int j = 0; j < 10; ++j)
7461       ;
7462   }
7463 #pragma omp for
7464   for (int i = 0; i < 10; ++i) {
7465 #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?}}
7466     for (int j = 0; j < 10; ++j)
7467       ;
7468   }
7469 #pragma omp for
7470   for (int i = 0; i < 10; ++i) {
7471 #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?}}
7472     for (int j = 0; j < 10; ++j)
7473       ;
7474   }
7475 #pragma omp for
7476   for (int i = 0; i < 10; ++i) {
7477 #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?}}
7478     for (int j = 0; j < 10; ++j)
7479       ;
7480   }
7481 
7482 // FOR SIMD DIRECTIVE
7483 #pragma omp for simd
7484   for (int i = 0; i < 10; ++i) {
7485 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7486     for (int i = 0; i < 10; ++i)
7487       ;
7488   }
7489 #pragma omp for simd
7490   for (int i = 0; i < 10; ++i) {
7491 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7492     for (int i = 0; i < 10; ++i)
7493       ;
7494   }
7495 #pragma omp for simd
7496   for (int i = 0; i < 10; ++i) {
7497 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7498     for (int i = 0; i < 10; ++i)
7499       ;
7500   }
7501 #pragma omp for simd
7502   for (int i = 0; i < 10; ++i) {
7503 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7504     for (int i = 0; i < 10; ++i)
7505       ;
7506   }
7507 #pragma omp for simd
7508   for (int i = 0; i < 10; ++i) {
7509 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7510     {
7511       bar();
7512     }
7513   }
7514 #pragma omp for simd
7515   for (int i = 0; i < 10; ++i) {
7516 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7517     {
7518       bar();
7519     }
7520   }
7521 #pragma omp for simd
7522   for (int i = 0; i < 10; ++i) {
7523 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7524     bar();
7525 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7526     bar();
7527   }
7528 #pragma omp for simd
7529   for (int i = 0; i < 10; ++i) {
7530 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7531     bar();
7532 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7533     bar();
7534   }
7535 #pragma omp for simd
7536   for (int i = 0; i < 10; ++i) {
7537 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7538     for (int i = 0; i < 10; ++i)
7539       ;
7540   }
7541 #pragma omp for simd
7542   for (int i = 0; i < 10; ++i) {
7543 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7544     for (int i = 0; i < 10; ++i)
7545       ;
7546   }
7547 #pragma omp for simd
7548   for (int i = 0; i < 10; ++i) {
7549 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7550     {
7551       bar();
7552     }
7553   }
7554 #pragma omp for simd
7555   for (int i = 0; i < 10; ++i) {
7556 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7557     {
7558       bar();
7559     }
7560   }
7561 #pragma omp for simd
7562   for (int i = 0; i < 10; ++i) {
7563 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7564     bar();
7565   }
7566 #pragma omp for simd
7567   for (int i = 0; i < 10; ++i) {
7568 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7569     bar();
7570   }
7571 #pragma omp for simd
7572   for (int i = 0; i < 10; ++i) {
7573 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7574     bar();
7575   }
7576 #pragma omp for simd
7577   for (int i = 0; i < 10; ++i) {
7578 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7579     bar();
7580   }
7581 #pragma omp for simd
7582   for (int i = 0; i < 10; ++i) {
7583 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7584     bar();
7585   }
7586 #pragma omp for simd
7587   for (int i = 0; i < 10; ++i) {
7588 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7589     ++a;
7590   }
7591 #pragma omp for simd
7592   for (int i = 0; i < 10; ++i) {
7593 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7594     ++a;
7595   }
7596 #pragma omp for simd
7597   for (int i = 0; i < 10; ++i) {
7598 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7599     ++a;
7600   }
7601 #pragma omp for simd
7602   for (int i = 0; i < 10; ++i) {
7603 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7604     for (int i = 0; i < 10; ++i)
7605       ;
7606   }
7607 #pragma omp for simd
7608   for (int i = 0; i < 10; ++i) {
7609 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7610     ++a;
7611   }
7612 #pragma omp for simd
7613   for (int i = 0; i < 10; ++i) {
7614 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7615     ++a;
7616   }
7617 #pragma omp for simd
7618   for (int i = 0; i < 10; ++i) {
7619 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7620     ++a;
7621   }
7622 #pragma omp for simd
7623   for (int i = 0; i < 10; ++i) {
7624 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7625   for (int i = 0; i < 10; ++i)
7626     ++a;
7627   }
7628 #pragma omp for simd
7629   for (int i = 0; i < 10; ++i) {
7630 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7631     for (int j = 0; j < 10; ++j)
7632       ;
7633   }
7634 #pragma omp for simd
7635   for (int i = 0; i < 10; ++i) {
7636 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7637     ++a;
7638   }
7639 #pragma omp for simd
7640   for (int i = 0; i < 10; ++i) {
7641 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7642     for (int j = 0; j < 10; ++j)
7643       ;
7644   }
7645 #pragma omp for simd
7646   for (int i = 0; i < 10; ++i) {
7647 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7648     for (int j = 0; j < 10; ++j)
7649       ;
7650   }
7651 #pragma omp for simd
7652   for (int i = 0; i < 10; ++i) {
7653 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7654     for (int j = 0; j < 10; ++j)
7655       ;
7656   }
7657 #pragma omp for simd
7658   for (int i = 0; i < 10; ++i) {
7659 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7660     for (int j = 0; j < 10; ++j)
7661       ;
7662   }
7663 #pragma omp for simd
7664   for (int i = 0; i < 10; ++i) {
7665 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7666     for (int j = 0; j < 10; ++j)
7667       ;
7668   }
7669 #pragma omp for simd
7670   for (int i = 0; i < 10; ++i) {
7671 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7672     for (int j = 0; j < 10; ++j)
7673       ;
7674   }
7675 #pragma omp for simd
7676   for (int i = 0; i < 10; ++i) {
7677 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7678     for (int j = 0; j < 10; ++j)
7679       ;
7680   }
7681 #pragma omp for simd
7682   for (int i = 0; i < 10; ++i) {
7683 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7684     for (int j = 0; j < 10; ++j)
7685       ;
7686   }
7687 
7688 // SECTIONS DIRECTIVE
7689 #pragma omp sections
7690   {
7691 #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?}}
7692     for (int i = 0; i < 10; ++i)
7693       ;
7694   }
7695 #pragma omp sections
7696   {
7697 #pragma omp simd
7698     for (int i = 0; i < 10; ++i)
7699       ;
7700   }
7701 #pragma omp sections
7702   {
7703 #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?}}
7704     for (int i = 0; i < 10; ++i)
7705       ;
7706   }
7707 #pragma omp sections
7708   {
7709 #pragma omp parallel
7710     for (int i = 0; i < 10; ++i)
7711       ;
7712   }
7713 #pragma omp sections
7714   {
7715 #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?}}
7716     {
7717       bar();
7718     }
7719   }
7720 #pragma omp sections
7721   {
7722 #pragma omp section
7723     {
7724       bar();
7725     }
7726   }
7727 #pragma omp sections
7728   {
7729 #pragma omp critical
7730     bar();
7731 #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?}}
7732     bar();
7733 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
7734     bar();
7735   }
7736 #pragma omp sections
7737   {
7738 #pragma omp parallel
7739     {
7740 #pragma omp single // OK
7741       {
7742         bar();
7743       }
7744 #pragma omp for // OK
7745       for (int i = 0; i < 10; ++i)
7746         ;
7747 #pragma omp for simd // OK
7748       for (int i = 0; i < 10; ++i)
7749         ;
7750 #pragma omp sections // OK
7751       {
7752         bar();
7753       }
7754     }
7755   }
7756 #pragma omp sections
7757   {
7758 #pragma omp parallel for
7759     for (int i = 0; i < 10; ++i)
7760       ;
7761   }
7762 #pragma omp sections
7763   {
7764 #pragma omp parallel for simd
7765     for (int i = 0; i < 10; ++i)
7766       ;
7767   }
7768 #pragma omp sections
7769   {
7770 #pragma omp parallel sections
7771     {
7772       bar();
7773     }
7774   }
7775 #pragma omp sections
7776   {
7777 #pragma omp task
7778     {
7779       bar();
7780     }
7781   }
7782 #pragma omp sections
7783   {
7784 #pragma omp taskyield
7785   }
7786 #pragma omp sections
7787   {
7788 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
7789     bar();
7790   }
7791 #pragma omp sections
7792   {
7793 #pragma omp taskwait
7794   }
7795 #pragma omp sections
7796   {
7797 #pragma omp flush
7798   }
7799 #pragma omp sections
7800   {
7801 #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?}}
7802     bar();
7803   }
7804 #pragma omp sections
7805   {
7806 #pragma omp atomic
7807     ++a;
7808   }
7809 #pragma omp sections
7810   {
7811 #pragma omp target
7812     ++a;
7813   }
7814 #pragma omp sections
7815   {
7816 #pragma omp target parallel
7817     ++a;
7818   }
7819 #pragma omp sections
7820   {
7821 #pragma omp target parallel for
7822     for (int i = 0; i < 10; ++i)
7823       ;
7824   }
7825 #pragma omp sections
7826   {
7827 #pragma omp target enter data map(to: a)
7828   }
7829 #pragma omp sections
7830   {
7831 #pragma omp target exit data map(from: a)
7832   }
7833 #pragma omp sections
7834   {
7835 #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?}}
7836     ++a;
7837   }
7838 #pragma omp sections
7839   {
7840 #pragma omp taskloop
7841   for (int i = 0; i < 10; ++i)
7842     ++a;
7843   }
7844 #pragma omp sections
7845   {
7846 #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?}}
7847     for (int i = 0; i < 10; ++i)
7848       ;
7849   }
7850 #pragma omp sections
7851   {
7852 #pragma omp target update to(a)
7853   }
7854 #pragma omp sections
7855   {
7856 #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?}}
7857     for (int i = 0; i < 10; ++i)
7858       ;
7859   }
7860 #pragma omp sections
7861   {
7862 #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?}}
7863     for (int i = 0; i < 10; ++i)
7864       ;
7865   }
7866 #pragma omp sections
7867   {
7868 #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?}}
7869     for (int i = 0; i < 10; ++i)
7870       ;
7871   }
7872 #pragma omp sections
7873   {
7874 #pragma omp target simd // OK
7875     for (int i = 0; i < 10; ++i)
7876       ;
7877   }
7878 #pragma omp sections
7879   {
7880 #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?}}
7881     for (int i = 0; i < 10; ++i)
7882       ;
7883   }
7884 #pragma omp sections
7885   {
7886 #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?}}
7887     for (int i = 0; i < 10; ++i)
7888       ;
7889   }
7890 #pragma omp sections
7891   {
7892 #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?}}
7893     for (int i = 0; i < 10; ++i)
7894       ;
7895   }
7896 #pragma omp sections
7897   {
7898 #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?}}
7899     for (int i = 0; i < 10; ++i)
7900       ;
7901   }
7902 
7903 // SECTION DIRECTIVE
7904 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
7905   {
7906     bar();
7907   }
7908 #pragma omp sections
7909   {
7910 #pragma omp section
7911     {
7912 #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?}}
7913       for (int i = 0; i < 10; ++i)
7914         ;
7915     }
7916   }
7917 #pragma omp sections
7918   {
7919 #pragma omp section
7920     {
7921 #pragma omp simd
7922       for (int i = 0; i < 10; ++i)
7923         ;
7924     }
7925   }
7926 #pragma omp sections
7927   {
7928 #pragma omp section
7929     {
7930 #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?}}
7931       for (int i = 0; i < 10; ++i)
7932         ;
7933     }
7934   }
7935 #pragma omp sections
7936   {
7937 #pragma omp section
7938     {
7939 #pragma omp parallel
7940       for (int i = 0; i < 10; ++i)
7941         ;
7942     }
7943   }
7944 #pragma omp sections
7945   {
7946 #pragma omp section
7947     {
7948 #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?}}
7949       {
7950         bar();
7951       }
7952     }
7953   }
7954 #pragma omp sections
7955   {
7956 #pragma omp section
7957     {
7958 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
7959       {
7960         bar();
7961       }
7962     }
7963   }
7964 #pragma omp sections
7965   {
7966 #pragma omp section
7967     {
7968 #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?}}
7969       bar();
7970 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
7971       bar();
7972 #pragma omp critical
7973       bar();
7974     }
7975   }
7976 #pragma omp sections
7977   {
7978 #pragma omp section
7979     {
7980 #pragma omp parallel
7981       {
7982 #pragma omp single // OK
7983         {
7984           bar();
7985         }
7986 #pragma omp for // OK
7987         for (int i = 0; i < 10; ++i)
7988           ;
7989 #pragma omp for simd // OK
7990         for (int i = 0; i < 10; ++i)
7991           ;
7992 #pragma omp sections // OK
7993         {
7994           bar();
7995         }
7996       }
7997     }
7998   }
7999 #pragma omp sections
8000   {
8001 #pragma omp section
8002     {
8003 #pragma omp parallel for
8004       for (int i = 0; i < 10; ++i)
8005         ;
8006     }
8007   }
8008 #pragma omp sections
8009   {
8010 #pragma omp section
8011     {
8012 #pragma omp parallel for simd
8013       for (int i = 0; i < 10; ++i)
8014         ;
8015     }
8016   }
8017 #pragma omp sections
8018   {
8019 #pragma omp section
8020     {
8021 #pragma omp parallel sections
8022       {
8023         bar();
8024       }
8025     }
8026   }
8027 #pragma omp sections
8028   {
8029 #pragma omp section
8030     {
8031 #pragma omp task
8032       {
8033         bar();
8034       }
8035     }
8036   }
8037 #pragma omp sections
8038   {
8039 #pragma omp section
8040     {
8041 #pragma omp taskyield
8042       bar();
8043     }
8044   }
8045 #pragma omp sections
8046   {
8047 #pragma omp section
8048     {
8049 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
8050       bar();
8051     }
8052   }
8053 #pragma omp sections
8054   {
8055 #pragma omp section
8056     {
8057 #pragma omp taskwait
8058       bar();
8059     }
8060   }
8061 #pragma omp sections
8062   {
8063 #pragma omp section
8064     {
8065 #pragma omp flush
8066       bar();
8067     }
8068   }
8069 #pragma omp sections
8070   {
8071 #pragma omp section
8072     {
8073 #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?}}
8074       bar();
8075     }
8076   }
8077 #pragma omp sections
8078   {
8079 #pragma omp section
8080     {
8081 #pragma omp atomic
8082       ++a;
8083     }
8084   }
8085 #pragma omp sections
8086   {
8087 #pragma omp section
8088     {
8089 #pragma omp target
8090       ++a;
8091     }
8092   }
8093 #pragma omp sections
8094   {
8095 #pragma omp section
8096     {
8097 #pragma omp target parallel
8098       ++a;
8099     }
8100   }
8101 #pragma omp sections
8102   {
8103 #pragma omp section
8104     {
8105 #pragma omp target parallel for
8106       for (int i = 0; i < 10; ++i)
8107         ;
8108     }
8109   }
8110 #pragma omp sections
8111   {
8112 #pragma omp section
8113     {
8114 #pragma omp target enter data map(to: a)
8115       ++a;
8116     }
8117   }
8118 #pragma omp sections
8119   {
8120 #pragma omp section
8121     {
8122 #pragma omp target exit data map(from: a)
8123       ++a;
8124     }
8125   }
8126 #pragma omp sections
8127   {
8128 #pragma omp section
8129     {
8130 #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?}}
8131       ++a;
8132     }
8133   }
8134 #pragma omp sections
8135   {
8136 #pragma omp section
8137     {
8138 #pragma omp taskloop
8139   for (int i = 0; i < 10; ++i)
8140       ++a;
8141     }
8142   }
8143 #pragma omp sections
8144   {
8145 #pragma omp section
8146 #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?}}
8147     for (int i = 0; i < 10; ++i)
8148       ;
8149   }
8150 #pragma omp sections
8151   {
8152 #pragma omp section
8153     {
8154 #pragma omp target update to(a)
8155       a++;
8156     }
8157   }
8158 #pragma omp sections
8159   {
8160 #pragma omp section
8161 #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?}}
8162     for (int i = 0; i < 10; ++i)
8163       ;
8164   }
8165 #pragma omp sections
8166   {
8167 #pragma omp section
8168 #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?}}
8169     for (int i = 0; i < 10; ++i)
8170       ;
8171   }
8172 #pragma omp sections
8173   {
8174 #pragma omp section
8175 #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?}}
8176     for (int i = 0; i < 10; ++i)
8177       ;
8178   }
8179 #pragma omp sections
8180   {
8181 #pragma omp section
8182 #pragma omp target simd // OK
8183     for (int i = 0; i < 10; ++i)
8184       ;
8185   }
8186 #pragma omp sections
8187   {
8188 #pragma omp section
8189 #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?}}
8190     for (int i = 0; i < 10; ++i)
8191       ;
8192   }
8193 #pragma omp sections
8194   {
8195 #pragma omp section
8196 #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?}}
8197     for (int i = 0; i < 10; ++i)
8198       ;
8199   }
8200 #pragma omp sections
8201   {
8202 #pragma omp section
8203 #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?}}
8204     for (int i = 0; i < 10; ++i)
8205       ;
8206   }
8207 #pragma omp sections
8208   {
8209 #pragma omp section
8210 #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?}}
8211     for (int i = 0; i < 10; ++i)
8212       ;
8213   }
8214 
8215 // SINGLE DIRECTIVE
8216 #pragma omp single
8217   {
8218 #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?}}
8219     for (int i = 0; i < 10; ++i)
8220       ;
8221   }
8222 #pragma omp single
8223   {
8224 #pragma omp simd
8225     for (int i = 0; i < 10; ++i)
8226       ;
8227   }
8228 #pragma omp single
8229   {
8230 #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?}}
8231     for (int i = 0; i < 10; ++i)
8232       ;
8233   }
8234 #pragma omp single
8235   {
8236 #pragma omp parallel
8237     for (int i = 0; i < 10; ++i)
8238       ;
8239   }
8240 #pragma omp single
8241   {
8242 #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?}}
8243     {
8244       bar();
8245     }
8246 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
8247     bar();
8248 #pragma omp critical
8249     bar();
8250   }
8251 #pragma omp single
8252   {
8253 #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?}}
8254     {
8255       bar();
8256     }
8257   }
8258 #pragma omp single
8259   {
8260 #pragma omp parallel
8261     {
8262 #pragma omp single // OK
8263       {
8264         bar();
8265       }
8266 #pragma omp for // OK
8267       for (int i = 0; i < 10; ++i)
8268         ;
8269 #pragma omp for simd // OK
8270       for (int i = 0; i < 10; ++i)
8271         ;
8272 #pragma omp sections // OK
8273       {
8274         bar();
8275       }
8276     }
8277   }
8278 #pragma omp single
8279   {
8280 #pragma omp parallel for
8281     for (int i = 0; i < 10; ++i)
8282       ;
8283   }
8284 #pragma omp single
8285   {
8286 #pragma omp parallel for simd
8287     for (int i = 0; i < 10; ++i)
8288       ;
8289   }
8290 #pragma omp single
8291   {
8292 #pragma omp parallel sections
8293     {
8294       bar();
8295     }
8296   }
8297 #pragma omp single
8298   {
8299 #pragma omp task
8300     {
8301       bar();
8302     }
8303   }
8304 #pragma omp single
8305   {
8306 #pragma omp taskyield
8307     bar();
8308   }
8309 #pragma omp single
8310   {
8311 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
8312     bar();
8313   }
8314 #pragma omp single
8315   {
8316 #pragma omp taskwait
8317     bar();
8318   }
8319 #pragma omp single
8320   {
8321 #pragma omp flush
8322     bar();
8323   }
8324 #pragma omp single
8325   {
8326 #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?}}
8327     bar();
8328   }
8329 #pragma omp single
8330   {
8331 #pragma omp atomic
8332     ++a;
8333   }
8334 #pragma omp single
8335   {
8336 #pragma omp target
8337     ++a;
8338   }
8339 #pragma omp single
8340   {
8341 #pragma omp target parallel
8342     ++a;
8343   }
8344 #pragma omp single
8345   {
8346 #pragma omp target parallel for
8347     for (int i = 0; i < 10; ++i)
8348       ;
8349   }
8350 #pragma omp single
8351   {
8352 #pragma omp target enter data map(to: a)
8353     ++a;
8354   }
8355 #pragma omp single
8356   {
8357 #pragma omp target exit data map(from: a)
8358     ++a;
8359   }
8360 #pragma omp single
8361   {
8362 #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?}}
8363     ++a;
8364   }
8365 #pragma omp single
8366   {
8367 #pragma omp taskloop
8368   for (int i = 0; i < 10; ++i)
8369     ++a;
8370   }
8371 #pragma omp single
8372   {
8373 #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?}}
8374     for (int i = 0; i < 10; ++i)
8375       ;
8376   }
8377 #pragma omp single
8378   {
8379 #pragma omp target update to(a)
8380     a++;
8381   }
8382 #pragma omp single
8383   {
8384 #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?}}
8385     for (int i = 0; i < 10; ++i)
8386       ;
8387   }
8388 #pragma omp single
8389   {
8390 #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?}}
8391     for (int i = 0; i < 10; ++i)
8392       ;
8393   }
8394 #pragma omp single
8395   {
8396 #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?}}
8397     for (int i = 0; i < 10; ++i)
8398       ;
8399   }
8400 #pragma omp single
8401   {
8402 #pragma omp target simd // OK
8403     for (int i = 0; i < 10; ++i)
8404       ;
8405   }
8406 #pragma omp single
8407   {
8408 #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?}}
8409     for (int i = 0; i < 10; ++i)
8410       ;
8411   }
8412 #pragma omp single
8413   {
8414 #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?}}
8415     for (int i = 0; i < 10; ++i)
8416       ;
8417   }
8418 #pragma omp single
8419   {
8420 #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?}}
8421     for (int i = 0; i < 10; ++i)
8422       ;
8423   }
8424 #pragma omp single
8425   {
8426 #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?}}
8427     for (int i = 0; i < 10; ++i)
8428       ;
8429   }
8430 
8431 // MASTER DIRECTIVE
8432 #pragma omp master
8433   {
8434 #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?}}
8435     for (int i = 0; i < 10; ++i)
8436       ;
8437   }
8438 #pragma omp master
8439   {
8440 #pragma omp simd
8441     for (int i = 0; i < 10; ++i)
8442       ;
8443   }
8444 #pragma omp master
8445   {
8446 #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?}}
8447     for (int i = 0; i < 10; ++i)
8448       ;
8449   }
8450 #pragma omp master
8451   {
8452 #pragma omp parallel
8453     for (int i = 0; i < 10; ++i)
8454       ;
8455   }
8456 #pragma omp master
8457   {
8458 #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?}}
8459     {
8460       bar();
8461     }
8462   }
8463 #pragma omp master
8464   {
8465 #pragma omp master // OK, though second 'master' is redundant
8466     {
8467       bar();
8468     }
8469   }
8470 #pragma omp master
8471   {
8472 #pragma omp critical
8473     {
8474       bar();
8475     }
8476   }
8477 #pragma omp master
8478   {
8479 #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?}}
8480     {
8481       bar();
8482     }
8483   }
8484 #pragma omp master
8485   {
8486 #pragma omp parallel
8487     {
8488 #pragma omp master // OK
8489       {
8490         bar();
8491       }
8492 #pragma omp for // OK
8493       for (int i = 0; i < 10; ++i)
8494         ;
8495 #pragma omp for simd // OK
8496       for (int i = 0; i < 10; ++i)
8497         ;
8498 #pragma omp sections // OK
8499       {
8500         bar();
8501       }
8502     }
8503   }
8504 #pragma omp master
8505   {
8506 #pragma omp parallel for
8507     for (int i = 0; i < 10; ++i)
8508       ;
8509   }
8510 #pragma omp master
8511   {
8512 #pragma omp parallel for simd
8513     for (int i = 0; i < 10; ++i)
8514       ;
8515   }
8516 #pragma omp master
8517   {
8518 #pragma omp parallel sections
8519     {
8520       bar();
8521     }
8522   }
8523 #pragma omp master
8524   {
8525 #pragma omp task
8526     {
8527       bar();
8528     }
8529   }
8530 #pragma omp master
8531   {
8532 #pragma omp taskyield
8533     bar();
8534   }
8535 #pragma omp master
8536   {
8537 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
8538     bar();
8539   }
8540 #pragma omp master
8541   {
8542 #pragma omp taskwait
8543     bar();
8544   }
8545 #pragma omp master
8546   {
8547 #pragma omp flush
8548     bar();
8549   }
8550 #pragma omp master
8551   {
8552 #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?}}
8553     bar();
8554   }
8555 #pragma omp master
8556   {
8557 #pragma omp atomic
8558     ++a;
8559   }
8560 #pragma omp master
8561   {
8562 #pragma omp target
8563     ++a;
8564   }
8565 #pragma omp master
8566   {
8567 #pragma omp target parallel
8568     ++a;
8569   }
8570 #pragma omp master
8571   {
8572 #pragma omp target parallel for
8573     for (int i = 0; i < 10; ++i)
8574       ;
8575   }
8576 #pragma omp master
8577   {
8578 #pragma omp target enter data map(to: a)
8579     ++a;
8580   }
8581 #pragma omp master
8582   {
8583 #pragma omp target exit data map(from: a)
8584     ++a;
8585   }
8586 #pragma omp master
8587   {
8588 #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?}}
8589     ++a;
8590   }
8591 #pragma omp master
8592   {
8593 #pragma omp taskloop
8594   for (int i = 0; i < 10; ++i)
8595     ++a;
8596   }
8597 #pragma omp master
8598   {
8599 #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?}}
8600     for (int i = 0; i < 10; ++i)
8601       ;
8602   }
8603 #pragma omp master
8604   {
8605 #pragma omp target update to(a)
8606     ++a;
8607   }
8608 #pragma omp master
8609   {
8610 #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?}}
8611     for (int i = 0; i < 10; ++i)
8612       ;
8613   }
8614 #pragma omp master
8615   {
8616 #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?}}
8617     for (int i = 0; i < 10; ++i)
8618       ;
8619   }
8620 #pragma omp master
8621   {
8622 #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?}}
8623     for (int i = 0; i < 10; ++i)
8624       ;
8625   }
8626 #pragma omp master
8627   {
8628 #pragma omp target simd // OK
8629     for (int i = 0; i < 10; ++i)
8630       ;
8631   }
8632 #pragma omp master
8633   {
8634 #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?}}
8635     for (int i = 0; i < 10; ++i)
8636       ;
8637   }
8638 #pragma omp master
8639   {
8640 #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?}}
8641     for (int i = 0; i < 10; ++i)
8642       ;
8643   }
8644 #pragma omp master
8645   {
8646 #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?}}
8647     for (int i = 0; i < 10; ++i)
8648       ;
8649   }
8650 #pragma omp master
8651   {
8652 #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?}}
8653     for (int i = 0; i < 10; ++i)
8654       ;
8655   }
8656 
8657 // CRITICAL DIRECTIVE
8658 #pragma omp critical
8659   {
8660 #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?}}
8661     for (int i = 0; i < 10; ++i)
8662       ;
8663   }
8664 #pragma omp critical
8665   {
8666 #pragma omp simd
8667     for (int i = 0; i < 10; ++i)
8668       ;
8669   }
8670 #pragma omp critical
8671   {
8672 #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?}}
8673     for (int i = 0; i < 10; ++i)
8674       ;
8675   }
8676 #pragma omp critical
8677   {
8678 #pragma omp parallel
8679     for (int i = 0; i < 10; ++i)
8680       ;
8681   }
8682 #pragma omp critical
8683   {
8684 #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?}}
8685     {
8686       bar();
8687     }
8688   }
8689 #pragma omp critical
8690   {
8691 #pragma omp master // OK, though second 'master' is redundant
8692     {
8693       bar();
8694     }
8695   }
8696 #pragma omp critical
8697   {
8698 #pragma omp critical
8699     {
8700       bar();
8701     }
8702   }
8703 #pragma omp critical
8704   {
8705 #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?}}
8706     {
8707       bar();
8708     }
8709   }
8710 #pragma omp critical
8711   {
8712 #pragma omp parallel
8713     {
8714 #pragma omp master // OK
8715       {
8716         bar();
8717       }
8718 #pragma omp for // OK
8719       for (int i = 0; i < 10; ++i)
8720         ;
8721 #pragma omp for simd // OK
8722       for (int i = 0; i < 10; ++i)
8723         ;
8724 #pragma omp sections // OK
8725       {
8726         bar();
8727       }
8728     }
8729   }
8730 #pragma omp critical
8731   {
8732 #pragma omp parallel for
8733     for (int i = 0; i < 10; ++i)
8734       ;
8735   }
8736 #pragma omp critical
8737   {
8738 #pragma omp parallel for simd
8739     for (int i = 0; i < 10; ++i)
8740       ;
8741   }
8742 #pragma omp critical
8743   {
8744 #pragma omp parallel sections
8745     {
8746       bar();
8747     }
8748   }
8749 #pragma omp critical
8750   {
8751 #pragma omp task
8752     {
8753       bar();
8754     }
8755   }
8756 #pragma omp critical
8757   {
8758 #pragma omp taskyield
8759     bar();
8760   }
8761 #pragma omp critical
8762   {
8763 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
8764     bar();
8765   }
8766 #pragma omp critical
8767   {
8768 #pragma omp taskwait
8769     bar();
8770   }
8771 #pragma omp critical(Belka)
8772   {
8773 #pragma omp critical(Strelka)
8774     bar();
8775   }
8776 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
8777   {
8778 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
8779     {
8780 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
8781       {
8782 #pragma omp parallel
8783 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
8784         {
8785           bar();
8786         }
8787       }
8788     }
8789   }
8790 #pragma omp critical
8791   {
8792 #pragma omp flush
8793     bar();
8794   }
8795 #pragma omp critical
8796   {
8797 #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?}}
8798     bar();
8799   }
8800 #pragma omp critical
8801   {
8802 #pragma omp atomic
8803     ++a;
8804   }
8805 #pragma omp critical
8806   {
8807 #pragma omp target
8808     ++a;
8809   }
8810 #pragma omp critical
8811   {
8812 #pragma omp target parallel
8813     ++a;
8814   }
8815 #pragma omp critical
8816   {
8817 #pragma omp target parallel for
8818     for (int i = 0; i < 10; ++i)
8819       ;
8820   }
8821 #pragma omp critical
8822   {
8823 #pragma omp target enter data map(to: a)
8824     ++a;
8825   }
8826 #pragma omp critical
8827   {
8828 #pragma omp target exit data map(from: a)
8829     ++a;
8830   }
8831 #pragma omp critical
8832   {
8833 #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?}}
8834     ++a;
8835   }
8836 #pragma omp critical
8837   {
8838 #pragma omp taskloop
8839   for (int i = 0; i < 10; ++i)
8840     ++a;
8841   }
8842 #pragma omp critical
8843   {
8844 #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?}}
8845     for (int i = 0; i < 10; ++i)
8846       ;
8847   }
8848 #pragma omp critical
8849   {
8850 #pragma omp target update to(a)
8851     a++;
8852   }
8853 #pragma omp critical
8854   {
8855 #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?}}
8856     for (int i = 0; i < 10; ++i)
8857       ;
8858   }
8859 #pragma omp critical
8860   {
8861 #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?}}
8862     for (int i = 0; i < 10; ++i)
8863       ;
8864   }
8865 #pragma omp critical
8866   {
8867 #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?}}
8868     for (int i = 0; i < 10; ++i)
8869       ;
8870   }
8871 #pragma omp critical
8872   {
8873 #pragma omp target simd // OK
8874     for (int i = 0; i < 10; ++i)
8875       ;
8876   }
8877 #pragma omp critical
8878   {
8879 #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?}}
8880     for (int i = 0; i < 10; ++i)
8881       ;
8882   }
8883 #pragma omp critical
8884   {
8885 #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?}}
8886     for (int i = 0; i < 10; ++i)
8887       ;
8888   }
8889 #pragma omp critical
8890   {
8891 #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?}}
8892     for (int i = 0; i < 10; ++i)
8893       ;
8894   }
8895 #pragma omp critical
8896   {
8897 #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?}}
8898     for (int i = 0; i < 10; ++i)
8899       ;
8900   }
8901 
8902 // PARALLEL FOR DIRECTIVE
8903 #pragma omp parallel for
8904   for (int i = 0; i < 10; ++i) {
8905 #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?}}
8906     for (int i = 0; i < 10; ++i)
8907       ;
8908   }
8909 #pragma omp parallel for
8910   for (int i = 0; i < 10; ++i) {
8911 #pragma omp simd
8912     for (int i = 0; i < 10; ++i)
8913       ;
8914   }
8915 #pragma omp parallel for
8916   for (int i = 0; i < 10; ++i) {
8917 #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?}}
8918     for (int i = 0; i < 10; ++i)
8919       ;
8920   }
8921 
8922 #pragma omp parallel for
8923   for (int i = 0; i < 10; ++i) {
8924 #pragma omp parallel
8925     for (int i = 0; i < 10; ++i)
8926       ;
8927   }
8928 #pragma omp parallel for
8929   for (int i = 0; i < 10; ++i) {
8930 #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?}}
8931     {
8932       bar();
8933     }
8934   }
8935 #pragma omp parallel for
8936   for (int i = 0; i < 10; ++i) {
8937 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
8938     {
8939       bar();
8940     }
8941   }
8942 #pragma omp parallel for
8943   for (int i = 0; i < 10; ++i) {
8944 #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?}}
8945     {
8946       bar();
8947     }
8948 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
8949     {
8950       bar();
8951     }
8952 #pragma omp critical
8953     {
8954       bar();
8955     }
8956   }
8957 #pragma omp parallel for
8958   for (int i = 0; i < 10; ++i) {
8959 #pragma omp parallel
8960     {
8961 #pragma omp single // OK
8962       {
8963         bar();
8964       }
8965 #pragma omp master // OK
8966       {
8967         bar();
8968       }
8969 #pragma omp critical // OK
8970       {
8971         bar();
8972       }
8973 #pragma omp for // OK
8974       for (int i = 0; i < 10; ++i)
8975         ;
8976 #pragma omp for simd // OK
8977       for (int i = 0; i < 10; ++i)
8978         ;
8979 #pragma omp sections // OK
8980       {
8981         bar();
8982       }
8983     }
8984   }
8985 #pragma omp parallel for
8986   for (int i = 0; i < 10; ++i) {
8987 #pragma omp parallel for
8988     for (int i = 0; i < 10; ++i)
8989       ;
8990   }
8991 #pragma omp parallel for
8992   for (int i = 0; i < 10; ++i) {
8993 #pragma omp parallel for simd
8994     for (int i = 0; i < 10; ++i)
8995       ;
8996   }
8997 #pragma omp parallel for
8998   for (int i = 0; i < 10; ++i) {
8999 #pragma omp parallel sections
9000     {
9001       bar();
9002     }
9003   }
9004 #pragma omp parallel for
9005   for (int i = 0; i < 10; ++i) {
9006 #pragma omp task
9007     {
9008       bar();
9009     }
9010   }
9011 #pragma omp parallel for
9012   for (int i = 0; i < 10; ++i) {
9013 #pragma omp taskyield
9014     bar();
9015   }
9016 #pragma omp parallel for
9017   for (int i = 0; i < 10; ++i) {
9018 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
9019     bar();
9020   }
9021 #pragma omp parallel for
9022   for (int i = 0; i < 10; ++i) {
9023 #pragma omp taskwait
9024     bar();
9025   }
9026 #pragma omp parallel for
9027   for (int i = 0; i < 10; ++i) {
9028 #pragma omp flush
9029     bar();
9030   }
9031 #pragma omp parallel for
9032   for (int i = 0; i < 10; ++i) {
9033 #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?}}
9034     bar();
9035   }
9036 #pragma omp parallel for ordered
9037   for (int i = 0; i < 10; ++i) {
9038 #pragma omp ordered // OK
9039     bar();
9040   }
9041 #pragma omp parallel for
9042   for (int i = 0; i < 10; ++i) {
9043 #pragma omp atomic
9044     ++a;
9045   }
9046 #pragma omp parallel for
9047   for (int i = 0; i < 10; ++i) {
9048 #pragma omp target
9049     ++a;
9050   }
9051 #pragma omp parallel for
9052   for (int i = 0; i < 10; ++i) {
9053 #pragma omp target parallel
9054     ++a;
9055   }
9056 #pragma omp parallel for
9057   for (int i = 0; i < 10; ++i) {
9058 #pragma omp target parallel for
9059     for (int i = 0; i < 10; ++i)
9060       ;
9061   }
9062 #pragma omp parallel for
9063   for (int i = 0; i < 10; ++i) {
9064 #pragma omp target enter data map(to: a)
9065     ++a;
9066   }
9067 #pragma omp parallel for
9068   for (int i = 0; i < 10; ++i) {
9069 #pragma omp target exit data map(from: a)
9070     ++a;
9071   }
9072 #pragma omp parallel for
9073   for (int i = 0; i < 10; ++i) {
9074 #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?}}
9075     ++a;
9076   }
9077 #pragma omp parallel for
9078   for (int i = 0; i < 10; ++i) {
9079 #pragma omp taskloop
9080   for (int i = 0; i < 10; ++i)
9081     ++a;
9082   }
9083 #pragma omp parallel for
9084   for (int i = 0; i < 10; ++i) {
9085 #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?}}
9086     for (int j = 0; j < 10; ++j)
9087       ;
9088   }
9089 #pragma omp parallel for
9090   for (int i = 0; i < 10; ++i) {
9091 #pragma omp target update to(a)
9092     a++;
9093   }
9094 #pragma omp parallel for
9095   for (int i = 0; i < 10; ++i) {
9096 #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?}}
9097     for (int j = 0; j < 10; ++j)
9098       ;
9099   }
9100 #pragma omp parallel for
9101   for (int i = 0; i < 10; ++i) {
9102 #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?}}
9103     for (int j = 0; j < 10; ++j)
9104       ;
9105   }
9106 #pragma omp parallel for
9107   for (int i = 0; i < 10; ++i) {
9108 #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?}}
9109     for (int j = 0; j < 10; ++j)
9110       ;
9111   }
9112 #pragma omp parallel for
9113   for (int i = 0; i < 10; ++i) {
9114 #pragma omp target simd // OK
9115     for (int j = 0; j < 10; ++j)
9116       ;
9117   }
9118 #pragma omp parallel for
9119   for (int i = 0; i < 10; ++i) {
9120 #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?}}
9121     for (int j = 0; j < 10; ++j)
9122       ;
9123   }
9124 #pragma omp parallel for
9125   for (int i = 0; i < 10; ++i) {
9126 #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?}}
9127     for (int j = 0; j < 10; ++j)
9128       ;
9129   }
9130 #pragma omp parallel for
9131   for (int i = 0; i < 10; ++i) {
9132 #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?}}
9133     for (int j = 0; j < 10; ++j)
9134       ;
9135   }
9136 #pragma omp parallel for
9137   for (int i = 0; i < 10; ++i) {
9138 #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?}}
9139     for (int j = 0; j < 10; ++j)
9140       ;
9141   }
9142 
9143 // PARALLEL FOR SIMD DIRECTIVE
9144 #pragma omp parallel for simd
9145   for (int i = 0; i < 10; ++i) {
9146 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9147     for (int i = 0; i < 10; ++i)
9148       ;
9149   }
9150 #pragma omp parallel for simd
9151   for (int i = 0; i < 10; ++i) {
9152 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9153     for (int i = 0; i < 10; ++i)
9154       ;
9155   }
9156 #pragma omp parallel for simd
9157   for (int i = 0; i < 10; ++i) {
9158 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9159     for (int i = 0; i < 10; ++i)
9160       ;
9161   }
9162 #pragma omp parallel for simd
9163   for (int i = 0; i < 10; ++i) {
9164 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9165     for (int i = 0; i < 10; ++i)
9166       ;
9167   }
9168 #pragma omp parallel for simd
9169   for (int i = 0; i < 10; ++i) {
9170 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9171     {
9172       bar();
9173     }
9174   }
9175 #pragma omp parallel for simd
9176   for (int i = 0; i < 10; ++i) {
9177 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9178     {
9179       bar();
9180     }
9181   }
9182 #pragma omp parallel for simd
9183   for (int i = 0; i < 10; ++i) {
9184 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9185     {
9186       bar();
9187     }
9188   }
9189 
9190 #pragma omp parallel for simd
9191   for (int i = 0; i < 10; ++i) {
9192 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9193     {
9194       bar();
9195     }
9196   }
9197 
9198 #pragma omp parallel for simd
9199   for (int i = 0; i < 10; ++i) {
9200 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9201     {
9202       bar();
9203     }
9204   }
9205 
9206 #pragma omp parallel for simd
9207   for (int i = 0; i < 10; ++i) {
9208 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9209     {
9210 #pragma omp single
9211       {
9212         bar();
9213       }
9214 #pragma omp for
9215       for (int i = 0; i < 10; ++i)
9216         ;
9217 #pragma omp for simd
9218       for (int i = 0; i < 10; ++i)
9219         ;
9220 #pragma omp sections
9221       {
9222         bar();
9223       }
9224     }
9225   }
9226 #pragma omp parallel for simd
9227   for (int i = 0; i < 10; ++i) {
9228 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9229     for (int i = 0; i < 10; ++i)
9230       ;
9231   }
9232 #pragma omp parallel for simd
9233   for (int i = 0; i < 10; ++i) {
9234 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
9235     for (int i = 0; i < 10; ++i)
9236       ;
9237   }
9238 #pragma omp parallel for simd
9239   for (int i = 0; i < 10; ++i) {
9240 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9241     {
9242       bar();
9243     }
9244   }
9245 #pragma omp parallel for simd
9246   for (int i = 0; i < 10; ++i) {
9247 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9248     {
9249       bar();
9250     }
9251   }
9252 #pragma omp parallel for simd
9253   for (int i = 0; i < 10; ++i) {
9254 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9255     bar();
9256   }
9257 #pragma omp parallel for simd
9258   for (int i = 0; i < 10; ++i) {
9259 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9260     bar();
9261   }
9262 #pragma omp parallel for simd
9263   for (int i = 0; i < 10; ++i) {
9264 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9265     bar();
9266   }
9267 #pragma omp parallel for simd
9268   for (int i = 0; i < 10; ++i) {
9269 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9270     bar();
9271   }
9272 #pragma omp parallel for simd
9273   for (int i = 0; i < 10; ++i) {
9274 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9275     bar();
9276   }
9277 #pragma omp parallel for simd
9278   for (int i = 0; i < 10; ++i) {
9279 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9280     bar();
9281   }
9282 #pragma omp parallel for simd
9283   for (int i = 0; i < 10; ++i) {
9284 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9285     ++a;
9286   }
9287 #pragma omp parallel for simd
9288   for (int i = 0; i < 10; ++i) {
9289 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9290     ++a;
9291   }
9292 #pragma omp parallel for simd
9293   for (int i = 0; i < 10; ++i) {
9294 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9295     ++a;
9296   }
9297 #pragma omp parallel for simd
9298   for (int i = 0; i < 10; ++i) {
9299 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9300     for (int i = 0; i < 10; ++i)
9301       ;
9302   }
9303 #pragma omp parallel for simd
9304   for (int i = 0; i < 10; ++i) {
9305 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9306     ++a;
9307   }
9308 #pragma omp parallel for simd
9309   for (int i = 0; i < 10; ++i) {
9310 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9311     ++a;
9312   }
9313 #pragma omp parallel for simd
9314   for (int i = 0; i < 10; ++i) {
9315 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9316     ++a;
9317   }
9318 #pragma omp parallel for simd
9319   for (int i = 0; i < 10; ++i) {
9320 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9321   for (int i = 0; i < 10; ++i)
9322     ++a;
9323   }
9324 #pragma omp parallel for simd
9325   for (int i = 0; i < 10; ++i) {
9326 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9327     for (int j = 0; j < 10; ++j)
9328       ;
9329   }
9330 #pragma omp parallel for simd
9331   for (int i = 0; i < 10; ++i) {
9332 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9333     a++;
9334   }
9335 #pragma omp parallel for simd
9336   for (int i = 0; i < 10; ++i) {
9337 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9338     for (int j = 0; j < 10; ++j)
9339       ;
9340   }
9341 #pragma omp parallel for simd
9342   for (int i = 0; i < 10; ++i) {
9343 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9344     for (int j = 0; j < 10; ++j)
9345       ;
9346   }
9347 #pragma omp parallel for simd
9348   for (int i = 0; i < 10; ++i) {
9349 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9350     for (int j = 0; j < 10; ++j)
9351       ;
9352   }
9353 #pragma omp parallel for simd
9354   for (int i = 0; i < 10; ++i) {
9355 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9356     for (int j = 0; j < 10; ++j)
9357       ;
9358   }
9359 #pragma omp parallel for simd
9360   for (int i = 0; i < 10; ++i) {
9361 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9362     for (int j = 0; j < 10; ++j)
9363       ;
9364   }
9365 #pragma omp parallel for simd
9366   for (int i = 0; i < 10; ++i) {
9367 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9368     for (int j = 0; j < 10; ++j)
9369       ;
9370   }
9371 #pragma omp parallel for simd
9372   for (int i = 0; i < 10; ++i) {
9373 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9374     for (int j = 0; j < 10; ++j)
9375       ;
9376   }
9377 #pragma omp parallel for simd
9378   for (int i = 0; i < 10; ++i) {
9379 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9380     for (int j = 0; j < 10; ++j)
9381       ;
9382   }
9383 
9384 // PARALLEL SECTIONS DIRECTIVE
9385 #pragma omp parallel sections
9386   {
9387 #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?}}
9388     for (int i = 0; i < 10; ++i)
9389       ;
9390   }
9391 #pragma omp parallel sections
9392   {
9393 #pragma omp simd
9394     for (int i = 0; i < 10; ++i)
9395       ;
9396   }
9397 #pragma omp parallel sections
9398   {
9399 #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?}}
9400     for (int i = 0; i < 10; ++i)
9401       ;
9402   }
9403 #pragma omp parallel sections
9404   {
9405 #pragma omp parallel
9406     for (int i = 0; i < 10; ++i)
9407       ;
9408   }
9409 #pragma omp parallel sections
9410   {
9411 #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?}}
9412     {
9413       bar();
9414     }
9415   }
9416 #pragma omp parallel sections
9417   {
9418 #pragma omp section
9419     {
9420       bar();
9421     }
9422   }
9423 #pragma omp parallel sections
9424   {
9425 #pragma omp section
9426     {
9427 #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?}}
9428       bar();
9429 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
9430       bar();
9431 #pragma omp critical
9432       bar();
9433     }
9434   }
9435 #pragma omp parallel sections
9436   {
9437 #pragma omp parallel
9438     {
9439 #pragma omp single // OK
9440       {
9441         bar();
9442       }
9443 #pragma omp master // OK
9444       {
9445         bar();
9446       }
9447 #pragma omp critical // OK
9448       {
9449         bar();
9450       }
9451 #pragma omp for // OK
9452       for (int i = 0; i < 10; ++i)
9453         ;
9454 #pragma omp for simd // OK
9455       for (int i = 0; i < 10; ++i)
9456         ;
9457 #pragma omp sections // OK
9458       {
9459         bar();
9460       }
9461     }
9462   }
9463 #pragma omp parallel sections
9464   {
9465 #pragma omp parallel for
9466     for (int i = 0; i < 10; ++i)
9467       ;
9468   }
9469 #pragma omp parallel sections
9470   {
9471 #pragma omp parallel for simd
9472     for (int i = 0; i < 10; ++i)
9473       ;
9474   }
9475 #pragma omp parallel sections
9476   {
9477 #pragma omp parallel sections
9478     {
9479       bar();
9480     }
9481   }
9482 #pragma omp parallel sections
9483   {
9484 #pragma omp task
9485     {
9486       bar();
9487     }
9488   }
9489 #pragma omp parallel sections
9490   {
9491 #pragma omp taskyield
9492   }
9493 #pragma omp parallel sections
9494   {
9495 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
9496   }
9497 #pragma omp parallel sections
9498   {
9499 #pragma omp taskwait
9500   }
9501 #pragma omp parallel sections
9502   {
9503 #pragma omp flush
9504   }
9505 #pragma omp parallel sections
9506   {
9507 #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?}}
9508     bar();
9509   }
9510 #pragma omp parallel sections
9511   {
9512 #pragma omp atomic
9513     ++a;
9514   }
9515 #pragma omp parallel sections
9516   {
9517 #pragma omp target
9518     ++a;
9519   }
9520 #pragma omp parallel sections
9521   {
9522 #pragma omp target parallel
9523     ++a;
9524   }
9525 #pragma omp parallel sections
9526   {
9527 #pragma omp target parallel for
9528     for (int i = 0; i < 10; ++i)
9529       ;
9530   }
9531 #pragma omp parallel sections
9532   {
9533 #pragma omp target enter data map(to: a)
9534   }
9535 #pragma omp parallel sections
9536   {
9537 #pragma omp target exit data map(from: a)
9538   }
9539 #pragma omp parallel sections
9540   {
9541 #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?}}
9542     ++a;
9543   }
9544 #pragma omp parallel sections
9545   {
9546 #pragma omp taskloop
9547   for (int i = 0; i < 10; ++i)
9548     ++a;
9549   }
9550 #pragma omp parallel sections
9551   {
9552 #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?}}
9553     for (int i = 0; i < 10; ++i)
9554       ;
9555   }
9556 #pragma omp parallel sections
9557   {
9558 #pragma omp target update to(a)
9559   }
9560 #pragma omp parallel sections
9561   {
9562 #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?}}
9563     for (int i = 0; i < 10; ++i)
9564       ;
9565   }
9566 #pragma omp parallel sections
9567   {
9568 #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?}}
9569     for (int i = 0; i < 10; ++i)
9570       ;
9571   }
9572 #pragma omp parallel sections
9573   {
9574 #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?}}
9575     for (int i = 0; i < 10; ++i)
9576       ;
9577   }
9578 #pragma omp parallel sections
9579   {
9580 #pragma omp target simd // OK
9581     for (int i = 0; i < 10; ++i)
9582       ;
9583   }
9584 #pragma omp parallel sections
9585   {
9586 #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?}}
9587     for (int i = 0; i < 10; ++i)
9588       ;
9589   }
9590 #pragma omp parallel sections
9591   {
9592 #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?}}
9593     for (int i = 0; i < 10; ++i)
9594       ;
9595   }
9596 #pragma omp parallel sections
9597   {
9598 #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?}}
9599     for (int i = 0; i < 10; ++i)
9600       ;
9601   }
9602 #pragma omp parallel sections
9603   {
9604 #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?}}
9605     for (int i = 0; i < 10; ++i)
9606       ;
9607   }
9608 
9609 // TASK DIRECTIVE
9610 #pragma omp task
9611 #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?}}
9612   for (int i = 0; i < 10; ++i)
9613     ;
9614 #pragma omp task
9615 #pragma omp simd
9616   for (int i = 0; i < 10; ++i)
9617     ;
9618 #pragma omp task
9619 #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?}}
9620   for (int i = 0; i < 10; ++i)
9621     ;
9622 #pragma omp task
9623 #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?}}
9624   {
9625     bar();
9626   }
9627 #pragma omp task
9628 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
9629   {
9630     bar();
9631   }
9632 #pragma omp task
9633 #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?}}
9634   bar();
9635 #pragma omp task
9636 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
9637   bar();
9638 #pragma omp task
9639 #pragma omp critical
9640   bar();
9641 #pragma omp task
9642 #pragma omp parallel for
9643   for (int i = 0; i < 10; ++i)
9644     ;
9645 #pragma omp task
9646 #pragma omp parallel for simd
9647   for (int i = 0; i < 10; ++i)
9648     ;
9649 #pragma omp task
9650 #pragma omp parallel sections
9651   {
9652     bar();
9653   }
9654 #pragma omp task
9655 #pragma omp task
9656   {
9657     bar();
9658   }
9659 #pragma omp task
9660   {
9661 #pragma omp taskyield
9662     bar();
9663   }
9664 #pragma omp task
9665   {
9666 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
9667     bar();
9668   }
9669 #pragma omp task
9670   {
9671 #pragma omp taskwait
9672     bar();
9673   }
9674 #pragma omp task
9675   {
9676 #pragma omp flush
9677     bar();
9678   }
9679 #pragma omp task
9680   {
9681 #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?}}
9682     bar();
9683   }
9684 #pragma omp task
9685   {
9686 #pragma omp atomic
9687     ++a;
9688   }
9689 #pragma omp task
9690   {
9691 #pragma omp target
9692     ++a;
9693   }
9694 #pragma omp task
9695   {
9696 #pragma omp target parallel
9697     ++a;
9698   }
9699 #pragma omp task
9700 #pragma omp target parallel for
9701   for (int i = 0; i < 10; ++i)
9702     ;
9703 #pragma omp task
9704   {
9705 #pragma omp target enter data map(to: a)
9706     ++a;
9707   }
9708 #pragma omp task
9709   {
9710 #pragma omp target exit data map(from: a)
9711     ++a;
9712   }
9713 #pragma omp task
9714   {
9715 #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?}}
9716     ++a;
9717   }
9718 #pragma omp task
9719   {
9720 #pragma omp taskloop
9721   for (int i = 0; i < 10; ++i)
9722     ++a;
9723   }
9724 #pragma omp task
9725   {
9726 #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?}}
9727     for (int i = 0; i < 10; ++i)
9728       ;
9729   }
9730 #pragma omp task
9731   {
9732 #pragma omp target update to(a)
9733     a++;
9734   }
9735 #pragma omp task
9736   {
9737 #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?}}
9738     for (int i = 0; i < 10; ++i)
9739       ;
9740   }
9741 #pragma omp task
9742   {
9743 #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?}}
9744     for (int i = 0; i < 10; ++i)
9745       ;
9746   }
9747 #pragma omp task
9748   {
9749 #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?}}
9750     for (int i = 0; i < 10; ++i)
9751       ;
9752   }
9753 #pragma omp task
9754   {
9755 #pragma omp target simd // OK
9756     for (int i = 0; i < 10; ++i)
9757       ;
9758   }
9759 #pragma omp task
9760   {
9761 #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?}}
9762     for (int i = 0; i < 10; ++i)
9763       ;
9764   }
9765 #pragma omp task
9766   {
9767 #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?}}
9768     for (int i = 0; i < 10; ++i)
9769       ;
9770   }
9771 #pragma omp task
9772   {
9773 #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?}}
9774     for (int i = 0; i < 10; ++i)
9775       ;
9776   }
9777 #pragma omp task
9778   {
9779 #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?}}
9780     for (int i = 0; i < 10; ++i)
9781       ;
9782   }
9783 
9784 // ATOMIC DIRECTIVE
9785 #pragma omp atomic
9786   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9787   // expected-note@+1 {{expected an expression statement}}
9788   {
9789 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9790     for (int i = 0; i < 10; ++i)
9791       ;
9792   }
9793 #pragma omp atomic
9794   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9795   // expected-note@+1 {{expected an expression statement}}
9796   {
9797 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9798     for (int i = 0; i < 10; ++i)
9799       ;
9800   }
9801 #pragma omp atomic
9802   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9803   // expected-note@+1 {{expected an expression statement}}
9804   {
9805 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9806     for (int i = 0; i < 10; ++i)
9807       ;
9808   }
9809 #pragma omp atomic
9810   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9811   // expected-note@+1 {{expected an expression statement}}
9812   {
9813 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9814     for (int i = 0; i < 10; ++i)
9815       ;
9816   }
9817 #pragma omp atomic
9818   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9819   // expected-note@+1 {{expected an expression statement}}
9820   {
9821 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9822     {
9823       bar();
9824     }
9825   }
9826 #pragma omp atomic
9827   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9828   // expected-note@+1 {{expected an expression statement}}
9829   {
9830 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9831     {
9832       bar();
9833     }
9834   }
9835 #pragma omp atomic
9836   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9837   // expected-note@+1 {{expected an expression statement}}
9838   {
9839 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9840     {
9841       bar();
9842     }
9843   }
9844 #pragma omp atomic
9845   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9846   // expected-note@+1 {{expected an expression statement}}
9847   {
9848 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9849     {
9850       bar();
9851     }
9852   }
9853 #pragma omp atomic
9854   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9855   // expected-note@+1 {{expected an expression statement}}
9856   {
9857 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9858     {
9859       bar();
9860     }
9861   }
9862 #pragma omp atomic
9863   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9864   // expected-note@+1 {{expected an expression statement}}
9865   {
9866 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9867     for (int i = 0; i < 10; ++i)
9868       ;
9869   }
9870 #pragma omp atomic
9871   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9872   // expected-note@+1 {{expected an expression statement}}
9873   {
9874 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9875     for (int i = 0; i < 10; ++i)
9876       ;
9877   }
9878 #pragma omp atomic
9879   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9880   // expected-note@+1 {{expected an expression statement}}
9881   {
9882 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9883     {
9884       bar();
9885     }
9886   }
9887 #pragma omp atomic
9888   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9889   // expected-note@+1 {{expected an expression statement}}
9890   {
9891 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9892     {
9893       bar();
9894     }
9895   }
9896 #pragma omp atomic
9897   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9898   // expected-note@+1 {{expected an expression statement}}
9899   {
9900 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9901     bar();
9902   }
9903 #pragma omp atomic
9904   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9905   // expected-note@+1 {{expected an expression statement}}
9906   {
9907 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9908     bar();
9909   }
9910 #pragma omp atomic
9911   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9912   // expected-note@+1 {{expected an expression statement}}
9913   {
9914 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9915     bar();
9916   }
9917 #pragma omp atomic
9918   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9919   // expected-note@+1 {{expected an expression statement}}
9920   {
9921 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9922     bar();
9923   }
9924 #pragma omp atomic
9925   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9926   // expected-note@+1 {{expected an expression statement}}
9927   {
9928 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9929     bar();
9930   }
9931 #pragma omp atomic
9932   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9933   // expected-note@+1 {{expected an expression statement}}
9934   {
9935 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9936     ++a;
9937   }
9938 #pragma omp atomic
9939   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9940   // expected-note@+1 {{expected an expression statement}}
9941   {
9942 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9943     ++a;
9944   }
9945 #pragma omp atomic
9946   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9947   // expected-note@+1 {{expected an expression statement}}
9948   {
9949 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9950     ++a;
9951   }
9952 #pragma omp atomic
9953   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9954   // expected-note@+1 {{expected an expression statement}}
9955   {
9956 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9957     for (int i = 0; i < 10; ++i)
9958       ;
9959   }
9960 #pragma omp atomic
9961   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9962   // expected-note@+1 {{expected an expression statement}}
9963   {
9964 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9965     ++a;
9966   }
9967 #pragma omp atomic
9968   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9969   // expected-note@+1 {{expected an expression statement}}
9970   {
9971 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9972     ++a;
9973   }
9974 #pragma omp atomic
9975   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9976   // expected-note@+1 {{expected an expression statement}}
9977   {
9978 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9979     ++a;
9980   }
9981 #pragma omp atomic
9982   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9983   // expected-note@+1 {{expected an expression statement}}
9984   {
9985 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9986   for (int i = 0; i < 10; ++i)
9987     ++a;
9988   }
9989 #pragma omp atomic
9990   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9991   // expected-note@+1 {{expected an expression statement}}
9992   {
9993 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9994     for (int i = 0; i < 10; ++i)
9995       ;
9996   }
9997 #pragma omp atomic
9998   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9999   // expected-note@+1 {{expected an expression statement}}
10000   {
10001 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10002   }
10003 #pragma omp atomic
10004   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10005   // expected-note@+1 {{expected an expression statement}}
10006   {
10007 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10008     for (int i = 0; i < 10; ++i)
10009       ;
10010   }
10011 #pragma omp atomic
10012   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10013   // expected-note@+1 {{expected an expression statement}}
10014   {
10015 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10016     for (int i = 0; i < 10; ++i)
10017       ;
10018   }
10019 #pragma omp atomic
10020   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10021   // expected-note@+1 {{expected an expression statement}}
10022   {
10023 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10024     for (int i = 0; i < 10; ++i)
10025       ;
10026   }
10027 #pragma omp atomic
10028   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10029   // expected-note@+1 {{expected an expression statement}}
10030   {
10031 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10032     for (int i = 0; i < 10; ++i)
10033       ;
10034   }
10035 #pragma omp atomic
10036   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10037   // expected-note@+1 {{expected an expression statement}}
10038   {
10039 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10040     for (int i = 0; i < 10; ++i)
10041       ;
10042   }
10043 #pragma omp atomic
10044   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10045   // expected-note@+1 {{expected an expression statement}}
10046   {
10047 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10048     for (int i = 0; i < 10; ++i)
10049       ;
10050   }
10051 #pragma omp atomic
10052   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10053   // expected-note@+1 {{expected an expression statement}}
10054   {
10055 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10056     for (int i = 0; i < 10; ++i)
10057       ;
10058   }
10059 #pragma omp atomic
10060   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10061   // expected-note@+1 {{expected an expression statement}}
10062   {
10063 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10064     for (int i = 0; i < 10; ++i)
10065       ;
10066   }
10067 
10068 // TARGET DIRECTIVE
10069 #pragma omp target
10070 #pragma omp parallel
10071   bar();
10072 #pragma omp target
10073 #pragma omp for
10074   for (int i = 0; i < 10; ++i)
10075     ;
10076 #pragma omp target
10077 #pragma omp simd
10078   for (int i = 0; i < 10; ++i)
10079     ;
10080 #pragma omp target
10081 #pragma omp for simd
10082   for (int i = 0; i < 10; ++i)
10083     ;
10084 #pragma omp target
10085 #pragma omp sections
10086   {
10087     bar();
10088   }
10089 #pragma omp target
10090 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
10091   {
10092     bar();
10093   }
10094 #pragma omp target
10095 #pragma omp single
10096   bar();
10097 
10098 #pragma omp target
10099 #pragma omp master
10100   {
10101     bar();
10102   }
10103 #pragma omp target
10104 #pragma omp critical
10105   {
10106     bar();
10107   }
10108 #pragma omp target
10109 #pragma omp parallel for
10110   for (int i = 0; i < 10; ++i)
10111     ;
10112 #pragma omp target
10113 #pragma omp parallel for simd
10114   for (int i = 0; i < 10; ++i)
10115     ;
10116 #pragma omp target
10117 #pragma omp parallel sections
10118   {
10119     bar();
10120   }
10121 #pragma omp target
10122 #pragma omp task
10123   {
10124     bar();
10125   }
10126 #pragma omp target
10127   {
10128 #pragma omp taskyield
10129     bar();
10130   }
10131 #pragma omp target
10132   {
10133 #pragma omp barrier
10134     bar();
10135   }
10136 #pragma omp target
10137   {
10138 #pragma omp taskwait
10139     bar();
10140   }
10141 #pragma omp target
10142   {
10143 #pragma omp flush
10144     bar();
10145   }
10146 #pragma omp target
10147   {
10148 #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?}}
10149     bar();
10150   }
10151 #pragma omp target
10152   {
10153 #pragma omp atomic
10154     ++a;
10155   }
10156 #pragma omp target
10157   {
10158 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
10159     ++a;
10160   }
10161 #pragma omp target
10162   {
10163 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
10164     ++a;
10165   }
10166 #pragma omp target
10167 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
10168   for (int i = 0; i < 10; ++i)
10169     ;
10170 #pragma omp target
10171   {
10172 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
10173   }
10174 #pragma omp target
10175   {
10176 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
10177   }
10178 #pragma omp target
10179   {
10180 #pragma omp teams
10181     ++a;
10182   }
10183 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
10184   {
10185     ++a;          // expected-note {{statement outside teams construct here}}
10186 #pragma omp teams // expected-note {{nested teams construct here}}
10187     ++a;
10188   }
10189 #pragma omp target
10190   {
10191 #pragma omp taskloop
10192   for (int i = 0; i < 10; ++i)
10193     ++a;
10194   }
10195 #pragma omp target
10196   {
10197 #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?}}
10198     for (int i = 0; i < 10; ++i)
10199       ;
10200   }
10201 #pragma omp atomic
10202   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
10203   // expected-note@+1 {{expected an expression statement}}
10204   {
10205 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
10206     a++;
10207   }
10208 #pragma omp target
10209   {
10210 #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?}}
10211     for (int i = 0; i < 10; ++i)
10212       ;
10213   }
10214 #pragma omp target
10215   {
10216 #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?}}
10217     for (int i = 0; i < 10; ++i)
10218       ;
10219   }
10220 #pragma omp target
10221   {
10222 #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?}}
10223     for (int i = 0; i < 10; ++i)
10224       ;
10225   }
10226 #pragma omp target
10227   {
10228 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
10229     for (int i = 0; i < 10; ++i)
10230       ;
10231   }
10232 #pragma omp target
10233   {
10234 #pragma omp teams distribute // OK
10235     for (int i = 0; i < 10; ++i)
10236       ;
10237   }
10238 #pragma omp target
10239   {
10240 #pragma omp teams distribute simd // OK
10241     for (int i = 0; i < 10; ++i)
10242       ;
10243   }
10244 #pragma omp target
10245   {
10246 #pragma omp teams distribute parallel for simd // OK
10247     for (int i = 0; i < 10; ++i)
10248       ;
10249   }
10250 #pragma omp target
10251   {
10252 #pragma omp teams distribute parallel for // OK
10253     for (int i = 0; i < 10; ++i)
10254       ;
10255   }
10256 
10257 // TARGET PARALLEL DIRECTIVE
10258 #pragma omp target parallel
10259 #pragma omp parallel
10260   bar();
10261 #pragma omp target parallel
10262 #pragma omp for
10263   for (int i = 0; i < 10; ++i)
10264     ;
10265 #pragma omp target parallel
10266 #pragma omp simd
10267   for (int i = 0; i < 10; ++i)
10268     ;
10269 #pragma omp target parallel
10270 #pragma omp for simd
10271   for (int i = 0; i < 10; ++i)
10272     ;
10273 #pragma omp target parallel
10274 #pragma omp sections
10275   {
10276     bar();
10277   }
10278 #pragma omp target parallel
10279 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
10280   {
10281     bar();
10282   }
10283 #pragma omp target parallel
10284 #pragma omp single
10285   bar();
10286 
10287 #pragma omp target parallel
10288 #pragma omp master
10289   {
10290     bar();
10291   }
10292 #pragma omp target parallel
10293 #pragma omp critical
10294   {
10295     bar();
10296   }
10297 #pragma omp target parallel
10298 #pragma omp parallel for
10299   for (int i = 0; i < 10; ++i)
10300     ;
10301 #pragma omp target parallel
10302 #pragma omp parallel for simd
10303   for (int i = 0; i < 10; ++i)
10304     ;
10305 #pragma omp target parallel
10306 #pragma omp parallel sections
10307   {
10308     bar();
10309   }
10310 #pragma omp target parallel
10311 #pragma omp task
10312   {
10313     bar();
10314   }
10315 #pragma omp target parallel
10316   {
10317 #pragma omp taskyield
10318     bar();
10319   }
10320 #pragma omp target parallel
10321   {
10322 #pragma omp barrier
10323     bar();
10324   }
10325 #pragma omp target parallel
10326   {
10327 #pragma omp taskwait
10328     bar();
10329   }
10330 #pragma omp target parallel
10331   {
10332 #pragma omp flush
10333     bar();
10334   }
10335 #pragma omp target parallel
10336   {
10337 #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?}}
10338     bar();
10339   }
10340 #pragma omp target parallel
10341   {
10342 #pragma omp atomic
10343     ++a;
10344   }
10345 #pragma omp target parallel
10346   {
10347 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
10348     ++a;
10349   }
10350 #pragma omp target parallel
10351   {
10352 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
10353     ++a;
10354   }
10355 #pragma omp target parallel
10356 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
10357   for (int i = 0; i < 10; ++i)
10358     ;
10359 #pragma omp target parallel
10360   {
10361 #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?}}
10362     ++a;
10363   }
10364 #pragma omp target parallel
10365   {
10366     ++a;
10367 #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?}}
10368     ++a;
10369   }
10370 #pragma omp target parallel
10371   {
10372 #pragma omp taskloop
10373   for (int i = 0; i < 10; ++i)
10374     ++a;
10375   }
10376 #pragma omp target parallel
10377   {
10378 #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?}}
10379     for (int i = 0; i < 10; ++i)
10380       ;
10381   }
10382 #pragma omp target parallel
10383   {
10384 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
10385   }
10386 #pragma omp target parallel
10387   {
10388 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
10389   }
10390 #pragma omp target parallel
10391   {
10392 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
10393   }
10394 #pragma omp target parallel
10395   {
10396 #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?}}
10397     for (int i = 0; i < 10; ++i)
10398       ;
10399   }
10400 #pragma omp target parallel
10401   {
10402 #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?}}
10403     for (int i = 0; i < 10; ++i)
10404       ;
10405   }
10406 #pragma omp target parallel
10407   {
10408 #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?}}
10409     for (int i = 0; i < 10; ++i)
10410       ;
10411   }
10412 #pragma omp target parallel
10413   {
10414 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
10415     for (int i = 0; i < 10; ++i)
10416       ;
10417   }
10418 #pragma omp target parallel
10419   {
10420 #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?}}
10421     for (int i = 0; i < 10; ++i)
10422       ;
10423   }
10424 #pragma omp target parallel
10425   {
10426 #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?}}
10427     for (int i = 0; i < 10; ++i)
10428       ;
10429   }
10430 #pragma omp target parallel
10431   {
10432 #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?}}
10433     for (int i = 0; i < 10; ++i)
10434       ;
10435   }
10436 #pragma omp target parallel
10437   {
10438 #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?}}
10439     for (int i = 0; i < 10; ++i)
10440       ;
10441   }
10442 
10443 // TARGET PARALLEL FOR DIRECTIVE
10444 #pragma omp target parallel for
10445   for (int i = 0; i < 10; ++i) {
10446 #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?}}
10447     for (int i = 0; i < 10; ++i)
10448       ;
10449   }
10450 #pragma omp target parallel for
10451   for (int i = 0; i < 10; ++i) {
10452 #pragma omp simd
10453     for (int i = 0; i < 10; ++i)
10454       ;
10455   }
10456 #pragma omp target parallel for
10457   for (int i = 0; i < 10; ++i) {
10458 #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?}}
10459     for (int i = 0; i < 10; ++i)
10460       ;
10461   }
10462 #pragma omp target parallel for
10463   for (int i = 0; i < 10; ++i) {
10464 #pragma omp parallel
10465     for (int i = 0; i < 10; ++i)
10466       ;
10467   }
10468 #pragma omp target parallel for
10469   for (int i = 0; i < 10; ++i) {
10470 #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?}}
10471     {
10472       bar();
10473     }
10474   }
10475 #pragma omp target parallel for
10476   for (int i = 0; i < 10; ++i) {
10477 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
10478     {
10479       bar();
10480     }
10481   }
10482 #pragma omp target parallel for
10483   for (int i = 0; i < 10; ++i) {
10484 #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?}}
10485     {
10486       bar();
10487     }
10488   }
10489 
10490 #pragma omp target parallel for
10491   for (int i = 0; i < 10; ++i) {
10492 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
10493     {
10494       bar();
10495     }
10496   }
10497 
10498 #pragma omp target parallel for
10499   for (int i = 0; i < 10; ++i) {
10500 #pragma omp critical
10501     {
10502       bar();
10503     }
10504   }
10505 
10506 #pragma omp target parallel for
10507   for (int i = 0; i < 10; ++i) {
10508 #pragma omp parallel
10509     {
10510 #pragma omp single // OK
10511       {
10512         bar();
10513       }
10514 #pragma omp for // OK
10515       for (int i = 0; i < 10; ++i)
10516         ;
10517 #pragma omp for simd // OK
10518       for (int i = 0; i < 10; ++i)
10519         ;
10520 #pragma omp sections // OK
10521       {
10522         bar();
10523       }
10524     }
10525   }
10526 #pragma omp target parallel for
10527   for (int i = 0; i < 10; ++i) {
10528 #pragma omp parallel for
10529     for (int i = 0; i < 10; ++i)
10530       ;
10531   }
10532 #pragma omp target parallel for
10533   for (int i = 0; i < 10; ++i) {
10534 #pragma omp parallel for simd
10535     for (int i = 0; i < 10; ++i)
10536       ;
10537   }
10538 #pragma omp target parallel for
10539   for (int i = 0; i < 10; ++i) {
10540 #pragma omp parallel sections
10541     {
10542       bar();
10543     }
10544   }
10545 #pragma omp target parallel for
10546   for (int i = 0; i < 10; ++i) {
10547 #pragma omp task
10548     {
10549       bar();
10550     }
10551   }
10552 #pragma omp target parallel for
10553   for (int i = 0; i < 10; ++i) {
10554 #pragma omp taskyield
10555     bar();
10556   }
10557 #pragma omp target parallel for
10558   for (int i = 0; i < 10; ++i) {
10559 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
10560     bar();
10561   }
10562 #pragma omp target parallel for
10563   for (int i = 0; i < 10; ++i) {
10564 #pragma omp taskwait
10565     bar();
10566   }
10567 #pragma omp target parallel for
10568   for (int i = 0; i < 10; ++i) {
10569 #pragma omp flush
10570     bar();
10571   }
10572 #pragma omp target parallel for
10573   for (int i = 0; i < 10; ++i) {
10574 #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?}}
10575     bar();
10576   }
10577 #pragma omp target parallel for ordered
10578   for (int i = 0; i < 10; ++i) {
10579 #pragma omp ordered // OK
10580     bar();
10581   }
10582 #pragma omp target parallel for
10583   for (int i = 0; i < 10; ++i) {
10584 #pragma omp atomic
10585     ++a;
10586   }
10587 #pragma omp target parallel for
10588   for (int i = 0; i < 10; ++i) {
10589 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
10590     ++a;
10591   }
10592 #pragma omp target parallel for
10593   for (int i = 0; i < 10; ++i) {
10594 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
10595     ++a;
10596   }
10597 #pragma omp target parallel for
10598   for (int i = 0; i < 10; ++i) {
10599 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
10600     for (int i = 0; i < 10; ++i)
10601       ;
10602   }
10603 #pragma omp target parallel for
10604   for (int i = 0; i < 10; ++i) {
10605 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
10606     ++a;
10607   }
10608 #pragma omp target parallel for
10609   for (int i = 0; i < 10; ++i) {
10610 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
10611     ++a;
10612   }
10613 #pragma omp target parallel for
10614   for (int i = 0; i < 10; ++i) {
10615 #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?}}
10616     ++a;
10617   }
10618 #pragma omp target parallel for
10619   for (int i = 0; i < 10; ++i) {
10620 #pragma omp taskloop
10621   for (int i = 0; i < 10; ++i)
10622     ++a;
10623   }
10624 #pragma omp target parallel for
10625   for (int i = 0; i < 10; ++i) {
10626 #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?}}
10627     for (int j = 0; j < 10; ++j)
10628       ;
10629   }
10630 #pragma omp target parallel for
10631   for (int i = 0; i < 10; ++i) {
10632 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
10633     a++;
10634   }
10635 #pragma omp target parallel for
10636   for (int i = 0; i < 10; ++i) {
10637 #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?}}
10638     for (int j = 0; j < 10; ++j)
10639       ;
10640   }
10641 #pragma omp target parallel for
10642   for (int i = 0; i < 10; ++i) {
10643 #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?}}
10644     for (int j = 0; j < 10; ++j)
10645       ;
10646   }
10647 #pragma omp target parallel for
10648   for (int i = 0; i < 10; ++i) {
10649 #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?}}
10650     for (int j = 0; j < 10; ++j)
10651       ;
10652   }
10653 #pragma omp target parallel for
10654   for (int i = 0; i < 10; ++i) {
10655 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
10656     for (int j = 0; j < 10; ++j)
10657       ;
10658   }
10659 #pragma omp target parallel for
10660   for (int i = 0; i < 10; ++i) {
10661 #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?}}
10662     for (int j = 0; j < 10; ++j)
10663       ;
10664   }
10665 #pragma omp target parallel for
10666   for (int i = 0; i < 10; ++i) {
10667 #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?}}
10668     for (int j = 0; j < 10; ++j)
10669       ;
10670   }
10671 #pragma omp target parallel for
10672   for (int i = 0; i < 10; ++i) {
10673 #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?}}
10674     for (int j = 0; j < 10; ++j)
10675       ;
10676   }
10677 #pragma omp target parallel for
10678   for (int i = 0; i < 10; ++i) {
10679 #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?}}
10680     for (int j = 0; j < 10; ++j)
10681       ;
10682   }
10683 
10684 // TEAMS DIRECTIVE
10685 #pragma omp target
10686 #pragma omp teams
10687 #pragma omp parallel
10688   bar();
10689 #pragma omp target
10690 #pragma omp teams
10691 #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?}}
10692   for (int i = 0; i < 10; ++i)
10693     ;
10694 #pragma omp target
10695 #pragma omp teams
10696 #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?}}
10697   for (int i = 0; i < 10; ++i)
10698     ;
10699 #pragma omp target
10700 #pragma omp teams
10701 #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?}}
10702   for (int i = 0; i < 10; ++i)
10703     ;
10704 #pragma omp target
10705 #pragma omp teams
10706 #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?}}
10707   {
10708     bar();
10709   }
10710 #pragma omp target
10711 #pragma omp teams
10712 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
10713   {
10714     bar();
10715   }
10716 #pragma omp target
10717 #pragma omp teams
10718 #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?}}
10719   bar();
10720 
10721 #pragma omp target
10722 #pragma omp teams
10723 #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?}}
10724   {
10725     bar();
10726   }
10727 #pragma omp target
10728 #pragma omp teams
10729 #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?}}
10730   {
10731     bar();
10732   }
10733 #pragma omp target
10734 #pragma omp teams
10735 #pragma omp parallel for
10736   for (int i = 0; i < 10; ++i)
10737     ;
10738 #pragma omp target
10739 #pragma omp teams
10740 #pragma omp parallel for simd
10741   for (int i = 0; i < 10; ++i)
10742     ;
10743 #pragma omp target
10744 #pragma omp teams
10745 #pragma omp parallel sections
10746   {
10747     bar();
10748   }
10749 #pragma omp target
10750 #pragma omp teams
10751 #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?}}
10752   {
10753     bar();
10754   }
10755 #pragma omp target
10756 #pragma omp teams
10757   {
10758 #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?}}
10759     bar();
10760   }
10761 #pragma omp target
10762 #pragma omp teams
10763   {
10764 #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?}}
10765     bar();
10766   }
10767 #pragma omp target
10768 #pragma omp teams
10769   {
10770 #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?}}
10771     bar();
10772   }
10773 #pragma omp target
10774 #pragma omp teams
10775   {
10776 #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?}}
10777     bar();
10778   }
10779 #pragma omp target
10780 #pragma omp teams
10781   {
10782 #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?}}
10783     bar();
10784   }
10785 #pragma omp target
10786 #pragma omp teams
10787   {
10788 #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?}}
10789     ++a;
10790   }
10791 #pragma omp target
10792 #pragma omp teams
10793   {
10794 #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}}
10795     ++a;
10796   }
10797 #pragma omp target
10798 #pragma omp teams
10799   {
10800 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
10801     ++a;
10802   }
10803 #pragma omp target
10804 #pragma omp teams
10805 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
10806   for (int i = 0; i < 10; ++i)
10807     ;
10808 #pragma omp target
10809 #pragma omp teams
10810   {
10811 #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
10812   }
10813 #pragma omp target
10814 #pragma omp teams
10815   {
10816 #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}}
10817   }
10818 #pragma omp target
10819 #pragma omp teams
10820   {
10821 #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?}}
10822     ++a;
10823   }
10824 #pragma omp target
10825 #pragma omp teams
10826   {
10827 #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?}}
10828   for (int i = 0; i < 10; ++i)
10829     ++a;
10830   }
10831 #pragma omp target
10832 #pragma omp teams
10833 #pragma omp distribute
10834   for (int i = 0; i < 10; ++i)
10835     ;
10836 #pragma omp target
10837 #pragma omp teams
10838 #pragma omp distribute
10839   for (int i = 0; i < 10; ++i)
10840     ;
10841 #pragma omp distribute
10842   for (int j = 0; j < 10; ++j)
10843     ;
10844 #pragma omp target
10845 #pragma omp teams
10846   {
10847 #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}}
10848     ++a;
10849   }
10850 #pragma omp target
10851 #pragma omp teams
10852 #pragma omp distribute parallel for
10853   for (int i = 0; i < 10; ++i)
10854     ;
10855 #pragma omp target
10856 #pragma omp teams
10857   {
10858 #pragma omp distribute parallel for
10859   for (int i = 0; i < 10; ++i)
10860     ;
10861 #pragma omp distribute parallel for
10862   for (int j = 0; j < 10; ++j)
10863     ;
10864   }
10865 #pragma omp target
10866 #pragma omp teams
10867   {
10868 #pragma omp distribute parallel for simd
10869   for (int i = 0; i < 10; ++i)
10870     ;
10871 #pragma omp distribute parallel for simd
10872   for (int j = 0; j < 10; ++j)
10873     ;
10874   }
10875 #pragma omp target
10876 #pragma omp teams
10877   {
10878 #pragma omp distribute simd
10879   for (int i = 0; i < 10; ++i)
10880     ;
10881 #pragma omp distribute simd
10882   for (int j = 0; j < 10; ++j)
10883     ;
10884   }
10885 #pragma omp target
10886 #pragma omp teams
10887   {
10888 #pragma omp target simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target simd' directive into a parallel region?}}
10889   for (int i = 0; i < 10; ++i)
10890     ;
10891   }
10892 #pragma omp target
10893 #pragma omp teams
10894   {
10895 #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?}}
10896   for (int i = 0; i < 10; ++i)
10897     ;
10898   }
10899 #pragma omp target
10900 #pragma omp teams
10901   {
10902 #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?}}
10903   for (int i = 0; i < 10; ++i)
10904     ;
10905   }
10906 #pragma omp target
10907 #pragma omp teams
10908   {
10909 #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?}}
10910   for (int i = 0; i < 10; ++i)
10911     ;
10912   }
10913 #pragma omp target
10914 #pragma omp teams
10915   {
10916 #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?}}
10917   for (int i = 0; i < 10; ++i)
10918     ;
10919   }
10920 
10921 // TASKLOOP DIRECTIVE
10922 #pragma omp taskloop
10923   for (int i = 0; i < 10; ++i) {
10924 #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?}}
10925     for (int i = 0; i < 10; ++i)
10926       ;
10927   }
10928 #pragma omp taskloop
10929   for (int i = 0; i < 10; ++i) {
10930 #pragma omp simd
10931     for (int i = 0; i < 10; ++i)
10932       ;
10933   }
10934 #pragma omp taskloop
10935   for (int i = 0; i < 10; ++i) {
10936 #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?}}
10937     for (int i = 0; i < 10; ++i)
10938       ;
10939   }
10940 #pragma omp taskloop
10941   for (int i = 0; i < 10; ++i) {
10942 #pragma omp parallel
10943     for (int i = 0; i < 10; ++i)
10944       ;
10945   }
10946 #pragma omp taskloop
10947   for (int i = 0; i < 10; ++i) {
10948 #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?}}
10949     {
10950       bar();
10951     }
10952   }
10953 #pragma omp taskloop
10954   for (int i = 0; i < 10; ++i) {
10955 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
10956     {
10957       bar();
10958     }
10959   }
10960 #pragma omp taskloop
10961   for (int i = 0; i < 10; ++i) {
10962 #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?}}
10963     {
10964       bar();
10965     }
10966   }
10967 
10968 #pragma omp taskloop
10969   for (int i = 0; i < 10; ++i) {
10970 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
10971     {
10972       bar();
10973     }
10974   }
10975 #pragma omp taskloop
10976   for (int i = 0; i < 10; ++i) {
10977 #pragma omp critical
10978     {
10979       bar();
10980     }
10981   }
10982 #pragma omp taskloop
10983   for (int i = 0; i < 10; ++i) {
10984 #pragma omp parallel
10985     {
10986 #pragma omp single // OK
10987       {
10988         bar();
10989       }
10990 #pragma omp for // OK
10991       for (int i = 0; i < 10; ++i)
10992         ;
10993 #pragma omp sections // OK
10994       {
10995         bar();
10996       }
10997     }
10998   }
10999 #pragma omp taskloop
11000   for (int i = 0; i < 10; ++i) {
11001 #pragma omp parallel for
11002     for (int i = 0; i < 10; ++i)
11003       ;
11004   }
11005 #pragma omp taskloop
11006   for (int i = 0; i < 10; ++i) {
11007 #pragma omp parallel for simd
11008     for (int i = 0; i < 10; ++i)
11009       ;
11010   }
11011 #pragma omp taskloop
11012   for (int i = 0; i < 10; ++i) {
11013 #pragma omp parallel sections
11014     {
11015       bar();
11016     }
11017   }
11018 #pragma omp taskloop
11019   for (int i = 0; i < 10; ++i) {
11020 #pragma omp task
11021     {
11022       bar();
11023     }
11024   }
11025 #pragma omp taskloop
11026   for (int i = 0; i < 10; ++i) {
11027 #pragma omp taskyield
11028     bar();
11029   }
11030 #pragma omp taskloop
11031   for (int i = 0; i < 10; ++i) {
11032 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
11033     bar();
11034   }
11035 #pragma omp taskloop
11036   for (int i = 0; i < 10; ++i) {
11037 #pragma omp taskwait
11038     bar();
11039   }
11040 #pragma omp taskloop
11041   for (int i = 0; i < 10; ++i) {
11042 #pragma omp flush
11043     bar();
11044   }
11045 #pragma omp taskloop
11046   for (int i = 0; i < 10; ++i) {
11047 #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?}}
11048     bar();
11049   }
11050 #pragma omp taskloop
11051   for (int i = 0; i < 10; ++i) {
11052 #pragma omp atomic
11053     ++a;
11054   }
11055 #pragma omp taskloop
11056   for (int i = 0; i < 10; ++i) {
11057 #pragma omp target
11058     ++a;
11059   }
11060 #pragma omp taskloop
11061   for (int i = 0; i < 10; ++i) {
11062 #pragma omp target parallel
11063     ++a;
11064   }
11065 #pragma omp taskloop
11066   for (int i = 0; i < 10; ++i) {
11067 #pragma omp target parallel for
11068     for (int i = 0; i < 10; ++i)
11069       ;
11070   }
11071 #pragma omp taskloop
11072   for (int i = 0; i < 10; ++i) {
11073 #pragma omp target enter data map(to: a)
11074     ++a;
11075   }
11076 #pragma omp taskloop
11077   for (int i = 0; i < 10; ++i) {
11078 #pragma omp target exit data map(from: a)
11079     ++a;
11080   }
11081 #pragma omp taskloop
11082   for (int i = 0; i < 10; ++i) {
11083 #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?}}
11084     ++a;
11085   }
11086 #pragma omp taskloop
11087   for (int i = 0; i < 10; ++i) {
11088 #pragma omp taskloop
11089   for (int i = 0; i < 10; ++i)
11090     ++a;
11091   }
11092 #pragma omp taskloop
11093   for (int i = 0; i < 10; ++i) {
11094 #pragma omp target update to(a)
11095     ++a;
11096   }
11097 #pragma omp taskloop
11098   for (int i = 0; i < 10; ++i) {
11099 #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?}}
11100     for (int i = 0; i < 10; ++i)
11101       ;
11102   }
11103 #pragma omp taskloop
11104   for (int i = 0; i < 10; ++i) {
11105 #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?}}
11106     for (int i = 0; i < 10; ++i)
11107       ;
11108   }
11109 #pragma omp taskloop
11110   for (int i = 0; i < 10; ++i) {
11111 #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?}}
11112     for (int i = 0; i < 10; ++i)
11113       ;
11114   }
11115 #pragma omp taskloop
11116   for (int i = 0; i < 10; ++i) {
11117 #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?}}
11118     for (int i = 0; i < 10; ++i)
11119       ;
11120   }
11121 #pragma omp taskloop
11122   for (int i = 0; i < 10; ++i) {
11123 #pragma omp target simd // OK
11124     for (int i = 0; i < 10; ++i)
11125       ;
11126   }
11127 #pragma omp taskloop
11128   for (int i = 0; i < 10; ++i) {
11129 #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?}}
11130     for (int i = 0; i < 10; ++i)
11131       ;
11132   }
11133 #pragma omp taskloop
11134   for (int i = 0; i < 10; ++i) {
11135 #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?}}
11136     for (int i = 0; i < 10; ++i)
11137       ;
11138   }
11139 #pragma omp taskloop
11140   for (int i = 0; i < 10; ++i) {
11141 #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?}}
11142     for (int i = 0; i < 10; ++i)
11143       ;
11144   }
11145 #pragma omp taskloop
11146   for (int i = 0; i < 10; ++i) {
11147 #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?}}
11148     for (int i = 0; i < 10; ++i)
11149       ;
11150   }
11151 
11152 // DISTRIBUTE DIRECTIVE
11153 #pragma omp target
11154 #pragma omp teams
11155 #pragma omp distribute
11156   for (int i = 0; i < 10; ++i) {
11157 #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?}}
11158     for (int i = 0; i < 10; ++i)
11159       ;
11160   }
11161 #pragma omp target
11162 #pragma omp teams
11163 #pragma omp distribute
11164   for (int i = 0; i < 10; ++i) {
11165 #pragma omp for
11166     for (int i = 0; i < 10; ++i)
11167       ;
11168   }
11169 #pragma omp target
11170 #pragma omp teams
11171 #pragma omp distribute
11172   for (int i = 0; i < 10; ++i) {
11173 #pragma omp simd
11174     for (int i = 0; i < 10; ++i)
11175       ;
11176   }
11177 #pragma omp target
11178 #pragma omp teams
11179 #pragma omp distribute
11180   for (int i = 0; i < 10; ++i) {
11181 #pragma omp for simd
11182     for (int i = 0; i < 10; ++i)
11183       ;
11184   }
11185 #pragma omp target
11186 #pragma omp teams
11187 #pragma omp distribute
11188   for (int i = 0; i < 10; ++i) {
11189 #pragma omp parallel
11190     for (int i = 0; i < 10; ++i)
11191       ;
11192   }
11193 #pragma omp target
11194 #pragma omp teams
11195 #pragma omp distribute
11196   for (int i = 0; i < 10; ++i) {
11197 #pragma omp sections
11198     {
11199       bar();
11200     }
11201   }
11202 #pragma omp target
11203 #pragma omp teams
11204 #pragma omp distribute
11205   for (int i = 0; i < 10; ++i) {
11206 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
11207     {
11208       bar();
11209     }
11210   }
11211 #pragma omp target
11212 #pragma omp teams
11213 #pragma omp distribute
11214   for (int i = 0; i < 10; ++i) {
11215 #pragma omp single
11216     {
11217       bar();
11218     }
11219   }
11220 #pragma omp target
11221 #pragma omp teams
11222 #pragma omp distribute
11223   for (int i = 0; i < 10; ++i) {
11224 #pragma omp master
11225     {
11226       bar();
11227     }
11228   }
11229 #pragma omp target
11230 #pragma omp teams
11231 #pragma omp distribute
11232   for (int i = 0; i < 10; ++i) {
11233 #pragma omp critical
11234     {
11235       bar();
11236     }
11237   }
11238 #pragma omp target
11239 #pragma omp teams
11240 #pragma omp distribute
11241   for (int i = 0; i < 10; ++i) {
11242 #pragma omp parallel
11243     {
11244 #pragma omp single
11245       {
11246 	bar();
11247       }
11248     }
11249   }
11250 #pragma omp target
11251 #pragma omp teams
11252 #pragma omp distribute
11253   for (int i = 0; i < 10; ++i) {
11254 #pragma omp parallel for
11255     for (int i = 0; i < 10; ++i)
11256       ;
11257   }
11258 #pragma omp target
11259 #pragma omp teams
11260 #pragma omp distribute
11261   for (int i = 0; i < 10; ++i) {
11262 #pragma omp parallel for simd
11263     for (int i = 0; i < 10; ++i)
11264       ;
11265   }
11266 #pragma omp target
11267 #pragma omp teams
11268 #pragma omp distribute
11269   for (int i = 0; i < 10; ++i) {
11270 #pragma omp parallel sections
11271     {
11272       bar();
11273     }
11274   }
11275 #pragma omp target
11276 #pragma omp teams
11277 #pragma omp distribute
11278   for (int i = 0; i < 10; ++i) {
11279 #pragma omp task
11280     {
11281       bar();
11282     }
11283   }
11284 #pragma omp target
11285 #pragma omp teams
11286 #pragma omp distribute
11287   for (int i = 0; i < 10; ++i) {
11288 #pragma omp taskyield
11289     bar();
11290   }
11291 #pragma omp target
11292 #pragma omp teams
11293 #pragma omp distribute
11294   for (int i = 0; i < 10; ++i) {
11295 #pragma omp barrier
11296     bar();
11297   }
11298 #pragma omp target
11299 #pragma omp teams
11300 #pragma omp distribute
11301   for (int i = 0; i < 10; ++i) {
11302 #pragma omp taskwait
11303     bar();
11304   }
11305 #pragma omp target
11306 #pragma omp teams
11307 #pragma omp distribute
11308   for (int i = 0; i < 10; ++i) {
11309 #pragma omp flush
11310     bar();
11311   }
11312 #pragma omp target
11313 #pragma omp teams
11314 #pragma omp distribute
11315   for (int i = 0; i < 10; ++i) {
11316 #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?}}
11317     bar();
11318   }
11319 #pragma omp target
11320 #pragma omp teams
11321 #pragma omp distribute
11322   for (int i = 0; i < 10; ++i) {
11323 #pragma omp atomic
11324     ++a;
11325   }
11326 #pragma omp target
11327 #pragma omp teams
11328 #pragma omp distribute
11329   for (int i = 0; i < 10; ++i) {
11330 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
11331     ++a;
11332   }
11333 #pragma omp target
11334 #pragma omp teams
11335 #pragma omp distribute
11336   for (int i = 0; i < 10; ++i) {
11337 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
11338     ++a;
11339   }
11340 #pragma omp target
11341 #pragma omp teams
11342 #pragma omp distribute
11343   for (int i = 0; i < 10; ++i) {
11344 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
11345     for (int i = 0; i < 10; ++i)
11346       ;
11347   }
11348 #pragma omp target
11349 #pragma omp teams
11350 #pragma omp distribute
11351   for (int i = 0; i < 10; ++i) {
11352 #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?}}
11353     ++a;
11354   }
11355 #pragma omp target
11356 #pragma omp teams
11357 #pragma omp distribute
11358   for (int i = 0; i < 10; ++i) {
11359 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
11360     ++a;
11361   }
11362 #pragma omp target
11363 #pragma omp teams
11364 #pragma omp distribute
11365   for (int i = 0; i < 10; ++i) {
11366 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
11367     ++a;
11368   }
11369 #pragma omp target
11370 #pragma omp teams
11371 #pragma omp distribute
11372   for (int i = 0; i < 10; ++i) {
11373 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
11374     ++a;
11375   }
11376 #pragma omp target
11377 #pragma omp teams
11378 #pragma omp distribute
11379   for (int i = 0; i < 10; ++i) {
11380 #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?}}
11381   for (int i = 0; i < 10; ++i)
11382     ++a;
11383   }
11384 #pragma omp target
11385 #pragma omp teams
11386 #pragma omp distribute
11387   for (int i = 0; i < 10; ++i) {
11388 #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?}}
11389   for (int i = 0; i < 10; ++i)
11390     ++a;
11391   }
11392 #pragma omp target
11393 #pragma omp teams
11394 #pragma omp distribute
11395   for (int i = 0; i < 10; ++i) {
11396 #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?}}
11397   for (int i = 0; i < 10; ++i)
11398     ++a;
11399   }
11400 #pragma omp target
11401 #pragma omp teams
11402 #pragma omp distribute
11403   for (int i = 0; i < 10; ++i) {
11404 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
11405   for (int i = 0; i < 10; ++i)
11406     ++a;
11407   }
11408 #pragma omp target
11409 #pragma omp teams
11410 #pragma omp distribute
11411   for (int i = 0; i < 10; ++i) {
11412 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
11413   for (int i = 0; i < 10; ++i)
11414     ++a;
11415   }
11416 #pragma omp target
11417 #pragma omp teams
11418 #pragma omp distribute
11419   for (int i = 0; i < 10; ++i) {
11420 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
11421   for (int i = 0; i < 10; ++i)
11422     ++a;
11423   }
11424 
11425 // DISTRIBUTE PARALLEL FOR DIRECTIVE
11426 #pragma omp target
11427 #pragma omp teams
11428 #pragma omp distribute parallel for
11429   for (int i = 0; i < 10; ++i) {
11430 #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?}}
11431     for (int i = 0; i < 10; ++i)
11432       ;
11433   }
11434 
11435 #pragma omp target
11436 #pragma omp teams
11437 #pragma omp distribute parallel for
11438   for (int i = 0; i < 10; ++i) {
11439 #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?}}
11440     for (int i = 0; i < 10; ++i)
11441       ;
11442   }
11443 #pragma omp target
11444 #pragma omp teams
11445 #pragma omp distribute parallel for
11446   for (int i = 0; i < 10; ++i) {
11447 #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?}}
11448     for (int i = 0; i < 10; ++i)
11449       ;
11450   }
11451 #pragma omp target
11452 #pragma omp teams
11453 #pragma omp distribute parallel for
11454   for (int i = 0; i < 10; ++i) {
11455 #pragma omp simd
11456     for (int i = 0; i < 10; ++i)
11457       ;
11458   }
11459 #pragma omp target
11460 #pragma omp teams
11461 #pragma omp distribute parallel for
11462   for (int i = 0; i < 10; ++i) {
11463 #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?}}
11464     for (int i = 0; i < 10; ++i)
11465       ;
11466   }
11467 #pragma omp target
11468 #pragma omp teams
11469 #pragma omp distribute parallel for
11470   for (int i = 0; i < 10; ++i) {
11471 #pragma omp parallel
11472     for (int i = 0; i < 10; ++i)
11473       ;
11474   }
11475 #pragma omp target
11476 #pragma omp teams
11477 #pragma omp distribute parallel for
11478   for (int i = 0; i < 10; ++i) {
11479 #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?}}
11480     {
11481       bar();
11482     }
11483   }
11484 #pragma omp target
11485 #pragma omp teams
11486 #pragma omp distribute parallel for
11487   for (int i = 0; i < 10; ++i) {
11488 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
11489     {
11490       bar();
11491     }
11492   }
11493 #pragma omp target
11494 #pragma omp teams
11495 #pragma omp distribute parallel for
11496   for (int i = 0; i < 10; ++i) {
11497 #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?}}
11498     {
11499       bar();
11500     }
11501   }
11502 #pragma omp target
11503 #pragma omp teams
11504 #pragma omp distribute parallel for
11505   for (int i = 0; i < 10; ++i) {
11506 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
11507     {
11508       bar();
11509     }
11510   }
11511 #pragma omp target
11512 #pragma omp teams
11513 #pragma omp distribute parallel for
11514   for (int i = 0; i < 10; ++i) {
11515 #pragma omp critical
11516     {
11517       bar();
11518     }
11519   }
11520 #pragma omp target
11521 #pragma omp teams
11522 #pragma omp distribute parallel for
11523   for (int i = 0; i < 10; ++i) {
11524 #pragma omp parallel
11525     {
11526 #pragma omp single
11527       {
11528 	bar();
11529       }
11530     }
11531   }
11532 #pragma omp target
11533 #pragma omp teams
11534 #pragma omp distribute parallel for
11535   for (int i = 0; i < 10; ++i) {
11536 #pragma omp parallel for
11537     for (int i = 0; i < 10; ++i)
11538       ;
11539   }
11540 #pragma omp target
11541 #pragma omp teams
11542 #pragma omp distribute parallel for
11543   for (int i = 0; i < 10; ++i) {
11544 #pragma omp parallel for simd
11545     for (int i = 0; i < 10; ++i)
11546       ;
11547   }
11548 #pragma omp target
11549 #pragma omp teams
11550 #pragma omp distribute parallel for
11551   for (int i = 0; i < 10; ++i) {
11552 #pragma omp parallel sections
11553     {
11554       bar();
11555     }
11556   }
11557 #pragma omp target
11558 #pragma omp teams
11559 #pragma omp distribute parallel for
11560   for (int i = 0; i < 10; ++i) {
11561 #pragma omp task
11562     {
11563       bar();
11564     }
11565   }
11566 #pragma omp target
11567 #pragma omp teams
11568 #pragma omp distribute parallel for
11569   for (int i = 0; i < 10; ++i) {
11570 #pragma omp taskyield
11571     bar();
11572   }
11573 #pragma omp target
11574 #pragma omp teams
11575 #pragma omp distribute parallel for
11576   for (int i = 0; i < 10; ++i) {
11577 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
11578     bar();
11579   }
11580 #pragma omp target
11581 #pragma omp teams
11582 #pragma omp distribute parallel for
11583   for (int i = 0; i < 10; ++i) {
11584 #pragma omp taskwait
11585     bar();
11586   }
11587 #pragma omp target
11588 #pragma omp teams
11589 #pragma omp distribute parallel for
11590   for (int i = 0; i < 10; ++i) {
11591 #pragma omp flush
11592     bar();
11593   }
11594 #pragma omp target
11595 #pragma omp teams
11596 #pragma omp distribute parallel for
11597   for (int i = 0; i < 10; ++i) {
11598 #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?}}
11599     bar();
11600   }
11601 #pragma omp target
11602 #pragma omp teams
11603 #pragma omp distribute parallel for
11604   for (int i = 0; i < 10; ++i) {
11605 #pragma omp atomic
11606     ++a;
11607   }
11608 #pragma omp target
11609 #pragma omp teams
11610 #pragma omp distribute parallel for
11611   for (int i = 0; i < 10; ++i) {
11612 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
11613     ++a;
11614   }
11615 #pragma omp target
11616 #pragma omp teams
11617 #pragma omp distribute parallel for
11618   for (int i = 0; i < 10; ++i) {
11619 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
11620     ++a;
11621   }
11622 #pragma omp target
11623 #pragma omp teams
11624 #pragma omp distribute parallel for
11625   for (int i = 0; i < 10; ++i) {
11626 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
11627     for (int i = 0; i < 10; ++i)
11628       ;
11629   }
11630 #pragma omp target
11631 #pragma omp teams
11632 #pragma omp distribute parallel for
11633   for (int i = 0; i < 10; ++i) {
11634 #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?}}
11635     ++a;
11636   }
11637 #pragma omp target
11638 #pragma omp teams
11639 #pragma omp distribute parallel for
11640   for (int i = 0; i < 10; ++i) {
11641 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
11642     ++a;
11643   }
11644 #pragma omp target
11645 #pragma omp teams
11646 #pragma omp distribute parallel for
11647   for (int i = 0; i < 10; ++i) {
11648 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
11649     ++a;
11650   }
11651 #pragma omp target
11652 #pragma omp teams
11653 #pragma omp distribute parallel for
11654   for (int i = 0; i < 10; ++i) {
11655 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
11656     ++a;
11657   }
11658 #pragma omp target
11659 #pragma omp teams
11660 #pragma omp distribute parallel for
11661   for (int i = 0; i < 10; ++i) {
11662 #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?}}
11663   for (int i = 0; i < 10; ++i)
11664     ++a;
11665   }
11666 #pragma omp target
11667 #pragma omp teams
11668 #pragma omp distribute parallel for
11669   for (int i = 0; i < 10; ++i) {
11670 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
11671   for (int i = 0; i < 10; ++i)
11672     ++a;
11673   }
11674 #pragma omp target
11675 #pragma omp teams
11676 #pragma omp distribute parallel for
11677   for (int i = 0; i < 10; ++i) {
11678 #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?}}
11679   for (int i = 0; i < 10; ++i)
11680     ++a;
11681   }
11682 #pragma omp target
11683 #pragma omp teams
11684 #pragma omp distribute parallel for
11685   for (int i = 0; i < 10; ++i) {
11686 #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?}}
11687   for (int i = 0; i < 10; ++i)
11688     ++a;
11689   }
11690 #pragma omp target
11691 #pragma omp teams
11692 #pragma omp distribute parallel for
11693   for (int i = 0; i < 10; ++i) {
11694 #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?}}
11695   for (int i = 0; i < 10; ++i)
11696     ++a;
11697   }
11698 #pragma omp target
11699 #pragma omp teams
11700 #pragma omp distribute parallel for
11701   for (int i = 0; i < 10; ++i) {
11702 #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?}}
11703   for (int i = 0; i < 10; ++i)
11704     ++a;
11705   }
11706 
11707 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
11708 #pragma omp target
11709 #pragma omp teams
11710 #pragma omp distribute parallel for simd
11711   for (int i = 0; i < 10; ++i) {
11712 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11713     for (int i = 0; i < 10; ++i)
11714       ;
11715   }
11716 #pragma omp target
11717 #pragma omp teams
11718 #pragma omp distribute parallel for simd
11719   for (int i = 0; i < 10; ++i) {
11720 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11721     for (int i = 0; i < 10; ++i)
11722       ;
11723   }
11724 #pragma omp target
11725 #pragma omp teams
11726 #pragma omp distribute parallel for simd
11727   for (int i = 0; i < 10; ++i) {
11728 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11729     for (int i = 0; i < 10; ++i)
11730       ;
11731   }
11732 #pragma omp target
11733 #pragma omp teams
11734 #pragma omp distribute parallel for simd
11735   for (int i = 0; i < 10; ++i) {
11736 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
11737     for (int i = 0; i < 10; ++i)
11738       ;
11739   }
11740 #pragma omp target
11741 #pragma omp teams
11742 #pragma omp distribute parallel for simd
11743   for (int i = 0; i < 10; ++i) {
11744 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11745     for (int i = 0; i < 10; ++i)
11746       ;
11747   }
11748 #pragma omp target
11749 #pragma omp teams
11750 #pragma omp distribute parallel for simd
11751   for (int i = 0; i < 10; ++i) {
11752 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11753     for (int i = 0; i < 10; ++i)
11754       ;
11755   }
11756 #pragma omp target
11757 #pragma omp teams
11758 #pragma omp distribute parallel for simd
11759   for (int i = 0; i < 10; ++i) {
11760 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11761     {
11762       bar();
11763     }
11764   }
11765 #pragma omp target
11766 #pragma omp teams
11767 #pragma omp distribute parallel for simd
11768   for (int i = 0; i < 10; ++i) {
11769 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11770     {
11771       bar();
11772     }
11773   }
11774 #pragma omp target
11775 #pragma omp teams
11776 #pragma omp distribute parallel for simd
11777   for (int i = 0; i < 10; ++i) {
11778 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11779     {
11780       bar();
11781     }
11782   }
11783 #pragma omp target
11784 #pragma omp teams
11785 #pragma omp distribute parallel for simd
11786   for (int i = 0; i < 10; ++i) {
11787 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11788     {
11789       bar();
11790     }
11791   }
11792 #pragma omp target
11793 #pragma omp teams
11794 #pragma omp distribute parallel for simd
11795   for (int i = 0; i < 10; ++i) {
11796 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11797     {
11798       bar();
11799     }
11800   }
11801 #pragma omp target
11802 #pragma omp teams
11803 #pragma omp distribute parallel for simd
11804   for (int i = 0; i < 10; ++i) {
11805 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11806     {
11807 #pragma omp single
11808       {
11809 	bar();
11810       }
11811     }
11812   }
11813 #pragma omp target
11814 #pragma omp teams
11815 #pragma omp distribute parallel for simd
11816   for (int i = 0; i < 10; ++i) {
11817 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11818     for (int i = 0; i < 10; ++i)
11819       ;
11820   }
11821 #pragma omp target
11822 #pragma omp teams
11823 #pragma omp distribute parallel for simd
11824   for (int i = 0; i < 10; ++i) {
11825 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11826     for (int i = 0; i < 10; ++i)
11827       ;
11828   }
11829 #pragma omp target
11830 #pragma omp teams
11831 #pragma omp distribute parallel for simd
11832   for (int i = 0; i < 10; ++i) {
11833 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11834     {
11835       bar();
11836     }
11837   }
11838 #pragma omp target
11839 #pragma omp teams
11840 #pragma omp distribute parallel for simd
11841   for (int i = 0; i < 10; ++i) {
11842 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11843     {
11844       bar();
11845     }
11846   }
11847 #pragma omp target
11848 #pragma omp teams
11849 #pragma omp distribute parallel for simd
11850   for (int i = 0; i < 10; ++i) {
11851 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11852     bar();
11853   }
11854 #pragma omp target
11855 #pragma omp teams
11856 #pragma omp distribute parallel for simd
11857   for (int i = 0; i < 10; ++i) {
11858 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11859     bar();
11860   }
11861 #pragma omp target
11862 #pragma omp teams
11863 #pragma omp distribute parallel for simd
11864   for (int i = 0; i < 10; ++i) {
11865 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11866     bar();
11867   }
11868 #pragma omp target
11869 #pragma omp teams
11870 #pragma omp distribute parallel for simd
11871   for (int i = 0; i < 10; ++i) {
11872 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11873     bar();
11874   }
11875 #pragma omp target
11876 #pragma omp teams
11877 #pragma omp distribute parallel for simd
11878   for (int i = 0; i < 10; ++i) {
11879 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11880     bar();
11881   }
11882 #pragma omp target
11883 #pragma omp teams
11884 #pragma omp distribute parallel for simd
11885   for (int i = 0; i < 10; ++i) {
11886 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11887     ++a;
11888   }
11889 #pragma omp target
11890 #pragma omp teams
11891 #pragma omp distribute parallel for simd
11892   for (int i = 0; i < 10; ++i) {
11893 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11894     ++a;
11895   }
11896 #pragma omp target
11897 #pragma omp teams
11898 #pragma omp distribute parallel for simd
11899   for (int i = 0; i < 10; ++i) {
11900 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11901     ++a;
11902   }
11903 #pragma omp target
11904 #pragma omp teams
11905 #pragma omp distribute parallel for simd
11906   for (int i = 0; i < 10; ++i) {
11907 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11908     ++a;
11909   }
11910 #pragma omp target
11911 #pragma omp teams
11912 #pragma omp distribute parallel for simd
11913   for (int i = 0; i < 10; ++i) {
11914 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11915     ++a;
11916   }
11917 #pragma omp target
11918 #pragma omp teams
11919 #pragma omp distribute parallel for simd
11920   for (int i = 0; i < 10; ++i) {
11921 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11922     ++a;
11923   }
11924 #pragma omp target
11925 #pragma omp teams
11926 #pragma omp distribute parallel for simd
11927   for (int i = 0; i < 10; ++i) {
11928 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11929     ++a;
11930   }
11931 #pragma omp target
11932 #pragma omp teams
11933 #pragma omp distribute parallel for simd
11934   for (int i = 0; i < 10; ++i) {
11935 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11936     for (int i = 0; i < 10; ++i)
11937       ;
11938   }
11939 #pragma omp target
11940 #pragma omp teams
11941 #pragma omp distribute parallel for simd
11942   for (int i = 0; i < 10; ++i) {
11943 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11944     for (int i = 0; i < 10; ++i)
11945       ;
11946   }
11947 #pragma omp target
11948 #pragma omp teams
11949 #pragma omp distribute parallel for simd
11950   for (int i = 0; i < 10; ++i) {
11951 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11952     for (int i = 0; i < 10; ++i)
11953       ;
11954   }
11955 #pragma omp target
11956 #pragma omp teams
11957 #pragma omp distribute parallel for simd
11958   for (int i = 0; i < 10; ++i) {
11959 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11960     for (int i = 0; i < 10; ++i)
11961       ;
11962   }
11963 #pragma omp target
11964 #pragma omp teams
11965 #pragma omp distribute parallel for simd
11966   for (int i = 0; i < 10; ++i) {
11967 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11968     for (int i = 0; i < 10; ++i)
11969       ;
11970   }
11971 #pragma omp target
11972 #pragma omp teams
11973 #pragma omp distribute parallel for simd
11974   for (int i = 0; i < 10; ++i) {
11975 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11976     for (int i = 0; i < 10; ++i)
11977       ;
11978   }
11979 
11980 // DISTRIBUTE SIMD DIRECTIVE
11981 #pragma omp target
11982 #pragma omp teams
11983 #pragma omp distribute simd
11984   for (int i = 0; i < 10; ++i) {
11985 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11986     for (int i = 0; i < 10; ++i)
11987       ;
11988   }
11989 #pragma omp target
11990 #pragma omp teams
11991 #pragma omp distribute simd
11992   for (int i = 0; i < 10; ++i) {
11993 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11994     for (int i = 0; i < 10; ++i)
11995       ;
11996   }
11997 #pragma omp target
11998 #pragma omp teams
11999 #pragma omp distribute simd
12000   for (int i = 0; i < 10; ++i) {
12001 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12002     for (int i = 0; i < 10; ++i)
12003       ;
12004   }
12005 #pragma omp target
12006 #pragma omp teams
12007 #pragma omp distribute simd
12008   for (int i = 0; i < 10; ++i) {
12009 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12010     for (int i = 0; i < 10; ++i)
12011       ;
12012   }
12013 #pragma omp target
12014 #pragma omp teams
12015 #pragma omp distribute simd
12016   for (int i = 0; i < 10; ++i) {
12017 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12018     for (int i = 0; i < 10; ++i)
12019       ;
12020   }
12021 #pragma omp target
12022 #pragma omp teams
12023 #pragma omp distribute simd
12024   for (int i = 0; i < 10; ++i) {
12025 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12026     for (int i = 0; i < 10; ++i)
12027       ;
12028   }
12029 #pragma omp target
12030 #pragma omp teams
12031 #pragma omp distribute simd
12032   for (int i = 0; i < 10; ++i) {
12033 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12034     {
12035       bar();
12036     }
12037   }
12038 #pragma omp target
12039 #pragma omp teams
12040 #pragma omp distribute simd
12041   for (int i = 0; i < 10; ++i) {
12042 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12043     {
12044       bar();
12045     }
12046   }
12047 #pragma omp target
12048 #pragma omp teams
12049 #pragma omp distribute simd
12050   for (int i = 0; i < 10; ++i) {
12051 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12052     {
12053       bar();
12054     }
12055   }
12056 #pragma omp target
12057 #pragma omp teams
12058 #pragma omp distribute simd
12059   for (int i = 0; i < 10; ++i) {
12060 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12061     {
12062       bar();
12063     }
12064   }
12065 #pragma omp target
12066 #pragma omp teams
12067 #pragma omp distribute simd
12068   for (int i = 0; i < 10; ++i) {
12069 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12070     {
12071       bar();
12072     }
12073   }
12074 #pragma omp target
12075 #pragma omp teams
12076 #pragma omp distribute simd
12077   for (int i = 0; i < 10; ++i) {
12078 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12079     {
12080 #pragma omp single
12081       {
12082 	bar();
12083       }
12084     }
12085   }
12086 #pragma omp target
12087 #pragma omp teams
12088 #pragma omp distribute simd
12089   for (int i = 0; i < 10; ++i) {
12090 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12091     for (int i = 0; i < 10; ++i)
12092       ;
12093   }
12094 #pragma omp target
12095 #pragma omp teams
12096 #pragma omp distribute simd
12097   for (int i = 0; i < 10; ++i) {
12098 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12099     for (int i = 0; i < 10; ++i)
12100       ;
12101   }
12102 #pragma omp target
12103 #pragma omp teams
12104 #pragma omp distribute simd
12105   for (int i = 0; i < 10; ++i) {
12106 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12107     {
12108       bar();
12109     }
12110   }
12111 #pragma omp target
12112 #pragma omp teams
12113 #pragma omp distribute simd
12114   for (int i = 0; i < 10; ++i) {
12115 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12116     {
12117       bar();
12118     }
12119   }
12120 #pragma omp target
12121 #pragma omp teams
12122 #pragma omp distribute simd
12123   for (int i = 0; i < 10; ++i) {
12124 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12125     bar();
12126   }
12127 #pragma omp target
12128 #pragma omp teams
12129 #pragma omp distribute simd
12130   for (int i = 0; i < 10; ++i) {
12131 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12132     bar();
12133   }
12134 #pragma omp target
12135 #pragma omp teams
12136 #pragma omp distribute simd
12137   for (int i = 0; i < 10; ++i) {
12138 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12139     bar();
12140   }
12141 #pragma omp target
12142 #pragma omp teams
12143 #pragma omp distribute simd
12144   for (int i = 0; i < 10; ++i) {
12145 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12146     bar();
12147   }
12148 #pragma omp target
12149 #pragma omp teams
12150 #pragma omp distribute simd
12151   for (int i = 0; i < 10; ++i) {
12152 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12153     bar();
12154   }
12155 #pragma omp target
12156 #pragma omp teams
12157 #pragma omp distribute simd
12158   for (int i = 0; i < 10; ++i) {
12159 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12160     ++a;
12161   }
12162 #pragma omp target
12163 #pragma omp teams
12164 #pragma omp distribute simd
12165   for (int i = 0; i < 10; ++i) {
12166 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12167     ++a;
12168   }
12169 #pragma omp target
12170 #pragma omp teams
12171 #pragma omp distribute simd
12172   for (int i = 0; i < 10; ++i) {
12173 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12174     ++a;
12175   }
12176 #pragma omp target
12177 #pragma omp teams
12178 #pragma omp distribute simd
12179   for (int i = 0; i < 10; ++i) {
12180 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12181     ++a;
12182   }
12183 #pragma omp target
12184 #pragma omp teams
12185 #pragma omp distribute simd
12186   for (int i = 0; i < 10; ++i) {
12187 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12188     ++a;
12189   }
12190 #pragma omp target
12191 #pragma omp teams
12192 #pragma omp distribute simd
12193   for (int i = 0; i < 10; ++i) {
12194 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12195     ++a;
12196   }
12197 #pragma omp target
12198 #pragma omp teams
12199 #pragma omp distribute simd
12200   for (int i = 0; i < 10; ++i) {
12201 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12202     ++a;
12203   }
12204 #pragma omp target
12205 #pragma omp teams
12206 #pragma omp distribute simd
12207   for (int i = 0; i < 10; ++i) {
12208 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12209     for (int i = 0; i < 10; ++i)
12210       ;
12211   }
12212 #pragma omp target
12213 #pragma omp teams
12214 #pragma omp distribute simd
12215   for (int i = 0; i < 10; ++i) {
12216 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12217     for (int i = 0; i < 10; ++i)
12218       ;
12219   }
12220 #pragma omp target
12221 #pragma omp teams
12222 #pragma omp distribute simd
12223   for (int i = 0; i < 10; ++i) {
12224 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12225     for (int i = 0; i < 10; ++i)
12226       ;
12227   }
12228 #pragma omp target
12229 #pragma omp teams
12230 #pragma omp distribute simd
12231   for (int i = 0; i < 10; ++i) {
12232 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12233     for (int i = 0; i < 10; ++i)
12234       ;
12235   }
12236 #pragma omp target
12237 #pragma omp teams
12238 #pragma omp distribute simd
12239   for (int i = 0; i < 10; ++i) {
12240 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12241     for (int i = 0; i < 10; ++i)
12242       ;
12243   }
12244 #pragma omp target
12245 #pragma omp teams
12246 #pragma omp distribute simd
12247   for (int i = 0; i < 10; ++i) {
12248 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12249     for (int i = 0; i < 10; ++i)
12250       ;
12251   }
12252 
12253 // TARGET SIMD DIRECTIVE
12254 #pragma omp target simd
12255   for (int i = 0; i < 10; ++i) {
12256 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12257     for (int i = 0; i < 10; ++i)
12258       ;
12259   }
12260 #pragma omp target simd
12261   for (int i = 0; i < 10; ++i) {
12262 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12263     for (int i = 0; i < 10; ++i)
12264       ;
12265   }
12266 #pragma omp target simd
12267   for (int i = 0; i < 10; ++i) {
12268 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12269     for (int i = 0; i < 10; ++i)
12270       ;
12271   }
12272 #pragma omp target simd
12273   for (int i = 0; i < 10; ++i) {
12274 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12275     for (int i = 0; i < 10; ++i)
12276       ;
12277   }
12278 #pragma omp target simd
12279   for (int i = 0; i < 10; ++i) {
12280 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12281     for (int i = 0; i < 10; ++i)
12282       ;
12283   }
12284 #pragma omp target simd
12285   for (int i = 0; i < 10; ++i) {
12286 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12287     for (int i = 0; i < 10; ++i)
12288       ;
12289   }
12290 #pragma omp target simd
12291   for (int i = 0; i < 10; ++i) {
12292 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12293     {
12294       bar();
12295     }
12296   }
12297 #pragma omp target simd
12298   for (int i = 0; i < 10; ++i) {
12299 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12300     {
12301       bar();
12302     }
12303   }
12304 #pragma omp target simd
12305   for (int i = 0; i < 10; ++i) {
12306 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12307     {
12308       bar();
12309     }
12310   }
12311 #pragma omp target simd
12312   for (int i = 0; i < 10; ++i) {
12313 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12314     {
12315       bar();
12316     }
12317   }
12318 #pragma omp target simd
12319   for (int i = 0; i < 10; ++i) {
12320 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12321     {
12322       bar();
12323     }
12324   }
12325 #pragma omp target simd
12326   for (int i = 0; i < 10; ++i) {
12327 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12328     {
12329 #pragma omp single
12330       {
12331 	bar();
12332       }
12333     }
12334   }
12335 #pragma omp target simd
12336   for (int i = 0; i < 10; ++i) {
12337 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12338     for (int i = 0; i < 10; ++i)
12339       ;
12340   }
12341 #pragma omp target simd
12342   for (int i = 0; i < 10; ++i) {
12343 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12344     for (int i = 0; i < 10; ++i)
12345       ;
12346   }
12347 #pragma omp target simd
12348   for (int i = 0; i < 10; ++i) {
12349 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12350     {
12351       bar();
12352     }
12353   }
12354 #pragma omp target simd
12355   for (int i = 0; i < 10; ++i) {
12356 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12357     {
12358       bar();
12359     }
12360   }
12361 #pragma omp target simd
12362   for (int i = 0; i < 10; ++i) {
12363 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12364     bar();
12365   }
12366 #pragma omp target simd
12367   for (int i = 0; i < 10; ++i) {
12368 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12369     bar();
12370   }
12371 #pragma omp target simd
12372   for (int i = 0; i < 10; ++i) {
12373 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12374     bar();
12375   }
12376 #pragma omp target simd
12377   for (int i = 0; i < 10; ++i) {
12378 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12379     bar();
12380   }
12381 #pragma omp target simd
12382   for (int i = 0; i < 10; ++i) {
12383 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12384     bar();
12385   }
12386 #pragma omp target simd
12387   for (int i = 0; i < 10; ++i) {
12388 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12389     ++a;
12390   }
12391 #pragma omp target simd
12392   for (int i = 0; i < 10; ++i) {
12393 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12394     ++a;
12395   }
12396 #pragma omp target simd
12397   for (int i = 0; i < 10; ++i) {
12398 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12399     ++a;
12400   }
12401 #pragma omp target simd
12402   for (int i = 0; i < 10; ++i) {
12403 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12404     ++a;
12405   }
12406 #pragma omp target simd
12407   for (int i = 0; i < 10; ++i) {
12408 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12409     ++a;
12410   }
12411 #pragma omp target simd
12412   for (int i = 0; i < 10; ++i) {
12413 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12414     ++a;
12415   }
12416 #pragma omp target simd
12417   for (int i = 0; i < 10; ++i) {
12418 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12419     ++a;
12420   }
12421 #pragma omp target simd
12422   for (int i = 0; i < 10; ++i) {
12423 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12424     for (int i = 0; i < 10; ++i)
12425       ;
12426   }
12427 #pragma omp target simd
12428   for (int i = 0; i < 10; ++i) {
12429 #pragma omp target 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 simd
12434   for (int i = 0; i < 10; ++i) {
12435 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12436     for (int i = 0; i < 10; ++i)
12437       ;
12438   }
12439 #pragma omp target simd
12440   for (int i = 0; i < 10; ++i) {
12441 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12442     for (int i = 0; i < 10; ++i)
12443       ;
12444   }
12445 #pragma omp target simd
12446   for (int i = 0; i < 10; ++i) {
12447 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12448     for (int i = 0; i < 10; ++i)
12449       ;
12450   }
12451 #pragma omp target simd
12452   for (int i = 0; i < 10; ++i) {
12453 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12454     for (int i = 0; i < 10; ++i)
12455       ;
12456   }
12457 
12458 // TEAMS DISTRIBUTE DIRECTIVE
12459 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
12460   for (int i = 0; i < 10; ++i)
12461     ;
12462 #pragma omp target
12463 #pragma omp teams distribute
12464   for (int i = 0; i < 10; ++i) {
12465 #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?}}
12466     for (int i = 0; i < 10; ++i)
12467       ;
12468   }
12469 #pragma omp target
12470 #pragma omp teams distribute
12471   for (int i = 0; i < 10; ++i) {
12472 #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?}}
12473     for (int i = 0; i < 10; ++i)
12474       ;
12475   }
12476 #pragma omp target
12477 #pragma omp teams distribute
12478   for (int i = 0; i < 10; ++i) {
12479 #pragma omp for // OK
12480     for (int i = 0; i < 10; ++i)
12481       ;
12482   }
12483 #pragma omp target
12484 #pragma omp teams distribute
12485   for (int i = 0; i < 10; ++i) {
12486 #pragma omp simd // OK
12487     for (int i = 0; i < 10; ++i)
12488       ;
12489   }
12490 #pragma omp target
12491 #pragma omp teams distribute
12492   for (int i = 0; i < 10; ++i) {
12493 #pragma omp for simd // OK
12494     for (int i = 0; i < 10; ++i)
12495       ;
12496   }
12497 #pragma omp target
12498 #pragma omp teams distribute
12499   for (int i = 0; i < 10; ++i) {
12500 #pragma omp parallel // OK
12501     for (int i = 0; i < 10; ++i)
12502       ;
12503   }
12504 #pragma omp target
12505 #pragma omp teams distribute
12506   for (int i = 0; i < 10; ++i) {
12507 #pragma omp sections // OK
12508     {
12509       bar();
12510     }
12511   }
12512 #pragma omp target
12513 #pragma omp teams distribute
12514   for (int i = 0; i < 10; ++i) {
12515 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
12516     {
12517       bar();
12518     }
12519   }
12520 #pragma omp target
12521 #pragma omp teams distribute
12522   for (int i = 0; i < 10; ++i) {
12523 #pragma omp single // OK
12524     {
12525       bar();
12526     }
12527   }
12528 #pragma omp target
12529 #pragma omp teams distribute
12530   for (int i = 0; i < 10; ++i) {
12531 #pragma omp master // OK
12532     {
12533       bar();
12534     }
12535   }
12536 #pragma omp target
12537 #pragma omp teams distribute
12538   for (int i = 0; i < 10; ++i) {
12539 #pragma omp critical // OK
12540     {
12541       bar();
12542     }
12543   }
12544 #pragma omp target
12545 #pragma omp teams distribute
12546   for (int i = 0; i < 10; ++i) {
12547 #pragma omp parallel // OK
12548     {
12549 #pragma omp single
12550       {
12551 	bar();
12552       }
12553     }
12554   }
12555 #pragma omp target
12556 #pragma omp teams distribute
12557   for (int i = 0; i < 10; ++i) {
12558 #pragma omp parallel for // OK
12559     for (int i = 0; i < 10; ++i)
12560       ;
12561   }
12562 #pragma omp target
12563 #pragma omp teams distribute
12564   for (int i = 0; i < 10; ++i) {
12565 #pragma omp parallel for simd // OK
12566     for (int i = 0; i < 10; ++i)
12567       ;
12568   }
12569 #pragma omp target
12570 #pragma omp teams distribute
12571   for (int i = 0; i < 10; ++i) {
12572 #pragma omp parallel sections // OK
12573     {
12574       bar();
12575     }
12576   }
12577 #pragma omp target
12578 #pragma omp teams distribute
12579   for (int i = 0; i < 10; ++i) {
12580 #pragma omp task // OK
12581     {
12582       bar();
12583     }
12584   }
12585 #pragma omp target
12586 #pragma omp teams distribute
12587   for (int i = 0; i < 10; ++i) {
12588 #pragma omp taskyield // OK
12589     bar();
12590   }
12591 #pragma omp target
12592 #pragma omp teams distribute
12593   for (int i = 0; i < 10; ++i) {
12594 #pragma omp barrier // OK
12595     bar();
12596   }
12597 #pragma omp target
12598 #pragma omp teams distribute
12599   for (int i = 0; i < 10; ++i) {
12600 #pragma omp taskwait // OK
12601     bar();
12602   }
12603 #pragma omp target
12604 #pragma omp teams distribute
12605   for (int i = 0; i < 10; ++i) {
12606 #pragma omp flush // OK
12607     bar();
12608   }
12609 #pragma omp target
12610 #pragma omp teams distribute
12611   for (int i = 0; i < 10; ++i) {
12612 #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?}}
12613     bar();
12614   }
12615 #pragma omp target
12616 #pragma omp teams distribute
12617   for (int i = 0; i < 10; ++i) {
12618 #pragma omp atomic // OK
12619     ++a;
12620   }
12621 #pragma omp target
12622 #pragma omp teams distribute
12623   for (int i = 0; i < 10; ++i) {
12624 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
12625     ++a;
12626   }
12627 #pragma omp target
12628 #pragma omp teams distribute
12629   for (int i = 0; i < 10; ++i) {
12630 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
12631     ++a;
12632   }
12633 #pragma omp target
12634 #pragma omp teams distribute
12635   for (int i = 0; i < 10; ++i) {
12636 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
12637     for (int i = 0; i < 10; ++i)
12638       ;
12639   }
12640 #pragma omp target
12641 #pragma omp teams distribute
12642   for (int i = 0; i < 10; ++i) {
12643 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
12644     ++a;
12645   }
12646 #pragma omp target
12647 #pragma omp teams distribute
12648   for (int i = 0; i < 10; ++i) {
12649 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
12650     ++a;
12651   }
12652 #pragma omp target
12653 #pragma omp teams distribute
12654   for (int i = 0; i < 10; ++i) {
12655 #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?}}
12656     ++a;
12657   }
12658 #pragma omp target
12659 #pragma omp teams distribute
12660   for (int i = 0; i < 10; ++i) {
12661 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
12662     ++a;
12663   }
12664 #pragma omp target
12665 #pragma omp teams distribute
12666   for (int i = 0; i < 10; ++i) {
12667 #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?}}
12668     for (int i = 0; i < 10; ++i)
12669       ++a;
12670   }
12671 #pragma omp target
12672 #pragma omp teams distribute
12673   for (int i = 0; i < 10; ++i) {
12674 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
12675     for (int i = 0; i < 10; ++i)
12676       ++a;
12677   }
12678 #pragma omp target
12679 #pragma omp teams distribute
12680   for (int i = 0; i < 10; ++i) {
12681 #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?}}
12682     for (int i = 0; i < 10; ++i)
12683       ++a;
12684   }
12685 #pragma omp target
12686 #pragma omp teams distribute
12687   for (int i = 0; i < 10; ++i) {
12688 #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?}}
12689     for (int i = 0; i < 10; ++i)
12690       ++a;
12691   }
12692 #pragma omp target
12693 #pragma omp teams distribute
12694   for (int i = 0; i < 10; ++i) {
12695 #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?}}
12696     for (int i = 0; i < 10; ++i)
12697       ++a;
12698   }
12699 #pragma omp target
12700 #pragma omp teams distribute
12701   for (int i = 0; i < 10; ++i) {
12702 #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?}}
12703     for (int i = 0; i < 10; ++i)
12704       ++a;
12705   }
12706 
12707 // TEAMS DISTRIBUTE SIMD DIRECTIVE
12708 #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?}}
12709   for (int i = 0; i < 10; ++i)
12710     ;
12711 #pragma omp target
12712 #pragma omp teams distribute simd
12713   for (int i = 0; i < 10; ++i) {
12714 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12715     for (int i = 0; i < 10; ++i)
12716       ;
12717   }
12718 #pragma omp target
12719 #pragma omp teams distribute simd
12720   for (int i = 0; i < 10; ++i) {
12721 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12722     for (int i = 0; i < 10; ++i)
12723       ;
12724   }
12725 #pragma omp target
12726 #pragma omp teams distribute simd
12727   for (int i = 0; i < 10; ++i) {
12728 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12729     for (int i = 0; i < 10; ++i)
12730       ;
12731   }
12732 #pragma omp target
12733 #pragma omp teams distribute simd
12734   for (int i = 0; i < 10; ++i) {
12735 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12736     for (int i = 0; i < 10; ++i)
12737       ;
12738   }
12739 #pragma omp target
12740 #pragma omp teams distribute simd
12741   for (int i = 0; i < 10; ++i) {
12742 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12743     for (int i = 0; i < 10; ++i)
12744       ;
12745   }
12746 #pragma omp target
12747 #pragma omp teams distribute simd
12748   for (int i = 0; i < 10; ++i) {
12749 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12750     for (int i = 0; i < 10; ++i)
12751       ;
12752   }
12753 #pragma omp target
12754 #pragma omp teams distribute simd
12755   for (int i = 0; i < 10; ++i) {
12756 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12757     {
12758       bar();
12759     }
12760   }
12761 #pragma omp target
12762 #pragma omp teams distribute simd
12763   for (int i = 0; i < 10; ++i) {
12764 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12765     {
12766       bar();
12767     }
12768   }
12769 #pragma omp target
12770 #pragma omp teams distribute simd
12771   for (int i = 0; i < 10; ++i) {
12772 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12773     {
12774       bar();
12775     }
12776   }
12777 #pragma omp target
12778 #pragma omp teams distribute simd
12779   for (int i = 0; i < 10; ++i) {
12780 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12781     {
12782       bar();
12783     }
12784   }
12785 #pragma omp target
12786 #pragma omp teams distribute simd
12787   for (int i = 0; i < 10; ++i) {
12788 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12789     {
12790       bar();
12791     }
12792   }
12793 #pragma omp target
12794 #pragma omp teams distribute simd
12795   for (int i = 0; i < 10; ++i) {
12796 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12797     {
12798 #pragma omp single
12799       {
12800 	bar();
12801       }
12802     }
12803   }
12804 #pragma omp target
12805 #pragma omp teams distribute simd
12806   for (int i = 0; i < 10; ++i) {
12807 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12808     for (int i = 0; i < 10; ++i)
12809       ;
12810   }
12811 #pragma omp target
12812 #pragma omp teams distribute simd
12813   for (int i = 0; i < 10; ++i) {
12814 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12815     for (int i = 0; i < 10; ++i)
12816       ;
12817   }
12818 #pragma omp target
12819 #pragma omp teams distribute simd
12820   for (int i = 0; i < 10; ++i) {
12821 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12822     {
12823       bar();
12824     }
12825   }
12826 #pragma omp target
12827 #pragma omp teams distribute simd
12828   for (int i = 0; i < 10; ++i) {
12829 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12830     {
12831       bar();
12832     }
12833   }
12834 #pragma omp target
12835 #pragma omp teams distribute simd
12836   for (int i = 0; i < 10; ++i) {
12837 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12838     bar();
12839   }
12840 #pragma omp target
12841 #pragma omp teams distribute simd
12842   for (int i = 0; i < 10; ++i) {
12843 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12844     bar();
12845   }
12846 #pragma omp target
12847 #pragma omp teams distribute 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
12853 #pragma omp teams distribute simd
12854   for (int i = 0; i < 10; ++i) {
12855 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12856     bar();
12857   }
12858 #pragma omp target
12859 #pragma omp teams distribute simd
12860   for (int i = 0; i < 10; ++i) {
12861 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12862     bar();
12863   }
12864 #pragma omp target
12865 #pragma omp teams distribute simd
12866   for (int i = 0; i < 10; ++i) {
12867 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12868     ++a;
12869   }
12870 #pragma omp target
12871 #pragma omp teams distribute simd
12872   for (int i = 0; i < 10; ++i) {
12873 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12874     ++a;
12875   }
12876 #pragma omp target
12877 #pragma omp teams distribute simd
12878   for (int i = 0; i < 10; ++i) {
12879 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12880     ++a;
12881   }
12882 #pragma omp target
12883 #pragma omp teams distribute simd
12884   for (int i = 0; i < 10; ++i) {
12885 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12886     for (int i = 0; i < 10; ++i)
12887       ;
12888   }
12889 #pragma omp target
12890 #pragma omp teams distribute simd
12891   for (int i = 0; i < 10; ++i) {
12892 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12893     ++a;
12894   }
12895 #pragma omp target
12896 #pragma omp teams distribute simd
12897   for (int i = 0; i < 10; ++i) {
12898 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12899     ++a;
12900   }
12901 #pragma omp target
12902 #pragma omp teams distribute simd
12903   for (int i = 0; i < 10; ++i) {
12904 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12905     ++a;
12906   }
12907 #pragma omp target
12908 #pragma omp teams distribute simd
12909   for (int i = 0; i < 10; ++i) {
12910 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12911     ++a;
12912   }
12913 #pragma omp target
12914 #pragma omp teams distribute simd
12915   for (int i = 0; i < 10; ++i) {
12916 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12917     for (int i = 0; i < 10; ++i)
12918       ++a;
12919   }
12920 #pragma omp target
12921 #pragma omp teams distribute simd
12922   for (int i = 0; i < 10; ++i) {
12923 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12924     for (int i = 0; i < 10; ++i)
12925       ++a;
12926   }
12927 #pragma omp target
12928 #pragma omp teams distribute simd
12929   for (int i = 0; i < 10; ++i) {
12930 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12931     for (int i = 0; i < 10; ++i)
12932       ++a;
12933   }
12934 #pragma omp target
12935 #pragma omp teams distribute simd
12936   for (int i = 0; i < 10; ++i) {
12937 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12938     for (int i = 0; i < 10; ++i)
12939       ++a;
12940   }
12941 #pragma omp target
12942 #pragma omp teams distribute simd
12943   for (int i = 0; i < 10; ++i) {
12944 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12945     for (int i = 0; i < 10; ++i)
12946       ++a;
12947   }
12948 #pragma omp target
12949 #pragma omp teams distribute simd
12950   for (int i = 0; i < 10; ++i) {
12951 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12952     for (int i = 0; i < 10; ++i)
12953       ++a;
12954   }
12955 
12956 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
12957 #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?}}
12958   for (int i = 0; i < 10; ++i)
12959     ;
12960 #pragma omp target
12961 #pragma omp teams distribute parallel for simd
12962   for (int i = 0; i < 10; ++i) {
12963 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12964     for (int i = 0; i < 10; ++i)
12965       ;
12966   }
12967 #pragma omp target
12968 #pragma omp teams distribute parallel for simd
12969   for (int i = 0; i < 10; ++i) {
12970 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12971     for (int i = 0; i < 10; ++i)
12972       ;
12973   }
12974 #pragma omp target
12975 #pragma omp teams distribute parallel for simd
12976   for (int i = 0; i < 10; ++i) {
12977 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12978     for (int i = 0; i < 10; ++i)
12979       ;
12980   }
12981 #pragma omp target
12982 #pragma omp teams distribute parallel for simd
12983   for (int i = 0; i < 10; ++i) {
12984 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12985     for (int i = 0; i < 10; ++i)
12986       ;
12987   }
12988 #pragma omp target
12989 #pragma omp teams distribute parallel for simd
12990   for (int i = 0; i < 10; ++i) {
12991 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12992     for (int i = 0; i < 10; ++i)
12993       ;
12994   }
12995 #pragma omp target
12996 #pragma omp teams distribute parallel for simd
12997   for (int i = 0; i < 10; ++i) {
12998 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12999     for (int i = 0; i < 10; ++i)
13000       ;
13001   }
13002 #pragma omp target
13003 #pragma omp teams distribute parallel for simd
13004   for (int i = 0; i < 10; ++i) {
13005 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13006     {
13007       bar();
13008     }
13009   }
13010 #pragma omp target
13011 #pragma omp teams distribute parallel for simd
13012   for (int i = 0; i < 10; ++i) {
13013 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13014     {
13015       bar();
13016     }
13017   }
13018 #pragma omp target
13019 #pragma omp teams distribute parallel for simd
13020   for (int i = 0; i < 10; ++i) {
13021 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13022     {
13023       bar();
13024     }
13025   }
13026 #pragma omp target
13027 #pragma omp teams distribute parallel for simd
13028   for (int i = 0; i < 10; ++i) {
13029 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13030     {
13031       bar();
13032     }
13033   }
13034 #pragma omp target
13035 #pragma omp teams distribute parallel for simd
13036   for (int i = 0; i < 10; ++i) {
13037 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13038     {
13039       bar();
13040     }
13041   }
13042 #pragma omp target
13043 #pragma omp teams distribute parallel for simd
13044   for (int i = 0; i < 10; ++i) {
13045 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13046     {
13047 #pragma omp single
13048       {
13049 	bar();
13050       }
13051     }
13052   }
13053 #pragma omp target
13054 #pragma omp teams distribute parallel for simd
13055   for (int i = 0; i < 10; ++i) {
13056 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13057     for (int i = 0; i < 10; ++i)
13058       ;
13059   }
13060 #pragma omp target
13061 #pragma omp teams distribute parallel for simd
13062   for (int i = 0; i < 10; ++i) {
13063 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13064     for (int i = 0; i < 10; ++i)
13065       ;
13066   }
13067 #pragma omp target
13068 #pragma omp teams distribute parallel for simd
13069   for (int i = 0; i < 10; ++i) {
13070 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13071     {
13072       bar();
13073     }
13074   }
13075 #pragma omp target
13076 #pragma omp teams distribute parallel for simd
13077   for (int i = 0; i < 10; ++i) {
13078 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13079     {
13080       bar();
13081     }
13082   }
13083 #pragma omp target
13084 #pragma omp teams distribute parallel for simd
13085   for (int i = 0; i < 10; ++i) {
13086 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13087     bar();
13088   }
13089 #pragma omp target
13090 #pragma omp teams distribute parallel for simd
13091   for (int i = 0; i < 10; ++i) {
13092 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13093     bar();
13094   }
13095 #pragma omp target
13096 #pragma omp teams distribute parallel for simd
13097   for (int i = 0; i < 10; ++i) {
13098 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13099     bar();
13100   }
13101 #pragma omp target
13102 #pragma omp teams distribute parallel for simd
13103   for (int i = 0; i < 10; ++i) {
13104 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13105     bar();
13106   }
13107 #pragma omp target
13108 #pragma omp teams distribute parallel for simd
13109   for (int i = 0; i < 10; ++i) {
13110 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13111     bar();
13112   }
13113 #pragma omp target
13114 #pragma omp teams distribute parallel for simd
13115   for (int i = 0; i < 10; ++i) {
13116 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13117     ++a;
13118   }
13119 #pragma omp target
13120 #pragma omp teams distribute parallel for simd
13121   for (int i = 0; i < 10; ++i) {
13122 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13123     ++a;
13124   }
13125 #pragma omp target
13126 #pragma omp teams distribute parallel for simd
13127   for (int i = 0; i < 10; ++i) {
13128 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13129     ++a;
13130   }
13131 #pragma omp target
13132 #pragma omp teams distribute parallel for simd
13133   for (int i = 0; i < 10; ++i) {
13134 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13135     for (int i = 0; i < 10; ++i)
13136       ;
13137   }
13138 #pragma omp target
13139 #pragma omp teams distribute parallel for simd
13140   for (int i = 0; i < 10; ++i) {
13141 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13142     ++a;
13143   }
13144 #pragma omp target
13145 #pragma omp teams distribute parallel for simd
13146   for (int i = 0; i < 10; ++i) {
13147 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13148     ++a;
13149   }
13150 #pragma omp target
13151 #pragma omp teams distribute parallel for simd
13152   for (int i = 0; i < 10; ++i) {
13153 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13154     ++a;
13155   }
13156 #pragma omp target
13157 #pragma omp teams distribute parallel for simd
13158   for (int i = 0; i < 10; ++i) {
13159 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13160     ++a;
13161   }
13162 #pragma omp target
13163 #pragma omp teams distribute parallel for simd
13164   for (int i = 0; i < 10; ++i) {
13165 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13166     for (int i = 0; i < 10; ++i)
13167       ++a;
13168   }
13169 #pragma omp target
13170 #pragma omp teams distribute parallel for simd
13171   for (int i = 0; i < 10; ++i) {
13172 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13173     for (int i = 0; i < 10; ++i)
13174       ++a;
13175   }
13176 #pragma omp target
13177 #pragma omp teams distribute parallel for simd
13178   for (int i = 0; i < 10; ++i) {
13179 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13180     for (int i = 0; i < 10; ++i)
13181       ++a;
13182   }
13183 #pragma omp target
13184 #pragma omp teams distribute parallel for simd
13185   for (int i = 0; i < 10; ++i) {
13186 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13187     for (int i = 0; i < 10; ++i)
13188       ++a;
13189   }
13190 #pragma omp target
13191 #pragma omp teams distribute parallel for simd
13192   for (int i = 0; i < 10; ++i) {
13193 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13194     for (int i = 0; i < 10; ++i)
13195       ++a;
13196   }
13197 #pragma omp target
13198 #pragma omp teams distribute parallel for simd
13199   for (int i = 0; i < 10; ++i) {
13200 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
13201     for (int i = 0; i < 10; ++i)
13202       ++a;
13203   }
13204 
13205 //--------------------
13206 
13207 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
13208 #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?}}
13209   for (int i = 0; i < 10; ++i)
13210     ;
13211 #pragma omp target
13212 #pragma omp teams distribute parallel for
13213   for (int i = 0; i < 10; ++i) {
13214 #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?}}
13215     for (int i = 0; i < 10; ++i)
13216       ;
13217   }
13218 #pragma omp target
13219 #pragma omp teams distribute parallel for
13220   for (int i = 0; i < 10; ++i) {
13221 #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?}}
13222     for (int i = 0; i < 10; ++i)
13223       ;
13224   }
13225 #pragma omp target
13226 #pragma omp teams distribute parallel for
13227   for (int i = 0; i < 10; ++i) {
13228 #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?}}
13229     for (int i = 0; i < 10; ++i)
13230       ;
13231   }
13232 #pragma omp target
13233 #pragma omp teams distribute parallel for
13234   for (int i = 0; i < 10; ++i) {
13235 #pragma omp simd // OK
13236     for (int i = 0; i < 10; ++i)
13237       ;
13238   }
13239 #pragma omp target
13240 #pragma omp teams distribute parallel for
13241   for (int i = 0; i < 10; ++i) {
13242 #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?}}
13243     for (int i = 0; i < 10; ++i)
13244       ;
13245   }
13246 #pragma omp target
13247 #pragma omp teams distribute parallel for
13248   for (int i = 0; i < 10; ++i) {
13249 #pragma omp parallel // OK
13250     for (int i = 0; i < 10; ++i)
13251       ;
13252   }
13253 #pragma omp target
13254 #pragma omp teams distribute parallel for
13255   for (int i = 0; i < 10; ++i) {
13256 #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?}}
13257     {
13258       bar();
13259     }
13260   }
13261 #pragma omp target
13262 #pragma omp teams distribute parallel for
13263   for (int i = 0; i < 10; ++i) {
13264 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
13265     {
13266       bar();
13267     }
13268   }
13269 #pragma omp target
13270 #pragma omp teams distribute parallel for
13271   for (int i = 0; i < 10; ++i) {
13272 #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?}}
13273     {
13274       bar();
13275     }
13276   }
13277 #pragma omp target
13278 #pragma omp teams distribute parallel for
13279   for (int i = 0; i < 10; ++i) {
13280 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
13281     {
13282       bar();
13283     }
13284   }
13285 #pragma omp target
13286 #pragma omp teams distribute parallel for
13287   for (int i = 0; i < 10; ++i) {
13288 #pragma omp critical // OK
13289     {
13290       bar();
13291     }
13292   }
13293 #pragma omp target
13294 #pragma omp teams distribute parallel for
13295   for (int i = 0; i < 10; ++i) {
13296 #pragma omp parallel // OK
13297     {
13298 #pragma omp single
13299       {
13300 	bar();
13301       }
13302     }
13303   }
13304 #pragma omp target
13305 #pragma omp teams distribute parallel for
13306   for (int i = 0; i < 10; ++i) {
13307 #pragma omp parallel for // OK
13308     for (int i = 0; i < 10; ++i)
13309       ;
13310   }
13311 #pragma omp target
13312 #pragma omp teams distribute parallel for
13313   for (int i = 0; i < 10; ++i) {
13314 #pragma omp parallel for simd // OK
13315     for (int i = 0; i < 10; ++i)
13316       ;
13317   }
13318 #pragma omp target
13319 #pragma omp teams distribute parallel for
13320   for (int i = 0; i < 10; ++i) {
13321 #pragma omp parallel sections // OK
13322     {
13323       bar();
13324     }
13325   }
13326 #pragma omp target
13327 #pragma omp teams distribute parallel for
13328   for (int i = 0; i < 10; ++i) {
13329 #pragma omp task // OK
13330     {
13331       bar();
13332     }
13333   }
13334 #pragma omp target
13335 #pragma omp teams distribute parallel for
13336   for (int i = 0; i < 10; ++i) {
13337 #pragma omp taskyield // OK
13338     bar();
13339   }
13340 #pragma omp target
13341 #pragma omp teams distribute parallel for
13342   for (int i = 0; i < 10; ++i) {
13343 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
13344     bar();
13345   }
13346 #pragma omp target
13347 #pragma omp teams distribute parallel for
13348   for (int i = 0; i < 10; ++i) {
13349 #pragma omp taskwait // OK
13350     bar();
13351   }
13352 #pragma omp target
13353 #pragma omp teams distribute parallel for
13354   for (int i = 0; i < 10; ++i) {
13355 #pragma omp flush // OK
13356     bar();
13357   }
13358 #pragma omp target
13359 #pragma omp teams distribute parallel for
13360   for (int i = 0; i < 10; ++i) {
13361 #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?}}
13362     bar();
13363   }
13364 #pragma omp target
13365 #pragma omp teams distribute parallel for
13366   for (int i = 0; i < 10; ++i) {
13367 #pragma omp atomic // OK
13368     ++a;
13369   }
13370 #pragma omp target
13371 #pragma omp teams distribute parallel for
13372   for (int i = 0; i < 10; ++i) {
13373 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13374     ++a;
13375   }
13376 #pragma omp target
13377 #pragma omp teams distribute parallel for
13378   for (int i = 0; i < 10; ++i) {
13379 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
13380     ++a;
13381   }
13382 #pragma omp target
13383 #pragma omp teams distribute parallel for
13384   for (int i = 0; i < 10; ++i) {
13385 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13386     for (int i = 0; i < 10; ++i)
13387       ;
13388   }
13389 #pragma omp target
13390 #pragma omp teams distribute parallel for
13391   for (int i = 0; i < 10; ++i) {
13392 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13393     ++a;
13394   }
13395 #pragma omp target
13396 #pragma omp teams distribute parallel for
13397   for (int i = 0; i < 10; ++i) {
13398 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13399     ++a;
13400   }
13401 #pragma omp target
13402 #pragma omp teams distribute parallel for
13403   for (int i = 0; i < 10; ++i) {
13404 #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?}}
13405     ++a;
13406   }
13407 #pragma omp target
13408 #pragma omp teams distribute parallel for
13409   for (int i = 0; i < 10; ++i) {
13410 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
13411     ++a;
13412   }
13413 #pragma omp target
13414 #pragma omp teams distribute parallel for
13415   for (int i = 0; i < 10; ++i) {
13416 #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?}}
13417     for (int i = 0; i < 10; ++i)
13418       ++a;
13419   }
13420 #pragma omp target
13421 #pragma omp teams distribute parallel for
13422   for (int i = 0; i < 10; ++i) {
13423 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13424     for (int i = 0; i < 10; ++i)
13425       ++a;
13426   }
13427 #pragma omp target
13428 #pragma omp teams distribute parallel for
13429   for (int i = 0; i < 10; ++i) {
13430 #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?}}
13431     for (int i = 0; i < 10; ++i)
13432       ++a;
13433   }
13434 #pragma omp target
13435 #pragma omp teams distribute parallel for
13436   for (int i = 0; i < 10; ++i) {
13437 #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?}}
13438     for (int i = 0; i < 10; ++i)
13439       ++a;
13440   }
13441 #pragma omp target
13442 #pragma omp teams distribute parallel for
13443   for (int i = 0; i < 10; ++i) {
13444 #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?}}
13445     for (int i = 0; i < 10; ++i)
13446       ++a;
13447   }
13448 #pragma omp target
13449 #pragma omp teams distribute parallel for
13450   for (int i = 0; i < 10; ++i) {
13451 #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?}}
13452     for (int i = 0; i < 10; ++i)
13453       ++a;
13454   }
13455 
13456   return foo<int>();
13457 }
13458 
13459