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 
177 // SIMD DIRECTIVE
178 #pragma omp simd
179   for (int i = 0; i < 10; ++i) {
180 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
181     for (int i = 0; i < 10; ++i)
182       ;
183   }
184 #pragma omp simd
185   for (int i = 0; i < 10; ++i) {
186 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
187     for (int i = 0; i < 10; ++i)
188       ;
189   }
190 #pragma omp simd
191   for (int i = 0; i < 10; ++i) {
192 #pragma omp for simd // 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 parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
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 sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
205     {
206       bar();
207     }
208   }
209 #pragma omp simd
210   for (int i = 0; i < 10; ++i) {
211 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
212     {
213       bar();
214     }
215   }
216 #pragma omp simd
217   for (int i = 0; i < 10; ++i) {
218 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
219     {
220       bar();
221     }
222   }
223 #pragma omp simd
224   for (int i = 0; i < 10; ++i) {
225 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
226     {
227       bar();
228     }
229   }
230 #pragma omp simd
231   for (int i = 0; i < 10; ++i) {
232 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
233     {
234       bar();
235     }
236   }
237 #pragma omp simd
238   for (int i = 0; i < 10; ++i) {
239 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
240     for (int i = 0; i < 10; ++i)
241       ;
242   }
243 #pragma omp simd
244   for (int i = 0; i < 10; ++i) {
245 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
246     for (int i = 0; i < 10; ++i)
247       ;
248   }
249 #pragma omp simd
250   for (int i = 0; i < 10; ++i) {
251 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
252     {
253       bar();
254     }
255   }
256 #pragma omp simd
257   for (int i = 0; i < 10; ++i) {
258 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
259     {
260       bar();
261     }
262   }
263 #pragma omp simd
264   for (int i = 0; i < 10; ++i) {
265 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
266     bar();
267   }
268 #pragma omp simd
269   for (int i = 0; i < 10; ++i) {
270 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
271     bar();
272   }
273 #pragma omp simd
274   for (int i = 0; i < 10; ++i) {
275 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
276     bar();
277   }
278 #pragma omp simd
279   for (int i = 0; i < 10; ++i) {
280 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
281     bar();
282   }
283 #pragma omp simd
284   for (int i = 0; i < 10; ++i) {
285 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
286     bar();
287   }
288 #pragma omp simd
289   for (int i = 0; i < 10; ++i) {
290 #pragma omp ordered simd // OK
291     bar();
292   }
293 #pragma omp simd
294   for (int i = 0; i < 10; ++i) {
295 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
296     bar();
297   }
298 #pragma omp simd
299   for (int i = 0; i < 10; ++i) {
300 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
301     ++a;
302   }
303 #pragma omp simd
304   for (int i = 0; i < 10; ++i) {
305 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
306     ++a;
307   }
308 #pragma omp simd
309   for (int i = 0; i < 10; ++i) {
310 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
311     ++a;
312   }
313 #pragma omp simd
314   for (int i = 0; i < 10; ++i) {
315 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
316     for (int i = 0; i < 10; ++i)
317       ;
318   }
319 #pragma omp simd
320   for (int i = 0; i < 10; ++i) {
321 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
322     ++a;
323   }
324 #pragma omp simd
325   for (int i = 0; i < 10; ++i) {
326 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
327     ++a;
328   }
329 #pragma omp simd
330   for (int i = 0; i < 10; ++i) {
331 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
332     ++a;
333   }
334 #pragma omp simd
335   for (int i = 0; i < 10; ++i) {
336 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
337   for (int i = 0; i < 10; ++i)
338     ++a;
339   }
340 #pragma omp simd
341   for (int i = 0; i < 10; ++i) {
342 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
343     for (int j = 0; j < 10; ++j)
344       ;
345   }
346 #pragma omp simd
347   for (int i = 0; i < 10; ++i) {
348 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
349   }
350 #pragma omp simd
351   for (int i = 0; i < 10; ++i) {
352 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
353     for (int j = 0; j < 10; ++j)
354       ;
355   }
356 #pragma omp simd
357   for (int i = 0; i < 10; ++i) {
358 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
359     for (int j = 0; j < 10; ++j)
360       ;
361   }
362 #pragma omp simd
363   for (int i = 0; i < 10; ++i) {
364 #pragma omp distribute simd // 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 target 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 teams distribute // 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 teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
383     for (int j = 0; j < 10; ++j)
384       ;
385   }
386 
387 // FOR DIRECTIVE
388 #pragma omp for
389   for (int i = 0; i < 10; ++i) {
390 #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?}}
391     for (int i = 0; i < 10; ++i)
392       ;
393   }
394 #pragma omp for
395   for (int i = 0; i < 10; ++i) {
396 #pragma omp simd
397     for (int i = 0; i < 10; ++i)
398       ;
399   }
400 #pragma omp for
401   for (int i = 0; i < 10; ++i) {
402 #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?}}
403     for (int i = 0; i < 10; ++i)
404       ;
405   }
406 #pragma omp for
407   for (int i = 0; i < 10; ++i) {
408 #pragma omp parallel
409     for (int i = 0; i < 10; ++i)
410       ;
411   }
412 #pragma omp for
413   for (int i = 0; i < 10; ++i) {
414 #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?}}
415     {
416       bar();
417     }
418   }
419 #pragma omp for
420   for (int i = 0; i < 10; ++i) {
421 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
422     {
423       bar();
424     }
425   }
426 #pragma omp for
427   for (int i = 0; i < 10; ++i) {
428 #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?}}
429     {
430       bar();
431     }
432   }
433 
434 #pragma omp for
435   for (int i = 0; i < 10; ++i) {
436 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
437     {
438       bar();
439     }
440   }
441 #pragma omp for
442   for (int i = 0; i < 10; ++i) {
443 #pragma omp critical
444     {
445       bar();
446     }
447   }
448 #pragma omp for
449   for (int i = 0; i < 10; ++i) {
450 #pragma omp parallel
451     {
452 #pragma omp single // OK
453       {
454         bar();
455       }
456 #pragma omp for // OK
457       for (int i = 0; i < 10; ++i)
458         ;
459 #pragma omp sections // OK
460       {
461         bar();
462       }
463     }
464   }
465 #pragma omp for
466   for (int i = 0; i < 10; ++i) {
467 #pragma omp parallel for
468     for (int i = 0; i < 10; ++i)
469       ;
470   }
471 #pragma omp for
472   for (int i = 0; i < 10; ++i) {
473 #pragma omp parallel for simd
474     for (int i = 0; i < 10; ++i)
475       ;
476   }
477 #pragma omp for
478   for (int i = 0; i < 10; ++i) {
479 #pragma omp parallel sections
480     {
481       bar();
482     }
483   }
484 #pragma omp for
485   for (int i = 0; i < 10; ++i) {
486 #pragma omp task
487     {
488       bar();
489     }
490   }
491 #pragma omp for
492   for (int i = 0; i < 10; ++i) {
493 #pragma omp taskyield
494     bar();
495   }
496 #pragma omp for
497   for (int i = 0; i < 10; ++i) {
498 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
499     bar();
500   }
501 #pragma omp for
502   for (int i = 0; i < 10; ++i) {
503 #pragma omp taskwait
504     bar();
505   }
506 #pragma omp for
507   for (int i = 0; i < 10; ++i) {
508 #pragma omp flush
509     bar();
510   }
511 #pragma omp for
512   for (int i = 0; i < 10; ++i) {
513 #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?}}
514     bar();
515   }
516 #pragma omp for ordered
517   for (int i = 0; i < 10; ++i) {
518 #pragma omp ordered // OK
519     bar();
520   }
521 #pragma omp for
522   for (int i = 0; i < 10; ++i) {
523 #pragma omp atomic
524     ++a;
525   }
526 #pragma omp for
527   for (int i = 0; i < 10; ++i) {
528 #pragma omp target
529     ++a;
530   }
531 #pragma omp for
532   for (int i = 0; i < 10; ++i) {
533 #pragma omp target parallel
534     ++a;
535   }
536 #pragma omp for
537   for (int i = 0; i < 10; ++i) {
538 #pragma omp target parallel for
539     for (int i = 0; i < 10; ++i)
540       ;
541   }
542 #pragma omp for
543   for (int i = 0; i < 10; ++i) {
544 #pragma omp target enter data map(to: a)
545     ++a;
546   }
547 #pragma omp for
548   for (int i = 0; i < 10; ++i) {
549 #pragma omp target exit data map(from: a)
550     ++a;
551   }
552 #pragma omp for
553   for (int i = 0; i < 10; ++i) {
554 #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?}}
555     ++a;
556   }
557 #pragma omp for
558   for (int i = 0; i < 10; ++i) {
559 #pragma omp taskloop
560   for (int i = 0; i < 10; ++i)
561     ++a;
562   }
563 #pragma omp for
564   for (int i = 0; i < 10; ++i) {
565 #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?}}
566     for (int j = 0; j < 10; ++j)
567       ;
568   }
569 #pragma omp for
570   for (int i = 0; i < 10; ++i) {
571 #pragma omp target update to(a)
572   }
573 #pragma omp for
574   for (int i = 0; i < 10; ++i) {
575 #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?}}
576     for (int j = 0; j < 10; ++j)
577       ;
578   }
579 #pragma omp for
580   for (int i = 0; i < 10; ++i) {
581 #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?}}
582     for (int j = 0; j < 10; ++j)
583       ;
584   }
585 #pragma omp for
586   for (int i = 0; i < 10; ++i) {
587 #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?}}
588     for (int j = 0; j < 10; ++j)
589       ;
590   }
591 #pragma omp for
592   for (int i = 0; i < 10; ++i) {
593 #pragma omp target simd // OK
594     for (int j = 0; j < 10; ++j)
595       ;
596   }
597 #pragma omp for
598   for (int i = 0; i < 10; ++i) {
599 #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?}}
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 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?}}
606     for (int j = 0; j < 10; ++j)
607       ;
608   }
609 
610 // FOR SIMD DIRECTIVE
611 #pragma omp for simd
612   for (int i = 0; i < 10; ++i) {
613 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
614     for (int i = 0; i < 10; ++i)
615       ;
616   }
617 #pragma omp for simd
618   for (int i = 0; i < 10; ++i) {
619 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
620     for (int i = 0; i < 10; ++i)
621       ;
622   }
623 #pragma omp for simd
624   for (int i = 0; i < 10; ++i) {
625 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
626     for (int i = 0; i < 10; ++i)
627       ;
628   }
629 #pragma omp for simd
630   for (int i = 0; i < 10; ++i) {
631 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
632     for (int i = 0; i < 10; ++i)
633       ;
634   }
635 #pragma omp for simd
636   for (int i = 0; i < 10; ++i) {
637 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
638     {
639       bar();
640     }
641   }
642 #pragma omp for simd
643   for (int i = 0; i < 10; ++i) {
644 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
645     {
646       bar();
647     }
648   }
649 #pragma omp for simd
650   for (int i = 0; i < 10; ++i) {
651 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
652     {
653       bar();
654     }
655   }
656 #pragma omp for simd
657   for (int i = 0; i < 10; ++i) {
658 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
659     {
660       bar();
661     }
662   }
663 #pragma omp for simd
664   for (int i = 0; i < 10; ++i) {
665 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
666     {
667       bar();
668     }
669   }
670 #pragma omp for simd
671   for (int i = 0; i < 10; ++i) {
672 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
673     for (int i = 0; i < 10; ++i)
674       ;
675   }
676 #pragma omp for simd
677   for (int i = 0; i < 10; ++i) {
678 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
679     for (int i = 0; i < 10; ++i)
680       ;
681   }
682 #pragma omp for simd
683   for (int i = 0; i < 10; ++i) {
684 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
685     {
686       bar();
687     }
688   }
689 #pragma omp for simd
690   for (int i = 0; i < 10; ++i) {
691 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
692     {
693       bar();
694     }
695   }
696 #pragma omp for simd
697   for (int i = 0; i < 10; ++i) {
698 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
699     bar();
700   }
701 #pragma omp for simd
702   for (int i = 0; i < 10; ++i) {
703 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
704     bar();
705   }
706 #pragma omp for simd
707   for (int i = 0; i < 10; ++i) {
708 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
709     bar();
710   }
711 #pragma omp for simd
712   for (int i = 0; i < 10; ++i) {
713 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
714     bar();
715   }
716 #pragma omp for simd
717   for (int i = 0; i < 10; ++i) {
718 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
719     bar();
720   }
721 #pragma omp for simd
722   for (int i = 0; i < 10; ++i) {
723 #pragma omp ordered simd // OK
724     bar();
725   }
726 #pragma omp for simd
727   for (int i = 0; i < 10; ++i) {
728 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
729     bar();
730   }
731 #pragma omp for simd
732   for (int i = 0; i < 10; ++i) {
733 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
734     ++a;
735   }
736 #pragma omp for simd
737   for (int i = 0; i < 10; ++i) {
738 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
739     ++a;
740   }
741 #pragma omp for simd
742   for (int i = 0; i < 10; ++i) {
743 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
744     ++a;
745   }
746 #pragma omp for simd
747   for (int i = 0; i < 10; ++i) {
748 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
749     for (int i = 0; i < 10; ++i)
750       ;
751   }
752 #pragma omp for simd
753   for (int i = 0; i < 10; ++i) {
754 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
755     ++a;
756   }
757 #pragma omp for simd
758   for (int i = 0; i < 10; ++i) {
759 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
760     ++a;
761   }
762 #pragma omp for simd
763   for (int i = 0; i < 10; ++i) {
764 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
765     ++a;
766   }
767 #pragma omp for simd
768   for (int i = 0; i < 10; ++i) {
769 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
770   for (int i = 0; i < 10; ++i)
771     ++a;
772   }
773 #pragma omp for simd
774   for (int i = 0; i < 10; ++i) {
775 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
776     for (int j = 0; j < 10; ++j)
777       ;
778   }
779 #pragma omp for simd
780   for (int i = 0; i < 10; ++i) {
781 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
782     bar();
783   }
784 #pragma omp for simd
785   for (int i = 0; i < 10; ++i) {
786 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
787     for (int j = 0; j < 10; ++j)
788       ;
789   }
790 #pragma omp for simd
791   for (int i = 0; i < 10; ++i) {
792 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
793     for (int j = 0; j < 10; ++j)
794       ;
795   }
796 #pragma omp for simd
797   for (int i = 0; i < 10; ++i) {
798 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
799     for (int j = 0; j < 10; ++j)
800       ;
801   }
802 #pragma omp for simd
803   for (int i = 0; i < 10; ++i) {
804 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
805     for (int j = 0; j < 10; ++j)
806       ;
807   }
808 #pragma omp for simd
809   for (int i = 0; i < 10; ++i) {
810 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
811     for (int j = 0; j < 10; ++j)
812       ;
813   }
814 #pragma omp for simd
815   for (int i = 0; i < 10; ++i) {
816 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
817     for (int j = 0; j < 10; ++j)
818       ;
819   }
820 
821 // SECTIONS DIRECTIVE
822 #pragma omp sections
823   {
824 #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?}}
825     for (int i = 0; i < 10; ++i)
826       ;
827   }
828 #pragma omp sections
829   {
830 #pragma omp simd
831     for (int i = 0; i < 10; ++i)
832       ;
833   }
834 #pragma omp sections
835   {
836 #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?}}
837     for (int i = 0; i < 10; ++i)
838       ;
839   }
840 #pragma omp sections
841   {
842 #pragma omp parallel
843     for (int i = 0; i < 10; ++i)
844       ;
845   }
846 #pragma omp sections
847   {
848 #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?}}
849     {
850       bar();
851     }
852   }
853 #pragma omp sections
854   {
855 #pragma omp section
856     {
857       bar();
858     }
859   }
860 #pragma omp sections
861   {
862 #pragma omp parallel
863     {
864 #pragma omp single // OK
865       {
866         bar();
867       }
868 #pragma omp for // OK
869       for (int i = 0; i < 10; ++i)
870         ;
871 #pragma omp sections // OK
872       {
873         bar();
874       }
875     }
876   }
877 #pragma omp sections
878   {
879 #pragma omp parallel
880     {
881 #pragma omp master // OK
882       {
883         bar();
884       }
885 #pragma omp for // OK
886       for (int i = 0; i < 10; ++i)
887         ;
888 #pragma omp master // OK
889       {
890         bar();
891       }
892     }
893 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
894     bar();
895   }
896 #pragma omp sections
897   {
898 #pragma omp parallel
899     {
900 #pragma omp critical(A) // OK
901       {
902         bar();
903       }
904 #pragma omp for // OK
905       for (int i = 0; i < 10; ++i)
906         ;
907 #pragma omp critical // OK
908       {
909         bar();
910       }
911     }
912 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
913     bar();
914   }
915 #pragma omp sections
916   {
917 #pragma omp parallel for
918     for (int i = 0; i < 10; ++i)
919       ;
920   }
921 #pragma omp sections
922   {
923 #pragma omp parallel for simd
924     for (int i = 0; i < 10; ++i)
925       ;
926   }
927 #pragma omp sections
928   {
929 #pragma omp parallel sections
930     {
931       bar();
932     }
933   }
934 #pragma omp sections
935   {
936 #pragma omp task
937     {
938       bar();
939     }
940   }
941 #pragma omp sections
942   {
943 #pragma omp taskyield
944   }
945 #pragma omp sections
946   {
947 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
948   }
949 #pragma omp sections
950   {
951 #pragma omp taskwait
952   }
953 #pragma omp sections
954   {
955 #pragma omp flush
956   }
957 #pragma omp sections
958   {
959 #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?}}
960     bar();
961   }
962 #pragma omp sections
963   {
964 #pragma omp atomic
965     ++a;
966   }
967 #pragma omp sections
968   {
969 #pragma omp target
970     ++a;
971   }
972 #pragma omp sections
973   {
974 #pragma omp target parallel
975     ++a;
976   }
977 #pragma omp sections
978   {
979 #pragma omp target parallel for
980     for (int i = 0; i < 10; ++i)
981       ;
982   }
983 #pragma omp sections
984   {
985 #pragma omp target enter data map(to: a)
986   }
987 #pragma omp sections
988   {
989 #pragma omp target exit data map(from: a)
990   }
991 #pragma omp sections
992   {
993 #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?}}
994     ++a;
995   }
996 #pragma omp sections
997   {
998 #pragma omp taskloop
999   for (int i = 0; i < 10; ++i)
1000     ++a;
1001   }
1002 #pragma omp sections
1003   {
1004 #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?}}
1005     for (int i = 0; i < 10; ++i)
1006       ;
1007   }
1008 #pragma omp sections
1009   {
1010 #pragma omp target update to(a)
1011   }
1012 #pragma omp sections
1013   {
1014 #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?}}
1015     for (int i = 0; i < 10; ++i)
1016       ;
1017   }
1018 #pragma omp sections
1019   {
1020 #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?}}
1021     for (int i = 0; i < 10; ++i)
1022       ;
1023   }
1024 #pragma omp sections
1025   {
1026 #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?}}
1027     for (int i = 0; i < 10; ++i)
1028       ;
1029   }
1030 #pragma omp sections
1031   {
1032 #pragma omp target simd // OK
1033     for (int i = 0; i < 10; ++i)
1034       ;
1035   }
1036 #pragma omp sections
1037   {
1038 #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?}}
1039     for (int i = 0; i < 10; ++i)
1040       ;
1041   }
1042 #pragma omp sections
1043   {
1044 #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?}}
1045     for (int i = 0; i < 10; ++i)
1046       ;
1047   }
1048 
1049 // SECTION DIRECTIVE
1050 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1051   {
1052     bar();
1053   }
1054 #pragma omp sections
1055   {
1056 #pragma omp section
1057     {
1058 #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?}}
1059       for (int i = 0; i < 10; ++i)
1060         ;
1061     }
1062   }
1063 #pragma omp sections
1064   {
1065 #pragma omp section
1066     {
1067 #pragma omp simd
1068       for (int i = 0; i < 10; ++i)
1069         ;
1070     }
1071   }
1072 #pragma omp sections
1073   {
1074 #pragma omp section
1075     {
1076 #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?}}
1077       for (int i = 0; i < 10; ++i)
1078         ;
1079     }
1080   }
1081 #pragma omp sections
1082   {
1083 #pragma omp section
1084     {
1085 #pragma omp parallel
1086       for (int i = 0; i < 10; ++i)
1087         ;
1088     }
1089   }
1090 #pragma omp sections
1091   {
1092 #pragma omp section
1093     {
1094 #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?}}
1095       {
1096         bar();
1097       }
1098     }
1099   }
1100 #pragma omp sections
1101   {
1102 #pragma omp section
1103     {
1104 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1105       {
1106         bar();
1107       }
1108     }
1109   }
1110 #pragma omp sections
1111   {
1112 #pragma omp section
1113     {
1114 #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?}}
1115       bar();
1116 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1117       bar();
1118 #pragma omp critical
1119       bar();
1120     }
1121   }
1122 #pragma omp sections
1123   {
1124 #pragma omp section
1125     {
1126 #pragma omp parallel
1127       {
1128 #pragma omp single // OK
1129         {
1130           bar();
1131         }
1132 #pragma omp for // OK
1133         for (int i = 0; i < 10; ++i)
1134           ;
1135 #pragma omp for simd // OK
1136         for (int i = 0; i < 10; ++i)
1137           ;
1138 #pragma omp sections // OK
1139         {
1140           bar();
1141         }
1142       }
1143     }
1144   }
1145 #pragma omp sections
1146   {
1147 #pragma omp section
1148     {
1149 #pragma omp parallel for
1150       for (int i = 0; i < 10; ++i)
1151         ;
1152     }
1153   }
1154 #pragma omp sections
1155   {
1156 #pragma omp section
1157     {
1158 #pragma omp parallel for simd
1159       for (int i = 0; i < 10; ++i)
1160         ;
1161     }
1162   }
1163 #pragma omp sections
1164   {
1165 #pragma omp section
1166     {
1167 #pragma omp parallel sections
1168       {
1169         bar();
1170       }
1171     }
1172   }
1173 #pragma omp sections
1174   {
1175 #pragma omp section
1176     {
1177 #pragma omp task
1178       {
1179         bar();
1180       }
1181     }
1182   }
1183 #pragma omp sections
1184   {
1185 #pragma omp section
1186     {
1187 #pragma omp taskyield
1188       bar();
1189     }
1190   }
1191 #pragma omp sections
1192   {
1193 #pragma omp section
1194     {
1195 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1196       bar();
1197     }
1198   }
1199 #pragma omp sections
1200   {
1201 #pragma omp section
1202     {
1203 #pragma omp taskwait
1204       bar();
1205     }
1206   }
1207 #pragma omp sections
1208   {
1209 #pragma omp section
1210     {
1211 #pragma omp flush
1212       bar();
1213     }
1214   }
1215 #pragma omp sections
1216   {
1217 #pragma omp section
1218     {
1219 #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?}}
1220       bar();
1221     }
1222   }
1223 #pragma omp sections
1224   {
1225 #pragma omp section
1226 #pragma omp atomic
1227     ++a;
1228   }
1229 #pragma omp sections
1230   {
1231 #pragma omp section
1232 #pragma omp target
1233     ++a;
1234   }
1235 #pragma omp sections
1236   {
1237 #pragma omp section
1238 #pragma omp target parallel
1239     ++a;
1240   }
1241 #pragma omp sections
1242   {
1243 #pragma omp section
1244     {
1245 #pragma omp target parallel for
1246       for (int i = 0; i < 10; ++i)
1247         ;
1248     }
1249   }
1250 #pragma omp sections
1251   {
1252 #pragma omp section
1253     {
1254 #pragma omp target enter data map(to: a)
1255       ++a;
1256     }
1257   }
1258 #pragma omp sections
1259   {
1260 #pragma omp section
1261     {
1262 #pragma omp target exit data map(from: a)
1263       ++a;
1264     }
1265   }
1266 #pragma omp sections
1267   {
1268 #pragma omp section
1269 #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?}}
1270     ++a;
1271   }
1272 #pragma omp sections
1273   {
1274 #pragma omp section
1275 #pragma omp taskloop
1276   for (int i = 0; i < 10; ++i)
1277     ++a;
1278   }
1279 #pragma omp sections
1280   {
1281 #pragma omp section
1282 #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?}}
1283     for (int i = 0; i < 10; ++i)
1284       ;
1285   }
1286 #pragma omp sections
1287   {
1288 #pragma omp section
1289     {
1290       bar();
1291 #pragma omp target update to(a)
1292     }
1293   }
1294 #pragma omp sections
1295   {
1296 #pragma omp section
1297 #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?}}
1298     for (int i = 0; i < 10; ++i)
1299       ;
1300   }
1301 #pragma omp sections
1302   {
1303 #pragma omp section
1304 #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?}}
1305     for (int i = 0; i < 10; ++i)
1306       ;
1307   }
1308 #pragma omp sections
1309   {
1310 #pragma omp section
1311 #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?}}
1312     for (int i = 0; i < 10; ++i)
1313       ;
1314   }
1315 #pragma omp sections
1316   {
1317 #pragma omp section
1318 #pragma omp target simd // OK
1319     for (int i = 0; i < 10; ++i)
1320       ;
1321   }
1322 #pragma omp sections
1323   {
1324 #pragma omp section
1325 #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?}}
1326     for (int i = 0; i < 10; ++i)
1327       ;
1328   }
1329 #pragma omp sections
1330   {
1331 #pragma omp section
1332 #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?}}
1333     for (int i = 0; i < 10; ++i)
1334       ;
1335   }
1336 
1337 // SINGLE DIRECTIVE
1338 #pragma omp single
1339   {
1340 #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?}}
1341     for (int i = 0; i < 10; ++i)
1342       ;
1343   }
1344 #pragma omp single
1345   {
1346 #pragma omp simd
1347     for (int i = 0; i < 10; ++i)
1348       ;
1349   }
1350 #pragma omp single
1351   {
1352 #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?}}
1353     for (int i = 0; i < 10; ++i)
1354       ;
1355   }
1356 #pragma omp single
1357   {
1358 #pragma omp parallel
1359     for (int i = 0; i < 10; ++i)
1360       ;
1361   }
1362 #pragma omp single
1363   {
1364 #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?}}
1365     {
1366       bar();
1367     }
1368   }
1369 #pragma omp single
1370   {
1371 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1372     {
1373       bar();
1374     }
1375   }
1376 #pragma omp single
1377   {
1378 #pragma omp critical
1379     {
1380       bar();
1381     }
1382   }
1383 #pragma omp single
1384   {
1385 #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?}}
1386     {
1387       bar();
1388     }
1389   }
1390 #pragma omp single
1391   {
1392 #pragma omp parallel
1393     {
1394 #pragma omp single // OK
1395       {
1396         bar();
1397       }
1398 #pragma omp for // OK
1399       for (int i = 0; i < 10; ++i)
1400         ;
1401 #pragma omp for simd // OK
1402       for (int i = 0; i < 10; ++i)
1403         ;
1404 #pragma omp sections // OK
1405       {
1406         bar();
1407       }
1408     }
1409   }
1410 #pragma omp single
1411   {
1412 #pragma omp parallel for
1413     for (int i = 0; i < 10; ++i)
1414       ;
1415   }
1416 #pragma omp single
1417   {
1418 #pragma omp parallel for simd
1419     for (int i = 0; i < 10; ++i)
1420       ;
1421   }
1422 #pragma omp single
1423   {
1424 #pragma omp parallel sections
1425     {
1426       bar();
1427     }
1428   }
1429 #pragma omp single
1430   {
1431 #pragma omp task
1432     {
1433       bar();
1434     }
1435   }
1436 #pragma omp single
1437   {
1438 #pragma omp taskyield
1439     bar();
1440   }
1441 #pragma omp single
1442   {
1443 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1444     bar();
1445   }
1446 #pragma omp single
1447   {
1448 #pragma omp taskwait
1449     bar();
1450   }
1451 #pragma omp single
1452   {
1453 #pragma omp flush
1454     bar();
1455   }
1456 #pragma omp single
1457   {
1458 #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?}}
1459     bar();
1460   }
1461 #pragma omp single
1462   {
1463 #pragma omp atomic
1464     ++a;
1465   }
1466 #pragma omp single
1467   {
1468 #pragma omp target
1469     ++a;
1470   }
1471 #pragma omp single
1472   {
1473 #pragma omp target parallel
1474     ++a;
1475   }
1476 #pragma omp single
1477   {
1478 #pragma omp target parallel for
1479     for (int i = 0; i < 10; ++i)
1480       ;
1481   }
1482 #pragma omp single
1483   {
1484 #pragma omp target enter data map(to: a)
1485     ++a;
1486   }
1487 #pragma omp single
1488   {
1489 #pragma omp target exit data map(from: a)
1490     ++a;
1491   }
1492 #pragma omp single
1493   {
1494 #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?}}
1495     ++a;
1496   }
1497 #pragma omp single
1498   {
1499 #pragma omp taskloop
1500   for (int i = 0; i < 10; ++i)
1501     ++a;
1502   }
1503 #pragma omp single
1504   {
1505 #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?}}
1506     for (int i = 0; i < 10; ++i)
1507       ;
1508   }
1509 #pragma omp single
1510   {
1511 #pragma omp target update to(a)
1512     bar();
1513   }
1514 #pragma omp single
1515   {
1516 #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?}}
1517     for (int i = 0; i < 10; ++i)
1518       ;
1519   }
1520 #pragma omp single
1521   {
1522 #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?}}
1523     for (int i = 0; i < 10; ++i)
1524       ;
1525   }
1526 #pragma omp single
1527   {
1528 #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?}}
1529     for (int i = 0; i < 10; ++i)
1530       ;
1531   }
1532 #pragma omp single
1533   {
1534 #pragma omp target simd // OK
1535     for (int i = 0; i < 10; ++i)
1536       ;
1537   }
1538 #pragma omp single
1539   {
1540 #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?}}
1541     for (int i = 0; i < 10; ++i)
1542       ;
1543   }
1544 #pragma omp single
1545   {
1546 #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?}}
1547     for (int i = 0; i < 10; ++i)
1548       ;
1549   }
1550 
1551 // MASTER DIRECTIVE
1552 #pragma omp master
1553   {
1554 #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?}}
1555     for (int i = 0; i < 10; ++i)
1556       ;
1557   }
1558 #pragma omp master
1559   {
1560 #pragma omp simd
1561     for (int i = 0; i < 10; ++i)
1562       ;
1563   }
1564 #pragma omp master
1565   {
1566 #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?}}
1567     for (int i = 0; i < 10; ++i)
1568       ;
1569   }
1570 #pragma omp master
1571   {
1572 #pragma omp parallel
1573     for (int i = 0; i < 10; ++i)
1574       ;
1575   }
1576 #pragma omp master
1577   {
1578 #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?}}
1579     {
1580       bar();
1581     }
1582   }
1583 #pragma omp master
1584   {
1585 #pragma omp master // OK, though second 'master' is redundant
1586     {
1587       bar();
1588     }
1589   }
1590 #pragma omp master
1591   {
1592 #pragma omp critical
1593     {
1594       bar();
1595     }
1596   }
1597 #pragma omp master
1598   {
1599 #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?}}
1600     {
1601       bar();
1602     }
1603   }
1604 #pragma omp master
1605   {
1606 #pragma omp parallel
1607     {
1608 #pragma omp master // OK
1609       {
1610         bar();
1611       }
1612 #pragma omp for // OK
1613       for (int i = 0; i < 10; ++i)
1614         ;
1615 #pragma omp for simd // OK
1616       for (int i = 0; i < 10; ++i)
1617         ;
1618 #pragma omp sections // OK
1619       {
1620         bar();
1621       }
1622     }
1623   }
1624 #pragma omp master
1625   {
1626 #pragma omp parallel for
1627     for (int i = 0; i < 10; ++i)
1628       ;
1629   }
1630 #pragma omp master
1631   {
1632 #pragma omp parallel for simd
1633     for (int i = 0; i < 10; ++i)
1634       ;
1635   }
1636 #pragma omp master
1637   {
1638 #pragma omp parallel sections
1639     {
1640       bar();
1641     }
1642   }
1643 #pragma omp master
1644   {
1645 #pragma omp task
1646     {
1647       bar();
1648     }
1649   }
1650 #pragma omp master
1651   {
1652 #pragma omp taskyield
1653     bar();
1654   }
1655 #pragma omp master
1656   {
1657 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1658     bar();
1659   }
1660 #pragma omp master
1661   {
1662 #pragma omp taskwait
1663     bar();
1664   }
1665 #pragma omp master
1666   {
1667 #pragma omp flush
1668     bar();
1669   }
1670 #pragma omp master
1671   {
1672 #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?}}
1673     bar();
1674   }
1675 #pragma omp master
1676   {
1677 #pragma omp atomic
1678     ++a;
1679   }
1680 #pragma omp master
1681   {
1682 #pragma omp target
1683     ++a;
1684   }
1685 #pragma omp master
1686   {
1687 #pragma omp target parallel
1688     ++a;
1689   }
1690 #pragma omp master
1691   {
1692 #pragma omp target parallel for
1693     for (int i = 0; i < 10; ++i)
1694       ;
1695   }
1696 #pragma omp master
1697   {
1698 #pragma omp target enter data map(to: a)
1699     ++a;
1700   }
1701 #pragma omp master
1702   {
1703 #pragma omp target exit data map(from: a)
1704     ++a;
1705   }
1706 #pragma omp master
1707   {
1708 #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?}}
1709     ++a;
1710   }
1711 #pragma omp master
1712   {
1713 #pragma omp taskloop
1714   for (int i = 0; i < 10; ++i)
1715     ++a;
1716   }
1717 #pragma omp master
1718   {
1719 #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?}}
1720     for (int i = 0; i < 10; ++i)
1721       ;
1722   }
1723 #pragma omp master
1724   {
1725 #pragma omp target update to(a)
1726     bar();
1727   }
1728 #pragma omp master
1729   {
1730 #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?}}
1731     for (int i = 0; i < 10; ++i)
1732       ;
1733   }
1734 #pragma omp master
1735   {
1736 #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?}}
1737     for (int i = 0; i < 10; ++i)
1738       ;
1739   }
1740 #pragma omp master
1741   {
1742 #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?}}
1743     for (int i = 0; i < 10; ++i)
1744       ;
1745   }
1746 #pragma omp master
1747   {
1748 #pragma omp target simd // OK
1749     for (int i = 0; i < 10; ++i)
1750       ;
1751   }
1752 #pragma omp master
1753   {
1754 #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?}}
1755     for (int i = 0; i < 10; ++i)
1756       ;
1757   }
1758 #pragma omp master
1759   {
1760 #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?}}
1761     for (int i = 0; i < 10; ++i)
1762       ;
1763   }
1764 
1765 // CRITICAL DIRECTIVE
1766 #pragma omp critical
1767   {
1768 #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?}}
1769     for (int i = 0; i < 10; ++i)
1770       ;
1771   }
1772 #pragma omp critical
1773   {
1774 #pragma omp simd
1775     for (int i = 0; i < 10; ++i)
1776       ;
1777   }
1778 #pragma omp critical
1779   {
1780 #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?}}
1781     for (int i = 0; i < 10; ++i)
1782       ;
1783   }
1784 #pragma omp critical
1785   {
1786 #pragma omp parallel
1787     for (int i = 0; i < 10; ++i)
1788       ;
1789   }
1790 #pragma omp critical
1791   {
1792 #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?}}
1793     {
1794       bar();
1795     }
1796   }
1797 #pragma omp critical
1798   {
1799 #pragma omp master // OK, though second 'master' is redundant
1800     {
1801       bar();
1802     }
1803   }
1804 #pragma omp critical
1805   {
1806 #pragma omp critical
1807     {
1808       bar();
1809     }
1810   }
1811 #pragma omp critical
1812   {
1813 #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?}}
1814     {
1815       bar();
1816     }
1817   }
1818 #pragma omp critical
1819   {
1820 #pragma omp parallel
1821     {
1822 #pragma omp master // OK
1823       {
1824         bar();
1825       }
1826 #pragma omp for // OK
1827       for (int i = 0; i < 10; ++i)
1828         ;
1829 #pragma omp for simd // OK
1830       for (int i = 0; i < 10; ++i)
1831         ;
1832 #pragma omp sections // OK
1833       {
1834         bar();
1835       }
1836     }
1837   }
1838 #pragma omp critical
1839   {
1840 #pragma omp parallel for
1841     for (int i = 0; i < 10; ++i)
1842       ;
1843   }
1844 #pragma omp critical
1845   {
1846 #pragma omp parallel for simd
1847     for (int i = 0; i < 10; ++i)
1848       ;
1849   }
1850 #pragma omp critical
1851   {
1852 #pragma omp parallel sections
1853     {
1854       bar();
1855     }
1856   }
1857 #pragma omp critical
1858   {
1859 #pragma omp task
1860     {
1861       bar();
1862     }
1863   }
1864 #pragma omp critical
1865   {
1866 #pragma omp taskyield
1867     bar();
1868   }
1869 #pragma omp critical
1870   {
1871 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
1872     bar();
1873   }
1874 #pragma omp critical
1875   {
1876 #pragma omp taskwait
1877     bar();
1878   }
1879 #pragma omp critical(Tuzik)
1880   {
1881 #pragma omp critical(grelka)
1882     bar();
1883   }
1884 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
1885   {
1886 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
1887     {
1888 #pragma omp critical(Tuzik)
1889       {
1890 #pragma omp parallel
1891 #pragma omp critical(grelka)
1892         {
1893           bar();
1894         }
1895       }
1896     }
1897   }
1898 #pragma omp critical
1899   {
1900 #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?}}
1901     bar();
1902   }
1903 #pragma omp critical
1904   {
1905 #pragma omp atomic
1906     ++a;
1907   }
1908 #pragma omp critical
1909   {
1910 #pragma omp target
1911     ++a;
1912   }
1913 #pragma omp critical
1914   {
1915 #pragma omp target parallel
1916     ++a;
1917   }
1918 #pragma omp critical
1919   {
1920 #pragma omp target parallel for
1921     for (int i = 0; i < 10; ++i)
1922       ;
1923   }
1924 #pragma omp critical
1925   {
1926 #pragma omp target enter data map(to: a)
1927     ++a;
1928   }
1929 #pragma omp critical
1930   {
1931 #pragma omp target exit data map(from: a)
1932     ++a;
1933   }
1934 #pragma omp critical
1935   {
1936 #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?}}
1937     ++a;
1938   }
1939 #pragma omp critical
1940   {
1941 #pragma omp taskloop
1942   for (int i = 0; i < 10; ++i)
1943     ++a;
1944   }
1945 #pragma omp critical
1946   {
1947 #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?}}
1948     for (int i = 0; i < 10; ++i)
1949       ;
1950   }
1951 #pragma omp critical
1952   {
1953 #pragma omp target update to(a)
1954     bar();
1955   }
1956 #pragma omp critical
1957   {
1958 #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?}}
1959     for (int i = 0; i < 10; ++i)
1960       ;
1961   }
1962 #pragma omp critical
1963   {
1964 #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?}}
1965     for (int i = 0; i < 10; ++i)
1966       ;
1967   }
1968 #pragma omp critical
1969   {
1970 #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?}}
1971     for (int i = 0; i < 10; ++i)
1972       ;
1973   }
1974 #pragma omp critical
1975   {
1976 #pragma omp target simd // OK
1977     for (int i = 0; i < 10; ++i)
1978       ;
1979   }
1980 #pragma omp critical
1981   {
1982 #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?}}
1983     for (int i = 0; i < 10; ++i)
1984       ;
1985   }
1986 #pragma omp critical
1987   {
1988 #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?}}
1989     for (int i = 0; i < 10; ++i)
1990       ;
1991   }
1992 
1993 // PARALLEL FOR DIRECTIVE
1994 #pragma omp parallel for
1995   for (int i = 0; i < 10; ++i) {
1996 #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?}}
1997     for (int i = 0; i < 10; ++i)
1998       ;
1999   }
2000 #pragma omp parallel for
2001   for (int i = 0; i < 10; ++i) {
2002 #pragma omp simd
2003     for (int i = 0; i < 10; ++i)
2004       ;
2005   }
2006 #pragma omp parallel for
2007   for (int i = 0; i < 10; ++i) {
2008 #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?}}
2009     for (int i = 0; i < 10; ++i)
2010       ;
2011   }
2012 #pragma omp parallel for
2013   for (int i = 0; i < 10; ++i) {
2014 #pragma omp parallel
2015     for (int i = 0; i < 10; ++i)
2016       ;
2017   }
2018 #pragma omp parallel for
2019   for (int i = 0; i < 10; ++i) {
2020 #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?}}
2021     {
2022       bar();
2023     }
2024   }
2025 #pragma omp parallel for
2026   for (int i = 0; i < 10; ++i) {
2027 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2028     {
2029       bar();
2030     }
2031   }
2032 #pragma omp parallel for
2033   for (int i = 0; i < 10; ++i) {
2034 #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?}}
2035     {
2036       bar();
2037     }
2038   }
2039 
2040 #pragma omp parallel for
2041   for (int i = 0; i < 10; ++i) {
2042 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2043     {
2044       bar();
2045     }
2046   }
2047 
2048 #pragma omp parallel for
2049   for (int i = 0; i < 10; ++i) {
2050 #pragma omp critical
2051     {
2052       bar();
2053     }
2054   }
2055 
2056 #pragma omp parallel for
2057   for (int i = 0; i < 10; ++i) {
2058 #pragma omp parallel
2059     {
2060 #pragma omp single // OK
2061       {
2062         bar();
2063       }
2064 #pragma omp for // OK
2065       for (int i = 0; i < 10; ++i)
2066         ;
2067 #pragma omp for simd // OK
2068       for (int i = 0; i < 10; ++i)
2069         ;
2070 #pragma omp sections // OK
2071       {
2072         bar();
2073       }
2074     }
2075   }
2076 #pragma omp parallel for
2077   for (int i = 0; i < 10; ++i) {
2078 #pragma omp parallel for
2079     for (int i = 0; i < 10; ++i)
2080       ;
2081   }
2082 #pragma omp parallel for
2083   for (int i = 0; i < 10; ++i) {
2084 #pragma omp parallel for simd
2085     for (int i = 0; i < 10; ++i)
2086       ;
2087   }
2088 #pragma omp parallel for
2089   for (int i = 0; i < 10; ++i) {
2090 #pragma omp parallel sections
2091     {
2092       bar();
2093     }
2094   }
2095 #pragma omp parallel for
2096   for (int i = 0; i < 10; ++i) {
2097 #pragma omp task
2098     {
2099       bar();
2100     }
2101   }
2102 #pragma omp parallel for
2103   for (int i = 0; i < 10; ++i) {
2104 #pragma omp taskyield
2105     bar();
2106   }
2107 #pragma omp parallel for
2108   for (int i = 0; i < 10; ++i) {
2109 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2110     bar();
2111   }
2112 #pragma omp parallel for
2113   for (int i = 0; i < 10; ++i) {
2114 #pragma omp taskwait
2115     bar();
2116   }
2117 #pragma omp parallel for
2118   for (int i = 0; i < 10; ++i) {
2119 #pragma omp flush
2120     bar();
2121   }
2122 #pragma omp parallel for
2123   for (int i = 0; i < 10; ++i) {
2124 #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?}}
2125     bar();
2126   }
2127 #pragma omp parallel for ordered
2128   for (int i = 0; i < 10; ++i) {
2129 #pragma omp ordered // OK
2130     bar();
2131   }
2132 #pragma omp parallel for
2133   for (int i = 0; i < 10; ++i) {
2134 #pragma omp atomic
2135     ++a;
2136   }
2137 #pragma omp parallel for
2138   for (int i = 0; i < 10; ++i) {
2139 #pragma omp target
2140     ++a;
2141   }
2142 #pragma omp parallel for
2143   for (int i = 0; i < 10; ++i) {
2144 #pragma omp target parallel
2145     ++a;
2146   }
2147 #pragma omp parallel for
2148   for (int i = 0; i < 10; ++i) {
2149 #pragma omp target parallel for
2150     for (int i = 0; i < 10; ++i)
2151       ;
2152   }
2153 #pragma omp parallel for
2154   for (int i = 0; i < 10; ++i) {
2155 #pragma omp target enter data map(to: a)
2156     ++a;
2157   }
2158 #pragma omp parallel for
2159   for (int i = 0; i < 10; ++i) {
2160 #pragma omp target exit data map(from: a)
2161     ++a;
2162   }
2163 #pragma omp parallel for
2164   for (int i = 0; i < 10; ++i) {
2165 #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?}}
2166     ++a;
2167   }
2168 #pragma omp parallel for
2169   for (int i = 0; i < 10; ++i) {
2170 #pragma omp taskloop
2171   for (int i = 0; i < 10; ++i)
2172     ++a;
2173   }
2174 #pragma omp parallel for
2175   for (int i = 0; i < 10; ++i) {
2176 #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?}}
2177     for (int j = 0; j < 10; ++j)
2178       ;
2179   }
2180 #pragma omp parallel for
2181   for (int i = 0; i < 10; ++i) {
2182 #pragma omp target update to(a)
2183   }
2184 #pragma omp parallel for
2185   for (int i = 0; i < 10; ++i) {
2186 #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?}}
2187     for (int j = 0; j < 10; ++j)
2188       ;
2189   }
2190 #pragma omp parallel for
2191   for (int i = 0; i < 10; ++i) {
2192 #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?}}
2193     for (int j = 0; j < 10; ++j)
2194       ;
2195   }
2196 #pragma omp parallel for
2197   for (int i = 0; i < 10; ++i) {
2198 #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?}}
2199     for (int j = 0; j < 10; ++j)
2200       ;
2201   }
2202 #pragma omp parallel for
2203   for (int i = 0; i < 10; ++i) {
2204 #pragma omp target simd // OK
2205     for (int j = 0; j < 10; ++j)
2206       ;
2207   }
2208 #pragma omp parallel for
2209   for (int i = 0; i < 10; ++i) {
2210 #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?}}
2211     for (int j = 0; j < 10; ++j)
2212       ;
2213   }
2214 #pragma omp parallel for
2215   for (int i = 0; i < 10; ++i) {
2216 #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?}}
2217     for (int j = 0; j < 10; ++j)
2218       ;
2219   }
2220 
2221 // PARALLEL FOR SIMD DIRECTIVE
2222 #pragma omp parallel for simd
2223   for (int i = 0; i < 10; ++i) {
2224 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2225     for (int i = 0; i < 10; ++i)
2226       ;
2227   }
2228 #pragma omp parallel for simd
2229   for (int i = 0; i < 10; ++i) {
2230 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2231     for (int i = 0; i < 10; ++i)
2232       ;
2233   }
2234 #pragma omp parallel for simd
2235   for (int i = 0; i < 10; ++i) {
2236 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2237     for (int i = 0; i < 10; ++i)
2238       ;
2239   }
2240 #pragma omp parallel for simd
2241   for (int i = 0; i < 10; ++i) {
2242 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2243     for (int i = 0; i < 10; ++i)
2244       ;
2245   }
2246 #pragma omp parallel for simd
2247   for (int i = 0; i < 10; ++i) {
2248 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2249     {
2250       bar();
2251     }
2252   }
2253 #pragma omp parallel for simd
2254   for (int i = 0; i < 10; ++i) {
2255 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2256     {
2257       bar();
2258     }
2259   }
2260 #pragma omp parallel for simd
2261   for (int i = 0; i < 10; ++i) {
2262 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2263     {
2264       bar();
2265     }
2266   }
2267 
2268 #pragma omp parallel for simd
2269   for (int i = 0; i < 10; ++i) {
2270 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2271     {
2272       bar();
2273     }
2274   }
2275 
2276 #pragma omp parallel for simd
2277   for (int i = 0; i < 10; ++i) {
2278 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2279     {
2280       bar();
2281     }
2282   }
2283 
2284 #pragma omp parallel for simd
2285   for (int i = 0; i < 10; ++i) {
2286 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2287     {
2288 #pragma omp single
2289       {
2290         bar();
2291       }
2292 #pragma omp for
2293       for (int i = 0; i < 10; ++i)
2294         ;
2295 #pragma omp for simd
2296       for (int i = 0; i < 10; ++i)
2297         ;
2298 #pragma omp sections
2299       {
2300         bar();
2301       }
2302     }
2303   }
2304 #pragma omp parallel for simd
2305   for (int i = 0; i < 10; ++i) {
2306 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2307     for (int i = 0; i < 10; ++i)
2308       ;
2309   }
2310 #pragma omp parallel for simd
2311   for (int i = 0; i < 10; ++i) {
2312 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2313     for (int i = 0; i < 10; ++i)
2314       ;
2315   }
2316 #pragma omp parallel for simd
2317   for (int i = 0; i < 10; ++i) {
2318 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2319     {
2320       bar();
2321     }
2322   }
2323 #pragma omp parallel for simd
2324   for (int i = 0; i < 10; ++i) {
2325 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2326     {
2327       bar();
2328     }
2329   }
2330 #pragma omp parallel for simd
2331   for (int i = 0; i < 10; ++i) {
2332 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2333     bar();
2334   }
2335 #pragma omp parallel for simd
2336   for (int i = 0; i < 10; ++i) {
2337 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2338     bar();
2339   }
2340 #pragma omp parallel for simd
2341   for (int i = 0; i < 10; ++i) {
2342 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2343     bar();
2344   }
2345 #pragma omp parallel for simd
2346   for (int i = 0; i < 10; ++i) {
2347 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2348     bar();
2349   }
2350 #pragma omp parallel for simd
2351   for (int i = 0; i < 10; ++i) {
2352 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2353     bar();
2354   }
2355 #pragma omp parallel for simd
2356   for (int i = 0; i < 10; ++i) {
2357 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2358     bar();
2359   }
2360 #pragma omp parallel for simd
2361   for (int i = 0; i < 10; ++i) {
2362 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2363     ++a;
2364   }
2365 #pragma omp parallel for simd
2366   for (int i = 0; i < 10; ++i) {
2367 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2368     ++a;
2369   }
2370 #pragma omp parallel for simd
2371   for (int i = 0; i < 10; ++i) {
2372 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2373     ++a;
2374   }
2375 #pragma omp parallel for simd
2376   for (int i = 0; i < 10; ++i) {
2377 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2378     for (int i = 0; i < 10; ++i)
2379       ;
2380   }
2381 #pragma omp parallel for simd
2382   for (int i = 0; i < 10; ++i) {
2383 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2384     ++a;
2385   }
2386 #pragma omp parallel for simd
2387   for (int i = 0; i < 10; ++i) {
2388 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2389     ++a;
2390   }
2391 #pragma omp parallel for simd
2392   for (int i = 0; i < 10; ++i) {
2393 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2394     ++a;
2395   }
2396 #pragma omp parallel for simd
2397   for (int i = 0; i < 10; ++i) {
2398 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2399   for (int i = 0; i < 10; ++i)
2400     ++a;
2401   }
2402 #pragma omp parallel for simd
2403   for (int i = 0; i < 10; ++i) {
2404 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2405     for (int j = 0; j < 10; ++j)
2406       ;
2407   }
2408 #pragma omp parallel for simd
2409   for (int i = 0; i < 10; ++i) {
2410 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2411     bar();
2412   }
2413 #pragma omp parallel for simd
2414   for (int i = 0; i < 10; ++i) {
2415 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2416     for (int j = 0; j < 10; ++j)
2417       ;
2418   }
2419 #pragma omp parallel for simd
2420   for (int i = 0; i < 10; ++i) {
2421 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2422     for (int j = 0; j < 10; ++j)
2423       ;
2424   }
2425 #pragma omp parallel for simd
2426   for (int i = 0; i < 10; ++i) {
2427 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2428     for (int j = 0; j < 10; ++j)
2429       ;
2430   }
2431 #pragma omp parallel for simd
2432   for (int i = 0; i < 10; ++i) {
2433 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2434     for (int j = 0; j < 10; ++j)
2435       ;
2436   }
2437 #pragma omp parallel for simd
2438   for (int i = 0; i < 10; ++i) {
2439 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2440     for (int j = 0; j < 10; ++j)
2441       ;
2442   }
2443 #pragma omp parallel for simd
2444   for (int i = 0; i < 10; ++i) {
2445 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2446     for (int j = 0; j < 10; ++j)
2447       ;
2448   }
2449 
2450 // PARALLEL SECTIONS DIRECTIVE
2451 #pragma omp parallel sections
2452   {
2453 #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?}}
2454     for (int i = 0; i < 10; ++i)
2455       ;
2456   }
2457 #pragma omp parallel sections
2458   {
2459 #pragma omp simd
2460     for (int i = 0; i < 10; ++i)
2461       ;
2462   }
2463 #pragma omp parallel sections
2464   {
2465 #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?}}
2466     for (int i = 0; i < 10; ++i)
2467       ;
2468   }
2469 #pragma omp parallel sections
2470   {
2471 #pragma omp parallel
2472     for (int i = 0; i < 10; ++i)
2473       ;
2474   }
2475 #pragma omp parallel sections
2476   {
2477 #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?}}
2478     {
2479       bar();
2480     }
2481   }
2482 #pragma omp parallel sections
2483   {
2484 #pragma omp section
2485     {
2486       bar();
2487     }
2488   }
2489 #pragma omp parallel sections
2490   {
2491 #pragma omp section
2492     {
2493 #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?}}
2494       bar();
2495     }
2496   }
2497 #pragma omp parallel sections
2498   {
2499 #pragma omp section
2500     {
2501 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2502       bar();
2503     }
2504   }
2505 #pragma omp parallel sections
2506   {
2507 #pragma omp section
2508     {
2509 #pragma omp critical
2510       bar();
2511     }
2512   }
2513 #pragma omp parallel sections
2514   {
2515 #pragma omp parallel
2516     {
2517 #pragma omp single // OK
2518       {
2519         bar();
2520       }
2521 #pragma omp for // OK
2522       for (int i = 0; i < 10; ++i)
2523         ;
2524 #pragma omp for simd // OK
2525       for (int i = 0; i < 10; ++i)
2526         ;
2527 #pragma omp sections // OK
2528       {
2529         bar();
2530       }
2531     }
2532   }
2533 #pragma omp parallel sections
2534   {
2535 #pragma omp parallel for
2536     for (int i = 0; i < 10; ++i)
2537       ;
2538   }
2539 #pragma omp parallel sections
2540   {
2541 #pragma omp parallel for simd
2542     for (int i = 0; i < 10; ++i)
2543       ;
2544   }
2545 #pragma omp parallel sections
2546   {
2547 #pragma omp parallel sections
2548     {
2549       bar();
2550     }
2551   }
2552 #pragma omp parallel sections
2553   {
2554 #pragma omp task
2555     {
2556       bar();
2557     }
2558   }
2559 #pragma omp parallel sections
2560   {
2561 #pragma omp taskyield
2562   }
2563 #pragma omp parallel sections
2564   {
2565 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
2566   }
2567 #pragma omp parallel sections
2568   {
2569 #pragma omp taskwait
2570   }
2571 #pragma omp parallel sections
2572   {
2573 #pragma omp flush
2574   }
2575 #pragma omp parallel sections
2576   {
2577 #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?}}
2578     bar();
2579   }
2580 #pragma omp parallel sections
2581   {
2582 #pragma omp atomic
2583     ++a;
2584   }
2585 #pragma omp parallel sections
2586   {
2587 #pragma omp target
2588     ++a;
2589   }
2590 #pragma omp parallel sections
2591   {
2592 #pragma omp target parallel
2593     ++a;
2594   }
2595 #pragma omp parallel sections
2596   {
2597 #pragma omp target parallel for
2598     for (int i = 0; i < 10; ++i)
2599       ;
2600   }
2601 #pragma omp parallel sections
2602   {
2603 #pragma omp target enter data map(to: a)
2604   }
2605 #pragma omp parallel sections
2606   {
2607 #pragma omp target exit data map(from: a)
2608   }
2609 #pragma omp parallel sections
2610   {
2611 #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?}}
2612     ++a;
2613   }
2614 #pragma omp parallel sections
2615   {
2616 #pragma omp taskloop
2617   for (int i = 0; i < 10; ++i)
2618     ++a;
2619   }
2620 #pragma omp parallel sections
2621   {
2622 #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?}}
2623     for (int i = 0; i < 10; ++i)
2624       ;
2625   }
2626 #pragma omp parallel sections
2627   {
2628 #pragma omp target update to(a)
2629   }
2630 #pragma omp parallel sections
2631   {
2632 #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?}}
2633     for (int i = 0; i < 10; ++i)
2634       ;
2635   }
2636 #pragma omp parallel sections
2637   {
2638 #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?}}
2639     for (int i = 0; i < 10; ++i)
2640       ;
2641   }
2642 #pragma omp parallel sections
2643   {
2644 #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?}}
2645     for (int i = 0; i < 10; ++i)
2646       ;
2647   }
2648 #pragma omp parallel sections
2649   {
2650 #pragma omp target simd // OK
2651     for (int i = 0; i < 10; ++i)
2652       ;
2653   }
2654 #pragma omp parallel sections
2655   {
2656 #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?}}
2657     for (int i = 0; i < 10; ++i)
2658       ;
2659   }
2660 #pragma omp parallel sections
2661   {
2662 #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?}}
2663     for (int i = 0; i < 10; ++i)
2664       ;
2665   }
2666 
2667 // TASK DIRECTIVE
2668 #pragma omp task
2669 #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?}}
2670   for (int i = 0; i < 10; ++i)
2671     ;
2672 #pragma omp task
2673 #pragma omp simd
2674   for (int i = 0; i < 10; ++i)
2675     ;
2676 #pragma omp task
2677 #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?}}
2678   for (int i = 0; i < 10; ++i)
2679     ;
2680 #pragma omp task
2681 #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?}}
2682   {
2683     bar();
2684   }
2685 #pragma omp task
2686 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
2687   {
2688     bar();
2689   }
2690 #pragma omp task
2691 #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?}}
2692   bar();
2693 #pragma omp task
2694 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
2695   bar();
2696 #pragma omp task
2697 #pragma omp critical
2698   bar();
2699 
2700 #pragma omp task
2701 #pragma omp parallel for
2702   for (int i = 0; i < 10; ++i)
2703     ;
2704 #pragma omp task
2705 #pragma omp parallel for simd
2706   for (int i = 0; i < 10; ++i)
2707     ;
2708 #pragma omp task
2709 #pragma omp parallel sections
2710   {
2711     bar();
2712   }
2713 #pragma omp task
2714 #pragma omp task
2715   {
2716     bar();
2717   }
2718 #pragma omp task
2719   {
2720 #pragma omp taskyield
2721     bar();
2722   }
2723 #pragma omp task
2724   {
2725 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
2726     bar();
2727   }
2728 #pragma omp task
2729   {
2730 #pragma omp taskwait
2731     bar();
2732   }
2733 #pragma omp task
2734   {
2735 #pragma omp flush
2736     bar();
2737   }
2738 #pragma omp task
2739   {
2740 #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?}}
2741     bar();
2742   }
2743 #pragma omp task
2744   {
2745 #pragma omp atomic
2746     ++a;
2747   }
2748 #pragma omp task
2749   {
2750 #pragma omp target
2751     ++a;
2752   }
2753 #pragma omp task
2754   {
2755 #pragma omp target parallel
2756     ++a;
2757   }
2758 #pragma omp task
2759 #pragma omp target parallel for
2760   for (int i = 0; i < 10; ++i)
2761     ;
2762 #pragma omp task
2763   {
2764 #pragma omp target enter data map(to: a)
2765     ++a;
2766   }
2767 #pragma omp task
2768   {
2769 #pragma omp target exit data map(from: a)
2770     ++a;
2771   }
2772 #pragma omp task
2773   {
2774 #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?}}
2775     ++a;
2776   }
2777 #pragma omp task
2778   {
2779 #pragma omp taskloop
2780   for (int i = 0; i < 10; ++i)
2781     ++a;
2782   }
2783 #pragma omp task
2784   {
2785 #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?}}
2786     for (int i = 0; i < 10; ++i)
2787       ;
2788   }
2789 #pragma omp task
2790   {
2791 #pragma omp target update to(a)
2792     bar();
2793   }
2794 #pragma omp task
2795   {
2796 #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?}}
2797     for (int i = 0; i < 10; ++i)
2798       ;
2799   }
2800 #pragma omp task
2801   {
2802 #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?}}
2803     for (int i = 0; i < 10; ++i)
2804       ;
2805   }
2806 #pragma omp task
2807   {
2808 #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?}}
2809     for (int i = 0; i < 10; ++i)
2810       ;
2811   }
2812 #pragma omp task
2813   {
2814 #pragma omp target simd // OK
2815     for (int i = 0; i < 10; ++i)
2816       ;
2817   }
2818 #pragma omp task
2819   {
2820 #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?}}
2821     for (int i = 0; i < 10; ++i)
2822       ;
2823   }
2824 #pragma omp task
2825   {
2826 #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?}}
2827     for (int i = 0; i < 10; ++i)
2828       ;
2829   }
2830 
2831 // ORDERED DIRECTIVE
2832 #pragma omp ordered
2833   {
2834 #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?}}
2835     for (int i = 0; i < 10; ++i)
2836       ;
2837   }
2838 #pragma omp ordered
2839   {
2840 #pragma omp simd
2841     for (int i = 0; i < 10; ++i)
2842       ;
2843   }
2844 #pragma omp ordered
2845   {
2846 #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?}}
2847     for (int i = 0; i < 10; ++i)
2848       ;
2849   }
2850 #pragma omp ordered
2851   {
2852 #pragma omp parallel
2853     for (int i = 0; i < 10; ++i)
2854       ;
2855   }
2856 #pragma omp ordered
2857   {
2858 #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?}}
2859     {
2860       bar();
2861     }
2862   }
2863 #pragma omp ordered
2864   {
2865 #pragma omp master // OK, though second 'ordered' is redundant
2866     {
2867       bar();
2868     }
2869   }
2870 #pragma omp ordered
2871   {
2872 #pragma omp critical
2873     {
2874       bar();
2875     }
2876   }
2877 #pragma omp ordered
2878   {
2879 #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?}}
2880     {
2881       bar();
2882     }
2883   }
2884 #pragma omp ordered
2885   {
2886 #pragma omp parallel for ordered
2887     for (int j = 0; j < 10; ++j) {
2888 #pragma omp ordered // OK
2889       {
2890         bar();
2891       }
2892     }
2893   }
2894 #pragma omp ordered
2895   {
2896 #pragma omp parallel for simd ordered
2897     for (int j = 0; j < 10; ++j) {
2898 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2899       {
2900         bar();
2901       }
2902     }
2903   }
2904 #pragma omp ordered
2905   {
2906 #pragma omp parallel for simd ordered
2907     for (int j = 0; j < 10; ++j) {
2908 #pragma omp ordered simd
2909       {
2910         bar();
2911       }
2912     }
2913   }
2914 #pragma omp ordered
2915   {
2916 #pragma omp parallel for
2917     for (int i = 0; i < 10; ++i)
2918       ;
2919   }
2920 #pragma omp ordered
2921   {
2922 #pragma omp parallel for simd
2923     for (int i = 0; i < 10; ++i)
2924       ;
2925   }
2926 #pragma omp ordered
2927   {
2928 #pragma omp parallel sections
2929     {
2930       bar();
2931     }
2932   }
2933 #pragma omp ordered
2934   {
2935 #pragma omp task
2936     {
2937       bar();
2938     }
2939   }
2940 #pragma omp ordered
2941   {
2942 #pragma omp taskyield
2943     bar();
2944   }
2945 #pragma omp ordered
2946   {
2947 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
2948     bar();
2949   }
2950 #pragma omp ordered
2951   {
2952 #pragma omp taskwait
2953     bar();
2954   }
2955 #pragma omp ordered
2956   {
2957 #pragma omp flush
2958     bar();
2959   }
2960 #pragma omp ordered
2961   {
2962 #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?}}
2963     bar();
2964   }
2965 #pragma omp ordered
2966   {
2967 #pragma omp atomic
2968     ++a;
2969   }
2970 #pragma omp ordered
2971   {
2972 #pragma omp target
2973     ++a;
2974   }
2975 #pragma omp ordered
2976   {
2977 #pragma omp target parallel
2978     ++a;
2979   }
2980 #pragma omp ordered
2981   {
2982 #pragma omp target parallel for ordered
2983     for (int j = 0; j < 10; ++j) {
2984 #pragma omp ordered // OK
2985       {
2986         bar();
2987       }
2988     }
2989   }
2990 #pragma omp ordered
2991   {
2992 #pragma omp target parallel for
2993     for (int i = 0; i < 10; ++i)
2994       ;
2995   }
2996 #pragma omp ordered
2997   {
2998 #pragma omp target enter data map(to: a)
2999     ++a;
3000   }
3001 #pragma omp ordered
3002   {
3003 #pragma omp target exit data map(from: a)
3004     ++a;
3005   }
3006 #pragma omp ordered
3007   {
3008 #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?}}
3009     ++a;
3010   }
3011 #pragma omp ordered
3012   {
3013 #pragma omp taskloop
3014   for (int i = 0; i < 10; ++i)
3015     ++a;
3016   }
3017 #pragma omp ordered
3018   {
3019 #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?}}
3020     for (int i = 0; i < 10; ++i)
3021       ;
3022   }
3023 #pragma omp ordered
3024   {
3025     bar();
3026 #pragma omp target update to(a)
3027     bar();
3028   }
3029 #pragma omp ordered
3030   {
3031 #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?}}
3032     for (int i = 0; i < 10; ++i)
3033       ;
3034   }
3035 #pragma omp ordered
3036   {
3037 #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?}}
3038     for (int i = 0; i < 10; ++i)
3039       ;
3040   }
3041 #pragma omp ordered
3042   {
3043 #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?}}
3044     for (int i = 0; i < 10; ++i)
3045       ;
3046   }
3047 #pragma omp ordered
3048   {
3049 #pragma omp target simd // OK
3050     for (int i = 0; i < 10; ++i)
3051       ;
3052   }
3053 #pragma omp ordered
3054   {
3055 #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?}}
3056     for (int i = 0; i < 10; ++i)
3057       ;
3058   }
3059 #pragma omp ordered
3060   {
3061 #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?}}
3062     for (int i = 0; i < 10; ++i)
3063       ;
3064   }
3065 
3066 // ATOMIC DIRECTIVE
3067 #pragma omp atomic
3068   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3069   // expected-note@+1 {{expected an expression statement}}
3070   {
3071 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3072     for (int i = 0; i < 10; ++i)
3073       ;
3074   }
3075 #pragma omp atomic
3076   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3077   // expected-note@+1 {{expected an expression statement}}
3078   {
3079 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3080     for (int i = 0; i < 10; ++i)
3081       ;
3082   }
3083 #pragma omp atomic
3084   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3085   // expected-note@+1 {{expected an expression statement}}
3086   {
3087 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3088     for (int i = 0; i < 10; ++i)
3089       ;
3090   }
3091 #pragma omp atomic
3092   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3093   // expected-note@+1 {{expected an expression statement}}
3094   {
3095 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3096     for (int i = 0; i < 10; ++i)
3097       ;
3098   }
3099 #pragma omp atomic
3100   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3101   // expected-note@+1 {{expected an expression statement}}
3102   {
3103 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3104     {
3105       bar();
3106     }
3107   }
3108 #pragma omp atomic
3109   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3110   // expected-note@+1 {{expected an expression statement}}
3111   {
3112 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3113     {
3114       bar();
3115     }
3116   }
3117 #pragma omp atomic
3118   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3119   // expected-note@+1 {{expected an expression statement}}
3120   {
3121 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3122     {
3123       bar();
3124     }
3125   }
3126 #pragma omp atomic
3127   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3128   // expected-note@+1 {{expected an expression statement}}
3129   {
3130 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3131     {
3132       bar();
3133     }
3134   }
3135 #pragma omp atomic
3136   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3137   // expected-note@+1 {{expected an expression statement}}
3138   {
3139 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3140     {
3141       bar();
3142     }
3143   }
3144 #pragma omp atomic
3145   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3146   // expected-note@+1 {{expected an expression statement}}
3147   {
3148 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3149     for (int i = 0; i < 10; ++i)
3150       ;
3151   }
3152 #pragma omp atomic
3153   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3154   // expected-note@+1 {{expected an expression statement}}
3155   {
3156 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3157     for (int i = 0; i < 10; ++i)
3158       ;
3159   }
3160 #pragma omp atomic
3161   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3162   // expected-note@+1 {{expected an expression statement}}
3163   {
3164 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3165     {
3166       bar();
3167     }
3168   }
3169 #pragma omp atomic
3170   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3171   // expected-note@+1 {{expected an expression statement}}
3172   {
3173 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3174     {
3175       bar();
3176     }
3177   }
3178 #pragma omp atomic
3179   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3180   // expected-note@+1 {{expected an expression statement}}
3181   {
3182 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3183     bar();
3184   }
3185 #pragma omp atomic
3186   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3187   // expected-note@+1 {{expected an expression statement}}
3188   {
3189 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3190     bar();
3191   }
3192 #pragma omp atomic
3193   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3194   // expected-note@+1 {{expected an expression statement}}
3195   {
3196 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3197     bar();
3198   }
3199 #pragma omp atomic
3200   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3201   // expected-note@+1 {{expected an expression statement}}
3202   {
3203 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3204     bar();
3205   }
3206 #pragma omp atomic
3207   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3208   // expected-note@+1 {{expected an expression statement}}
3209   {
3210 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3211     bar();
3212   }
3213 #pragma omp atomic
3214   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3215   // expected-note@+1 {{expected an expression statement}}
3216   {
3217 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3218     ++a;
3219   }
3220 #pragma omp atomic
3221   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3222   // expected-note@+1 {{expected an expression statement}}
3223   {
3224 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3225     ++a;
3226   }
3227 #pragma omp atomic
3228   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3229   // expected-note@+1 {{expected an expression statement}}
3230   {
3231 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3232     ++a;
3233   }
3234 #pragma omp atomic
3235   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3236   // expected-note@+1 {{expected an expression statement}}
3237   {
3238 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3239     for (int i = 0; i < 10; ++i)
3240       ;
3241   }
3242 #pragma omp atomic
3243   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3244   // expected-note@+1 {{expected an expression statement}}
3245   {
3246 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3247     ++a;
3248   }
3249 #pragma omp atomic
3250   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3251   // expected-note@+1 {{expected an expression statement}}
3252   {
3253 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3254     ++a;
3255   }
3256 #pragma omp atomic
3257   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3258   // expected-note@+1 {{expected an expression statement}}
3259   {
3260 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3261     ++a;
3262   }
3263 #pragma omp atomic
3264   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3265   // expected-note@+1 {{expected an expression statement}}
3266   {
3267 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3268   for (int i = 0; i < 10; ++i)
3269     ++a;
3270   }
3271 #pragma omp atomic
3272   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3273   // expected-note@+1 {{expected an expression statement}}
3274   {
3275 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3276     for (int i = 0; i < 10; ++i)
3277       ;
3278   }
3279 #pragma omp atomic
3280   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3281   // expected-note@+1 {{expected an expression statement}}
3282   {
3283 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3284     bar();
3285   }
3286 #pragma omp atomic
3287   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3288   // expected-note@+1 {{expected an expression statement}}
3289   {
3290 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3291     for (int i = 0; i < 10; ++i)
3292       ;
3293   }
3294 #pragma omp atomic
3295   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3296   // expected-note@+1 {{expected an expression statement}}
3297   {
3298 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3299     for (int i = 0; i < 10; ++i)
3300       ;
3301   }
3302 #pragma omp atomic
3303   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3304   // expected-note@+1 {{expected an expression statement}}
3305   {
3306 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3307     for (int i = 0; i < 10; ++i)
3308       ;
3309   }
3310 #pragma omp atomic
3311   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3312   // expected-note@+1 {{expected an expression statement}}
3313   {
3314 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3315     for (int i = 0; i < 10; ++i)
3316       ;
3317   }
3318 #pragma omp atomic
3319   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3320   // expected-note@+1 {{expected an expression statement}}
3321   {
3322 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3323     for (int i = 0; i < 10; ++i)
3324       ;
3325   }
3326 #pragma omp ordered
3327   {
3328 #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?}}
3329     for (int i = 0; i < 10; ++i)
3330       ;
3331   }
3332 
3333 // TARGET DIRECTIVE
3334 #pragma omp target
3335 #pragma omp parallel
3336   bar();
3337 #pragma omp target
3338 #pragma omp for
3339   for (int i = 0; i < 10; ++i)
3340     ;
3341 #pragma omp target
3342 #pragma omp simd
3343   for (int i = 0; i < 10; ++i)
3344     ;
3345 #pragma omp target
3346 #pragma omp for simd
3347   for (int i = 0; i < 10; ++i)
3348     ;
3349 #pragma omp target
3350 #pragma omp sections
3351   {
3352     bar();
3353   }
3354 #pragma omp target
3355 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3356   {
3357     bar();
3358   }
3359 #pragma omp target
3360 #pragma omp single
3361   bar();
3362 
3363 #pragma omp target
3364 #pragma omp master
3365   {
3366     bar();
3367   }
3368 #pragma omp target
3369 #pragma omp critical
3370   {
3371     bar();
3372   }
3373 #pragma omp target
3374 #pragma omp parallel for
3375   for (int i = 0; i < 10; ++i)
3376     ;
3377 #pragma omp target
3378 #pragma omp parallel for simd
3379   for (int i = 0; i < 10; ++i)
3380     ;
3381 #pragma omp target
3382 #pragma omp parallel sections
3383   {
3384     bar();
3385   }
3386 #pragma omp target
3387 #pragma omp task
3388   {
3389     bar();
3390   }
3391 #pragma omp target
3392   {
3393 #pragma omp taskyield
3394     bar();
3395   }
3396 #pragma omp target
3397   {
3398 #pragma omp barrier
3399     bar();
3400   }
3401 #pragma omp target
3402   {
3403 #pragma omp taskwait
3404     bar();
3405   }
3406 #pragma omp target
3407   {
3408 #pragma omp flush
3409     bar();
3410   }
3411 #pragma omp target
3412   {
3413 #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?}}
3414     bar();
3415   }
3416 #pragma omp target
3417   {
3418 #pragma omp atomic
3419     ++a;
3420   }
3421 #pragma omp target
3422   {
3423 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
3424     ++a;
3425   }
3426 #pragma omp target
3427   {
3428 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
3429     ++a;
3430   }
3431 #pragma omp target
3432 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
3433   for (int i = 0; i < 10; ++i)
3434     ;
3435 #pragma omp target
3436   {
3437 #pragma omp teams
3438     ++a;
3439   }
3440 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3441   {
3442     ++a;           // expected-note {{statement outside teams construct here}}
3443 #pragma omp teams  // expected-note {{nested teams construct here}}
3444     ++a;
3445   }
3446 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3447   {
3448     while (0)      // expected-note {{statement outside teams construct here}}
3449 #pragma omp teams  // expected-note {{nested teams construct here}}
3450     ++a;
3451   }
3452 #pragma omp target
3453   {
3454 #pragma omp taskloop
3455   for (int i = 0; i < 10; ++i)
3456     ++a;
3457   }
3458 #pragma omp target
3459   {
3460 #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?}}
3461     for (int i = 0; i < 10; ++i)
3462       ;
3463   }
3464 #pragma omp target
3465   {
3466 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
3467   }
3468 #pragma omp target
3469   {
3470 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
3471   }
3472 #pragma omp target
3473   {
3474 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
3475   }
3476 #pragma omp target
3477   {
3478 #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?}}
3479     for (int i = 0; i < 10; ++i)
3480       ;
3481   }
3482 #pragma omp target
3483   {
3484 #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?}}
3485     for (int i = 0; i < 10; ++i)
3486       ;
3487   }
3488 #pragma omp target
3489   {
3490 #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?}}
3491     for (int i = 0; i < 10; ++i)
3492       ;
3493   }
3494 #pragma omp target
3495   {
3496 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
3497     for (int i = 0; i < 10; ++i)
3498       ;
3499   }
3500 #pragma omp target
3501   {
3502 #pragma omp teams distribute // OK
3503     for (int i = 0; i < 10; ++i)
3504       ;
3505   }
3506 #pragma omp target
3507   {
3508 #pragma omp teams distribute simd // OK
3509     for (int i = 0; i < 10; ++i)
3510       ;
3511   }
3512 
3513 // TARGET PARALLEL DIRECTIVE
3514 #pragma omp target parallel
3515 #pragma omp parallel
3516   bar();
3517 #pragma omp target parallel
3518 #pragma omp for
3519   for (int i = 0; i < 10; ++i)
3520     ;
3521 #pragma omp target parallel
3522 #pragma omp simd
3523   for (int i = 0; i < 10; ++i)
3524     ;
3525 #pragma omp target parallel
3526 #pragma omp for simd
3527   for (int i = 0; i < 10; ++i)
3528     ;
3529 #pragma omp target parallel
3530 #pragma omp sections
3531   {
3532     bar();
3533   }
3534 #pragma omp target parallel
3535 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
3536   {
3537     bar();
3538   }
3539 #pragma omp target parallel
3540 #pragma omp single
3541   bar();
3542 
3543 #pragma omp target parallel
3544 #pragma omp master
3545   {
3546     bar();
3547   }
3548 #pragma omp target parallel
3549 #pragma omp critical
3550   {
3551     bar();
3552   }
3553 #pragma omp target parallel
3554 #pragma omp parallel for
3555   for (int i = 0; i < 10; ++i)
3556     ;
3557 #pragma omp target parallel
3558 #pragma omp parallel for simd
3559   for (int i = 0; i < 10; ++i)
3560     ;
3561 #pragma omp target parallel
3562 #pragma omp parallel sections
3563   {
3564     bar();
3565   }
3566 #pragma omp target parallel
3567 #pragma omp task
3568   {
3569     bar();
3570   }
3571 #pragma omp target parallel
3572   {
3573 #pragma omp taskyield
3574     bar();
3575   }
3576 #pragma omp target parallel
3577   {
3578 #pragma omp barrier
3579     bar();
3580   }
3581 #pragma omp target parallel
3582   {
3583 #pragma omp taskwait
3584     bar();
3585   }
3586 #pragma omp target parallel
3587   {
3588 #pragma omp flush
3589     bar();
3590   }
3591 #pragma omp target parallel
3592   {
3593 #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?}}
3594     bar();
3595   }
3596 #pragma omp target parallel
3597   {
3598 #pragma omp atomic
3599     ++a;
3600   }
3601 #pragma omp target parallel
3602   {
3603 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
3604     ++a;
3605   }
3606 #pragma omp target parallel
3607   {
3608 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
3609     ++a;
3610   }
3611 #pragma omp target parallel
3612 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
3613   for (int i = 0; i < 10; ++i)
3614     ;
3615 #pragma omp target parallel
3616   {
3617 #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?}}
3618     ++a;
3619   }
3620 #pragma omp target parallel
3621   {
3622     ++a;
3623 #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?}}
3624     ++a;
3625   }
3626 #pragma omp target parallel
3627   {
3628 #pragma omp taskloop
3629   for (int i = 0; i < 10; ++i)
3630     ++a;
3631   }
3632 #pragma omp target parallel
3633   {
3634 #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?}}
3635     for (int i = 0; i < 10; ++i)
3636       ;
3637   }
3638 #pragma omp target parallel
3639   {
3640 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3641   }
3642 #pragma omp target parallel
3643   {
3644 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3645   }
3646 #pragma omp target parallel
3647   {
3648 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3649   }
3650 #pragma omp target parallel
3651   {
3652 #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?}}
3653     for (int i = 0; i < 10; ++i)
3654       ;
3655   }
3656 #pragma omp target parallel
3657   {
3658 #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?}}
3659     for (int i = 0; i < 10; ++i)
3660       ;
3661   }
3662 #pragma omp target parallel
3663   {
3664 #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?}}
3665     for (int i = 0; i < 10; ++i)
3666       ;
3667   }
3668 #pragma omp target parallel
3669   {
3670 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
3671     for (int i = 0; i < 10; ++i)
3672       ;
3673   }
3674 #pragma omp target parallel
3675   {
3676 #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?}}
3677     for (int i = 0; i < 10; ++i)
3678       ;
3679   }
3680 #pragma omp target parallel
3681   {
3682 #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?}}
3683     for (int i = 0; i < 10; ++i)
3684       ;
3685   }
3686 
3687 // TARGET PARALLEL FOR DIRECTIVE
3688 #pragma omp target parallel for
3689   for (int i = 0; i < 10; ++i) {
3690 #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?}}
3691     for (int i = 0; i < 10; ++i)
3692       ;
3693   }
3694 #pragma omp target parallel for
3695   for (int i = 0; i < 10; ++i) {
3696 #pragma omp simd
3697     for (int i = 0; i < 10; ++i)
3698       ;
3699   }
3700 #pragma omp target parallel for
3701   for (int i = 0; i < 10; ++i) {
3702 #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?}}
3703     for (int i = 0; i < 10; ++i)
3704       ;
3705   }
3706 #pragma omp target parallel for
3707   for (int i = 0; i < 10; ++i) {
3708 #pragma omp parallel
3709     for (int i = 0; i < 10; ++i)
3710       ;
3711   }
3712 #pragma omp target parallel for
3713   for (int i = 0; i < 10; ++i) {
3714 #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?}}
3715     {
3716       bar();
3717     }
3718   }
3719 #pragma omp target parallel for
3720   for (int i = 0; i < 10; ++i) {
3721 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
3722     {
3723       bar();
3724     }
3725   }
3726 #pragma omp target parallel for
3727   for (int i = 0; i < 10; ++i) {
3728 #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?}}
3729     {
3730       bar();
3731     }
3732   }
3733 
3734 #pragma omp target parallel for
3735   for (int i = 0; i < 10; ++i) {
3736 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
3737     {
3738       bar();
3739     }
3740   }
3741 
3742 #pragma omp target parallel for
3743   for (int i = 0; i < 10; ++i) {
3744 #pragma omp critical
3745     {
3746       bar();
3747     }
3748   }
3749 
3750 #pragma omp target parallel for
3751   for (int i = 0; i < 10; ++i) {
3752 #pragma omp parallel
3753     {
3754 #pragma omp single // OK
3755       {
3756         bar();
3757       }
3758 #pragma omp for // OK
3759       for (int i = 0; i < 10; ++i)
3760         ;
3761 #pragma omp for simd // OK
3762       for (int i = 0; i < 10; ++i)
3763         ;
3764 #pragma omp sections // OK
3765       {
3766         bar();
3767       }
3768     }
3769   }
3770 #pragma omp target parallel for
3771   for (int i = 0; i < 10; ++i) {
3772 #pragma omp parallel for
3773     for (int i = 0; i < 10; ++i)
3774       ;
3775   }
3776 #pragma omp target parallel for
3777   for (int i = 0; i < 10; ++i) {
3778 #pragma omp parallel for simd
3779     for (int i = 0; i < 10; ++i)
3780       ;
3781   }
3782 #pragma omp target parallel for
3783   for (int i = 0; i < 10; ++i) {
3784 #pragma omp parallel sections
3785     {
3786       bar();
3787     }
3788   }
3789 #pragma omp target parallel for
3790   for (int i = 0; i < 10; ++i) {
3791 #pragma omp task
3792     {
3793       bar();
3794     }
3795   }
3796 #pragma omp target parallel for
3797   for (int i = 0; i < 10; ++i) {
3798 #pragma omp taskyield
3799     bar();
3800   }
3801 #pragma omp target parallel for
3802   for (int i = 0; i < 10; ++i) {
3803 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
3804     bar();
3805   }
3806 #pragma omp target parallel for
3807   for (int i = 0; i < 10; ++i) {
3808 #pragma omp taskwait
3809     bar();
3810   }
3811 #pragma omp target parallel for
3812   for (int i = 0; i < 10; ++i) {
3813 #pragma omp flush
3814     bar();
3815   }
3816 #pragma omp target parallel for
3817   for (int i = 0; i < 10; ++i) {
3818 #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?}}
3819     bar();
3820   }
3821 #pragma omp target parallel for ordered
3822   for (int i = 0; i < 10; ++i) {
3823 #pragma omp ordered // OK
3824     bar();
3825   }
3826 #pragma omp target parallel for
3827   for (int i = 0; i < 10; ++i) {
3828 #pragma omp atomic
3829     ++a;
3830   }
3831 #pragma omp target parallel for
3832   for (int i = 0; i < 10; ++i) {
3833 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
3834     ++a;
3835   }
3836 #pragma omp target parallel for
3837   for (int i = 0; i < 10; ++i) {
3838 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
3839     ++a;
3840   }
3841 #pragma omp target parallel for
3842   for (int i = 0; i < 10; ++i) {
3843 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
3844     for (int i = 0; i < 10; ++i)
3845       ;
3846   }
3847 #pragma omp target parallel for
3848   for (int i = 0; i < 10; ++i) {
3849 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3850     ++a;
3851   }
3852 #pragma omp target parallel for
3853   for (int i = 0; i < 10; ++i) {
3854 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3855     ++a;
3856   }
3857 #pragma omp target parallel for
3858   for (int i = 0; i < 10; ++i) {
3859 #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?}}
3860     ++a;
3861   }
3862 #pragma omp target parallel for
3863   for (int i = 0; i < 10; ++i) {
3864 #pragma omp taskloop
3865   for (int i = 0; i < 10; ++i)
3866     ++a;
3867   }
3868 #pragma omp target parallel for
3869   for (int i = 0; i < 10; ++i) {
3870 #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?}}
3871     for (int j = 0; j < 10; ++j)
3872       ;
3873   }
3874 #pragma omp target parallel for
3875   for (int i = 0; i < 10; ++i) {
3876 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3877   }
3878 #pragma omp target parallel for
3879   for (int i = 0; i < 10; ++i) {
3880 #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?}}
3881     for (int j = 0; j < 10; ++j)
3882       ;
3883   }
3884 #pragma omp target parallel for
3885   for (int i = 0; i < 10; ++i) {
3886 #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?}}
3887     for (int j = 0; j < 10; ++j)
3888       ;
3889   }
3890 #pragma omp target parallel for
3891   for (int i = 0; i < 10; ++i) {
3892 #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?}}
3893     for (int j = 0; j < 10; ++j)
3894       ;
3895   }
3896 #pragma omp target parallel for
3897   for (int i = 0; i < 10; ++i) {
3898 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
3899     for (int j = 0; j < 10; ++j)
3900       ;
3901   }
3902 #pragma omp target parallel for
3903   for (int i = 0; i < 10; ++i) {
3904 #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?}}
3905     for (int j = 0; j < 10; ++j)
3906       ;
3907   }
3908 #pragma omp target parallel for
3909   for (int i = 0; i < 10; ++i) {
3910 #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?}}
3911     for (int j = 0; j < 10; ++j)
3912       ;
3913   }
3914 
3915 // TEAMS DIRECTIVE
3916 #pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
3917   bar();
3918 #pragma omp target
3919 #pragma omp teams
3920 #pragma omp parallel
3921   bar();
3922 #pragma omp target
3923 #pragma omp teams
3924 #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?}}
3925   for (int i = 0; i < 10; ++i)
3926     ;
3927 #pragma omp target
3928 #pragma omp teams
3929 #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?}}
3930   for (int i = 0; i < 10; ++i)
3931     ;
3932 #pragma omp target
3933 #pragma omp teams
3934 #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?}}
3935   for (int i = 0; i < 10; ++i)
3936     ;
3937 #pragma omp target
3938 #pragma omp teams
3939 #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?}}
3940   {
3941     bar();
3942   }
3943 #pragma omp target
3944 #pragma omp teams
3945 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
3946   {
3947     bar();
3948   }
3949 #pragma omp target
3950 #pragma omp teams
3951 #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?}}
3952   bar();
3953 
3954 #pragma omp target
3955 #pragma omp teams
3956 #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?}}
3957   {
3958     bar();
3959   }
3960 #pragma omp target
3961 #pragma omp teams
3962 #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?}}
3963   {
3964     bar();
3965   }
3966 #pragma omp target
3967 #pragma omp teams
3968 #pragma omp parallel for
3969   for (int i = 0; i < 10; ++i)
3970     ;
3971 #pragma omp target
3972 #pragma omp teams
3973 #pragma omp parallel for simd
3974   for (int i = 0; i < 10; ++i)
3975     ;
3976 #pragma omp target
3977 #pragma omp teams
3978 #pragma omp parallel sections
3979   {
3980     bar();
3981   }
3982 #pragma omp target
3983 #pragma omp teams
3984 #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?}}
3985   {
3986     bar();
3987   }
3988 #pragma omp target
3989 #pragma omp teams
3990   {
3991 #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?}}
3992     bar();
3993   }
3994 #pragma omp target
3995 #pragma omp teams
3996   {
3997 #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?}}
3998     bar();
3999   }
4000 #pragma omp target
4001 #pragma omp teams
4002   {
4003 #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?}}
4004     bar();
4005   }
4006 #pragma omp target
4007 #pragma omp teams
4008   {
4009 #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?}}
4010     bar();
4011   }
4012 #pragma omp target
4013 #pragma omp teams
4014   {
4015 #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?}}
4016     bar();
4017   }
4018 #pragma omp target
4019 #pragma omp teams
4020   {
4021 #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?}}
4022     ++a;
4023   }
4024 #pragma omp target
4025 #pragma omp teams
4026   {
4027 #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?}}
4028     ++a;
4029   }
4030 #pragma omp target
4031 #pragma omp teams
4032   {
4033 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4034     ++a;
4035   }
4036 #pragma omp target
4037 #pragma omp teams
4038 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4039   for (int i = 0; i < 10; ++i)
4040     ;
4041 #pragma omp target
4042 #pragma omp teams
4043   {
4044 #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?}}
4045     ++a;
4046   }
4047 #pragma omp target
4048 #pragma omp teams
4049   {
4050 #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?}}
4051     ++a;
4052   }
4053 #pragma omp target
4054 #pragma omp teams
4055   {
4056 #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?}}
4057     ++a;
4058   }
4059 #pragma omp target
4060 #pragma omp teams
4061   {
4062 #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?}}
4063   for (int i = 0; i < 10; ++i)
4064     ++a;
4065   }
4066 #pragma omp target
4067 #pragma omp teams
4068 #pragma omp distribute
4069   for (int i = 0; i < 10; ++i)
4070     ;
4071 #pragma omp target
4072 #pragma omp teams
4073 #pragma omp distribute
4074   for (int i = 0; i < 10; ++i)
4075     ;
4076 #pragma omp distribute
4077   for (int j = 0; j < 10; ++j)
4078     ;
4079 #pragma omp target
4080 #pragma omp teams
4081   {
4082 #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?}}
4083   }
4084 #pragma omp target
4085 #pragma omp teams
4086   {
4087 #pragma omp distribute parallel for
4088   for (int i = 0; i < 10; ++i)
4089     ;
4090 #pragma omp distribute parallel for
4091   for (int j = 0; j < 10; ++j)
4092     ;
4093   }
4094 #pragma omp target
4095 #pragma omp teams
4096   {
4097 #pragma omp distribute parallel for simd
4098   for (int i = 0; i < 10; ++i)
4099     ;
4100 #pragma omp distribute parallel for simd
4101   for (int j = 0; j < 10; ++j)
4102     ;
4103   }
4104 #pragma omp target
4105 #pragma omp teams
4106   {
4107 #pragma omp distribute simd
4108   for (int i = 0; i < 10; ++i)
4109     ;
4110 #pragma omp distribute simd
4111   for (int j = 0; j < 10; ++j)
4112     ;
4113   }
4114 #pragma omp target
4115 #pragma omp teams
4116   {
4117 #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?}}
4118   for (int i = 0; i < 10; ++i)
4119     ;
4120   }
4121 #pragma omp target
4122 #pragma omp teams
4123   {
4124 #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?}}
4125   for (int i = 0; i < 10; ++i)
4126     ;
4127   }
4128 #pragma omp target
4129 #pragma omp teams
4130   {
4131 #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?}}
4132   for (int i = 0; i < 10; ++i)
4133     ;
4134   }
4135 
4136 // TASKLOOP DIRECTIVE
4137 #pragma omp taskloop
4138   for (int i = 0; i < 10; ++i) {
4139 #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?}}
4140     for (int i = 0; i < 10; ++i)
4141       ;
4142   }
4143 #pragma omp taskloop
4144   for (int i = 0; i < 10; ++i) {
4145 #pragma omp simd
4146     for (int i = 0; i < 10; ++i)
4147       ;
4148   }
4149 #pragma omp taskloop
4150   for (int i = 0; i < 10; ++i) {
4151 #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?}}
4152     for (int i = 0; i < 10; ++i)
4153       ;
4154   }
4155 #pragma omp taskloop
4156   for (int i = 0; i < 10; ++i) {
4157 #pragma omp parallel
4158     for (int i = 0; i < 10; ++i)
4159       ;
4160   }
4161 #pragma omp taskloop
4162   for (int i = 0; i < 10; ++i) {
4163 #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?}}
4164     {
4165       bar();
4166     }
4167   }
4168 #pragma omp taskloop
4169   for (int i = 0; i < 10; ++i) {
4170 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
4171     {
4172       bar();
4173     }
4174   }
4175 #pragma omp taskloop
4176   for (int i = 0; i < 10; ++i) {
4177 #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?}}
4178     {
4179       bar();
4180     }
4181   }
4182 
4183 #pragma omp taskloop
4184   for (int i = 0; i < 10; ++i) {
4185 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
4186     {
4187       bar();
4188     }
4189   }
4190 #pragma omp taskloop
4191   for (int i = 0; i < 10; ++i) {
4192 #pragma omp critical
4193     {
4194       bar();
4195     }
4196   }
4197 #pragma omp taskloop
4198   for (int i = 0; i < 10; ++i) {
4199 #pragma omp parallel
4200     {
4201 #pragma omp single // OK
4202       {
4203         bar();
4204       }
4205 #pragma omp for // OK
4206       for (int i = 0; i < 10; ++i)
4207         ;
4208 #pragma omp sections // OK
4209       {
4210         bar();
4211       }
4212     }
4213   }
4214 #pragma omp taskloop
4215   for (int i = 0; i < 10; ++i) {
4216 #pragma omp parallel for
4217     for (int i = 0; i < 10; ++i)
4218       ;
4219   }
4220 #pragma omp taskloop
4221   for (int i = 0; i < 10; ++i) {
4222 #pragma omp parallel for simd
4223     for (int i = 0; i < 10; ++i)
4224       ;
4225   }
4226 #pragma omp taskloop
4227   for (int i = 0; i < 10; ++i) {
4228 #pragma omp parallel sections
4229     {
4230       bar();
4231     }
4232   }
4233 #pragma omp taskloop
4234   for (int i = 0; i < 10; ++i) {
4235 #pragma omp task
4236     {
4237       bar();
4238     }
4239   }
4240 #pragma omp taskloop
4241   for (int i = 0; i < 10; ++i) {
4242 #pragma omp taskyield
4243     bar();
4244   }
4245 #pragma omp taskloop
4246   for (int i = 0; i < 10; ++i) {
4247 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
4248     bar();
4249   }
4250 #pragma omp taskloop
4251   for (int i = 0; i < 10; ++i) {
4252 #pragma omp taskwait
4253     bar();
4254   }
4255 #pragma omp taskloop
4256   for (int i = 0; i < 10; ++i) {
4257 #pragma omp flush
4258     bar();
4259   }
4260 #pragma omp taskloop
4261   for (int i = 0; i < 10; ++i) {
4262 #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?}}
4263     bar();
4264   }
4265 #pragma omp taskloop
4266   for (int i = 0; i < 10; ++i) {
4267 #pragma omp atomic
4268     ++a;
4269   }
4270 #pragma omp taskloop
4271   for (int i = 0; i < 10; ++i) {
4272 #pragma omp target
4273     ++a;
4274   }
4275 #pragma omp taskloop
4276   for (int i = 0; i < 10; ++i) {
4277 #pragma omp target parallel
4278     ++a;
4279   }
4280 #pragma omp taskloop
4281   for (int i = 0; i < 10; ++i) {
4282 #pragma omp target parallel for
4283     for (int i = 0; i < 10; ++i)
4284       ;
4285   }
4286 #pragma omp taskloop
4287   for (int i = 0; i < 10; ++i) {
4288 #pragma omp target enter data map(to: a)
4289     ++a;
4290   }
4291 #pragma omp taskloop
4292   for (int i = 0; i < 10; ++i) {
4293 #pragma omp target exit data map(from: a)
4294     ++a;
4295   }
4296 #pragma omp taskloop
4297   for (int i = 0; i < 10; ++i) {
4298 #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?}}
4299     ++a;
4300   }
4301 #pragma omp taskloop
4302   for (int i = 0; i < 10; ++i) {
4303 #pragma omp taskloop
4304   for (int i = 0; i < 10; ++i)
4305     ++a;
4306   }
4307 #pragma omp taskloop
4308   for (int i = 0; i < 10; ++i) {
4309 #pragma omp target update to(a)
4310     bar();
4311   }
4312 #pragma omp taskloop
4313   for (int i = 0; i < 10; ++i) {
4314 #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?}}
4315   for (int j = 0; j < 10; ++j)
4316     ++a;
4317   }
4318 #pragma omp taskloop
4319   for (int i = 0; i < 10; ++i) {
4320 #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?}}
4321   for (int j = 0; j < 10; ++j)
4322     ++a;
4323   }
4324 #pragma omp taskloop
4325   for (int i = 0; i < 10; ++i) {
4326 #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?}}
4327   for (int j = 0; j < 10; ++j)
4328     ++a;
4329   }
4330 #pragma omp taskloop
4331   for (int i = 0; i < 10; ++i) {
4332 #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?}}
4333   for (int j = 0; j < 10; ++j)
4334     ++a;
4335   }
4336 #pragma omp taskloop
4337   for (int i = 0; i < 10; ++i) {
4338 #pragma omp target simd // OK
4339   for (int j = 0; j < 10; ++j)
4340     ++a;
4341   }
4342 #pragma omp taskloop
4343   for (int i = 0; i < 10; ++i) {
4344 #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?}}
4345   for (int j = 0; j < 10; ++j)
4346     ++a;
4347   }
4348 #pragma omp taskloop
4349   for (int i = 0; i < 10; ++i) {
4350 #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?}}
4351   for (int j = 0; j < 10; ++j)
4352     ++a;
4353   }
4354 
4355 // DISTRIBUTE DIRECTIVE
4356 #pragma omp target
4357 #pragma omp teams
4358 #pragma omp distribute
4359   for (int i = 0; i < 10; ++i) {
4360 #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?}}
4361     for (int i = 0; i < 10; ++i)
4362       ;
4363   }
4364 #pragma omp target
4365 #pragma omp teams
4366 #pragma omp distribute
4367   for (int i = 0; i < 10; ++i) {
4368 #pragma omp for
4369     for (int i = 0; i < 10; ++i)
4370       ;
4371   }
4372 #pragma omp target
4373 #pragma omp teams
4374 #pragma omp distribute
4375   for (int i = 0; i < 10; ++i) {
4376 #pragma omp simd
4377     for (int i = 0; i < 10; ++i)
4378       ;
4379   }
4380 #pragma omp target
4381 #pragma omp teams
4382 #pragma omp distribute
4383   for (int i = 0; i < 10; ++i) {
4384 #pragma omp for simd
4385     for (int i = 0; i < 10; ++i)
4386       ;
4387   }
4388 #pragma omp target
4389 #pragma omp teams
4390 #pragma omp distribute
4391   for (int i = 0; i < 10; ++i) {
4392 #pragma omp parallel
4393     for (int i = 0; i < 10; ++i)
4394       ;
4395   }
4396 #pragma omp target
4397 #pragma omp teams
4398 #pragma omp distribute
4399   for (int i = 0; i < 10; ++i) {
4400 #pragma omp sections
4401     {
4402       bar();
4403     }
4404   }
4405 #pragma omp target
4406 #pragma omp teams
4407 #pragma omp distribute
4408   for (int i = 0; i < 10; ++i) {
4409 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
4410     {
4411       bar();
4412     }
4413   }
4414 #pragma omp target
4415 #pragma omp teams
4416 #pragma omp distribute
4417   for (int i = 0; i < 10; ++i) {
4418 #pragma omp single
4419     {
4420       bar();
4421     }
4422   }
4423 #pragma omp target
4424 #pragma omp teams
4425 #pragma omp distribute
4426   for (int i = 0; i < 10; ++i) {
4427 #pragma omp master
4428     {
4429       bar();
4430     }
4431   }
4432 #pragma omp target
4433 #pragma omp teams
4434 #pragma omp distribute
4435   for (int i = 0; i < 10; ++i) {
4436 #pragma omp critical
4437     {
4438       bar();
4439     }
4440   }
4441 #pragma omp target
4442 #pragma omp teams
4443 #pragma omp distribute
4444   for (int i = 0; i < 10; ++i) {
4445 #pragma omp parallel
4446     {
4447 #pragma omp single
4448       {
4449 	bar();
4450       }
4451     }
4452   }
4453 #pragma omp target
4454 #pragma omp teams
4455 #pragma omp distribute
4456   for (int i = 0; i < 10; ++i) {
4457 #pragma omp parallel for
4458     for (int i = 0; i < 10; ++i)
4459       ;
4460   }
4461 #pragma omp target
4462 #pragma omp teams
4463 #pragma omp distribute
4464   for (int i = 0; i < 10; ++i) {
4465 #pragma omp parallel for simd
4466     for (int i = 0; i < 10; ++i)
4467       ;
4468   }
4469 #pragma omp target
4470 #pragma omp teams
4471 #pragma omp distribute
4472   for (int i = 0; i < 10; ++i) {
4473 #pragma omp parallel sections
4474     {
4475       bar();
4476     }
4477   }
4478 #pragma omp target
4479 #pragma omp teams
4480 #pragma omp distribute
4481   for (int i = 0; i < 10; ++i) {
4482 #pragma omp task
4483     {
4484       bar();
4485     }
4486   }
4487 #pragma omp target
4488 #pragma omp teams
4489 #pragma omp distribute
4490   for (int i = 0; i < 10; ++i) {
4491 #pragma omp taskyield
4492     bar();
4493   }
4494 #pragma omp target
4495 #pragma omp teams
4496 #pragma omp distribute
4497   for (int i = 0; i < 10; ++i) {
4498 #pragma omp barrier
4499     bar();
4500   }
4501 #pragma omp target
4502 #pragma omp teams
4503 #pragma omp distribute
4504   for (int i = 0; i < 10; ++i) {
4505 #pragma omp taskwait
4506     bar();
4507   }
4508 #pragma omp target
4509 #pragma omp teams
4510 #pragma omp distribute
4511   for (int i = 0; i < 10; ++i) {
4512 #pragma omp flush
4513     bar();
4514   }
4515 #pragma omp target
4516 #pragma omp teams
4517 #pragma omp distribute
4518   for (int i = 0; i < 10; ++i) {
4519 #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?}}
4520     bar();
4521   }
4522 #pragma omp target
4523 #pragma omp teams
4524 #pragma omp distribute
4525   for (int i = 0; i < 10; ++i) {
4526 #pragma omp atomic
4527     ++a;
4528   }
4529 #pragma omp target
4530 #pragma omp teams
4531 #pragma omp distribute
4532   for (int i = 0; i < 10; ++i) {
4533 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4534     ++a;
4535   }
4536 #pragma omp target
4537 #pragma omp teams
4538 #pragma omp distribute
4539   for (int i = 0; i < 10; ++i) {
4540 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4541     ++a;
4542   }
4543 #pragma omp target
4544 #pragma omp teams
4545 #pragma omp distribute
4546   for (int i = 0; i < 10; ++i) {
4547 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4548     for (int i = 0; i < 10; ++i)
4549       ;
4550   }
4551 #pragma omp target
4552 #pragma omp teams
4553 #pragma omp distribute
4554   for (int i = 0; i < 10; ++i) {
4555 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4556     ++a;
4557   }
4558 #pragma omp target
4559 #pragma omp teams
4560 #pragma omp distribute
4561   for (int i = 0; i < 10; ++i) {
4562 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4563     ++a;
4564   }
4565 #pragma omp target
4566 #pragma omp teams
4567 #pragma omp distribute
4568   for (int i = 0; i < 10; ++i) {
4569 #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?}}
4570     ++a;
4571   }
4572 #pragma omp target
4573 #pragma omp teams
4574 #pragma omp distribute
4575   for (int i = 0; i < 10; ++i) {
4576 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4577     ++a;
4578   }
4579 #pragma omp target
4580 #pragma omp teams
4581 #pragma omp distribute
4582   for (int i = 0; i < 10; ++i) {
4583 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4584     for (int j = 0; j < 10; ++j)
4585       ;
4586   }
4587 #pragma omp target
4588 #pragma omp teams
4589 #pragma omp distribute
4590   for (int i = 0; i < 10; ++i) {
4591 #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?}}
4592     for (int j = 0; j < 10; ++j)
4593       ;
4594   }
4595 #pragma omp target
4596 #pragma omp teams
4597 #pragma omp distribute
4598   for (int i = 0; i < 10; ++i) {
4599 #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?}}
4600     for (int j = 0; j < 10; ++j)
4601       ;
4602   }
4603 
4604 // DISTRIBUTE PARALLEL FOR DIRECTIVE
4605 #pragma omp target
4606 #pragma omp teams
4607 #pragma omp distribute parallel for
4608   for (int i = 0; i < 10; ++i) {
4609 #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?}}
4610     for (int i = 0; i < 10; ++i)
4611       ;
4612   }
4613 #pragma omp target
4614 #pragma omp teams
4615 #pragma omp distribute parallel for
4616   for (int i = 0; i < 10; ++i) {
4617 #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?}}
4618     for (int i = 0; i < 10; ++i)
4619       ;
4620   }
4621 #pragma omp target
4622 #pragma omp teams
4623 #pragma omp distribute parallel for
4624   for (int i = 0; i < 10; ++i) {
4625 #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?}}
4626     for (int i = 0; i < 10; ++i)
4627       ;
4628   }
4629 #pragma omp target
4630 #pragma omp teams
4631 #pragma omp distribute parallel for
4632   for (int i = 0; i < 10; ++i) {
4633 #pragma omp simd
4634     for (int i = 0; i < 10; ++i)
4635       ;
4636   }
4637 #pragma omp target
4638 #pragma omp teams
4639 #pragma omp distribute parallel for
4640   for (int i = 0; i < 10; ++i) {
4641 #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?}}
4642     for (int i = 0; i < 10; ++i)
4643       ;
4644   }
4645 #pragma omp target
4646 #pragma omp teams
4647 #pragma omp distribute parallel for
4648   for (int i = 0; i < 10; ++i) {
4649 #pragma omp parallel
4650     for (int i = 0; i < 10; ++i)
4651       ;
4652   }
4653 #pragma omp target
4654 #pragma omp teams
4655 #pragma omp distribute parallel for
4656   for (int i = 0; i < 10; ++i) {
4657 #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?}}
4658     {
4659       bar();
4660     }
4661   }
4662 #pragma omp target
4663 #pragma omp teams
4664 #pragma omp distribute parallel for
4665   for (int i = 0; i < 10; ++i) {
4666 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
4667     {
4668       bar();
4669     }
4670   }
4671 #pragma omp target
4672 #pragma omp teams
4673 #pragma omp distribute parallel for
4674   for (int i = 0; i < 10; ++i) {
4675 #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?}}
4676     {
4677       bar();
4678     }
4679   }
4680 #pragma omp target
4681 #pragma omp teams
4682 #pragma omp distribute parallel for
4683   for (int i = 0; i < 10; ++i) {
4684 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
4685     {
4686       bar();
4687     }
4688   }
4689 #pragma omp target
4690 #pragma omp teams
4691 #pragma omp distribute parallel for
4692   for (int i = 0; i < 10; ++i) {
4693 #pragma omp critical
4694     {
4695       bar();
4696     }
4697   }
4698 #pragma omp target
4699 #pragma omp teams
4700 #pragma omp distribute parallel for
4701   for (int i = 0; i < 10; ++i) {
4702 #pragma omp parallel
4703     {
4704 #pragma omp single
4705       {
4706 	bar();
4707       }
4708     }
4709   }
4710 #pragma omp target
4711 #pragma omp teams
4712 #pragma omp distribute parallel for
4713   for (int i = 0; i < 10; ++i) {
4714 #pragma omp parallel for
4715     for (int i = 0; i < 10; ++i)
4716       ;
4717   }
4718 #pragma omp target
4719 #pragma omp teams
4720 #pragma omp distribute parallel for
4721   for (int i = 0; i < 10; ++i) {
4722 #pragma omp parallel for simd
4723     for (int i = 0; i < 10; ++i)
4724       ;
4725   }
4726 #pragma omp target
4727 #pragma omp teams
4728 #pragma omp distribute parallel for
4729   for (int i = 0; i < 10; ++i) {
4730 #pragma omp parallel sections
4731     {
4732       bar();
4733     }
4734   }
4735 #pragma omp target
4736 #pragma omp teams
4737 #pragma omp distribute parallel for
4738   for (int i = 0; i < 10; ++i) {
4739 #pragma omp task
4740     {
4741       bar();
4742     }
4743   }
4744 #pragma omp target
4745 #pragma omp teams
4746 #pragma omp distribute parallel for
4747   for (int i = 0; i < 10; ++i) {
4748 #pragma omp taskyield
4749     bar();
4750   }
4751 #pragma omp target
4752 #pragma omp teams
4753 #pragma omp distribute parallel for
4754   for (int i = 0; i < 10; ++i) {
4755 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
4756     bar();
4757   }
4758 #pragma omp target
4759 #pragma omp teams
4760 #pragma omp distribute parallel for
4761   for (int i = 0; i < 10; ++i) {
4762 #pragma omp taskwait
4763     bar();
4764   }
4765 #pragma omp target
4766 #pragma omp teams
4767 #pragma omp distribute parallel for
4768   for (int i = 0; i < 10; ++i) {
4769 #pragma omp flush
4770     bar();
4771   }
4772 #pragma omp target
4773 #pragma omp teams
4774 #pragma omp distribute parallel for
4775   for (int i = 0; i < 10; ++i) {
4776 #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?}}
4777     bar();
4778   }
4779 #pragma omp target
4780 #pragma omp teams
4781 #pragma omp distribute parallel for
4782   for (int i = 0; i < 10; ++i) {
4783 #pragma omp atomic
4784     ++a;
4785   }
4786 #pragma omp target
4787 #pragma omp teams
4788 #pragma omp distribute parallel for
4789   for (int i = 0; i < 10; ++i) {
4790 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4791     ++a;
4792   }
4793 #pragma omp target
4794 #pragma omp teams
4795 #pragma omp distribute parallel for
4796   for (int i = 0; i < 10; ++i) {
4797 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4798     ++a;
4799   }
4800 #pragma omp target
4801 #pragma omp teams
4802 #pragma omp distribute parallel for
4803   for (int i = 0; i < 10; ++i) {
4804 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4805     for (int i = 0; i < 10; ++i)
4806       ;
4807   }
4808 #pragma omp target
4809 #pragma omp teams
4810 #pragma omp distribute parallel for
4811   for (int i = 0; i < 10; ++i) {
4812 #pragma omp target enter data map(to: 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 parallel for
4818   for (int i = 0; i < 10; ++i) {
4819 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4820     ++a;
4821   }
4822 #pragma omp target
4823 #pragma omp teams
4824 #pragma omp distribute parallel for
4825   for (int i = 0; i < 10; ++i) {
4826 #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?}}
4827     ++a;
4828   }
4829 #pragma omp target
4830 #pragma omp teams
4831 #pragma omp distribute parallel for
4832   for (int i = 0; i < 10; ++i) {
4833 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4834     ++a;
4835   }
4836 #pragma omp target
4837 #pragma omp teams
4838 #pragma omp distribute parallel for
4839   for (int i = 0; i < 10; ++i) {
4840 #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?}}
4841     for (int i = 0; i < 10; ++i)
4842       ;
4843   }
4844 #pragma omp target
4845 #pragma omp teams
4846 #pragma omp distribute parallel for
4847   for (int i = 0; i < 10; ++i) {
4848 #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?}}
4849     for (int i = 0; i < 10; ++i)
4850       ;
4851   }
4852 #pragma omp target
4853 #pragma omp teams
4854 #pragma omp distribute parallel for
4855   for (int i = 0; i < 10; ++i) {
4856 #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?}}
4857     for (int i = 0; i < 10; ++i)
4858       ;
4859   }
4860 
4861 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
4862 #pragma omp target
4863 #pragma omp teams
4864 #pragma omp distribute parallel for simd
4865   for (int i = 0; i < 10; ++i) {
4866 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4867     for (int i = 0; i < 10; ++i)
4868       ;
4869   }
4870 #pragma omp target
4871 #pragma omp teams
4872 #pragma omp distribute parallel for simd
4873   for (int i = 0; i < 10; ++i) {
4874 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4875     for (int i = 0; i < 10; ++i)
4876       ;
4877   }
4878 #pragma omp target
4879 #pragma omp teams
4880 #pragma omp distribute parallel for simd
4881   for (int i = 0; i < 10; ++i) {
4882 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4883     for (int i = 0; i < 10; ++i)
4884       ;
4885   }
4886 #pragma omp target
4887 #pragma omp teams
4888 #pragma omp distribute parallel for simd
4889   for (int i = 0; i < 10; ++i) {
4890 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
4891     for (int i = 0; i < 10; ++i)
4892       ;
4893   }
4894 #pragma omp target
4895 #pragma omp teams
4896 #pragma omp distribute parallel for simd
4897   for (int i = 0; i < 10; ++i) {
4898 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4899     for (int i = 0; i < 10; ++i)
4900       ;
4901   }
4902 #pragma omp target
4903 #pragma omp teams
4904 #pragma omp distribute parallel for simd
4905   for (int i = 0; i < 10; ++i) {
4906 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4907     for (int i = 0; i < 10; ++i)
4908       ;
4909   }
4910 #pragma omp target
4911 #pragma omp teams
4912 #pragma omp distribute parallel for simd
4913   for (int i = 0; i < 10; ++i) {
4914 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4915     {
4916       bar();
4917     }
4918   }
4919 #pragma omp target
4920 #pragma omp teams
4921 #pragma omp distribute parallel for simd
4922   for (int i = 0; i < 10; ++i) {
4923 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4924     {
4925       bar();
4926     }
4927   }
4928 #pragma omp target
4929 #pragma omp teams
4930 #pragma omp distribute parallel for simd
4931   for (int i = 0; i < 10; ++i) {
4932 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4933     {
4934       bar();
4935     }
4936   }
4937 #pragma omp target
4938 #pragma omp teams
4939 #pragma omp distribute parallel for simd
4940   for (int i = 0; i < 10; ++i) {
4941 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4942     {
4943       bar();
4944     }
4945   }
4946 #pragma omp target
4947 #pragma omp teams
4948 #pragma omp distribute parallel for simd
4949   for (int i = 0; i < 10; ++i) {
4950 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4951     {
4952       bar();
4953     }
4954   }
4955 #pragma omp target
4956 #pragma omp teams
4957 #pragma omp distribute parallel for simd
4958   for (int i = 0; i < 10; ++i) {
4959 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4960     {
4961 #pragma omp single
4962       {
4963 	bar();
4964       }
4965     }
4966   }
4967 #pragma omp target
4968 #pragma omp teams
4969 #pragma omp distribute parallel for simd
4970   for (int i = 0; i < 10; ++i) {
4971 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4972     for (int i = 0; i < 10; ++i)
4973       ;
4974   }
4975 #pragma omp target
4976 #pragma omp teams
4977 #pragma omp distribute parallel for simd
4978   for (int i = 0; i < 10; ++i) {
4979 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4980     for (int i = 0; i < 10; ++i)
4981       ;
4982   }
4983 #pragma omp target
4984 #pragma omp teams
4985 #pragma omp distribute parallel for simd
4986   for (int i = 0; i < 10; ++i) {
4987 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4988     {
4989       bar();
4990     }
4991   }
4992 #pragma omp target
4993 #pragma omp teams
4994 #pragma omp distribute parallel for simd
4995   for (int i = 0; i < 10; ++i) {
4996 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4997     {
4998       bar();
4999     }
5000   }
5001 #pragma omp target
5002 #pragma omp teams
5003 #pragma omp distribute parallel for simd
5004   for (int i = 0; i < 10; ++i) {
5005 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5006     bar();
5007   }
5008 #pragma omp target
5009 #pragma omp teams
5010 #pragma omp distribute parallel for simd
5011   for (int i = 0; i < 10; ++i) {
5012 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5013     bar();
5014   }
5015 #pragma omp target
5016 #pragma omp teams
5017 #pragma omp distribute parallel for simd
5018   for (int i = 0; i < 10; ++i) {
5019 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5020     bar();
5021   }
5022 #pragma omp target
5023 #pragma omp teams
5024 #pragma omp distribute parallel for simd
5025   for (int i = 0; i < 10; ++i) {
5026 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5027     bar();
5028   }
5029 #pragma omp target
5030 #pragma omp teams
5031 #pragma omp distribute parallel for simd
5032   for (int i = 0; i < 10; ++i) {
5033 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5034     bar();
5035   }
5036 #pragma omp target
5037 #pragma omp teams
5038 #pragma omp distribute parallel for simd
5039   for (int i = 0; i < 10; ++i) {
5040 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5041     ++a;
5042   }
5043 #pragma omp target
5044 #pragma omp teams
5045 #pragma omp distribute parallel for simd
5046   for (int i = 0; i < 10; ++i) {
5047 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5048     ++a;
5049   }
5050 #pragma omp target
5051 #pragma omp teams
5052 #pragma omp distribute parallel for simd
5053   for (int i = 0; i < 10; ++i) {
5054 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5055     ++a;
5056   }
5057 #pragma omp target
5058 #pragma omp teams
5059 #pragma omp distribute parallel for simd
5060   for (int i = 0; i < 10; ++i) {
5061 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5062     for (int i = 0; i < 10; ++i)
5063       ;
5064   }
5065 #pragma omp target
5066 #pragma omp teams
5067 #pragma omp distribute parallel for simd
5068   for (int i = 0; i < 10; ++i) {
5069 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5070     ++a;
5071   }
5072 #pragma omp target
5073 #pragma omp teams
5074 #pragma omp distribute parallel for simd
5075   for (int i = 0; i < 10; ++i) {
5076 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5077     ++a;
5078   }
5079 #pragma omp target
5080 #pragma omp teams
5081 #pragma omp distribute parallel for simd
5082   for (int i = 0; i < 10; ++i) {
5083 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5084     ++a;
5085   }
5086 #pragma omp target
5087 #pragma omp teams
5088 #pragma omp distribute parallel for simd
5089   for (int i = 0; i < 10; ++i) {
5090 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5091     ++a;
5092   }
5093 #pragma omp target
5094 #pragma omp teams
5095 #pragma omp distribute parallel for simd
5096   for (int i = 0; i < 10; ++i) {
5097 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5098     for (int i = 0; i < 10; ++i)
5099       ++a;
5100   }
5101 #pragma omp target
5102 #pragma omp teams
5103 #pragma omp distribute parallel for simd
5104   for (int i = 0; i < 10; ++i) {
5105 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5106     for (int i = 0; i < 10; ++i)
5107       ++a;
5108   }
5109 #pragma omp target
5110 #pragma omp teams
5111 #pragma omp distribute parallel for simd
5112   for (int i = 0; i < 10; ++i) {
5113 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5114     for (int i = 0; i < 10; ++i)
5115       ++a;
5116   }
5117 #pragma omp target
5118 #pragma omp teams
5119 #pragma omp distribute parallel for simd
5120   for (int i = 0; i < 10; ++i) {
5121 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5122     for (int i = 0; i < 10; ++i)
5123       ++a;
5124   }
5125 
5126 // TARGET SIMD DIRECTIVE
5127 #pragma omp target simd
5128   for (int i = 0; i < 10; ++i) {
5129 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5130     for (int i = 0; i < 10; ++i)
5131       ;
5132   }
5133 #pragma omp target simd
5134   for (int i = 0; i < 10; ++i) {
5135 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5136     for (int i = 0; i < 10; ++i)
5137       ;
5138   }
5139 #pragma omp target simd
5140   for (int i = 0; i < 10; ++i) {
5141 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5142     for (int i = 0; i < 10; ++i)
5143       ;
5144   }
5145 #pragma omp target simd
5146   for (int i = 0; i < 10; ++i) {
5147 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5148     for (int i = 0; i < 10; ++i)
5149       ;
5150   }
5151 #pragma omp target simd
5152   for (int i = 0; i < 10; ++i) {
5153 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5154     for (int i = 0; i < 10; ++i)
5155       ;
5156   }
5157 #pragma omp target simd
5158   for (int i = 0; i < 10; ++i) {
5159 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5160     for (int i = 0; i < 10; ++i)
5161       ;
5162   }
5163 #pragma omp target simd
5164   for (int i = 0; i < 10; ++i) {
5165 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5166     {
5167       bar();
5168     }
5169   }
5170 #pragma omp target simd
5171   for (int i = 0; i < 10; ++i) {
5172 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5173     {
5174       bar();
5175     }
5176   }
5177 #pragma omp target simd
5178   for (int i = 0; i < 10; ++i) {
5179 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5180     {
5181       bar();
5182     }
5183   }
5184 #pragma omp target simd
5185   for (int i = 0; i < 10; ++i) {
5186 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5187     {
5188       bar();
5189     }
5190   }
5191 #pragma omp target simd
5192   for (int i = 0; i < 10; ++i) {
5193 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5194     {
5195       bar();
5196     }
5197   }
5198 #pragma omp target simd
5199   for (int i = 0; i < 10; ++i) {
5200 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5201     {
5202 #pragma omp single
5203       {
5204 	bar();
5205       }
5206     }
5207   }
5208 #pragma omp target simd
5209   for (int i = 0; i < 10; ++i) {
5210 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5211     for (int i = 0; i < 10; ++i)
5212       ;
5213   }
5214 #pragma omp target simd
5215   for (int i = 0; i < 10; ++i) {
5216 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5217     for (int i = 0; i < 10; ++i)
5218       ;
5219   }
5220 #pragma omp target simd
5221   for (int i = 0; i < 10; ++i) {
5222 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5223     {
5224       bar();
5225     }
5226   }
5227 #pragma omp target simd
5228   for (int i = 0; i < 10; ++i) {
5229 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5230     {
5231       bar();
5232     }
5233   }
5234 #pragma omp target simd
5235   for (int i = 0; i < 10; ++i) {
5236 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5237     bar();
5238   }
5239 #pragma omp target simd
5240   for (int i = 0; i < 10; ++i) {
5241 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5242     bar();
5243   }
5244 #pragma omp target simd
5245   for (int i = 0; i < 10; ++i) {
5246 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5247     bar();
5248   }
5249 #pragma omp target simd
5250   for (int i = 0; i < 10; ++i) {
5251 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5252     bar();
5253   }
5254 #pragma omp target simd
5255   for (int i = 0; i < 10; ++i) {
5256 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5257     bar();
5258   }
5259 #pragma omp target simd
5260   for (int i = 0; i < 10; ++i) {
5261 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5262     ++a;
5263   }
5264 #pragma omp target simd
5265   for (int i = 0; i < 10; ++i) {
5266 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5267     ++a;
5268   }
5269 #pragma omp target simd
5270   for (int i = 0; i < 10; ++i) {
5271 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5272     ++a;
5273   }
5274 #pragma omp target simd
5275   for (int i = 0; i < 10; ++i) {
5276 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5277     for (int i = 0; i < 10; ++i)
5278       ;
5279   }
5280 #pragma omp target simd
5281   for (int i = 0; i < 10; ++i) {
5282 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5283     ++a;
5284   }
5285 #pragma omp target simd
5286   for (int i = 0; i < 10; ++i) {
5287 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5288     ++a;
5289   }
5290 #pragma omp target simd
5291   for (int i = 0; i < 10; ++i) {
5292 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5293     ++a;
5294   }
5295 #pragma omp target simd
5296   for (int i = 0; i < 10; ++i) {
5297 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5298     ++a;
5299   }
5300 #pragma omp target simd
5301   for (int i = 0; i < 10; ++i) {
5302 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5303     for (int i = 0; i < 10; ++i)
5304       ++a;
5305   }
5306 #pragma omp target simd
5307   for (int i = 0; i < 10; ++i) {
5308 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5309     for (int i = 0; i < 10; ++i)
5310       ++a;
5311   }
5312 #pragma omp target simd
5313   for (int i = 0; i < 10; ++i) {
5314 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5315     for (int i = 0; i < 10; ++i)
5316       ++a;
5317   }
5318 #pragma omp target simd
5319   for (int i = 0; i < 10; ++i) {
5320 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5321     for (int i = 0; i < 10; ++i)
5322       ++a;
5323   }
5324 
5325  // TEAMS DISTRIBUTE DIRECTIVE
5326 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5327   for (int i = 0; i < 10; ++i)
5328     ;
5329 #pragma omp target
5330 #pragma omp teams distribute
5331   for (int i = 0; i < 10; ++i) {
5332 #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?}}
5333     for (int i = 0; i < 10; ++i)
5334       ;
5335   }
5336 #pragma omp target
5337 #pragma omp teams distribute
5338   for (int i = 0; i < 10; ++i) {
5339 #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?}}
5340     for (int i = 0; i < 10; ++i)
5341       ;
5342   }
5343 #pragma omp target
5344 #pragma omp teams distribute
5345   for (int i = 0; i < 10; ++i) {
5346 #pragma omp for // OK
5347     for (int i = 0; i < 10; ++i)
5348       ;
5349   }
5350 #pragma omp target
5351 #pragma omp teams distribute
5352   for (int i = 0; i < 10; ++i) {
5353 #pragma omp simd // OK
5354     for (int i = 0; i < 10; ++i)
5355       ;
5356   }
5357 #pragma omp target
5358 #pragma omp teams distribute
5359   for (int i = 0; i < 10; ++i) {
5360 #pragma omp for simd // OK
5361     for (int i = 0; i < 10; ++i)
5362       ;
5363   }
5364 #pragma omp target
5365 #pragma omp teams distribute
5366   for (int i = 0; i < 10; ++i) {
5367 #pragma omp parallel // OK
5368     for (int i = 0; i < 10; ++i)
5369       ;
5370   }
5371 #pragma omp target
5372 #pragma omp teams distribute
5373   for (int i = 0; i < 10; ++i) {
5374 #pragma omp sections // OK
5375     {
5376       bar();
5377     }
5378   }
5379 #pragma omp target
5380 #pragma omp teams distribute
5381   for (int i = 0; i < 10; ++i) {
5382 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
5383     {
5384       bar();
5385     }
5386   }
5387 #pragma omp target
5388 #pragma omp teams distribute
5389   for (int i = 0; i < 10; ++i) {
5390 #pragma omp single // OK
5391     {
5392       bar();
5393     }
5394   }
5395 #pragma omp target
5396 #pragma omp teams distribute
5397   for (int i = 0; i < 10; ++i) {
5398 #pragma omp master // OK
5399     {
5400       bar();
5401     }
5402   }
5403 #pragma omp target
5404 #pragma omp teams distribute
5405   for (int i = 0; i < 10; ++i) {
5406 #pragma omp critical // OK
5407     {
5408       bar();
5409     }
5410   }
5411 #pragma omp target
5412 #pragma omp teams distribute
5413   for (int i = 0; i < 10; ++i) {
5414 #pragma omp parallel // OK
5415     {
5416 #pragma omp single
5417       {
5418 	bar();
5419       }
5420     }
5421   }
5422 #pragma omp target
5423 #pragma omp teams distribute
5424   for (int i = 0; i < 10; ++i) {
5425 #pragma omp parallel for // OK
5426     for (int i = 0; i < 10; ++i)
5427       ;
5428   }
5429 #pragma omp target
5430 #pragma omp teams distribute
5431   for (int i = 0; i < 10; ++i) {
5432 #pragma omp parallel for simd // OK
5433     for (int i = 0; i < 10; ++i)
5434       ;
5435   }
5436 #pragma omp target
5437 #pragma omp teams distribute
5438   for (int i = 0; i < 10; ++i) {
5439 #pragma omp parallel sections // OK
5440     {
5441       bar();
5442     }
5443   }
5444 #pragma omp target
5445 #pragma omp teams distribute
5446   for (int i = 0; i < 10; ++i) {
5447 #pragma omp task // OK
5448     {
5449       bar();
5450     }
5451   }
5452 #pragma omp target
5453 #pragma omp teams distribute
5454   for (int i = 0; i < 10; ++i) {
5455 #pragma omp taskyield // OK
5456     bar();
5457   }
5458 #pragma omp target
5459 #pragma omp teams distribute
5460   for (int i = 0; i < 10; ++i) {
5461 #pragma omp barrier // OK
5462     bar();
5463   }
5464 #pragma omp target
5465 #pragma omp teams distribute
5466   for (int i = 0; i < 10; ++i) {
5467 #pragma omp taskwait // OK
5468     bar();
5469   }
5470 #pragma omp target
5471 #pragma omp teams distribute
5472   for (int i = 0; i < 10; ++i) {
5473 #pragma omp flush // OK
5474     bar();
5475   }
5476 #pragma omp target
5477 #pragma omp teams distribute
5478   for (int i = 0; i < 10; ++i) {
5479 #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?}}
5480     bar();
5481   }
5482 #pragma omp target
5483 #pragma omp teams distribute
5484   for (int i = 0; i < 10; ++i) {
5485 #pragma omp atomic // OK
5486     ++a;
5487   }
5488 #pragma omp target
5489 #pragma omp teams distribute
5490   for (int i = 0; i < 10; ++i) {
5491 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5492     ++a;
5493   }
5494 #pragma omp target
5495 #pragma omp teams distribute
5496   for (int i = 0; i < 10; ++i) {
5497 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
5498     ++a;
5499   }
5500 #pragma omp target
5501 #pragma omp teams distribute
5502   for (int i = 0; i < 10; ++i) {
5503 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5504     for (int i = 0; i < 10; ++i)
5505       ;
5506   }
5507 #pragma omp target
5508 #pragma omp teams distribute
5509   for (int i = 0; i < 10; ++i) {
5510 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5511     ++a;
5512   }
5513 #pragma omp target
5514 #pragma omp teams distribute
5515   for (int i = 0; i < 10; ++i) {
5516 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5517     ++a;
5518   }
5519 #pragma omp target
5520 #pragma omp teams distribute
5521   for (int i = 0; i < 10; ++i) {
5522 #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?}}
5523     ++a;
5524   }
5525 #pragma omp target
5526 #pragma omp teams distribute
5527   for (int i = 0; i < 10; ++i) {
5528 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5529     ++a;
5530   }
5531 #pragma omp target
5532 #pragma omp teams distribute
5533   for (int i = 0; i < 10; ++i) {
5534 #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?}}
5535     for (int i = 0; i < 10; ++i)
5536       ++a;
5537   }
5538 #pragma omp target
5539 #pragma omp teams distribute
5540   for (int i = 0; i < 10; ++i) {
5541 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5542     for (int i = 0; i < 10; ++i)
5543       ++a;
5544   }
5545 #pragma omp target
5546 #pragma omp teams distribute
5547   for (int i = 0; i < 10; ++i) {
5548 #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?}}
5549     for (int i = 0; i < 10; ++i)
5550       ++a;
5551   }
5552 #pragma omp target
5553 #pragma omp teams distribute
5554   for (int i = 0; i < 10; ++i) {
5555 #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?}}
5556     for (int i = 0; i < 10; ++i)
5557       ++a;
5558   }
5559 
5560  // TEAMS DISTRIBUTE DIRECTIVE
5561 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5562   for (int i = 0; i < 10; ++i)
5563     ;
5564 #pragma omp target
5565 #pragma omp teams distribute
5566   for (int i = 0; i < 10; ++i) {
5567 #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?}}
5568     for (int i = 0; i < 10; ++i)
5569       ;
5570   }
5571 #pragma omp target
5572 #pragma omp teams distribute
5573   for (int i = 0; i < 10; ++i) {
5574 #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?}}
5575     for (int i = 0; i < 10; ++i)
5576       ;
5577   }
5578 #pragma omp target
5579 #pragma omp teams distribute
5580   for (int i = 0; i < 10; ++i) {
5581 #pragma omp for // OK
5582     for (int i = 0; i < 10; ++i)
5583       ;
5584   }
5585 #pragma omp target
5586 #pragma omp teams distribute
5587   for (int i = 0; i < 10; ++i) {
5588 #pragma omp simd // OK
5589     for (int i = 0; i < 10; ++i)
5590       ;
5591   }
5592 #pragma omp target
5593 #pragma omp teams distribute
5594   for (int i = 0; i < 10; ++i) {
5595 #pragma omp for simd // OK
5596     for (int i = 0; i < 10; ++i)
5597       ;
5598   }
5599 #pragma omp target
5600 #pragma omp teams distribute
5601   for (int i = 0; i < 10; ++i) {
5602 #pragma omp parallel // OK
5603     for (int i = 0; i < 10; ++i)
5604       ;
5605   }
5606 #pragma omp target
5607 #pragma omp teams distribute
5608   for (int i = 0; i < 10; ++i) {
5609 #pragma omp sections // OK
5610     {
5611       bar();
5612     }
5613   }
5614 #pragma omp target
5615 #pragma omp teams distribute
5616   for (int i = 0; i < 10; ++i) {
5617 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
5618     {
5619       bar();
5620     }
5621   }
5622 #pragma omp target
5623 #pragma omp teams distribute
5624   for (int i = 0; i < 10; ++i) {
5625 #pragma omp single // OK
5626     {
5627       bar();
5628     }
5629   }
5630 #pragma omp target
5631 #pragma omp teams distribute
5632   for (int i = 0; i < 10; ++i) {
5633 #pragma omp master // OK
5634     {
5635       bar();
5636     }
5637   }
5638 #pragma omp target
5639 #pragma omp teams distribute
5640   for (int i = 0; i < 10; ++i) {
5641 #pragma omp critical // OK
5642     {
5643       bar();
5644     }
5645   }
5646 #pragma omp target
5647 #pragma omp teams distribute
5648   for (int i = 0; i < 10; ++i) {
5649 #pragma omp parallel // OK
5650     {
5651 #pragma omp single
5652       {
5653 	bar();
5654       }
5655     }
5656   }
5657 #pragma omp target
5658 #pragma omp teams distribute
5659   for (int i = 0; i < 10; ++i) {
5660 #pragma omp parallel for // OK
5661     for (int i = 0; i < 10; ++i)
5662       ;
5663   }
5664 #pragma omp target
5665 #pragma omp teams distribute
5666   for (int i = 0; i < 10; ++i) {
5667 #pragma omp parallel for simd // OK
5668     for (int i = 0; i < 10; ++i)
5669       ;
5670   }
5671 #pragma omp target
5672 #pragma omp teams distribute
5673   for (int i = 0; i < 10; ++i) {
5674 #pragma omp parallel sections // OK
5675     {
5676       bar();
5677     }
5678   }
5679 #pragma omp target
5680 #pragma omp teams distribute
5681   for (int i = 0; i < 10; ++i) {
5682 #pragma omp task // OK
5683     {
5684       bar();
5685     }
5686   }
5687 #pragma omp target
5688 #pragma omp teams distribute
5689   for (int i = 0; i < 10; ++i) {
5690 #pragma omp taskyield // OK
5691     bar();
5692   }
5693 #pragma omp target
5694 #pragma omp teams distribute
5695   for (int i = 0; i < 10; ++i) {
5696 #pragma omp barrier // OK
5697     bar();
5698   }
5699 #pragma omp target
5700 #pragma omp teams distribute
5701   for (int i = 0; i < 10; ++i) {
5702 #pragma omp taskwait // OK
5703     bar();
5704   }
5705 #pragma omp target
5706 #pragma omp teams distribute
5707   for (int i = 0; i < 10; ++i) {
5708 #pragma omp flush // OK
5709     bar();
5710   }
5711 #pragma omp target
5712 #pragma omp teams distribute
5713   for (int i = 0; i < 10; ++i) {
5714 #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?}}
5715     bar();
5716   }
5717 #pragma omp target
5718 #pragma omp teams distribute
5719   for (int i = 0; i < 10; ++i) {
5720 #pragma omp atomic // OK
5721     ++a;
5722   }
5723 #pragma omp target
5724 #pragma omp teams distribute
5725   for (int i = 0; i < 10; ++i) {
5726 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5727     ++a;
5728   }
5729 #pragma omp target
5730 #pragma omp teams distribute
5731   for (int i = 0; i < 10; ++i) {
5732 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
5733     ++a;
5734   }
5735 #pragma omp target
5736 #pragma omp teams distribute
5737   for (int i = 0; i < 10; ++i) {
5738 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5739     for (int i = 0; i < 10; ++i)
5740       ;
5741   }
5742 #pragma omp target
5743 #pragma omp teams distribute
5744   for (int i = 0; i < 10; ++i) {
5745 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5746     ++a;
5747   }
5748 #pragma omp target
5749 #pragma omp teams distribute
5750   for (int i = 0; i < 10; ++i) {
5751 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5752     ++a;
5753   }
5754 #pragma omp target
5755 #pragma omp teams distribute
5756   for (int i = 0; i < 10; ++i) {
5757 #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?}}
5758     ++a;
5759   }
5760 #pragma omp target
5761 #pragma omp teams distribute
5762   for (int i = 0; i < 10; ++i) {
5763 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5764     ++a;
5765   }
5766 #pragma omp target
5767 #pragma omp teams distribute
5768   for (int i = 0; i < 10; ++i) {
5769 #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?}}
5770     for (int i = 0; i < 10; ++i)
5771       ++a;
5772   }
5773 #pragma omp target
5774 #pragma omp teams distribute
5775   for (int i = 0; i < 10; ++i) {
5776 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5777     for (int i = 0; i < 10; ++i)
5778       ++a;
5779   }
5780 #pragma omp target
5781 #pragma omp teams distribute
5782   for (int i = 0; i < 10; ++i) {
5783 #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?}}
5784     for (int i = 0; i < 10; ++i)
5785       ++a;
5786   }
5787 #pragma omp target
5788 #pragma omp teams distribute
5789   for (int i = 0; i < 10; ++i) {
5790 #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?}}
5791     for (int i = 0; i < 10; ++i)
5792       ++a;
5793   }
5794 
5795 // TEAMS DISTRIBUTE SIMD DIRECTIVE
5796 #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?}}
5797   for (int i = 0; i < 10; ++i)
5798     ;
5799 #pragma omp target
5800 #pragma omp teams distribute simd
5801   for (int i = 0; i < 10; ++i) {
5802 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5803     for (int i = 0; i < 10; ++i)
5804       ;
5805   }
5806 #pragma omp target
5807 #pragma omp teams distribute simd
5808   for (int i = 0; i < 10; ++i) {
5809 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5810     for (int i = 0; i < 10; ++i)
5811       ;
5812   }
5813 #pragma omp target
5814 #pragma omp teams distribute simd
5815   for (int i = 0; i < 10; ++i) {
5816 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5817     for (int i = 0; i < 10; ++i)
5818       ;
5819   }
5820 #pragma omp target
5821 #pragma omp teams distribute simd
5822   for (int i = 0; i < 10; ++i) {
5823 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5824     for (int i = 0; i < 10; ++i)
5825       ;
5826   }
5827 #pragma omp target
5828 #pragma omp teams distribute simd
5829   for (int i = 0; i < 10; ++i) {
5830 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5831     for (int i = 0; i < 10; ++i)
5832       ;
5833   }
5834 #pragma omp target
5835 #pragma omp teams distribute simd
5836   for (int i = 0; i < 10; ++i) {
5837 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5838     for (int i = 0; i < 10; ++i)
5839       ;
5840   }
5841 #pragma omp target
5842 #pragma omp teams distribute simd
5843   for (int i = 0; i < 10; ++i) {
5844 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5845     {
5846       bar();
5847     }
5848   }
5849 #pragma omp target
5850 #pragma omp teams distribute simd
5851   for (int i = 0; i < 10; ++i) {
5852 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5853     {
5854       bar();
5855     }
5856   }
5857 #pragma omp target
5858 #pragma omp teams distribute simd
5859   for (int i = 0; i < 10; ++i) {
5860 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5861     {
5862       bar();
5863     }
5864   }
5865 #pragma omp target
5866 #pragma omp teams distribute simd
5867   for (int i = 0; i < 10; ++i) {
5868 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5869     {
5870       bar();
5871     }
5872   }
5873 #pragma omp target
5874 #pragma omp teams distribute simd
5875   for (int i = 0; i < 10; ++i) {
5876 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5877     {
5878       bar();
5879     }
5880   }
5881 #pragma omp target
5882 #pragma omp teams distribute simd
5883   for (int i = 0; i < 10; ++i) {
5884 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5885     {
5886 #pragma omp single
5887       {
5888 	bar();
5889       }
5890     }
5891   }
5892 #pragma omp target
5893 #pragma omp teams distribute simd
5894   for (int i = 0; i < 10; ++i) {
5895 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5896     for (int i = 0; i < 10; ++i)
5897       ;
5898   }
5899 #pragma omp target
5900 #pragma omp teams distribute simd
5901   for (int i = 0; i < 10; ++i) {
5902 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5903     for (int i = 0; i < 10; ++i)
5904       ;
5905   }
5906 #pragma omp target
5907 #pragma omp teams distribute simd
5908   for (int i = 0; i < 10; ++i) {
5909 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5910     {
5911       bar();
5912     }
5913   }
5914 #pragma omp target
5915 #pragma omp teams distribute simd
5916   for (int i = 0; i < 10; ++i) {
5917 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5918     {
5919       bar();
5920     }
5921   }
5922 #pragma omp target
5923 #pragma omp teams distribute simd
5924   for (int i = 0; i < 10; ++i) {
5925 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5926     bar();
5927   }
5928 #pragma omp target
5929 #pragma omp teams distribute simd
5930   for (int i = 0; i < 10; ++i) {
5931 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5932     bar();
5933   }
5934 #pragma omp target
5935 #pragma omp teams distribute simd
5936   for (int i = 0; i < 10; ++i) {
5937 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5938     bar();
5939   }
5940 #pragma omp target
5941 #pragma omp teams distribute simd
5942   for (int i = 0; i < 10; ++i) {
5943 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5944     bar();
5945   }
5946 #pragma omp target
5947 #pragma omp teams distribute simd
5948   for (int i = 0; i < 10; ++i) {
5949 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5950     bar();
5951   }
5952 #pragma omp target
5953 #pragma omp teams distribute simd
5954   for (int i = 0; i < 10; ++i) {
5955 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5956     ++a;
5957   }
5958 #pragma omp target
5959 #pragma omp teams distribute simd
5960   for (int i = 0; i < 10; ++i) {
5961 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5962     ++a;
5963   }
5964 #pragma omp target
5965 #pragma omp teams distribute simd
5966   for (int i = 0; i < 10; ++i) {
5967 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5968     ++a;
5969   }
5970 #pragma omp target
5971 #pragma omp teams distribute simd
5972   for (int i = 0; i < 10; ++i) {
5973 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5974     for (int i = 0; i < 10; ++i)
5975       ;
5976   }
5977 #pragma omp target
5978 #pragma omp teams distribute simd
5979   for (int i = 0; i < 10; ++i) {
5980 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5981     ++a;
5982   }
5983 #pragma omp target
5984 #pragma omp teams distribute simd
5985   for (int i = 0; i < 10; ++i) {
5986 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5987     ++a;
5988   }
5989 #pragma omp target
5990 #pragma omp teams distribute simd
5991   for (int i = 0; i < 10; ++i) {
5992 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5993     ++a;
5994   }
5995 #pragma omp target
5996 #pragma omp teams distribute simd
5997   for (int i = 0; i < 10; ++i) {
5998 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5999     ++a;
6000   }
6001 #pragma omp target
6002 #pragma omp teams distribute simd
6003   for (int i = 0; i < 10; ++i) {
6004 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6005     for (int i = 0; i < 10; ++i)
6006       ++a;
6007   }
6008 #pragma omp target
6009 #pragma omp teams distribute simd
6010   for (int i = 0; i < 10; ++i) {
6011 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6012     for (int i = 0; i < 10; ++i)
6013       ++a;
6014   }
6015 #pragma omp target
6016 #pragma omp teams distribute simd
6017   for (int i = 0; i < 10; ++i) {
6018 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6019     for (int i = 0; i < 10; ++i)
6020       ++a;
6021   }
6022 #pragma omp target
6023 #pragma omp teams distribute simd
6024   for (int i = 0; i < 10; ++i) {
6025 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6026     for (int i = 0; i < 10; ++i)
6027       ++a;
6028   }
6029 }
6030 
6031 void foo() {
6032   int a = 0;
6033 // PARALLEL DIRECTIVE
6034 #pragma omp parallel
6035 #pragma omp for
6036   for (int i = 0; i < 10; ++i)
6037     ;
6038 #pragma omp parallel
6039 #pragma omp simd
6040   for (int i = 0; i < 10; ++i)
6041     ;
6042 #pragma omp parallel
6043 #pragma omp for simd
6044   for (int i = 0; i < 10; ++i)
6045     ;
6046 #pragma omp parallel
6047 #pragma omp sections
6048   {
6049     bar();
6050   }
6051 #pragma omp parallel
6052 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
6053   {
6054     bar();
6055   }
6056 #pragma omp parallel
6057 #pragma omp sections
6058   {
6059     bar();
6060   }
6061 #pragma omp parallel
6062 #pragma omp single
6063   bar();
6064 #pragma omp parallel
6065 #pragma omp master
6066   bar();
6067 #pragma omp parallel
6068 #pragma omp critical
6069   bar();
6070 #pragma omp parallel
6071 #pragma omp parallel for
6072   for (int i = 0; i < 10; ++i)
6073     ;
6074 #pragma omp parallel
6075 #pragma omp parallel for simd
6076   for (int i = 0; i < 10; ++i)
6077     ;
6078 #pragma omp parallel
6079 #pragma omp parallel sections
6080   {
6081     bar();
6082   }
6083 #pragma omp parallel
6084 #pragma omp task
6085   {
6086     bar();
6087   }
6088 #pragma omp parallel
6089   {
6090 #pragma omp taskyield
6091     bar();
6092   }
6093 #pragma omp parallel
6094   {
6095 #pragma omp barrier
6096     bar();
6097   }
6098 #pragma omp parallel
6099   {
6100 #pragma omp taskwait
6101     bar();
6102   }
6103 #pragma omp parallel
6104   {
6105 #pragma omp flush
6106     bar();
6107   }
6108 #pragma omp parallel
6109   {
6110 #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?}}
6111     bar();
6112   }
6113 #pragma omp parallel
6114   {
6115 #pragma omp atomic
6116     ++a;
6117   }
6118 #pragma omp parallel
6119   {
6120 #pragma omp target
6121     ++a;
6122   }
6123 #pragma omp parallel
6124   {
6125 #pragma omp target parallel
6126     ++a;
6127   }
6128 #pragma omp parallel
6129 #pragma omp target parallel for
6130   for (int i = 0; i < 10; ++i)
6131     ;
6132 #pragma omp parallel
6133   {
6134 #pragma omp target enter data map(to: a)
6135     ++a;
6136   }
6137 #pragma omp parallel
6138   {
6139 #pragma omp target exit data map(from: a)
6140     ++a;
6141   }
6142 #pragma omp parallel
6143   {
6144 #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?}}
6145     ++a;
6146   }
6147 #pragma omp parallel
6148   {
6149 #pragma omp taskloop
6150   for (int i = 0; i < 10; ++i)
6151     ++a;
6152   }
6153 #pragma omp parallel
6154   {
6155 #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?}}
6156     for (int i = 0; i < 10; ++i)
6157       ;
6158   }
6159 #pragma omp parallel
6160   {
6161 #pragma omp target update to(a)
6162     a++;
6163   }
6164 #pragma omp parallel
6165   {
6166 #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?}}
6167     for (int i = 0; i < 10; ++i)
6168       ;
6169   }
6170 #pragma omp parallel
6171   {
6172 #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?}}
6173     for (int i = 0; i < 10; ++i)
6174       ;
6175   }
6176 #pragma omp parallel
6177   {
6178 #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?}}
6179     for (int i = 0; i < 10; ++i)
6180       ;
6181   }
6182 #pragma omp parallel
6183   {
6184 #pragma omp target simd // OK
6185     for (int i = 0; i < 10; ++i)
6186       ;
6187   }
6188 #pragma omp parallel
6189   {
6190 #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?}}
6191     for (int i = 0; i < 10; ++i)
6192       ;
6193   }
6194 #pragma omp parallel
6195   {
6196 #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?}}
6197     for (int i = 0; i < 10; ++i)
6198       ;
6199   }
6200 
6201 // SIMD DIRECTIVE
6202 #pragma omp simd
6203   for (int i = 0; i < 10; ++i) {
6204 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6205     for (int i = 0; i < 10; ++i)
6206       ;
6207   }
6208 #pragma omp simd
6209   for (int i = 0; i < 10; ++i) {
6210 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6211     for (int i = 0; i < 10; ++i)
6212       ;
6213   }
6214 #pragma omp simd
6215   for (int i = 0; i < 10; ++i) {
6216 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6217     for (int i = 0; i < 10; ++i)
6218       ;
6219   }
6220 #pragma omp simd
6221   for (int i = 0; i < 10; ++i) {
6222 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6223     for (int i = 0; i < 10; ++i)
6224       ;
6225   }
6226 #pragma omp simd
6227   for (int i = 0; i < 10; ++i) {
6228 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6229     {
6230       bar();
6231     }
6232   }
6233 #pragma omp simd
6234   for (int i = 0; i < 10; ++i) {
6235 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6236     {
6237       bar();
6238     }
6239   }
6240 #pragma omp simd
6241   for (int i = 0; i < 10; ++i) {
6242 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6243     bar();
6244 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6245     bar();
6246   }
6247 #pragma omp simd
6248   for (int i = 0; i < 10; ++i) {
6249 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6250     bar();
6251 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6252     bar();
6253   }
6254 #pragma omp simd
6255   for (int i = 0; i < 10; ++i) {
6256 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6257     for (int i = 0; i < 10; ++i)
6258       ;
6259   }
6260 #pragma omp simd
6261   for (int i = 0; i < 10; ++i) {
6262 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6263     for (int i = 0; i < 10; ++i)
6264       ;
6265   }
6266 #pragma omp simd
6267   for (int i = 0; i < 10; ++i) {
6268 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6269     {
6270       bar();
6271     }
6272   }
6273 #pragma omp simd
6274   for (int i = 0; i < 10; ++i) {
6275 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6276     {
6277       bar();
6278     }
6279   }
6280 #pragma omp simd
6281   for (int i = 0; i < 10; ++i) {
6282 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6283     bar();
6284   }
6285 #pragma omp simd
6286   for (int i = 0; i < 10; ++i) {
6287 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6288     bar();
6289   }
6290 #pragma omp simd
6291   for (int i = 0; i < 10; ++i) {
6292 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6293     bar();
6294   }
6295 #pragma omp simd
6296   for (int i = 0; i < 10; ++i) {
6297 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6298     bar();
6299   }
6300 #pragma omp simd
6301   for (int i = 0; i < 10; ++i) {
6302 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6303     bar();
6304   }
6305 #pragma omp simd
6306   for (int i = 0; i < 10; ++i) {
6307 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6308     ++a;
6309   }
6310 #pragma omp simd
6311   for (int i = 0; i < 10; ++i) {
6312 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6313     ++a;
6314   }
6315 #pragma omp simd
6316   for (int i = 0; i < 10; ++i) {
6317 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6318     ++a;
6319   }
6320 #pragma omp simd
6321   for (int i = 0; i < 10; ++i) {
6322 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6323     for (int i = 0; i < 10; ++i)
6324       ;
6325   }
6326 #pragma omp simd
6327   for (int i = 0; i < 10; ++i) {
6328 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6329     ++a;
6330   }
6331 #pragma omp simd
6332   for (int i = 0; i < 10; ++i) {
6333 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6334     ++a;
6335   }
6336 #pragma omp simd
6337   for (int i = 0; i < 10; ++i) {
6338 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6339     ++a;
6340   }
6341 #pragma omp simd
6342   for (int i = 0; i < 10; ++i) {
6343 #pragma omp taskloop // 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 simd
6348   for (int i = 0; i < 10; ++i) {
6349 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6350     for (int j = 0; j < 10; ++j)
6351       ;
6352   }
6353 #pragma omp simd
6354   for (int i = 0; i < 10; ++i) {
6355 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6356     a++;
6357   }
6358 #pragma omp simd
6359   for (int i = 0; i < 10; ++i) {
6360 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6361     for (int j = 0; j < 10; ++j)
6362       ;
6363   }
6364 #pragma omp simd
6365   for (int i = 0; i < 10; ++i) {
6366 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6367     for (int j = 0; j < 10; ++j)
6368       ;
6369   }
6370 #pragma omp simd
6371   for (int i = 0; i < 10; ++i) {
6372 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6373     for (int j = 0; j < 10; ++j)
6374       ;
6375   }
6376 #pragma omp simd
6377   for (int i = 0; i < 10; ++i) {
6378 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6379     for (int j = 0; j < 10; ++j)
6380       ;
6381   }
6382 #pragma omp simd
6383   for (int i = 0; i < 10; ++i) {
6384 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6385     for (int j = 0; j < 10; ++j)
6386       ;
6387   }
6388 #pragma omp simd
6389   for (int i = 0; i < 10; ++i) {
6390 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6391     for (int j = 0; j < 10; ++j)
6392       ;
6393   }
6394 
6395 // FOR DIRECTIVE
6396 #pragma omp for
6397   for (int i = 0; i < 10; ++i) {
6398 #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?}}
6399     for (int i = 0; i < 10; ++i)
6400       ;
6401   }
6402 #pragma omp for
6403   for (int i = 0; i < 10; ++i) {
6404 #pragma omp simd
6405     for (int i = 0; i < 10; ++i)
6406       ;
6407   }
6408 #pragma omp for
6409   for (int i = 0; i < 10; ++i) {
6410 #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?}}
6411     for (int i = 0; i < 10; ++i)
6412       ;
6413   }
6414 #pragma omp for
6415   for (int i = 0; i < 10; ++i) {
6416 #pragma omp parallel
6417     for (int i = 0; i < 10; ++i)
6418       ;
6419   }
6420 #pragma omp for
6421   for (int i = 0; i < 10; ++i) {
6422 #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?}}
6423     {
6424       bar();
6425     }
6426   }
6427 #pragma omp for
6428   for (int i = 0; i < 10; ++i) {
6429 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
6430     {
6431       bar();
6432     }
6433   }
6434 #pragma omp for
6435   for (int i = 0; i < 10; ++i) {
6436 #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?}}
6437     bar();
6438 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
6439     bar();
6440 #pragma omp critical
6441     bar();
6442   }
6443 #pragma omp for
6444   for (int i = 0; i < 10; ++i) {
6445 #pragma omp parallel
6446     {
6447 #pragma omp single // OK
6448       {
6449         bar();
6450       }
6451 #pragma omp for // OK
6452       for (int i = 0; i < 10; ++i)
6453         ;
6454 #pragma omp for simd // OK
6455       for (int i = 0; i < 10; ++i)
6456         ;
6457 #pragma omp sections // OK
6458       {
6459         bar();
6460       }
6461     }
6462   }
6463 #pragma omp for
6464   for (int i = 0; i < 10; ++i) {
6465 #pragma omp parallel for
6466     for (int i = 0; i < 10; ++i)
6467       ;
6468   }
6469 #pragma omp for
6470   for (int i = 0; i < 10; ++i) {
6471 #pragma omp parallel for simd
6472     for (int i = 0; i < 10; ++i)
6473       ;
6474   }
6475 #pragma omp for
6476   for (int i = 0; i < 10; ++i) {
6477 #pragma omp parallel sections
6478     {
6479       bar();
6480     }
6481   }
6482 #pragma omp for
6483   for (int i = 0; i < 10; ++i) {
6484 #pragma omp task
6485     {
6486       bar();
6487     }
6488   }
6489 #pragma omp for
6490   for (int i = 0; i < 10; ++i) {
6491 #pragma omp taskyield
6492     bar();
6493   }
6494 #pragma omp for
6495   for (int i = 0; i < 10; ++i) {
6496 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
6497     bar();
6498   }
6499 #pragma omp for
6500   for (int i = 0; i < 10; ++i) {
6501 #pragma omp taskwait
6502     bar();
6503   }
6504 #pragma omp for
6505   for (int i = 0; i < 10; ++i) {
6506 #pragma omp flush
6507     bar();
6508   }
6509 #pragma omp for
6510   for (int i = 0; i < 10; ++i) {
6511 #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?}}
6512     bar();
6513   }
6514 #pragma omp for ordered
6515   for (int i = 0; i < 10; ++i) {
6516 #pragma omp ordered // OK
6517     bar();
6518   }
6519 #pragma omp for
6520   for (int i = 0; i < 10; ++i) {
6521 #pragma omp atomic
6522     ++a;
6523   }
6524 #pragma omp for
6525   for (int i = 0; i < 10; ++i) {
6526 #pragma omp target
6527     ++a;
6528   }
6529 #pragma omp for
6530   for (int i = 0; i < 10; ++i) {
6531 #pragma omp target parallel
6532     ++a;
6533   }
6534 #pragma omp for
6535   for (int i = 0; i < 10; ++i) {
6536 #pragma omp target parallel for
6537     for (int i = 0; i < 10; ++i)
6538       ;
6539   }
6540 #pragma omp for
6541   for (int i = 0; i < 10; ++i) {
6542 #pragma omp target enter data map(to: a)
6543     ++a;
6544   }
6545 #pragma omp for
6546   for (int i = 0; i < 10; ++i) {
6547 #pragma omp target exit data map(from: a)
6548     ++a;
6549   }
6550 #pragma omp for
6551   for (int i = 0; i < 10; ++i) {
6552 #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?}}
6553     ++a;
6554   }
6555 #pragma omp for
6556   for (int i = 0; i < 10; ++i) {
6557 #pragma omp taskloop
6558   for (int i = 0; i < 10; ++i)
6559     ++a;
6560   }
6561 #pragma omp for
6562   for (int i = 0; i < 10; ++i) {
6563 #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?}}
6564     for (int j = 0; j < 10; ++j)
6565       ;
6566   }
6567 #pragma omp for
6568   for (int i = 0; i < 10; ++i) {
6569 #pragma omp target update to(a)
6570     ++a;
6571   }
6572 #pragma omp for
6573   for (int i = 0; i < 10; ++i) {
6574 #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?}}
6575     for (int j = 0; j < 10; ++j)
6576       ;
6577   }
6578 #pragma omp for
6579   for (int i = 0; i < 10; ++i) {
6580 #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?}}
6581     for (int j = 0; j < 10; ++j)
6582       ;
6583   }
6584 #pragma omp for
6585   for (int i = 0; i < 10; ++i) {
6586 #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?}}
6587     for (int j = 0; j < 10; ++j)
6588       ;
6589   }
6590 #pragma omp for
6591   for (int i = 0; i < 10; ++i) {
6592 #pragma omp target simd // OK
6593     for (int j = 0; j < 10; ++j)
6594       ;
6595   }
6596 #pragma omp for
6597   for (int i = 0; i < 10; ++i) {
6598 #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?}}
6599     for (int j = 0; j < 10; ++j)
6600       ;
6601   }
6602 #pragma omp for
6603   for (int i = 0; i < 10; ++i) {
6604 #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?}}
6605     for (int j = 0; j < 10; ++j)
6606       ;
6607   }
6608 
6609 // FOR SIMD DIRECTIVE
6610 #pragma omp for simd
6611   for (int i = 0; i < 10; ++i) {
6612 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6613     for (int i = 0; i < 10; ++i)
6614       ;
6615   }
6616 #pragma omp for simd
6617   for (int i = 0; i < 10; ++i) {
6618 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6619     for (int i = 0; i < 10; ++i)
6620       ;
6621   }
6622 #pragma omp for simd
6623   for (int i = 0; i < 10; ++i) {
6624 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6625     for (int i = 0; i < 10; ++i)
6626       ;
6627   }
6628 #pragma omp for simd
6629   for (int i = 0; i < 10; ++i) {
6630 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6631     for (int i = 0; i < 10; ++i)
6632       ;
6633   }
6634 #pragma omp for simd
6635   for (int i = 0; i < 10; ++i) {
6636 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6637     {
6638       bar();
6639     }
6640   }
6641 #pragma omp for simd
6642   for (int i = 0; i < 10; ++i) {
6643 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6644     {
6645       bar();
6646     }
6647   }
6648 #pragma omp for simd
6649   for (int i = 0; i < 10; ++i) {
6650 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6651     bar();
6652 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6653     bar();
6654   }
6655 #pragma omp for simd
6656   for (int i = 0; i < 10; ++i) {
6657 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6658     bar();
6659 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6660     bar();
6661   }
6662 #pragma omp for simd
6663   for (int i = 0; i < 10; ++i) {
6664 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6665     for (int i = 0; i < 10; ++i)
6666       ;
6667   }
6668 #pragma omp for simd
6669   for (int i = 0; i < 10; ++i) {
6670 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6671     for (int i = 0; i < 10; ++i)
6672       ;
6673   }
6674 #pragma omp for simd
6675   for (int i = 0; i < 10; ++i) {
6676 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6677     {
6678       bar();
6679     }
6680   }
6681 #pragma omp for simd
6682   for (int i = 0; i < 10; ++i) {
6683 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6684     {
6685       bar();
6686     }
6687   }
6688 #pragma omp for simd
6689   for (int i = 0; i < 10; ++i) {
6690 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6691     bar();
6692   }
6693 #pragma omp for simd
6694   for (int i = 0; i < 10; ++i) {
6695 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6696     bar();
6697   }
6698 #pragma omp for simd
6699   for (int i = 0; i < 10; ++i) {
6700 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6701     bar();
6702   }
6703 #pragma omp for simd
6704   for (int i = 0; i < 10; ++i) {
6705 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6706     bar();
6707   }
6708 #pragma omp for simd
6709   for (int i = 0; i < 10; ++i) {
6710 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6711     bar();
6712   }
6713 #pragma omp for simd
6714   for (int i = 0; i < 10; ++i) {
6715 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6716     ++a;
6717   }
6718 #pragma omp for simd
6719   for (int i = 0; i < 10; ++i) {
6720 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6721     ++a;
6722   }
6723 #pragma omp for simd
6724   for (int i = 0; i < 10; ++i) {
6725 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6726     ++a;
6727   }
6728 #pragma omp for simd
6729   for (int i = 0; i < 10; ++i) {
6730 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6731     for (int i = 0; i < 10; ++i)
6732       ;
6733   }
6734 #pragma omp for simd
6735   for (int i = 0; i < 10; ++i) {
6736 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6737     ++a;
6738   }
6739 #pragma omp for simd
6740   for (int i = 0; i < 10; ++i) {
6741 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6742     ++a;
6743   }
6744 #pragma omp for simd
6745   for (int i = 0; i < 10; ++i) {
6746 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6747     ++a;
6748   }
6749 #pragma omp for simd
6750   for (int i = 0; i < 10; ++i) {
6751 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6752   for (int i = 0; i < 10; ++i)
6753     ++a;
6754   }
6755 #pragma omp for simd
6756   for (int i = 0; i < 10; ++i) {
6757 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6758     for (int j = 0; j < 10; ++j)
6759       ;
6760   }
6761 #pragma omp for simd
6762   for (int i = 0; i < 10; ++i) {
6763 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6764     ++a;
6765   }
6766 #pragma omp for simd
6767   for (int i = 0; i < 10; ++i) {
6768 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6769     for (int j = 0; j < 10; ++j)
6770       ;
6771   }
6772 #pragma omp for simd
6773   for (int i = 0; i < 10; ++i) {
6774 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6775     for (int j = 0; j < 10; ++j)
6776       ;
6777   }
6778 #pragma omp for simd
6779   for (int i = 0; i < 10; ++i) {
6780 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6781     for (int j = 0; j < 10; ++j)
6782       ;
6783   }
6784 #pragma omp for simd
6785   for (int i = 0; i < 10; ++i) {
6786 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6787     for (int j = 0; j < 10; ++j)
6788       ;
6789   }
6790 #pragma omp for simd
6791   for (int i = 0; i < 10; ++i) {
6792 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6793     for (int j = 0; j < 10; ++j)
6794       ;
6795   }
6796 #pragma omp for simd
6797   for (int i = 0; i < 10; ++i) {
6798 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6799     for (int j = 0; j < 10; ++j)
6800       ;
6801   }
6802 
6803 // SECTIONS DIRECTIVE
6804 #pragma omp sections
6805   {
6806 #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?}}
6807     for (int i = 0; i < 10; ++i)
6808       ;
6809   }
6810 #pragma omp sections
6811   {
6812 #pragma omp simd
6813     for (int i = 0; i < 10; ++i)
6814       ;
6815   }
6816 #pragma omp sections
6817   {
6818 #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?}}
6819     for (int i = 0; i < 10; ++i)
6820       ;
6821   }
6822 #pragma omp sections
6823   {
6824 #pragma omp parallel
6825     for (int i = 0; i < 10; ++i)
6826       ;
6827   }
6828 #pragma omp sections
6829   {
6830 #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?}}
6831     {
6832       bar();
6833     }
6834   }
6835 #pragma omp sections
6836   {
6837 #pragma omp section
6838     {
6839       bar();
6840     }
6841   }
6842 #pragma omp sections
6843   {
6844 #pragma omp critical
6845     bar();
6846 #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?}}
6847     bar();
6848 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
6849     bar();
6850   }
6851 #pragma omp sections
6852   {
6853 #pragma omp parallel
6854     {
6855 #pragma omp single // OK
6856       {
6857         bar();
6858       }
6859 #pragma omp for // OK
6860       for (int i = 0; i < 10; ++i)
6861         ;
6862 #pragma omp for simd // OK
6863       for (int i = 0; i < 10; ++i)
6864         ;
6865 #pragma omp sections // OK
6866       {
6867         bar();
6868       }
6869     }
6870   }
6871 #pragma omp sections
6872   {
6873 #pragma omp parallel for
6874     for (int i = 0; i < 10; ++i)
6875       ;
6876   }
6877 #pragma omp sections
6878   {
6879 #pragma omp parallel for simd
6880     for (int i = 0; i < 10; ++i)
6881       ;
6882   }
6883 #pragma omp sections
6884   {
6885 #pragma omp parallel sections
6886     {
6887       bar();
6888     }
6889   }
6890 #pragma omp sections
6891   {
6892 #pragma omp task
6893     {
6894       bar();
6895     }
6896   }
6897 #pragma omp sections
6898   {
6899 #pragma omp taskyield
6900   }
6901 #pragma omp sections
6902   {
6903 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
6904     bar();
6905   }
6906 #pragma omp sections
6907   {
6908 #pragma omp taskwait
6909   }
6910 #pragma omp sections
6911   {
6912 #pragma omp flush
6913   }
6914 #pragma omp sections
6915   {
6916 #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?}}
6917     bar();
6918   }
6919 #pragma omp sections
6920   {
6921 #pragma omp atomic
6922     ++a;
6923   }
6924 #pragma omp sections
6925   {
6926 #pragma omp target
6927     ++a;
6928   }
6929 #pragma omp sections
6930   {
6931 #pragma omp target parallel
6932     ++a;
6933   }
6934 #pragma omp sections
6935   {
6936 #pragma omp target parallel for
6937     for (int i = 0; i < 10; ++i)
6938       ;
6939   }
6940 #pragma omp sections
6941   {
6942 #pragma omp target enter data map(to: a)
6943   }
6944 #pragma omp sections
6945   {
6946 #pragma omp target exit data map(from: a)
6947   }
6948 #pragma omp sections
6949   {
6950 #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?}}
6951     ++a;
6952   }
6953 #pragma omp sections
6954   {
6955 #pragma omp taskloop
6956   for (int i = 0; i < 10; ++i)
6957     ++a;
6958   }
6959 #pragma omp sections
6960   {
6961 #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?}}
6962     for (int i = 0; i < 10; ++i)
6963       ;
6964   }
6965 #pragma omp sections
6966   {
6967 #pragma omp target update to(a)
6968   }
6969 #pragma omp sections
6970   {
6971 #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?}}
6972     for (int i = 0; i < 10; ++i)
6973       ;
6974   }
6975 #pragma omp sections
6976   {
6977 #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?}}
6978     for (int i = 0; i < 10; ++i)
6979       ;
6980   }
6981 #pragma omp sections
6982   {
6983 #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?}}
6984     for (int i = 0; i < 10; ++i)
6985       ;
6986   }
6987 #pragma omp sections
6988   {
6989 #pragma omp target simd // OK
6990     for (int i = 0; i < 10; ++i)
6991       ;
6992   }
6993 #pragma omp sections
6994   {
6995 #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?}}
6996     for (int i = 0; i < 10; ++i)
6997       ;
6998   }
6999 #pragma omp sections
7000   {
7001 #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?}}
7002     for (int i = 0; i < 10; ++i)
7003       ;
7004   }
7005 
7006 // SECTION DIRECTIVE
7007 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
7008   {
7009     bar();
7010   }
7011 #pragma omp sections
7012   {
7013 #pragma omp section
7014     {
7015 #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?}}
7016       for (int i = 0; i < 10; ++i)
7017         ;
7018     }
7019   }
7020 #pragma omp sections
7021   {
7022 #pragma omp section
7023     {
7024 #pragma omp simd
7025       for (int i = 0; i < 10; ++i)
7026         ;
7027     }
7028   }
7029 #pragma omp sections
7030   {
7031 #pragma omp section
7032     {
7033 #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?}}
7034       for (int i = 0; i < 10; ++i)
7035         ;
7036     }
7037   }
7038 #pragma omp sections
7039   {
7040 #pragma omp section
7041     {
7042 #pragma omp parallel
7043       for (int i = 0; i < 10; ++i)
7044         ;
7045     }
7046   }
7047 #pragma omp sections
7048   {
7049 #pragma omp section
7050     {
7051 #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?}}
7052       {
7053         bar();
7054       }
7055     }
7056   }
7057 #pragma omp sections
7058   {
7059 #pragma omp section
7060     {
7061 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
7062       {
7063         bar();
7064       }
7065     }
7066   }
7067 #pragma omp sections
7068   {
7069 #pragma omp section
7070     {
7071 #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?}}
7072       bar();
7073 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
7074       bar();
7075 #pragma omp critical
7076       bar();
7077     }
7078   }
7079 #pragma omp sections
7080   {
7081 #pragma omp section
7082     {
7083 #pragma omp parallel
7084       {
7085 #pragma omp single // OK
7086         {
7087           bar();
7088         }
7089 #pragma omp for // OK
7090         for (int i = 0; i < 10; ++i)
7091           ;
7092 #pragma omp for simd // OK
7093         for (int i = 0; i < 10; ++i)
7094           ;
7095 #pragma omp sections // OK
7096         {
7097           bar();
7098         }
7099       }
7100     }
7101   }
7102 #pragma omp sections
7103   {
7104 #pragma omp section
7105     {
7106 #pragma omp parallel for
7107       for (int i = 0; i < 10; ++i)
7108         ;
7109     }
7110   }
7111 #pragma omp sections
7112   {
7113 #pragma omp section
7114     {
7115 #pragma omp parallel for simd
7116       for (int i = 0; i < 10; ++i)
7117         ;
7118     }
7119   }
7120 #pragma omp sections
7121   {
7122 #pragma omp section
7123     {
7124 #pragma omp parallel sections
7125       {
7126         bar();
7127       }
7128     }
7129   }
7130 #pragma omp sections
7131   {
7132 #pragma omp section
7133     {
7134 #pragma omp task
7135       {
7136         bar();
7137       }
7138     }
7139   }
7140 #pragma omp sections
7141   {
7142 #pragma omp section
7143     {
7144 #pragma omp taskyield
7145       bar();
7146     }
7147   }
7148 #pragma omp sections
7149   {
7150 #pragma omp section
7151     {
7152 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
7153       bar();
7154     }
7155   }
7156 #pragma omp sections
7157   {
7158 #pragma omp section
7159     {
7160 #pragma omp taskwait
7161       bar();
7162     }
7163   }
7164 #pragma omp sections
7165   {
7166 #pragma omp section
7167     {
7168 #pragma omp flush
7169       bar();
7170     }
7171   }
7172 #pragma omp sections
7173   {
7174 #pragma omp section
7175     {
7176 #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?}}
7177       bar();
7178     }
7179   }
7180 #pragma omp sections
7181   {
7182 #pragma omp section
7183     {
7184 #pragma omp atomic
7185       ++a;
7186     }
7187   }
7188 #pragma omp sections
7189   {
7190 #pragma omp section
7191     {
7192 #pragma omp target
7193       ++a;
7194     }
7195   }
7196 #pragma omp sections
7197   {
7198 #pragma omp section
7199     {
7200 #pragma omp target parallel
7201       ++a;
7202     }
7203   }
7204 #pragma omp sections
7205   {
7206 #pragma omp section
7207     {
7208 #pragma omp target parallel for
7209       for (int i = 0; i < 10; ++i)
7210         ;
7211     }
7212   }
7213 #pragma omp sections
7214   {
7215 #pragma omp section
7216     {
7217 #pragma omp target enter data map(to: a)
7218       ++a;
7219     }
7220   }
7221 #pragma omp sections
7222   {
7223 #pragma omp section
7224     {
7225 #pragma omp target exit data map(from: a)
7226       ++a;
7227     }
7228   }
7229 #pragma omp sections
7230   {
7231 #pragma omp section
7232     {
7233 #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?}}
7234       ++a;
7235     }
7236   }
7237 #pragma omp sections
7238   {
7239 #pragma omp section
7240     {
7241 #pragma omp taskloop
7242   for (int i = 0; i < 10; ++i)
7243       ++a;
7244     }
7245   }
7246 #pragma omp sections
7247   {
7248 #pragma omp section
7249 #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?}}
7250     for (int i = 0; i < 10; ++i)
7251       ;
7252   }
7253 #pragma omp sections
7254   {
7255 #pragma omp section
7256     {
7257 #pragma omp target update to(a)
7258       a++;
7259     }
7260   }
7261 #pragma omp sections
7262   {
7263 #pragma omp section
7264 #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?}}
7265     for (int i = 0; i < 10; ++i)
7266       ;
7267   }
7268 #pragma omp sections
7269   {
7270 #pragma omp section
7271 #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?}}
7272     for (int i = 0; i < 10; ++i)
7273       ;
7274   }
7275 #pragma omp sections
7276   {
7277 #pragma omp section
7278 #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?}}
7279     for (int i = 0; i < 10; ++i)
7280       ;
7281   }
7282 #pragma omp sections
7283   {
7284 #pragma omp section
7285 #pragma omp target simd // OK
7286     for (int i = 0; i < 10; ++i)
7287       ;
7288   }
7289 #pragma omp sections
7290   {
7291 #pragma omp section
7292 #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?}}
7293     for (int i = 0; i < 10; ++i)
7294       ;
7295   }
7296 #pragma omp sections
7297   {
7298 #pragma omp section
7299 #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?}}
7300     for (int i = 0; i < 10; ++i)
7301       ;
7302   }
7303 
7304 // SINGLE DIRECTIVE
7305 #pragma omp single
7306   {
7307 #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?}}
7308     for (int i = 0; i < 10; ++i)
7309       ;
7310   }
7311 #pragma omp single
7312   {
7313 #pragma omp simd
7314     for (int i = 0; i < 10; ++i)
7315       ;
7316   }
7317 #pragma omp single
7318   {
7319 #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?}}
7320     for (int i = 0; i < 10; ++i)
7321       ;
7322   }
7323 #pragma omp single
7324   {
7325 #pragma omp parallel
7326     for (int i = 0; i < 10; ++i)
7327       ;
7328   }
7329 #pragma omp single
7330   {
7331 #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?}}
7332     {
7333       bar();
7334     }
7335 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
7336     bar();
7337 #pragma omp critical
7338     bar();
7339   }
7340 #pragma omp single
7341   {
7342 #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?}}
7343     {
7344       bar();
7345     }
7346   }
7347 #pragma omp single
7348   {
7349 #pragma omp parallel
7350     {
7351 #pragma omp single // OK
7352       {
7353         bar();
7354       }
7355 #pragma omp for // OK
7356       for (int i = 0; i < 10; ++i)
7357         ;
7358 #pragma omp for simd // OK
7359       for (int i = 0; i < 10; ++i)
7360         ;
7361 #pragma omp sections // OK
7362       {
7363         bar();
7364       }
7365     }
7366   }
7367 #pragma omp single
7368   {
7369 #pragma omp parallel for
7370     for (int i = 0; i < 10; ++i)
7371       ;
7372   }
7373 #pragma omp single
7374   {
7375 #pragma omp parallel for simd
7376     for (int i = 0; i < 10; ++i)
7377       ;
7378   }
7379 #pragma omp single
7380   {
7381 #pragma omp parallel sections
7382     {
7383       bar();
7384     }
7385   }
7386 #pragma omp single
7387   {
7388 #pragma omp task
7389     {
7390       bar();
7391     }
7392   }
7393 #pragma omp single
7394   {
7395 #pragma omp taskyield
7396     bar();
7397   }
7398 #pragma omp single
7399   {
7400 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
7401     bar();
7402   }
7403 #pragma omp single
7404   {
7405 #pragma omp taskwait
7406     bar();
7407   }
7408 #pragma omp single
7409   {
7410 #pragma omp flush
7411     bar();
7412   }
7413 #pragma omp single
7414   {
7415 #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?}}
7416     bar();
7417   }
7418 #pragma omp single
7419   {
7420 #pragma omp atomic
7421     ++a;
7422   }
7423 #pragma omp single
7424   {
7425 #pragma omp target
7426     ++a;
7427   }
7428 #pragma omp single
7429   {
7430 #pragma omp target parallel
7431     ++a;
7432   }
7433 #pragma omp single
7434   {
7435 #pragma omp target parallel for
7436     for (int i = 0; i < 10; ++i)
7437       ;
7438   }
7439 #pragma omp single
7440   {
7441 #pragma omp target enter data map(to: a)
7442     ++a;
7443   }
7444 #pragma omp single
7445   {
7446 #pragma omp target exit data map(from: a)
7447     ++a;
7448   }
7449 #pragma omp single
7450   {
7451 #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?}}
7452     ++a;
7453   }
7454 #pragma omp single
7455   {
7456 #pragma omp taskloop
7457   for (int i = 0; i < 10; ++i)
7458     ++a;
7459   }
7460 #pragma omp single
7461   {
7462 #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?}}
7463     for (int i = 0; i < 10; ++i)
7464       ;
7465   }
7466 #pragma omp single
7467   {
7468 #pragma omp target update to(a)
7469     a++;
7470   }
7471 #pragma omp single
7472   {
7473 #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?}}
7474     for (int i = 0; i < 10; ++i)
7475       ;
7476   }
7477 #pragma omp single
7478   {
7479 #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?}}
7480     for (int i = 0; i < 10; ++i)
7481       ;
7482   }
7483 #pragma omp single
7484   {
7485 #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?}}
7486     for (int i = 0; i < 10; ++i)
7487       ;
7488   }
7489 #pragma omp single
7490   {
7491 #pragma omp target simd // OK
7492     for (int i = 0; i < 10; ++i)
7493       ;
7494   }
7495 #pragma omp single
7496   {
7497 #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?}}
7498     for (int i = 0; i < 10; ++i)
7499       ;
7500   }
7501 #pragma omp single
7502   {
7503 #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?}}
7504     for (int i = 0; i < 10; ++i)
7505       ;
7506   }
7507 
7508 // MASTER DIRECTIVE
7509 #pragma omp master
7510   {
7511 #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?}}
7512     for (int i = 0; i < 10; ++i)
7513       ;
7514   }
7515 #pragma omp master
7516   {
7517 #pragma omp simd
7518     for (int i = 0; i < 10; ++i)
7519       ;
7520   }
7521 #pragma omp master
7522   {
7523 #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?}}
7524     for (int i = 0; i < 10; ++i)
7525       ;
7526   }
7527 #pragma omp master
7528   {
7529 #pragma omp parallel
7530     for (int i = 0; i < 10; ++i)
7531       ;
7532   }
7533 #pragma omp master
7534   {
7535 #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?}}
7536     {
7537       bar();
7538     }
7539   }
7540 #pragma omp master
7541   {
7542 #pragma omp master // OK, though second 'master' is redundant
7543     {
7544       bar();
7545     }
7546   }
7547 #pragma omp master
7548   {
7549 #pragma omp critical
7550     {
7551       bar();
7552     }
7553   }
7554 #pragma omp master
7555   {
7556 #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?}}
7557     {
7558       bar();
7559     }
7560   }
7561 #pragma omp master
7562   {
7563 #pragma omp parallel
7564     {
7565 #pragma omp master // OK
7566       {
7567         bar();
7568       }
7569 #pragma omp for // OK
7570       for (int i = 0; i < 10; ++i)
7571         ;
7572 #pragma omp for simd // OK
7573       for (int i = 0; i < 10; ++i)
7574         ;
7575 #pragma omp sections // OK
7576       {
7577         bar();
7578       }
7579     }
7580   }
7581 #pragma omp master
7582   {
7583 #pragma omp parallel for
7584     for (int i = 0; i < 10; ++i)
7585       ;
7586   }
7587 #pragma omp master
7588   {
7589 #pragma omp parallel for simd
7590     for (int i = 0; i < 10; ++i)
7591       ;
7592   }
7593 #pragma omp master
7594   {
7595 #pragma omp parallel sections
7596     {
7597       bar();
7598     }
7599   }
7600 #pragma omp master
7601   {
7602 #pragma omp task
7603     {
7604       bar();
7605     }
7606   }
7607 #pragma omp master
7608   {
7609 #pragma omp taskyield
7610     bar();
7611   }
7612 #pragma omp master
7613   {
7614 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
7615     bar();
7616   }
7617 #pragma omp master
7618   {
7619 #pragma omp taskwait
7620     bar();
7621   }
7622 #pragma omp master
7623   {
7624 #pragma omp flush
7625     bar();
7626   }
7627 #pragma omp master
7628   {
7629 #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?}}
7630     bar();
7631   }
7632 #pragma omp master
7633   {
7634 #pragma omp atomic
7635     ++a;
7636   }
7637 #pragma omp master
7638   {
7639 #pragma omp target
7640     ++a;
7641   }
7642 #pragma omp master
7643   {
7644 #pragma omp target parallel
7645     ++a;
7646   }
7647 #pragma omp master
7648   {
7649 #pragma omp target parallel for
7650     for (int i = 0; i < 10; ++i)
7651       ;
7652   }
7653 #pragma omp master
7654   {
7655 #pragma omp target enter data map(to: a)
7656     ++a;
7657   }
7658 #pragma omp master
7659   {
7660 #pragma omp target exit data map(from: a)
7661     ++a;
7662   }
7663 #pragma omp master
7664   {
7665 #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?}}
7666     ++a;
7667   }
7668 #pragma omp master
7669   {
7670 #pragma omp taskloop
7671   for (int i = 0; i < 10; ++i)
7672     ++a;
7673   }
7674 #pragma omp master
7675   {
7676 #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?}}
7677     for (int i = 0; i < 10; ++i)
7678       ;
7679   }
7680 #pragma omp master
7681   {
7682 #pragma omp target update to(a)
7683     ++a;
7684   }
7685 #pragma omp master
7686   {
7687 #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?}}
7688     for (int i = 0; i < 10; ++i)
7689       ;
7690   }
7691 #pragma omp master
7692   {
7693 #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?}}
7694     for (int i = 0; i < 10; ++i)
7695       ;
7696   }
7697 #pragma omp master
7698   {
7699 #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?}}
7700     for (int i = 0; i < 10; ++i)
7701       ;
7702   }
7703 #pragma omp master
7704   {
7705 #pragma omp target simd // OK
7706     for (int i = 0; i < 10; ++i)
7707       ;
7708   }
7709 #pragma omp master
7710   {
7711 #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?}}
7712     for (int i = 0; i < 10; ++i)
7713       ;
7714   }
7715 #pragma omp master
7716   {
7717 #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?}}
7718     for (int i = 0; i < 10; ++i)
7719       ;
7720   }
7721 
7722 // CRITICAL DIRECTIVE
7723 #pragma omp critical
7724   {
7725 #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?}}
7726     for (int i = 0; i < 10; ++i)
7727       ;
7728   }
7729 #pragma omp critical
7730   {
7731 #pragma omp simd
7732     for (int i = 0; i < 10; ++i)
7733       ;
7734   }
7735 #pragma omp critical
7736   {
7737 #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?}}
7738     for (int i = 0; i < 10; ++i)
7739       ;
7740   }
7741 #pragma omp critical
7742   {
7743 #pragma omp parallel
7744     for (int i = 0; i < 10; ++i)
7745       ;
7746   }
7747 #pragma omp critical
7748   {
7749 #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?}}
7750     {
7751       bar();
7752     }
7753   }
7754 #pragma omp critical
7755   {
7756 #pragma omp master // OK, though second 'master' is redundant
7757     {
7758       bar();
7759     }
7760   }
7761 #pragma omp critical
7762   {
7763 #pragma omp critical
7764     {
7765       bar();
7766     }
7767   }
7768 #pragma omp critical
7769   {
7770 #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?}}
7771     {
7772       bar();
7773     }
7774   }
7775 #pragma omp critical
7776   {
7777 #pragma omp parallel
7778     {
7779 #pragma omp master // OK
7780       {
7781         bar();
7782       }
7783 #pragma omp for // OK
7784       for (int i = 0; i < 10; ++i)
7785         ;
7786 #pragma omp for simd // OK
7787       for (int i = 0; i < 10; ++i)
7788         ;
7789 #pragma omp sections // OK
7790       {
7791         bar();
7792       }
7793     }
7794   }
7795 #pragma omp critical
7796   {
7797 #pragma omp parallel for
7798     for (int i = 0; i < 10; ++i)
7799       ;
7800   }
7801 #pragma omp critical
7802   {
7803 #pragma omp parallel for simd
7804     for (int i = 0; i < 10; ++i)
7805       ;
7806   }
7807 #pragma omp critical
7808   {
7809 #pragma omp parallel sections
7810     {
7811       bar();
7812     }
7813   }
7814 #pragma omp critical
7815   {
7816 #pragma omp task
7817     {
7818       bar();
7819     }
7820   }
7821 #pragma omp critical
7822   {
7823 #pragma omp taskyield
7824     bar();
7825   }
7826 #pragma omp critical
7827   {
7828 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
7829     bar();
7830   }
7831 #pragma omp critical
7832   {
7833 #pragma omp taskwait
7834     bar();
7835   }
7836 #pragma omp critical(Belka)
7837   {
7838 #pragma omp critical(Strelka)
7839     bar();
7840   }
7841 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
7842   {
7843 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
7844     {
7845 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
7846       {
7847 #pragma omp parallel
7848 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
7849         {
7850           bar();
7851         }
7852       }
7853     }
7854   }
7855 #pragma omp critical
7856   {
7857 #pragma omp flush
7858     bar();
7859   }
7860 #pragma omp critical
7861   {
7862 #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?}}
7863     bar();
7864   }
7865 #pragma omp critical
7866   {
7867 #pragma omp atomic
7868     ++a;
7869   }
7870 #pragma omp critical
7871   {
7872 #pragma omp target
7873     ++a;
7874   }
7875 #pragma omp critical
7876   {
7877 #pragma omp target parallel
7878     ++a;
7879   }
7880 #pragma omp critical
7881   {
7882 #pragma omp target parallel for
7883     for (int i = 0; i < 10; ++i)
7884       ;
7885   }
7886 #pragma omp critical
7887   {
7888 #pragma omp target enter data map(to: a)
7889     ++a;
7890   }
7891 #pragma omp critical
7892   {
7893 #pragma omp target exit data map(from: a)
7894     ++a;
7895   }
7896 #pragma omp critical
7897   {
7898 #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?}}
7899     ++a;
7900   }
7901 #pragma omp critical
7902   {
7903 #pragma omp taskloop
7904   for (int i = 0; i < 10; ++i)
7905     ++a;
7906   }
7907 #pragma omp critical
7908   {
7909 #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?}}
7910     for (int i = 0; i < 10; ++i)
7911       ;
7912   }
7913 #pragma omp critical
7914   {
7915 #pragma omp target update to(a)
7916     a++;
7917   }
7918 #pragma omp critical
7919   {
7920 #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?}}
7921     for (int i = 0; i < 10; ++i)
7922       ;
7923   }
7924 #pragma omp critical
7925   {
7926 #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?}}
7927     for (int i = 0; i < 10; ++i)
7928       ;
7929   }
7930 #pragma omp critical
7931   {
7932 #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?}}
7933     for (int i = 0; i < 10; ++i)
7934       ;
7935   }
7936 #pragma omp critical
7937   {
7938 #pragma omp target simd // OK
7939     for (int i = 0; i < 10; ++i)
7940       ;
7941   }
7942 #pragma omp critical
7943   {
7944 #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?}}
7945     for (int i = 0; i < 10; ++i)
7946       ;
7947   }
7948 #pragma omp critical
7949   {
7950 #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?}}
7951     for (int i = 0; i < 10; ++i)
7952       ;
7953   }
7954 
7955 // PARALLEL FOR DIRECTIVE
7956 #pragma omp parallel for
7957   for (int i = 0; i < 10; ++i) {
7958 #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?}}
7959     for (int i = 0; i < 10; ++i)
7960       ;
7961   }
7962 #pragma omp parallel for
7963   for (int i = 0; i < 10; ++i) {
7964 #pragma omp simd
7965     for (int i = 0; i < 10; ++i)
7966       ;
7967   }
7968 #pragma omp parallel for
7969   for (int i = 0; i < 10; ++i) {
7970 #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?}}
7971     for (int i = 0; i < 10; ++i)
7972       ;
7973   }
7974 
7975 #pragma omp parallel for
7976   for (int i = 0; i < 10; ++i) {
7977 #pragma omp parallel
7978     for (int i = 0; i < 10; ++i)
7979       ;
7980   }
7981 #pragma omp parallel for
7982   for (int i = 0; i < 10; ++i) {
7983 #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?}}
7984     {
7985       bar();
7986     }
7987   }
7988 #pragma omp parallel for
7989   for (int i = 0; i < 10; ++i) {
7990 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
7991     {
7992       bar();
7993     }
7994   }
7995 #pragma omp parallel for
7996   for (int i = 0; i < 10; ++i) {
7997 #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?}}
7998     {
7999       bar();
8000     }
8001 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
8002     {
8003       bar();
8004     }
8005 #pragma omp critical
8006     {
8007       bar();
8008     }
8009   }
8010 #pragma omp parallel for
8011   for (int i = 0; i < 10; ++i) {
8012 #pragma omp parallel
8013     {
8014 #pragma omp single // OK
8015       {
8016         bar();
8017       }
8018 #pragma omp master // OK
8019       {
8020         bar();
8021       }
8022 #pragma omp critical // OK
8023       {
8024         bar();
8025       }
8026 #pragma omp for // OK
8027       for (int i = 0; i < 10; ++i)
8028         ;
8029 #pragma omp for simd // OK
8030       for (int i = 0; i < 10; ++i)
8031         ;
8032 #pragma omp sections // OK
8033       {
8034         bar();
8035       }
8036     }
8037   }
8038 #pragma omp parallel for
8039   for (int i = 0; i < 10; ++i) {
8040 #pragma omp parallel for
8041     for (int i = 0; i < 10; ++i)
8042       ;
8043   }
8044 #pragma omp parallel for
8045   for (int i = 0; i < 10; ++i) {
8046 #pragma omp parallel for simd
8047     for (int i = 0; i < 10; ++i)
8048       ;
8049   }
8050 #pragma omp parallel for
8051   for (int i = 0; i < 10; ++i) {
8052 #pragma omp parallel sections
8053     {
8054       bar();
8055     }
8056   }
8057 #pragma omp parallel for
8058   for (int i = 0; i < 10; ++i) {
8059 #pragma omp task
8060     {
8061       bar();
8062     }
8063   }
8064 #pragma omp parallel for
8065   for (int i = 0; i < 10; ++i) {
8066 #pragma omp taskyield
8067     bar();
8068   }
8069 #pragma omp parallel for
8070   for (int i = 0; i < 10; ++i) {
8071 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
8072     bar();
8073   }
8074 #pragma omp parallel for
8075   for (int i = 0; i < 10; ++i) {
8076 #pragma omp taskwait
8077     bar();
8078   }
8079 #pragma omp parallel for
8080   for (int i = 0; i < 10; ++i) {
8081 #pragma omp flush
8082     bar();
8083   }
8084 #pragma omp parallel for
8085   for (int i = 0; i < 10; ++i) {
8086 #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?}}
8087     bar();
8088   }
8089 #pragma omp parallel for ordered
8090   for (int i = 0; i < 10; ++i) {
8091 #pragma omp ordered // OK
8092     bar();
8093   }
8094 #pragma omp parallel for
8095   for (int i = 0; i < 10; ++i) {
8096 #pragma omp atomic
8097     ++a;
8098   }
8099 #pragma omp parallel for
8100   for (int i = 0; i < 10; ++i) {
8101 #pragma omp target
8102     ++a;
8103   }
8104 #pragma omp parallel for
8105   for (int i = 0; i < 10; ++i) {
8106 #pragma omp target parallel
8107     ++a;
8108   }
8109 #pragma omp parallel for
8110   for (int i = 0; i < 10; ++i) {
8111 #pragma omp target parallel for
8112     for (int i = 0; i < 10; ++i)
8113       ;
8114   }
8115 #pragma omp parallel for
8116   for (int i = 0; i < 10; ++i) {
8117 #pragma omp target enter data map(to: a)
8118     ++a;
8119   }
8120 #pragma omp parallel for
8121   for (int i = 0; i < 10; ++i) {
8122 #pragma omp target exit data map(from: a)
8123     ++a;
8124   }
8125 #pragma omp parallel for
8126   for (int i = 0; i < 10; ++i) {
8127 #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?}}
8128     ++a;
8129   }
8130 #pragma omp parallel for
8131   for (int i = 0; i < 10; ++i) {
8132 #pragma omp taskloop
8133   for (int i = 0; i < 10; ++i)
8134     ++a;
8135   }
8136 #pragma omp parallel for
8137   for (int i = 0; i < 10; ++i) {
8138 #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?}}
8139     for (int j = 0; j < 10; ++j)
8140       ;
8141   }
8142 #pragma omp parallel for
8143   for (int i = 0; i < 10; ++i) {
8144 #pragma omp target update to(a)
8145     a++;
8146   }
8147 #pragma omp parallel for
8148   for (int i = 0; i < 10; ++i) {
8149 #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?}}
8150     for (int j = 0; j < 10; ++j)
8151       ;
8152   }
8153 #pragma omp parallel for
8154   for (int i = 0; i < 10; ++i) {
8155 #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?}}
8156     for (int j = 0; j < 10; ++j)
8157       ;
8158   }
8159 #pragma omp parallel for
8160   for (int i = 0; i < 10; ++i) {
8161 #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?}}
8162     for (int j = 0; j < 10; ++j)
8163       ;
8164   }
8165 #pragma omp parallel for
8166   for (int i = 0; i < 10; ++i) {
8167 #pragma omp target simd // OK
8168     for (int j = 0; j < 10; ++j)
8169       ;
8170   }
8171 #pragma omp parallel for
8172   for (int i = 0; i < 10; ++i) {
8173 #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?}}
8174     for (int j = 0; j < 10; ++j)
8175       ;
8176   }
8177 #pragma omp parallel for
8178   for (int i = 0; i < 10; ++i) {
8179 #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?}}
8180     for (int j = 0; j < 10; ++j)
8181       ;
8182   }
8183 
8184 // PARALLEL FOR SIMD DIRECTIVE
8185 #pragma omp parallel for simd
8186   for (int i = 0; i < 10; ++i) {
8187 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8188     for (int i = 0; i < 10; ++i)
8189       ;
8190   }
8191 #pragma omp parallel for simd
8192   for (int i = 0; i < 10; ++i) {
8193 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8194     for (int i = 0; i < 10; ++i)
8195       ;
8196   }
8197 #pragma omp parallel for simd
8198   for (int i = 0; i < 10; ++i) {
8199 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8200     for (int i = 0; i < 10; ++i)
8201       ;
8202   }
8203 #pragma omp parallel for simd
8204   for (int i = 0; i < 10; ++i) {
8205 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8206     for (int i = 0; i < 10; ++i)
8207       ;
8208   }
8209 #pragma omp parallel for simd
8210   for (int i = 0; i < 10; ++i) {
8211 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8212     {
8213       bar();
8214     }
8215   }
8216 #pragma omp parallel for simd
8217   for (int i = 0; i < 10; ++i) {
8218 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8219     {
8220       bar();
8221     }
8222   }
8223 #pragma omp parallel for simd
8224   for (int i = 0; i < 10; ++i) {
8225 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8226     {
8227       bar();
8228     }
8229   }
8230 
8231 #pragma omp parallel for simd
8232   for (int i = 0; i < 10; ++i) {
8233 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8234     {
8235       bar();
8236     }
8237   }
8238 
8239 #pragma omp parallel for simd
8240   for (int i = 0; i < 10; ++i) {
8241 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8242     {
8243       bar();
8244     }
8245   }
8246 
8247 #pragma omp parallel for simd
8248   for (int i = 0; i < 10; ++i) {
8249 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8250     {
8251 #pragma omp single
8252       {
8253         bar();
8254       }
8255 #pragma omp for
8256       for (int i = 0; i < 10; ++i)
8257         ;
8258 #pragma omp for simd
8259       for (int i = 0; i < 10; ++i)
8260         ;
8261 #pragma omp sections
8262       {
8263         bar();
8264       }
8265     }
8266   }
8267 #pragma omp parallel for simd
8268   for (int i = 0; i < 10; ++i) {
8269 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8270     for (int i = 0; i < 10; ++i)
8271       ;
8272   }
8273 #pragma omp parallel for simd
8274   for (int i = 0; i < 10; ++i) {
8275 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
8276     for (int i = 0; i < 10; ++i)
8277       ;
8278   }
8279 #pragma omp parallel for simd
8280   for (int i = 0; i < 10; ++i) {
8281 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8282     {
8283       bar();
8284     }
8285   }
8286 #pragma omp parallel for simd
8287   for (int i = 0; i < 10; ++i) {
8288 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8289     {
8290       bar();
8291     }
8292   }
8293 #pragma omp parallel for simd
8294   for (int i = 0; i < 10; ++i) {
8295 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8296     bar();
8297   }
8298 #pragma omp parallel for simd
8299   for (int i = 0; i < 10; ++i) {
8300 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8301     bar();
8302   }
8303 #pragma omp parallel for simd
8304   for (int i = 0; i < 10; ++i) {
8305 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8306     bar();
8307   }
8308 #pragma omp parallel for simd
8309   for (int i = 0; i < 10; ++i) {
8310 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8311     bar();
8312   }
8313 #pragma omp parallel for simd
8314   for (int i = 0; i < 10; ++i) {
8315 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8316     bar();
8317   }
8318 #pragma omp parallel for simd
8319   for (int i = 0; i < 10; ++i) {
8320 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8321     bar();
8322   }
8323 #pragma omp parallel for simd
8324   for (int i = 0; i < 10; ++i) {
8325 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8326     ++a;
8327   }
8328 #pragma omp parallel for simd
8329   for (int i = 0; i < 10; ++i) {
8330 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8331     ++a;
8332   }
8333 #pragma omp parallel for simd
8334   for (int i = 0; i < 10; ++i) {
8335 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8336     ++a;
8337   }
8338 #pragma omp parallel for simd
8339   for (int i = 0; i < 10; ++i) {
8340 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8341     for (int i = 0; i < 10; ++i)
8342       ;
8343   }
8344 #pragma omp parallel for simd
8345   for (int i = 0; i < 10; ++i) {
8346 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8347     ++a;
8348   }
8349 #pragma omp parallel for simd
8350   for (int i = 0; i < 10; ++i) {
8351 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8352     ++a;
8353   }
8354 #pragma omp parallel for simd
8355   for (int i = 0; i < 10; ++i) {
8356 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8357     ++a;
8358   }
8359 #pragma omp parallel for simd
8360   for (int i = 0; i < 10; ++i) {
8361 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8362   for (int i = 0; i < 10; ++i)
8363     ++a;
8364   }
8365 #pragma omp parallel for simd
8366   for (int i = 0; i < 10; ++i) {
8367 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8368     for (int j = 0; j < 10; ++j)
8369       ;
8370   }
8371 #pragma omp parallel for simd
8372   for (int i = 0; i < 10; ++i) {
8373 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8374     a++;
8375   }
8376 #pragma omp parallel for simd
8377   for (int i = 0; i < 10; ++i) {
8378 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8379     for (int j = 0; j < 10; ++j)
8380       ;
8381   }
8382 #pragma omp parallel for simd
8383   for (int i = 0; i < 10; ++i) {
8384 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8385     for (int j = 0; j < 10; ++j)
8386       ;
8387   }
8388 #pragma omp parallel for simd
8389   for (int i = 0; i < 10; ++i) {
8390 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8391     for (int j = 0; j < 10; ++j)
8392       ;
8393   }
8394 #pragma omp parallel for simd
8395   for (int i = 0; i < 10; ++i) {
8396 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8397     for (int j = 0; j < 10; ++j)
8398       ;
8399   }
8400 #pragma omp parallel for simd
8401   for (int i = 0; i < 10; ++i) {
8402 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8403     for (int j = 0; j < 10; ++j)
8404       ;
8405   }
8406 #pragma omp parallel for simd
8407   for (int i = 0; i < 10; ++i) {
8408 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8409     for (int j = 0; j < 10; ++j)
8410       ;
8411   }
8412 
8413 // PARALLEL SECTIONS DIRECTIVE
8414 #pragma omp parallel sections
8415   {
8416 #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?}}
8417     for (int i = 0; i < 10; ++i)
8418       ;
8419   }
8420 #pragma omp parallel sections
8421   {
8422 #pragma omp simd
8423     for (int i = 0; i < 10; ++i)
8424       ;
8425   }
8426 #pragma omp parallel sections
8427   {
8428 #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?}}
8429     for (int i = 0; i < 10; ++i)
8430       ;
8431   }
8432 #pragma omp parallel sections
8433   {
8434 #pragma omp parallel
8435     for (int i = 0; i < 10; ++i)
8436       ;
8437   }
8438 #pragma omp parallel sections
8439   {
8440 #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?}}
8441     {
8442       bar();
8443     }
8444   }
8445 #pragma omp parallel sections
8446   {
8447 #pragma omp section
8448     {
8449       bar();
8450     }
8451   }
8452 #pragma omp parallel sections
8453   {
8454 #pragma omp section
8455     {
8456 #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?}}
8457       bar();
8458 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
8459       bar();
8460 #pragma omp critical
8461       bar();
8462     }
8463   }
8464 #pragma omp parallel sections
8465   {
8466 #pragma omp parallel
8467     {
8468 #pragma omp single // OK
8469       {
8470         bar();
8471       }
8472 #pragma omp master // OK
8473       {
8474         bar();
8475       }
8476 #pragma omp critical // OK
8477       {
8478         bar();
8479       }
8480 #pragma omp for // OK
8481       for (int i = 0; i < 10; ++i)
8482         ;
8483 #pragma omp for simd // OK
8484       for (int i = 0; i < 10; ++i)
8485         ;
8486 #pragma omp sections // OK
8487       {
8488         bar();
8489       }
8490     }
8491   }
8492 #pragma omp parallel sections
8493   {
8494 #pragma omp parallel for
8495     for (int i = 0; i < 10; ++i)
8496       ;
8497   }
8498 #pragma omp parallel sections
8499   {
8500 #pragma omp parallel for simd
8501     for (int i = 0; i < 10; ++i)
8502       ;
8503   }
8504 #pragma omp parallel sections
8505   {
8506 #pragma omp parallel sections
8507     {
8508       bar();
8509     }
8510   }
8511 #pragma omp parallel sections
8512   {
8513 #pragma omp task
8514     {
8515       bar();
8516     }
8517   }
8518 #pragma omp parallel sections
8519   {
8520 #pragma omp taskyield
8521   }
8522 #pragma omp parallel sections
8523   {
8524 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
8525   }
8526 #pragma omp parallel sections
8527   {
8528 #pragma omp taskwait
8529   }
8530 #pragma omp parallel sections
8531   {
8532 #pragma omp flush
8533   }
8534 #pragma omp parallel sections
8535   {
8536 #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?}}
8537     bar();
8538   }
8539 #pragma omp parallel sections
8540   {
8541 #pragma omp atomic
8542     ++a;
8543   }
8544 #pragma omp parallel sections
8545   {
8546 #pragma omp target
8547     ++a;
8548   }
8549 #pragma omp parallel sections
8550   {
8551 #pragma omp target parallel
8552     ++a;
8553   }
8554 #pragma omp parallel sections
8555   {
8556 #pragma omp target parallel for
8557     for (int i = 0; i < 10; ++i)
8558       ;
8559   }
8560 #pragma omp parallel sections
8561   {
8562 #pragma omp target enter data map(to: a)
8563   }
8564 #pragma omp parallel sections
8565   {
8566 #pragma omp target exit data map(from: a)
8567   }
8568 #pragma omp parallel sections
8569   {
8570 #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?}}
8571     ++a;
8572   }
8573 #pragma omp parallel sections
8574   {
8575 #pragma omp taskloop
8576   for (int i = 0; i < 10; ++i)
8577     ++a;
8578   }
8579 #pragma omp parallel sections
8580   {
8581 #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?}}
8582     for (int i = 0; i < 10; ++i)
8583       ;
8584   }
8585 #pragma omp parallel sections
8586   {
8587 #pragma omp target update to(a)
8588   }
8589 #pragma omp parallel sections
8590   {
8591 #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?}}
8592     for (int i = 0; i < 10; ++i)
8593       ;
8594   }
8595 #pragma omp parallel sections
8596   {
8597 #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?}}
8598     for (int i = 0; i < 10; ++i)
8599       ;
8600   }
8601 #pragma omp parallel sections
8602   {
8603 #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?}}
8604     for (int i = 0; i < 10; ++i)
8605       ;
8606   }
8607 #pragma omp parallel sections
8608   {
8609 #pragma omp target simd // OK
8610     for (int i = 0; i < 10; ++i)
8611       ;
8612   }
8613 #pragma omp parallel sections
8614   {
8615 #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?}}
8616     for (int i = 0; i < 10; ++i)
8617       ;
8618   }
8619 #pragma omp parallel sections
8620   {
8621 #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?}}
8622     for (int i = 0; i < 10; ++i)
8623       ;
8624   }
8625 
8626 // TASK DIRECTIVE
8627 #pragma omp task
8628 #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?}}
8629   for (int i = 0; i < 10; ++i)
8630     ;
8631 #pragma omp task
8632 #pragma omp simd
8633   for (int i = 0; i < 10; ++i)
8634     ;
8635 #pragma omp task
8636 #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?}}
8637   for (int i = 0; i < 10; ++i)
8638     ;
8639 #pragma omp task
8640 #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?}}
8641   {
8642     bar();
8643   }
8644 #pragma omp task
8645 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
8646   {
8647     bar();
8648   }
8649 #pragma omp task
8650 #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?}}
8651   bar();
8652 #pragma omp task
8653 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
8654   bar();
8655 #pragma omp task
8656 #pragma omp critical
8657   bar();
8658 #pragma omp task
8659 #pragma omp parallel for
8660   for (int i = 0; i < 10; ++i)
8661     ;
8662 #pragma omp task
8663 #pragma omp parallel for simd
8664   for (int i = 0; i < 10; ++i)
8665     ;
8666 #pragma omp task
8667 #pragma omp parallel sections
8668   {
8669     bar();
8670   }
8671 #pragma omp task
8672 #pragma omp task
8673   {
8674     bar();
8675   }
8676 #pragma omp task
8677   {
8678 #pragma omp taskyield
8679     bar();
8680   }
8681 #pragma omp task
8682   {
8683 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
8684     bar();
8685   }
8686 #pragma omp task
8687   {
8688 #pragma omp taskwait
8689     bar();
8690   }
8691 #pragma omp task
8692   {
8693 #pragma omp flush
8694     bar();
8695   }
8696 #pragma omp task
8697   {
8698 #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?}}
8699     bar();
8700   }
8701 #pragma omp task
8702   {
8703 #pragma omp atomic
8704     ++a;
8705   }
8706 #pragma omp task
8707   {
8708 #pragma omp target
8709     ++a;
8710   }
8711 #pragma omp task
8712   {
8713 #pragma omp target parallel
8714     ++a;
8715   }
8716 #pragma omp task
8717 #pragma omp target parallel for
8718   for (int i = 0; i < 10; ++i)
8719     ;
8720 #pragma omp task
8721   {
8722 #pragma omp target enter data map(to: a)
8723     ++a;
8724   }
8725 #pragma omp task
8726   {
8727 #pragma omp target exit data map(from: a)
8728     ++a;
8729   }
8730 #pragma omp task
8731   {
8732 #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?}}
8733     ++a;
8734   }
8735 #pragma omp task
8736   {
8737 #pragma omp taskloop
8738   for (int i = 0; i < 10; ++i)
8739     ++a;
8740   }
8741 #pragma omp task
8742   {
8743 #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?}}
8744     for (int i = 0; i < 10; ++i)
8745       ;
8746   }
8747 #pragma omp task
8748   {
8749 #pragma omp target update to(a)
8750     a++;
8751   }
8752 #pragma omp task
8753   {
8754 #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?}}
8755     for (int i = 0; i < 10; ++i)
8756       ;
8757   }
8758 #pragma omp task
8759   {
8760 #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?}}
8761     for (int i = 0; i < 10; ++i)
8762       ;
8763   }
8764 #pragma omp task
8765   {
8766 #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?}}
8767     for (int i = 0; i < 10; ++i)
8768       ;
8769   }
8770 #pragma omp task
8771   {
8772 #pragma omp target simd // OK
8773     for (int i = 0; i < 10; ++i)
8774       ;
8775   }
8776 #pragma omp task
8777   {
8778 #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?}}
8779     for (int i = 0; i < 10; ++i)
8780       ;
8781   }
8782 #pragma omp task
8783   {
8784 #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?}}
8785     for (int i = 0; i < 10; ++i)
8786       ;
8787   }
8788 
8789 // ATOMIC DIRECTIVE
8790 #pragma omp atomic
8791   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8792   // expected-note@+1 {{expected an expression statement}}
8793   {
8794 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8795     for (int i = 0; i < 10; ++i)
8796       ;
8797   }
8798 #pragma omp atomic
8799   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8800   // expected-note@+1 {{expected an expression statement}}
8801   {
8802 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8803     for (int i = 0; i < 10; ++i)
8804       ;
8805   }
8806 #pragma omp atomic
8807   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8808   // expected-note@+1 {{expected an expression statement}}
8809   {
8810 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8811     for (int i = 0; i < 10; ++i)
8812       ;
8813   }
8814 #pragma omp atomic
8815   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8816   // expected-note@+1 {{expected an expression statement}}
8817   {
8818 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8819     for (int i = 0; i < 10; ++i)
8820       ;
8821   }
8822 #pragma omp atomic
8823   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8824   // expected-note@+1 {{expected an expression statement}}
8825   {
8826 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8827     {
8828       bar();
8829     }
8830   }
8831 #pragma omp atomic
8832   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8833   // expected-note@+1 {{expected an expression statement}}
8834   {
8835 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8836     {
8837       bar();
8838     }
8839   }
8840 #pragma omp atomic
8841   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8842   // expected-note@+1 {{expected an expression statement}}
8843   {
8844 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8845     {
8846       bar();
8847     }
8848   }
8849 #pragma omp atomic
8850   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8851   // expected-note@+1 {{expected an expression statement}}
8852   {
8853 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8854     {
8855       bar();
8856     }
8857   }
8858 #pragma omp atomic
8859   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8860   // expected-note@+1 {{expected an expression statement}}
8861   {
8862 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8863     {
8864       bar();
8865     }
8866   }
8867 #pragma omp atomic
8868   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8869   // expected-note@+1 {{expected an expression statement}}
8870   {
8871 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8872     for (int i = 0; i < 10; ++i)
8873       ;
8874   }
8875 #pragma omp atomic
8876   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8877   // expected-note@+1 {{expected an expression statement}}
8878   {
8879 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8880     for (int i = 0; i < 10; ++i)
8881       ;
8882   }
8883 #pragma omp atomic
8884   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8885   // expected-note@+1 {{expected an expression statement}}
8886   {
8887 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8888     {
8889       bar();
8890     }
8891   }
8892 #pragma omp atomic
8893   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8894   // expected-note@+1 {{expected an expression statement}}
8895   {
8896 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8897     {
8898       bar();
8899     }
8900   }
8901 #pragma omp atomic
8902   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8903   // expected-note@+1 {{expected an expression statement}}
8904   {
8905 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8906     bar();
8907   }
8908 #pragma omp atomic
8909   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8910   // expected-note@+1 {{expected an expression statement}}
8911   {
8912 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8913     bar();
8914   }
8915 #pragma omp atomic
8916   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8917   // expected-note@+1 {{expected an expression statement}}
8918   {
8919 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8920     bar();
8921   }
8922 #pragma omp atomic
8923   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8924   // expected-note@+1 {{expected an expression statement}}
8925   {
8926 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8927     bar();
8928   }
8929 #pragma omp atomic
8930   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8931   // expected-note@+1 {{expected an expression statement}}
8932   {
8933 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8934     bar();
8935   }
8936 #pragma omp atomic
8937   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8938   // expected-note@+1 {{expected an expression statement}}
8939   {
8940 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8941     ++a;
8942   }
8943 #pragma omp atomic
8944   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8945   // expected-note@+1 {{expected an expression statement}}
8946   {
8947 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8948     ++a;
8949   }
8950 #pragma omp atomic
8951   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8952   // expected-note@+1 {{expected an expression statement}}
8953   {
8954 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8955     ++a;
8956   }
8957 #pragma omp atomic
8958   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8959   // expected-note@+1 {{expected an expression statement}}
8960   {
8961 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8962     for (int i = 0; i < 10; ++i)
8963       ;
8964   }
8965 #pragma omp atomic
8966   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8967   // expected-note@+1 {{expected an expression statement}}
8968   {
8969 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8970     ++a;
8971   }
8972 #pragma omp atomic
8973   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8974   // expected-note@+1 {{expected an expression statement}}
8975   {
8976 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8977     ++a;
8978   }
8979 #pragma omp atomic
8980   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8981   // expected-note@+1 {{expected an expression statement}}
8982   {
8983 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8984     ++a;
8985   }
8986 #pragma omp atomic
8987   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8988   // expected-note@+1 {{expected an expression statement}}
8989   {
8990 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8991   for (int i = 0; i < 10; ++i)
8992     ++a;
8993   }
8994 #pragma omp atomic
8995   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
8996   // expected-note@+1 {{expected an expression statement}}
8997   {
8998 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
8999     for (int i = 0; i < 10; ++i)
9000       ;
9001   }
9002 #pragma omp atomic
9003   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9004   // expected-note@+1 {{expected an expression statement}}
9005   {
9006 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9007   }
9008 #pragma omp atomic
9009   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9010   // expected-note@+1 {{expected an expression statement}}
9011   {
9012 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9013     for (int i = 0; i < 10; ++i)
9014       ;
9015   }
9016 #pragma omp atomic
9017   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9018   // expected-note@+1 {{expected an expression statement}}
9019   {
9020 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9021     for (int i = 0; i < 10; ++i)
9022       ;
9023   }
9024 #pragma omp atomic
9025   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9026   // expected-note@+1 {{expected an expression statement}}
9027   {
9028 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9029     for (int i = 0; i < 10; ++i)
9030       ;
9031   }
9032 #pragma omp atomic
9033   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9034   // expected-note@+1 {{expected an expression statement}}
9035   {
9036 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9037     for (int i = 0; i < 10; ++i)
9038       ;
9039   }
9040 #pragma omp atomic
9041   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9042   // expected-note@+1 {{expected an expression statement}}
9043   {
9044 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9045     for (int i = 0; i < 10; ++i)
9046       ;
9047   }
9048 #pragma omp atomic
9049   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9050   // expected-note@+1 {{expected an expression statement}}
9051   {
9052 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9053     for (int i = 0; i < 10; ++i)
9054       ;
9055   }
9056 
9057 // TARGET DIRECTIVE
9058 #pragma omp target
9059 #pragma omp parallel
9060   bar();
9061 #pragma omp target
9062 #pragma omp for
9063   for (int i = 0; i < 10; ++i)
9064     ;
9065 #pragma omp target
9066 #pragma omp simd
9067   for (int i = 0; i < 10; ++i)
9068     ;
9069 #pragma omp target
9070 #pragma omp for simd
9071   for (int i = 0; i < 10; ++i)
9072     ;
9073 #pragma omp target
9074 #pragma omp sections
9075   {
9076     bar();
9077   }
9078 #pragma omp target
9079 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
9080   {
9081     bar();
9082   }
9083 #pragma omp target
9084 #pragma omp single
9085   bar();
9086 
9087 #pragma omp target
9088 #pragma omp master
9089   {
9090     bar();
9091   }
9092 #pragma omp target
9093 #pragma omp critical
9094   {
9095     bar();
9096   }
9097 #pragma omp target
9098 #pragma omp parallel for
9099   for (int i = 0; i < 10; ++i)
9100     ;
9101 #pragma omp target
9102 #pragma omp parallel for simd
9103   for (int i = 0; i < 10; ++i)
9104     ;
9105 #pragma omp target
9106 #pragma omp parallel sections
9107   {
9108     bar();
9109   }
9110 #pragma omp target
9111 #pragma omp task
9112   {
9113     bar();
9114   }
9115 #pragma omp target
9116   {
9117 #pragma omp taskyield
9118     bar();
9119   }
9120 #pragma omp target
9121   {
9122 #pragma omp barrier
9123     bar();
9124   }
9125 #pragma omp target
9126   {
9127 #pragma omp taskwait
9128     bar();
9129   }
9130 #pragma omp target
9131   {
9132 #pragma omp flush
9133     bar();
9134   }
9135 #pragma omp target
9136   {
9137 #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?}}
9138     bar();
9139   }
9140 #pragma omp target
9141   {
9142 #pragma omp atomic
9143     ++a;
9144   }
9145 #pragma omp target
9146   {
9147 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
9148     ++a;
9149   }
9150 #pragma omp target
9151   {
9152 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
9153     ++a;
9154   }
9155 #pragma omp target
9156 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
9157   for (int i = 0; i < 10; ++i)
9158     ;
9159 #pragma omp target
9160   {
9161 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
9162   }
9163 #pragma omp target
9164   {
9165 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
9166   }
9167 #pragma omp target
9168   {
9169 #pragma omp teams
9170     ++a;
9171   }
9172 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
9173   {
9174     ++a;          // expected-note {{statement outside teams construct here}}
9175 #pragma omp teams // expected-note {{nested teams construct here}}
9176     ++a;
9177   }
9178 #pragma omp target
9179   {
9180 #pragma omp taskloop
9181   for (int i = 0; i < 10; ++i)
9182     ++a;
9183   }
9184 #pragma omp target
9185   {
9186 #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?}}
9187     for (int i = 0; i < 10; ++i)
9188       ;
9189   }
9190 #pragma omp atomic
9191   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
9192   // expected-note@+1 {{expected an expression statement}}
9193   {
9194 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
9195     a++;
9196   }
9197 #pragma omp target
9198   {
9199 #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?}}
9200     for (int i = 0; i < 10; ++i)
9201       ;
9202   }
9203 #pragma omp target
9204   {
9205 #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?}}
9206     for (int i = 0; i < 10; ++i)
9207       ;
9208   }
9209 #pragma omp target
9210   {
9211 #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?}}
9212     for (int i = 0; i < 10; ++i)
9213       ;
9214   }
9215 #pragma omp target
9216   {
9217 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
9218     for (int i = 0; i < 10; ++i)
9219       ;
9220   }
9221 #pragma omp target
9222   {
9223 #pragma omp teams distribute // OK
9224     for (int i = 0; i < 10; ++i)
9225       ;
9226   }
9227 #pragma omp target
9228   {
9229 #pragma omp teams distribute simd // OK
9230     for (int i = 0; i < 10; ++i)
9231       ;
9232   }
9233 
9234 // TARGET PARALLEL DIRECTIVE
9235 #pragma omp target parallel
9236 #pragma omp parallel
9237   bar();
9238 #pragma omp target parallel
9239 #pragma omp for
9240   for (int i = 0; i < 10; ++i)
9241     ;
9242 #pragma omp target parallel
9243 #pragma omp simd
9244   for (int i = 0; i < 10; ++i)
9245     ;
9246 #pragma omp target parallel
9247 #pragma omp for simd
9248   for (int i = 0; i < 10; ++i)
9249     ;
9250 #pragma omp target parallel
9251 #pragma omp sections
9252   {
9253     bar();
9254   }
9255 #pragma omp target parallel
9256 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
9257   {
9258     bar();
9259   }
9260 #pragma omp target parallel
9261 #pragma omp single
9262   bar();
9263 
9264 #pragma omp target parallel
9265 #pragma omp master
9266   {
9267     bar();
9268   }
9269 #pragma omp target parallel
9270 #pragma omp critical
9271   {
9272     bar();
9273   }
9274 #pragma omp target parallel
9275 #pragma omp parallel for
9276   for (int i = 0; i < 10; ++i)
9277     ;
9278 #pragma omp target parallel
9279 #pragma omp parallel for simd
9280   for (int i = 0; i < 10; ++i)
9281     ;
9282 #pragma omp target parallel
9283 #pragma omp parallel sections
9284   {
9285     bar();
9286   }
9287 #pragma omp target parallel
9288 #pragma omp task
9289   {
9290     bar();
9291   }
9292 #pragma omp target parallel
9293   {
9294 #pragma omp taskyield
9295     bar();
9296   }
9297 #pragma omp target parallel
9298   {
9299 #pragma omp barrier
9300     bar();
9301   }
9302 #pragma omp target parallel
9303   {
9304 #pragma omp taskwait
9305     bar();
9306   }
9307 #pragma omp target parallel
9308   {
9309 #pragma omp flush
9310     bar();
9311   }
9312 #pragma omp target parallel
9313   {
9314 #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?}}
9315     bar();
9316   }
9317 #pragma omp target parallel
9318   {
9319 #pragma omp atomic
9320     ++a;
9321   }
9322 #pragma omp target parallel
9323   {
9324 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
9325     ++a;
9326   }
9327 #pragma omp target parallel
9328   {
9329 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
9330     ++a;
9331   }
9332 #pragma omp target parallel
9333 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
9334   for (int i = 0; i < 10; ++i)
9335     ;
9336 #pragma omp target parallel
9337   {
9338 #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?}}
9339     ++a;
9340   }
9341 #pragma omp target parallel
9342   {
9343     ++a;
9344 #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?}}
9345     ++a;
9346   }
9347 #pragma omp target parallel
9348   {
9349 #pragma omp taskloop
9350   for (int i = 0; i < 10; ++i)
9351     ++a;
9352   }
9353 #pragma omp target parallel
9354   {
9355 #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?}}
9356     for (int i = 0; i < 10; ++i)
9357       ;
9358   }
9359 #pragma omp target parallel
9360   {
9361 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
9362   }
9363 #pragma omp target parallel
9364   {
9365 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
9366   }
9367 #pragma omp target parallel
9368   {
9369 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
9370   }
9371 #pragma omp target parallel
9372   {
9373 #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?}}
9374     for (int i = 0; i < 10; ++i)
9375       ;
9376   }
9377 #pragma omp target parallel
9378   {
9379 #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?}}
9380     for (int i = 0; i < 10; ++i)
9381       ;
9382   }
9383 #pragma omp target parallel
9384   {
9385 #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?}}
9386     for (int i = 0; i < 10; ++i)
9387       ;
9388   }
9389 #pragma omp target parallel
9390   {
9391 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
9392     for (int i = 0; i < 10; ++i)
9393       ;
9394   }
9395 #pragma omp target parallel
9396   {
9397 #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?}}
9398     for (int i = 0; i < 10; ++i)
9399       ;
9400   }
9401 #pragma omp target parallel
9402   {
9403 #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?}}
9404     for (int i = 0; i < 10; ++i)
9405       ;
9406   }
9407 
9408 // TARGET PARALLEL FOR DIRECTIVE
9409 #pragma omp target parallel for
9410   for (int i = 0; i < 10; ++i) {
9411 #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?}}
9412     for (int i = 0; i < 10; ++i)
9413       ;
9414   }
9415 #pragma omp target parallel for
9416   for (int i = 0; i < 10; ++i) {
9417 #pragma omp simd
9418     for (int i = 0; i < 10; ++i)
9419       ;
9420   }
9421 #pragma omp target parallel for
9422   for (int i = 0; i < 10; ++i) {
9423 #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?}}
9424     for (int i = 0; i < 10; ++i)
9425       ;
9426   }
9427 #pragma omp target parallel for
9428   for (int i = 0; i < 10; ++i) {
9429 #pragma omp parallel
9430     for (int i = 0; i < 10; ++i)
9431       ;
9432   }
9433 #pragma omp target parallel for
9434   for (int i = 0; i < 10; ++i) {
9435 #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?}}
9436     {
9437       bar();
9438     }
9439   }
9440 #pragma omp target parallel for
9441   for (int i = 0; i < 10; ++i) {
9442 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
9443     {
9444       bar();
9445     }
9446   }
9447 #pragma omp target parallel for
9448   for (int i = 0; i < 10; ++i) {
9449 #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?}}
9450     {
9451       bar();
9452     }
9453   }
9454 
9455 #pragma omp target parallel for
9456   for (int i = 0; i < 10; ++i) {
9457 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
9458     {
9459       bar();
9460     }
9461   }
9462 
9463 #pragma omp target parallel for
9464   for (int i = 0; i < 10; ++i) {
9465 #pragma omp critical
9466     {
9467       bar();
9468     }
9469   }
9470 
9471 #pragma omp target parallel for
9472   for (int i = 0; i < 10; ++i) {
9473 #pragma omp parallel
9474     {
9475 #pragma omp single // OK
9476       {
9477         bar();
9478       }
9479 #pragma omp for // OK
9480       for (int i = 0; i < 10; ++i)
9481         ;
9482 #pragma omp for simd // OK
9483       for (int i = 0; i < 10; ++i)
9484         ;
9485 #pragma omp sections // OK
9486       {
9487         bar();
9488       }
9489     }
9490   }
9491 #pragma omp target parallel for
9492   for (int i = 0; i < 10; ++i) {
9493 #pragma omp parallel for
9494     for (int i = 0; i < 10; ++i)
9495       ;
9496   }
9497 #pragma omp target parallel for
9498   for (int i = 0; i < 10; ++i) {
9499 #pragma omp parallel for simd
9500     for (int i = 0; i < 10; ++i)
9501       ;
9502   }
9503 #pragma omp target parallel for
9504   for (int i = 0; i < 10; ++i) {
9505 #pragma omp parallel sections
9506     {
9507       bar();
9508     }
9509   }
9510 #pragma omp target parallel for
9511   for (int i = 0; i < 10; ++i) {
9512 #pragma omp task
9513     {
9514       bar();
9515     }
9516   }
9517 #pragma omp target parallel for
9518   for (int i = 0; i < 10; ++i) {
9519 #pragma omp taskyield
9520     bar();
9521   }
9522 #pragma omp target parallel for
9523   for (int i = 0; i < 10; ++i) {
9524 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
9525     bar();
9526   }
9527 #pragma omp target parallel for
9528   for (int i = 0; i < 10; ++i) {
9529 #pragma omp taskwait
9530     bar();
9531   }
9532 #pragma omp target parallel for
9533   for (int i = 0; i < 10; ++i) {
9534 #pragma omp flush
9535     bar();
9536   }
9537 #pragma omp target parallel for
9538   for (int i = 0; i < 10; ++i) {
9539 #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?}}
9540     bar();
9541   }
9542 #pragma omp target parallel for ordered
9543   for (int i = 0; i < 10; ++i) {
9544 #pragma omp ordered // OK
9545     bar();
9546   }
9547 #pragma omp target parallel for
9548   for (int i = 0; i < 10; ++i) {
9549 #pragma omp atomic
9550     ++a;
9551   }
9552 #pragma omp target parallel for
9553   for (int i = 0; i < 10; ++i) {
9554 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
9555     ++a;
9556   }
9557 #pragma omp target parallel for
9558   for (int i = 0; i < 10; ++i) {
9559 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
9560     ++a;
9561   }
9562 #pragma omp target parallel for
9563   for (int i = 0; i < 10; ++i) {
9564 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
9565     for (int i = 0; i < 10; ++i)
9566       ;
9567   }
9568 #pragma omp target parallel for
9569   for (int i = 0; i < 10; ++i) {
9570 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
9571     ++a;
9572   }
9573 #pragma omp target parallel for
9574   for (int i = 0; i < 10; ++i) {
9575 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
9576     ++a;
9577   }
9578 #pragma omp target parallel for
9579   for (int i = 0; i < 10; ++i) {
9580 #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?}}
9581     ++a;
9582   }
9583 #pragma omp target parallel for
9584   for (int i = 0; i < 10; ++i) {
9585 #pragma omp taskloop
9586   for (int i = 0; i < 10; ++i)
9587     ++a;
9588   }
9589 #pragma omp target parallel for
9590   for (int i = 0; i < 10; ++i) {
9591 #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?}}
9592     for (int j = 0; j < 10; ++j)
9593       ;
9594   }
9595 #pragma omp target parallel for
9596   for (int i = 0; i < 10; ++i) {
9597 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
9598     a++;
9599   }
9600 #pragma omp target parallel for
9601   for (int i = 0; i < 10; ++i) {
9602 #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?}}
9603     for (int j = 0; j < 10; ++j)
9604       ;
9605   }
9606 #pragma omp target parallel for
9607   for (int i = 0; i < 10; ++i) {
9608 #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?}}
9609     for (int j = 0; j < 10; ++j)
9610       ;
9611   }
9612 #pragma omp target parallel for
9613   for (int i = 0; i < 10; ++i) {
9614 #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?}}
9615     for (int j = 0; j < 10; ++j)
9616       ;
9617   }
9618 #pragma omp target parallel for
9619   for (int i = 0; i < 10; ++i) {
9620 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
9621     for (int j = 0; j < 10; ++j)
9622       ;
9623   }
9624 #pragma omp target parallel for
9625   for (int i = 0; i < 10; ++i) {
9626 #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?}}
9627     for (int j = 0; j < 10; ++j)
9628       ;
9629   }
9630 #pragma omp target parallel for
9631   for (int i = 0; i < 10; ++i) {
9632 #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?}}
9633     for (int j = 0; j < 10; ++j)
9634       ;
9635   }
9636 
9637 // TEAMS DIRECTIVE
9638 #pragma omp target
9639 #pragma omp teams
9640 #pragma omp parallel
9641   bar();
9642 #pragma omp target
9643 #pragma omp teams
9644 #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?}}
9645   for (int i = 0; i < 10; ++i)
9646     ;
9647 #pragma omp target
9648 #pragma omp teams
9649 #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?}}
9650   for (int i = 0; i < 10; ++i)
9651     ;
9652 #pragma omp target
9653 #pragma omp teams
9654 #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?}}
9655   for (int i = 0; i < 10; ++i)
9656     ;
9657 #pragma omp target
9658 #pragma omp teams
9659 #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?}}
9660   {
9661     bar();
9662   }
9663 #pragma omp target
9664 #pragma omp teams
9665 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
9666   {
9667     bar();
9668   }
9669 #pragma omp target
9670 #pragma omp teams
9671 #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?}}
9672   bar();
9673 
9674 #pragma omp target
9675 #pragma omp teams
9676 #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?}}
9677   {
9678     bar();
9679   }
9680 #pragma omp target
9681 #pragma omp teams
9682 #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?}}
9683   {
9684     bar();
9685   }
9686 #pragma omp target
9687 #pragma omp teams
9688 #pragma omp parallel for
9689   for (int i = 0; i < 10; ++i)
9690     ;
9691 #pragma omp target
9692 #pragma omp teams
9693 #pragma omp parallel for simd
9694   for (int i = 0; i < 10; ++i)
9695     ;
9696 #pragma omp target
9697 #pragma omp teams
9698 #pragma omp parallel sections
9699   {
9700     bar();
9701   }
9702 #pragma omp target
9703 #pragma omp teams
9704 #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?}}
9705   {
9706     bar();
9707   }
9708 #pragma omp target
9709 #pragma omp teams
9710   {
9711 #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?}}
9712     bar();
9713   }
9714 #pragma omp target
9715 #pragma omp teams
9716   {
9717 #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?}}
9718     bar();
9719   }
9720 #pragma omp target
9721 #pragma omp teams
9722   {
9723 #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?}}
9724     bar();
9725   }
9726 #pragma omp target
9727 #pragma omp teams
9728   {
9729 #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?}}
9730     bar();
9731   }
9732 #pragma omp target
9733 #pragma omp teams
9734   {
9735 #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?}}
9736     bar();
9737   }
9738 #pragma omp target
9739 #pragma omp teams
9740   {
9741 #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?}}
9742     ++a;
9743   }
9744 #pragma omp target
9745 #pragma omp teams
9746   {
9747 #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?}}
9748     ++a;
9749   }
9750 #pragma omp target
9751 #pragma omp teams
9752   {
9753 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
9754     ++a;
9755   }
9756 #pragma omp target
9757 #pragma omp teams
9758 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
9759   for (int i = 0; i < 10; ++i)
9760     ;
9761 #pragma omp target
9762 #pragma omp teams
9763   {
9764 #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?}}
9765   }
9766 #pragma omp target
9767 #pragma omp teams
9768   {
9769 #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?}}
9770   }
9771 #pragma omp target
9772 #pragma omp teams
9773   {
9774 #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?}}
9775     ++a;
9776   }
9777 #pragma omp target
9778 #pragma omp teams
9779   {
9780 #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?}}
9781   for (int i = 0; i < 10; ++i)
9782     ++a;
9783   }
9784 #pragma omp target
9785 #pragma omp teams
9786 #pragma omp distribute
9787   for (int i = 0; i < 10; ++i)
9788     ;
9789 #pragma omp target
9790 #pragma omp teams
9791 #pragma omp distribute
9792   for (int i = 0; i < 10; ++i)
9793     ;
9794 #pragma omp distribute
9795   for (int j = 0; j < 10; ++j)
9796     ;
9797 #pragma omp target
9798 #pragma omp teams
9799   {
9800 #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?}}
9801     ++a;
9802   }
9803 #pragma omp target
9804 #pragma omp teams
9805 #pragma omp distribute parallel for
9806   for (int i = 0; i < 10; ++i)
9807     ;
9808 #pragma omp target
9809 #pragma omp teams
9810   {
9811 #pragma omp distribute parallel for
9812   for (int i = 0; i < 10; ++i)
9813     ;
9814 #pragma omp distribute parallel for
9815   for (int j = 0; j < 10; ++j)
9816     ;
9817   }
9818 #pragma omp target
9819 #pragma omp teams
9820   {
9821 #pragma omp distribute parallel for simd
9822   for (int i = 0; i < 10; ++i)
9823     ;
9824 #pragma omp distribute parallel for simd
9825   for (int j = 0; j < 10; ++j)
9826     ;
9827   }
9828 #pragma omp target
9829 #pragma omp teams
9830   {
9831 #pragma omp distribute simd
9832   for (int i = 0; i < 10; ++i)
9833     ;
9834 #pragma omp distribute simd
9835   for (int j = 0; j < 10; ++j)
9836     ;
9837   }
9838 #pragma omp target
9839 #pragma omp teams
9840   {
9841 #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?}}
9842   for (int i = 0; i < 10; ++i)
9843     ;
9844   }
9845 #pragma omp target
9846 #pragma omp teams
9847   {
9848 #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?}}
9849   for (int i = 0; i < 10; ++i)
9850     ;
9851   }
9852 #pragma omp target
9853 #pragma omp teams
9854   {
9855 #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?}}
9856   for (int i = 0; i < 10; ++i)
9857     ;
9858   }
9859 
9860 // TASKLOOP DIRECTIVE
9861 #pragma omp taskloop
9862   for (int i = 0; i < 10; ++i) {
9863 #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?}}
9864     for (int i = 0; i < 10; ++i)
9865       ;
9866   }
9867 #pragma omp taskloop
9868   for (int i = 0; i < 10; ++i) {
9869 #pragma omp simd
9870     for (int i = 0; i < 10; ++i)
9871       ;
9872   }
9873 #pragma omp taskloop
9874   for (int i = 0; i < 10; ++i) {
9875 #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?}}
9876     for (int i = 0; i < 10; ++i)
9877       ;
9878   }
9879 #pragma omp taskloop
9880   for (int i = 0; i < 10; ++i) {
9881 #pragma omp parallel
9882     for (int i = 0; i < 10; ++i)
9883       ;
9884   }
9885 #pragma omp taskloop
9886   for (int i = 0; i < 10; ++i) {
9887 #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?}}
9888     {
9889       bar();
9890     }
9891   }
9892 #pragma omp taskloop
9893   for (int i = 0; i < 10; ++i) {
9894 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
9895     {
9896       bar();
9897     }
9898   }
9899 #pragma omp taskloop
9900   for (int i = 0; i < 10; ++i) {
9901 #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?}}
9902     {
9903       bar();
9904     }
9905   }
9906 
9907 #pragma omp taskloop
9908   for (int i = 0; i < 10; ++i) {
9909 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
9910     {
9911       bar();
9912     }
9913   }
9914 #pragma omp taskloop
9915   for (int i = 0; i < 10; ++i) {
9916 #pragma omp critical
9917     {
9918       bar();
9919     }
9920   }
9921 #pragma omp taskloop
9922   for (int i = 0; i < 10; ++i) {
9923 #pragma omp parallel
9924     {
9925 #pragma omp single // OK
9926       {
9927         bar();
9928       }
9929 #pragma omp for // OK
9930       for (int i = 0; i < 10; ++i)
9931         ;
9932 #pragma omp sections // OK
9933       {
9934         bar();
9935       }
9936     }
9937   }
9938 #pragma omp taskloop
9939   for (int i = 0; i < 10; ++i) {
9940 #pragma omp parallel for
9941     for (int i = 0; i < 10; ++i)
9942       ;
9943   }
9944 #pragma omp taskloop
9945   for (int i = 0; i < 10; ++i) {
9946 #pragma omp parallel for simd
9947     for (int i = 0; i < 10; ++i)
9948       ;
9949   }
9950 #pragma omp taskloop
9951   for (int i = 0; i < 10; ++i) {
9952 #pragma omp parallel sections
9953     {
9954       bar();
9955     }
9956   }
9957 #pragma omp taskloop
9958   for (int i = 0; i < 10; ++i) {
9959 #pragma omp task
9960     {
9961       bar();
9962     }
9963   }
9964 #pragma omp taskloop
9965   for (int i = 0; i < 10; ++i) {
9966 #pragma omp taskyield
9967     bar();
9968   }
9969 #pragma omp taskloop
9970   for (int i = 0; i < 10; ++i) {
9971 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
9972     bar();
9973   }
9974 #pragma omp taskloop
9975   for (int i = 0; i < 10; ++i) {
9976 #pragma omp taskwait
9977     bar();
9978   }
9979 #pragma omp taskloop
9980   for (int i = 0; i < 10; ++i) {
9981 #pragma omp flush
9982     bar();
9983   }
9984 #pragma omp taskloop
9985   for (int i = 0; i < 10; ++i) {
9986 #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?}}
9987     bar();
9988   }
9989 #pragma omp taskloop
9990   for (int i = 0; i < 10; ++i) {
9991 #pragma omp atomic
9992     ++a;
9993   }
9994 #pragma omp taskloop
9995   for (int i = 0; i < 10; ++i) {
9996 #pragma omp target
9997     ++a;
9998   }
9999 #pragma omp taskloop
10000   for (int i = 0; i < 10; ++i) {
10001 #pragma omp target parallel
10002     ++a;
10003   }
10004 #pragma omp taskloop
10005   for (int i = 0; i < 10; ++i) {
10006 #pragma omp target parallel for
10007     for (int i = 0; i < 10; ++i)
10008       ;
10009   }
10010 #pragma omp taskloop
10011   for (int i = 0; i < 10; ++i) {
10012 #pragma omp target enter data map(to: a)
10013     ++a;
10014   }
10015 #pragma omp taskloop
10016   for (int i = 0; i < 10; ++i) {
10017 #pragma omp target exit data map(from: a)
10018     ++a;
10019   }
10020 #pragma omp taskloop
10021   for (int i = 0; i < 10; ++i) {
10022 #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?}}
10023     ++a;
10024   }
10025 #pragma omp taskloop
10026   for (int i = 0; i < 10; ++i) {
10027 #pragma omp taskloop
10028   for (int i = 0; i < 10; ++i)
10029     ++a;
10030   }
10031 #pragma omp taskloop
10032   for (int i = 0; i < 10; ++i) {
10033 #pragma omp target update to(a)
10034     ++a;
10035   }
10036 #pragma omp taskloop
10037   for (int i = 0; i < 10; ++i) {
10038 #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?}}
10039     for (int i = 0; i < 10; ++i)
10040       ;
10041   }
10042 #pragma omp taskloop
10043   for (int i = 0; i < 10; ++i) {
10044 #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?}}
10045     for (int i = 0; i < 10; ++i)
10046       ;
10047   }
10048 #pragma omp taskloop
10049   for (int i = 0; i < 10; ++i) {
10050 #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?}}
10051     for (int i = 0; i < 10; ++i)
10052       ;
10053   }
10054 #pragma omp taskloop
10055   for (int i = 0; i < 10; ++i) {
10056 #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?}}
10057     for (int i = 0; i < 10; ++i)
10058       ;
10059   }
10060 #pragma omp taskloop
10061   for (int i = 0; i < 10; ++i) {
10062 #pragma omp target simd // OK
10063     for (int i = 0; i < 10; ++i)
10064       ;
10065   }
10066 #pragma omp taskloop
10067   for (int i = 0; i < 10; ++i) {
10068 #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?}}
10069     for (int i = 0; i < 10; ++i)
10070       ;
10071   }
10072 #pragma omp taskloop
10073   for (int i = 0; i < 10; ++i) {
10074 #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?}}
10075     for (int i = 0; i < 10; ++i)
10076       ;
10077   }
10078 
10079 // DISTRIBUTE DIRECTIVE
10080 #pragma omp target
10081 #pragma omp teams
10082 #pragma omp distribute
10083   for (int i = 0; i < 10; ++i) {
10084 #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?}}
10085     for (int i = 0; i < 10; ++i)
10086       ;
10087   }
10088 #pragma omp target
10089 #pragma omp teams
10090 #pragma omp distribute
10091   for (int i = 0; i < 10; ++i) {
10092 #pragma omp for
10093     for (int i = 0; i < 10; ++i)
10094       ;
10095   }
10096 #pragma omp target
10097 #pragma omp teams
10098 #pragma omp distribute
10099   for (int i = 0; i < 10; ++i) {
10100 #pragma omp simd
10101     for (int i = 0; i < 10; ++i)
10102       ;
10103   }
10104 #pragma omp target
10105 #pragma omp teams
10106 #pragma omp distribute
10107   for (int i = 0; i < 10; ++i) {
10108 #pragma omp for simd
10109     for (int i = 0; i < 10; ++i)
10110       ;
10111   }
10112 #pragma omp target
10113 #pragma omp teams
10114 #pragma omp distribute
10115   for (int i = 0; i < 10; ++i) {
10116 #pragma omp parallel
10117     for (int i = 0; i < 10; ++i)
10118       ;
10119   }
10120 #pragma omp target
10121 #pragma omp teams
10122 #pragma omp distribute
10123   for (int i = 0; i < 10; ++i) {
10124 #pragma omp sections
10125     {
10126       bar();
10127     }
10128   }
10129 #pragma omp target
10130 #pragma omp teams
10131 #pragma omp distribute
10132   for (int i = 0; i < 10; ++i) {
10133 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
10134     {
10135       bar();
10136     }
10137   }
10138 #pragma omp target
10139 #pragma omp teams
10140 #pragma omp distribute
10141   for (int i = 0; i < 10; ++i) {
10142 #pragma omp single
10143     {
10144       bar();
10145     }
10146   }
10147 #pragma omp target
10148 #pragma omp teams
10149 #pragma omp distribute
10150   for (int i = 0; i < 10; ++i) {
10151 #pragma omp master
10152     {
10153       bar();
10154     }
10155   }
10156 #pragma omp target
10157 #pragma omp teams
10158 #pragma omp distribute
10159   for (int i = 0; i < 10; ++i) {
10160 #pragma omp critical
10161     {
10162       bar();
10163     }
10164   }
10165 #pragma omp target
10166 #pragma omp teams
10167 #pragma omp distribute
10168   for (int i = 0; i < 10; ++i) {
10169 #pragma omp parallel
10170     {
10171 #pragma omp single
10172       {
10173 	bar();
10174       }
10175     }
10176   }
10177 #pragma omp target
10178 #pragma omp teams
10179 #pragma omp distribute
10180   for (int i = 0; i < 10; ++i) {
10181 #pragma omp parallel for
10182     for (int i = 0; i < 10; ++i)
10183       ;
10184   }
10185 #pragma omp target
10186 #pragma omp teams
10187 #pragma omp distribute
10188   for (int i = 0; i < 10; ++i) {
10189 #pragma omp parallel for simd
10190     for (int i = 0; i < 10; ++i)
10191       ;
10192   }
10193 #pragma omp target
10194 #pragma omp teams
10195 #pragma omp distribute
10196   for (int i = 0; i < 10; ++i) {
10197 #pragma omp parallel sections
10198     {
10199       bar();
10200     }
10201   }
10202 #pragma omp target
10203 #pragma omp teams
10204 #pragma omp distribute
10205   for (int i = 0; i < 10; ++i) {
10206 #pragma omp task
10207     {
10208       bar();
10209     }
10210   }
10211 #pragma omp target
10212 #pragma omp teams
10213 #pragma omp distribute
10214   for (int i = 0; i < 10; ++i) {
10215 #pragma omp taskyield
10216     bar();
10217   }
10218 #pragma omp target
10219 #pragma omp teams
10220 #pragma omp distribute
10221   for (int i = 0; i < 10; ++i) {
10222 #pragma omp barrier
10223     bar();
10224   }
10225 #pragma omp target
10226 #pragma omp teams
10227 #pragma omp distribute
10228   for (int i = 0; i < 10; ++i) {
10229 #pragma omp taskwait
10230     bar();
10231   }
10232 #pragma omp target
10233 #pragma omp teams
10234 #pragma omp distribute
10235   for (int i = 0; i < 10; ++i) {
10236 #pragma omp flush
10237     bar();
10238   }
10239 #pragma omp target
10240 #pragma omp teams
10241 #pragma omp distribute
10242   for (int i = 0; i < 10; ++i) {
10243 #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?}}
10244     bar();
10245   }
10246 #pragma omp target
10247 #pragma omp teams
10248 #pragma omp distribute
10249   for (int i = 0; i < 10; ++i) {
10250 #pragma omp atomic
10251     ++a;
10252   }
10253 #pragma omp target
10254 #pragma omp teams
10255 #pragma omp distribute
10256   for (int i = 0; i < 10; ++i) {
10257 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
10258     ++a;
10259   }
10260 #pragma omp target
10261 #pragma omp teams
10262 #pragma omp distribute
10263   for (int i = 0; i < 10; ++i) {
10264 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
10265     ++a;
10266   }
10267 #pragma omp target
10268 #pragma omp teams
10269 #pragma omp distribute
10270   for (int i = 0; i < 10; ++i) {
10271 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
10272     for (int i = 0; i < 10; ++i)
10273       ;
10274   }
10275 #pragma omp target
10276 #pragma omp teams
10277 #pragma omp distribute
10278   for (int i = 0; i < 10; ++i) {
10279 #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?}}
10280     ++a;
10281   }
10282   return foo<int>();
10283 #pragma omp target
10284 #pragma omp teams
10285 #pragma omp distribute
10286   for (int i = 0; i < 10; ++i) {
10287 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
10288     ++a;
10289   }
10290 #pragma omp target
10291 #pragma omp teams
10292 #pragma omp distribute
10293   for (int i = 0; i < 10; ++i) {
10294 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
10295     ++a;
10296   }
10297 #pragma omp target
10298 #pragma omp teams
10299 #pragma omp distribute
10300   for (int i = 0; i < 10; ++i) {
10301 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
10302     ++a;
10303   }
10304 #pragma omp target
10305 #pragma omp teams
10306 #pragma omp distribute
10307   for (int i = 0; i < 10; ++i) {
10308 #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?}}
10309   for (int i = 0; i < 10; ++i)
10310     ++a;
10311   }
10312 #pragma omp target
10313 #pragma omp teams
10314 #pragma omp distribute
10315   for (int i = 0; i < 10; ++i) {
10316 #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?}}
10317   for (int i = 0; i < 10; ++i)
10318     ++a;
10319   }
10320 #pragma omp target
10321 #pragma omp teams
10322 #pragma omp distribute
10323   for (int i = 0; i < 10; ++i) {
10324 #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?}}
10325   for (int i = 0; i < 10; ++i)
10326     ++a;
10327   }
10328 #pragma omp target
10329 #pragma omp teams
10330 #pragma omp distribute
10331   for (int i = 0; i < 10; ++i) {
10332 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
10333   for (int i = 0; i < 10; ++i)
10334     ++a;
10335   }
10336 
10337   // DISTRIBUTE PARALLEL FOR DIRECTIVE
10338 #pragma omp target
10339 #pragma omp teams
10340 #pragma omp distribute parallel for
10341   for (int i = 0; i < 10; ++i) {
10342 #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?}}
10343     for (int i = 0; i < 10; ++i)
10344       ;
10345   }
10346 
10347 #pragma omp target
10348 #pragma omp teams
10349 #pragma omp distribute parallel for
10350   for (int i = 0; i < 10; ++i) {
10351 #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?}}
10352     for (int i = 0; i < 10; ++i)
10353       ;
10354   }
10355 #pragma omp target
10356 #pragma omp teams
10357 #pragma omp distribute parallel for
10358   for (int i = 0; i < 10; ++i) {
10359 #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?}}
10360     for (int i = 0; i < 10; ++i)
10361       ;
10362   }
10363 #pragma omp target
10364 #pragma omp teams
10365 #pragma omp distribute parallel for
10366   for (int i = 0; i < 10; ++i) {
10367 #pragma omp simd
10368     for (int i = 0; i < 10; ++i)
10369       ;
10370   }
10371 #pragma omp target
10372 #pragma omp teams
10373 #pragma omp distribute parallel for
10374   for (int i = 0; i < 10; ++i) {
10375 #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?}}
10376     for (int i = 0; i < 10; ++i)
10377       ;
10378   }
10379 #pragma omp target
10380 #pragma omp teams
10381 #pragma omp distribute parallel for
10382   for (int i = 0; i < 10; ++i) {
10383 #pragma omp parallel
10384     for (int i = 0; i < 10; ++i)
10385       ;
10386   }
10387 #pragma omp target
10388 #pragma omp teams
10389 #pragma omp distribute parallel for
10390   for (int i = 0; i < 10; ++i) {
10391 #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?}}
10392     {
10393       bar();
10394     }
10395   }
10396 #pragma omp target
10397 #pragma omp teams
10398 #pragma omp distribute parallel for
10399   for (int i = 0; i < 10; ++i) {
10400 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
10401     {
10402       bar();
10403     }
10404   }
10405 #pragma omp target
10406 #pragma omp teams
10407 #pragma omp distribute parallel for
10408   for (int i = 0; i < 10; ++i) {
10409 #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?}}
10410     {
10411       bar();
10412     }
10413   }
10414 #pragma omp target
10415 #pragma omp teams
10416 #pragma omp distribute parallel for
10417   for (int i = 0; i < 10; ++i) {
10418 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
10419     {
10420       bar();
10421     }
10422   }
10423 #pragma omp target
10424 #pragma omp teams
10425 #pragma omp distribute parallel for
10426   for (int i = 0; i < 10; ++i) {
10427 #pragma omp critical
10428     {
10429       bar();
10430     }
10431   }
10432 #pragma omp target
10433 #pragma omp teams
10434 #pragma omp distribute parallel for
10435   for (int i = 0; i < 10; ++i) {
10436 #pragma omp parallel
10437     {
10438 #pragma omp single
10439       {
10440 	bar();
10441       }
10442     }
10443   }
10444 #pragma omp target
10445 #pragma omp teams
10446 #pragma omp distribute parallel for
10447   for (int i = 0; i < 10; ++i) {
10448 #pragma omp parallel for
10449     for (int i = 0; i < 10; ++i)
10450       ;
10451   }
10452 #pragma omp target
10453 #pragma omp teams
10454 #pragma omp distribute parallel for
10455   for (int i = 0; i < 10; ++i) {
10456 #pragma omp parallel for simd
10457     for (int i = 0; i < 10; ++i)
10458       ;
10459   }
10460 #pragma omp target
10461 #pragma omp teams
10462 #pragma omp distribute parallel for
10463   for (int i = 0; i < 10; ++i) {
10464 #pragma omp parallel sections
10465     {
10466       bar();
10467     }
10468   }
10469 #pragma omp target
10470 #pragma omp teams
10471 #pragma omp distribute parallel for
10472   for (int i = 0; i < 10; ++i) {
10473 #pragma omp task
10474     {
10475       bar();
10476     }
10477   }
10478 #pragma omp target
10479 #pragma omp teams
10480 #pragma omp distribute parallel for
10481   for (int i = 0; i < 10; ++i) {
10482 #pragma omp taskyield
10483     bar();
10484   }
10485 #pragma omp target
10486 #pragma omp teams
10487 #pragma omp distribute parallel for
10488   for (int i = 0; i < 10; ++i) {
10489 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
10490     bar();
10491   }
10492 #pragma omp target
10493 #pragma omp teams
10494 #pragma omp distribute parallel for
10495   for (int i = 0; i < 10; ++i) {
10496 #pragma omp taskwait
10497     bar();
10498   }
10499 #pragma omp target
10500 #pragma omp teams
10501 #pragma omp distribute parallel for
10502   for (int i = 0; i < 10; ++i) {
10503 #pragma omp flush
10504     bar();
10505   }
10506 #pragma omp target
10507 #pragma omp teams
10508 #pragma omp distribute parallel for
10509   for (int i = 0; i < 10; ++i) {
10510 #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?}}
10511     bar();
10512   }
10513 #pragma omp target
10514 #pragma omp teams
10515 #pragma omp distribute parallel for
10516   for (int i = 0; i < 10; ++i) {
10517 #pragma omp atomic
10518     ++a;
10519   }
10520 #pragma omp target
10521 #pragma omp teams
10522 #pragma omp distribute parallel for
10523   for (int i = 0; i < 10; ++i) {
10524 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
10525     ++a;
10526   }
10527 #pragma omp target
10528 #pragma omp teams
10529 #pragma omp distribute parallel for
10530   for (int i = 0; i < 10; ++i) {
10531 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
10532     ++a;
10533   }
10534 #pragma omp target
10535 #pragma omp teams
10536 #pragma omp distribute parallel for
10537   for (int i = 0; i < 10; ++i) {
10538 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
10539     for (int i = 0; i < 10; ++i)
10540       ;
10541   }
10542 #pragma omp target
10543 #pragma omp teams
10544 #pragma omp distribute parallel for
10545   for (int i = 0; i < 10; ++i) {
10546 #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?}}
10547     ++a;
10548   }
10549   return foo<int>();
10550 #pragma omp target
10551 #pragma omp teams
10552 #pragma omp distribute parallel for
10553   for (int i = 0; i < 10; ++i) {
10554 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
10555     ++a;
10556   }
10557 #pragma omp target
10558 #pragma omp teams
10559 #pragma omp distribute parallel for
10560   for (int i = 0; i < 10; ++i) {
10561 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
10562     ++a;
10563   }
10564 #pragma omp target
10565 #pragma omp teams
10566 #pragma omp distribute parallel for
10567   for (int i = 0; i < 10; ++i) {
10568 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
10569     ++a;
10570   }
10571 #pragma omp target
10572 #pragma omp teams
10573 #pragma omp distribute parallel for
10574   for (int i = 0; i < 10; ++i) {
10575 #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?}}
10576   for (int i = 0; i < 10; ++i)
10577     ++a;
10578   }
10579 #pragma omp target
10580 #pragma omp teams
10581 #pragma omp distribute parallel for
10582   for (int i = 0; i < 10; ++i) {
10583 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
10584   for (int i = 0; i < 10; ++i)
10585     ++a;
10586   }
10587 #pragma omp target
10588 #pragma omp teams
10589 #pragma omp distribute parallel for
10590   for (int i = 0; i < 10; ++i) {
10591 #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?}}
10592   for (int i = 0; i < 10; ++i)
10593     ++a;
10594   }
10595 #pragma omp target
10596 #pragma omp teams
10597 #pragma omp distribute parallel for
10598   for (int i = 0; i < 10; ++i) {
10599 #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?}}
10600   for (int i = 0; i < 10; ++i)
10601     ++a;
10602   }
10603 
10604 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
10605 #pragma omp target
10606 #pragma omp teams
10607 #pragma omp distribute parallel for simd
10608   for (int i = 0; i < 10; ++i) {
10609 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10610     for (int i = 0; i < 10; ++i)
10611       ;
10612   }
10613 #pragma omp target
10614 #pragma omp teams
10615 #pragma omp distribute parallel for simd
10616   for (int i = 0; i < 10; ++i) {
10617 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10618     for (int i = 0; i < 10; ++i)
10619       ;
10620   }
10621 #pragma omp target
10622 #pragma omp teams
10623 #pragma omp distribute parallel for simd
10624   for (int i = 0; i < 10; ++i) {
10625 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10626     for (int i = 0; i < 10; ++i)
10627       ;
10628   }
10629 #pragma omp target
10630 #pragma omp teams
10631 #pragma omp distribute parallel for simd
10632   for (int i = 0; i < 10; ++i) {
10633 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
10634     for (int i = 0; i < 10; ++i)
10635       ;
10636   }
10637 #pragma omp target
10638 #pragma omp teams
10639 #pragma omp distribute parallel for simd
10640   for (int i = 0; i < 10; ++i) {
10641 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10642     for (int i = 0; i < 10; ++i)
10643       ;
10644   }
10645 #pragma omp target
10646 #pragma omp teams
10647 #pragma omp distribute parallel for simd
10648   for (int i = 0; i < 10; ++i) {
10649 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10650     for (int i = 0; i < 10; ++i)
10651       ;
10652   }
10653 #pragma omp target
10654 #pragma omp teams
10655 #pragma omp distribute parallel for simd
10656   for (int i = 0; i < 10; ++i) {
10657 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10658     {
10659       bar();
10660     }
10661   }
10662 #pragma omp target
10663 #pragma omp teams
10664 #pragma omp distribute parallel for simd
10665   for (int i = 0; i < 10; ++i) {
10666 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10667     {
10668       bar();
10669     }
10670   }
10671 #pragma omp target
10672 #pragma omp teams
10673 #pragma omp distribute parallel for simd
10674   for (int i = 0; i < 10; ++i) {
10675 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10676     {
10677       bar();
10678     }
10679   }
10680 #pragma omp target
10681 #pragma omp teams
10682 #pragma omp distribute parallel for simd
10683   for (int i = 0; i < 10; ++i) {
10684 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10685     {
10686       bar();
10687     }
10688   }
10689 #pragma omp target
10690 #pragma omp teams
10691 #pragma omp distribute parallel for simd
10692   for (int i = 0; i < 10; ++i) {
10693 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10694     {
10695       bar();
10696     }
10697   }
10698 #pragma omp target
10699 #pragma omp teams
10700 #pragma omp distribute parallel for simd
10701   for (int i = 0; i < 10; ++i) {
10702 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10703     {
10704 #pragma omp single
10705       {
10706 	bar();
10707       }
10708     }
10709   }
10710 #pragma omp target
10711 #pragma omp teams
10712 #pragma omp distribute parallel for simd
10713   for (int i = 0; i < 10; ++i) {
10714 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10715     for (int i = 0; i < 10; ++i)
10716       ;
10717   }
10718 #pragma omp target
10719 #pragma omp teams
10720 #pragma omp distribute parallel for simd
10721   for (int i = 0; i < 10; ++i) {
10722 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10723     for (int i = 0; i < 10; ++i)
10724       ;
10725   }
10726 #pragma omp target
10727 #pragma omp teams
10728 #pragma omp distribute parallel for simd
10729   for (int i = 0; i < 10; ++i) {
10730 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10731     {
10732       bar();
10733     }
10734   }
10735 #pragma omp target
10736 #pragma omp teams
10737 #pragma omp distribute parallel for simd
10738   for (int i = 0; i < 10; ++i) {
10739 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10740     {
10741       bar();
10742     }
10743   }
10744 #pragma omp target
10745 #pragma omp teams
10746 #pragma omp distribute parallel for simd
10747   for (int i = 0; i < 10; ++i) {
10748 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10749     bar();
10750   }
10751 #pragma omp target
10752 #pragma omp teams
10753 #pragma omp distribute parallel for simd
10754   for (int i = 0; i < 10; ++i) {
10755 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10756     bar();
10757   }
10758 #pragma omp target
10759 #pragma omp teams
10760 #pragma omp distribute parallel for simd
10761   for (int i = 0; i < 10; ++i) {
10762 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10763     bar();
10764   }
10765 #pragma omp target
10766 #pragma omp teams
10767 #pragma omp distribute parallel for simd
10768   for (int i = 0; i < 10; ++i) {
10769 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10770     bar();
10771   }
10772 #pragma omp target
10773 #pragma omp teams
10774 #pragma omp distribute parallel for simd
10775   for (int i = 0; i < 10; ++i) {
10776 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10777     bar();
10778   }
10779 #pragma omp target
10780 #pragma omp teams
10781 #pragma omp distribute parallel for simd
10782   for (int i = 0; i < 10; ++i) {
10783 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10784     ++a;
10785   }
10786 #pragma omp target
10787 #pragma omp teams
10788 #pragma omp distribute parallel for simd
10789   for (int i = 0; i < 10; ++i) {
10790 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10791     ++a;
10792   }
10793 #pragma omp target
10794 #pragma omp teams
10795 #pragma omp distribute parallel for simd
10796   for (int i = 0; i < 10; ++i) {
10797 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10798     ++a;
10799   }
10800 #pragma omp target
10801 #pragma omp teams
10802 #pragma omp distribute parallel for simd
10803   for (int i = 0; i < 10; ++i) {
10804 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10805     ++a;
10806   }
10807   return foo<int>();
10808 #pragma omp target
10809 #pragma omp teams
10810 #pragma omp distribute parallel for simd
10811   for (int i = 0; i < 10; ++i) {
10812 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10813     ++a;
10814   }
10815 #pragma omp target
10816 #pragma omp teams
10817 #pragma omp distribute parallel for simd
10818   for (int i = 0; i < 10; ++i) {
10819 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10820     ++a;
10821   }
10822 #pragma omp target
10823 #pragma omp teams
10824 #pragma omp distribute parallel for simd
10825   for (int i = 0; i < 10; ++i) {
10826 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10827     ++a;
10828   }
10829 #pragma omp target
10830 #pragma omp teams
10831 #pragma omp distribute parallel for simd
10832   for (int i = 0; i < 10; ++i) {
10833 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10834     for (int i = 0; i < 10; ++i)
10835       ;
10836   }
10837 #pragma omp target
10838 #pragma omp teams
10839 #pragma omp distribute parallel for simd
10840   for (int i = 0; i < 10; ++i) {
10841 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10842     for (int i = 0; i < 10; ++i)
10843       ;
10844   }
10845 #pragma omp target
10846 #pragma omp teams
10847 #pragma omp distribute parallel for simd
10848   for (int i = 0; i < 10; ++i) {
10849 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10850     for (int i = 0; i < 10; ++i)
10851       ;
10852   }
10853 #pragma omp target
10854 #pragma omp teams
10855 #pragma omp distribute parallel for simd
10856   for (int i = 0; i < 10; ++i) {
10857 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10858     for (int i = 0; i < 10; ++i)
10859       ;
10860   }
10861 
10862 // DISTRIBUTE SIMD DIRECTIVE
10863 #pragma omp target
10864 #pragma omp teams
10865 #pragma omp distribute simd
10866   for (int i = 0; i < 10; ++i) {
10867 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10868     for (int i = 0; i < 10; ++i)
10869       ;
10870   }
10871 #pragma omp target
10872 #pragma omp teams
10873 #pragma omp distribute simd
10874   for (int i = 0; i < 10; ++i) {
10875 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10876     for (int i = 0; i < 10; ++i)
10877       ;
10878   }
10879 #pragma omp target
10880 #pragma omp teams
10881 #pragma omp distribute simd
10882   for (int i = 0; i < 10; ++i) {
10883 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10884     for (int i = 0; i < 10; ++i)
10885       ;
10886   }
10887 #pragma omp target
10888 #pragma omp teams
10889 #pragma omp distribute simd
10890   for (int i = 0; i < 10; ++i) {
10891 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
10892     for (int i = 0; i < 10; ++i)
10893       ;
10894   }
10895 #pragma omp target
10896 #pragma omp teams
10897 #pragma omp distribute simd
10898   for (int i = 0; i < 10; ++i) {
10899 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10900     for (int i = 0; i < 10; ++i)
10901       ;
10902   }
10903 #pragma omp target
10904 #pragma omp teams
10905 #pragma omp distribute simd
10906   for (int i = 0; i < 10; ++i) {
10907 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10908     for (int i = 0; i < 10; ++i)
10909       ;
10910   }
10911 #pragma omp target
10912 #pragma omp teams
10913 #pragma omp distribute simd
10914   for (int i = 0; i < 10; ++i) {
10915 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10916     {
10917       bar();
10918     }
10919   }
10920 #pragma omp target
10921 #pragma omp teams
10922 #pragma omp distribute simd
10923   for (int i = 0; i < 10; ++i) {
10924 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10925     {
10926       bar();
10927     }
10928   }
10929 #pragma omp target
10930 #pragma omp teams
10931 #pragma omp distribute simd
10932   for (int i = 0; i < 10; ++i) {
10933 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10934     {
10935       bar();
10936     }
10937   }
10938 #pragma omp target
10939 #pragma omp teams
10940 #pragma omp distribute simd
10941   for (int i = 0; i < 10; ++i) {
10942 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10943     {
10944       bar();
10945     }
10946   }
10947 #pragma omp target
10948 #pragma omp teams
10949 #pragma omp distribute simd
10950   for (int i = 0; i < 10; ++i) {
10951 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10952     {
10953       bar();
10954     }
10955   }
10956 #pragma omp target
10957 #pragma omp teams
10958 #pragma omp distribute simd
10959   for (int i = 0; i < 10; ++i) {
10960 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10961     {
10962 #pragma omp single
10963       {
10964 	bar();
10965       }
10966     }
10967   }
10968 #pragma omp target
10969 #pragma omp teams
10970 #pragma omp distribute simd
10971   for (int i = 0; i < 10; ++i) {
10972 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10973     for (int i = 0; i < 10; ++i)
10974       ;
10975   }
10976 #pragma omp target
10977 #pragma omp teams
10978 #pragma omp distribute simd
10979   for (int i = 0; i < 10; ++i) {
10980 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10981     for (int i = 0; i < 10; ++i)
10982       ;
10983   }
10984 #pragma omp target
10985 #pragma omp teams
10986 #pragma omp distribute simd
10987   for (int i = 0; i < 10; ++i) {
10988 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10989     {
10990       bar();
10991     }
10992   }
10993 #pragma omp target
10994 #pragma omp teams
10995 #pragma omp distribute simd
10996   for (int i = 0; i < 10; ++i) {
10997 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10998     {
10999       bar();
11000     }
11001   }
11002 #pragma omp target
11003 #pragma omp teams
11004 #pragma omp distribute simd
11005   for (int i = 0; i < 10; ++i) {
11006 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11007     bar();
11008   }
11009 #pragma omp target
11010 #pragma omp teams
11011 #pragma omp distribute simd
11012   for (int i = 0; i < 10; ++i) {
11013 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11014     bar();
11015   }
11016 #pragma omp target
11017 #pragma omp teams
11018 #pragma omp distribute simd
11019   for (int i = 0; i < 10; ++i) {
11020 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11021     bar();
11022   }
11023 #pragma omp target
11024 #pragma omp teams
11025 #pragma omp distribute simd
11026   for (int i = 0; i < 10; ++i) {
11027 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11028     bar();
11029   }
11030 #pragma omp target
11031 #pragma omp teams
11032 #pragma omp distribute simd
11033   for (int i = 0; i < 10; ++i) {
11034 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11035     bar();
11036   }
11037 #pragma omp target
11038 #pragma omp teams
11039 #pragma omp distribute simd
11040   for (int i = 0; i < 10; ++i) {
11041 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11042     ++a;
11043   }
11044 #pragma omp target
11045 #pragma omp teams
11046 #pragma omp distribute simd
11047   for (int i = 0; i < 10; ++i) {
11048 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11049     ++a;
11050   }
11051 #pragma omp target
11052 #pragma omp teams
11053 #pragma omp distribute simd
11054   for (int i = 0; i < 10; ++i) {
11055 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11056     ++a;
11057   }
11058 #pragma omp target
11059 #pragma omp teams
11060 #pragma omp distribute simd
11061   for (int i = 0; i < 10; ++i) {
11062 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11063     ++a;
11064   }
11065   return foo<int>();
11066 #pragma omp target
11067 #pragma omp teams
11068 #pragma omp distribute simd
11069   for (int i = 0; i < 10; ++i) {
11070 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11071     ++a;
11072   }
11073 #pragma omp target
11074 #pragma omp teams
11075 #pragma omp distribute simd
11076   for (int i = 0; i < 10; ++i) {
11077 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11078     ++a;
11079   }
11080 #pragma omp target
11081 #pragma omp teams
11082 #pragma omp distribute simd
11083   for (int i = 0; i < 10; ++i) {
11084 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11085     ++a;
11086   }
11087 #pragma omp target
11088 #pragma omp teams
11089 #pragma omp distribute simd
11090   for (int i = 0; i < 10; ++i) {
11091 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11092     for (int i = 0; i < 10; ++i)
11093       ;
11094   }
11095 #pragma omp target
11096 #pragma omp teams
11097 #pragma omp distribute simd
11098   for (int i = 0; i < 10; ++i) {
11099 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11100     for (int i = 0; i < 10; ++i)
11101       ;
11102   }
11103 #pragma omp target
11104 #pragma omp teams
11105 #pragma omp distribute simd
11106   for (int i = 0; i < 10; ++i) {
11107 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11108     for (int i = 0; i < 10; ++i)
11109       ;
11110   }
11111 #pragma omp target
11112 #pragma omp teams
11113 #pragma omp distribute simd
11114   for (int i = 0; i < 10; ++i) {
11115 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11116     for (int i = 0; i < 10; ++i)
11117       ;
11118   }
11119 
11120 // TARGET SIMD DIRECTIVE
11121 #pragma omp target simd
11122   for (int i = 0; i < 10; ++i) {
11123 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11124     for (int i = 0; i < 10; ++i)
11125       ;
11126   }
11127 #pragma omp target simd
11128   for (int i = 0; i < 10; ++i) {
11129 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11130     for (int i = 0; i < 10; ++i)
11131       ;
11132   }
11133 #pragma omp target simd
11134   for (int i = 0; i < 10; ++i) {
11135 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11136     for (int i = 0; i < 10; ++i)
11137       ;
11138   }
11139 #pragma omp target simd
11140   for (int i = 0; i < 10; ++i) {
11141 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
11142     for (int i = 0; i < 10; ++i)
11143       ;
11144   }
11145 #pragma omp target simd
11146   for (int i = 0; i < 10; ++i) {
11147 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11148     for (int i = 0; i < 10; ++i)
11149       ;
11150   }
11151 #pragma omp target simd
11152   for (int i = 0; i < 10; ++i) {
11153 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11154     for (int i = 0; i < 10; ++i)
11155       ;
11156   }
11157 #pragma omp target simd
11158   for (int i = 0; i < 10; ++i) {
11159 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11160     {
11161       bar();
11162     }
11163   }
11164 #pragma omp target simd
11165   for (int i = 0; i < 10; ++i) {
11166 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11167     {
11168       bar();
11169     }
11170   }
11171 #pragma omp target simd
11172   for (int i = 0; i < 10; ++i) {
11173 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11174     {
11175       bar();
11176     }
11177   }
11178 #pragma omp target simd
11179   for (int i = 0; i < 10; ++i) {
11180 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11181     {
11182       bar();
11183     }
11184   }
11185 #pragma omp target simd
11186   for (int i = 0; i < 10; ++i) {
11187 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11188     {
11189       bar();
11190     }
11191   }
11192 #pragma omp target simd
11193   for (int i = 0; i < 10; ++i) {
11194 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11195     {
11196 #pragma omp single
11197       {
11198 	bar();
11199       }
11200     }
11201   }
11202 #pragma omp target simd
11203   for (int i = 0; i < 10; ++i) {
11204 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11205     for (int i = 0; i < 10; ++i)
11206       ;
11207   }
11208 #pragma omp target simd
11209   for (int i = 0; i < 10; ++i) {
11210 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11211     for (int i = 0; i < 10; ++i)
11212       ;
11213   }
11214 #pragma omp target simd
11215   for (int i = 0; i < 10; ++i) {
11216 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11217     {
11218       bar();
11219     }
11220   }
11221 #pragma omp target simd
11222   for (int i = 0; i < 10; ++i) {
11223 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11224     {
11225       bar();
11226     }
11227   }
11228 #pragma omp target simd
11229   for (int i = 0; i < 10; ++i) {
11230 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11231     bar();
11232   }
11233 #pragma omp target simd
11234   for (int i = 0; i < 10; ++i) {
11235 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11236     bar();
11237   }
11238 #pragma omp target simd
11239   for (int i = 0; i < 10; ++i) {
11240 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11241     bar();
11242   }
11243 #pragma omp target simd
11244   for (int i = 0; i < 10; ++i) {
11245 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11246     bar();
11247   }
11248 #pragma omp target simd
11249   for (int i = 0; i < 10; ++i) {
11250 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11251     bar();
11252   }
11253 #pragma omp target simd
11254   for (int i = 0; i < 10; ++i) {
11255 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11256     ++a;
11257   }
11258 #pragma omp target simd
11259   for (int i = 0; i < 10; ++i) {
11260 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11261     ++a;
11262   }
11263 #pragma omp target simd
11264   for (int i = 0; i < 10; ++i) {
11265 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11266     ++a;
11267   }
11268 #pragma omp target simd
11269   for (int i = 0; i < 10; ++i) {
11270 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11271     ++a;
11272   }
11273 #pragma omp target simd
11274   for (int i = 0; i < 10; ++i) {
11275 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11276     ++a;
11277   }
11278 #pragma omp target simd
11279   for (int i = 0; i < 10; ++i) {
11280 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11281     ++a;
11282   }
11283 #pragma omp target simd
11284   for (int i = 0; i < 10; ++i) {
11285 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11286     ++a;
11287   }
11288 #pragma omp target simd
11289   for (int i = 0; i < 10; ++i) {
11290 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11291     for (int i = 0; i < 10; ++i)
11292       ;
11293   }
11294 #pragma omp target simd
11295   for (int i = 0; i < 10; ++i) {
11296 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11297     for (int i = 0; i < 10; ++i)
11298       ;
11299   }
11300 #pragma omp target simd
11301   for (int i = 0; i < 10; ++i) {
11302 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11303     for (int i = 0; i < 10; ++i)
11304       ;
11305   }
11306 #pragma omp target simd
11307   for (int i = 0; i < 10; ++i) {
11308 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11309     for (int i = 0; i < 10; ++i)
11310       ;
11311   }
11312 
11313 // TEAMS DISTRIBUTE DIRECTIVE
11314 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
11315   for (int i = 0; i < 10; ++i)
11316     ;
11317 #pragma omp target
11318 #pragma omp teams distribute
11319   for (int i = 0; i < 10; ++i) {
11320 #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?}}
11321     for (int i = 0; i < 10; ++i)
11322       ;
11323   }
11324 #pragma omp target
11325 #pragma omp teams distribute
11326   for (int i = 0; i < 10; ++i) {
11327 #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?}}
11328     for (int i = 0; i < 10; ++i)
11329       ;
11330   }
11331 #pragma omp target
11332 #pragma omp teams distribute
11333   for (int i = 0; i < 10; ++i) {
11334 #pragma omp for // OK
11335     for (int i = 0; i < 10; ++i)
11336       ;
11337   }
11338 #pragma omp target
11339 #pragma omp teams distribute
11340   for (int i = 0; i < 10; ++i) {
11341 #pragma omp simd // OK
11342     for (int i = 0; i < 10; ++i)
11343       ;
11344   }
11345 #pragma omp target
11346 #pragma omp teams distribute
11347   for (int i = 0; i < 10; ++i) {
11348 #pragma omp for simd // OK
11349     for (int i = 0; i < 10; ++i)
11350       ;
11351   }
11352 #pragma omp target
11353 #pragma omp teams distribute
11354   for (int i = 0; i < 10; ++i) {
11355 #pragma omp parallel // OK
11356     for (int i = 0; i < 10; ++i)
11357       ;
11358   }
11359 #pragma omp target
11360 #pragma omp teams distribute
11361   for (int i = 0; i < 10; ++i) {
11362 #pragma omp sections // OK
11363     {
11364       bar();
11365     }
11366   }
11367 #pragma omp target
11368 #pragma omp teams distribute
11369   for (int i = 0; i < 10; ++i) {
11370 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
11371     {
11372       bar();
11373     }
11374   }
11375 #pragma omp target
11376 #pragma omp teams distribute
11377   for (int i = 0; i < 10; ++i) {
11378 #pragma omp single // OK
11379     {
11380       bar();
11381     }
11382   }
11383 #pragma omp target
11384 #pragma omp teams distribute
11385   for (int i = 0; i < 10; ++i) {
11386 #pragma omp master // OK
11387     {
11388       bar();
11389     }
11390   }
11391 #pragma omp target
11392 #pragma omp teams distribute
11393   for (int i = 0; i < 10; ++i) {
11394 #pragma omp critical // OK
11395     {
11396       bar();
11397     }
11398   }
11399 #pragma omp target
11400 #pragma omp teams distribute
11401   for (int i = 0; i < 10; ++i) {
11402 #pragma omp parallel // OK
11403     {
11404 #pragma omp single
11405       {
11406 	bar();
11407       }
11408     }
11409   }
11410 #pragma omp target
11411 #pragma omp teams distribute
11412   for (int i = 0; i < 10; ++i) {
11413 #pragma omp parallel for // OK
11414     for (int i = 0; i < 10; ++i)
11415       ;
11416   }
11417 #pragma omp target
11418 #pragma omp teams distribute
11419   for (int i = 0; i < 10; ++i) {
11420 #pragma omp parallel for simd // OK
11421     for (int i = 0; i < 10; ++i)
11422       ;
11423   }
11424 #pragma omp target
11425 #pragma omp teams distribute
11426   for (int i = 0; i < 10; ++i) {
11427 #pragma omp parallel sections // OK
11428     {
11429       bar();
11430     }
11431   }
11432 #pragma omp target
11433 #pragma omp teams distribute
11434   for (int i = 0; i < 10; ++i) {
11435 #pragma omp task // OK
11436     {
11437       bar();
11438     }
11439   }
11440 #pragma omp target
11441 #pragma omp teams distribute
11442   for (int i = 0; i < 10; ++i) {
11443 #pragma omp taskyield // OK
11444     bar();
11445   }
11446 #pragma omp target
11447 #pragma omp teams distribute
11448   for (int i = 0; i < 10; ++i) {
11449 #pragma omp barrier // OK
11450     bar();
11451   }
11452 #pragma omp target
11453 #pragma omp teams distribute
11454   for (int i = 0; i < 10; ++i) {
11455 #pragma omp taskwait // OK
11456     bar();
11457   }
11458 #pragma omp target
11459 #pragma omp teams distribute
11460   for (int i = 0; i < 10; ++i) {
11461 #pragma omp flush // OK
11462     bar();
11463   }
11464 #pragma omp target
11465 #pragma omp teams distribute
11466   for (int i = 0; i < 10; ++i) {
11467 #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?}}
11468     bar();
11469   }
11470 #pragma omp target
11471 #pragma omp teams distribute
11472   for (int i = 0; i < 10; ++i) {
11473 #pragma omp atomic // OK
11474     ++a;
11475   }
11476 #pragma omp target
11477 #pragma omp teams distribute
11478   for (int i = 0; i < 10; ++i) {
11479 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
11480     ++a;
11481   }
11482 #pragma omp target
11483 #pragma omp teams distribute
11484   for (int i = 0; i < 10; ++i) {
11485 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
11486     ++a;
11487   }
11488 #pragma omp target
11489 #pragma omp teams distribute
11490   for (int i = 0; i < 10; ++i) {
11491 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
11492     for (int i = 0; i < 10; ++i)
11493       ;
11494   }
11495 #pragma omp target
11496 #pragma omp teams distribute
11497   for (int i = 0; i < 10; ++i) {
11498 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
11499     ++a;
11500   }
11501 #pragma omp target
11502 #pragma omp teams distribute
11503   for (int i = 0; i < 10; ++i) {
11504 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
11505     ++a;
11506   }
11507 #pragma omp target
11508 #pragma omp teams distribute
11509   for (int i = 0; i < 10; ++i) {
11510 #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?}}
11511     ++a;
11512   }
11513 #pragma omp target
11514 #pragma omp teams distribute
11515   for (int i = 0; i < 10; ++i) {
11516 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
11517     ++a;
11518   }
11519 #pragma omp target
11520 #pragma omp teams distribute
11521   for (int i = 0; i < 10; ++i) {
11522 #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?}}
11523     for (int i = 0; i < 10; ++i)
11524       ++a;
11525   }
11526 #pragma omp target
11527 #pragma omp teams distribute
11528   for (int i = 0; i < 10; ++i) {
11529 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
11530     for (int i = 0; i < 10; ++i)
11531       ++a;
11532   }
11533 #pragma omp target
11534 #pragma omp teams distribute
11535   for (int i = 0; i < 10; ++i) {
11536 #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?}}
11537     for (int i = 0; i < 10; ++i)
11538       ++a;
11539   }
11540 #pragma omp target
11541 #pragma omp teams distribute
11542   for (int i = 0; i < 10; ++i) {
11543 #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?}}
11544     for (int i = 0; i < 10; ++i)
11545       ++a;
11546   }
11547 
11548 // TEAMS DISTRIBUTE SIMD DIRECTIVE
11549 #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?}}
11550   for (int i = 0; i < 10; ++i)
11551     ;
11552 #pragma omp target
11553 #pragma omp teams distribute simd
11554   for (int i = 0; i < 10; ++i) {
11555 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11556     for (int i = 0; i < 10; ++i)
11557       ;
11558   }
11559 #pragma omp target
11560 #pragma omp teams distribute simd
11561   for (int i = 0; i < 10; ++i) {
11562 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11563     for (int i = 0; i < 10; ++i)
11564       ;
11565   }
11566 #pragma omp target
11567 #pragma omp teams distribute simd
11568   for (int i = 0; i < 10; ++i) {
11569 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11570     for (int i = 0; i < 10; ++i)
11571       ;
11572   }
11573 #pragma omp target
11574 #pragma omp teams distribute simd
11575   for (int i = 0; i < 10; ++i) {
11576 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
11577     for (int i = 0; i < 10; ++i)
11578       ;
11579   }
11580 #pragma omp target
11581 #pragma omp teams distribute simd
11582   for (int i = 0; i < 10; ++i) {
11583 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11584     for (int i = 0; i < 10; ++i)
11585       ;
11586   }
11587 #pragma omp target
11588 #pragma omp teams distribute simd
11589   for (int i = 0; i < 10; ++i) {
11590 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11591     for (int i = 0; i < 10; ++i)
11592       ;
11593   }
11594 #pragma omp target
11595 #pragma omp teams distribute simd
11596   for (int i = 0; i < 10; ++i) {
11597 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11598     {
11599       bar();
11600     }
11601   }
11602 #pragma omp target
11603 #pragma omp teams distribute simd
11604   for (int i = 0; i < 10; ++i) {
11605 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11606     {
11607       bar();
11608     }
11609   }
11610 #pragma omp target
11611 #pragma omp teams distribute simd
11612   for (int i = 0; i < 10; ++i) {
11613 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11614     {
11615       bar();
11616     }
11617   }
11618 #pragma omp target
11619 #pragma omp teams distribute simd
11620   for (int i = 0; i < 10; ++i) {
11621 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11622     {
11623       bar();
11624     }
11625   }
11626 #pragma omp target
11627 #pragma omp teams distribute simd
11628   for (int i = 0; i < 10; ++i) {
11629 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11630     {
11631       bar();
11632     }
11633   }
11634 #pragma omp target
11635 #pragma omp teams distribute simd
11636   for (int i = 0; i < 10; ++i) {
11637 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11638     {
11639 #pragma omp single
11640       {
11641 	bar();
11642       }
11643     }
11644   }
11645 #pragma omp target
11646 #pragma omp teams distribute simd
11647   for (int i = 0; i < 10; ++i) {
11648 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11649     for (int i = 0; i < 10; ++i)
11650       ;
11651   }
11652 #pragma omp target
11653 #pragma omp teams distribute simd
11654   for (int i = 0; i < 10; ++i) {
11655 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11656     for (int i = 0; i < 10; ++i)
11657       ;
11658   }
11659 #pragma omp target
11660 #pragma omp teams distribute simd
11661   for (int i = 0; i < 10; ++i) {
11662 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11663     {
11664       bar();
11665     }
11666   }
11667 #pragma omp target
11668 #pragma omp teams distribute simd
11669   for (int i = 0; i < 10; ++i) {
11670 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11671     {
11672       bar();
11673     }
11674   }
11675 #pragma omp target
11676 #pragma omp teams distribute simd
11677   for (int i = 0; i < 10; ++i) {
11678 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11679     bar();
11680   }
11681 #pragma omp target
11682 #pragma omp teams distribute simd
11683   for (int i = 0; i < 10; ++i) {
11684 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11685     bar();
11686   }
11687 #pragma omp target
11688 #pragma omp teams distribute simd
11689   for (int i = 0; i < 10; ++i) {
11690 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11691     bar();
11692   }
11693 #pragma omp target
11694 #pragma omp teams distribute simd
11695   for (int i = 0; i < 10; ++i) {
11696 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11697     bar();
11698   }
11699 #pragma omp target
11700 #pragma omp teams distribute simd
11701   for (int i = 0; i < 10; ++i) {
11702 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11703     bar();
11704   }
11705 #pragma omp target
11706 #pragma omp teams distribute simd
11707   for (int i = 0; i < 10; ++i) {
11708 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11709     ++a;
11710   }
11711 #pragma omp target
11712 #pragma omp teams distribute simd
11713   for (int i = 0; i < 10; ++i) {
11714 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11715     ++a;
11716   }
11717 #pragma omp target
11718 #pragma omp teams distribute simd
11719   for (int i = 0; i < 10; ++i) {
11720 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11721     ++a;
11722   }
11723 #pragma omp target
11724 #pragma omp teams distribute simd
11725   for (int i = 0; i < 10; ++i) {
11726 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11727     for (int i = 0; i < 10; ++i)
11728       ;
11729   }
11730 #pragma omp target
11731 #pragma omp teams distribute simd
11732   for (int i = 0; i < 10; ++i) {
11733 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11734     ++a;
11735   }
11736 #pragma omp target
11737 #pragma omp teams distribute simd
11738   for (int i = 0; i < 10; ++i) {
11739 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11740     ++a;
11741   }
11742 #pragma omp target
11743 #pragma omp teams distribute simd
11744   for (int i = 0; i < 10; ++i) {
11745 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11746     ++a;
11747   }
11748 #pragma omp target
11749 #pragma omp teams distribute simd
11750   for (int i = 0; i < 10; ++i) {
11751 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11752     ++a;
11753   }
11754 #pragma omp target
11755 #pragma omp teams distribute simd
11756   for (int i = 0; i < 10; ++i) {
11757 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11758     for (int i = 0; i < 10; ++i)
11759       ++a;
11760   }
11761 #pragma omp target
11762 #pragma omp teams distribute simd
11763   for (int i = 0; i < 10; ++i) {
11764 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11765     for (int i = 0; i < 10; ++i)
11766       ++a;
11767   }
11768 #pragma omp target
11769 #pragma omp teams distribute simd
11770   for (int i = 0; i < 10; ++i) {
11771 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11772     for (int i = 0; i < 10; ++i)
11773       ++a;
11774   }
11775 #pragma omp target
11776 #pragma omp teams distribute simd
11777   for (int i = 0; i < 10; ++i) {
11778 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11779     for (int i = 0; i < 10; ++i)
11780       ++a;
11781   }
11782   return foo<int>();
11783 }
11784