1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -fno-openmp-extensions -verify=expected,omp45,omp45warn,omp %s
2 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fno-openmp-extensions -verify=expected,omp50,omp %s
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-extensions -verify=expected,omp50 %s
4 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45,omp -fno-openmp-extensions -Wno-openmp %s
5 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45,omp -fno-openmp-extensions -Wno-source-uses-openmp %s
6 
7 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -fno-openmp-extensions -verify=expected,omp45,omp45warn,omp %s
8 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp50,omp -fno-openmp-extensions %s
9 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
10 
11 void bar();
12 
13 template <class T>
14 void foo() {
15   T a = T();
16 // PARALLEL DIRECTIVE
17 #pragma omp parallel
18 #pragma omp for
19   for (int i = 0; i < 10; ++i)
20     ;
21 #pragma omp parallel
22 #pragma omp simd
23   for (int i = 0; i < 10; ++i)
24     ;
25 #pragma omp parallel
26 #pragma omp for simd
27   for (int i = 0; i < 10; ++i)
28     ;
29 #pragma omp parallel
30 #pragma omp sections
31   {
32     bar();
33   }
34 #pragma omp parallel
35 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
36   {
37     bar();
38   }
39 #pragma omp parallel
40 #pragma omp single
41   bar();
42 
43 #pragma omp parallel
44 #pragma omp master
45   {
46     bar();
47   }
48 #pragma omp parallel
49 #pragma omp critical
50   {
51     bar();
52   }
53 #pragma omp parallel
54 #pragma omp parallel for
55   for (int i = 0; i < 10; ++i)
56     ;
57 #pragma omp parallel
58 #pragma omp parallel for simd
59   for (int i = 0; i < 10; ++i)
60     ;
61 #pragma omp parallel
62 #pragma omp parallel sections
63   {
64     bar();
65   }
66 #pragma omp parallel
67 #pragma omp parallel master
68   {
69     bar();
70   }
71 #pragma omp parallel
72 #pragma omp task
73   {
74     bar();
75   }
76 #pragma omp parallel
77   {
78 #pragma omp taskyield
79     bar();
80   }
81 #pragma omp parallel
82   {
83 #pragma omp barrier
84     bar();
85   }
86 #pragma omp parallel
87   {
88 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
89     bar();
90   }
91 #pragma omp parallel
92   {
93 #pragma omp taskwait
94     bar();
95   }
96 #pragma omp parallel
97   {
98 #pragma omp flush
99     bar();
100   }
101 #pragma omp parallel
102   {
103 #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?}}
104     bar();
105   }
106 #pragma omp parallel
107   {
108 #pragma omp atomic
109     ++a;
110   }
111 #pragma omp parallel
112   {
113 #pragma omp target
114     ++a;
115   }
116 #pragma omp parallel
117   {
118 #pragma omp target parallel
119     ++a;
120   }
121 #pragma omp parallel
122   {
123 #pragma omp target parallel for
124   for (int i = 0; i < 10; ++i)
125     ;
126   }
127 #pragma omp parallel
128   {
129 #pragma omp target enter data map(to: a)
130     ++a;
131   }
132 #pragma omp parallel
133   {
134 #pragma omp target exit data map(from: a)
135     ++a;
136   }
137 #pragma omp parallel
138   {
139 #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?}}
140     ++a;
141   }
142 #pragma omp parallel
143   {
144 #pragma omp taskloop
145   for (int i = 0; i < 10; ++i)
146     ++a;
147   }
148 #pragma omp parallel
149   {
150 #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?}}
151     for (int i = 0; i < 10; ++i)
152       ;
153   }
154 #pragma omp parallel
155   {
156 #pragma omp target update to(a)
157   }
158 #pragma omp parallel
159   {
160 #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?}}
161     for (int i = 0; i < 10; ++i)
162       ;
163   }
164 #pragma omp parallel
165   {
166 #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?}}
167     for (int i = 0; i < 10; ++i)
168       ;
169   }
170 #pragma omp parallel
171   {
172 #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?}}
173     for (int i = 0; i < 10; ++i)
174       ;
175   }
176 #pragma omp parallel
177   {
178 #pragma omp target simd // OK
179     for (int i = 0; i < 10; ++i)
180       ;
181   }
182 #pragma omp parallel
183   {
184 #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?}}
185     for (int i = 0; i < 10; ++i)
186       ;
187   }
188 #pragma omp parallel
189   {
190 #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?}}
191     for (int i = 0; i < 10; ++i)
192       ;
193   }
194 #pragma omp parallel
195   {
196 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
197     for (int i = 0; i < 10; ++i)
198       ;
199   }
200 #pragma omp parallel
201   {
202 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
203     for (int i = 0; i < 10; ++i)
204       ;
205   }
206 #pragma omp parallel
207   {
208 #pragma omp target teams // OK
209     ++a;
210   }
211 #pragma omp parallel
212   {
213 #pragma omp target teams distribute // OK
214     for (int i = 0; i < 10; ++i)
215       ;
216   }
217 #pragma omp parallel
218   {
219 #pragma omp target teams distribute parallel for // OK
220     for (int i = 0; i < 10; ++i)
221       ;
222   }
223 #pragma omp parallel
224   {
225 #pragma omp target teams distribute parallel for simd // OK
226     for (int i = 0; i < 10; ++i)
227       ;
228   }
229 #pragma omp parallel
230   {
231 #pragma omp target teams distribute simd // OK
232     for (int i = 0; i < 10; ++i)
233       ;
234   }
235 
236 // SIMD DIRECTIVE
237 #pragma omp simd
238   for (int i = 0; i < 10; ++i) {
239 #pragma omp for // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{OpenMP constructs may not be nested inside a simd region except for ordered simd, simd, scan, or atomic directive}}
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 simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
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 for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
252     for (int i = 0; i < 10; ++i)
253       ;
254   }
255 #pragma omp simd
256   for (int i = 0; i < 10; ++i) {
257 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
258     for (int i = 0; i < 10; ++i)
259       ;
260   }
261 #pragma omp simd
262   for (int i = 0; i < 10; ++i) {
263 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
264     {
265       bar();
266     }
267   }
268 #pragma omp simd
269   for (int i = 0; i < 10; ++i) {
270 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
271     {
272       bar();
273     }
274   }
275 #pragma omp simd
276   for (int i = 0; i < 10; ++i) {
277 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
278     {
279       bar();
280     }
281   }
282 #pragma omp simd
283   for (int i = 0; i < 10; ++i) {
284 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
285     {
286       bar();
287     }
288   }
289 #pragma omp simd
290   for (int i = 0; i < 10; ++i) {
291 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
292     {
293       bar();
294     }
295   }
296 #pragma omp simd
297   for (int i = 0; i < 10; ++i) {
298 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
299     for (int i = 0; i < 10; ++i)
300       ;
301   }
302 #pragma omp simd
303   for (int i = 0; i < 10; ++i) {
304 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
305     for (int i = 0; i < 10; ++i)
306       ;
307   }
308 #pragma omp simd
309   for (int i = 0; i < 10; ++i) {
310 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
311     {
312       bar();
313     }
314   }
315 #pragma omp simd
316   for (int i = 0; i < 10; ++i) {
317 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
318     {
319       bar();
320     }
321   }
322 #pragma omp simd
323   for (int i = 0; i < 10; ++i) {
324 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
325     {
326       bar();
327     }
328   }
329 #pragma omp simd
330   for (int i = 0; i < 10; ++i) {
331 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
332     bar();
333   }
334 #pragma omp simd
335   for (int i = 0; i < 10; ++i) {
336 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
337     bar();
338   }
339 #pragma omp simd
340   for (int i = 0; i < 10; ++i) {
341 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
342     bar();
343   }
344 #pragma omp simd
345   for (int i = 0; i < 10; ++i) {
346 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
347     bar();
348   }
349 #pragma omp simd
350   for (int i = 0; i < 10; ++i) {
351 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
352     bar();
353   }
354 #pragma omp simd
355   for (int i = 0; i < 10; ++i) {
356 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
357     bar();
358   }
359 #pragma omp simd
360   for (int i = 0; i < 10; ++i) {
361 #pragma omp ordered simd // OK
362     bar();
363   }
364 #pragma omp simd
365   for (int i = 0; i < 10; ++i) {
366 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
367     bar();
368   }
369 #pragma omp simd
370   for (int i = 0; i < 10; ++i) {
371 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
372     ++a;
373   }
374 #pragma omp simd
375   for (int i = 0; i < 10; ++i) {
376 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
377     ++a;
378   }
379 #pragma omp simd
380   for (int i = 0; i < 10; ++i) {
381 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
382     ++a;
383   }
384 #pragma omp simd
385   for (int i = 0; i < 10; ++i) {
386 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
387     for (int i = 0; i < 10; ++i)
388       ;
389   }
390 #pragma omp simd
391   for (int i = 0; i < 10; ++i) {
392 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
393     ++a;
394   }
395 #pragma omp simd
396   for (int i = 0; i < 10; ++i) {
397 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
398     ++a;
399   }
400 #pragma omp simd
401   for (int i = 0; i < 10; ++i) {
402 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
403     ++a;
404   }
405 #pragma omp simd
406   for (int i = 0; i < 10; ++i) {
407 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
408   for (int i = 0; i < 10; ++i)
409     ++a;
410   }
411 #pragma omp simd
412   for (int i = 0; i < 10; ++i) {
413 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
414     for (int j = 0; j < 10; ++j)
415       ;
416   }
417 #pragma omp simd
418   for (int i = 0; i < 10; ++i) {
419 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
420   }
421 #pragma omp simd
422   for (int i = 0; i < 10; ++i) {
423 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
424     for (int j = 0; j < 10; ++j)
425       ;
426   }
427 #pragma omp simd
428   for (int i = 0; i < 10; ++i) {
429 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
430     for (int j = 0; j < 10; ++j)
431       ;
432   }
433 #pragma omp simd
434   for (int i = 0; i < 10; ++i) {
435 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
436     for (int j = 0; j < 10; ++j)
437       ;
438   }
439 #pragma omp simd
440   for (int i = 0; i < 10; ++i) {
441 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
442     for (int j = 0; j < 10; ++j)
443       ;
444   }
445 #pragma omp simd
446   for (int i = 0; i < 10; ++i) {
447 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
448     for (int j = 0; j < 10; ++j)
449       ;
450   }
451 #pragma omp simd
452   for (int i = 0; i < 10; ++i) {
453 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
454     for (int j = 0; j < 10; ++j)
455       ;
456   }
457 #pragma omp simd
458   for (int i = 0; i < 10; ++i) {
459 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
460     for (int j = 0; j < 10; ++j)
461       ;
462   }
463 #pragma omp simd
464   for (int i = 0; i < 10; ++i) {
465 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
466     for (int j = 0; j < 10; ++j)
467       ;
468   }
469 #pragma omp simd
470   for (int i = 0; i < 10; ++i) {
471 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
472     ++a;
473   }
474 #pragma omp simd
475   for (int i = 0; i < 10; ++i) {
476 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
477     for (int j = 0; j < 10; ++j)
478       ;
479   }
480 #pragma omp simd
481   for (int i = 0; i < 10; ++i) {
482 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
483     for (int j = 0; j < 10; ++j)
484       ;
485   }
486 #pragma omp simd
487   for (int i = 0; i < 10; ++i) {
488 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
489     for (int j = 0; j < 10; ++j)
490       ;
491   }
492 #pragma omp simd
493   for (int i = 0; i < 10; ++i) {
494 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
495     for (int j = 0; j < 10; ++j)
496       ;
497   }
498 
499 // FOR DIRECTIVE
500 #pragma omp for
501   for (int i = 0; i < 10; ++i) {
502 #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?}}
503     for (int i = 0; i < 10; ++i)
504       ;
505   }
506 #pragma omp for
507   for (int i = 0; i < 10; ++i) {
508 #pragma omp simd
509     for (int i = 0; i < 10; ++i)
510       ;
511   }
512 #pragma omp for
513   for (int i = 0; i < 10; ++i) {
514 #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?}}
515     for (int i = 0; i < 10; ++i)
516       ;
517   }
518 #pragma omp for
519   for (int i = 0; i < 10; ++i) {
520 #pragma omp parallel
521     for (int i = 0; i < 10; ++i)
522       ;
523   }
524 #pragma omp for
525   for (int i = 0; i < 10; ++i) {
526 #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?}}
527     {
528       bar();
529     }
530   }
531 #pragma omp for
532   for (int i = 0; i < 10; ++i) {
533 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
534     {
535       bar();
536     }
537   }
538 #pragma omp for
539   for (int i = 0; i < 10; ++i) {
540 #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?}}
541     {
542       bar();
543     }
544   }
545 
546 #pragma omp for
547   for (int i = 0; i < 10; ++i) {
548 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
549     {
550       bar();
551     }
552   }
553 #pragma omp for
554   for (int i = 0; i < 10; ++i) {
555 #pragma omp critical
556     {
557       bar();
558     }
559   }
560 #pragma omp for
561   for (int i = 0; i < 10; ++i) {
562 #pragma omp parallel
563     {
564 #pragma omp single // OK
565       {
566         bar();
567       }
568 #pragma omp for // OK
569       for (int i = 0; i < 10; ++i)
570         ;
571 #pragma omp sections // OK
572       {
573         bar();
574       }
575     }
576   }
577 #pragma omp for
578   for (int i = 0; i < 10; ++i) {
579 #pragma omp parallel for
580     for (int i = 0; i < 10; ++i)
581       ;
582   }
583 #pragma omp for
584   for (int i = 0; i < 10; ++i) {
585 #pragma omp parallel for simd
586     for (int i = 0; i < 10; ++i)
587       ;
588   }
589 #pragma omp for
590   for (int i = 0; i < 10; ++i) {
591 #pragma omp parallel master
592     {
593       bar();
594     }
595   }
596 #pragma omp for
597   for (int i = 0; i < 10; ++i) {
598 #pragma omp parallel sections
599     {
600       bar();
601     }
602   }
603 #pragma omp for
604   for (int i = 0; i < 10; ++i) {
605 #pragma omp task
606     {
607       bar();
608     }
609   }
610 #pragma omp for
611   for (int i = 0; i < 10; ++i) {
612 #pragma omp taskyield
613     bar();
614   }
615 #pragma omp for
616   for (int i = 0; i < 10; ++i) {
617 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
618     bar();
619   }
620 #pragma omp for
621   for (int i = 0; i < 10; ++i) {
622 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
623     bar();
624   }
625 #pragma omp for
626   for (int i = 0; i < 10; ++i) {
627 #pragma omp taskwait
628     bar();
629   }
630 #pragma omp for
631   for (int i = 0; i < 10; ++i) {
632 #pragma omp flush
633     bar();
634   }
635 #pragma omp for
636   for (int i = 0; i < 10; ++i) {
637 #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?}}
638     bar();
639   }
640 #pragma omp for ordered
641   for (int i = 0; i < 10; ++i) {
642 #pragma omp ordered // OK
643     bar();
644   }
645 #pragma omp for
646   for (int i = 0; i < 10; ++i) {
647 #pragma omp atomic
648     ++a;
649   }
650 #pragma omp for
651   for (int i = 0; i < 10; ++i) {
652 #pragma omp target
653     ++a;
654   }
655 #pragma omp for
656   for (int i = 0; i < 10; ++i) {
657 #pragma omp target parallel
658     ++a;
659   }
660 #pragma omp for
661   for (int i = 0; i < 10; ++i) {
662 #pragma omp target parallel for
663     for (int i = 0; i < 10; ++i)
664       ;
665   }
666 #pragma omp for
667   for (int i = 0; i < 10; ++i) {
668 #pragma omp target enter data map(to: a)
669     ++a;
670   }
671 #pragma omp for
672   for (int i = 0; i < 10; ++i) {
673 #pragma omp target exit data map(from: a)
674     ++a;
675   }
676 #pragma omp for
677   for (int i = 0; i < 10; ++i) {
678 #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?}}
679     ++a;
680   }
681 #pragma omp for
682   for (int i = 0; i < 10; ++i) {
683 #pragma omp taskloop
684   for (int i = 0; i < 10; ++i)
685     ++a;
686   }
687 #pragma omp for
688   for (int i = 0; i < 10; ++i) {
689 #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?}}
690     for (int j = 0; j < 10; ++j)
691       ;
692   }
693 #pragma omp for
694   for (int i = 0; i < 10; ++i) {
695 #pragma omp target update to(a)
696   }
697 #pragma omp for
698   for (int i = 0; i < 10; ++i) {
699 #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?}}
700     for (int j = 0; j < 10; ++j)
701       ;
702   }
703 #pragma omp for
704   for (int i = 0; i < 10; ++i) {
705 #pragma omp 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?}}
706     for (int j = 0; j < 10; ++j)
707       ;
708   }
709 #pragma omp for
710   for (int i = 0; i < 10; ++i) {
711 #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?}}
712     for (int j = 0; j < 10; ++j)
713       ;
714   }
715 #pragma omp for
716   for (int i = 0; i < 10; ++i) {
717 #pragma omp target simd // OK
718     for (int j = 0; j < 10; ++j)
719       ;
720   }
721 #pragma omp for
722   for (int i = 0; i < 10; ++i) {
723 #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?}}
724     for (int j = 0; j < 10; ++j)
725       ;
726   }
727 #pragma omp for
728   for (int i = 0; i < 10; ++i) {
729 #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?}}
730     for (int j = 0; j < 10; ++j)
731       ;
732   }
733 #pragma omp for
734   for (int i = 0; i < 10; ++i) {
735 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
736     for (int j = 0; j < 10; ++j)
737       ;
738   }
739 #pragma omp for
740   for (int i = 0; i < 10; ++i) {
741 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
742     for (int j = 0; j < 10; ++j)
743       ;
744   }
745 #pragma omp for
746   for (int i = 0; i < 10; ++i) {
747 #pragma omp target teams // OK
748     ++a;
749   }
750 #pragma omp for
751   for (int i = 0; i < 10; ++i) {
752 #pragma omp target teams distribute // OK
753     for (int j = 0; j < 10; ++j)
754       ;
755   }
756 #pragma omp for
757   for (int i = 0; i < 10; ++i) {
758 #pragma omp target teams distribute parallel for // OK
759     for (int j = 0; j < 10; ++j)
760       ;
761   }
762 #pragma omp for
763   for (int i = 0; i < 10; ++i) {
764 #pragma omp target teams distribute parallel for simd // OK
765     for (int j = 0; j < 10; ++j)
766       ;
767   }
768 #pragma omp for
769   for (int i = 0; i < 10; ++i) {
770 #pragma omp target teams distribute simd // OK
771     for (int j = 0; j < 10; ++j)
772       ;
773   }
774 
775 // FOR SIMD DIRECTIVE
776 #pragma omp for simd
777   for (int i = 0; i < 10; ++i) {
778 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
779     for (int i = 0; i < 10; ++i)
780       ;
781   }
782 #pragma omp for simd
783   for (int i = 0; i < 10; ++i) {
784 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
785     for (int i = 0; i < 10; ++i)
786       ;
787   }
788 #pragma omp for simd
789   for (int i = 0; i < 10; ++i) {
790 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
791     for (int i = 0; i < 10; ++i)
792       ;
793   }
794 #pragma omp for simd
795   for (int i = 0; i < 10; ++i) {
796 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
797     for (int i = 0; i < 10; ++i)
798       ;
799   }
800 #pragma omp for simd
801   for (int i = 0; i < 10; ++i) {
802 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
803     {
804       bar();
805     }
806   }
807 #pragma omp for simd
808   for (int i = 0; i < 10; ++i) {
809 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
810     {
811       bar();
812     }
813   }
814 #pragma omp for simd
815   for (int i = 0; i < 10; ++i) {
816 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
817     {
818       bar();
819     }
820   }
821 #pragma omp for simd
822   for (int i = 0; i < 10; ++i) {
823 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
824     {
825       bar();
826     }
827   }
828 #pragma omp for simd
829   for (int i = 0; i < 10; ++i) {
830 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
831     {
832       bar();
833     }
834   }
835 #pragma omp for simd
836   for (int i = 0; i < 10; ++i) {
837 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
838     for (int i = 0; i < 10; ++i)
839       ;
840   }
841 #pragma omp for simd
842   for (int i = 0; i < 10; ++i) {
843 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
844     for (int i = 0; i < 10; ++i)
845       ;
846   }
847 #pragma omp for simd
848   for (int i = 0; i < 10; ++i) {
849 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
850     {
851       bar();
852     }
853   }
854 #pragma omp for simd
855   for (int i = 0; i < 10; ++i) {
856 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
857     {
858       bar();
859     }
860   }
861 #pragma omp for simd
862   for (int i = 0; i < 10; ++i) {
863 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
864     {
865       bar();
866     }
867   }
868 #pragma omp for simd
869   for (int i = 0; i < 10; ++i) {
870 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
871     bar();
872   }
873 #pragma omp for simd
874   for (int i = 0; i < 10; ++i) {
875 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
876     bar();
877   }
878 #pragma omp for simd
879   for (int i = 0; i < 10; ++i) {
880 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
881     bar();
882   }
883 #pragma omp for simd
884   for (int i = 0; i < 10; ++i) {
885 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
886     bar();
887   }
888 #pragma omp for simd
889   for (int i = 0; i < 10; ++i) {
890 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
891     bar();
892   }
893 #pragma omp for simd
894   for (int i = 0; i < 10; ++i) {
895 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
896     bar();
897   }
898 #pragma omp for simd
899   for (int i = 0; i < 10; ++i) {
900 #pragma omp ordered simd // OK
901     bar();
902   }
903 #pragma omp for simd
904   for (int i = 0; i < 10; ++i) {
905 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
906     bar();
907   }
908 #pragma omp for simd
909   for (int i = 0; i < 10; ++i) {
910 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
911     ++a;
912   }
913 #pragma omp for simd
914   for (int i = 0; i < 10; ++i) {
915 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
916     ++a;
917   }
918 #pragma omp for simd
919   for (int i = 0; i < 10; ++i) {
920 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
921     ++a;
922   }
923 #pragma omp for simd
924   for (int i = 0; i < 10; ++i) {
925 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
926     for (int i = 0; i < 10; ++i)
927       ;
928   }
929 #pragma omp for simd
930   for (int i = 0; i < 10; ++i) {
931 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
932     ++a;
933   }
934 #pragma omp for simd
935   for (int i = 0; i < 10; ++i) {
936 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
937     ++a;
938   }
939 #pragma omp for simd
940   for (int i = 0; i < 10; ++i) {
941 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
942     ++a;
943   }
944 #pragma omp for simd
945   for (int i = 0; i < 10; ++i) {
946 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
947   for (int i = 0; i < 10; ++i)
948     ++a;
949   }
950 #pragma omp for simd
951   for (int i = 0; i < 10; ++i) {
952 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
953     for (int j = 0; j < 10; ++j)
954       ;
955   }
956 #pragma omp for simd
957   for (int i = 0; i < 10; ++i) {
958 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
959     bar();
960   }
961 #pragma omp for simd
962   for (int i = 0; i < 10; ++i) {
963 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
964     for (int j = 0; j < 10; ++j)
965       ;
966   }
967 #pragma omp for simd
968   for (int i = 0; i < 10; ++i) {
969 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
970     for (int j = 0; j < 10; ++j)
971       ;
972   }
973 #pragma omp for simd
974   for (int i = 0; i < 10; ++i) {
975 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
976     for (int j = 0; j < 10; ++j)
977       ;
978   }
979 #pragma omp for simd
980   for (int i = 0; i < 10; ++i) {
981 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
982     for (int j = 0; j < 10; ++j)
983       ;
984   }
985 #pragma omp for simd
986   for (int i = 0; i < 10; ++i) {
987 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
988     for (int j = 0; j < 10; ++j)
989       ;
990   }
991 #pragma omp for simd
992   for (int i = 0; i < 10; ++i) {
993 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
994     for (int j = 0; j < 10; ++j)
995       ;
996   }
997 #pragma omp for simd
998   for (int i = 0; i < 10; ++i) {
999 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1000     for (int j = 0; j < 10; ++j)
1001       ;
1002   }
1003 #pragma omp for simd
1004   for (int i = 0; i < 10; ++i) {
1005 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1006     for (int j = 0; j < 10; ++j)
1007       ;
1008   }
1009 #pragma omp for simd
1010   for (int i = 0; i < 10; ++i) {
1011 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1012     a++;
1013   }
1014 #pragma omp for simd
1015   for (int i = 0; i < 10; ++i) {
1016 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1017     for (int j = 0; j < 10; ++j)
1018       ;
1019   }
1020 #pragma omp for simd
1021   for (int i = 0; i < 10; ++i) {
1022 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1023     for (int j = 0; j < 10; ++j)
1024       ;
1025   }
1026 #pragma omp for simd
1027   for (int i = 0; i < 10; ++i) {
1028 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1029     for (int j = 0; j < 10; ++j)
1030       ;
1031   }
1032 #pragma omp for simd
1033   for (int i = 0; i < 10; ++i) {
1034 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1035     for (int j = 0; j < 10; ++j)
1036       ;
1037   }
1038 
1039 // SECTIONS DIRECTIVE
1040 #pragma omp sections
1041   {
1042 #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?}}
1043     for (int i = 0; i < 10; ++i)
1044       ;
1045   }
1046 #pragma omp sections
1047   {
1048 #pragma omp simd
1049     for (int i = 0; i < 10; ++i)
1050       ;
1051   }
1052 #pragma omp sections
1053   {
1054 #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?}}
1055     for (int i = 0; i < 10; ++i)
1056       ;
1057   }
1058 #pragma omp sections
1059   {
1060 #pragma omp parallel
1061     for (int i = 0; i < 10; ++i)
1062       ;
1063   }
1064 #pragma omp sections
1065   {
1066 #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?}}
1067     {
1068       bar();
1069     }
1070   }
1071 #pragma omp sections
1072   {
1073 #pragma omp section
1074     {
1075       bar();
1076     }
1077   }
1078 #pragma omp sections
1079   {
1080 #pragma omp parallel
1081     {
1082 #pragma omp single // OK
1083       {
1084         bar();
1085       }
1086 #pragma omp for // OK
1087       for (int i = 0; i < 10; ++i)
1088         ;
1089 #pragma omp sections // OK
1090       {
1091         bar();
1092       }
1093     }
1094   }
1095 #pragma omp sections
1096   {
1097 #pragma omp parallel master
1098     {
1099       bar();
1100     }
1101   }
1102 #pragma omp sections
1103   {
1104 #pragma omp parallel
1105     {
1106 #pragma omp master // OK
1107       {
1108         bar();
1109       }
1110 #pragma omp for // OK
1111       for (int i = 0; i < 10; ++i)
1112         ;
1113 #pragma omp master // OK
1114       {
1115         bar();
1116       }
1117     }
1118 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
1119     bar();
1120   }
1121 #pragma omp sections
1122   {
1123 #pragma omp parallel
1124     {
1125 #pragma omp critical(A) // OK
1126       {
1127         bar();
1128       }
1129 #pragma omp for // OK
1130       for (int i = 0; i < 10; ++i)
1131         ;
1132 #pragma omp critical // OK
1133       {
1134         bar();
1135       }
1136     }
1137 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
1138     bar();
1139   }
1140 #pragma omp sections
1141   {
1142 #pragma omp parallel for
1143     for (int i = 0; i < 10; ++i)
1144       ;
1145   }
1146 #pragma omp sections
1147   {
1148 #pragma omp parallel for simd
1149     for (int i = 0; i < 10; ++i)
1150       ;
1151   }
1152 #pragma omp sections
1153   {
1154 #pragma omp parallel sections
1155     {
1156       bar();
1157     }
1158   }
1159 #pragma omp sections
1160   {
1161 #pragma omp task
1162     {
1163       bar();
1164     }
1165   }
1166 #pragma omp sections
1167   {
1168 #pragma omp taskyield
1169   }
1170 #pragma omp sections
1171   {
1172 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1173   }
1174 #pragma omp sections
1175   {
1176 #pragma omp scan // expected-error {{region cannot be closely nested inside 'sections' region}}
1177   }
1178 #pragma omp sections
1179   {
1180 #pragma omp taskwait
1181   }
1182 #pragma omp sections
1183   {
1184 #pragma omp flush
1185   }
1186 #pragma omp sections
1187   {
1188 #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?}}
1189     bar();
1190   }
1191 #pragma omp sections
1192   {
1193 #pragma omp atomic
1194     ++a;
1195   }
1196 #pragma omp sections
1197   {
1198 #pragma omp target
1199     ++a;
1200   }
1201 #pragma omp sections
1202   {
1203 #pragma omp target parallel
1204     ++a;
1205   }
1206 #pragma omp sections
1207   {
1208 #pragma omp target parallel for
1209     for (int i = 0; i < 10; ++i)
1210       ;
1211   }
1212 #pragma omp sections
1213   {
1214 #pragma omp target enter data map(to: a)
1215   }
1216 #pragma omp sections
1217   {
1218 #pragma omp target exit data map(from: a)
1219   }
1220 #pragma omp sections
1221   {
1222 #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?}}
1223     ++a;
1224   }
1225 #pragma omp sections
1226   {
1227 #pragma omp taskloop
1228   for (int i = 0; i < 10; ++i)
1229     ++a;
1230   }
1231 #pragma omp sections
1232   {
1233 #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?}}
1234     for (int i = 0; i < 10; ++i)
1235       ;
1236   }
1237 #pragma omp sections
1238   {
1239 #pragma omp target update to(a)
1240   }
1241 #pragma omp sections
1242   {
1243 #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?}}
1244     for (int i = 0; i < 10; ++i)
1245       ;
1246   }
1247 #pragma omp sections
1248   {
1249 #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?}}
1250     for (int i = 0; i < 10; ++i)
1251       ;
1252   }
1253 #pragma omp sections
1254   {
1255 #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?}}
1256     for (int i = 0; i < 10; ++i)
1257       ;
1258   }
1259 #pragma omp sections
1260   {
1261 #pragma omp target simd // OK
1262     for (int i = 0; i < 10; ++i)
1263       ;
1264   }
1265 #pragma omp sections
1266   {
1267 #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?}}
1268     for (int i = 0; i < 10; ++i)
1269       ;
1270   }
1271 #pragma omp sections
1272   {
1273 #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?}}
1274     for (int i = 0; i < 10; ++i)
1275       ;
1276   }
1277 #pragma omp sections
1278   {
1279 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1280     for (int i = 0; i < 10; ++i)
1281       ;
1282   }
1283 #pragma omp sections
1284   {
1285 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1286     for (int i = 0; i < 10; ++i)
1287       ;
1288   }
1289 #pragma omp sections
1290   {
1291 #pragma omp target teams // OK
1292     ++a;
1293   }
1294 #pragma omp sections
1295   {
1296 #pragma omp target teams distribute // OK
1297     for (int i = 0; i < 10; ++i)
1298       ;
1299   }
1300 #pragma omp sections
1301   {
1302 #pragma omp target teams distribute parallel for // OK
1303     for (int i = 0; i < 10; ++i)
1304       ;
1305   }
1306 #pragma omp sections
1307   {
1308 #pragma omp target teams distribute parallel for simd // OK
1309     for (int i = 0; i < 10; ++i)
1310       ;
1311   }
1312 #pragma omp sections
1313   {
1314 #pragma omp target teams distribute simd // OK
1315     for (int i = 0; i < 10; ++i)
1316       ;
1317   }
1318 
1319 // SECTION DIRECTIVE
1320 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1321   {
1322     bar();
1323   }
1324 #pragma omp sections
1325   {
1326 #pragma omp section
1327     {
1328 #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?}}
1329       for (int i = 0; i < 10; ++i)
1330         ;
1331     }
1332   }
1333 #pragma omp sections
1334   {
1335 #pragma omp section
1336     {
1337 #pragma omp simd
1338       for (int i = 0; i < 10; ++i)
1339         ;
1340     }
1341   }
1342 #pragma omp sections
1343   {
1344 #pragma omp section
1345     {
1346 #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?}}
1347       for (int i = 0; i < 10; ++i)
1348         ;
1349     }
1350   }
1351 #pragma omp sections
1352   {
1353 #pragma omp section
1354     {
1355 #pragma omp parallel
1356       for (int i = 0; i < 10; ++i)
1357         ;
1358     }
1359   }
1360 #pragma omp sections
1361   {
1362 #pragma omp section
1363     {
1364 #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?}}
1365       {
1366         bar();
1367       }
1368     }
1369   }
1370 #pragma omp sections
1371   {
1372 #pragma omp section
1373     {
1374 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1375       {
1376         bar();
1377       }
1378     }
1379   }
1380 #pragma omp sections
1381   {
1382 #pragma omp section
1383     {
1384 #pragma omp parallel master
1385       bar();
1386 #pragma omp critical
1387       bar();
1388     }
1389   }
1390 #pragma omp sections
1391   {
1392 #pragma omp section
1393     {
1394 #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?}}
1395       bar();
1396 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1397       bar();
1398 #pragma omp critical
1399       bar();
1400     }
1401   }
1402 #pragma omp sections
1403   {
1404 #pragma omp section
1405     {
1406 #pragma omp parallel
1407       {
1408 #pragma omp single // OK
1409         {
1410           bar();
1411         }
1412 #pragma omp for // OK
1413         for (int i = 0; i < 10; ++i)
1414           ;
1415 #pragma omp for simd // OK
1416         for (int i = 0; i < 10; ++i)
1417           ;
1418 #pragma omp sections // OK
1419         {
1420           bar();
1421         }
1422       }
1423     }
1424   }
1425 #pragma omp sections
1426   {
1427 #pragma omp section
1428     {
1429 #pragma omp parallel for
1430       for (int i = 0; i < 10; ++i)
1431         ;
1432     }
1433   }
1434 #pragma omp sections
1435   {
1436 #pragma omp section
1437     {
1438 #pragma omp parallel for simd
1439       for (int i = 0; i < 10; ++i)
1440         ;
1441     }
1442   }
1443 #pragma omp sections
1444   {
1445 #pragma omp section
1446     {
1447 #pragma omp parallel sections
1448       {
1449         bar();
1450       }
1451     }
1452   }
1453 #pragma omp sections
1454   {
1455 #pragma omp section
1456     {
1457 #pragma omp task
1458       {
1459         bar();
1460       }
1461     }
1462   }
1463 #pragma omp sections
1464   {
1465 #pragma omp section
1466     {
1467 #pragma omp taskyield
1468       bar();
1469     }
1470   }
1471 #pragma omp sections
1472   {
1473 #pragma omp section
1474     {
1475 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1476       bar();
1477     }
1478   }
1479 #pragma omp sections
1480   {
1481 #pragma omp section
1482     {
1483 #pragma omp scan // expected-error {{region cannot be closely nested inside 'section' region}}
1484       bar();
1485     }
1486   }
1487 #pragma omp sections
1488   {
1489 #pragma omp section
1490     {
1491 #pragma omp taskwait
1492       bar();
1493     }
1494   }
1495 #pragma omp sections
1496   {
1497 #pragma omp section
1498     {
1499 #pragma omp flush
1500       bar();
1501     }
1502   }
1503 #pragma omp sections
1504   {
1505 #pragma omp section
1506     {
1507 #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?}}
1508       bar();
1509     }
1510   }
1511 #pragma omp sections
1512   {
1513 #pragma omp section
1514 #pragma omp atomic
1515     ++a;
1516   }
1517 #pragma omp sections
1518   {
1519 #pragma omp section
1520 #pragma omp target
1521     ++a;
1522   }
1523 #pragma omp sections
1524   {
1525 #pragma omp section
1526 #pragma omp target parallel
1527     ++a;
1528   }
1529 #pragma omp sections
1530   {
1531 #pragma omp section
1532     {
1533 #pragma omp target parallel for
1534       for (int i = 0; i < 10; ++i)
1535         ;
1536     }
1537   }
1538 #pragma omp sections
1539   {
1540 #pragma omp section
1541     {
1542 #pragma omp target enter data map(to: a)
1543       ++a;
1544     }
1545   }
1546 #pragma omp sections
1547   {
1548 #pragma omp section
1549     {
1550 #pragma omp target exit data map(from: a)
1551       ++a;
1552     }
1553   }
1554 #pragma omp sections
1555   {
1556 #pragma omp section
1557 #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?}}
1558     ++a;
1559   }
1560 #pragma omp sections
1561   {
1562 #pragma omp section
1563 #pragma omp taskloop
1564   for (int i = 0; i < 10; ++i)
1565     ++a;
1566   }
1567 #pragma omp sections
1568   {
1569 #pragma omp section
1570 #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?}}
1571     for (int i = 0; i < 10; ++i)
1572       ;
1573   }
1574 #pragma omp sections
1575   {
1576 #pragma omp section
1577     {
1578       bar();
1579 #pragma omp target update to(a)
1580     }
1581   }
1582 #pragma omp sections
1583   {
1584 #pragma omp section
1585 #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?}}
1586     for (int i = 0; i < 10; ++i)
1587       ;
1588   }
1589 #pragma omp sections
1590   {
1591 #pragma omp section
1592 #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?}}
1593     for (int i = 0; i < 10; ++i)
1594       ;
1595   }
1596 #pragma omp sections
1597   {
1598 #pragma omp section
1599 #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?}}
1600     for (int i = 0; i < 10; ++i)
1601       ;
1602   }
1603 #pragma omp sections
1604   {
1605 #pragma omp section
1606 #pragma omp target simd // OK
1607     for (int i = 0; i < 10; ++i)
1608       ;
1609   }
1610 #pragma omp sections
1611   {
1612 #pragma omp section
1613 #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?}}
1614     for (int i = 0; i < 10; ++i)
1615       ;
1616   }
1617 #pragma omp sections
1618   {
1619 #pragma omp section
1620 #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?}}
1621     for (int i = 0; i < 10; ++i)
1622       ;
1623   }
1624 #pragma omp sections
1625   {
1626 #pragma omp section
1627 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1628     for (int i = 0; i < 10; ++i)
1629       ;
1630   }
1631 #pragma omp sections
1632   {
1633 #pragma omp section
1634 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1635     for (int i = 0; i < 10; ++i)
1636       ;
1637   }
1638 #pragma omp sections
1639   {
1640 #pragma omp section
1641 #pragma omp target teams // OK
1642     ++a;
1643   }
1644 #pragma omp sections
1645   {
1646 #pragma omp section
1647 #pragma omp target teams distribute // OK
1648     for (int i = 0; i < 10; ++i)
1649       ;
1650   }
1651 #pragma omp sections
1652   {
1653 #pragma omp section
1654 #pragma omp target teams distribute parallel for // OK
1655     for (int i = 0; i < 10; ++i)
1656       ;
1657   }
1658 #pragma omp sections
1659   {
1660 #pragma omp section
1661 #pragma omp target teams distribute parallel for simd // OK
1662     for (int i = 0; i < 10; ++i)
1663       ;
1664   }
1665 #pragma omp sections
1666   {
1667 #pragma omp section
1668 #pragma omp target teams distribute simd // OK
1669     for (int i = 0; i < 10; ++i)
1670       ;
1671   }
1672 
1673 // SINGLE DIRECTIVE
1674 #pragma omp single
1675   {
1676 #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?}}
1677     for (int i = 0; i < 10; ++i)
1678       ;
1679   }
1680 #pragma omp single
1681   {
1682 #pragma omp simd
1683     for (int i = 0; i < 10; ++i)
1684       ;
1685   }
1686 #pragma omp single
1687   {
1688 #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?}}
1689     for (int i = 0; i < 10; ++i)
1690       ;
1691   }
1692 #pragma omp single
1693   {
1694 #pragma omp parallel
1695     for (int i = 0; i < 10; ++i)
1696       ;
1697   }
1698 #pragma omp single
1699   {
1700 #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?}}
1701     {
1702       bar();
1703     }
1704   }
1705 #pragma omp single
1706   {
1707 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1708     {
1709       bar();
1710     }
1711   }
1712 #pragma omp single
1713   {
1714 #pragma omp parallel master
1715     {
1716       bar();
1717     }
1718   }
1719 #pragma omp single
1720   {
1721 #pragma omp critical
1722     {
1723       bar();
1724     }
1725   }
1726 #pragma omp single
1727   {
1728 #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?}}
1729     {
1730       bar();
1731     }
1732   }
1733 #pragma omp single
1734   {
1735 #pragma omp parallel
1736     {
1737 #pragma omp single // OK
1738       {
1739         bar();
1740       }
1741 #pragma omp for // OK
1742       for (int i = 0; i < 10; ++i)
1743         ;
1744 #pragma omp for simd // OK
1745       for (int i = 0; i < 10; ++i)
1746         ;
1747 #pragma omp sections // OK
1748       {
1749         bar();
1750       }
1751     }
1752   }
1753 #pragma omp single
1754   {
1755 #pragma omp parallel for
1756     for (int i = 0; i < 10; ++i)
1757       ;
1758   }
1759 #pragma omp single
1760   {
1761 #pragma omp parallel for simd
1762     for (int i = 0; i < 10; ++i)
1763       ;
1764   }
1765 #pragma omp single
1766   {
1767 #pragma omp parallel sections
1768     {
1769       bar();
1770     }
1771   }
1772 #pragma omp single
1773   {
1774 #pragma omp task
1775     {
1776       bar();
1777     }
1778   }
1779 #pragma omp single
1780   {
1781 #pragma omp taskyield
1782     bar();
1783   }
1784 #pragma omp single
1785   {
1786 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1787     bar();
1788   }
1789 #pragma omp single
1790   {
1791 #pragma omp scan // expected-error {{region cannot be closely nested inside 'single' region}}
1792     bar();
1793   }
1794 #pragma omp single
1795   {
1796 #pragma omp taskwait
1797     bar();
1798   }
1799 #pragma omp single
1800   {
1801 #pragma omp flush
1802     bar();
1803   }
1804 #pragma omp single
1805   {
1806 #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?}}
1807     bar();
1808   }
1809 #pragma omp single
1810   {
1811 #pragma omp atomic
1812     ++a;
1813   }
1814 #pragma omp single
1815   {
1816 #pragma omp target
1817     ++a;
1818   }
1819 #pragma omp single
1820   {
1821 #pragma omp target parallel
1822     ++a;
1823   }
1824 #pragma omp single
1825   {
1826 #pragma omp target parallel for
1827     for (int i = 0; i < 10; ++i)
1828       ;
1829   }
1830 #pragma omp single
1831   {
1832 #pragma omp target enter data map(to: a)
1833     ++a;
1834   }
1835 #pragma omp single
1836   {
1837 #pragma omp target exit data map(from: a)
1838     ++a;
1839   }
1840 #pragma omp single
1841   {
1842 #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?}}
1843     ++a;
1844   }
1845 #pragma omp single
1846   {
1847 #pragma omp taskloop
1848   for (int i = 0; i < 10; ++i)
1849     ++a;
1850   }
1851 #pragma omp single
1852   {
1853 #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?}}
1854     for (int i = 0; i < 10; ++i)
1855       ;
1856   }
1857 #pragma omp single
1858   {
1859 #pragma omp target update to(a)
1860     bar();
1861   }
1862 #pragma omp single
1863   {
1864 #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?}}
1865     for (int i = 0; i < 10; ++i)
1866       ;
1867   }
1868 #pragma omp single
1869   {
1870 #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?}}
1871     for (int i = 0; i < 10; ++i)
1872       ;
1873   }
1874 #pragma omp single
1875   {
1876 #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?}}
1877     for (int i = 0; i < 10; ++i)
1878       ;
1879   }
1880 #pragma omp single
1881   {
1882 #pragma omp target simd // OK
1883     for (int i = 0; i < 10; ++i)
1884       ;
1885   }
1886 #pragma omp single
1887   {
1888 #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?}}
1889     for (int i = 0; i < 10; ++i)
1890       ;
1891   }
1892 #pragma omp single
1893   {
1894 #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?}}
1895     for (int i = 0; i < 10; ++i)
1896       ;
1897   }
1898 #pragma omp single
1899   {
1900 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1901     for (int i = 0; i < 10; ++i)
1902       ;
1903   }
1904 #pragma omp single
1905   {
1906 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1907     for (int i = 0; i < 10; ++i)
1908       ;
1909   }
1910 #pragma omp single
1911   {
1912 #pragma omp target teams // OK
1913     ++a;
1914   }
1915 #pragma omp single
1916   {
1917 #pragma omp target teams distribute // OK
1918     for (int i = 0; i < 10; ++i)
1919       ;
1920   }
1921 #pragma omp single
1922   {
1923 #pragma omp target teams distribute parallel for // OK
1924     for (int i = 0; i < 10; ++i)
1925       ;
1926   }
1927 #pragma omp single
1928   {
1929 #pragma omp target teams distribute parallel for simd // OK
1930     for (int i = 0; i < 10; ++i)
1931       ;
1932   }
1933 #pragma omp single
1934   {
1935 #pragma omp target teams distribute simd // OK
1936     for (int i = 0; i < 10; ++i)
1937       ;
1938   }
1939 
1940 // MASTER DIRECTIVE
1941 #pragma omp master
1942   {
1943 #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?}}
1944     for (int i = 0; i < 10; ++i)
1945       ;
1946   }
1947 #pragma omp master
1948   {
1949 #pragma omp simd
1950     for (int i = 0; i < 10; ++i)
1951       ;
1952   }
1953 #pragma omp master
1954   {
1955 #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?}}
1956     for (int i = 0; i < 10; ++i)
1957       ;
1958   }
1959 #pragma omp master
1960   {
1961 #pragma omp parallel
1962     for (int i = 0; i < 10; ++i)
1963       ;
1964   }
1965 #pragma omp master
1966   {
1967 #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?}}
1968     {
1969       bar();
1970     }
1971   }
1972 #pragma omp master
1973   {
1974 #pragma omp master // OK, though second 'master' is redundant
1975     {
1976       bar();
1977     }
1978   }
1979 #pragma omp master
1980   {
1981 #pragma omp critical
1982     {
1983       bar();
1984     }
1985   }
1986 #pragma omp master
1987   {
1988 #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?}}
1989     {
1990       bar();
1991     }
1992   }
1993 #pragma omp master
1994   {
1995 #pragma omp parallel
1996     {
1997 #pragma omp master // OK
1998       {
1999         bar();
2000       }
2001 #pragma omp for // OK
2002       for (int i = 0; i < 10; ++i)
2003         ;
2004 #pragma omp for simd // OK
2005       for (int i = 0; i < 10; ++i)
2006         ;
2007 #pragma omp sections // OK
2008       {
2009         bar();
2010       }
2011     }
2012   }
2013 #pragma omp master
2014   {
2015 #pragma omp parallel master // OK
2016       {
2017         bar();
2018       }
2019 #pragma omp parallel
2020     {
2021 #pragma omp for // OK
2022       for (int i = 0; i < 10; ++i)
2023         ;
2024 #pragma omp for simd // OK
2025       for (int i = 0; i < 10; ++i)
2026         ;
2027 #pragma omp sections // OK
2028       {
2029         bar();
2030       }
2031     }
2032   }
2033 #pragma omp master
2034   {
2035 #pragma omp parallel for
2036     for (int i = 0; i < 10; ++i)
2037       ;
2038   }
2039 #pragma omp master
2040   {
2041 #pragma omp parallel for simd
2042     for (int i = 0; i < 10; ++i)
2043       ;
2044   }
2045 #pragma omp master
2046   {
2047 #pragma omp parallel sections
2048     {
2049       bar();
2050     }
2051   }
2052 #pragma omp master
2053   {
2054 #pragma omp task
2055     {
2056       bar();
2057     }
2058   }
2059 #pragma omp master
2060   {
2061 #pragma omp taskyield
2062     bar();
2063   }
2064 #pragma omp master
2065   {
2066 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
2067     bar();
2068   }
2069 #pragma omp master
2070   {
2071 #pragma omp scan // expected-error {{region cannot be closely nested inside 'master' region}}
2072     bar();
2073   }
2074 #pragma omp master
2075   {
2076 #pragma omp taskwait
2077     bar();
2078   }
2079 #pragma omp master
2080   {
2081 #pragma omp flush
2082     bar();
2083   }
2084 #pragma omp master
2085   {
2086 #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?}}
2087     bar();
2088   }
2089 #pragma omp master
2090   {
2091 #pragma omp atomic
2092     ++a;
2093   }
2094 #pragma omp master
2095   {
2096 #pragma omp target
2097     ++a;
2098   }
2099 #pragma omp master
2100   {
2101 #pragma omp target parallel
2102     ++a;
2103   }
2104 #pragma omp master
2105   {
2106 #pragma omp target parallel for
2107     for (int i = 0; i < 10; ++i)
2108       ;
2109   }
2110 #pragma omp master
2111   {
2112 #pragma omp target enter data map(to: a)
2113     ++a;
2114   }
2115 #pragma omp master
2116   {
2117 #pragma omp target exit data map(from: a)
2118     ++a;
2119   }
2120 #pragma omp master
2121   {
2122 #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?}}
2123     ++a;
2124   }
2125 #pragma omp master
2126   {
2127 #pragma omp taskloop
2128   for (int i = 0; i < 10; ++i)
2129     ++a;
2130   }
2131 #pragma omp master
2132   {
2133 #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?}}
2134     for (int i = 0; i < 10; ++i)
2135       ;
2136   }
2137 #pragma omp master
2138   {
2139 #pragma omp target update to(a)
2140     bar();
2141   }
2142 #pragma omp master
2143   {
2144 #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?}}
2145     for (int i = 0; i < 10; ++i)
2146       ;
2147   }
2148 #pragma omp master
2149   {
2150 #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?}}
2151     for (int i = 0; i < 10; ++i)
2152       ;
2153   }
2154 #pragma omp master
2155   {
2156 #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?}}
2157     for (int i = 0; i < 10; ++i)
2158       ;
2159   }
2160 #pragma omp master
2161   {
2162 #pragma omp target simd // OK
2163     for (int i = 0; i < 10; ++i)
2164       ;
2165   }
2166 #pragma omp master
2167   {
2168 #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?}}
2169     for (int i = 0; i < 10; ++i)
2170       ;
2171   }
2172 #pragma omp master
2173   {
2174 #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?}}
2175     for (int i = 0; i < 10; ++i)
2176       ;
2177   }
2178 #pragma omp master
2179   {
2180 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2181     for (int i = 0; i < 10; ++i)
2182       ;
2183   }
2184 #pragma omp master
2185   {
2186 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2187     for (int i = 0; i < 10; ++i)
2188       ;
2189   }
2190 #pragma omp master
2191   {
2192 #pragma omp target teams // OK
2193     a++;
2194   }
2195 #pragma omp master
2196   {
2197 #pragma omp target teams distribute // OK
2198     for (int i = 0; i < 10; ++i)
2199       ;
2200   }
2201 #pragma omp master
2202   {
2203 #pragma omp target teams distribute parallel for // OK
2204     for (int i = 0; i < 10; ++i)
2205       ;
2206   }
2207 #pragma omp master
2208   {
2209 #pragma omp target teams distribute parallel for simd // OK
2210     for (int i = 0; i < 10; ++i)
2211       ;
2212   }
2213 #pragma omp master
2214   {
2215 #pragma omp target teams distribute simd // OK
2216     for (int i = 0; i < 10; ++i)
2217       ;
2218   }
2219 
2220 // CRITICAL DIRECTIVE
2221 #pragma omp critical
2222   {
2223 #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?}}
2224     for (int i = 0; i < 10; ++i)
2225       ;
2226   }
2227 #pragma omp critical
2228   {
2229 #pragma omp simd
2230     for (int i = 0; i < 10; ++i)
2231       ;
2232   }
2233 #pragma omp critical
2234   {
2235 #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?}}
2236     for (int i = 0; i < 10; ++i)
2237       ;
2238   }
2239 #pragma omp critical
2240   {
2241 #pragma omp parallel
2242     for (int i = 0; i < 10; ++i)
2243       ;
2244   }
2245 #pragma omp critical
2246   {
2247 #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?}}
2248     {
2249       bar();
2250     }
2251   }
2252 #pragma omp critical
2253   {
2254 #pragma omp master // OK, though second 'master' is redundant
2255     {
2256       bar();
2257     }
2258   }
2259 #pragma omp critical
2260   {
2261 #pragma omp critical
2262     {
2263       bar();
2264     }
2265   }
2266 #pragma omp critical
2267   {
2268 #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?}}
2269     {
2270       bar();
2271     }
2272   }
2273 #pragma omp critical
2274   {
2275 #pragma omp parallel
2276     {
2277 #pragma omp master // OK
2278       {
2279         bar();
2280       }
2281 #pragma omp for // OK
2282       for (int i = 0; i < 10; ++i)
2283         ;
2284 #pragma omp for simd // OK
2285       for (int i = 0; i < 10; ++i)
2286         ;
2287 #pragma omp sections // OK
2288       {
2289         bar();
2290       }
2291     }
2292   }
2293 #pragma omp critical
2294   {
2295 #pragma omp parallel master
2296     {
2297       bar();
2298     }
2299   }
2300 #pragma omp critical
2301   {
2302 #pragma omp parallel for
2303     for (int i = 0; i < 10; ++i)
2304       ;
2305   }
2306 #pragma omp critical
2307   {
2308 #pragma omp parallel for simd
2309     for (int i = 0; i < 10; ++i)
2310       ;
2311   }
2312 #pragma omp critical
2313   {
2314 #pragma omp parallel sections
2315     {
2316       bar();
2317     }
2318   }
2319 #pragma omp critical
2320   {
2321 #pragma omp task
2322     {
2323       bar();
2324     }
2325   }
2326 #pragma omp critical
2327   {
2328 #pragma omp taskyield
2329     bar();
2330   }
2331 #pragma omp critical
2332   {
2333 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2334     bar();
2335   }
2336 #pragma omp critical
2337   {
2338 #pragma omp scan // expected-error {{region cannot be closely nested inside 'critical' region}}
2339     bar();
2340   }
2341 #pragma omp critical
2342   {
2343 #pragma omp taskwait
2344     bar();
2345   }
2346 #pragma omp critical(Tuzik)
2347   {
2348 #pragma omp critical(grelka)
2349     bar();
2350   }
2351 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2352   {
2353 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2354     {
2355 #pragma omp critical(Tuzik)
2356       {
2357 #pragma omp parallel
2358 #pragma omp critical(grelka)
2359         {
2360           bar();
2361         }
2362       }
2363     }
2364   }
2365 #pragma omp critical
2366   {
2367 #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?}}
2368     bar();
2369   }
2370 #pragma omp critical
2371   {
2372 #pragma omp atomic
2373     ++a;
2374   }
2375 #pragma omp critical
2376   {
2377 #pragma omp target
2378     ++a;
2379   }
2380 #pragma omp critical
2381   {
2382 #pragma omp target parallel
2383     ++a;
2384   }
2385 #pragma omp critical
2386   {
2387 #pragma omp target parallel for
2388     for (int i = 0; i < 10; ++i)
2389       ;
2390   }
2391 #pragma omp critical
2392   {
2393 #pragma omp target enter data map(to: a)
2394     ++a;
2395   }
2396 #pragma omp critical
2397   {
2398 #pragma omp target exit data map(from: a)
2399     ++a;
2400   }
2401 #pragma omp critical
2402   {
2403 #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?}}
2404     ++a;
2405   }
2406 #pragma omp critical
2407   {
2408 #pragma omp taskloop
2409   for (int i = 0; i < 10; ++i)
2410     ++a;
2411   }
2412 #pragma omp critical
2413   {
2414 #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?}}
2415     for (int i = 0; i < 10; ++i)
2416       ;
2417   }
2418 #pragma omp critical
2419   {
2420 #pragma omp target update to(a)
2421     bar();
2422   }
2423 #pragma omp critical
2424   {
2425 #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?}}
2426     for (int i = 0; i < 10; ++i)
2427       ;
2428   }
2429 #pragma omp critical
2430   {
2431 #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?}}
2432     for (int i = 0; i < 10; ++i)
2433       ;
2434   }
2435 #pragma omp critical
2436   {
2437 #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?}}
2438     for (int i = 0; i < 10; ++i)
2439       ;
2440   }
2441 #pragma omp critical
2442   {
2443 #pragma omp target simd // OK
2444     for (int i = 0; i < 10; ++i)
2445       ;
2446   }
2447 #pragma omp critical
2448   {
2449 #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?}}
2450     for (int i = 0; i < 10; ++i)
2451       ;
2452   }
2453 #pragma omp critical
2454   {
2455 #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?}}
2456     for (int i = 0; i < 10; ++i)
2457       ;
2458   }
2459 #pragma omp critical
2460   {
2461 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2462     for (int i = 0; i < 10; ++i)
2463       ;
2464   }
2465 #pragma omp critical
2466   {
2467 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2468     for (int i = 0; i < 10; ++i)
2469       ;
2470   }
2471 #pragma omp critical
2472   {
2473 #pragma omp target teams // OK
2474     a++;
2475   }
2476 #pragma omp critical
2477   {
2478 #pragma omp target teams distribute // OK
2479     for (int i = 0; i < 10; ++i)
2480       ;
2481   }
2482 #pragma omp critical
2483   {
2484 #pragma omp target teams distribute parallel for // OK
2485     for (int i = 0; i < 10; ++i)
2486       ;
2487   }
2488 #pragma omp critical
2489   {
2490 #pragma omp target teams distribute parallel for simd // OK
2491     for (int i = 0; i < 10; ++i)
2492       ;
2493   }
2494 #pragma omp critical
2495   {
2496 #pragma omp target teams distribute simd // OK
2497     for (int i = 0; i < 10; ++i)
2498       ;
2499   }
2500 
2501 // PARALLEL FOR DIRECTIVE
2502 #pragma omp parallel for
2503   for (int i = 0; i < 10; ++i) {
2504 #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?}}
2505     for (int i = 0; i < 10; ++i)
2506       ;
2507   }
2508 #pragma omp parallel for
2509   for (int i = 0; i < 10; ++i) {
2510 #pragma omp simd
2511     for (int i = 0; i < 10; ++i)
2512       ;
2513   }
2514 #pragma omp parallel for
2515   for (int i = 0; i < 10; ++i) {
2516 #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?}}
2517     for (int i = 0; i < 10; ++i)
2518       ;
2519   }
2520 #pragma omp parallel for
2521   for (int i = 0; i < 10; ++i) {
2522 #pragma omp parallel
2523     for (int i = 0; i < 10; ++i)
2524       ;
2525   }
2526 #pragma omp parallel for
2527   for (int i = 0; i < 10; ++i) {
2528 #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?}}
2529     {
2530       bar();
2531     }
2532   }
2533 #pragma omp parallel for
2534   for (int i = 0; i < 10; ++i) {
2535 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2536     {
2537       bar();
2538     }
2539   }
2540 #pragma omp parallel for
2541   for (int i = 0; i < 10; ++i) {
2542 #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?}}
2543     {
2544       bar();
2545     }
2546   }
2547 
2548 #pragma omp parallel for
2549   for (int i = 0; i < 10; ++i) {
2550 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2551     {
2552       bar();
2553     }
2554   }
2555 
2556 #pragma omp parallel for
2557   for (int i = 0; i < 10; ++i) {
2558 #pragma omp critical
2559     {
2560       bar();
2561     }
2562   }
2563 
2564 #pragma omp parallel for
2565   for (int i = 0; i < 10; ++i) {
2566 #pragma omp parallel
2567     {
2568 #pragma omp single // OK
2569       {
2570         bar();
2571       }
2572 #pragma omp for // OK
2573       for (int i = 0; i < 10; ++i)
2574         ;
2575 #pragma omp for simd // OK
2576       for (int i = 0; i < 10; ++i)
2577         ;
2578 #pragma omp sections // OK
2579       {
2580         bar();
2581       }
2582     }
2583   }
2584 #pragma omp parallel for
2585   for (int i = 0; i < 10; ++i) {
2586 #pragma omp parallel for
2587     for (int i = 0; i < 10; ++i)
2588       ;
2589   }
2590 #pragma omp parallel for
2591   for (int i = 0; i < 10; ++i) {
2592 #pragma omp parallel for simd
2593     for (int i = 0; i < 10; ++i)
2594       ;
2595   }
2596 #pragma omp parallel for
2597   for (int i = 0; i < 10; ++i) {
2598 #pragma omp parallel sections
2599     {
2600       bar();
2601     }
2602   }
2603 #pragma omp parallel for
2604   for (int i = 0; i < 10; ++i) {
2605 #pragma omp task
2606     {
2607       bar();
2608     }
2609   }
2610 #pragma omp parallel for
2611   for (int i = 0; i < 10; ++i) {
2612 #pragma omp taskyield
2613     bar();
2614   }
2615 #pragma omp parallel for
2616   for (int i = 0; i < 10; ++i) {
2617 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2618     bar();
2619   }
2620 #pragma omp parallel for
2621   for (int i = 0; i < 10; ++i) {
2622 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'parallel for' region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
2623     bar();
2624   }
2625 #pragma omp parallel for
2626   for (int i = 0; i < 10; ++i) {
2627 #pragma omp taskwait
2628     bar();
2629   }
2630 #pragma omp parallel for
2631   for (int i = 0; i < 10; ++i) {
2632 #pragma omp flush
2633     bar();
2634   }
2635 #pragma omp parallel for
2636   for (int i = 0; i < 10; ++i) {
2637 #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?}}
2638     bar();
2639   }
2640 #pragma omp parallel for ordered
2641   for (int i = 0; i < 10; ++i) {
2642 #pragma omp ordered // OK
2643     bar();
2644   }
2645 #pragma omp parallel for
2646   for (int i = 0; i < 10; ++i) {
2647 #pragma omp atomic
2648     ++a;
2649   }
2650 #pragma omp parallel for
2651   for (int i = 0; i < 10; ++i) {
2652 #pragma omp target
2653     ++a;
2654   }
2655 #pragma omp parallel for
2656   for (int i = 0; i < 10; ++i) {
2657 #pragma omp target parallel
2658     ++a;
2659   }
2660 #pragma omp parallel for
2661   for (int i = 0; i < 10; ++i) {
2662 #pragma omp target parallel for
2663     for (int i = 0; i < 10; ++i)
2664       ;
2665   }
2666 #pragma omp parallel for
2667   for (int i = 0; i < 10; ++i) {
2668 #pragma omp target enter data map(to: a)
2669     ++a;
2670   }
2671 #pragma omp parallel for
2672   for (int i = 0; i < 10; ++i) {
2673 #pragma omp target exit data map(from: a)
2674     ++a;
2675   }
2676 #pragma omp parallel for
2677   for (int i = 0; i < 10; ++i) {
2678 #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?}}
2679     ++a;
2680   }
2681 #pragma omp parallel for
2682   for (int i = 0; i < 10; ++i) {
2683 #pragma omp taskloop
2684   for (int i = 0; i < 10; ++i)
2685     ++a;
2686   }
2687 #pragma omp parallel for
2688   for (int i = 0; i < 10; ++i) {
2689 #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?}}
2690     for (int j = 0; j < 10; ++j)
2691       ;
2692   }
2693 #pragma omp parallel for
2694   for (int i = 0; i < 10; ++i) {
2695 #pragma omp target update to(a)
2696   }
2697 #pragma omp parallel for
2698   for (int i = 0; i < 10; ++i) {
2699 #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?}}
2700     for (int j = 0; j < 10; ++j)
2701       ;
2702   }
2703 #pragma omp parallel for
2704   for (int i = 0; i < 10; ++i) {
2705 #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?}}
2706     for (int j = 0; j < 10; ++j)
2707       ;
2708   }
2709 #pragma omp parallel for
2710   for (int i = 0; i < 10; ++i) {
2711 #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?}}
2712     for (int j = 0; j < 10; ++j)
2713       ;
2714   }
2715 #pragma omp parallel for
2716   for (int i = 0; i < 10; ++i) {
2717 #pragma omp target simd // OK
2718     for (int j = 0; j < 10; ++j)
2719       ;
2720   }
2721 #pragma omp parallel for
2722   for (int i = 0; i < 10; ++i) {
2723 #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?}}
2724     for (int j = 0; j < 10; ++j)
2725       ;
2726   }
2727 #pragma omp parallel for
2728   for (int i = 0; i < 10; ++i) {
2729 #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?}}
2730     for (int j = 0; j < 10; ++j)
2731       ;
2732   }
2733 #pragma omp parallel for
2734   for (int i = 0; i < 10; ++i) {
2735 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2736     for (int j = 0; j < 10; ++j)
2737       ;
2738   }
2739 #pragma omp parallel for
2740   for (int i = 0; i < 10; ++i) {
2741 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2742     for (int j = 0; j < 10; ++j)
2743       ;
2744   }
2745 #pragma omp parallel for
2746   for (int i = 0; i < 10; ++i) {
2747 #pragma omp target teams // OK
2748     a++;
2749   }
2750 #pragma omp parallel for
2751   for (int i = 0; i < 10; ++i) {
2752 #pragma omp target teams distribute // OK
2753     for (int j = 0; j < 10; ++j)
2754       ;
2755   }
2756 #pragma omp parallel for
2757   for (int i = 0; i < 10; ++i) {
2758 #pragma omp target teams distribute parallel for // OK
2759     for (int j = 0; j < 10; ++j)
2760       ;
2761   }
2762 #pragma omp parallel for
2763   for (int i = 0; i < 10; ++i) {
2764 #pragma omp target teams distribute parallel for simd // OK
2765     for (int j = 0; j < 10; ++j)
2766       ;
2767   }
2768 #pragma omp parallel for
2769   for (int i = 0; i < 10; ++i) {
2770 #pragma omp target teams distribute simd // OK
2771     for (int j = 0; j < 10; ++j)
2772       ;
2773   }
2774 
2775 // PARALLEL FOR SIMD DIRECTIVE
2776 #pragma omp parallel for simd
2777   for (int i = 0; i < 10; ++i) {
2778 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2779     for (int i = 0; i < 10; ++i)
2780       ;
2781   }
2782 #pragma omp parallel for simd
2783   for (int i = 0; i < 10; ++i) {
2784 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2785     for (int i = 0; i < 10; ++i)
2786       ;
2787   }
2788 #pragma omp parallel for simd
2789   for (int i = 0; i < 10; ++i) {
2790 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2791     for (int i = 0; i < 10; ++i)
2792       ;
2793   }
2794 #pragma omp parallel for simd
2795   for (int i = 0; i < 10; ++i) {
2796 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2797     for (int i = 0; i < 10; ++i)
2798       ;
2799   }
2800 #pragma omp parallel for simd
2801   for (int i = 0; i < 10; ++i) {
2802 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2803     {
2804       bar();
2805     }
2806   }
2807 #pragma omp parallel for simd
2808   for (int i = 0; i < 10; ++i) {
2809 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2810     {
2811       bar();
2812     }
2813   }
2814 #pragma omp parallel for simd
2815   for (int i = 0; i < 10; ++i) {
2816 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2817     {
2818       bar();
2819     }
2820   }
2821 
2822 #pragma omp parallel for simd
2823   for (int i = 0; i < 10; ++i) {
2824 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2825     {
2826       bar();
2827     }
2828   }
2829 
2830 #pragma omp parallel for simd
2831   for (int i = 0; i < 10; ++i) {
2832 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2833     {
2834       bar();
2835     }
2836   }
2837 
2838 #pragma omp parallel for simd
2839   for (int i = 0; i < 10; ++i) {
2840 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2841     {
2842 #pragma omp single
2843       {
2844         bar();
2845       }
2846 #pragma omp for
2847       for (int i = 0; i < 10; ++i)
2848         ;
2849 #pragma omp for simd
2850       for (int i = 0; i < 10; ++i)
2851         ;
2852 #pragma omp sections
2853       {
2854         bar();
2855       }
2856     }
2857   }
2858 #pragma omp parallel for simd
2859   for (int i = 0; i < 10; ++i) {
2860 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2861     for (int i = 0; i < 10; ++i)
2862       ;
2863   }
2864 #pragma omp parallel for simd
2865   for (int i = 0; i < 10; ++i) {
2866 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2867     for (int i = 0; i < 10; ++i)
2868       ;
2869   }
2870 #pragma omp parallel for simd
2871   for (int i = 0; i < 10; ++i) {
2872 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2873     {
2874       bar();
2875     }
2876   }
2877 #pragma omp parallel for simd
2878   for (int i = 0; i < 10; ++i) {
2879 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2880     {
2881       bar();
2882     }
2883   }
2884 #pragma omp parallel for simd
2885   for (int i = 0; i < 10; ++i) {
2886 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2887     bar();
2888   }
2889 #pragma omp parallel for simd
2890   for (int i = 0; i < 10; ++i) {
2891 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2892     bar();
2893   }
2894 #pragma omp parallel for simd
2895   for (int i = 0; i < 10; ++i) {
2896 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
2897     bar();
2898   }
2899 #pragma omp parallel for simd
2900   for (int i = 0; i < 10; ++i) {
2901 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2902     bar();
2903   }
2904 #pragma omp parallel for simd
2905   for (int i = 0; i < 10; ++i) {
2906 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2907     bar();
2908   }
2909 #pragma omp parallel for simd
2910   for (int i = 0; i < 10; ++i) {
2911 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2912     bar();
2913   }
2914 #pragma omp parallel for simd
2915   for (int i = 0; i < 10; ++i) {
2916 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2917     bar();
2918   }
2919 #pragma omp parallel for simd
2920   for (int i = 0; i < 10; ++i) {
2921 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
2922     ++a;
2923   }
2924 #pragma omp parallel for simd
2925   for (int i = 0; i < 10; ++i) {
2926 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2927     ++a;
2928   }
2929 #pragma omp parallel for simd
2930   for (int i = 0; i < 10; ++i) {
2931 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2932     ++a;
2933   }
2934 #pragma omp parallel for simd
2935   for (int i = 0; i < 10; ++i) {
2936 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2937     for (int i = 0; i < 10; ++i)
2938       ;
2939   }
2940 #pragma omp parallel for simd
2941   for (int i = 0; i < 10; ++i) {
2942 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2943     ++a;
2944   }
2945 #pragma omp parallel for simd
2946   for (int i = 0; i < 10; ++i) {
2947 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2948     ++a;
2949   }
2950 #pragma omp parallel for simd
2951   for (int i = 0; i < 10; ++i) {
2952 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2953     ++a;
2954   }
2955 #pragma omp parallel for simd
2956   for (int i = 0; i < 10; ++i) {
2957 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2958   for (int i = 0; i < 10; ++i)
2959     ++a;
2960   }
2961 #pragma omp parallel for simd
2962   for (int i = 0; i < 10; ++i) {
2963 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2964     for (int j = 0; j < 10; ++j)
2965       ;
2966   }
2967 #pragma omp parallel for simd
2968   for (int i = 0; i < 10; ++i) {
2969 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2970     bar();
2971   }
2972 #pragma omp parallel for simd
2973   for (int i = 0; i < 10; ++i) {
2974 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2975     for (int j = 0; j < 10; ++j)
2976       ;
2977   }
2978 #pragma omp parallel for simd
2979   for (int i = 0; i < 10; ++i) {
2980 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2981     for (int j = 0; j < 10; ++j)
2982       ;
2983   }
2984 #pragma omp parallel for simd
2985   for (int i = 0; i < 10; ++i) {
2986 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2987     for (int j = 0; j < 10; ++j)
2988       ;
2989   }
2990 #pragma omp parallel for simd
2991   for (int i = 0; i < 10; ++i) {
2992 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2993     for (int j = 0; j < 10; ++j)
2994       ;
2995   }
2996 #pragma omp parallel for simd
2997   for (int i = 0; i < 10; ++i) {
2998 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2999     for (int j = 0; j < 10; ++j)
3000       ;
3001   }
3002 #pragma omp parallel for simd
3003   for (int i = 0; i < 10; ++i) {
3004 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3005     for (int j = 0; j < 10; ++j)
3006       ;
3007   }
3008 #pragma omp parallel for simd
3009   for (int i = 0; i < 10; ++i) {
3010 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3011     for (int j = 0; j < 10; ++j)
3012       ;
3013   }
3014 #pragma omp parallel for simd
3015   for (int i = 0; i < 10; ++i) {
3016 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3017     for (int j = 0; j < 10; ++j)
3018       ;
3019   }
3020 #pragma omp parallel for simd
3021   for (int i = 0; i < 10; ++i) {
3022 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3023     a++;
3024   }
3025 #pragma omp parallel for simd
3026   for (int i = 0; i < 10; ++i) {
3027 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3028     for (int j = 0; j < 10; ++j)
3029       ;
3030   }
3031 #pragma omp parallel for simd
3032   for (int i = 0; i < 10; ++i) {
3033 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3034     for (int j = 0; j < 10; ++j)
3035       ;
3036   }
3037 #pragma omp parallel for simd
3038   for (int i = 0; i < 10; ++i) {
3039 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3040     for (int j = 0; j < 10; ++j)
3041       ;
3042   }
3043 #pragma omp parallel for simd
3044   for (int i = 0; i < 10; ++i) {
3045 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3046     for (int j = 0; j < 10; ++j)
3047       ;
3048   }
3049 
3050 // PARALLEL MASTER DIRECTIVE
3051 #pragma omp parallel master
3052   {
3053 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
3054     for (int i = 0; i < 10; ++i)
3055       ;
3056   }
3057 #pragma omp parallel master
3058   {
3059 #pragma omp simd
3060     for (int i = 0; i < 10; ++i)
3061       ;
3062   }
3063 #pragma omp parallel master
3064   {
3065 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
3066     for (int i = 0; i < 10; ++i)
3067       ;
3068   }
3069 #pragma omp parallel master
3070   {
3071 #pragma omp parallel
3072     for (int i = 0; i < 10; ++i)
3073       ;
3074   }
3075 #pragma omp parallel master
3076   {
3077 #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
3078     {
3079       bar();
3080     }
3081   }
3082 #pragma omp parallel master
3083   {
3084 #pragma omp master // OK, though second 'master' is redundant
3085     {
3086       bar();
3087     }
3088   }
3089 #pragma omp parallel master
3090   {
3091 #pragma omp critical
3092     {
3093       bar();
3094     }
3095   }
3096 #pragma omp parallel master
3097   {
3098 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
3099     {
3100       bar();
3101     }
3102   }
3103 #pragma omp parallel master
3104   {
3105 #pragma omp parallel
3106     {
3107 #pragma omp parallel master // OK
3108       {
3109         bar();
3110       }
3111 #pragma omp for // OK
3112       for (int i = 0; i < 10; ++i)
3113         ;
3114 #pragma omp for simd // OK
3115       for (int i = 0; i < 10; ++i)
3116         ;
3117 #pragma omp sections // OK
3118       {
3119         bar();
3120       }
3121     }
3122   }
3123 #pragma omp parallel master
3124   {
3125 #pragma omp parallel master // OK
3126       {
3127         bar();
3128       }
3129 #pragma omp parallel
3130     {
3131 #pragma omp for // OK
3132       for (int i = 0; i < 10; ++i)
3133         ;
3134 #pragma omp for simd // OK
3135       for (int i = 0; i < 10; ++i)
3136         ;
3137 #pragma omp sections // OK
3138       {
3139         bar();
3140       }
3141     }
3142   }
3143 #pragma omp parallel master
3144   {
3145 #pragma omp parallel for
3146     for (int i = 0; i < 10; ++i)
3147       ;
3148   }
3149 #pragma omp parallel master
3150   {
3151 #pragma omp parallel for simd
3152     for (int i = 0; i < 10; ++i)
3153       ;
3154   }
3155 #pragma omp parallel master
3156   {
3157 #pragma omp parallel sections
3158     {
3159       bar();
3160     }
3161   }
3162 #pragma omp parallel master
3163   {
3164 #pragma omp task
3165     {
3166       bar();
3167     }
3168   }
3169 #pragma omp parallel master
3170   {
3171 #pragma omp taskyield
3172     bar();
3173   }
3174 #pragma omp parallel master
3175   {
3176 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3177     bar();
3178   }
3179 #pragma omp parallel master
3180   {
3181 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3182     bar();
3183   }
3184 #pragma omp parallel master
3185   {
3186 #pragma omp taskwait
3187     bar();
3188   }
3189 #pragma omp parallel master
3190   {
3191 #pragma omp flush
3192     bar();
3193   }
3194 #pragma omp parallel master
3195   {
3196 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3197     bar();
3198   }
3199 #pragma omp parallel master
3200   {
3201 #pragma omp atomic
3202     ++a;
3203   }
3204 #pragma omp parallel master
3205   {
3206 #pragma omp target
3207     ++a;
3208   }
3209 #pragma omp parallel master
3210   {
3211 #pragma omp target parallel
3212     ++a;
3213   }
3214 #pragma omp parallel master
3215   {
3216 #pragma omp target parallel for
3217     for (int i = 0; i < 10; ++i)
3218       ;
3219   }
3220 #pragma omp parallel master
3221   {
3222 #pragma omp target enter data map(to: a)
3223     ++a;
3224   }
3225 #pragma omp parallel master
3226   {
3227 #pragma omp target exit data map(from: a)
3228     ++a;
3229   }
3230 #pragma omp parallel master
3231   {
3232 #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3233     ++a;
3234   }
3235 #pragma omp parallel master
3236   {
3237 #pragma omp taskloop
3238   for (int i = 0; i < 10; ++i)
3239     ++a;
3240   }
3241 #pragma omp parallel master
3242   {
3243 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3244     for (int i = 0; i < 10; ++i)
3245       ;
3246   }
3247 #pragma omp parallel master
3248   {
3249 #pragma omp target update to(a)
3250     bar();
3251   }
3252 #pragma omp parallel master
3253   {
3254 #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3255     for (int i = 0; i < 10; ++i)
3256       ;
3257   }
3258 #pragma omp parallel master
3259   {
3260 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3261     for (int i = 0; i < 10; ++i)
3262       ;
3263   }
3264 #pragma omp parallel master
3265   {
3266 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3267     for (int i = 0; i < 10; ++i)
3268       ;
3269   }
3270 #pragma omp parallel master
3271   {
3272 #pragma omp target simd // OK
3273     for (int i = 0; i < 10; ++i)
3274       ;
3275   }
3276 #pragma omp parallel master
3277   {
3278 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
3279     for (int i = 0; i < 10; ++i)
3280       ;
3281   }
3282 #pragma omp parallel master
3283   {
3284 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
3285     for (int i = 0; i < 10; ++i)
3286       ;
3287   }
3288 #pragma omp parallel master
3289   {
3290 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3291     for (int i = 0; i < 10; ++i)
3292       ;
3293   }
3294 #pragma omp parallel master
3295   {
3296 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel master' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3297     for (int i = 0; i < 10; ++i)
3298       ;
3299   }
3300 #pragma omp parallel master
3301   {
3302 #pragma omp target teams // OK
3303     a++;
3304   }
3305 #pragma omp parallel master
3306   {
3307 #pragma omp target teams distribute // OK
3308     for (int i = 0; i < 10; ++i)
3309       ;
3310   }
3311 #pragma omp parallel master
3312   {
3313 #pragma omp target teams distribute parallel for // OK
3314     for (int i = 0; i < 10; ++i)
3315       ;
3316   }
3317 #pragma omp parallel master
3318   {
3319 #pragma omp target teams distribute parallel for simd // OK
3320     for (int i = 0; i < 10; ++i)
3321       ;
3322   }
3323 #pragma omp parallel master
3324   {
3325 #pragma omp target teams distribute simd // OK
3326     for (int i = 0; i < 10; ++i)
3327       ;
3328   }
3329 
3330 // PARALLEL SECTIONS DIRECTIVE
3331 #pragma omp parallel sections
3332   {
3333 #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?}}
3334     for (int i = 0; i < 10; ++i)
3335       ;
3336   }
3337 #pragma omp parallel sections
3338   {
3339 #pragma omp simd
3340     for (int i = 0; i < 10; ++i)
3341       ;
3342   }
3343 #pragma omp parallel sections
3344   {
3345 #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?}}
3346     for (int i = 0; i < 10; ++i)
3347       ;
3348   }
3349 #pragma omp parallel sections
3350   {
3351 #pragma omp parallel
3352     for (int i = 0; i < 10; ++i)
3353       ;
3354   }
3355 #pragma omp parallel sections
3356   {
3357 #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?}}
3358     {
3359       bar();
3360     }
3361   }
3362 #pragma omp parallel sections
3363   {
3364 #pragma omp section
3365     {
3366       bar();
3367     }
3368   }
3369 #pragma omp parallel sections
3370   {
3371 #pragma omp section
3372     {
3373 #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?}}
3374       bar();
3375     }
3376   }
3377 #pragma omp parallel sections
3378   {
3379 #pragma omp section
3380     {
3381 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
3382       bar();
3383     }
3384   }
3385 #pragma omp parallel sections
3386   {
3387 #pragma omp section
3388     {
3389 #pragma omp critical
3390       bar();
3391     }
3392   }
3393 #pragma omp parallel sections
3394   {
3395 #pragma omp parallel
3396     {
3397 #pragma omp single // OK
3398       {
3399         bar();
3400       }
3401 #pragma omp for // OK
3402       for (int i = 0; i < 10; ++i)
3403         ;
3404 #pragma omp for simd // OK
3405       for (int i = 0; i < 10; ++i)
3406         ;
3407 #pragma omp sections // OK
3408       {
3409         bar();
3410       }
3411     }
3412   }
3413 #pragma omp parallel sections
3414   {
3415 #pragma omp parallel for
3416     for (int i = 0; i < 10; ++i)
3417       ;
3418   }
3419 #pragma omp parallel sections
3420   {
3421 #pragma omp parallel for simd
3422     for (int i = 0; i < 10; ++i)
3423       ;
3424   }
3425 #pragma omp parallel sections
3426   {
3427 #pragma omp parallel sections
3428     {
3429       bar();
3430     }
3431   }
3432 #pragma omp parallel sections
3433   {
3434 #pragma omp task
3435     {
3436       bar();
3437     }
3438   }
3439 #pragma omp parallel sections
3440   {
3441 #pragma omp taskyield
3442   }
3443 #pragma omp parallel sections
3444   {
3445 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3446   }
3447 #pragma omp parallel sections
3448   {
3449 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3450   }
3451 #pragma omp parallel sections
3452   {
3453 #pragma omp taskwait
3454   }
3455 #pragma omp parallel sections
3456   {
3457 #pragma omp flush
3458   }
3459 #pragma omp parallel sections
3460   {
3461 #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?}}
3462     bar();
3463   }
3464 #pragma omp parallel sections
3465   {
3466 #pragma omp atomic
3467     ++a;
3468   }
3469 #pragma omp parallel sections
3470   {
3471 #pragma omp target
3472     ++a;
3473   }
3474 #pragma omp parallel sections
3475   {
3476 #pragma omp target parallel
3477     ++a;
3478   }
3479 #pragma omp parallel sections
3480   {
3481 #pragma omp target parallel for
3482     for (int i = 0; i < 10; ++i)
3483       ;
3484   }
3485 #pragma omp parallel sections
3486   {
3487 #pragma omp target enter data map(to: a)
3488   }
3489 #pragma omp parallel sections
3490   {
3491 #pragma omp target exit data map(from: a)
3492   }
3493 #pragma omp parallel sections
3494   {
3495 #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?}}
3496     ++a;
3497   }
3498 #pragma omp parallel sections
3499   {
3500 #pragma omp taskloop
3501   for (int i = 0; i < 10; ++i)
3502     ++a;
3503   }
3504 #pragma omp parallel sections
3505   {
3506 #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?}}
3507     for (int i = 0; i < 10; ++i)
3508       ;
3509   }
3510 #pragma omp parallel sections
3511   {
3512 #pragma omp target update to(a)
3513   }
3514 #pragma omp parallel sections
3515   {
3516 #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?}}
3517     for (int i = 0; i < 10; ++i)
3518       ;
3519   }
3520 #pragma omp parallel sections
3521   {
3522 #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?}}
3523     for (int i = 0; i < 10; ++i)
3524       ;
3525   }
3526 #pragma omp parallel sections
3527   {
3528 #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?}}
3529     for (int i = 0; i < 10; ++i)
3530       ;
3531   }
3532 #pragma omp parallel sections
3533   {
3534 #pragma omp target simd // OK
3535     for (int i = 0; i < 10; ++i)
3536       ;
3537   }
3538 #pragma omp parallel sections
3539   {
3540 #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?}}
3541     for (int i = 0; i < 10; ++i)
3542       ;
3543   }
3544 #pragma omp parallel sections
3545   {
3546 #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?}}
3547     for (int i = 0; i < 10; ++i)
3548       ;
3549   }
3550 #pragma omp parallel sections
3551   {
3552 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3553     for (int i = 0; i < 10; ++i)
3554       ;
3555   }
3556 #pragma omp parallel sections
3557   {
3558 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3559     for (int i = 0; i < 10; ++i)
3560       ;
3561   }
3562 #pragma omp parallel sections
3563   {
3564 #pragma omp target teams // OK
3565     a++;
3566   }
3567 #pragma omp parallel sections
3568   {
3569 #pragma omp target teams distribute // OK
3570     for (int i = 0; i < 10; ++i)
3571       ;
3572   }
3573 #pragma omp parallel sections
3574   {
3575 #pragma omp target teams distribute parallel for // OK
3576     for (int i = 0; i < 10; ++i)
3577       ;
3578   }
3579 #pragma omp parallel sections
3580   {
3581 #pragma omp target teams distribute parallel for simd // OK
3582     for (int i = 0; i < 10; ++i)
3583       ;
3584   }
3585 #pragma omp parallel sections
3586   {
3587 #pragma omp target teams distribute simd // OK
3588     for (int i = 0; i < 10; ++i)
3589       ;
3590   }
3591 
3592 // TASK DIRECTIVE
3593 #pragma omp task
3594 #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?}}
3595   for (int i = 0; i < 10; ++i)
3596     ;
3597 #pragma omp task
3598 #pragma omp simd
3599   for (int i = 0; i < 10; ++i)
3600     ;
3601 #pragma omp task
3602 #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?}}
3603   for (int i = 0; i < 10; ++i)
3604     ;
3605 #pragma omp task
3606 #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?}}
3607   {
3608     bar();
3609   }
3610 #pragma omp task
3611 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
3612   {
3613     bar();
3614   }
3615 #pragma omp task
3616 #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?}}
3617   bar();
3618 #pragma omp task
3619 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
3620   bar();
3621 #pragma omp task
3622 #pragma omp critical
3623   bar();
3624 
3625 #pragma omp task
3626 #pragma omp parallel for
3627   for (int i = 0; i < 10; ++i)
3628     ;
3629 #pragma omp task
3630 #pragma omp parallel for simd
3631   for (int i = 0; i < 10; ++i)
3632     ;
3633 #pragma omp task
3634 #pragma omp parallel sections
3635   {
3636     bar();
3637   }
3638 #pragma omp task
3639 #pragma omp task
3640   {
3641     bar();
3642   }
3643 #pragma omp task
3644   {
3645 #pragma omp taskyield
3646     bar();
3647   }
3648 #pragma omp task
3649   {
3650 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
3651     bar();
3652   }
3653 #pragma omp task
3654   {
3655 #pragma omp scan // expected-error {{region cannot be closely nested inside 'task' region}}
3656     bar();
3657   }
3658 #pragma omp task
3659   {
3660 #pragma omp taskwait
3661     bar();
3662   }
3663 #pragma omp task
3664   {
3665 #pragma omp flush
3666     bar();
3667   }
3668 #pragma omp task
3669   {
3670 #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?}}
3671     bar();
3672   }
3673 #pragma omp task
3674   {
3675 #pragma omp atomic
3676     ++a;
3677   }
3678 #pragma omp task
3679   {
3680 #pragma omp target
3681     ++a;
3682   }
3683 #pragma omp task
3684   {
3685 #pragma omp target parallel
3686     ++a;
3687   }
3688 #pragma omp task
3689 #pragma omp target parallel for
3690   for (int i = 0; i < 10; ++i)
3691     ;
3692 #pragma omp task
3693   {
3694 #pragma omp target enter data map(to: a)
3695     ++a;
3696   }
3697 #pragma omp task
3698   {
3699 #pragma omp target exit data map(from: a)
3700     ++a;
3701   }
3702 #pragma omp task
3703   {
3704 #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?}}
3705     ++a;
3706   }
3707 #pragma omp task
3708   {
3709 #pragma omp taskloop
3710   for (int i = 0; i < 10; ++i)
3711     ++a;
3712   }
3713 #pragma omp task
3714   {
3715 #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?}}
3716     for (int i = 0; i < 10; ++i)
3717       ;
3718   }
3719 #pragma omp task
3720   {
3721 #pragma omp target update to(a)
3722     bar();
3723   }
3724 #pragma omp task
3725   {
3726 #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?}}
3727     for (int i = 0; i < 10; ++i)
3728       ;
3729   }
3730 #pragma omp task
3731   {
3732 #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?}}
3733     for (int i = 0; i < 10; ++i)
3734       ;
3735   }
3736 #pragma omp task
3737   {
3738 #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?}}
3739     for (int i = 0; i < 10; ++i)
3740       ;
3741   }
3742 #pragma omp task
3743   {
3744 #pragma omp target simd // OK
3745     for (int i = 0; i < 10; ++i)
3746       ;
3747   }
3748 #pragma omp task
3749   {
3750 #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?}}
3751     for (int i = 0; i < 10; ++i)
3752       ;
3753   }
3754 #pragma omp task
3755   {
3756 #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?}}
3757     for (int i = 0; i < 10; ++i)
3758       ;
3759   }
3760 #pragma omp task
3761   {
3762 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3763     for (int i = 0; i < 10; ++i)
3764       ;
3765   }
3766 #pragma omp task
3767   {
3768 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3769     for (int i = 0; i < 10; ++i)
3770       ;
3771   }
3772 #pragma omp task
3773   {
3774 #pragma omp target teams // OK
3775     a++;
3776   }
3777 #pragma omp task
3778   {
3779 #pragma omp target teams distribute // OK
3780     for (int i = 0; i < 10; ++i)
3781       ;
3782   }
3783 #pragma omp task
3784   {
3785 #pragma omp target teams distribute parallel for // OK
3786     for (int i = 0; i < 10; ++i)
3787       ;
3788   }
3789 #pragma omp task
3790   {
3791 #pragma omp target teams distribute parallel for simd // OK
3792     for (int i = 0; i < 10; ++i)
3793       ;
3794   }
3795 #pragma omp task
3796   {
3797 #pragma omp target teams distribute simd // OK
3798     for (int i = 0; i < 10; ++i)
3799       ;
3800   }
3801 
3802 // ORDERED DIRECTIVE
3803 #pragma omp ordered
3804   {
3805 #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?}}
3806     for (int i = 0; i < 10; ++i)
3807       ;
3808   }
3809 #pragma omp ordered
3810   {
3811 #pragma omp simd
3812     for (int i = 0; i < 10; ++i)
3813       ;
3814   }
3815 #pragma omp ordered
3816   {
3817 #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?}}
3818     for (int i = 0; i < 10; ++i)
3819       ;
3820   }
3821 #pragma omp ordered
3822   {
3823 #pragma omp parallel
3824     for (int i = 0; i < 10; ++i)
3825       ;
3826   }
3827 #pragma omp ordered
3828   {
3829 #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?}}
3830     {
3831       bar();
3832     }
3833   }
3834 #pragma omp ordered
3835   {
3836 #pragma omp master // OK, though second 'ordered' is redundant
3837     {
3838       bar();
3839     }
3840   }
3841 #pragma omp ordered
3842   {
3843 #pragma omp critical
3844     {
3845       bar();
3846     }
3847   }
3848 #pragma omp ordered
3849   {
3850 #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?}}
3851     {
3852       bar();
3853     }
3854   }
3855 #pragma omp ordered
3856   {
3857 #pragma omp parallel for ordered
3858     for (int j = 0; j < 10; ++j) {
3859 #pragma omp ordered // OK
3860       {
3861         bar();
3862       }
3863     }
3864   }
3865 #pragma omp ordered
3866   {
3867 #pragma omp parallel for simd ordered
3868     for (int j = 0; j < 10; ++j) {
3869 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3870       {
3871         bar();
3872       }
3873     }
3874   }
3875 #pragma omp ordered
3876   {
3877 #pragma omp parallel for simd ordered
3878     for (int j = 0; j < 10; ++j) {
3879 #pragma omp ordered simd
3880       {
3881         bar();
3882       }
3883     }
3884   }
3885 #pragma omp ordered
3886   {
3887 #pragma omp parallel for
3888     for (int i = 0; i < 10; ++i)
3889       ;
3890   }
3891 #pragma omp ordered
3892   {
3893 #pragma omp parallel for simd
3894     for (int i = 0; i < 10; ++i)
3895       ;
3896   }
3897 #pragma omp ordered
3898   {
3899 #pragma omp parallel sections
3900     {
3901       bar();
3902     }
3903   }
3904 #pragma omp ordered
3905   {
3906 #pragma omp task
3907     {
3908       bar();
3909     }
3910   }
3911 #pragma omp ordered
3912   {
3913 #pragma omp taskyield
3914     bar();
3915   }
3916 #pragma omp ordered
3917   {
3918 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3919     bar();
3920   }
3921 #pragma omp ordered
3922   {
3923 #pragma omp scan // expected-error {{region cannot be closely nested inside 'ordered' region}}
3924     bar();
3925   }
3926 #pragma omp ordered
3927   {
3928 #pragma omp taskwait
3929     bar();
3930   }
3931 #pragma omp ordered
3932   {
3933 #pragma omp flush
3934     bar();
3935   }
3936 #pragma omp ordered
3937   {
3938 #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?}}
3939     bar();
3940   }
3941 #pragma omp ordered
3942   {
3943 #pragma omp atomic
3944     ++a;
3945   }
3946 #pragma omp ordered
3947   {
3948 #pragma omp target
3949     ++a;
3950   }
3951 #pragma omp ordered
3952   {
3953 #pragma omp target parallel
3954     ++a;
3955   }
3956 #pragma omp ordered
3957   {
3958 #pragma omp target parallel for ordered
3959     for (int j = 0; j < 10; ++j) {
3960 #pragma omp ordered // OK
3961       {
3962         bar();
3963       }
3964     }
3965   }
3966 #pragma omp ordered
3967   {
3968 #pragma omp target parallel for
3969     for (int i = 0; i < 10; ++i)
3970       ;
3971   }
3972 #pragma omp ordered
3973   {
3974 #pragma omp target enter data map(to: a)
3975     ++a;
3976   }
3977 #pragma omp ordered
3978   {
3979 #pragma omp target exit data map(from: a)
3980     ++a;
3981   }
3982 #pragma omp ordered
3983   {
3984 #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?}}
3985     ++a;
3986   }
3987 #pragma omp ordered
3988   {
3989 #pragma omp taskloop
3990   for (int i = 0; i < 10; ++i)
3991     ++a;
3992   }
3993 #pragma omp ordered
3994   {
3995 #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?}}
3996     for (int i = 0; i < 10; ++i)
3997       ;
3998   }
3999 #pragma omp ordered
4000   {
4001     bar();
4002 #pragma omp target update to(a)
4003     bar();
4004   }
4005 #pragma omp ordered
4006   {
4007 #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?}}
4008     for (int i = 0; i < 10; ++i)
4009       ;
4010   }
4011 #pragma omp ordered
4012   {
4013 #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?}}
4014     for (int i = 0; i < 10; ++i)
4015       ;
4016   }
4017 #pragma omp ordered
4018   {
4019 #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?}}
4020     for (int i = 0; i < 10; ++i)
4021       ;
4022   }
4023 #pragma omp ordered
4024   {
4025 #pragma omp target simd // OK
4026     for (int i = 0; i < 10; ++i)
4027       ;
4028   }
4029 #pragma omp ordered
4030   {
4031 #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?}}
4032     for (int i = 0; i < 10; ++i)
4033       ;
4034   }
4035 #pragma omp ordered
4036   {
4037 #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?}}
4038     for (int i = 0; i < 10; ++i)
4039       ;
4040   }
4041 #pragma omp ordered
4042   {
4043 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4044     for (int i = 0; i < 10; ++i)
4045       ;
4046   }
4047 #pragma omp ordered
4048   {
4049 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4050     for (int i = 0; i < 10; ++i)
4051       ;
4052   }
4053 #pragma omp ordered
4054   {
4055 #pragma omp target teams // OK
4056     a++;
4057   }
4058 #pragma omp ordered
4059   {
4060 #pragma omp target teams distribute // OK
4061     for (int i = 0; i < 10; ++i)
4062       ;
4063   }
4064 #pragma omp ordered
4065   {
4066 #pragma omp target teams distribute parallel for // OK
4067     for (int i = 0; i < 10; ++i)
4068       ;
4069   }
4070 #pragma omp ordered
4071   {
4072 #pragma omp target teams distribute parallel for simd // OK
4073     for (int i = 0; i < 10; ++i)
4074       ;
4075   }
4076 #pragma omp ordered
4077   {
4078 #pragma omp target teams distribute simd // OK
4079     for (int i = 0; i < 10; ++i)
4080       ;
4081   }
4082 
4083 // ATOMIC DIRECTIVE
4084 #pragma omp atomic
4085   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4086   // expected-note@+1 {{expected an expression statement}}
4087   {
4088 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4089     for (int i = 0; i < 10; ++i)
4090       ;
4091   }
4092 #pragma omp atomic
4093   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4094   // expected-note@+1 {{expected an expression statement}}
4095   {
4096 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4097     for (int i = 0; i < 10; ++i)
4098       ;
4099   }
4100 #pragma omp atomic
4101   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4102   // expected-note@+1 {{expected an expression statement}}
4103   {
4104 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4105     for (int i = 0; i < 10; ++i)
4106       ;
4107   }
4108 #pragma omp atomic
4109   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4110   // expected-note@+1 {{expected an expression statement}}
4111   {
4112 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4113     for (int i = 0; i < 10; ++i)
4114       ;
4115   }
4116 #pragma omp atomic
4117   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4118   // expected-note@+1 {{expected an expression statement}}
4119   {
4120 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4121     {
4122       bar();
4123     }
4124   }
4125 #pragma omp atomic
4126   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4127   // expected-note@+1 {{expected an expression statement}}
4128   {
4129 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4130     {
4131       bar();
4132     }
4133   }
4134 #pragma omp atomic
4135   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4136   // expected-note@+1 {{expected an expression statement}}
4137   {
4138 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4139     {
4140       bar();
4141     }
4142   }
4143 #pragma omp atomic
4144   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4145   // expected-note@+1 {{expected an expression statement}}
4146   {
4147 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4148     {
4149       bar();
4150     }
4151   }
4152 #pragma omp atomic
4153   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4154   // expected-note@+1 {{expected an expression statement}}
4155   {
4156 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4157     {
4158       bar();
4159     }
4160   }
4161 #pragma omp atomic
4162   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4163   // expected-note@+1 {{expected an expression statement}}
4164   {
4165 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4166     {
4167       bar();
4168     }
4169   }
4170 #pragma omp atomic
4171   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4172   // expected-note@+1 {{expected an expression statement}}
4173   {
4174 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4175     for (int i = 0; i < 10; ++i)
4176       ;
4177   }
4178 #pragma omp atomic
4179   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4180   // expected-note@+1 {{expected an expression statement}}
4181   {
4182 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4183     for (int i = 0; i < 10; ++i)
4184       ;
4185   }
4186 #pragma omp atomic
4187   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4188   // expected-note@+1 {{expected an expression statement}}
4189   {
4190 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4191     {
4192       bar();
4193     }
4194   }
4195 #pragma omp atomic
4196   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4197   // expected-note@+1 {{expected an expression statement}}
4198   {
4199 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4200     {
4201       bar();
4202     }
4203   }
4204 #pragma omp atomic
4205   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4206   // expected-note@+1 {{expected an expression statement}}
4207   {
4208 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4209     bar();
4210   }
4211 #pragma omp atomic
4212   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4213   // expected-note@+1 {{expected an expression statement}}
4214   {
4215 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4216     bar();
4217   }
4218 #pragma omp atomic
4219   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4220   // expected-note@+1 {{expected an expression statement}}
4221   {
4222 #pragma omp scan // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4223     bar();
4224   }
4225 #pragma omp atomic
4226   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4227   // expected-note@+1 {{expected an expression statement}}
4228   {
4229 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4230     bar();
4231   }
4232 #pragma omp atomic
4233   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4234   // expected-note@+1 {{expected an expression statement}}
4235   {
4236 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4237     bar();
4238   }
4239 #pragma omp atomic
4240   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4241   // expected-note@+1 {{expected an expression statement}}
4242   {
4243 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4244     bar();
4245   }
4246 #pragma omp atomic
4247   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4248   // expected-note@+1 {{expected an expression statement}}
4249   {
4250 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4251     ++a;
4252   }
4253 #pragma omp atomic
4254   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4255   // expected-note@+1 {{expected an expression statement}}
4256   {
4257 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4258     ++a;
4259   }
4260 #pragma omp atomic
4261   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4262   // expected-note@+1 {{expected an expression statement}}
4263   {
4264 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4265     ++a;
4266   }
4267 #pragma omp atomic
4268   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4269   // expected-note@+1 {{expected an expression statement}}
4270   {
4271 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4272     for (int i = 0; i < 10; ++i)
4273       ;
4274   }
4275 #pragma omp atomic
4276   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4277   // expected-note@+1 {{expected an expression statement}}
4278   {
4279 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4280     ++a;
4281   }
4282 #pragma omp atomic
4283   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4284   // expected-note@+1 {{expected an expression statement}}
4285   {
4286 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4287     ++a;
4288   }
4289 #pragma omp atomic
4290   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4291   // expected-note@+1 {{expected an expression statement}}
4292   {
4293 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4294     ++a;
4295   }
4296 #pragma omp atomic
4297   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4298   // expected-note@+1 {{expected an expression statement}}
4299   {
4300 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4301   for (int i = 0; i < 10; ++i)
4302     ++a;
4303   }
4304 #pragma omp atomic
4305   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4306   // expected-note@+1 {{expected an expression statement}}
4307   {
4308 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4309     for (int i = 0; i < 10; ++i)
4310       ;
4311   }
4312 #pragma omp atomic
4313   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4314   // expected-note@+1 {{expected an expression statement}}
4315   {
4316 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4317     bar();
4318   }
4319 #pragma omp atomic
4320   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4321   // expected-note@+1 {{expected an expression statement}}
4322   {
4323 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4324     for (int i = 0; i < 10; ++i)
4325       ;
4326   }
4327 #pragma omp atomic
4328   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4329   // expected-note@+1 {{expected an expression statement}}
4330   {
4331 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4332     for (int i = 0; i < 10; ++i)
4333       ;
4334   }
4335 #pragma omp atomic
4336   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4337   // expected-note@+1 {{expected an expression statement}}
4338   {
4339 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4340     for (int i = 0; i < 10; ++i)
4341       ;
4342   }
4343 #pragma omp atomic
4344   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4345   // expected-note@+1 {{expected an expression statement}}
4346   {
4347 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4348     for (int i = 0; i < 10; ++i)
4349       ;
4350   }
4351 #pragma omp atomic
4352   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4353   // expected-note@+1 {{expected an expression statement}}
4354   {
4355 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4356     for (int i = 0; i < 10; ++i)
4357       ;
4358   }
4359 #pragma omp atomic
4360   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4361   // expected-note@+1 {{expected an expression statement}}
4362   {
4363 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4364     for (int i = 0; i < 10; ++i)
4365       ;
4366   }
4367 #pragma omp atomic
4368   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4369   // expected-note@+1 {{expected an expression statement}}
4370   {
4371 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4372     for (int i = 0; i < 10; ++i)
4373       ;
4374   }
4375 #pragma omp atomic
4376   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4377   // expected-note@+1 {{expected an expression statement}}
4378   {
4379 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4380     for (int i = 0; i < 10; ++i)
4381       ;
4382   }
4383 #pragma omp atomic
4384   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4385   // expected-note@+1 {{expected an expression statement}}
4386   {
4387 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4388     a++;
4389   }
4390 #pragma omp atomic
4391   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4392   // expected-note@+1 {{expected an expression statement}}
4393   {
4394 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4395     for (int i = 0; i < 10; ++i)
4396       ;
4397   }
4398 #pragma omp atomic
4399   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4400   // expected-note@+1 {{expected an expression statement}}
4401   {
4402 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4403     for (int i = 0; i < 10; ++i)
4404       ;
4405   }
4406 #pragma omp atomic
4407   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4408   // expected-note@+1 {{expected an expression statement}}
4409   {
4410 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4411     for (int i = 0; i < 10; ++i)
4412       ;
4413   }
4414 #pragma omp atomic
4415   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4416   // expected-note@+1 {{expected an expression statement}}
4417   {
4418 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4419     for (int i = 0; i < 10; ++i)
4420       ;
4421   }
4422 
4423 // TARGET DIRECTIVE
4424 #pragma omp target
4425 #pragma omp parallel
4426   bar();
4427 #pragma omp target
4428 #pragma omp for
4429   for (int i = 0; i < 10; ++i)
4430     ;
4431 #pragma omp target
4432 #pragma omp simd
4433   for (int i = 0; i < 10; ++i)
4434     ;
4435 #pragma omp target
4436 #pragma omp for simd
4437   for (int i = 0; i < 10; ++i)
4438     ;
4439 #pragma omp target
4440 #pragma omp sections
4441   {
4442     bar();
4443   }
4444 #pragma omp target
4445 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
4446   {
4447     bar();
4448   }
4449 #pragma omp target
4450 #pragma omp single
4451   bar();
4452 
4453 #pragma omp target
4454 #pragma omp master
4455   {
4456     bar();
4457   }
4458 #pragma omp target
4459 #pragma omp critical
4460   {
4461     bar();
4462   }
4463 #pragma omp target
4464 #pragma omp parallel for
4465   for (int i = 0; i < 10; ++i)
4466     ;
4467 #pragma omp target
4468 #pragma omp parallel for simd
4469   for (int i = 0; i < 10; ++i)
4470     ;
4471 #pragma omp target
4472 #pragma omp parallel sections
4473   {
4474     bar();
4475   }
4476 #pragma omp target
4477 #pragma omp task
4478   {
4479     bar();
4480   }
4481 #pragma omp target
4482   {
4483 #pragma omp taskyield
4484     bar();
4485   }
4486 #pragma omp target
4487   {
4488 #pragma omp barrier
4489     bar();
4490   }
4491 #pragma omp target
4492   {
4493 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
4494     bar();
4495   }
4496 #pragma omp target
4497   {
4498 #pragma omp taskwait
4499     bar();
4500   }
4501 #pragma omp target
4502   {
4503 #pragma omp flush
4504     bar();
4505   }
4506 #pragma omp target
4507   {
4508 #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?}}
4509     bar();
4510   }
4511 #pragma omp target
4512   {
4513 #pragma omp atomic
4514     ++a;
4515   }
4516 #pragma omp target
4517   {
4518 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4519     ++a;
4520   }
4521 #pragma omp target
4522   {
4523 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4524     ++a;
4525   }
4526 #pragma omp target
4527 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4528   for (int i = 0; i < 10; ++i)
4529     ;
4530 #pragma omp target
4531   {
4532 #pragma omp teams
4533     ++a;
4534   }
4535 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4536   {
4537 #pragma omp teams // expected-note {{directive outside teams construct here}}
4538     ++a;
4539 #pragma omp teams // expected-note {{nested teams construct here}}
4540     ++a;
4541   }
4542 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4543   {
4544     ++a;           // expected-note {{statement outside teams construct here}}
4545 #pragma omp teams  // expected-note {{nested teams construct here}}
4546     ++a;
4547   }
4548 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4549   {
4550     while (0)      // expected-note {{statement outside teams construct here}}
4551 #pragma omp teams  // expected-note {{nested teams construct here}}
4552     ++a;
4553   }
4554 #pragma omp target
4555   {
4556 #pragma omp taskloop
4557   for (int i = 0; i < 10; ++i)
4558     ++a;
4559   }
4560 #pragma omp target
4561   {
4562 #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?}}
4563     for (int i = 0; i < 10; ++i)
4564       ;
4565   }
4566 #pragma omp target
4567   {
4568 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4569   }
4570 #pragma omp target
4571   {
4572 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4573   }
4574 #pragma omp target
4575   {
4576 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4577   }
4578 #pragma omp target
4579   {
4580 #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?}}
4581     for (int i = 0; i < 10; ++i)
4582       ;
4583   }
4584 #pragma omp target
4585   {
4586 #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?}}
4587     for (int i = 0; i < 10; ++i)
4588       ;
4589   }
4590 #pragma omp target
4591   {
4592 #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?}}
4593     for (int i = 0; i < 10; ++i)
4594       ;
4595   }
4596 #pragma omp target
4597   {
4598 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4599     for (int i = 0; i < 10; ++i)
4600       ;
4601   }
4602 #pragma omp target
4603   {
4604 #pragma omp teams distribute // OK
4605     for (int i = 0; i < 10; ++i)
4606       ;
4607   }
4608 #pragma omp target
4609   {
4610 #pragma omp teams distribute simd // OK
4611     for (int i = 0; i < 10; ++i)
4612       ;
4613   }
4614 #pragma omp target
4615   {
4616 #pragma omp teams distribute parallel for simd // OK
4617     for (int i = 0; i < 10; ++i)
4618       ;
4619   }
4620 #pragma omp target
4621   {
4622 #pragma omp teams distribute parallel for // OK
4623     for (int i = 0; i < 10; ++i)
4624       ;
4625   }
4626 #pragma omp target
4627   {
4628 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4629     for (int i = 0; i < 10; ++i)
4630       ;
4631   }
4632 #pragma omp target
4633   {
4634 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4635     for (int i = 0; i < 10; ++i)
4636       ;
4637   }
4638 #pragma omp target
4639   {
4640 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4641     for (int i = 0; i < 10; ++i)
4642       ;
4643   }
4644 #pragma omp target
4645   {
4646 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4647     for (int i = 0; i < 10; ++i)
4648       ;
4649   }
4650 #pragma omp target
4651   {
4652 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4653     for (int i = 0; i < 10; ++i)
4654       ;
4655   }
4656 
4657 // TARGET PARALLEL DIRECTIVE
4658 #pragma omp target parallel
4659 #pragma omp parallel
4660   bar();
4661 #pragma omp target parallel
4662 #pragma omp for
4663   for (int i = 0; i < 10; ++i)
4664     ;
4665 #pragma omp target parallel
4666 #pragma omp simd
4667   for (int i = 0; i < 10; ++i)
4668     ;
4669 #pragma omp target parallel
4670 #pragma omp for simd
4671   for (int i = 0; i < 10; ++i)
4672     ;
4673 #pragma omp target parallel
4674 #pragma omp sections
4675   {
4676     bar();
4677   }
4678 #pragma omp target parallel
4679 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
4680   {
4681     bar();
4682   }
4683 #pragma omp target parallel
4684 #pragma omp single
4685   bar();
4686 
4687 #pragma omp target parallel
4688 #pragma omp master
4689   {
4690     bar();
4691   }
4692 #pragma omp target
4693 #pragma omp parallel master
4694   {
4695     bar();
4696   }
4697 #pragma omp target parallel
4698 #pragma omp critical
4699   {
4700     bar();
4701   }
4702 #pragma omp target parallel
4703 #pragma omp parallel for
4704   for (int i = 0; i < 10; ++i)
4705     ;
4706 #pragma omp target parallel
4707 #pragma omp parallel for simd
4708   for (int i = 0; i < 10; ++i)
4709     ;
4710 #pragma omp target parallel
4711 #pragma omp parallel sections
4712   {
4713     bar();
4714   }
4715 #pragma omp target parallel
4716 #pragma omp task
4717   {
4718     bar();
4719   }
4720 #pragma omp target parallel
4721   {
4722 #pragma omp taskyield
4723     bar();
4724   }
4725 #pragma omp target parallel
4726   {
4727 #pragma omp barrier
4728     bar();
4729   }
4730 #pragma omp target parallel
4731   {
4732 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
4733     bar();
4734   }
4735 #pragma omp target parallel
4736   {
4737 #pragma omp taskwait
4738     bar();
4739   }
4740 #pragma omp target parallel
4741   {
4742 #pragma omp flush
4743     bar();
4744   }
4745 #pragma omp target parallel
4746   {
4747 #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?}}
4748     bar();
4749   }
4750 #pragma omp target parallel
4751   {
4752 #pragma omp atomic
4753     ++a;
4754   }
4755 #pragma omp target parallel
4756   {
4757 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
4758     ++a;
4759   }
4760 #pragma omp target parallel
4761   {
4762 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
4763     ++a;
4764   }
4765 #pragma omp target parallel
4766 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4767   for (int i = 0; i < 10; ++i)
4768     ;
4769 #pragma omp target parallel
4770   {
4771 #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?}}
4772     ++a;
4773   }
4774 #pragma omp target parallel
4775   {
4776     ++a;
4777 #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?}}
4778     ++a;
4779   }
4780 #pragma omp target parallel
4781   {
4782 #pragma omp taskloop
4783   for (int i = 0; i < 10; ++i)
4784     ++a;
4785   }
4786 #pragma omp target parallel
4787   {
4788 #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?}}
4789     for (int i = 0; i < 10; ++i)
4790       ;
4791   }
4792 #pragma omp target parallel
4793   {
4794 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4795   }
4796 #pragma omp target parallel
4797   {
4798 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4799   }
4800 #pragma omp target parallel
4801   {
4802 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4803   }
4804 #pragma omp target parallel
4805   {
4806 #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?}}
4807     for (int i = 0; i < 10; ++i)
4808       ;
4809   }
4810 #pragma omp target parallel
4811   {
4812 #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?}}
4813     for (int i = 0; i < 10; ++i)
4814       ;
4815   }
4816 #pragma omp target parallel
4817   {
4818 #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?}}
4819     for (int i = 0; i < 10; ++i)
4820       ;
4821   }
4822 #pragma omp target parallel
4823   {
4824 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4825     for (int i = 0; i < 10; ++i)
4826       ;
4827   }
4828 #pragma omp target parallel
4829   {
4830 #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?}}
4831     for (int i = 0; i < 10; ++i)
4832       ;
4833   }
4834 #pragma omp target parallel
4835   {
4836 #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?}}
4837     for (int i = 0; i < 10; ++i)
4838       ;
4839   }
4840 #pragma omp target parallel
4841   {
4842 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4843     for (int i = 0; i < 10; ++i)
4844       ;
4845   }
4846 #pragma omp target parallel
4847   {
4848 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4849     for (int i = 0; i < 10; ++i)
4850       ;
4851   }
4852 #pragma omp target parallel
4853   {
4854 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
4855     a++;
4856   }
4857 #pragma omp target parallel
4858   {
4859 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
4860     for (int i = 0; i < 10; ++i)
4861       ;
4862   }
4863 #pragma omp target parallel
4864   {
4865 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4866     for (int i = 0; i < 10; ++i)
4867       ;
4868   }
4869 #pragma omp target parallel
4870   {
4871 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4872     for (int i = 0; i < 10; ++i)
4873       ;
4874   }
4875 #pragma omp target parallel
4876   {
4877 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4878     for (int i = 0; i < 10; ++i)
4879       ;
4880   }
4881 
4882 // TARGET PARALLEL FOR DIRECTIVE
4883 #pragma omp target parallel for
4884   for (int i = 0; i < 10; ++i) {
4885 #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?}}
4886     for (int i = 0; i < 10; ++i)
4887       ;
4888   }
4889 #pragma omp target parallel for
4890   for (int i = 0; i < 10; ++i) {
4891 #pragma omp simd
4892     for (int i = 0; i < 10; ++i)
4893       ;
4894   }
4895 #pragma omp target parallel for
4896   for (int i = 0; i < 10; ++i) {
4897 #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?}}
4898     for (int i = 0; i < 10; ++i)
4899       ;
4900   }
4901 #pragma omp target parallel for
4902   for (int i = 0; i < 10; ++i) {
4903 #pragma omp parallel
4904     for (int i = 0; i < 10; ++i)
4905       ;
4906   }
4907 #pragma omp target parallel for
4908   for (int i = 0; i < 10; ++i) {
4909 #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?}}
4910     {
4911       bar();
4912     }
4913   }
4914 #pragma omp target parallel for
4915   for (int i = 0; i < 10; ++i) {
4916 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
4917     {
4918       bar();
4919     }
4920   }
4921 #pragma omp target parallel for
4922   for (int i = 0; i < 10; ++i) {
4923 #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?}}
4924     {
4925       bar();
4926     }
4927   }
4928 
4929 #pragma omp target parallel for
4930   for (int i = 0; i < 10; ++i) {
4931 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4932     {
4933       bar();
4934     }
4935   }
4936 
4937 #pragma omp target parallel for
4938   for (int i = 0; i < 10; ++i) {
4939 #pragma omp critical
4940     {
4941       bar();
4942     }
4943   }
4944 
4945 #pragma omp target parallel for
4946   for (int i = 0; i < 10; ++i) {
4947 #pragma omp parallel
4948     {
4949 #pragma omp single // OK
4950       {
4951         bar();
4952       }
4953 #pragma omp for // OK
4954       for (int i = 0; i < 10; ++i)
4955         ;
4956 #pragma omp for simd // OK
4957       for (int i = 0; i < 10; ++i)
4958         ;
4959 #pragma omp sections // OK
4960       {
4961         bar();
4962       }
4963     }
4964   }
4965 #pragma omp target parallel for
4966   for (int i = 0; i < 10; ++i) {
4967 #pragma omp parallel for
4968     for (int i = 0; i < 10; ++i)
4969       ;
4970   }
4971 #pragma omp target parallel for
4972   for (int i = 0; i < 10; ++i) {
4973 #pragma omp parallel for simd
4974     for (int i = 0; i < 10; ++i)
4975       ;
4976   }
4977 #pragma omp target parallel for
4978   for (int i = 0; i < 10; ++i) {
4979 #pragma omp parallel sections
4980     {
4981       bar();
4982     }
4983   }
4984 #pragma omp target parallel for
4985   for (int i = 0; i < 10; ++i) {
4986 #pragma omp task
4987     {
4988       bar();
4989     }
4990   }
4991 #pragma omp target parallel for
4992   for (int i = 0; i < 10; ++i) {
4993 #pragma omp taskyield
4994     bar();
4995   }
4996 #pragma omp target parallel for
4997   for (int i = 0; i < 10; ++i) {
4998 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4999     bar();
5000   }
5001 #pragma omp target parallel for
5002   for (int i = 0; i < 10; ++i) {
5003 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
5004     bar();
5005   }
5006 #pragma omp target parallel for
5007   for (int i = 0; i < 10; ++i) {
5008 #pragma omp taskwait
5009     bar();
5010   }
5011 #pragma omp target parallel for
5012   for (int i = 0; i < 10; ++i) {
5013 #pragma omp flush
5014     bar();
5015   }
5016 #pragma omp target parallel for
5017   for (int i = 0; i < 10; ++i) {
5018 #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?}}
5019     bar();
5020   }
5021 #pragma omp target parallel for ordered
5022   for (int i = 0; i < 10; ++i) {
5023 #pragma omp ordered // OK
5024     bar();
5025   }
5026 #pragma omp target parallel for
5027   for (int i = 0; i < 10; ++i) {
5028 #pragma omp atomic
5029     ++a;
5030   }
5031 #pragma omp target parallel for
5032   for (int i = 0; i < 10; ++i) {
5033 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
5034     ++a;
5035   }
5036 #pragma omp target parallel for
5037   for (int i = 0; i < 10; ++i) {
5038 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
5039     ++a;
5040   }
5041 #pragma omp target parallel for
5042   for (int i = 0; i < 10; ++i) {
5043 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
5044     for (int i = 0; i < 10; ++i)
5045       ;
5046   }
5047 #pragma omp target parallel for
5048   for (int i = 0; i < 10; ++i) {
5049 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5050     ++a;
5051   }
5052 #pragma omp target parallel for
5053   for (int i = 0; i < 10; ++i) {
5054 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5055     ++a;
5056   }
5057 #pragma omp target parallel for
5058   for (int i = 0; i < 10; ++i) {
5059 #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?}}
5060     ++a;
5061   }
5062 #pragma omp target parallel for
5063   for (int i = 0; i < 10; ++i) {
5064 #pragma omp taskloop
5065   for (int i = 0; i < 10; ++i)
5066     ++a;
5067   }
5068 #pragma omp target parallel for
5069   for (int i = 0; i < 10; ++i) {
5070 #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?}}
5071     for (int j = 0; j < 10; ++j)
5072       ;
5073   }
5074 #pragma omp target parallel for
5075   for (int i = 0; i < 10; ++i) {
5076 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5077   }
5078 #pragma omp target parallel for
5079   for (int i = 0; i < 10; ++i) {
5080 #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?}}
5081     for (int j = 0; j < 10; ++j)
5082       ;
5083   }
5084 #pragma omp target parallel for
5085   for (int i = 0; i < 10; ++i) {
5086 #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?}}
5087     for (int j = 0; j < 10; ++j)
5088       ;
5089   }
5090 #pragma omp target parallel for
5091   for (int i = 0; i < 10; ++i) {
5092 #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?}}
5093     for (int j = 0; j < 10; ++j)
5094       ;
5095   }
5096 #pragma omp target parallel for
5097   for (int i = 0; i < 10; ++i) {
5098 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5099     for (int j = 0; j < 10; ++j)
5100       ;
5101   }
5102 #pragma omp target parallel for
5103   for (int i = 0; i < 10; ++i) {
5104 #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?}}
5105     for (int j = 0; j < 10; ++j)
5106       ;
5107   }
5108 #pragma omp target parallel for
5109   for (int i = 0; i < 10; ++i) {
5110 #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?}}
5111     for (int j = 0; j < 10; ++j)
5112       ;
5113   }
5114 #pragma omp target parallel for
5115   for (int i = 0; i < 10; ++i) {
5116 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5117     for (int j = 0; j < 10; ++j)
5118       ;
5119   }
5120 #pragma omp target parallel for
5121   for (int i = 0; i < 10; ++i) {
5122 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5123     for (int j = 0; j < 10; ++j)
5124       ;
5125   }
5126 #pragma omp target parallel for
5127   for (int i = 0; i < 10; ++i) {
5128 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
5129     a++;
5130   }
5131 #pragma omp target parallel for
5132   for (int i = 0; i < 10; ++i) {
5133 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
5134     for (int j = 0; j < 10; ++j)
5135       ;
5136   }
5137 #pragma omp target parallel for
5138   for (int i = 0; i < 10; ++i) {
5139 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
5140     for (int j = 0; j < 10; ++j)
5141       ;
5142   }
5143 #pragma omp target parallel for
5144   for (int i = 0; i < 10; ++i) {
5145 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5146     for (int j = 0; j < 10; ++j)
5147       ;
5148   }
5149 #pragma omp target parallel for
5150   for (int i = 0; i < 10; ++i) {
5151 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5152     for (int j = 0; j < 10; ++j)
5153       ;
5154   }
5155 
5156 // TEAMS DIRECTIVE
5157 #pragma omp teams // omp45-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5158   bar();
5159 #pragma omp target
5160 #pragma omp teams
5161 #pragma omp parallel
5162   bar();
5163 #pragma omp target
5164 #pragma omp teams
5165 #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?}}
5166   for (int i = 0; i < 10; ++i)
5167     ;
5168 #pragma omp target
5169 #pragma omp teams
5170 #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?}}
5171   for (int i = 0; i < 10; ++i)
5172     ;
5173 #pragma omp target
5174 #pragma omp teams
5175 #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?}}
5176   for (int i = 0; i < 10; ++i)
5177     ;
5178 #pragma omp target
5179 #pragma omp teams
5180 #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?}}
5181   {
5182     bar();
5183   }
5184 #pragma omp target
5185 #pragma omp teams
5186 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
5187   {
5188     bar();
5189   }
5190 #pragma omp target
5191 #pragma omp teams
5192 #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?}}
5193   bar();
5194 
5195 #pragma omp target
5196 #pragma omp teams
5197 #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?}}
5198   {
5199     bar();
5200   }
5201 #pragma omp target
5202 #pragma omp teams
5203 #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?}}
5204   {
5205     bar();
5206   }
5207 #pragma omp target
5208 #pragma omp teams
5209 #pragma omp parallel for
5210   for (int i = 0; i < 10; ++i)
5211     ;
5212 #pragma omp target
5213 #pragma omp teams
5214 #pragma omp parallel for simd
5215   for (int i = 0; i < 10; ++i)
5216     ;
5217 #pragma omp target
5218 #pragma omp teams
5219 #pragma omp parallel sections
5220   {
5221     bar();
5222   }
5223 #pragma omp target
5224 #pragma omp teams
5225 #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?}}
5226   {
5227     bar();
5228   }
5229 #pragma omp target
5230 #pragma omp teams
5231   {
5232 #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?}}
5233     bar();
5234   }
5235 #pragma omp target
5236 #pragma omp teams
5237   {
5238 #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?}}
5239     bar();
5240   }
5241 #pragma omp target
5242 #pragma omp teams
5243   {
5244 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
5245     bar();
5246   }
5247 #pragma omp target
5248 #pragma omp teams
5249   {
5250 #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?}}
5251     bar();
5252   }
5253 #pragma omp target
5254 #pragma omp teams
5255   {
5256 #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?}}
5257     bar();
5258   }
5259 #pragma omp target
5260 #pragma omp teams
5261   {
5262 #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?}}
5263     bar();
5264   }
5265 #pragma omp target
5266 #pragma omp teams
5267   {
5268 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
5269     ++a;
5270   }
5271 #pragma omp target
5272 #pragma omp teams
5273   {
5274 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5275     ++a;
5276   }
5277 #pragma omp target
5278 #pragma omp teams
5279   {
5280 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5281     ++a;
5282   }
5283 #pragma omp target
5284 #pragma omp teams
5285 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5286   for (int i = 0; i < 10; ++i)
5287     ;
5288 #pragma omp target
5289 #pragma omp teams
5290   {
5291 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5292     ++a;
5293   }
5294 #pragma omp target
5295 #pragma omp teams
5296   {
5297 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5298     ++a;
5299   }
5300 #pragma omp target
5301 #pragma omp teams
5302   {
5303 #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?}}
5304     ++a;
5305   }
5306 #pragma omp target
5307 #pragma omp teams
5308   {
5309 #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?}}
5310   for (int i = 0; i < 10; ++i)
5311     ++a;
5312   }
5313 #pragma omp target
5314 #pragma omp teams
5315 #pragma omp distribute
5316   for (int i = 0; i < 10; ++i)
5317     ;
5318 #pragma omp target
5319 #pragma omp teams
5320 #pragma omp distribute
5321   for (int i = 0; i < 10; ++i)
5322     ;
5323 #pragma omp distribute
5324   for (int j = 0; j < 10; ++j)
5325     ;
5326 #pragma omp target
5327 #pragma omp teams
5328   {
5329 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5330   }
5331 #pragma omp target
5332 #pragma omp teams
5333   {
5334 #pragma omp distribute parallel for
5335   for (int i = 0; i < 10; ++i)
5336     ;
5337 #pragma omp distribute parallel for
5338   for (int j = 0; j < 10; ++j)
5339     ;
5340   }
5341 #pragma omp target
5342 #pragma omp teams
5343   {
5344 #pragma omp distribute parallel for simd
5345   for (int i = 0; i < 10; ++i)
5346     ;
5347 #pragma omp distribute parallel for simd
5348   for (int j = 0; j < 10; ++j)
5349     ;
5350   }
5351 #pragma omp target
5352 #pragma omp teams
5353   {
5354 #pragma omp distribute simd
5355   for (int i = 0; i < 10; ++i)
5356     ;
5357 #pragma omp distribute simd
5358   for (int j = 0; j < 10; ++j)
5359     ;
5360   }
5361 #pragma omp target
5362 #pragma omp teams
5363   {
5364 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5365   for (int i = 0; i < 10; ++i)
5366     ;
5367   }
5368 #pragma omp target
5369 #pragma omp teams
5370   {
5371 #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?}}
5372   for (int i = 0; i < 10; ++i)
5373     ;
5374   }
5375 #pragma omp target
5376 #pragma omp teams
5377   {
5378 #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?}}
5379   for (int i = 0; i < 10; ++i)
5380     ;
5381   }
5382 #pragma omp target
5383 #pragma omp teams
5384   {
5385 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5386   for (int i = 0; i < 10; ++i)
5387     ;
5388   }
5389 #pragma omp target
5390 #pragma omp teams
5391   {
5392 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5393   for (int i = 0; i < 10; ++i)
5394     ;
5395   }
5396 #pragma omp target
5397 #pragma omp teams
5398   {
5399 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5400     a++;
5401   }
5402 #pragma omp target
5403 #pragma omp teams
5404   {
5405 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5406   for (int i = 0; i < 10; ++i)
5407     ;
5408   }
5409 #pragma omp target
5410 #pragma omp teams
5411   {
5412 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5413   for (int i = 0; i < 10; ++i)
5414     ;
5415   }
5416 #pragma omp target
5417 #pragma omp teams
5418   {
5419 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5420   for (int i = 0; i < 10; ++i)
5421     ;
5422   }
5423 #pragma omp target
5424 #pragma omp teams
5425   {
5426 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5427   for (int i = 0; i < 10; ++i)
5428     ;
5429   }
5430 
5431 // TASKLOOP DIRECTIVE
5432 #pragma omp taskloop
5433   for (int i = 0; i < 10; ++i) {
5434 #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?}}
5435     for (int i = 0; i < 10; ++i)
5436       ;
5437   }
5438 #pragma omp taskloop
5439   for (int i = 0; i < 10; ++i) {
5440 #pragma omp simd
5441     for (int i = 0; i < 10; ++i)
5442       ;
5443   }
5444 #pragma omp taskloop
5445   for (int i = 0; i < 10; ++i) {
5446 #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?}}
5447     for (int i = 0; i < 10; ++i)
5448       ;
5449   }
5450 #pragma omp taskloop
5451   for (int i = 0; i < 10; ++i) {
5452 #pragma omp parallel
5453     for (int i = 0; i < 10; ++i)
5454       ;
5455   }
5456 #pragma omp taskloop
5457   for (int i = 0; i < 10; ++i) {
5458 #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?}}
5459     {
5460       bar();
5461     }
5462   }
5463 #pragma omp taskloop
5464   for (int i = 0; i < 10; ++i) {
5465 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
5466     {
5467       bar();
5468     }
5469   }
5470 #pragma omp taskloop
5471   for (int i = 0; i < 10; ++i) {
5472 #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?}}
5473     {
5474       bar();
5475     }
5476   }
5477 
5478 #pragma omp taskloop
5479   for (int i = 0; i < 10; ++i) {
5480 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5481     {
5482       bar();
5483     }
5484   }
5485 #pragma omp taskloop
5486   for (int i = 0; i < 10; ++i) {
5487 #pragma omp critical
5488     {
5489       bar();
5490     }
5491   }
5492 #pragma omp taskloop
5493   for (int i = 0; i < 10; ++i) {
5494 #pragma omp parallel
5495     {
5496 #pragma omp single // OK
5497       {
5498         bar();
5499       }
5500 #pragma omp for // OK
5501       for (int i = 0; i < 10; ++i)
5502         ;
5503 #pragma omp sections // OK
5504       {
5505         bar();
5506       }
5507     }
5508   }
5509 #pragma omp taskloop
5510   for (int i = 0; i < 10; ++i) {
5511 #pragma omp parallel for
5512     for (int i = 0; i < 10; ++i)
5513       ;
5514   }
5515 #pragma omp taskloop
5516   for (int i = 0; i < 10; ++i) {
5517 #pragma omp parallel for simd
5518     for (int i = 0; i < 10; ++i)
5519       ;
5520   }
5521 #pragma omp taskloop
5522   for (int i = 0; i < 10; ++i) {
5523 #pragma omp parallel sections
5524     {
5525       bar();
5526     }
5527   }
5528 #pragma omp taskloop
5529   for (int i = 0; i < 10; ++i) {
5530 #pragma omp task
5531     {
5532       bar();
5533     }
5534   }
5535 #pragma omp taskloop
5536   for (int i = 0; i < 10; ++i) {
5537 #pragma omp taskyield
5538     bar();
5539   }
5540 #pragma omp taskloop
5541   for (int i = 0; i < 10; ++i) {
5542 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5543     bar();
5544   }
5545 #pragma omp taskloop
5546   for (int i = 0; i < 10; ++i) {
5547 #pragma omp scan // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5548     bar();
5549   }
5550 #pragma omp taskloop
5551   for (int i = 0; i < 10; ++i) {
5552 #pragma omp taskwait
5553     bar();
5554   }
5555 #pragma omp taskloop
5556   for (int i = 0; i < 10; ++i) {
5557 #pragma omp flush
5558     bar();
5559   }
5560 #pragma omp taskloop
5561   for (int i = 0; i < 10; ++i) {
5562 #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?}}
5563     bar();
5564   }
5565 #pragma omp taskloop
5566   for (int i = 0; i < 10; ++i) {
5567 #pragma omp atomic
5568     ++a;
5569   }
5570 #pragma omp taskloop
5571   for (int i = 0; i < 10; ++i) {
5572 #pragma omp target
5573     ++a;
5574   }
5575 #pragma omp taskloop
5576   for (int i = 0; i < 10; ++i) {
5577 #pragma omp target parallel
5578     ++a;
5579   }
5580 #pragma omp taskloop
5581   for (int i = 0; i < 10; ++i) {
5582 #pragma omp target parallel for
5583     for (int i = 0; i < 10; ++i)
5584       ;
5585   }
5586 #pragma omp taskloop
5587   for (int i = 0; i < 10; ++i) {
5588 #pragma omp target enter data map(to: a)
5589     ++a;
5590   }
5591 #pragma omp taskloop
5592   for (int i = 0; i < 10; ++i) {
5593 #pragma omp target exit data map(from: a)
5594     ++a;
5595   }
5596 #pragma omp taskloop
5597   for (int i = 0; i < 10; ++i) {
5598 #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?}}
5599     ++a;
5600   }
5601 #pragma omp taskloop
5602   for (int i = 0; i < 10; ++i) {
5603 #pragma omp taskloop
5604   for (int i = 0; i < 10; ++i)
5605     ++a;
5606   }
5607 #pragma omp taskloop
5608   for (int i = 0; i < 10; ++i) {
5609 #pragma omp target update to(a)
5610     bar();
5611   }
5612 #pragma omp taskloop
5613   for (int i = 0; i < 10; ++i) {
5614 #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?}}
5615   for (int j = 0; j < 10; ++j)
5616     ++a;
5617   }
5618 #pragma omp taskloop
5619   for (int i = 0; i < 10; ++i) {
5620 #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?}}
5621   for (int j = 0; j < 10; ++j)
5622     ++a;
5623   }
5624 #pragma omp taskloop
5625   for (int i = 0; i < 10; ++i) {
5626 #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?}}
5627   for (int j = 0; j < 10; ++j)
5628     ++a;
5629   }
5630 #pragma omp taskloop
5631   for (int i = 0; i < 10; ++i) {
5632 #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?}}
5633   for (int j = 0; j < 10; ++j)
5634     ++a;
5635   }
5636 #pragma omp taskloop
5637   for (int i = 0; i < 10; ++i) {
5638 #pragma omp target simd // OK
5639   for (int j = 0; j < 10; ++j)
5640     ++a;
5641   }
5642 #pragma omp taskloop
5643   for (int i = 0; i < 10; ++i) {
5644 #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?}}
5645   for (int j = 0; j < 10; ++j)
5646     ++a;
5647   }
5648 #pragma omp taskloop
5649   for (int i = 0; i < 10; ++i) {
5650 #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?}}
5651   for (int j = 0; j < 10; ++j)
5652     ++a;
5653   }
5654 #pragma omp taskloop
5655   for (int i = 0; i < 10; ++i) {
5656 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5657   for (int j = 0; j < 10; ++j)
5658     ++a;
5659   }
5660 #pragma omp taskloop
5661   for (int i = 0; i < 10; ++i) {
5662 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5663   for (int j = 0; j < 10; ++j)
5664     ++a;
5665   }
5666 #pragma omp taskloop
5667   for (int i = 0; i < 10; ++i) {
5668 #pragma omp target teams // OK
5669     ++a;
5670   }
5671 #pragma omp taskloop
5672   for (int i = 0; i < 10; ++i) {
5673 #pragma omp target teams distribute // OK
5674   for (int j = 0; j < 10; ++j)
5675     ++a;
5676   }
5677 #pragma omp taskloop
5678   for (int i = 0; i < 10; ++i) {
5679 #pragma omp target teams distribute parallel for // OK
5680   for (int j = 0; j < 10; ++j)
5681     ++a;
5682   }
5683 #pragma omp taskloop
5684   for (int i = 0; i < 10; ++i) {
5685 #pragma omp target teams distribute parallel for simd // OK
5686   for (int j = 0; j < 10; ++j)
5687     ++a;
5688   }
5689 #pragma omp taskloop
5690   for (int i = 0; i < 10; ++i) {
5691 #pragma omp target teams distribute simd // OK
5692   for (int j = 0; j < 10; ++j)
5693     ++a;
5694   }
5695 #pragma omp taskloop
5696   for (int i = 0; i < 10; ++i) {
5697 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
5698 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
5699   }
5700 #pragma omp taskloop
5701   for (int i = 0; i < 10; ++i) {
5702 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5703 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5704   }
5705 #pragma omp master taskloop
5706   for (int i = 0; i < 10; ++i) {
5707 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
5708 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
5709   }
5710 #pragma omp master taskloop
5711   for (int i = 0; i < 10; ++i) {
5712 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
5713 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
5714   }
5715 #pragma omp parallel master taskloop
5716   for (int i = 0; i < 10; ++i) {
5717 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5718 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5719   }
5720 #pragma omp parallel master taskloop
5721   for (int i = 0; i < 10; ++i) {
5722 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5723 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5724   }
5725 
5726 // DISTRIBUTE DIRECTIVE
5727 #pragma omp target
5728 #pragma omp teams
5729 #pragma omp distribute
5730   for (int i = 0; i < 10; ++i) {
5731 #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?}}
5732     for (int i = 0; i < 10; ++i)
5733       ;
5734   }
5735 #pragma omp target
5736 #pragma omp teams
5737 #pragma omp distribute
5738   for (int i = 0; i < 10; ++i) {
5739 #pragma omp for
5740     for (int i = 0; i < 10; ++i)
5741       ;
5742   }
5743 #pragma omp target
5744 #pragma omp teams
5745 #pragma omp distribute
5746   for (int i = 0; i < 10; ++i) {
5747 #pragma omp simd
5748     for (int i = 0; i < 10; ++i)
5749       ;
5750   }
5751 #pragma omp target
5752 #pragma omp teams
5753 #pragma omp distribute
5754   for (int i = 0; i < 10; ++i) {
5755 #pragma omp for simd
5756     for (int i = 0; i < 10; ++i)
5757       ;
5758   }
5759 #pragma omp target
5760 #pragma omp teams
5761 #pragma omp distribute
5762   for (int i = 0; i < 10; ++i) {
5763 #pragma omp parallel
5764     for (int i = 0; i < 10; ++i)
5765       ;
5766   }
5767 #pragma omp target
5768 #pragma omp teams
5769 #pragma omp distribute
5770   for (int i = 0; i < 10; ++i) {
5771 #pragma omp sections
5772     {
5773       bar();
5774     }
5775   }
5776 #pragma omp target
5777 #pragma omp teams
5778 #pragma omp distribute
5779   for (int i = 0; i < 10; ++i) {
5780 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
5781     {
5782       bar();
5783     }
5784   }
5785 #pragma omp target
5786 #pragma omp teams
5787 #pragma omp distribute
5788   for (int i = 0; i < 10; ++i) {
5789 #pragma omp single
5790     {
5791       bar();
5792     }
5793   }
5794 #pragma omp target
5795 #pragma omp teams
5796 #pragma omp distribute
5797   for (int i = 0; i < 10; ++i) {
5798 #pragma omp master
5799     {
5800       bar();
5801     }
5802   }
5803 #pragma omp target
5804 #pragma omp teams
5805 #pragma omp distribute
5806   for (int i = 0; i < 10; ++i) {
5807 #pragma omp critical
5808     {
5809       bar();
5810     }
5811   }
5812 #pragma omp target
5813 #pragma omp teams
5814 #pragma omp distribute
5815   for (int i = 0; i < 10; ++i) {
5816 #pragma omp parallel
5817     {
5818 #pragma omp single
5819       {
5820         bar();
5821       }
5822     }
5823   }
5824 #pragma omp target
5825 #pragma omp teams
5826 #pragma omp distribute
5827   for (int i = 0; i < 10; ++i) {
5828 #pragma omp parallel for
5829     for (int i = 0; i < 10; ++i)
5830       ;
5831   }
5832 #pragma omp target
5833 #pragma omp teams
5834 #pragma omp distribute
5835   for (int i = 0; i < 10; ++i) {
5836 #pragma omp parallel for simd
5837     for (int i = 0; i < 10; ++i)
5838       ;
5839   }
5840 #pragma omp target
5841 #pragma omp teams
5842 #pragma omp distribute
5843   for (int i = 0; i < 10; ++i) {
5844 #pragma omp parallel sections
5845     {
5846       bar();
5847     }
5848   }
5849 #pragma omp target
5850 #pragma omp teams
5851 #pragma omp distribute
5852   for (int i = 0; i < 10; ++i) {
5853 #pragma omp task
5854     {
5855       bar();
5856     }
5857   }
5858 #pragma omp target
5859 #pragma omp teams
5860 #pragma omp distribute
5861   for (int i = 0; i < 10; ++i) {
5862 #pragma omp taskyield
5863     bar();
5864   }
5865 #pragma omp target
5866 #pragma omp teams
5867 #pragma omp distribute
5868   for (int i = 0; i < 10; ++i) {
5869 #pragma omp barrier
5870     bar();
5871   }
5872 #pragma omp target
5873 #pragma omp teams
5874 #pragma omp distribute
5875   for (int i = 0; i < 10; ++i) {
5876 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
5877     bar();
5878   }
5879 #pragma omp target
5880 #pragma omp teams
5881 #pragma omp distribute
5882   for (int i = 0; i < 10; ++i) {
5883 #pragma omp taskwait
5884     bar();
5885   }
5886 #pragma omp target
5887 #pragma omp teams
5888 #pragma omp distribute
5889   for (int i = 0; i < 10; ++i) {
5890 #pragma omp flush
5891     bar();
5892   }
5893 #pragma omp target
5894 #pragma omp teams
5895 #pragma omp distribute
5896   for (int i = 0; i < 10; ++i) {
5897 #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?}}
5898     bar();
5899   }
5900 #pragma omp target
5901 #pragma omp teams
5902 #pragma omp distribute
5903   for (int i = 0; i < 10; ++i) {
5904 #pragma omp atomic
5905     ++a;
5906   }
5907 #pragma omp target
5908 #pragma omp teams
5909 #pragma omp distribute
5910   for (int i = 0; i < 10; ++i) {
5911 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5912     ++a;
5913   }
5914 #pragma omp target
5915 #pragma omp teams
5916 #pragma omp distribute
5917   for (int i = 0; i < 10; ++i) {
5918 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5919     ++a;
5920   }
5921 #pragma omp target
5922 #pragma omp teams
5923 #pragma omp distribute
5924   for (int i = 0; i < 10; ++i) {
5925 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5926     for (int i = 0; i < 10; ++i)
5927       ;
5928   }
5929 #pragma omp target
5930 #pragma omp teams
5931 #pragma omp distribute
5932   for (int i = 0; i < 10; ++i) {
5933 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5934     ++a;
5935   }
5936 #pragma omp target
5937 #pragma omp teams
5938 #pragma omp distribute
5939   for (int i = 0; i < 10; ++i) {
5940 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5941     ++a;
5942   }
5943 #pragma omp target
5944 #pragma omp teams
5945 #pragma omp distribute
5946   for (int i = 0; i < 10; ++i) {
5947 #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?}}
5948     ++a;
5949   }
5950 #pragma omp target
5951 #pragma omp teams
5952 #pragma omp distribute
5953   for (int i = 0; i < 10; ++i) {
5954 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5955     ++a;
5956   }
5957 #pragma omp target
5958 #pragma omp teams
5959 #pragma omp distribute
5960   for (int i = 0; i < 10; ++i) {
5961 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5962     for (int j = 0; j < 10; ++j)
5963       ;
5964   }
5965 #pragma omp target
5966 #pragma omp teams
5967 #pragma omp distribute
5968   for (int i = 0; i < 10; ++i) {
5969 #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?}}
5970     for (int j = 0; j < 10; ++j)
5971       ;
5972   }
5973 #pragma omp target
5974 #pragma omp teams
5975 #pragma omp distribute
5976   for (int i = 0; i < 10; ++i) {
5977 #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?}}
5978     for (int j = 0; j < 10; ++j)
5979       ;
5980   }
5981 #pragma omp target
5982 #pragma omp teams
5983 #pragma omp distribute
5984   for (int i = 0; i < 10; ++i) {
5985 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5986     for (int j = 0; j < 10; ++j)
5987       ;
5988   }
5989 #pragma omp target
5990 #pragma omp teams
5991 #pragma omp distribute
5992   for (int i = 0; i < 10; ++i) {
5993 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5994     for (int j = 0; j < 10; ++j)
5995       ;
5996   }
5997 #pragma omp target
5998 #pragma omp teams
5999 #pragma omp distribute
6000   for (int i = 0; i < 10; ++i) {
6001 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6002     a++;
6003   }
6004 #pragma omp target
6005 #pragma omp teams
6006 #pragma omp distribute
6007   for (int i = 0; i < 10; ++i) {
6008 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6009     for (int j = 0; j < 10; ++j)
6010       ;
6011   }
6012 #pragma omp target
6013 #pragma omp teams
6014 #pragma omp distribute
6015   for (int i = 0; i < 10; ++i) {
6016 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6017     for (int j = 0; j < 10; ++j)
6018       ;
6019   }
6020 #pragma omp target
6021 #pragma omp teams
6022 #pragma omp distribute
6023   for (int i = 0; i < 10; ++i) {
6024 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6025     for (int j = 0; j < 10; ++j)
6026       ;
6027   }
6028 #pragma omp target
6029 #pragma omp teams
6030 #pragma omp distribute
6031   for (int i = 0; i < 10; ++i) {
6032 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6033     for (int j = 0; j < 10; ++j)
6034       ;
6035   }
6036 
6037 // DISTRIBUTE PARALLEL FOR DIRECTIVE
6038 #pragma omp target
6039 #pragma omp teams
6040 #pragma omp distribute parallel for
6041   for (int i = 0; i < 10; ++i) {
6042 #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?}}
6043     for (int i = 0; i < 10; ++i)
6044       ;
6045   }
6046 #pragma omp target
6047 #pragma omp teams
6048 #pragma omp distribute parallel for
6049   for (int i = 0; i < 10; ++i) {
6050 #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?}}
6051     for (int i = 0; i < 10; ++i)
6052       ;
6053   }
6054 #pragma omp target
6055 #pragma omp teams
6056 #pragma omp distribute parallel for
6057   for (int i = 0; i < 10; ++i) {
6058 #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?}}
6059     for (int i = 0; i < 10; ++i)
6060       ;
6061   }
6062 #pragma omp target
6063 #pragma omp teams
6064 #pragma omp distribute parallel for
6065   for (int i = 0; i < 10; ++i) {
6066 #pragma omp simd
6067     for (int i = 0; i < 10; ++i)
6068       ;
6069   }
6070 #pragma omp target
6071 #pragma omp teams
6072 #pragma omp distribute parallel for
6073   for (int i = 0; i < 10; ++i) {
6074 #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?}}
6075     for (int i = 0; i < 10; ++i)
6076       ;
6077   }
6078 #pragma omp target
6079 #pragma omp teams
6080 #pragma omp distribute parallel for
6081   for (int i = 0; i < 10; ++i) {
6082 #pragma omp parallel
6083     for (int i = 0; i < 10; ++i)
6084       ;
6085   }
6086 #pragma omp target
6087 #pragma omp teams
6088 #pragma omp distribute parallel for
6089   for (int i = 0; i < 10; ++i) {
6090 #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?}}
6091     {
6092       bar();
6093     }
6094   }
6095 #pragma omp target
6096 #pragma omp teams
6097 #pragma omp distribute parallel for
6098   for (int i = 0; i < 10; ++i) {
6099 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
6100     {
6101       bar();
6102     }
6103   }
6104 #pragma omp target
6105 #pragma omp teams
6106 #pragma omp distribute parallel for
6107   for (int i = 0; i < 10; ++i) {
6108 #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?}}
6109     {
6110       bar();
6111     }
6112   }
6113 #pragma omp target
6114 #pragma omp teams
6115 #pragma omp distribute parallel for
6116   for (int i = 0; i < 10; ++i) {
6117 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6118     {
6119       bar();
6120     }
6121   }
6122 #pragma omp target
6123 #pragma omp teams
6124 #pragma omp distribute parallel for
6125   for (int i = 0; i < 10; ++i) {
6126 #pragma omp critical
6127     {
6128       bar();
6129     }
6130   }
6131 #pragma omp target
6132 #pragma omp teams
6133 #pragma omp distribute parallel for
6134   for (int i = 0; i < 10; ++i) {
6135 #pragma omp parallel
6136     {
6137 #pragma omp single
6138       {
6139         bar();
6140       }
6141     }
6142   }
6143 #pragma omp target
6144 #pragma omp teams
6145 #pragma omp distribute parallel for
6146   for (int i = 0; i < 10; ++i) {
6147 #pragma omp parallel for
6148     for (int i = 0; i < 10; ++i)
6149       ;
6150   }
6151 #pragma omp target
6152 #pragma omp teams
6153 #pragma omp distribute parallel for
6154   for (int i = 0; i < 10; ++i) {
6155 #pragma omp parallel for simd
6156     for (int i = 0; i < 10; ++i)
6157       ;
6158   }
6159 #pragma omp target
6160 #pragma omp teams
6161 #pragma omp distribute parallel for
6162   for (int i = 0; i < 10; ++i) {
6163 #pragma omp parallel sections
6164     {
6165       bar();
6166     }
6167   }
6168 #pragma omp target
6169 #pragma omp teams
6170 #pragma omp distribute parallel for
6171   for (int i = 0; i < 10; ++i) {
6172 #pragma omp task
6173     {
6174       bar();
6175     }
6176   }
6177 #pragma omp target
6178 #pragma omp teams
6179 #pragma omp distribute parallel for
6180   for (int i = 0; i < 10; ++i) {
6181 #pragma omp taskyield
6182     bar();
6183   }
6184 #pragma omp target
6185 #pragma omp teams
6186 #pragma omp distribute parallel for
6187   for (int i = 0; i < 10; ++i) {
6188 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6189     bar();
6190   }
6191 #pragma omp target
6192 #pragma omp teams
6193 #pragma omp distribute parallel for
6194   for (int i = 0; i < 10; ++i) {
6195 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6196     bar();
6197   }
6198 #pragma omp target
6199 #pragma omp teams
6200 #pragma omp distribute parallel for
6201   for (int i = 0; i < 10; ++i) {
6202 #pragma omp taskwait
6203     bar();
6204   }
6205 #pragma omp target
6206 #pragma omp teams
6207 #pragma omp distribute parallel for
6208   for (int i = 0; i < 10; ++i) {
6209 #pragma omp flush
6210     bar();
6211   }
6212 #pragma omp target
6213 #pragma omp teams
6214 #pragma omp distribute parallel for
6215   for (int i = 0; i < 10; ++i) {
6216 #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?}}
6217     bar();
6218   }
6219 #pragma omp target
6220 #pragma omp teams
6221 #pragma omp distribute parallel for
6222   for (int i = 0; i < 10; ++i) {
6223 #pragma omp atomic
6224     ++a;
6225   }
6226 #pragma omp target
6227 #pragma omp teams
6228 #pragma omp distribute parallel for
6229   for (int i = 0; i < 10; ++i) {
6230 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6231     ++a;
6232   }
6233 #pragma omp target
6234 #pragma omp teams
6235 #pragma omp distribute parallel for
6236   for (int i = 0; i < 10; ++i) {
6237 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
6238     ++a;
6239   }
6240 #pragma omp target
6241 #pragma omp teams
6242 #pragma omp distribute parallel for
6243   for (int i = 0; i < 10; ++i) {
6244 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6245     for (int i = 0; i < 10; ++i)
6246       ;
6247   }
6248 #pragma omp target
6249 #pragma omp teams
6250 #pragma omp distribute parallel for
6251   for (int i = 0; i < 10; ++i) {
6252 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6253     ++a;
6254   }
6255 #pragma omp target
6256 #pragma omp teams
6257 #pragma omp distribute parallel for
6258   for (int i = 0; i < 10; ++i) {
6259 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6260     ++a;
6261   }
6262 #pragma omp target
6263 #pragma omp teams
6264 #pragma omp distribute parallel for
6265   for (int i = 0; i < 10; ++i) {
6266 #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?}}
6267     ++a;
6268   }
6269 #pragma omp target
6270 #pragma omp teams
6271 #pragma omp distribute parallel for
6272   for (int i = 0; i < 10; ++i) {
6273 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6274     ++a;
6275   }
6276 #pragma omp target
6277 #pragma omp teams
6278 #pragma omp distribute parallel for
6279   for (int i = 0; i < 10; ++i) {
6280 #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?}}
6281     for (int i = 0; i < 10; ++i)
6282       ;
6283   }
6284 #pragma omp target
6285 #pragma omp teams
6286 #pragma omp distribute parallel for
6287   for (int i = 0; i < 10; ++i) {
6288 #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?}}
6289     for (int i = 0; i < 10; ++i)
6290       ;
6291   }
6292 #pragma omp target
6293 #pragma omp teams
6294 #pragma omp distribute parallel for
6295   for (int i = 0; i < 10; ++i) {
6296 #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?}}
6297     for (int i = 0; i < 10; ++i)
6298       ;
6299   }
6300 #pragma omp target
6301 #pragma omp teams
6302 #pragma omp distribute parallel for
6303   for (int i = 0; i < 10; ++i) {
6304 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
6305     for (int i = 0; i < 10; ++i)
6306       ;
6307   }
6308 #pragma omp target
6309 #pragma omp teams
6310 #pragma omp distribute parallel for
6311   for (int i = 0; i < 10; ++i) {
6312 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
6313     for (int i = 0; i < 10; ++i)
6314       ;
6315   }
6316 #pragma omp target
6317 #pragma omp teams
6318 #pragma omp distribute parallel for
6319   for (int i = 0; i < 10; ++i) {
6320 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6321     a++;
6322   }
6323 #pragma omp target
6324 #pragma omp teams
6325 #pragma omp distribute parallel for
6326   for (int i = 0; i < 10; ++i) {
6327 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6328     for (int i = 0; i < 10; ++i)
6329       ;
6330   }
6331 #pragma omp target
6332 #pragma omp teams
6333 #pragma omp distribute parallel for
6334   for (int i = 0; i < 10; ++i) {
6335 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6336     for (int i = 0; i < 10; ++i)
6337       ;
6338   }
6339 #pragma omp target
6340 #pragma omp teams
6341 #pragma omp distribute parallel for
6342   for (int i = 0; i < 10; ++i) {
6343 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6344     for (int i = 0; i < 10; ++i)
6345       ;
6346   }
6347 #pragma omp target
6348 #pragma omp teams
6349 #pragma omp distribute parallel for
6350   for (int i = 0; i < 10; ++i) {
6351 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6352     for (int i = 0; i < 10; ++i)
6353       ;
6354   }
6355 
6356 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
6357 #pragma omp target
6358 #pragma omp teams
6359 #pragma omp distribute parallel for simd
6360   for (int i = 0; i < 10; ++i) {
6361 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6362     for (int i = 0; i < 10; ++i)
6363       ;
6364   }
6365 #pragma omp target
6366 #pragma omp teams
6367 #pragma omp distribute parallel for simd
6368   for (int i = 0; i < 10; ++i) {
6369 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6370     for (int i = 0; i < 10; ++i)
6371       ;
6372   }
6373 #pragma omp target
6374 #pragma omp teams
6375 #pragma omp distribute parallel for simd
6376   for (int i = 0; i < 10; ++i) {
6377 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6378     for (int i = 0; i < 10; ++i)
6379       ;
6380   }
6381 #pragma omp target
6382 #pragma omp teams
6383 #pragma omp distribute parallel for simd
6384   for (int i = 0; i < 10; ++i) {
6385 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6386     for (int i = 0; i < 10; ++i)
6387       ;
6388   }
6389 #pragma omp target
6390 #pragma omp teams
6391 #pragma omp distribute parallel for simd
6392   for (int i = 0; i < 10; ++i) {
6393 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6394     for (int i = 0; i < 10; ++i)
6395       ;
6396   }
6397 #pragma omp target
6398 #pragma omp teams
6399 #pragma omp distribute parallel for simd
6400   for (int i = 0; i < 10; ++i) {
6401 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6402     for (int i = 0; i < 10; ++i)
6403       ;
6404   }
6405 #pragma omp target
6406 #pragma omp teams
6407 #pragma omp distribute parallel for simd
6408   for (int i = 0; i < 10; ++i) {
6409 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6410     {
6411       bar();
6412     }
6413   }
6414 #pragma omp target
6415 #pragma omp teams
6416 #pragma omp distribute parallel for simd
6417   for (int i = 0; i < 10; ++i) {
6418 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6419     {
6420       bar();
6421     }
6422   }
6423 #pragma omp target
6424 #pragma omp teams
6425 #pragma omp distribute parallel for simd
6426   for (int i = 0; i < 10; ++i) {
6427 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6428     {
6429       bar();
6430     }
6431   }
6432 #pragma omp target
6433 #pragma omp teams
6434 #pragma omp distribute parallel for simd
6435   for (int i = 0; i < 10; ++i) {
6436 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6437     {
6438       bar();
6439     }
6440   }
6441 #pragma omp target
6442 #pragma omp teams
6443 #pragma omp distribute parallel for simd
6444   for (int i = 0; i < 10; ++i) {
6445 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6446     {
6447       bar();
6448     }
6449   }
6450 #pragma omp target
6451 #pragma omp teams
6452 #pragma omp distribute parallel for simd
6453   for (int i = 0; i < 10; ++i) {
6454 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6455     {
6456 #pragma omp single
6457       {
6458         bar();
6459       }
6460     }
6461   }
6462 #pragma omp target
6463 #pragma omp teams
6464 #pragma omp distribute parallel for simd
6465   for (int i = 0; i < 10; ++i) {
6466 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6467     for (int i = 0; i < 10; ++i)
6468       ;
6469   }
6470 #pragma omp target
6471 #pragma omp teams
6472 #pragma omp distribute parallel for simd
6473   for (int i = 0; i < 10; ++i) {
6474 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6475     for (int i = 0; i < 10; ++i)
6476       ;
6477   }
6478 #pragma omp target
6479 #pragma omp teams
6480 #pragma omp distribute parallel for simd
6481   for (int i = 0; i < 10; ++i) {
6482 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6483     {
6484       bar();
6485     }
6486   }
6487 #pragma omp target
6488 #pragma omp teams
6489 #pragma omp distribute parallel for simd
6490   for (int i = 0; i < 10; ++i) {
6491 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6492     {
6493       bar();
6494     }
6495   }
6496 #pragma omp target
6497 #pragma omp teams
6498 #pragma omp distribute parallel for simd
6499   for (int i = 0; i < 10; ++i) {
6500 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6501     bar();
6502   }
6503 #pragma omp target
6504 #pragma omp teams
6505 #pragma omp distribute parallel for simd
6506   for (int i = 0; i < 10; ++i) {
6507 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6508     bar();
6509   }
6510 #pragma omp target
6511 #pragma omp teams
6512 #pragma omp distribute parallel for simd
6513   for (int i = 0; i < 10; ++i) {
6514 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
6515     bar();
6516   }
6517 #pragma omp target
6518 #pragma omp teams
6519 #pragma omp distribute parallel for simd
6520   for (int i = 0; i < 10; ++i) {
6521 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6522     bar();
6523   }
6524 #pragma omp target
6525 #pragma omp teams
6526 #pragma omp distribute parallel for simd
6527   for (int i = 0; i < 10; ++i) {
6528 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6529     bar();
6530   }
6531 #pragma omp target
6532 #pragma omp teams
6533 #pragma omp distribute parallel for simd
6534   for (int i = 0; i < 10; ++i) {
6535 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6536     bar();
6537   }
6538 #pragma omp target
6539 #pragma omp teams
6540 #pragma omp distribute parallel for simd
6541   for (int i = 0; i < 10; ++i) {
6542 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
6543     ++a;
6544   }
6545 #pragma omp target
6546 #pragma omp teams
6547 #pragma omp distribute parallel for simd
6548   for (int i = 0; i < 10; ++i) {
6549 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6550     ++a;
6551   }
6552 #pragma omp target
6553 #pragma omp teams
6554 #pragma omp distribute parallel for simd
6555   for (int i = 0; i < 10; ++i) {
6556 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6557     ++a;
6558   }
6559 #pragma omp target
6560 #pragma omp teams
6561 #pragma omp distribute parallel for simd
6562   for (int i = 0; i < 10; ++i) {
6563 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6564     for (int i = 0; i < 10; ++i)
6565       ;
6566   }
6567 #pragma omp target
6568 #pragma omp teams
6569 #pragma omp distribute parallel for simd
6570   for (int i = 0; i < 10; ++i) {
6571 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6572     ++a;
6573   }
6574 #pragma omp target
6575 #pragma omp teams
6576 #pragma omp distribute parallel for simd
6577   for (int i = 0; i < 10; ++i) {
6578 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6579     ++a;
6580   }
6581 #pragma omp target
6582 #pragma omp teams
6583 #pragma omp distribute parallel for simd
6584   for (int i = 0; i < 10; ++i) {
6585 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6586     ++a;
6587   }
6588 #pragma omp target
6589 #pragma omp teams
6590 #pragma omp distribute parallel for simd
6591   for (int i = 0; i < 10; ++i) {
6592 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6593     ++a;
6594   }
6595 #pragma omp target
6596 #pragma omp teams
6597 #pragma omp distribute parallel for simd
6598   for (int i = 0; i < 10; ++i) {
6599 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6600     for (int i = 0; i < 10; ++i)
6601       ++a;
6602   }
6603 #pragma omp target
6604 #pragma omp teams
6605 #pragma omp distribute parallel for simd
6606   for (int i = 0; i < 10; ++i) {
6607 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6608     for (int i = 0; i < 10; ++i)
6609       ++a;
6610   }
6611 #pragma omp target
6612 #pragma omp teams
6613 #pragma omp distribute parallel for simd
6614   for (int i = 0; i < 10; ++i) {
6615 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6616     for (int i = 0; i < 10; ++i)
6617       ++a;
6618   }
6619 #pragma omp target
6620 #pragma omp teams
6621 #pragma omp distribute parallel for simd
6622   for (int i = 0; i < 10; ++i) {
6623 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6624     for (int i = 0; i < 10; ++i)
6625       ++a;
6626   }
6627 #pragma omp target
6628 #pragma omp teams
6629 #pragma omp distribute parallel for simd
6630   for (int i = 0; i < 10; ++i) {
6631 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6632     for (int i = 0; i < 10; ++i)
6633       ++a;
6634   }
6635 #pragma omp target
6636 #pragma omp teams
6637 #pragma omp distribute parallel for simd
6638   for (int i = 0; i < 10; ++i) {
6639 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6640     for (int i = 0; i < 10; ++i)
6641       ++a;
6642   }
6643 #pragma omp target
6644 #pragma omp teams
6645 #pragma omp distribute parallel for simd
6646   for (int i = 0; i < 10; ++i) {
6647 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6648     ++a;
6649   }
6650 #pragma omp target
6651 #pragma omp teams
6652 #pragma omp distribute parallel for simd
6653   for (int i = 0; i < 10; ++i) {
6654 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6655     for (int i = 0; i < 10; ++i)
6656       ++a;
6657   }
6658 #pragma omp target
6659 #pragma omp teams
6660 #pragma omp distribute parallel for simd
6661   for (int i = 0; i < 10; ++i) {
6662 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6663     for (int i = 0; i < 10; ++i)
6664       ++a;
6665   }
6666 #pragma omp target
6667 #pragma omp teams
6668 #pragma omp distribute parallel for simd
6669   for (int i = 0; i < 10; ++i) {
6670 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6671     for (int i = 0; i < 10; ++i)
6672       ++a;
6673   }
6674 #pragma omp target
6675 #pragma omp teams
6676 #pragma omp distribute parallel for simd
6677   for (int i = 0; i < 10; ++i) {
6678 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6679     for (int i = 0; i < 10; ++i)
6680       ++a;
6681   }
6682 
6683 // TARGET SIMD DIRECTIVE
6684 #pragma omp target simd
6685   for (int i = 0; i < 10; ++i) {
6686 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6687     for (int i = 0; i < 10; ++i)
6688       ;
6689   }
6690 #pragma omp target simd
6691   for (int i = 0; i < 10; ++i) {
6692 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6693     for (int i = 0; i < 10; ++i)
6694       ;
6695   }
6696 #pragma omp target simd
6697   for (int i = 0; i < 10; ++i) {
6698 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6699     for (int i = 0; i < 10; ++i)
6700       ;
6701   }
6702 #pragma omp target simd
6703   for (int i = 0; i < 10; ++i) {
6704 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6705     for (int i = 0; i < 10; ++i)
6706       ;
6707   }
6708 #pragma omp target simd
6709   for (int i = 0; i < 10; ++i) {
6710 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6711     for (int i = 0; i < 10; ++i)
6712       ;
6713   }
6714 #pragma omp target simd
6715   for (int i = 0; i < 10; ++i) {
6716 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6717     for (int i = 0; i < 10; ++i)
6718       ;
6719   }
6720 #pragma omp target simd
6721   for (int i = 0; i < 10; ++i) {
6722 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6723     {
6724       bar();
6725     }
6726   }
6727 #pragma omp target simd
6728   for (int i = 0; i < 10; ++i) {
6729 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6730     {
6731       bar();
6732     }
6733   }
6734 #pragma omp target simd
6735   for (int i = 0; i < 10; ++i) {
6736 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6737     {
6738       bar();
6739     }
6740   }
6741 #pragma omp target simd
6742   for (int i = 0; i < 10; ++i) {
6743 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6744     {
6745       bar();
6746     }
6747   }
6748 #pragma omp target simd
6749   for (int i = 0; i < 10; ++i) {
6750 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6751     {
6752       bar();
6753     }
6754   }
6755 #pragma omp target simd
6756   for (int i = 0; i < 10; ++i) {
6757 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6758     {
6759 #pragma omp single
6760       {
6761         bar();
6762       }
6763     }
6764   }
6765 #pragma omp target simd
6766   for (int i = 0; i < 10; ++i) {
6767 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6768     for (int i = 0; i < 10; ++i)
6769       ;
6770   }
6771 #pragma omp target simd
6772   for (int i = 0; i < 10; ++i) {
6773 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6774     for (int i = 0; i < 10; ++i)
6775       ;
6776   }
6777 #pragma omp target simd
6778   for (int i = 0; i < 10; ++i) {
6779 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6780     {
6781       bar();
6782     }
6783   }
6784 #pragma omp target simd
6785   for (int i = 0; i < 10; ++i) {
6786 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6787     {
6788       bar();
6789     }
6790   }
6791 #pragma omp target simd
6792   for (int i = 0; i < 10; ++i) {
6793 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6794     bar();
6795   }
6796 #pragma omp target simd
6797   for (int i = 0; i < 10; ++i) {
6798 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6799     bar();
6800   }
6801 #pragma omp target simd
6802   for (int i = 0; i < 10; ++i) {
6803 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
6804     bar();
6805   }
6806 #pragma omp target simd
6807   for (int i = 0; i < 10; ++i) {
6808 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6809     bar();
6810   }
6811 #pragma omp target simd
6812   for (int i = 0; i < 10; ++i) {
6813 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6814     bar();
6815   }
6816 #pragma omp target simd
6817   for (int i = 0; i < 10; ++i) {
6818 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6819     bar();
6820   }
6821 #pragma omp target simd
6822   for (int i = 0; i < 10; ++i) {
6823 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
6824     ++a;
6825   }
6826 #pragma omp target simd
6827   for (int i = 0; i < 10; ++i) {
6828 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6829     ++a;
6830   }
6831 #pragma omp target simd
6832   for (int i = 0; i < 10; ++i) {
6833 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6834     ++a;
6835   }
6836 #pragma omp target simd
6837   for (int i = 0; i < 10; ++i) {
6838 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6839     for (int i = 0; i < 10; ++i)
6840       ;
6841   }
6842 #pragma omp target simd
6843   for (int i = 0; i < 10; ++i) {
6844 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6845     ++a;
6846   }
6847 #pragma omp target simd
6848   for (int i = 0; i < 10; ++i) {
6849 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6850     ++a;
6851   }
6852 #pragma omp target simd
6853   for (int i = 0; i < 10; ++i) {
6854 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6855     ++a;
6856   }
6857 #pragma omp target simd
6858   for (int i = 0; i < 10; ++i) {
6859 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6860     ++a;
6861   }
6862 #pragma omp target simd
6863   for (int i = 0; i < 10; ++i) {
6864 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6865     for (int i = 0; i < 10; ++i)
6866       ++a;
6867   }
6868 #pragma omp target simd
6869   for (int i = 0; i < 10; ++i) {
6870 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6871     for (int i = 0; i < 10; ++i)
6872       ++a;
6873   }
6874 #pragma omp target simd
6875   for (int i = 0; i < 10; ++i) {
6876 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6877     for (int i = 0; i < 10; ++i)
6878       ++a;
6879   }
6880 #pragma omp target simd
6881   for (int i = 0; i < 10; ++i) {
6882 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6883     for (int i = 0; i < 10; ++i)
6884       ++a;
6885   }
6886 #pragma omp target simd
6887   for (int i = 0; i < 10; ++i) {
6888 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6889     for (int i = 0; i < 10; ++i)
6890       ++a;
6891   }
6892 #pragma omp target simd
6893   for (int i = 0; i < 10; ++i) {
6894 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6895     for (int i = 0; i < 10; ++i)
6896       ++a;
6897   }
6898 #pragma omp target simd
6899   for (int i = 0; i < 10; ++i) {
6900 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6901     for (int i = 0; i < 10; ++i)
6902       ++a;
6903   }
6904 #pragma omp target simd
6905   for (int i = 0; i < 10; ++i) {
6906 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6907     for (int i = 0; i < 10; ++i)
6908       ++a;
6909   }
6910 
6911 // TEAMS DISTRIBUTE DIRECTIVE
6912 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6913   for (int i = 0; i < 10; ++i)
6914     ;
6915 #pragma omp target
6916 #pragma omp teams distribute
6917   for (int i = 0; i < 10; ++i) {
6918 #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?}}
6919     for (int i = 0; i < 10; ++i)
6920       ;
6921   }
6922 #pragma omp target
6923 #pragma omp teams distribute
6924   for (int i = 0; i < 10; ++i) {
6925 #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?}}
6926     for (int i = 0; i < 10; ++i)
6927       ;
6928   }
6929 #pragma omp target
6930 #pragma omp teams distribute
6931   for (int i = 0; i < 10; ++i) {
6932 #pragma omp for // OK
6933     for (int i = 0; i < 10; ++i)
6934       ;
6935   }
6936 #pragma omp target
6937 #pragma omp teams distribute
6938   for (int i = 0; i < 10; ++i) {
6939 #pragma omp simd // OK
6940     for (int i = 0; i < 10; ++i)
6941       ;
6942   }
6943 #pragma omp target
6944 #pragma omp teams distribute
6945   for (int i = 0; i < 10; ++i) {
6946 #pragma omp for simd // OK
6947     for (int i = 0; i < 10; ++i)
6948       ;
6949   }
6950 #pragma omp target
6951 #pragma omp teams distribute
6952   for (int i = 0; i < 10; ++i) {
6953 #pragma omp parallel // OK
6954     for (int i = 0; i < 10; ++i)
6955       ;
6956   }
6957 #pragma omp target
6958 #pragma omp teams distribute
6959   for (int i = 0; i < 10; ++i) {
6960 #pragma omp sections // OK
6961     {
6962       bar();
6963     }
6964   }
6965 #pragma omp target
6966 #pragma omp teams distribute
6967   for (int i = 0; i < 10; ++i) {
6968 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6969     {
6970       bar();
6971     }
6972   }
6973 #pragma omp target
6974 #pragma omp teams distribute
6975   for (int i = 0; i < 10; ++i) {
6976 #pragma omp single // OK
6977     {
6978       bar();
6979     }
6980   }
6981 #pragma omp target
6982 #pragma omp teams distribute
6983   for (int i = 0; i < 10; ++i) {
6984 #pragma omp master // OK
6985     {
6986       bar();
6987     }
6988   }
6989 #pragma omp target
6990 #pragma omp teams distribute
6991   for (int i = 0; i < 10; ++i) {
6992 #pragma omp critical // OK
6993     {
6994       bar();
6995     }
6996   }
6997 #pragma omp target
6998 #pragma omp teams distribute
6999   for (int i = 0; i < 10; ++i) {
7000 #pragma omp parallel // OK
7001     {
7002 #pragma omp single
7003       {
7004         bar();
7005       }
7006     }
7007   }
7008 #pragma omp target
7009 #pragma omp teams distribute
7010   for (int i = 0; i < 10; ++i) {
7011 #pragma omp parallel for // OK
7012     for (int i = 0; i < 10; ++i)
7013       ;
7014   }
7015 #pragma omp target
7016 #pragma omp teams distribute
7017   for (int i = 0; i < 10; ++i) {
7018 #pragma omp parallel for simd // OK
7019     for (int i = 0; i < 10; ++i)
7020       ;
7021   }
7022 #pragma omp target
7023 #pragma omp teams distribute
7024   for (int i = 0; i < 10; ++i) {
7025 #pragma omp parallel sections // OK
7026     {
7027       bar();
7028     }
7029   }
7030 #pragma omp target
7031 #pragma omp teams distribute
7032   for (int i = 0; i < 10; ++i) {
7033 #pragma omp task // OK
7034     {
7035       bar();
7036     }
7037   }
7038 #pragma omp target
7039 #pragma omp teams distribute
7040   for (int i = 0; i < 10; ++i) {
7041 #pragma omp taskyield // OK
7042     bar();
7043   }
7044 #pragma omp target
7045 #pragma omp teams distribute
7046   for (int i = 0; i < 10; ++i) {
7047 #pragma omp barrier // OK
7048     bar();
7049   }
7050 #pragma omp target
7051 #pragma omp teams distribute
7052   for (int i = 0; i < 10; ++i) {
7053 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7054     bar();
7055   }
7056 #pragma omp target
7057 #pragma omp teams distribute
7058   for (int i = 0; i < 10; ++i) {
7059 #pragma omp taskwait // OK
7060     bar();
7061   }
7062 #pragma omp target
7063 #pragma omp teams distribute
7064   for (int i = 0; i < 10; ++i) {
7065 #pragma omp flush // OK
7066     bar();
7067   }
7068 #pragma omp target
7069 #pragma omp teams distribute
7070   for (int i = 0; i < 10; ++i) {
7071 #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?}}
7072     bar();
7073   }
7074 #pragma omp target
7075 #pragma omp teams distribute
7076   for (int i = 0; i < 10; ++i) {
7077 #pragma omp atomic // OK
7078     ++a;
7079   }
7080 #pragma omp target
7081 #pragma omp teams distribute
7082   for (int i = 0; i < 10; ++i) {
7083 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7084     ++a;
7085   }
7086 #pragma omp target
7087 #pragma omp teams distribute
7088   for (int i = 0; i < 10; ++i) {
7089 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7090     ++a;
7091   }
7092 #pragma omp target
7093 #pragma omp teams distribute
7094   for (int i = 0; i < 10; ++i) {
7095 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7096     for (int i = 0; i < 10; ++i)
7097       ;
7098   }
7099 #pragma omp target
7100 #pragma omp teams distribute
7101   for (int i = 0; i < 10; ++i) {
7102 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7103     ++a;
7104   }
7105 #pragma omp target
7106 #pragma omp teams distribute
7107   for (int i = 0; i < 10; ++i) {
7108 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7109     ++a;
7110   }
7111 #pragma omp target
7112 #pragma omp teams distribute
7113   for (int i = 0; i < 10; ++i) {
7114 #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?}}
7115     ++a;
7116   }
7117 #pragma omp target
7118 #pragma omp teams distribute
7119   for (int i = 0; i < 10; ++i) {
7120 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7121     ++a;
7122   }
7123 #pragma omp target
7124 #pragma omp teams distribute
7125   for (int i = 0; i < 10; ++i) {
7126 #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?}}
7127     for (int i = 0; i < 10; ++i)
7128       ++a;
7129   }
7130 #pragma omp target
7131 #pragma omp teams distribute
7132   for (int i = 0; i < 10; ++i) {
7133 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7134     for (int i = 0; i < 10; ++i)
7135       ++a;
7136   }
7137 #pragma omp target
7138 #pragma omp teams distribute
7139   for (int i = 0; i < 10; ++i) {
7140 #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?}}
7141     for (int i = 0; i < 10; ++i)
7142       ++a;
7143   }
7144 #pragma omp target
7145 #pragma omp teams distribute
7146   for (int i = 0; i < 10; ++i) {
7147 #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?}}
7148     for (int i = 0; i < 10; ++i)
7149       ++a;
7150   }
7151 #pragma omp target
7152 #pragma omp teams distribute
7153   for (int i = 0; i < 10; ++i) {
7154 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
7155     for (int i = 0; i < 10; ++i)
7156       ++a;
7157   }
7158 #pragma omp target
7159 #pragma omp teams distribute
7160   for (int i = 0; i < 10; ++i) {
7161 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7162     for (int i = 0; i < 10; ++i)
7163       ++a;
7164   }
7165 #pragma omp target
7166 #pragma omp teams distribute
7167   for (int i = 0; i < 10; ++i) {
7168 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7169     for (int i = 0; i < 10; ++i)
7170       ++a;
7171   }
7172 #pragma omp target
7173 #pragma omp teams distribute
7174   for (int i = 0; i < 10; ++i) {
7175 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7176     for (int i = 0; i < 10; ++i)
7177       ++a;
7178   }
7179 
7180 // TEAMS DISTRIBUTE DIRECTIVE
7181 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7182   for (int i = 0; i < 10; ++i)
7183     ;
7184 #pragma omp target
7185 #pragma omp teams distribute
7186   for (int i = 0; i < 10; ++i) {
7187 #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?}}
7188     for (int i = 0; i < 10; ++i)
7189       ;
7190   }
7191 #pragma omp target
7192 #pragma omp teams distribute
7193   for (int i = 0; i < 10; ++i) {
7194 #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?}}
7195     for (int i = 0; i < 10; ++i)
7196       ;
7197   }
7198 #pragma omp target
7199 #pragma omp teams distribute
7200   for (int i = 0; i < 10; ++i) {
7201 #pragma omp for // OK
7202     for (int i = 0; i < 10; ++i)
7203       ;
7204   }
7205 #pragma omp target
7206 #pragma omp teams distribute
7207   for (int i = 0; i < 10; ++i) {
7208 #pragma omp simd // OK
7209     for (int i = 0; i < 10; ++i)
7210       ;
7211   }
7212 #pragma omp target
7213 #pragma omp teams distribute
7214   for (int i = 0; i < 10; ++i) {
7215 #pragma omp for simd // OK
7216     for (int i = 0; i < 10; ++i)
7217       ;
7218   }
7219 #pragma omp target
7220 #pragma omp teams distribute
7221   for (int i = 0; i < 10; ++i) {
7222 #pragma omp parallel // OK
7223     for (int i = 0; i < 10; ++i)
7224       ;
7225   }
7226 #pragma omp target
7227 #pragma omp teams distribute
7228   for (int i = 0; i < 10; ++i) {
7229 #pragma omp sections // OK
7230     {
7231       bar();
7232     }
7233   }
7234 #pragma omp target
7235 #pragma omp teams distribute
7236   for (int i = 0; i < 10; ++i) {
7237 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
7238     {
7239       bar();
7240     }
7241   }
7242 #pragma omp target
7243 #pragma omp teams distribute
7244   for (int i = 0; i < 10; ++i) {
7245 #pragma omp single // OK
7246     {
7247       bar();
7248     }
7249   }
7250 #pragma omp target
7251 #pragma omp teams distribute
7252   for (int i = 0; i < 10; ++i) {
7253 #pragma omp master // OK
7254     {
7255       bar();
7256     }
7257   }
7258 #pragma omp target
7259 #pragma omp teams distribute
7260   for (int i = 0; i < 10; ++i) {
7261 #pragma omp critical // OK
7262     {
7263       bar();
7264     }
7265   }
7266 #pragma omp target
7267 #pragma omp teams distribute
7268   for (int i = 0; i < 10; ++i) {
7269 #pragma omp parallel // OK
7270     {
7271 #pragma omp single
7272       {
7273         bar();
7274       }
7275     }
7276   }
7277 #pragma omp target
7278 #pragma omp teams distribute
7279   for (int i = 0; i < 10; ++i) {
7280 #pragma omp parallel for // OK
7281     for (int i = 0; i < 10; ++i)
7282       ;
7283   }
7284 #pragma omp target
7285 #pragma omp teams distribute
7286   for (int i = 0; i < 10; ++i) {
7287 #pragma omp parallel for simd // OK
7288     for (int i = 0; i < 10; ++i)
7289       ;
7290   }
7291 #pragma omp target
7292 #pragma omp teams distribute
7293   for (int i = 0; i < 10; ++i) {
7294 #pragma omp parallel sections // OK
7295     {
7296       bar();
7297     }
7298   }
7299 #pragma omp target
7300 #pragma omp teams distribute
7301   for (int i = 0; i < 10; ++i) {
7302 #pragma omp task // OK
7303     {
7304       bar();
7305     }
7306   }
7307 #pragma omp target
7308 #pragma omp teams distribute
7309   for (int i = 0; i < 10; ++i) {
7310 #pragma omp taskyield // OK
7311     bar();
7312   }
7313 #pragma omp target
7314 #pragma omp teams distribute
7315   for (int i = 0; i < 10; ++i) {
7316 #pragma omp barrier // OK
7317     bar();
7318   }
7319 #pragma omp target
7320 #pragma omp teams distribute
7321   for (int i = 0; i < 10; ++i) {
7322 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7323     bar();
7324   }
7325 #pragma omp target
7326 #pragma omp teams distribute
7327   for (int i = 0; i < 10; ++i) {
7328 #pragma omp taskwait // OK
7329     bar();
7330   }
7331 #pragma omp target
7332 #pragma omp teams distribute
7333   for (int i = 0; i < 10; ++i) {
7334 #pragma omp flush // OK
7335     bar();
7336   }
7337 #pragma omp target
7338 #pragma omp teams distribute
7339   for (int i = 0; i < 10; ++i) {
7340 #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?}}
7341     bar();
7342   }
7343 #pragma omp target
7344 #pragma omp teams distribute
7345   for (int i = 0; i < 10; ++i) {
7346 #pragma omp atomic // OK
7347     ++a;
7348   }
7349 #pragma omp target
7350 #pragma omp teams distribute
7351   for (int i = 0; i < 10; ++i) {
7352 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7353     ++a;
7354   }
7355 #pragma omp target
7356 #pragma omp teams distribute
7357   for (int i = 0; i < 10; ++i) {
7358 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7359     ++a;
7360   }
7361 #pragma omp target
7362 #pragma omp teams distribute
7363   for (int i = 0; i < 10; ++i) {
7364 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7365     for (int i = 0; i < 10; ++i)
7366       ;
7367   }
7368 #pragma omp target
7369 #pragma omp teams distribute
7370   for (int i = 0; i < 10; ++i) {
7371 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7372     ++a;
7373   }
7374 #pragma omp target
7375 #pragma omp teams distribute
7376   for (int i = 0; i < 10; ++i) {
7377 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7378     ++a;
7379   }
7380 #pragma omp target
7381 #pragma omp teams distribute
7382   for (int i = 0; i < 10; ++i) {
7383 #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?}}
7384     ++a;
7385   }
7386 #pragma omp target
7387 #pragma omp teams distribute
7388   for (int i = 0; i < 10; ++i) {
7389 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7390     ++a;
7391   }
7392 #pragma omp target
7393 #pragma omp teams distribute
7394   for (int i = 0; i < 10; ++i) {
7395 #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?}}
7396     for (int i = 0; i < 10; ++i)
7397       ++a;
7398   }
7399 #pragma omp target
7400 #pragma omp teams distribute
7401   for (int i = 0; i < 10; ++i) {
7402 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7403     for (int i = 0; i < 10; ++i)
7404       ++a;
7405   }
7406 #pragma omp target
7407 #pragma omp teams distribute
7408   for (int i = 0; i < 10; ++i) {
7409 #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?}}
7410     for (int i = 0; i < 10; ++i)
7411       ++a;
7412   }
7413 #pragma omp target
7414 #pragma omp teams distribute
7415   for (int i = 0; i < 10; ++i) {
7416 #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?}}
7417     for (int i = 0; i < 10; ++i)
7418       ++a;
7419   }
7420 #pragma omp target
7421 #pragma omp teams distribute
7422   for (int i = 0; i < 10; ++i) {
7423 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
7424     for (int i = 0; i < 10; ++i)
7425       ++a;
7426   }
7427 #pragma omp target
7428 #pragma omp teams distribute
7429   for (int i = 0; i < 10; ++i) {
7430 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
7431     for (int i = 0; i < 10; ++i)
7432       ++a;
7433   }
7434 #pragma omp target
7435 #pragma omp teams distribute
7436   for (int i = 0; i < 10; ++i) {
7437 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7438     ++a;
7439   }
7440 #pragma omp target
7441 #pragma omp teams distribute
7442   for (int i = 0; i < 10; ++i) {
7443 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
7444     for (int i = 0; i < 10; ++i)
7445       ++a;
7446   }
7447 #pragma omp target
7448 #pragma omp teams distribute
7449   for (int i = 0; i < 10; ++i) {
7450 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7451     for (int i = 0; i < 10; ++i)
7452       ++a;
7453   }
7454 #pragma omp target
7455 #pragma omp teams distribute
7456   for (int i = 0; i < 10; ++i) {
7457 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7458     for (int i = 0; i < 10; ++i)
7459       ++a;
7460   }
7461 #pragma omp target
7462 #pragma omp teams distribute
7463   for (int i = 0; i < 10; ++i) {
7464 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7465     for (int i = 0; i < 10; ++i)
7466       ++a;
7467   }
7468 
7469 // TEAMS DISTRIBUTE SIMD DIRECTIVE
7470 #pragma omp teams distribute simd // omp45-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7471   for (int i = 0; i < 10; ++i)
7472     ;
7473 #pragma omp target
7474 #pragma omp teams distribute simd
7475   for (int i = 0; i < 10; ++i) {
7476 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7477     for (int i = 0; i < 10; ++i)
7478       ;
7479   }
7480 #pragma omp target
7481 #pragma omp teams distribute simd
7482   for (int i = 0; i < 10; ++i) {
7483 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7484     for (int i = 0; i < 10; ++i)
7485       ;
7486   }
7487 #pragma omp target
7488 #pragma omp teams distribute simd
7489   for (int i = 0; i < 10; ++i) {
7490 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7491     for (int i = 0; i < 10; ++i)
7492       ;
7493   }
7494 #pragma omp target
7495 #pragma omp teams distribute simd
7496   for (int i = 0; i < 10; ++i) {
7497 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7498     for (int i = 0; i < 10; ++i)
7499       ;
7500   }
7501 #pragma omp target
7502 #pragma omp teams distribute simd
7503   for (int i = 0; i < 10; ++i) {
7504 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7505     for (int i = 0; i < 10; ++i)
7506       ;
7507   }
7508 #pragma omp target
7509 #pragma omp teams distribute simd
7510   for (int i = 0; i < 10; ++i) {
7511 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7512     for (int i = 0; i < 10; ++i)
7513       ;
7514   }
7515 #pragma omp target
7516 #pragma omp teams distribute simd
7517   for (int i = 0; i < 10; ++i) {
7518 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7519     {
7520       bar();
7521     }
7522   }
7523 #pragma omp target
7524 #pragma omp teams distribute simd
7525   for (int i = 0; i < 10; ++i) {
7526 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7527     {
7528       bar();
7529     }
7530   }
7531 #pragma omp target
7532 #pragma omp teams distribute simd
7533   for (int i = 0; i < 10; ++i) {
7534 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7535     {
7536       bar();
7537     }
7538   }
7539 #pragma omp target
7540 #pragma omp teams distribute simd
7541   for (int i = 0; i < 10; ++i) {
7542 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7543     {
7544       bar();
7545     }
7546   }
7547 #pragma omp target
7548 #pragma omp teams distribute simd
7549   for (int i = 0; i < 10; ++i) {
7550 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7551     {
7552       bar();
7553     }
7554   }
7555 #pragma omp target
7556 #pragma omp teams distribute simd
7557   for (int i = 0; i < 10; ++i) {
7558 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7559     {
7560 #pragma omp single
7561       {
7562         bar();
7563       }
7564     }
7565   }
7566 #pragma omp target
7567 #pragma omp teams distribute simd
7568   for (int i = 0; i < 10; ++i) {
7569 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7570     for (int i = 0; i < 10; ++i)
7571       ;
7572   }
7573 #pragma omp target
7574 #pragma omp teams distribute simd
7575   for (int i = 0; i < 10; ++i) {
7576 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7577     for (int i = 0; i < 10; ++i)
7578       ;
7579   }
7580 #pragma omp target
7581 #pragma omp teams distribute simd
7582   for (int i = 0; i < 10; ++i) {
7583 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7584     {
7585       bar();
7586     }
7587   }
7588 #pragma omp target
7589 #pragma omp teams distribute simd
7590   for (int i = 0; i < 10; ++i) {
7591 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7592     {
7593       bar();
7594     }
7595   }
7596 #pragma omp target
7597 #pragma omp teams distribute simd
7598   for (int i = 0; i < 10; ++i) {
7599 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7600     bar();
7601   }
7602 #pragma omp target
7603 #pragma omp teams distribute simd
7604   for (int i = 0; i < 10; ++i) {
7605 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7606     bar();
7607   }
7608 #pragma omp target
7609 #pragma omp teams distribute simd
7610   for (int i = 0; i < 10; ++i) {
7611 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7612     bar();
7613   }
7614 #pragma omp target
7615 #pragma omp teams distribute simd
7616   for (int i = 0; i < 10; ++i) {
7617 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7618     bar();
7619   }
7620 #pragma omp target
7621 #pragma omp teams distribute simd
7622   for (int i = 0; i < 10; ++i) {
7623 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7624     bar();
7625   }
7626 #pragma omp target
7627 #pragma omp teams distribute simd
7628   for (int i = 0; i < 10; ++i) {
7629 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7630     bar();
7631   }
7632 #pragma omp target
7633 #pragma omp teams distribute simd
7634   for (int i = 0; i < 10; ++i) {
7635 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7636     ++a;
7637   }
7638 #pragma omp target
7639 #pragma omp teams distribute simd
7640   for (int i = 0; i < 10; ++i) {
7641 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7642     ++a;
7643   }
7644 #pragma omp target
7645 #pragma omp teams distribute simd
7646   for (int i = 0; i < 10; ++i) {
7647 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7648     ++a;
7649   }
7650 #pragma omp target
7651 #pragma omp teams distribute simd
7652   for (int i = 0; i < 10; ++i) {
7653 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7654     for (int i = 0; i < 10; ++i)
7655       ;
7656   }
7657 #pragma omp target
7658 #pragma omp teams distribute simd
7659   for (int i = 0; i < 10; ++i) {
7660 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7661     ++a;
7662   }
7663 #pragma omp target
7664 #pragma omp teams distribute simd
7665   for (int i = 0; i < 10; ++i) {
7666 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7667     ++a;
7668   }
7669 #pragma omp target
7670 #pragma omp teams distribute simd
7671   for (int i = 0; i < 10; ++i) {
7672 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7673     ++a;
7674   }
7675 #pragma omp target
7676 #pragma omp teams distribute simd
7677   for (int i = 0; i < 10; ++i) {
7678 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7679     ++a;
7680   }
7681 #pragma omp target
7682 #pragma omp teams distribute simd
7683   for (int i = 0; i < 10; ++i) {
7684 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7685     for (int i = 0; i < 10; ++i)
7686       ++a;
7687   }
7688 #pragma omp target
7689 #pragma omp teams distribute simd
7690   for (int i = 0; i < 10; ++i) {
7691 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7692     for (int i = 0; i < 10; ++i)
7693       ++a;
7694   }
7695 #pragma omp target
7696 #pragma omp teams distribute simd
7697   for (int i = 0; i < 10; ++i) {
7698 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7699     for (int i = 0; i < 10; ++i)
7700       ++a;
7701   }
7702 #pragma omp target
7703 #pragma omp teams distribute simd
7704   for (int i = 0; i < 10; ++i) {
7705 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7706     for (int i = 0; i < 10; ++i)
7707       ++a;
7708   }
7709 #pragma omp target
7710 #pragma omp teams distribute simd
7711   for (int i = 0; i < 10; ++i) {
7712 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7713     for (int i = 0; i < 10; ++i)
7714       ++a;
7715   }
7716 #pragma omp target
7717 #pragma omp teams distribute simd
7718   for (int i = 0; i < 10; ++i) {
7719 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7720     for (int i = 0; i < 10; ++i)
7721       ++a;
7722   }
7723 #pragma omp target
7724 #pragma omp teams distribute simd
7725   for (int i = 0; i < 10; ++i) {
7726 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7727     ++a;
7728   }
7729 #pragma omp target
7730 #pragma omp teams distribute simd
7731   for (int i = 0; i < 10; ++i) {
7732 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7733     for (int i = 0; i < 10; ++i)
7734       ++a;
7735   }
7736 #pragma omp target
7737 #pragma omp teams distribute simd
7738   for (int i = 0; i < 10; ++i) {
7739 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7740     for (int i = 0; i < 10; ++i)
7741       ++a;
7742   }
7743 #pragma omp target
7744 #pragma omp teams distribute simd
7745   for (int i = 0; i < 10; ++i) {
7746 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7747     for (int i = 0; i < 10; ++i)
7748       ++a;
7749   }
7750 #pragma omp target
7751 #pragma omp teams distribute simd
7752   for (int i = 0; i < 10; ++i) {
7753 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7754     for (int i = 0; i < 10; ++i)
7755       ++a;
7756   }
7757 
7758 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
7759 #pragma omp teams distribute parallel for simd // omp45-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7760   for (int i = 0; i < 10; ++i)
7761     ;
7762 #pragma omp target
7763 #pragma omp teams distribute parallel for simd
7764   for (int i = 0; i < 10; ++i) {
7765 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7766     for (int i = 0; i < 10; ++i)
7767       ;
7768   }
7769 #pragma omp target
7770 #pragma omp teams distribute parallel for simd
7771   for (int i = 0; i < 10; ++i) {
7772 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7773     for (int i = 0; i < 10; ++i)
7774       ;
7775   }
7776 #pragma omp target
7777 #pragma omp teams distribute parallel for simd
7778   for (int i = 0; i < 10; ++i) {
7779 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7780     for (int i = 0; i < 10; ++i)
7781       ;
7782   }
7783 #pragma omp target
7784 #pragma omp teams distribute parallel for simd
7785   for (int i = 0; i < 10; ++i) {
7786 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7787     for (int i = 0; i < 10; ++i)
7788       ;
7789   }
7790 #pragma omp target
7791 #pragma omp teams distribute parallel for simd
7792   for (int i = 0; i < 10; ++i) {
7793 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7794     for (int i = 0; i < 10; ++i)
7795       ;
7796   }
7797 #pragma omp target
7798 #pragma omp teams distribute parallel for simd
7799   for (int i = 0; i < 10; ++i) {
7800 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7801     for (int i = 0; i < 10; ++i)
7802       ;
7803   }
7804 #pragma omp target
7805 #pragma omp teams distribute parallel for simd
7806   for (int i = 0; i < 10; ++i) {
7807 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7808     {
7809       bar();
7810     }
7811   }
7812 #pragma omp target
7813 #pragma omp teams distribute parallel for simd
7814   for (int i = 0; i < 10; ++i) {
7815 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7816     {
7817       bar();
7818     }
7819   }
7820 #pragma omp target
7821 #pragma omp teams distribute parallel for simd
7822   for (int i = 0; i < 10; ++i) {
7823 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7824     {
7825       bar();
7826     }
7827   }
7828 #pragma omp target
7829 #pragma omp teams distribute parallel for simd
7830   for (int i = 0; i < 10; ++i) {
7831 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7832     {
7833       bar();
7834     }
7835   }
7836 #pragma omp target
7837 #pragma omp teams distribute parallel for simd
7838   for (int i = 0; i < 10; ++i) {
7839 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7840     {
7841       bar();
7842     }
7843   }
7844 #pragma omp target
7845 #pragma omp teams distribute parallel for simd
7846   for (int i = 0; i < 10; ++i) {
7847 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7848     {
7849 #pragma omp single
7850       {
7851         bar();
7852       }
7853     }
7854   }
7855 #pragma omp target
7856 #pragma omp teams distribute parallel for simd
7857   for (int i = 0; i < 10; ++i) {
7858 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7859     for (int i = 0; i < 10; ++i)
7860       ;
7861   }
7862 #pragma omp target
7863 #pragma omp teams distribute parallel for simd
7864   for (int i = 0; i < 10; ++i) {
7865 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7866     for (int i = 0; i < 10; ++i)
7867       ;
7868   }
7869 #pragma omp target
7870 #pragma omp teams distribute parallel for simd
7871   for (int i = 0; i < 10; ++i) {
7872 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7873     {
7874       bar();
7875     }
7876   }
7877 #pragma omp target
7878 #pragma omp teams distribute parallel for simd
7879   for (int i = 0; i < 10; ++i) {
7880 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7881     {
7882       bar();
7883     }
7884   }
7885 #pragma omp target
7886 #pragma omp teams distribute parallel for simd
7887   for (int i = 0; i < 10; ++i) {
7888 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7889     bar();
7890   }
7891 #pragma omp target
7892 #pragma omp teams distribute parallel for simd
7893   for (int i = 0; i < 10; ++i) {
7894 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7895     bar();
7896   }
7897 #pragma omp target
7898 #pragma omp teams distribute parallel for simd
7899   for (int i = 0; i < 10; ++i) {
7900 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7901     bar();
7902   }
7903 #pragma omp target
7904 #pragma omp teams distribute parallel for simd
7905   for (int i = 0; i < 10; ++i) {
7906 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7907     bar();
7908   }
7909 #pragma omp target
7910 #pragma omp teams distribute parallel for simd
7911   for (int i = 0; i < 10; ++i) {
7912 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7913     bar();
7914   }
7915 #pragma omp target
7916 #pragma omp teams distribute parallel for simd
7917   for (int i = 0; i < 10; ++i) {
7918 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7919     bar();
7920   }
7921 #pragma omp target
7922 #pragma omp teams distribute parallel for simd
7923   for (int i = 0; i < 10; ++i) {
7924 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7925     ++a;
7926   }
7927 #pragma omp target
7928 #pragma omp teams distribute parallel for simd
7929   for (int i = 0; i < 10; ++i) {
7930 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7931     ++a;
7932   }
7933 #pragma omp target
7934 #pragma omp teams distribute parallel for simd
7935   for (int i = 0; i < 10; ++i) {
7936 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7937     ++a;
7938   }
7939 #pragma omp target
7940 #pragma omp teams distribute parallel for simd
7941   for (int i = 0; i < 10; ++i) {
7942 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7943     for (int i = 0; i < 10; ++i)
7944       ;
7945   }
7946 #pragma omp target
7947 #pragma omp teams distribute parallel for simd
7948   for (int i = 0; i < 10; ++i) {
7949 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7950     ++a;
7951   }
7952 #pragma omp target
7953 #pragma omp teams distribute parallel for simd
7954   for (int i = 0; i < 10; ++i) {
7955 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7956     ++a;
7957   }
7958 #pragma omp target
7959 #pragma omp teams distribute parallel for simd
7960   for (int i = 0; i < 10; ++i) {
7961 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7962     ++a;
7963   }
7964 #pragma omp target
7965 #pragma omp teams distribute parallel for simd
7966   for (int i = 0; i < 10; ++i) {
7967 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7968     ++a;
7969   }
7970 #pragma omp target
7971 #pragma omp teams distribute parallel for simd
7972   for (int i = 0; i < 10; ++i) {
7973 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7974     for (int i = 0; i < 10; ++i)
7975       ++a;
7976   }
7977 #pragma omp target
7978 #pragma omp teams distribute parallel for simd
7979   for (int i = 0; i < 10; ++i) {
7980 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7981     for (int i = 0; i < 10; ++i)
7982       ++a;
7983   }
7984 #pragma omp target
7985 #pragma omp teams distribute parallel for simd
7986   for (int i = 0; i < 10; ++i) {
7987 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7988     for (int i = 0; i < 10; ++i)
7989       ++a;
7990   }
7991 #pragma omp target
7992 #pragma omp teams distribute parallel for simd
7993   for (int i = 0; i < 10; ++i) {
7994 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7995     for (int i = 0; i < 10; ++i)
7996       ++a;
7997   }
7998 #pragma omp target
7999 #pragma omp teams distribute parallel for simd
8000   for (int i = 0; i < 10; ++i) {
8001 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8002     for (int i = 0; i < 10; ++i)
8003       ++a;
8004   }
8005 #pragma omp target
8006 #pragma omp teams distribute parallel for simd
8007   for (int i = 0; i < 10; ++i) {
8008 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8009     for (int i = 0; i < 10; ++i)
8010       ++a;
8011   }
8012 #pragma omp target
8013 #pragma omp teams distribute parallel for simd
8014   for (int i = 0; i < 10; ++i) {
8015 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8016     ++a;
8017   }
8018 #pragma omp target
8019 #pragma omp teams distribute parallel for simd
8020   for (int i = 0; i < 10; ++i) {
8021 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8022     for (int i = 0; i < 10; ++i)
8023       ++a;
8024   }
8025 #pragma omp target
8026 #pragma omp teams distribute parallel for simd
8027   for (int i = 0; i < 10; ++i) {
8028 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8029     for (int i = 0; i < 10; ++i)
8030       ++a;
8031   }
8032 #pragma omp target
8033 #pragma omp teams distribute parallel for simd
8034   for (int i = 0; i < 10; ++i) {
8035 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8036     for (int i = 0; i < 10; ++i)
8037       ++a;
8038   }
8039 #pragma omp target
8040 #pragma omp teams distribute parallel for simd
8041   for (int i = 0; i < 10; ++i) {
8042 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8043     for (int i = 0; i < 10; ++i)
8044       ++a;
8045   }
8046 
8047 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8048 #pragma omp teams distribute parallel for // omp45-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
8049   for (int i = 0; i < 10; ++i)
8050     ;
8051 #pragma omp target
8052 #pragma omp teams distribute parallel for
8053   for (int i = 0; i < 10; ++i) {
8054 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
8055     for (int i = 0; i < 10; ++i)
8056       ;
8057   }
8058 #pragma omp target
8059 #pragma omp teams distribute parallel for
8060   for (int i = 0; i < 10; ++i) {
8061 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8062     for (int i = 0; i < 10; ++i)
8063       ;
8064   }
8065 #pragma omp target
8066 #pragma omp teams distribute parallel for
8067   for (int i = 0; i < 10; ++i) {
8068 #pragma omp for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
8069     for (int i = 0; i < 10; ++i)
8070       ;
8071   }
8072 #pragma omp target
8073 #pragma omp teams distribute parallel for
8074   for (int i = 0; i < 10; ++i) {
8075 #pragma omp simd // OK
8076     for (int i = 0; i < 10; ++i)
8077       ;
8078   }
8079 #pragma omp target
8080 #pragma omp teams distribute parallel for
8081   for (int i = 0; i < 10; ++i) {
8082 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8083     for (int i = 0; i < 10; ++i)
8084       ;
8085   }
8086 #pragma omp target
8087 #pragma omp teams distribute parallel for
8088   for (int i = 0; i < 10; ++i) {
8089 #pragma omp parallel // OK
8090     for (int i = 0; i < 10; ++i)
8091       ;
8092   }
8093 #pragma omp target
8094 #pragma omp teams distribute parallel for
8095   for (int i = 0; i < 10; ++i) {
8096 #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8097     {
8098       bar();
8099     }
8100   }
8101 #pragma omp target
8102 #pragma omp teams distribute parallel for
8103   for (int i = 0; i < 10; ++i) {
8104 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
8105     {
8106       bar();
8107     }
8108   }
8109 #pragma omp target
8110 #pragma omp teams distribute parallel for
8111   for (int i = 0; i < 10; ++i) {
8112 #pragma omp single // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8113     {
8114       bar();
8115     }
8116   }
8117 #pragma omp target
8118 #pragma omp teams distribute parallel for
8119   for (int i = 0; i < 10; ++i) {
8120 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8121     {
8122       bar();
8123     }
8124   }
8125 #pragma omp target
8126 #pragma omp teams distribute parallel for
8127   for (int i = 0; i < 10; ++i) {
8128 #pragma omp critical // OK
8129     {
8130       bar();
8131     }
8132   }
8133 #pragma omp target
8134 #pragma omp teams distribute parallel for
8135   for (int i = 0; i < 10; ++i) {
8136 #pragma omp parallel // OK
8137     {
8138 #pragma omp single
8139       {
8140         bar();
8141       }
8142     }
8143   }
8144 #pragma omp target
8145 #pragma omp teams distribute parallel for
8146   for (int i = 0; i < 10; ++i) {
8147 #pragma omp parallel for // OK
8148     for (int i = 0; i < 10; ++i)
8149       ;
8150   }
8151 #pragma omp target
8152 #pragma omp teams distribute parallel for
8153   for (int i = 0; i < 10; ++i) {
8154 #pragma omp parallel for simd // OK
8155     for (int i = 0; i < 10; ++i)
8156       ;
8157   }
8158 #pragma omp target
8159 #pragma omp teams distribute parallel for
8160   for (int i = 0; i < 10; ++i) {
8161 #pragma omp parallel sections // OK
8162     {
8163       bar();
8164     }
8165   }
8166 #pragma omp target
8167 #pragma omp teams distribute parallel for
8168   for (int i = 0; i < 10; ++i) {
8169 #pragma omp task // OK
8170     {
8171       bar();
8172     }
8173   }
8174 #pragma omp target
8175 #pragma omp teams distribute parallel for
8176   for (int i = 0; i < 10; ++i) {
8177 #pragma omp taskyield // OK
8178     bar();
8179   }
8180 #pragma omp target
8181 #pragma omp teams distribute parallel for
8182   for (int i = 0; i < 10; ++i) {
8183 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8184     bar();
8185   }
8186 #pragma omp target
8187 #pragma omp teams distribute parallel for
8188   for (int i = 0; i < 10; ++i) {
8189 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8190     bar();
8191   }
8192 #pragma omp target
8193 #pragma omp teams distribute parallel for
8194   for (int i = 0; i < 10; ++i) {
8195 #pragma omp taskwait // OK
8196     bar();
8197   }
8198 #pragma omp target
8199 #pragma omp teams distribute parallel for
8200   for (int i = 0; i < 10; ++i) {
8201 #pragma omp flush // OK
8202     bar();
8203   }
8204 #pragma omp target
8205 #pragma omp teams distribute parallel for
8206   for (int i = 0; i < 10; ++i) {
8207 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8208     bar();
8209   }
8210 #pragma omp target
8211 #pragma omp teams distribute parallel for
8212   for (int i = 0; i < 10; ++i) {
8213 #pragma omp atomic // OK
8214     ++a;
8215   }
8216 #pragma omp target
8217 #pragma omp teams distribute parallel for
8218   for (int i = 0; i < 10; ++i) {
8219 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8220     ++a;
8221   }
8222 #pragma omp target
8223 #pragma omp teams distribute parallel for
8224   for (int i = 0; i < 10; ++i) {
8225 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
8226     ++a;
8227   }
8228 #pragma omp target
8229 #pragma omp teams distribute parallel for
8230   for (int i = 0; i < 10; ++i) {
8231 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8232     for (int i = 0; i < 10; ++i)
8233       ;
8234   }
8235 #pragma omp target
8236 #pragma omp teams distribute parallel for
8237   for (int i = 0; i < 10; ++i) {
8238 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8239     ++a;
8240   }
8241 #pragma omp target
8242 #pragma omp teams distribute parallel for
8243   for (int i = 0; i < 10; ++i) {
8244 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8245     ++a;
8246   }
8247 #pragma omp target
8248 #pragma omp teams distribute parallel for
8249   for (int i = 0; i < 10; ++i) {
8250 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8251     ++a;
8252   }
8253 #pragma omp target
8254 #pragma omp teams distribute parallel for
8255   for (int i = 0; i < 10; ++i) {
8256 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8257     ++a;
8258   }
8259 #pragma omp target
8260 #pragma omp teams distribute parallel for
8261   for (int i = 0; i < 10; ++i) {
8262 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8263     for (int i = 0; i < 10; ++i)
8264       ++a;
8265   }
8266 #pragma omp target
8267 #pragma omp teams distribute parallel for
8268   for (int i = 0; i < 10; ++i) {
8269 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
8270     for (int i = 0; i < 10; ++i)
8271       ++a;
8272   }
8273 #pragma omp target
8274 #pragma omp teams distribute parallel for
8275   for (int i = 0; i < 10; ++i) {
8276 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
8277     for (int i = 0; i < 10; ++i)
8278       ++a;
8279   }
8280 #pragma omp target
8281 #pragma omp teams distribute parallel for
8282   for (int i = 0; i < 10; ++i) {
8283 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
8284     for (int i = 0; i < 10; ++i)
8285       ++a;
8286   }
8287 #pragma omp target
8288 #pragma omp teams distribute parallel for
8289   for (int i = 0; i < 10; ++i) {
8290 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
8291     for (int i = 0; i < 10; ++i)
8292       ++a;
8293   }
8294 #pragma omp target
8295 #pragma omp teams distribute parallel for
8296   for (int i = 0; i < 10; ++i) {
8297 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
8298     for (int i = 0; i < 10; ++i)
8299       ++a;
8300   }
8301 #pragma omp target
8302 #pragma omp teams distribute parallel for
8303   for (int i = 0; i < 10; ++i) {
8304 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
8305     ++a;
8306   }
8307 #pragma omp target
8308 #pragma omp teams distribute parallel for
8309   for (int i = 0; i < 10; ++i) {
8310 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
8311     for (int i = 0; i < 10; ++i)
8312       ++a;
8313   }
8314 #pragma omp target
8315 #pragma omp teams distribute parallel for
8316   for (int i = 0; i < 10; ++i) {
8317 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
8318     for (int i = 0; i < 10; ++i)
8319       ++a;
8320   }
8321 #pragma omp target
8322 #pragma omp teams distribute parallel for
8323   for (int i = 0; i < 10; ++i) {
8324 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
8325     for (int i = 0; i < 10; ++i)
8326       ++a;
8327   }
8328 #pragma omp target
8329 #pragma omp teams distribute parallel for
8330   for (int i = 0; i < 10; ++i) {
8331 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
8332     for (int i = 0; i < 10; ++i)
8333       ++a;
8334   }
8335 
8336 // TARGET TEAMS DIRECTIVE
8337 #pragma omp target teams
8338 #pragma omp parallel
8339   bar();
8340 #pragma omp target teams
8341 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
8342   for (int i = 0; i < 10; ++i)
8343     ;
8344 #pragma omp target teams
8345 #pragma omp simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
8346   for (int i = 0; i < 10; ++i)
8347     ;
8348 #pragma omp target teams
8349 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8350   for (int i = 0; i < 10; ++i)
8351     ;
8352 #pragma omp target teams
8353 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8354   {
8355     bar();
8356   }
8357 #pragma omp target teams
8358 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
8359   {
8360     bar();
8361   }
8362 #pragma omp target teams
8363 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8364   bar();
8365 
8366 #pragma omp target teams
8367 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
8368   {
8369     bar();
8370   }
8371 #pragma omp target teams
8372 #pragma omp critical // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
8373   {
8374     bar();
8375   }
8376 #pragma omp target teams
8377 #pragma omp parallel for
8378   for (int i = 0; i < 10; ++i)
8379     ;
8380 #pragma omp target teams
8381 #pragma omp parallel for simd
8382   for (int i = 0; i < 10; ++i)
8383     ;
8384 #pragma omp target teams
8385 #pragma omp parallel sections
8386   {
8387     bar();
8388   }
8389 #pragma omp target teams
8390 #pragma omp task // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
8391   {
8392     bar();
8393   }
8394 #pragma omp target teams
8395   {
8396 #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
8397     bar();
8398   }
8399 #pragma omp target teams
8400   {
8401 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
8402     bar();
8403   }
8404 #pragma omp target teams
8405   {
8406 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
8407     bar();
8408   }
8409 #pragma omp target teams
8410   {
8411 #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
8412     bar();
8413   }
8414 #pragma omp target teams
8415   {
8416 #pragma omp flush // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
8417     bar();
8418   }
8419 #pragma omp target teams
8420   {
8421 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8422     bar();
8423   }
8424 #pragma omp target teams
8425   {
8426 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
8427     ++a;
8428   }
8429 #pragma omp target teams
8430   {
8431 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
8432     ++a;
8433   }
8434 #pragma omp target teams
8435   {
8436 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
8437     ++a;
8438   }
8439 #pragma omp target teams
8440 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8441   for (int i = 0; i < 10; ++i)
8442     ;
8443 #pragma omp target teams
8444   {
8445 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8446   }
8447 #pragma omp target teams
8448   {
8449 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8450   }
8451 #pragma omp target teams
8452   {
8453 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8454     ++a;
8455   }
8456 #pragma omp target teams
8457   {
8458 #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
8459   for (int i = 0; i < 10; ++i)
8460     ++a;
8461   }
8462 #pragma omp target teams
8463 #pragma omp distribute
8464   for (int i = 0; i < 10; ++i)
8465     ;
8466 #pragma omp target teams
8467   {
8468 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
8469     ++a;
8470   }
8471 #pragma omp target teams
8472 #pragma omp distribute parallel for
8473   for (int i = 0; i < 10; ++i)
8474     ;
8475 #pragma omp target teams
8476   {
8477 #pragma omp distribute parallel for
8478   for (int i = 0; i < 10; ++i)
8479     ;
8480 #pragma omp distribute parallel for
8481   for (int j = 0; j < 10; ++j)
8482     ;
8483   }
8484 #pragma omp target teams
8485   {
8486 #pragma omp distribute parallel for simd
8487   for (int i = 0; i < 10; ++i)
8488     ;
8489 #pragma omp distribute parallel for simd
8490   for (int j = 0; j < 10; ++j)
8491     ;
8492   }
8493 #pragma omp target teams
8494   {
8495 #pragma omp distribute simd
8496   for (int i = 0; i < 10; ++i)
8497     ;
8498 #pragma omp distribute simd
8499   for (int j = 0; j < 10; ++j)
8500     ;
8501   }
8502 #pragma omp target teams
8503   {
8504 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
8505   for (int i = 0; i < 10; ++i)
8506     ;
8507   }
8508 #pragma omp target teams
8509   {
8510 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
8511   for (int i = 0; i < 10; ++i)
8512     ;
8513   }
8514 #pragma omp target teams
8515   {
8516 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
8517   for (int i = 0; i < 10; ++i)
8518     ;
8519   }
8520 #pragma omp target teams
8521   {
8522 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
8523   for (int i = 0; i < 10; ++i)
8524     ;
8525   }
8526 #pragma omp target teams
8527   {
8528 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
8529   for (int i = 0; i < 10; ++i)
8530     ;
8531   }
8532 #pragma omp target teams
8533   {
8534 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
8535     a++;
8536   }
8537 #pragma omp target teams
8538   {
8539 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
8540   for (int i = 0; i < 10; ++i)
8541     ;
8542   }
8543 #pragma omp target teams
8544   {
8545 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8546   for (int i = 0; i < 10; ++i)
8547     ;
8548   }
8549 #pragma omp target teams
8550   {
8551 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
8552   for (int i = 0; i < 10; ++i)
8553     ;
8554   }
8555 #pragma omp target teams
8556   {
8557 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
8558   for (int i = 0; i < 10; ++i)
8559     ;
8560   }
8561 
8562 // TARGET TEAMS DISTRIBUTE DIRECTIVE
8563 #pragma omp target teams distribute // OK
8564   for (int i = 0; i < 10; ++i)
8565     ;
8566 #pragma omp target teams distribute
8567   for (int i = 0; i < 10; ++i) {
8568 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
8569     for (int i = 0; i < 10; ++i)
8570       ;
8571   }
8572 #pragma omp target teams distribute
8573   for (int i = 0; i < 10; ++i) {
8574 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8575     for (int i = 0; i < 10; ++i)
8576       ;
8577   }
8578 #pragma omp target teams distribute
8579   for (int i = 0; i < 10; ++i) {
8580 #pragma omp for // OK
8581     for (int i = 0; i < 10; ++i)
8582       ;
8583   }
8584 #pragma omp target teams distribute
8585   for (int i = 0; i < 10; ++i) {
8586 #pragma omp simd // OK
8587     for (int i = 0; i < 10; ++i)
8588       ;
8589   }
8590 #pragma omp target teams distribute
8591   for (int i = 0; i < 10; ++i) {
8592 #pragma omp for simd // OK
8593     for (int i = 0; i < 10; ++i)
8594       ;
8595   }
8596 #pragma omp target teams distribute
8597   for (int i = 0; i < 10; ++i) {
8598 #pragma omp parallel // OK
8599     for (int i = 0; i < 10; ++i)
8600       ;
8601   }
8602 #pragma omp target teams distribute
8603   for (int i = 0; i < 10; ++i) {
8604 #pragma omp sections // OK
8605     {
8606       bar();
8607     }
8608   }
8609 #pragma omp target teams distribute
8610   for (int i = 0; i < 10; ++i) {
8611 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
8612     {
8613       bar();
8614     }
8615   }
8616 #pragma omp target teams distribute
8617   for (int i = 0; i < 10; ++i) {
8618 #pragma omp single // OK
8619     {
8620       bar();
8621     }
8622   }
8623 #pragma omp target teams distribute
8624   for (int i = 0; i < 10; ++i) {
8625 #pragma omp master // OK
8626     {
8627       bar();
8628     }
8629   }
8630 #pragma omp target teams distribute
8631   for (int i = 0; i < 10; ++i) {
8632 #pragma omp critical // OK
8633     {
8634       bar();
8635     }
8636   }
8637 #pragma omp target teams distribute
8638   for (int i = 0; i < 10; ++i) {
8639 #pragma omp parallel // OK
8640     {
8641 #pragma omp single
8642       {
8643         bar();
8644       }
8645     }
8646   }
8647 #pragma omp target teams distribute
8648   for (int i = 0; i < 10; ++i) {
8649 #pragma omp parallel for // OK
8650     for (int i = 0; i < 10; ++i)
8651       ;
8652   }
8653 #pragma omp target teams distribute
8654   for (int i = 0; i < 10; ++i) {
8655 #pragma omp parallel for simd // OK
8656     for (int i = 0; i < 10; ++i)
8657       ;
8658   }
8659 #pragma omp target teams distribute
8660   for (int i = 0; i < 10; ++i) {
8661 #pragma omp parallel sections // OK
8662     {
8663       bar();
8664     }
8665   }
8666 #pragma omp target teams distribute
8667   for (int i = 0; i < 10; ++i) {
8668 #pragma omp task // OK
8669     {
8670       bar();
8671     }
8672   }
8673 #pragma omp target teams distribute
8674   for (int i = 0; i < 10; ++i) {
8675 #pragma omp taskyield // OK
8676     bar();
8677   }
8678 #pragma omp target teams distribute
8679   for (int i = 0; i < 10; ++i) {
8680 #pragma omp barrier // OK
8681     bar();
8682   }
8683 #pragma omp target teams distribute
8684   for (int i = 0; i < 10; ++i) {
8685 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
8686     bar();
8687   }
8688 #pragma omp target teams distribute
8689   for (int i = 0; i < 10; ++i) {
8690 #pragma omp taskwait // OK
8691     bar();
8692   }
8693 #pragma omp target teams distribute
8694   for (int i = 0; i < 10; ++i) {
8695 #pragma omp flush // OK
8696     bar();
8697   }
8698 #pragma omp target teams distribute
8699   for (int i = 0; i < 10; ++i) {
8700 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8701     bar();
8702   }
8703 #pragma omp target teams distribute
8704   for (int i = 0; i < 10; ++i) {
8705 #pragma omp atomic // OK
8706     ++a;
8707   }
8708 #pragma omp target teams distribute
8709   for (int i = 0; i < 10; ++i) {
8710 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8711     ++a;
8712   }
8713 #pragma omp target teams distribute
8714   for (int i = 0; i < 10; ++i) {
8715 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8716     ++a;
8717   }
8718 #pragma omp target teams distribute
8719   for (int i = 0; i < 10; ++i) {
8720 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8721     for (int i = 0; i < 10; ++i)
8722       ;
8723   }
8724 #pragma omp target teams distribute
8725   for (int i = 0; i < 10; ++i) {
8726 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8727     ++a;
8728   }
8729 #pragma omp target teams distribute
8730   for (int i = 0; i < 10; ++i) {
8731 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8732     ++a;
8733   }
8734 #pragma omp target teams distribute
8735   for (int i = 0; i < 10; ++i) {
8736 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8737     ++a;
8738   }
8739 #pragma omp target teams distribute
8740   for (int i = 0; i < 10; ++i) {
8741 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8742     ++a;
8743   }
8744 #pragma omp target teams distribute
8745   for (int i = 0; i < 10; ++i) {
8746 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8747     for (int i = 0; i < 10; ++i)
8748       ++a;
8749   }
8750 #pragma omp target teams distribute
8751   for (int i = 0; i < 10; ++i) {
8752 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8753     for (int i = 0; i < 10; ++i)
8754       ++a;
8755   }
8756 #pragma omp target teams distribute
8757   for (int i = 0; i < 10; ++i) {
8758 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
8759     for (int i = 0; i < 10; ++i)
8760       ++a;
8761   }
8762 #pragma omp target teams distribute
8763   for (int i = 0; i < 10; ++i) {
8764 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
8765     for (int i = 0; i < 10; ++i)
8766       ++a;
8767   }
8768 #pragma omp target teams distribute
8769   for (int i = 0; i < 10; ++i) {
8770 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
8771     for (int i = 0; i < 10; ++i)
8772       ++a;
8773   }
8774 #pragma omp target teams distribute
8775   for (int i = 0; i < 10; ++i) {
8776 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
8777     for (int i = 0; i < 10; ++i)
8778       ;
8779   }
8780 #pragma omp target teams distribute
8781   for (int i = 0; i < 10; ++i) {
8782 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8783     a++;
8784   }
8785 #pragma omp target teams distribute
8786   for (int i = 0; i < 10; ++i) {
8787 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8788     for (int i = 0; i < 10; ++i)
8789       ;
8790   }
8791 #pragma omp target teams distribute
8792   for (int i = 0; i < 10; ++i) {
8793 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8794     for (int i = 0; i < 10; ++i)
8795       ;
8796   }
8797 #pragma omp target teams distribute
8798   for (int i = 0; i < 10; ++i) {
8799 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8800     for (int i = 0; i < 10; ++i)
8801       ;
8802   }
8803 #pragma omp target teams distribute
8804   for (int i = 0; i < 10; ++i) {
8805 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8806     for (int i = 0; i < 10; ++i)
8807       ;
8808   }
8809 
8810 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8811 #pragma omp target teams distribute parallel for // OK
8812   for (int i = 0; i < 10; ++i)
8813     ;
8814 #pragma omp target teams distribute parallel for
8815   for (int i = 0; i < 10; ++i) {
8816 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
8817     for (int i = 0; i < 10; ++i)
8818       ;
8819   }
8820 #pragma omp target teams distribute parallel for
8821   for (int i = 0; i < 10; ++i) {
8822 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8823     for (int i = 0; i < 10; ++i)
8824       ;
8825   }
8826 #pragma omp target teams distribute parallel for
8827   for (int i = 0; i < 10; ++i) {
8828 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
8829     for (int i = 0; i < 10; ++i)
8830       ;
8831   }
8832 #pragma omp target teams distribute parallel for
8833   for (int i = 0; i < 10; ++i) {
8834 #pragma omp simd // OK
8835     for (int i = 0; i < 10; ++i)
8836       ;
8837   }
8838 #pragma omp target teams distribute parallel for
8839   for (int i = 0; i < 10; ++i) {
8840 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8841     for (int i = 0; i < 10; ++i)
8842       ;
8843   }
8844 #pragma omp target teams distribute parallel for
8845   for (int i = 0; i < 10; ++i) {
8846 #pragma omp parallel // OK
8847     for (int i = 0; i < 10; ++i)
8848       ;
8849   }
8850 #pragma omp target teams distribute parallel for
8851   for (int i = 0; i < 10; ++i) {
8852 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8853     {
8854       bar();
8855     }
8856   }
8857 #pragma omp target teams distribute parallel for
8858   for (int i = 0; i < 10; ++i) {
8859 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
8860     {
8861       bar();
8862     }
8863   }
8864 #pragma omp target teams distribute parallel for
8865   for (int i = 0; i < 10; ++i) {
8866 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8867     {
8868       bar();
8869     }
8870   }
8871 #pragma omp target teams distribute parallel for
8872   for (int i = 0; i < 10; ++i) {
8873 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8874     {
8875       bar();
8876     }
8877   }
8878 #pragma omp target teams distribute parallel for
8879   for (int i = 0; i < 10; ++i) {
8880 #pragma omp critical // OK
8881     {
8882       bar();
8883     }
8884   }
8885 #pragma omp target teams distribute parallel for
8886   for (int i = 0; i < 10; ++i) {
8887 #pragma omp parallel // OK
8888     {
8889 #pragma omp single
8890       {
8891         bar();
8892       }
8893     }
8894   }
8895 #pragma omp target teams distribute parallel for
8896   for (int i = 0; i < 10; ++i) {
8897 #pragma omp parallel for // OK
8898     for (int i = 0; i < 10; ++i)
8899       ;
8900   }
8901 #pragma omp target teams distribute parallel for
8902   for (int i = 0; i < 10; ++i) {
8903 #pragma omp parallel for simd // OK
8904     for (int i = 0; i < 10; ++i)
8905       ;
8906   }
8907 #pragma omp target teams distribute parallel for
8908   for (int i = 0; i < 10; ++i) {
8909 #pragma omp parallel sections // OK
8910     {
8911       bar();
8912     }
8913   }
8914 #pragma omp target teams distribute parallel for
8915   for (int i = 0; i < 10; ++i) {
8916 #pragma omp task // OK
8917     {
8918       bar();
8919     }
8920   }
8921 #pragma omp target teams distribute parallel for
8922   for (int i = 0; i < 10; ++i) {
8923 #pragma omp taskyield // OK
8924     bar();
8925   }
8926 #pragma omp target teams distribute parallel for
8927   for (int i = 0; i < 10; ++i) {
8928 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8929     bar();
8930   }
8931 #pragma omp target teams distribute parallel for
8932   for (int i = 0; i < 10; ++i) {
8933 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8934     bar();
8935   }
8936 #pragma omp target teams distribute parallel for
8937   for (int i = 0; i < 10; ++i) {
8938 #pragma omp taskwait // OK
8939     bar();
8940   }
8941 #pragma omp target teams distribute parallel for
8942   for (int i = 0; i < 10; ++i) {
8943 #pragma omp flush // OK
8944     bar();
8945   }
8946 #pragma omp target teams distribute parallel for
8947   for (int i = 0; i < 10; ++i) {
8948 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8949     bar();
8950   }
8951 #pragma omp target teams distribute parallel for
8952   for (int i = 0; i < 10; ++i) {
8953 #pragma omp atomic // OK
8954     ++a;
8955   }
8956 #pragma omp target teams distribute parallel for
8957   for (int i = 0; i < 10; ++i) {
8958 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8959     ++a;
8960   }
8961 #pragma omp target teams distribute parallel for
8962   for (int i = 0; i < 10; ++i) {
8963 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8964     ++a;
8965   }
8966 #pragma omp target teams distribute parallel for
8967   for (int i = 0; i < 10; ++i) {
8968 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8969     for (int i = 0; i < 10; ++i)
8970       ;
8971   }
8972 #pragma omp target teams distribute parallel for
8973   for (int i = 0; i < 10; ++i) {
8974 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8975     ++a;
8976   }
8977 #pragma omp target teams distribute parallel for
8978   for (int i = 0; i < 10; ++i) {
8979 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8980     ++a;
8981   }
8982 #pragma omp target teams distribute parallel for
8983   for (int i = 0; i < 10; ++i) {
8984 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8985     ++a;
8986   }
8987 #pragma omp target teams distribute parallel for
8988   for (int i = 0; i < 10; ++i) {
8989 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8990     ++a;
8991   }
8992 #pragma omp target teams distribute parallel for
8993   for (int i = 0; i < 10; ++i) {
8994 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8995     for (int i = 0; i < 10; ++i)
8996       ++a;
8997   }
8998 #pragma omp target teams distribute parallel for
8999   for (int i = 0; i < 10; ++i) {
9000 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9001     for (int i = 0; i < 10; ++i)
9002       ++a;
9003   }
9004 #pragma omp target teams distribute parallel for
9005   for (int i = 0; i < 10; ++i) {
9006 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
9007     for (int i = 0; i < 10; ++i)
9008       ++a;
9009   }
9010 #pragma omp target teams distribute parallel for
9011   for (int i = 0; i < 10; ++i) {
9012 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
9013     for (int i = 0; i < 10; ++i)
9014       ++a;
9015   }
9016 #pragma omp target teams distribute parallel for
9017   for (int i = 0; i < 10; ++i) {
9018 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
9019     for (int i = 0; i < 10; ++i)
9020       ++a;
9021   }
9022 #pragma omp target teams distribute parallel for
9023   for (int i = 0; i < 10; ++i) {
9024 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
9025     for (int i = 0; i < 10; ++i)
9026       ;
9027   }
9028 #pragma omp target teams distribute parallel for
9029   for (int i = 0; i < 10; ++i) {
9030 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9031     a++;
9032   }
9033 #pragma omp target teams distribute parallel for
9034   for (int i = 0; i < 10; ++i) {
9035 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9036     for (int i = 0; i < 10; ++i)
9037       ;
9038   }
9039 #pragma omp target teams distribute parallel for
9040   for (int i = 0; i < 10; ++i) {
9041 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9042     for (int i = 0; i < 10; ++i)
9043       ;
9044   }
9045 #pragma omp target teams distribute parallel for
9046   for (int i = 0; i < 10; ++i) {
9047 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9048     for (int i = 0; i < 10; ++i)
9049       ;
9050   }
9051 #pragma omp target teams distribute parallel for
9052   for (int i = 0; i < 10; ++i) {
9053 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9054     for (int i = 0; i < 10; ++i)
9055       ;
9056   }
9057 
9058 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
9059 #pragma omp target teams distribute parallel for simd // OK
9060   for (int i = 0; i < 10; ++i)
9061     ;
9062 #pragma omp target teams distribute parallel for simd
9063   for (int i = 0; i < 10; ++i) {
9064 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9065     for (int i = 0; i < 10; ++i)
9066       ;
9067   }
9068 #pragma omp target teams distribute parallel for simd
9069   for (int i = 0; i < 10; ++i) {
9070 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9071     for (int i = 0; i < 10; ++i)
9072       ;
9073   }
9074 #pragma omp target teams distribute parallel for simd
9075   for (int i = 0; i < 10; ++i) {
9076 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9077     for (int i = 0; i < 10; ++i)
9078       ;
9079   }
9080 #pragma omp target teams distribute parallel for simd
9081   for (int i = 0; i < 10; ++i) {
9082 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9083     for (int i = 0; i < 10; ++i)
9084       ;
9085   }
9086 #pragma omp target teams distribute parallel for simd
9087   for (int i = 0; i < 10; ++i) {
9088 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9089     for (int i = 0; i < 10; ++i)
9090       ;
9091   }
9092 #pragma omp target teams distribute parallel for simd
9093   for (int i = 0; i < 10; ++i) {
9094 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9095     for (int i = 0; i < 10; ++i)
9096       ;
9097   }
9098 #pragma omp target teams distribute parallel for simd
9099   for (int i = 0; i < 10; ++i) {
9100 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9101     {
9102       bar();
9103     }
9104   }
9105 #pragma omp target teams distribute parallel for simd
9106   for (int i = 0; i < 10; ++i) {
9107 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9108     {
9109       bar();
9110     }
9111   }
9112 #pragma omp target teams distribute parallel for simd
9113   for (int i = 0; i < 10; ++i) {
9114 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9115     {
9116       bar();
9117     }
9118   }
9119 #pragma omp target teams distribute parallel for simd
9120   for (int i = 0; i < 10; ++i) {
9121 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9122     {
9123       bar();
9124     }
9125   }
9126 #pragma omp target teams distribute parallel for simd
9127   for (int i = 0; i < 10; ++i) {
9128 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9129     {
9130       bar();
9131     }
9132   }
9133 #pragma omp target teams distribute parallel for simd
9134   for (int i = 0; i < 10; ++i) {
9135 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9136     {
9137 #pragma omp single
9138       {
9139         bar();
9140       }
9141     }
9142   }
9143 #pragma omp target teams distribute parallel for simd
9144   for (int i = 0; i < 10; ++i) {
9145 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9146     for (int i = 0; i < 10; ++i)
9147       ;
9148   }
9149 #pragma omp target teams distribute parallel for simd
9150   for (int i = 0; i < 10; ++i) {
9151 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9152     for (int i = 0; i < 10; ++i)
9153       ;
9154   }
9155 #pragma omp target teams distribute parallel for simd
9156   for (int i = 0; i < 10; ++i) {
9157 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9158     {
9159       bar();
9160     }
9161   }
9162 #pragma omp target teams distribute parallel for simd
9163   for (int i = 0; i < 10; ++i) {
9164 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9165     {
9166       bar();
9167     }
9168   }
9169 #pragma omp target teams distribute parallel for simd
9170   for (int i = 0; i < 10; ++i) {
9171 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9172     bar();
9173   }
9174 #pragma omp target teams distribute parallel for simd
9175   for (int i = 0; i < 10; ++i) {
9176 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9177     bar();
9178   }
9179 #pragma omp target teams distribute parallel for simd
9180   for (int i = 0; i < 10; ++i) {
9181 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
9182     bar();
9183   }
9184 #pragma omp target teams distribute parallel for simd
9185   for (int i = 0; i < 10; ++i) {
9186 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9187     bar();
9188   }
9189 #pragma omp target teams distribute parallel for simd
9190   for (int i = 0; i < 10; ++i) {
9191 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9192     bar();
9193   }
9194 #pragma omp target teams distribute parallel for simd
9195   for (int i = 0; i < 10; ++i) {
9196 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9197     bar();
9198   }
9199 #pragma omp target teams distribute parallel for simd
9200   for (int i = 0; i < 10; ++i) {
9201 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9202     ++a;
9203   }
9204 #pragma omp target teams distribute parallel for simd
9205   for (int i = 0; i < 10; ++i) {
9206 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9207     ++a;
9208   }
9209 #pragma omp target teams distribute parallel for simd
9210   for (int i = 0; i < 10; ++i) {
9211 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9212     ++a;
9213   }
9214 #pragma omp target teams distribute parallel for simd
9215   for (int i = 0; i < 10; ++i) {
9216 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9217     for (int i = 0; i < 10; ++i)
9218       ;
9219   }
9220 #pragma omp target teams distribute parallel for simd
9221   for (int i = 0; i < 10; ++i) {
9222 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9223     ++a;
9224   }
9225 #pragma omp target teams distribute parallel for simd
9226   for (int i = 0; i < 10; ++i) {
9227 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9228     ++a;
9229   }
9230 #pragma omp target teams distribute parallel for simd
9231   for (int i = 0; i < 10; ++i) {
9232 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9233     ++a;
9234   }
9235 #pragma omp target teams distribute parallel for simd
9236   for (int i = 0; i < 10; ++i) {
9237 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9238     ++a;
9239   }
9240 #pragma omp target teams distribute parallel for simd
9241   for (int i = 0; i < 10; ++i) {
9242 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9243     for (int i = 0; i < 10; ++i)
9244       ++a;
9245   }
9246 #pragma omp target teams distribute parallel for simd
9247   for (int i = 0; i < 10; ++i) {
9248 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9249     for (int i = 0; i < 10; ++i)
9250       ++a;
9251   }
9252 #pragma omp target teams distribute parallel for simd
9253   for (int i = 0; i < 10; ++i) {
9254 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9255     for (int i = 0; i < 10; ++i)
9256       ++a;
9257   }
9258 #pragma omp target teams distribute parallel for simd
9259   for (int i = 0; i < 10; ++i) {
9260 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9261     for (int i = 0; i < 10; ++i)
9262       ++a;
9263   }
9264 #pragma omp target teams distribute parallel for simd
9265   for (int i = 0; i < 10; ++i) {
9266 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9267     for (int i = 0; i < 10; ++i)
9268       ++a;
9269   }
9270 #pragma omp target teams distribute parallel for simd
9271   for (int i = 0; i < 10; ++i) {
9272 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9273     for (int i = 0; i < 10; ++i)
9274       ;
9275   }
9276 #pragma omp target teams distribute parallel for simd
9277   for (int i = 0; i < 10; ++i) {
9278 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9279     a++;
9280   }
9281 #pragma omp target teams distribute parallel for simd
9282   for (int i = 0; i < 10; ++i) {
9283 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9284     for (int i = 0; i < 10; ++i)
9285       ;
9286   }
9287 #pragma omp target teams distribute parallel for simd
9288   for (int i = 0; i < 10; ++i) {
9289 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9290     for (int i = 0; i < 10; ++i)
9291       ;
9292   }
9293 #pragma omp target teams distribute parallel for simd
9294   for (int i = 0; i < 10; ++i) {
9295 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9296     for (int i = 0; i < 10; ++i)
9297       ;
9298   }
9299 #pragma omp target teams distribute parallel for simd
9300   for (int i = 0; i < 10; ++i) {
9301 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9302     for (int i = 0; i < 10; ++i)
9303       ;
9304   }
9305 
9306 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
9307 #pragma omp target teams distribute simd // OK
9308   for (int i = 0; i < 10; ++i)
9309     ;
9310 #pragma omp target teams distribute simd
9311   for (int i = 0; i < 10; ++i) {
9312 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9313     for (int i = 0; i < 10; ++i)
9314       ;
9315   }
9316 #pragma omp target teams distribute simd
9317   for (int i = 0; i < 10; ++i) {
9318 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9319     for (int i = 0; i < 10; ++i)
9320       ;
9321   }
9322 #pragma omp target teams distribute simd
9323   for (int i = 0; i < 10; ++i) {
9324 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9325     for (int i = 0; i < 10; ++i)
9326       ;
9327   }
9328 #pragma omp target teams distribute simd
9329   for (int i = 0; i < 10; ++i) {
9330 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9331     for (int i = 0; i < 10; ++i)
9332       ;
9333   }
9334 #pragma omp target teams distribute simd
9335   for (int i = 0; i < 10; ++i) {
9336 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9337     for (int i = 0; i < 10; ++i)
9338       ;
9339   }
9340 #pragma omp target teams distribute simd
9341   for (int i = 0; i < 10; ++i) {
9342 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9343     for (int i = 0; i < 10; ++i)
9344       ;
9345   }
9346 #pragma omp target teams distribute simd
9347   for (int i = 0; i < 10; ++i) {
9348 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9349     {
9350       bar();
9351     }
9352   }
9353 #pragma omp target teams distribute simd
9354   for (int i = 0; i < 10; ++i) {
9355 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9356     {
9357       bar();
9358     }
9359   }
9360 #pragma omp target teams distribute simd
9361   for (int i = 0; i < 10; ++i) {
9362 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9363     {
9364       bar();
9365     }
9366   }
9367 #pragma omp target teams distribute simd
9368   for (int i = 0; i < 10; ++i) {
9369 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9370     {
9371       bar();
9372     }
9373   }
9374 #pragma omp target teams distribute simd
9375   for (int i = 0; i < 10; ++i) {
9376 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9377     {
9378       bar();
9379     }
9380   }
9381 #pragma omp target teams distribute simd
9382   for (int i = 0; i < 10; ++i) {
9383 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9384     {
9385 #pragma omp single
9386       {
9387         bar();
9388       }
9389     }
9390   }
9391 #pragma omp target teams distribute simd
9392   for (int i = 0; i < 10; ++i) {
9393 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9394     for (int i = 0; i < 10; ++i)
9395       ;
9396   }
9397 #pragma omp target teams distribute simd
9398   for (int i = 0; i < 10; ++i) {
9399 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9400     for (int i = 0; i < 10; ++i)
9401       ;
9402   }
9403 #pragma omp target teams distribute simd
9404   for (int i = 0; i < 10; ++i) {
9405 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9406     {
9407       bar();
9408     }
9409   }
9410 #pragma omp target teams distribute simd
9411   for (int i = 0; i < 10; ++i) {
9412 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9413     {
9414       bar();
9415     }
9416   }
9417 #pragma omp target teams distribute simd
9418   for (int i = 0; i < 10; ++i) {
9419 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9420     bar();
9421   }
9422 #pragma omp target teams distribute simd
9423   for (int i = 0; i < 10; ++i) {
9424 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9425     bar();
9426   }
9427 #pragma omp target teams distribute simd
9428   for (int i = 0; i < 10; ++i) {
9429 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
9430     bar();
9431   }
9432 #pragma omp target teams distribute simd
9433   for (int i = 0; i < 10; ++i) {
9434 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9435     bar();
9436   }
9437 #pragma omp target teams distribute simd
9438   for (int i = 0; i < 10; ++i) {
9439 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9440     bar();
9441   }
9442 #pragma omp target teams distribute simd
9443   for (int i = 0; i < 10; ++i) {
9444 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9445     bar();
9446   }
9447 #pragma omp target teams distribute simd
9448   for (int i = 0; i < 10; ++i) {
9449 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9450     ++a;
9451   }
9452 #pragma omp target teams distribute simd
9453   for (int i = 0; i < 10; ++i) {
9454 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9455     ++a;
9456   }
9457 #pragma omp target teams distribute simd
9458   for (int i = 0; i < 10; ++i) {
9459 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9460     ++a;
9461   }
9462 #pragma omp target teams distribute simd
9463   for (int i = 0; i < 10; ++i) {
9464 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9465     for (int i = 0; i < 10; ++i)
9466       ;
9467   }
9468 #pragma omp target teams distribute simd
9469   for (int i = 0; i < 10; ++i) {
9470 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9471     ++a;
9472   }
9473 #pragma omp target teams distribute simd
9474   for (int i = 0; i < 10; ++i) {
9475 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9476     ++a;
9477   }
9478 #pragma omp target teams distribute simd
9479   for (int i = 0; i < 10; ++i) {
9480 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9481     ++a;
9482   }
9483 #pragma omp target teams distribute simd
9484   for (int i = 0; i < 10; ++i) {
9485 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9486     ++a;
9487   }
9488 #pragma omp target teams distribute simd
9489   for (int i = 0; i < 10; ++i) {
9490 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9491     for (int i = 0; i < 10; ++i)
9492       ++a;
9493   }
9494 #pragma omp target teams distribute simd
9495   for (int i = 0; i < 10; ++i) {
9496 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9497     for (int i = 0; i < 10; ++i)
9498       ++a;
9499   }
9500 #pragma omp target teams distribute simd
9501   for (int i = 0; i < 10; ++i) {
9502 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9503     for (int i = 0; i < 10; ++i)
9504       ++a;
9505   }
9506 #pragma omp target teams distribute simd
9507   for (int i = 0; i < 10; ++i) {
9508 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9509     for (int i = 0; i < 10; ++i)
9510       ++a;
9511   }
9512 #pragma omp target teams distribute simd
9513   for (int i = 0; i < 10; ++i) {
9514 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9515     for (int i = 0; i < 10; ++i)
9516       ++a;
9517   }
9518 #pragma omp target teams distribute simd
9519   for (int i = 0; i < 10; ++i) {
9520 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9521     for (int i = 0; i < 10; ++i)
9522       ;
9523   }
9524 #pragma omp target teams distribute simd
9525   for (int i = 0; i < 10; ++i) {
9526 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9527     a++;
9528   }
9529 #pragma omp target teams distribute simd
9530   for (int i = 0; i < 10; ++i) {
9531 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9532     for (int i = 0; i < 10; ++i)
9533       ;
9534   }
9535 #pragma omp target teams distribute simd
9536   for (int i = 0; i < 10; ++i) {
9537 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9538     for (int i = 0; i < 10; ++i)
9539       ;
9540   }
9541 #pragma omp target teams distribute simd
9542   for (int i = 0; i < 10; ++i) {
9543 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9544     for (int i = 0; i < 10; ++i)
9545       ;
9546   }
9547 #pragma omp target teams distribute simd
9548   for (int i = 0; i < 10; ++i) {
9549 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9550     for (int i = 0; i < 10; ++i)
9551       ;
9552   }
9553 
9554 }
9555 
9556 void foo() {
9557   int a = 0;
9558 // PARALLEL DIRECTIVE
9559 #pragma omp parallel
9560 #pragma omp for
9561   for (int i = 0; i < 10; ++i)
9562     ;
9563 #pragma omp parallel
9564 #pragma omp simd
9565   for (int i = 0; i < 10; ++i)
9566     ;
9567 #pragma omp parallel
9568 #pragma omp for simd
9569   for (int i = 0; i < 10; ++i)
9570     ;
9571 #pragma omp parallel
9572 #pragma omp sections
9573   {
9574     bar();
9575   }
9576 #pragma omp parallel
9577 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
9578   {
9579     bar();
9580   }
9581 #pragma omp parallel
9582 #pragma omp sections
9583   {
9584     bar();
9585   }
9586 #pragma omp parallel
9587 #pragma omp single
9588   bar();
9589 #pragma omp parallel
9590 #pragma omp master
9591   bar();
9592 #pragma omp parallel master
9593   bar();
9594 #pragma omp parallel
9595 #pragma omp critical
9596   bar();
9597 #pragma omp parallel
9598 #pragma omp parallel for
9599   for (int i = 0; i < 10; ++i)
9600     ;
9601 #pragma omp parallel
9602 #pragma omp parallel for simd
9603   for (int i = 0; i < 10; ++i)
9604     ;
9605 #pragma omp parallel
9606 #pragma omp parallel sections
9607   {
9608     bar();
9609   }
9610 #pragma omp parallel
9611 #pragma omp task
9612   {
9613     bar();
9614   }
9615 #pragma omp parallel
9616   {
9617 #pragma omp taskyield
9618     bar();
9619   }
9620 #pragma omp parallel
9621   {
9622 #pragma omp barrier
9623     bar();
9624   }
9625 #pragma omp parallel
9626   {
9627 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
9628     bar();
9629   }
9630 #pragma omp parallel
9631   {
9632 #pragma omp taskwait
9633     bar();
9634   }
9635 #pragma omp parallel
9636   {
9637 #pragma omp flush
9638     bar();
9639   }
9640 #pragma omp parallel
9641   {
9642 #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?}}
9643     bar();
9644   }
9645 #pragma omp parallel
9646   {
9647 #pragma omp atomic
9648     ++a;
9649   }
9650 #pragma omp parallel
9651   {
9652 #pragma omp target
9653     ++a;
9654   }
9655 #pragma omp parallel
9656   {
9657 #pragma omp target parallel
9658     ++a;
9659   }
9660 #pragma omp parallel
9661 #pragma omp target parallel for
9662   for (int i = 0; i < 10; ++i)
9663     ;
9664 #pragma omp parallel
9665   {
9666 #pragma omp target enter data map(to: a)
9667     ++a;
9668   }
9669 #pragma omp parallel
9670   {
9671 #pragma omp target exit data map(from: a)
9672     ++a;
9673   }
9674 #pragma omp parallel
9675   {
9676 #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?}}
9677     ++a;
9678   }
9679 #pragma omp parallel
9680   {
9681 #pragma omp taskloop
9682   for (int i = 0; i < 10; ++i)
9683     ++a;
9684   }
9685 #pragma omp parallel
9686   {
9687 #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?}}
9688     for (int i = 0; i < 10; ++i)
9689       ;
9690   }
9691 #pragma omp parallel
9692   {
9693 #pragma omp target update to(a)
9694     a++;
9695   }
9696 #pragma omp parallel
9697   {
9698 #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?}}
9699     for (int i = 0; i < 10; ++i)
9700       ;
9701   }
9702 #pragma omp parallel
9703   {
9704 #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?}}
9705     for (int i = 0; i < 10; ++i)
9706       ;
9707   }
9708 #pragma omp parallel
9709   {
9710 #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?}}
9711     for (int i = 0; i < 10; ++i)
9712       ;
9713   }
9714 #pragma omp parallel
9715   {
9716 #pragma omp target simd // OK
9717     for (int i = 0; i < 10; ++i)
9718       ;
9719   }
9720 #pragma omp parallel
9721   {
9722 #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?}}
9723     for (int i = 0; i < 10; ++i)
9724       ;
9725   }
9726 #pragma omp parallel
9727   {
9728 #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?}}
9729     for (int i = 0; i < 10; ++i)
9730       ;
9731   }
9732 #pragma omp parallel
9733   {
9734 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
9735     for (int i = 0; i < 10; ++i)
9736       ;
9737   }
9738 #pragma omp parallel
9739   {
9740 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
9741     for (int i = 0; i < 10; ++i)
9742       ;
9743   }
9744 #pragma omp parallel
9745   {
9746 #pragma omp target teams // OK
9747     a++;
9748   }
9749 #pragma omp parallel
9750   {
9751 #pragma omp target teams distribute // OK
9752     for (int i = 0; i < 10; ++i)
9753       ;
9754   }
9755 #pragma omp parallel
9756   {
9757 #pragma omp target teams distribute parallel for // OK
9758     for (int i = 0; i < 10; ++i)
9759       ;
9760   }
9761 #pragma omp parallel
9762   {
9763 #pragma omp target teams distribute parallel for simd // OK
9764     for (int i = 0; i < 10; ++i)
9765       ;
9766   }
9767 #pragma omp parallel
9768   {
9769 #pragma omp target teams distribute simd // OK
9770     for (int i = 0; i < 10; ++i)
9771       ;
9772   }
9773 
9774 // SIMD DIRECTIVE
9775 #pragma omp simd
9776   for (int i = 0; i < 10; ++i) {
9777 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9778     for (int i = 0; i < 10; ++i)
9779       ;
9780   }
9781 #pragma omp simd
9782   for (int i = 0; i < 10; ++i) {
9783 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9784     for (int i = 0; i < 10; ++i)
9785       ;
9786   }
9787 #pragma omp simd
9788   for (int i = 0; i < 10; ++i) {
9789 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9790     for (int i = 0; i < 10; ++i)
9791       ;
9792   }
9793 #pragma omp simd
9794   for (int i = 0; i < 10; ++i) {
9795 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9796     for (int i = 0; i < 10; ++i)
9797       ;
9798   }
9799 #pragma omp simd
9800   for (int i = 0; i < 10; ++i) {
9801 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9802     {
9803       bar();
9804     }
9805   }
9806 #pragma omp simd
9807   for (int i = 0; i < 10; ++i) {
9808 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9809     {
9810       bar();
9811     }
9812   }
9813 #pragma omp simd
9814   for (int i = 0; i < 10; ++i) {
9815 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9816     bar();
9817 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9818     bar();
9819   }
9820 #pragma omp simd
9821   for (int i = 0; i < 10; ++i) {
9822 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9823     bar();
9824 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9825     bar();
9826   }
9827 #pragma omp simd
9828   for (int i = 0; i < 10; ++i) {
9829 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9830     for (int i = 0; i < 10; ++i)
9831       ;
9832   }
9833 #pragma omp simd
9834   for (int i = 0; i < 10; ++i) {
9835 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9836     for (int i = 0; i < 10; ++i)
9837       ;
9838   }
9839 #pragma omp simd
9840   for (int i = 0; i < 10; ++i) {
9841 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9842     {
9843       bar();
9844     }
9845   }
9846 #pragma omp simd
9847   for (int i = 0; i < 10; ++i) {
9848 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9849     {
9850       bar();
9851     }
9852   }
9853 #pragma omp simd
9854   for (int i = 0; i < 10; ++i) {
9855 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9856     bar();
9857   }
9858 #pragma omp simd
9859   for (int i = 0; i < 10; ++i) {
9860 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9861     bar();
9862   }
9863 #pragma omp simd
9864   for (int i = 0; i < 10; ++i) {
9865 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
9866     bar();
9867   }
9868 #pragma omp simd
9869   for (int i = 0; i < 10; ++i) {
9870 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9871     bar();
9872   }
9873 #pragma omp simd
9874   for (int i = 0; i < 10; ++i) {
9875 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9876     bar();
9877   }
9878 #pragma omp simd
9879   for (int i = 0; i < 10; ++i) {
9880 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9881     bar();
9882   }
9883 #pragma omp simd
9884   for (int i = 0; i < 10; ++i) {
9885 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9886     ++a;
9887   }
9888 #pragma omp simd
9889   for (int i = 0; i < 10; ++i) {
9890 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9891     ++a;
9892   }
9893 #pragma omp simd
9894   for (int i = 0; i < 10; ++i) {
9895 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9896     ++a;
9897   }
9898 #pragma omp simd
9899   for (int i = 0; i < 10; ++i) {
9900 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9901     for (int i = 0; i < 10; ++i)
9902       ;
9903   }
9904 #pragma omp simd
9905   for (int i = 0; i < 10; ++i) {
9906 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9907     ++a;
9908   }
9909 #pragma omp simd
9910   for (int i = 0; i < 10; ++i) {
9911 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9912     ++a;
9913   }
9914 #pragma omp simd
9915   for (int i = 0; i < 10; ++i) {
9916 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9917     ++a;
9918   }
9919 #pragma omp simd
9920   for (int i = 0; i < 10; ++i) {
9921 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9922   for (int i = 0; i < 10; ++i)
9923     ++a;
9924   }
9925 #pragma omp simd
9926   for (int i = 0; i < 10; ++i) {
9927 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9928     for (int j = 0; j < 10; ++j)
9929       ;
9930   }
9931 #pragma omp simd
9932   for (int i = 0; i < 10; ++i) {
9933 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9934     a++;
9935   }
9936 #pragma omp simd
9937   for (int i = 0; i < 10; ++i) {
9938 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9939     for (int j = 0; j < 10; ++j)
9940       ;
9941   }
9942 #pragma omp simd
9943   for (int i = 0; i < 10; ++i) {
9944 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9945     for (int j = 0; j < 10; ++j)
9946       ;
9947   }
9948 #pragma omp simd
9949   for (int i = 0; i < 10; ++i) {
9950 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9951     for (int j = 0; j < 10; ++j)
9952       ;
9953   }
9954 #pragma omp simd
9955   for (int i = 0; i < 10; ++i) {
9956 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9957     for (int j = 0; j < 10; ++j)
9958       ;
9959   }
9960 #pragma omp simd
9961   for (int i = 0; i < 10; ++i) {
9962 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9963     for (int j = 0; j < 10; ++j)
9964       ;
9965   }
9966 #pragma omp simd
9967   for (int i = 0; i < 10; ++i) {
9968 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9969     for (int j = 0; j < 10; ++j)
9970       ;
9971   }
9972 #pragma omp simd
9973   for (int i = 0; i < 10; ++i) {
9974 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9975     for (int j = 0; j < 10; ++j)
9976       ;
9977   }
9978 #pragma omp simd
9979   for (int i = 0; i < 10; ++i) {
9980 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9981     for (int j = 0; j < 10; ++j)
9982       ;
9983   }
9984 #pragma omp simd
9985   for (int i = 0; i < 10; ++i) {
9986 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9987     a++;
9988   }
9989 #pragma omp simd
9990   for (int i = 0; i < 10; ++i) {
9991 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9992     for (int j = 0; j < 10; ++j)
9993       ;
9994   }
9995 #pragma omp simd
9996   for (int i = 0; i < 10; ++i) {
9997 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9998     for (int j = 0; j < 10; ++j)
9999       ;
10000   }
10001 #pragma omp simd
10002   for (int i = 0; i < 10; ++i) {
10003 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10004     for (int j = 0; j < 10; ++j)
10005       ;
10006   }
10007 #pragma omp simd
10008   for (int i = 0; i < 10; ++i) {
10009 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10010     for (int j = 0; j < 10; ++j)
10011       ;
10012   }
10013 
10014 // FOR DIRECTIVE
10015 #pragma omp for
10016   for (int i = 0; i < 10; ++i) {
10017 #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?}}
10018     for (int i = 0; i < 10; ++i)
10019       ;
10020   }
10021 #pragma omp for
10022   for (int i = 0; i < 10; ++i) {
10023 #pragma omp simd
10024     for (int i = 0; i < 10; ++i)
10025       ;
10026   }
10027 #pragma omp for
10028   for (int i = 0; i < 10; ++i) {
10029 #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?}}
10030     for (int i = 0; i < 10; ++i)
10031       ;
10032   }
10033 #pragma omp for
10034   for (int i = 0; i < 10; ++i) {
10035 #pragma omp parallel
10036     for (int i = 0; i < 10; ++i)
10037       ;
10038   }
10039 #pragma omp for
10040   for (int i = 0; i < 10; ++i) {
10041 #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?}}
10042     {
10043       bar();
10044     }
10045   }
10046 #pragma omp for
10047   for (int i = 0; i < 10; ++i) {
10048 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
10049     {
10050       bar();
10051     }
10052   }
10053 #pragma omp for
10054   for (int i = 0; i < 10; ++i) {
10055 #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?}}
10056     bar();
10057 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
10058     bar();
10059 #pragma omp critical
10060     bar();
10061   }
10062 #pragma omp for
10063   for (int i = 0; i < 10; ++i) {
10064 #pragma omp parallel
10065     {
10066 #pragma omp single // OK
10067       {
10068         bar();
10069       }
10070 #pragma omp for // OK
10071       for (int i = 0; i < 10; ++i)
10072         ;
10073 #pragma omp for simd // OK
10074       for (int i = 0; i < 10; ++i)
10075         ;
10076 #pragma omp sections // OK
10077       {
10078         bar();
10079       }
10080     }
10081   }
10082 #pragma omp for
10083   for (int i = 0; i < 10; ++i) {
10084 #pragma omp parallel for
10085     for (int i = 0; i < 10; ++i)
10086       ;
10087   }
10088 #pragma omp for
10089   for (int i = 0; i < 10; ++i) {
10090 #pragma omp parallel for simd
10091     for (int i = 0; i < 10; ++i)
10092       ;
10093   }
10094 #pragma omp for
10095   for (int i = 0; i < 10; ++i) {
10096 #pragma omp parallel sections
10097     {
10098       bar();
10099     }
10100   }
10101 #pragma omp for
10102   for (int i = 0; i < 10; ++i) {
10103 #pragma omp task
10104     {
10105       bar();
10106     }
10107   }
10108 #pragma omp for
10109   for (int i = 0; i < 10; ++i) {
10110 #pragma omp taskyield
10111     bar();
10112   }
10113 #pragma omp for
10114   for (int i = 0; i < 10; ++i) {
10115 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
10116     bar();
10117   }
10118 #pragma omp for
10119   for (int i = 0; i < 10; ++i) {
10120 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'for' region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
10121     bar();
10122   }
10123 #pragma omp for
10124   for (int i = 0; i < 10; ++i) {
10125 #pragma omp taskwait
10126     bar();
10127   }
10128 #pragma omp for
10129   for (int i = 0; i < 10; ++i) {
10130 #pragma omp flush
10131     bar();
10132   }
10133 #pragma omp for
10134   for (int i = 0; i < 10; ++i) {
10135 #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?}}
10136     bar();
10137   }
10138 #pragma omp for ordered
10139   for (int i = 0; i < 10; ++i) {
10140 #pragma omp ordered // OK
10141     bar();
10142   }
10143 #pragma omp for
10144   for (int i = 0; i < 10; ++i) {
10145 #pragma omp atomic
10146     ++a;
10147   }
10148 #pragma omp for
10149   for (int i = 0; i < 10; ++i) {
10150 #pragma omp target
10151     ++a;
10152   }
10153 #pragma omp for
10154   for (int i = 0; i < 10; ++i) {
10155 #pragma omp target parallel
10156     ++a;
10157   }
10158 #pragma omp for
10159   for (int i = 0; i < 10; ++i) {
10160 #pragma omp target parallel for
10161     for (int i = 0; i < 10; ++i)
10162       ;
10163   }
10164 #pragma omp for
10165   for (int i = 0; i < 10; ++i) {
10166 #pragma omp target enter data map(to: a)
10167     ++a;
10168   }
10169 #pragma omp for
10170   for (int i = 0; i < 10; ++i) {
10171 #pragma omp target exit data map(from: a)
10172     ++a;
10173   }
10174 #pragma omp for
10175   for (int i = 0; i < 10; ++i) {
10176 #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?}}
10177     ++a;
10178   }
10179 #pragma omp for
10180   for (int i = 0; i < 10; ++i) {
10181 #pragma omp taskloop
10182   for (int i = 0; i < 10; ++i)
10183     ++a;
10184   }
10185 #pragma omp for
10186   for (int i = 0; i < 10; ++i) {
10187 #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?}}
10188     for (int j = 0; j < 10; ++j)
10189       ;
10190   }
10191 #pragma omp for
10192   for (int i = 0; i < 10; ++i) {
10193 #pragma omp target update to(a)
10194     ++a;
10195   }
10196 #pragma omp for
10197   for (int i = 0; i < 10; ++i) {
10198 #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?}}
10199     for (int j = 0; j < 10; ++j)
10200       ;
10201   }
10202 #pragma omp for
10203   for (int i = 0; i < 10; ++i) {
10204 #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?}}
10205     for (int j = 0; j < 10; ++j)
10206       ;
10207   }
10208 #pragma omp for
10209   for (int i = 0; i < 10; ++i) {
10210 #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?}}
10211     for (int j = 0; j < 10; ++j)
10212       ;
10213   }
10214 #pragma omp for
10215   for (int i = 0; i < 10; ++i) {
10216 #pragma omp target simd // OK
10217     for (int j = 0; j < 10; ++j)
10218       ;
10219   }
10220 #pragma omp for
10221   for (int i = 0; i < 10; ++i) {
10222 #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?}}
10223     for (int j = 0; j < 10; ++j)
10224       ;
10225   }
10226 #pragma omp for
10227   for (int i = 0; i < 10; ++i) {
10228 #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?}}
10229     for (int j = 0; j < 10; ++j)
10230       ;
10231   }
10232 #pragma omp for
10233   for (int i = 0; i < 10; ++i) {
10234 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10235     for (int j = 0; j < 10; ++j)
10236       ;
10237   }
10238 #pragma omp for
10239   for (int i = 0; i < 10; ++i) {
10240 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10241     for (int j = 0; j < 10; ++j)
10242       ;
10243   }
10244 #pragma omp for
10245   for (int i = 0; i < 10; ++i) {
10246 #pragma omp target teams // OK
10247     a++;
10248   }
10249 #pragma omp for
10250   for (int i = 0; i < 10; ++i) {
10251 #pragma omp target teams distribute // OK
10252     for (int j = 0; j < 10; ++j)
10253       ;
10254   }
10255 #pragma omp for
10256   for (int i = 0; i < 10; ++i) {
10257 #pragma omp target teams distribute parallel for // OK
10258     for (int j = 0; j < 10; ++j)
10259       ;
10260   }
10261 #pragma omp for
10262   for (int i = 0; i < 10; ++i) {
10263 #pragma omp target teams distribute parallel for simd // OK
10264     for (int j = 0; j < 10; ++j)
10265       ;
10266   }
10267 #pragma omp for
10268   for (int i = 0; i < 10; ++i) {
10269 #pragma omp target teams distribute simd // OK
10270     for (int j = 0; j < 10; ++j)
10271       ;
10272   }
10273 
10274 // FOR SIMD DIRECTIVE
10275 #pragma omp for simd
10276   for (int i = 0; i < 10; ++i) {
10277 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10278     for (int i = 0; i < 10; ++i)
10279       ;
10280   }
10281 #pragma omp for simd
10282   for (int i = 0; i < 10; ++i) {
10283 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
10284     for (int i = 0; i < 10; ++i)
10285       ;
10286   }
10287 #pragma omp for simd
10288   for (int i = 0; i < 10; ++i) {
10289 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10290     for (int i = 0; i < 10; ++i)
10291       ;
10292   }
10293 #pragma omp for simd
10294   for (int i = 0; i < 10; ++i) {
10295 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10296     for (int i = 0; i < 10; ++i)
10297       ;
10298   }
10299 #pragma omp for simd
10300   for (int i = 0; i < 10; ++i) {
10301 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10302     {
10303       bar();
10304     }
10305   }
10306 #pragma omp for simd
10307   for (int i = 0; i < 10; ++i) {
10308 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10309     {
10310       bar();
10311     }
10312   }
10313 #pragma omp for simd
10314   for (int i = 0; i < 10; ++i) {
10315 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10316     bar();
10317 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10318     bar();
10319   }
10320 #pragma omp for simd
10321   for (int i = 0; i < 10; ++i) {
10322 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10323     bar();
10324 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10325     bar();
10326   }
10327 #pragma omp for simd
10328   for (int i = 0; i < 10; ++i) {
10329 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10330     for (int i = 0; i < 10; ++i)
10331       ;
10332   }
10333 #pragma omp for simd
10334   for (int i = 0; i < 10; ++i) {
10335 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10336     for (int i = 0; i < 10; ++i)
10337       ;
10338   }
10339 #pragma omp for simd
10340   for (int i = 0; i < 10; ++i) {
10341 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10342     {
10343       bar();
10344     }
10345   }
10346 #pragma omp for simd
10347   for (int i = 0; i < 10; ++i) {
10348 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10349     {
10350       bar();
10351     }
10352   }
10353 #pragma omp for simd
10354   for (int i = 0; i < 10; ++i) {
10355 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10356     bar();
10357   }
10358 #pragma omp for simd
10359   for (int i = 0; i < 10; ++i) {
10360 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10361     bar();
10362   }
10363 #pragma omp for simd
10364   for (int i = 0; i < 10; ++i) {
10365 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
10366     bar();
10367   }
10368 #pragma omp for simd
10369   for (int i = 0; i < 10; ++i) {
10370 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10371     bar();
10372   }
10373 #pragma omp for simd
10374   for (int i = 0; i < 10; ++i) {
10375 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10376     bar();
10377   }
10378 #pragma omp for simd
10379   for (int i = 0; i < 10; ++i) {
10380 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10381     bar();
10382   }
10383 #pragma omp for simd
10384   for (int i = 0; i < 10; ++i) {
10385 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
10386     ++a;
10387   }
10388 #pragma omp for simd
10389   for (int i = 0; i < 10; ++i) {
10390 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10391     ++a;
10392   }
10393 #pragma omp for simd
10394   for (int i = 0; i < 10; ++i) {
10395 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10396     ++a;
10397   }
10398 #pragma omp for simd
10399   for (int i = 0; i < 10; ++i) {
10400 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10401     for (int i = 0; i < 10; ++i)
10402       ;
10403   }
10404 #pragma omp for simd
10405   for (int i = 0; i < 10; ++i) {
10406 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10407     ++a;
10408   }
10409 #pragma omp for simd
10410   for (int i = 0; i < 10; ++i) {
10411 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10412     ++a;
10413   }
10414 #pragma omp for simd
10415   for (int i = 0; i < 10; ++i) {
10416 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10417     ++a;
10418   }
10419 #pragma omp for simd
10420   for (int i = 0; i < 10; ++i) {
10421 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10422   for (int i = 0; i < 10; ++i)
10423     ++a;
10424   }
10425 #pragma omp for simd
10426   for (int i = 0; i < 10; ++i) {
10427 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10428     for (int j = 0; j < 10; ++j)
10429       ;
10430   }
10431 #pragma omp for simd
10432   for (int i = 0; i < 10; ++i) {
10433 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10434     ++a;
10435   }
10436 #pragma omp for simd
10437   for (int i = 0; i < 10; ++i) {
10438 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10439     for (int j = 0; j < 10; ++j)
10440       ;
10441   }
10442 #pragma omp for simd
10443   for (int i = 0; i < 10; ++i) {
10444 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10445     for (int j = 0; j < 10; ++j)
10446       ;
10447   }
10448 #pragma omp for simd
10449   for (int i = 0; i < 10; ++i) {
10450 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10451     for (int j = 0; j < 10; ++j)
10452       ;
10453   }
10454 #pragma omp for simd
10455   for (int i = 0; i < 10; ++i) {
10456 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10457     for (int j = 0; j < 10; ++j)
10458       ;
10459   }
10460 #pragma omp for simd
10461   for (int i = 0; i < 10; ++i) {
10462 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10463     for (int j = 0; j < 10; ++j)
10464       ;
10465   }
10466 #pragma omp for simd
10467   for (int i = 0; i < 10; ++i) {
10468 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10469     for (int j = 0; j < 10; ++j)
10470       ;
10471   }
10472 #pragma omp for simd
10473   for (int i = 0; i < 10; ++i) {
10474 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10475     for (int j = 0; j < 10; ++j)
10476       ;
10477   }
10478 #pragma omp for simd
10479   for (int i = 0; i < 10; ++i) {
10480 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10481     for (int j = 0; j < 10; ++j)
10482       ;
10483   }
10484 #pragma omp for simd
10485   for (int i = 0; i < 10; ++i) {
10486 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10487     a++;
10488   }
10489 #pragma omp for simd
10490   for (int i = 0; i < 10; ++i) {
10491 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10492     for (int j = 0; j < 10; ++j)
10493       ;
10494   }
10495 #pragma omp for simd
10496   for (int i = 0; i < 10; ++i) {
10497 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10498     for (int j = 0; j < 10; ++j)
10499       ;
10500   }
10501 #pragma omp for simd
10502   for (int i = 0; i < 10; ++i) {
10503 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10504     for (int j = 0; j < 10; ++j)
10505       ;
10506   }
10507 #pragma omp for simd
10508   for (int i = 0; i < 10; ++i) {
10509 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10510     for (int j = 0; j < 10; ++j)
10511       ;
10512   }
10513 
10514 // SECTIONS DIRECTIVE
10515 #pragma omp sections
10516   {
10517 #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?}}
10518     for (int i = 0; i < 10; ++i)
10519       ;
10520   }
10521 #pragma omp sections
10522   {
10523 #pragma omp simd
10524     for (int i = 0; i < 10; ++i)
10525       ;
10526   }
10527 #pragma omp sections
10528   {
10529 #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?}}
10530     for (int i = 0; i < 10; ++i)
10531       ;
10532   }
10533 #pragma omp sections
10534   {
10535 #pragma omp parallel
10536     for (int i = 0; i < 10; ++i)
10537       ;
10538   }
10539 #pragma omp sections
10540   {
10541 #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?}}
10542     {
10543       bar();
10544     }
10545   }
10546 #pragma omp sections
10547   {
10548 #pragma omp section
10549     {
10550       bar();
10551     }
10552   }
10553 #pragma omp sections
10554   {
10555 #pragma omp critical
10556     bar();
10557 #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?}}
10558     bar();
10559 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
10560     bar();
10561   }
10562 #pragma omp sections
10563   {
10564 #pragma omp parallel
10565     {
10566 #pragma omp single // OK
10567       {
10568         bar();
10569       }
10570 #pragma omp for // OK
10571       for (int i = 0; i < 10; ++i)
10572         ;
10573 #pragma omp for simd // OK
10574       for (int i = 0; i < 10; ++i)
10575         ;
10576 #pragma omp sections // OK
10577       {
10578         bar();
10579       }
10580     }
10581   }
10582 #pragma omp sections
10583   {
10584 #pragma omp parallel for
10585     for (int i = 0; i < 10; ++i)
10586       ;
10587   }
10588 #pragma omp sections
10589   {
10590 #pragma omp parallel for simd
10591     for (int i = 0; i < 10; ++i)
10592       ;
10593   }
10594 #pragma omp sections
10595   {
10596 #pragma omp parallel sections
10597     {
10598       bar();
10599     }
10600   }
10601 #pragma omp sections
10602   {
10603 #pragma omp task
10604     {
10605       bar();
10606     }
10607   }
10608 #pragma omp sections
10609   {
10610 #pragma omp taskyield
10611   }
10612 #pragma omp sections
10613   {
10614 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
10615     bar();
10616   }
10617 #pragma omp sections
10618   {
10619 #pragma omp scan // expected-error {{region cannot be closely nested inside 'sections' region}}
10620     bar();
10621   }
10622 #pragma omp sections
10623   {
10624 #pragma omp taskwait
10625   }
10626 #pragma omp sections
10627   {
10628 #pragma omp flush
10629   }
10630 #pragma omp sections
10631   {
10632 #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?}}
10633     bar();
10634   }
10635 #pragma omp sections
10636   {
10637 #pragma omp atomic
10638     ++a;
10639   }
10640 #pragma omp sections
10641   {
10642 #pragma omp target
10643     ++a;
10644   }
10645 #pragma omp sections
10646   {
10647 #pragma omp target parallel
10648     ++a;
10649   }
10650 #pragma omp sections
10651   {
10652 #pragma omp target parallel for
10653     for (int i = 0; i < 10; ++i)
10654       ;
10655   }
10656 #pragma omp sections
10657   {
10658 #pragma omp target enter data map(to: a)
10659   }
10660 #pragma omp sections
10661   {
10662 #pragma omp target exit data map(from: a)
10663   }
10664 #pragma omp sections
10665   {
10666 #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?}}
10667     ++a;
10668   }
10669 #pragma omp sections
10670   {
10671 #pragma omp taskloop
10672   for (int i = 0; i < 10; ++i)
10673     ++a;
10674   }
10675 #pragma omp sections
10676   {
10677 #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?}}
10678     for (int i = 0; i < 10; ++i)
10679       ;
10680   }
10681 #pragma omp sections
10682   {
10683 #pragma omp target update to(a)
10684   }
10685 #pragma omp sections
10686   {
10687 #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?}}
10688     for (int i = 0; i < 10; ++i)
10689       ;
10690   }
10691 #pragma omp sections
10692   {
10693 #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?}}
10694     for (int i = 0; i < 10; ++i)
10695       ;
10696   }
10697 #pragma omp sections
10698   {
10699 #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?}}
10700     for (int i = 0; i < 10; ++i)
10701       ;
10702   }
10703 #pragma omp sections
10704   {
10705 #pragma omp target simd // OK
10706     for (int i = 0; i < 10; ++i)
10707       ;
10708   }
10709 #pragma omp sections
10710   {
10711 #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?}}
10712     for (int i = 0; i < 10; ++i)
10713       ;
10714   }
10715 #pragma omp sections
10716   {
10717 #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?}}
10718     for (int i = 0; i < 10; ++i)
10719       ;
10720   }
10721 #pragma omp sections
10722   {
10723 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10724     for (int i = 0; i < 10; ++i)
10725       ;
10726   }
10727 #pragma omp sections
10728   {
10729 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10730     for (int i = 0; i < 10; ++i)
10731       ;
10732   }
10733 #pragma omp sections
10734   {
10735 #pragma omp target teams // OK
10736     a++;
10737   }
10738 #pragma omp sections
10739   {
10740 #pragma omp target teams distribute // OK
10741     for (int i = 0; i < 10; ++i)
10742       ;
10743   }
10744 #pragma omp sections
10745   {
10746 #pragma omp target teams distribute parallel for // OK
10747     for (int i = 0; i < 10; ++i)
10748       ;
10749   }
10750 #pragma omp sections
10751   {
10752 #pragma omp target teams distribute parallel for simd // OK
10753     for (int i = 0; i < 10; ++i)
10754       ;
10755   }
10756 #pragma omp sections
10757   {
10758 #pragma omp target teams distribute simd // OK
10759     for (int i = 0; i < 10; ++i)
10760       ;
10761   }
10762 
10763 // SECTION DIRECTIVE
10764 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
10765   {
10766     bar();
10767   }
10768 #pragma omp sections
10769   {
10770 #pragma omp section
10771     {
10772 #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?}}
10773       for (int i = 0; i < 10; ++i)
10774         ;
10775     }
10776   }
10777 #pragma omp sections
10778   {
10779 #pragma omp section
10780     {
10781 #pragma omp simd
10782       for (int i = 0; i < 10; ++i)
10783         ;
10784     }
10785   }
10786 #pragma omp sections
10787   {
10788 #pragma omp section
10789     {
10790 #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?}}
10791       for (int i = 0; i < 10; ++i)
10792         ;
10793     }
10794   }
10795 #pragma omp sections
10796   {
10797 #pragma omp section
10798     {
10799 #pragma omp parallel
10800       for (int i = 0; i < 10; ++i)
10801         ;
10802     }
10803   }
10804 #pragma omp sections
10805   {
10806 #pragma omp section
10807     {
10808 #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?}}
10809       {
10810         bar();
10811       }
10812     }
10813   }
10814 #pragma omp sections
10815   {
10816 #pragma omp section
10817     {
10818 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
10819       {
10820         bar();
10821       }
10822     }
10823   }
10824 #pragma omp sections
10825   {
10826 #pragma omp section
10827     {
10828 #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?}}
10829       bar();
10830 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
10831       bar();
10832 #pragma omp critical
10833       bar();
10834     }
10835   }
10836 #pragma omp sections
10837   {
10838 #pragma omp section
10839     {
10840 #pragma omp parallel
10841       {
10842 #pragma omp single // OK
10843         {
10844           bar();
10845         }
10846 #pragma omp for // OK
10847         for (int i = 0; i < 10; ++i)
10848           ;
10849 #pragma omp for simd // OK
10850         for (int i = 0; i < 10; ++i)
10851           ;
10852 #pragma omp sections // OK
10853         {
10854           bar();
10855         }
10856       }
10857     }
10858   }
10859 #pragma omp sections
10860   {
10861 #pragma omp section
10862     {
10863 #pragma omp parallel for
10864       for (int i = 0; i < 10; ++i)
10865         ;
10866     }
10867   }
10868 #pragma omp sections
10869   {
10870 #pragma omp section
10871     {
10872 #pragma omp parallel for simd
10873       for (int i = 0; i < 10; ++i)
10874         ;
10875     }
10876   }
10877 #pragma omp sections
10878   {
10879 #pragma omp section
10880     {
10881 #pragma omp parallel sections
10882       {
10883         bar();
10884       }
10885     }
10886   }
10887 #pragma omp sections
10888   {
10889 #pragma omp section
10890     {
10891 #pragma omp task
10892       {
10893         bar();
10894       }
10895     }
10896   }
10897 #pragma omp sections
10898   {
10899 #pragma omp section
10900     {
10901 #pragma omp taskyield
10902       bar();
10903     }
10904   }
10905 #pragma omp sections
10906   {
10907 #pragma omp section
10908     {
10909 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
10910       bar();
10911     }
10912   }
10913 #pragma omp sections
10914   {
10915 #pragma omp section
10916     {
10917 #pragma omp scan // expected-error {{region cannot be closely nested inside 'section' region}}
10918       bar();
10919     }
10920   }
10921 #pragma omp sections
10922   {
10923 #pragma omp section
10924     {
10925 #pragma omp taskwait
10926       bar();
10927     }
10928   }
10929 #pragma omp sections
10930   {
10931 #pragma omp section
10932     {
10933 #pragma omp flush
10934       bar();
10935     }
10936   }
10937 #pragma omp sections
10938   {
10939 #pragma omp section
10940     {
10941 #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?}}
10942       bar();
10943     }
10944   }
10945 #pragma omp sections
10946   {
10947 #pragma omp section
10948     {
10949 #pragma omp atomic
10950       ++a;
10951     }
10952   }
10953 #pragma omp sections
10954   {
10955 #pragma omp section
10956     {
10957 #pragma omp target
10958       ++a;
10959     }
10960   }
10961 #pragma omp sections
10962   {
10963 #pragma omp section
10964     {
10965 #pragma omp target parallel
10966       ++a;
10967     }
10968   }
10969 #pragma omp sections
10970   {
10971 #pragma omp section
10972     {
10973 #pragma omp target parallel for
10974       for (int i = 0; i < 10; ++i)
10975         ;
10976     }
10977   }
10978 #pragma omp sections
10979   {
10980 #pragma omp section
10981     {
10982 #pragma omp target enter data map(to: a)
10983       ++a;
10984     }
10985   }
10986 #pragma omp sections
10987   {
10988 #pragma omp section
10989     {
10990 #pragma omp target exit data map(from: a)
10991       ++a;
10992     }
10993   }
10994 #pragma omp sections
10995   {
10996 #pragma omp section
10997     {
10998 #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?}}
10999       ++a;
11000     }
11001   }
11002 #pragma omp sections
11003   {
11004 #pragma omp section
11005     {
11006 #pragma omp taskloop
11007   for (int i = 0; i < 10; ++i)
11008       ++a;
11009     }
11010   }
11011 #pragma omp sections
11012   {
11013 #pragma omp section
11014 #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?}}
11015     for (int i = 0; i < 10; ++i)
11016       ;
11017   }
11018 #pragma omp sections
11019   {
11020 #pragma omp section
11021     {
11022 #pragma omp target update to(a)
11023       a++;
11024     }
11025   }
11026 #pragma omp sections
11027   {
11028 #pragma omp section
11029 #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?}}
11030     for (int i = 0; i < 10; ++i)
11031       ;
11032   }
11033 #pragma omp sections
11034   {
11035 #pragma omp section
11036 #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?}}
11037     for (int i = 0; i < 10; ++i)
11038       ;
11039   }
11040 #pragma omp sections
11041   {
11042 #pragma omp section
11043 #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?}}
11044     for (int i = 0; i < 10; ++i)
11045       ;
11046   }
11047 #pragma omp sections
11048   {
11049 #pragma omp section
11050 #pragma omp target simd // OK
11051     for (int i = 0; i < 10; ++i)
11052       ;
11053   }
11054 #pragma omp sections
11055   {
11056 #pragma omp section
11057 #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?}}
11058     for (int i = 0; i < 10; ++i)
11059       ;
11060   }
11061 #pragma omp sections
11062   {
11063 #pragma omp section
11064 #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?}}
11065     for (int i = 0; i < 10; ++i)
11066       ;
11067   }
11068 #pragma omp sections
11069   {
11070 #pragma omp section
11071 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11072     for (int i = 0; i < 10; ++i)
11073       ;
11074   }
11075 #pragma omp sections
11076   {
11077 #pragma omp section
11078 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11079     for (int i = 0; i < 10; ++i)
11080       ;
11081   }
11082 #pragma omp sections
11083   {
11084 #pragma omp section
11085 #pragma omp target teams // OK
11086     a++;
11087   }
11088 #pragma omp sections
11089   {
11090 #pragma omp section
11091 #pragma omp target teams distribute // OK
11092     for (int i = 0; i < 10; ++i)
11093       ;
11094   }
11095 #pragma omp sections
11096   {
11097 #pragma omp section
11098 #pragma omp target teams distribute parallel for // OK
11099     for (int i = 0; i < 10; ++i)
11100       ;
11101   }
11102 #pragma omp sections
11103   {
11104 #pragma omp section
11105 #pragma omp target teams distribute parallel for simd // OK
11106     for (int i = 0; i < 10; ++i)
11107       ;
11108   }
11109 #pragma omp sections
11110   {
11111 #pragma omp section
11112 #pragma omp target teams distribute simd // OK
11113     for (int i = 0; i < 10; ++i)
11114       ;
11115   }
11116 
11117 // SINGLE DIRECTIVE
11118 #pragma omp single
11119   {
11120 #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?}}
11121     for (int i = 0; i < 10; ++i)
11122       ;
11123   }
11124 #pragma omp single
11125   {
11126 #pragma omp simd
11127     for (int i = 0; i < 10; ++i)
11128       ;
11129   }
11130 #pragma omp single
11131   {
11132 #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?}}
11133     for (int i = 0; i < 10; ++i)
11134       ;
11135   }
11136 #pragma omp single
11137   {
11138 #pragma omp parallel
11139     for (int i = 0; i < 10; ++i)
11140       ;
11141   }
11142 #pragma omp single
11143   {
11144 #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?}}
11145     {
11146       bar();
11147     }
11148 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
11149     bar();
11150 #pragma omp critical
11151     bar();
11152   }
11153 #pragma omp single
11154   {
11155 #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?}}
11156     {
11157       bar();
11158     }
11159   }
11160 #pragma omp single
11161   {
11162 #pragma omp parallel
11163     {
11164 #pragma omp single // OK
11165       {
11166         bar();
11167       }
11168 #pragma omp for // OK
11169       for (int i = 0; i < 10; ++i)
11170         ;
11171 #pragma omp for simd // OK
11172       for (int i = 0; i < 10; ++i)
11173         ;
11174 #pragma omp sections // OK
11175       {
11176         bar();
11177       }
11178     }
11179   }
11180 #pragma omp single
11181   {
11182 #pragma omp parallel for
11183     for (int i = 0; i < 10; ++i)
11184       ;
11185   }
11186 #pragma omp single
11187   {
11188 #pragma omp parallel for simd
11189     for (int i = 0; i < 10; ++i)
11190       ;
11191   }
11192 #pragma omp single
11193   {
11194 #pragma omp parallel sections
11195     {
11196       bar();
11197     }
11198   }
11199 #pragma omp single
11200   {
11201 #pragma omp task
11202     {
11203       bar();
11204     }
11205   }
11206 #pragma omp single
11207   {
11208 #pragma omp taskyield
11209     bar();
11210   }
11211 #pragma omp single
11212   {
11213 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
11214     bar();
11215   }
11216 #pragma omp single
11217   {
11218 #pragma omp scan // expected-error {{region cannot be closely nested inside 'single' region}}
11219     bar();
11220   }
11221 #pragma omp single
11222   {
11223 #pragma omp taskwait
11224     bar();
11225   }
11226 #pragma omp single
11227   {
11228 #pragma omp flush
11229     bar();
11230   }
11231 #pragma omp single
11232   {
11233 #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?}}
11234     bar();
11235   }
11236 #pragma omp single
11237   {
11238 #pragma omp atomic
11239     ++a;
11240   }
11241 #pragma omp single
11242   {
11243 #pragma omp target
11244     ++a;
11245   }
11246 #pragma omp single
11247   {
11248 #pragma omp target parallel
11249     ++a;
11250   }
11251 #pragma omp single
11252   {
11253 #pragma omp target parallel for
11254     for (int i = 0; i < 10; ++i)
11255       ;
11256   }
11257 #pragma omp single
11258   {
11259 #pragma omp target enter data map(to: a)
11260     ++a;
11261   }
11262 #pragma omp single
11263   {
11264 #pragma omp target exit data map(from: a)
11265     ++a;
11266   }
11267 #pragma omp single
11268   {
11269 #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?}}
11270     ++a;
11271   }
11272 #pragma omp single
11273   {
11274 #pragma omp taskloop
11275   for (int i = 0; i < 10; ++i)
11276     ++a;
11277   }
11278 #pragma omp single
11279   {
11280 #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?}}
11281     for (int i = 0; i < 10; ++i)
11282       ;
11283   }
11284 #pragma omp single
11285   {
11286 #pragma omp target update to(a)
11287     a++;
11288   }
11289 #pragma omp single
11290   {
11291 #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?}}
11292     for (int i = 0; i < 10; ++i)
11293       ;
11294   }
11295 #pragma omp single
11296   {
11297 #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?}}
11298     for (int i = 0; i < 10; ++i)
11299       ;
11300   }
11301 #pragma omp single
11302   {
11303 #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?}}
11304     for (int i = 0; i < 10; ++i)
11305       ;
11306   }
11307 #pragma omp single
11308   {
11309 #pragma omp target simd // OK
11310     for (int i = 0; i < 10; ++i)
11311       ;
11312   }
11313 #pragma omp single
11314   {
11315 #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?}}
11316     for (int i = 0; i < 10; ++i)
11317       ;
11318   }
11319 #pragma omp single
11320   {
11321 #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?}}
11322     for (int i = 0; i < 10; ++i)
11323       ;
11324   }
11325 #pragma omp single
11326   {
11327 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11328     for (int i = 0; i < 10; ++i)
11329       ;
11330   }
11331 #pragma omp single
11332   {
11333 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11334     for (int i = 0; i < 10; ++i)
11335       ;
11336   }
11337 #pragma omp single
11338   {
11339 #pragma omp target teams // oK
11340     a++;
11341   }
11342 #pragma omp single
11343   {
11344 #pragma omp target teams distribute // OK
11345     for (int i = 0; i < 10; ++i)
11346       ;
11347   }
11348 #pragma omp single
11349   {
11350 #pragma omp target teams distribute parallel for // OK
11351     for (int i = 0; i < 10; ++i)
11352       ;
11353   }
11354 #pragma omp single
11355   {
11356 #pragma omp target teams distribute parallel for simd // OK
11357     for (int i = 0; i < 10; ++i)
11358       ;
11359   }
11360 #pragma omp single
11361   {
11362 #pragma omp target teams distribute simd // OK
11363     for (int i = 0; i < 10; ++i)
11364       ;
11365   }
11366 
11367 // MASTER DIRECTIVE
11368 #pragma omp master
11369   {
11370 #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?}}
11371     for (int i = 0; i < 10; ++i)
11372       ;
11373   }
11374 #pragma omp master
11375   {
11376 #pragma omp simd
11377     for (int i = 0; i < 10; ++i)
11378       ;
11379   }
11380 #pragma omp master
11381   {
11382 #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?}}
11383     for (int i = 0; i < 10; ++i)
11384       ;
11385   }
11386 #pragma omp master
11387   {
11388 #pragma omp parallel
11389     for (int i = 0; i < 10; ++i)
11390       ;
11391   }
11392 #pragma omp parallel master
11393   {
11394     for (int i = 0; i < 10; ++i)
11395       ;
11396   }
11397 #pragma omp master
11398   {
11399 #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?}}
11400     {
11401       bar();
11402     }
11403   }
11404 #pragma omp master
11405   {
11406 #pragma omp master // OK, though second 'master' is redundant
11407     {
11408       bar();
11409     }
11410   }
11411 #pragma omp master
11412   {
11413 #pragma omp critical
11414     {
11415       bar();
11416     }
11417   }
11418 #pragma omp master
11419   {
11420 #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?}}
11421     {
11422       bar();
11423     }
11424   }
11425 #pragma omp master
11426   {
11427 #pragma omp parallel
11428     {
11429 #pragma omp master // OK
11430       {
11431         bar();
11432       }
11433 #pragma omp for // OK
11434       for (int i = 0; i < 10; ++i)
11435         ;
11436 #pragma omp for simd // OK
11437       for (int i = 0; i < 10; ++i)
11438         ;
11439 #pragma omp sections // OK
11440       {
11441         bar();
11442       }
11443     }
11444   }
11445 #pragma omp master
11446   {
11447 #pragma omp parallel master
11448     {
11449       bar();
11450     }
11451   }
11452 #pragma omp master
11453   {
11454 #pragma omp parallel for
11455     for (int i = 0; i < 10; ++i)
11456       ;
11457   }
11458 #pragma omp master
11459   {
11460 #pragma omp parallel for simd
11461     for (int i = 0; i < 10; ++i)
11462       ;
11463   }
11464 #pragma omp master
11465   {
11466 #pragma omp parallel sections
11467     {
11468       bar();
11469     }
11470   }
11471 #pragma omp master
11472   {
11473 #pragma omp task
11474     {
11475       bar();
11476     }
11477   }
11478 #pragma omp master
11479   {
11480 #pragma omp taskyield
11481     bar();
11482   }
11483 #pragma omp master
11484   {
11485 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
11486     bar();
11487   }
11488 #pragma omp master
11489   {
11490 #pragma omp scan // expected-error {{region cannot be closely nested inside 'master' region}}
11491     bar();
11492   }
11493 #pragma omp master
11494   {
11495 #pragma omp taskwait
11496     bar();
11497   }
11498 #pragma omp master
11499   {
11500 #pragma omp flush
11501     bar();
11502   }
11503 #pragma omp master
11504   {
11505 #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?}}
11506     bar();
11507   }
11508 #pragma omp master
11509   {
11510 #pragma omp atomic
11511     ++a;
11512   }
11513 #pragma omp master
11514   {
11515 #pragma omp target
11516     ++a;
11517   }
11518 #pragma omp master
11519   {
11520 #pragma omp target parallel
11521     ++a;
11522   }
11523 #pragma omp master
11524   {
11525 #pragma omp target parallel for
11526     for (int i = 0; i < 10; ++i)
11527       ;
11528   }
11529 #pragma omp master
11530   {
11531 #pragma omp target enter data map(to: a)
11532     ++a;
11533   }
11534 #pragma omp master
11535   {
11536 #pragma omp target exit data map(from: a)
11537     ++a;
11538   }
11539 #pragma omp master
11540   {
11541 #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?}}
11542     ++a;
11543   }
11544 #pragma omp master
11545   {
11546 #pragma omp taskloop
11547   for (int i = 0; i < 10; ++i)
11548     ++a;
11549   }
11550 #pragma omp master
11551   {
11552 #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?}}
11553     for (int i = 0; i < 10; ++i)
11554       ;
11555   }
11556 #pragma omp master
11557   {
11558 #pragma omp target update to(a)
11559     ++a;
11560   }
11561 #pragma omp master
11562   {
11563 #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?}}
11564     for (int i = 0; i < 10; ++i)
11565       ;
11566   }
11567 #pragma omp master
11568   {
11569 #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?}}
11570     for (int i = 0; i < 10; ++i)
11571       ;
11572   }
11573 #pragma omp master
11574   {
11575 #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?}}
11576     for (int i = 0; i < 10; ++i)
11577       ;
11578   }
11579 #pragma omp master
11580   {
11581 #pragma omp target simd // OK
11582     for (int i = 0; i < 10; ++i)
11583       ;
11584   }
11585 #pragma omp master
11586   {
11587 #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?}}
11588     for (int i = 0; i < 10; ++i)
11589       ;
11590   }
11591 #pragma omp master
11592   {
11593 #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?}}
11594     for (int i = 0; i < 10; ++i)
11595       ;
11596   }
11597 #pragma omp master
11598   {
11599 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11600     for (int i = 0; i < 10; ++i)
11601       ;
11602   }
11603 #pragma omp master
11604   {
11605 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11606     for (int i = 0; i < 10; ++i)
11607       ;
11608   }
11609 #pragma omp master
11610   {
11611 #pragma omp target teams // OK
11612     a++;
11613   }
11614 #pragma omp master
11615   {
11616 #pragma omp target teams distribute // OK
11617     for (int i = 0; i < 10; ++i)
11618       ;
11619   }
11620 #pragma omp master
11621   {
11622 #pragma omp target teams distribute parallel for // OK
11623     for (int i = 0; i < 10; ++i)
11624       ;
11625   }
11626 #pragma omp master
11627   {
11628 #pragma omp target teams distribute parallel for simd // OK
11629     for (int i = 0; i < 10; ++i)
11630       ;
11631   }
11632 #pragma omp master
11633   {
11634 #pragma omp target teams distribute simd // OK
11635     for (int i = 0; i < 10; ++i)
11636       ;
11637   }
11638 
11639 // CRITICAL DIRECTIVE
11640 #pragma omp critical
11641   {
11642 #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?}}
11643     for (int i = 0; i < 10; ++i)
11644       ;
11645   }
11646 #pragma omp critical
11647   {
11648 #pragma omp simd
11649     for (int i = 0; i < 10; ++i)
11650       ;
11651   }
11652 #pragma omp critical
11653   {
11654 #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?}}
11655     for (int i = 0; i < 10; ++i)
11656       ;
11657   }
11658 #pragma omp critical
11659   {
11660 #pragma omp parallel
11661     for (int i = 0; i < 10; ++i)
11662       ;
11663   }
11664 #pragma omp critical
11665   {
11666 #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?}}
11667     {
11668       bar();
11669     }
11670   }
11671 #pragma omp critical
11672   {
11673 #pragma omp master // OK, though second 'master' is redundant
11674     {
11675       bar();
11676     }
11677   }
11678 #pragma omp critical
11679   {
11680 #pragma omp critical
11681     {
11682       bar();
11683     }
11684   }
11685 #pragma omp critical
11686   {
11687 #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?}}
11688     {
11689       bar();
11690     }
11691   }
11692 #pragma omp critical
11693   {
11694 #pragma omp parallel
11695     {
11696 #pragma omp master // OK
11697       {
11698         bar();
11699       }
11700 #pragma omp for // OK
11701       for (int i = 0; i < 10; ++i)
11702         ;
11703 #pragma omp for simd // OK
11704       for (int i = 0; i < 10; ++i)
11705         ;
11706 #pragma omp sections // OK
11707       {
11708         bar();
11709       }
11710     }
11711   }
11712 #pragma omp critical
11713   {
11714 #pragma omp parallel for
11715     for (int i = 0; i < 10; ++i)
11716       ;
11717   }
11718 #pragma omp critical
11719   {
11720 #pragma omp parallel for simd
11721     for (int i = 0; i < 10; ++i)
11722       ;
11723   }
11724 #pragma omp critical
11725   {
11726 #pragma omp parallel sections
11727     {
11728       bar();
11729     }
11730   }
11731 #pragma omp critical
11732   {
11733 #pragma omp task
11734     {
11735       bar();
11736     }
11737   }
11738 #pragma omp critical
11739   {
11740 #pragma omp taskyield
11741     bar();
11742   }
11743 #pragma omp critical
11744   {
11745 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
11746     bar();
11747   }
11748 #pragma omp critical
11749   {
11750 #pragma omp scan // expected-error {{region cannot be closely nested inside 'critical' region}}
11751     bar();
11752   }
11753 #pragma omp critical
11754   {
11755 #pragma omp taskwait
11756     bar();
11757   }
11758 #pragma omp critical(Belka)
11759   {
11760 #pragma omp critical(Strelka)
11761     bar();
11762   }
11763 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
11764   {
11765 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
11766     {
11767 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
11768       {
11769 #pragma omp parallel
11770 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
11771         {
11772           bar();
11773         }
11774       }
11775     }
11776   }
11777 #pragma omp critical
11778   {
11779 #pragma omp flush
11780     bar();
11781   }
11782 #pragma omp critical
11783   {
11784 #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?}}
11785     bar();
11786   }
11787 #pragma omp critical
11788   {
11789 #pragma omp atomic
11790     ++a;
11791   }
11792 #pragma omp critical
11793   {
11794 #pragma omp target
11795     ++a;
11796   }
11797 #pragma omp critical
11798   {
11799 #pragma omp target parallel
11800     ++a;
11801   }
11802 #pragma omp critical
11803   {
11804 #pragma omp target parallel for
11805     for (int i = 0; i < 10; ++i)
11806       ;
11807   }
11808 #pragma omp critical
11809   {
11810 #pragma omp target enter data map(to: a)
11811     ++a;
11812   }
11813 #pragma omp critical
11814   {
11815 #pragma omp target exit data map(from: a)
11816     ++a;
11817   }
11818 #pragma omp critical
11819   {
11820 #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?}}
11821     ++a;
11822   }
11823 #pragma omp critical
11824   {
11825 #pragma omp taskloop
11826   for (int i = 0; i < 10; ++i)
11827     ++a;
11828   }
11829 #pragma omp critical
11830   {
11831 #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?}}
11832     for (int i = 0; i < 10; ++i)
11833       ;
11834   }
11835 #pragma omp critical
11836   {
11837 #pragma omp target update to(a)
11838     a++;
11839   }
11840 #pragma omp critical
11841   {
11842 #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?}}
11843     for (int i = 0; i < 10; ++i)
11844       ;
11845   }
11846 #pragma omp critical
11847   {
11848 #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?}}
11849     for (int i = 0; i < 10; ++i)
11850       ;
11851   }
11852 #pragma omp critical
11853   {
11854 #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?}}
11855     for (int i = 0; i < 10; ++i)
11856       ;
11857   }
11858 #pragma omp critical
11859   {
11860 #pragma omp target simd // OK
11861     for (int i = 0; i < 10; ++i)
11862       ;
11863   }
11864 #pragma omp critical
11865   {
11866 #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?}}
11867     for (int i = 0; i < 10; ++i)
11868       ;
11869   }
11870 #pragma omp critical
11871   {
11872 #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?}}
11873     for (int i = 0; i < 10; ++i)
11874       ;
11875   }
11876 #pragma omp critical
11877   {
11878 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11879     for (int i = 0; i < 10; ++i)
11880       ;
11881   }
11882 #pragma omp critical
11883   {
11884 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11885     for (int i = 0; i < 10; ++i)
11886       ;
11887   }
11888 #pragma omp critical
11889   {
11890 #pragma omp target teams // OK
11891     a++;
11892   }
11893 #pragma omp critical
11894   {
11895 #pragma omp target teams distribute // OK
11896     for (int i = 0; i < 10; ++i)
11897       ;
11898   }
11899 #pragma omp critical
11900   {
11901 #pragma omp target teams distribute parallel for // OK
11902     for (int i = 0; i < 10; ++i)
11903       ;
11904   }
11905 #pragma omp critical
11906   {
11907 #pragma omp target teams distribute parallel for simd // OK
11908     for (int i = 0; i < 10; ++i)
11909       ;
11910   }
11911 #pragma omp critical
11912   {
11913 #pragma omp target teams distribute simd // OK
11914     for (int i = 0; i < 10; ++i)
11915       ;
11916   }
11917 
11918 // PARALLEL FOR DIRECTIVE
11919 #pragma omp parallel for
11920   for (int i = 0; i < 10; ++i) {
11921 #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?}}
11922     for (int i = 0; i < 10; ++i)
11923       ;
11924   }
11925 #pragma omp parallel for
11926   for (int i = 0; i < 10; ++i) {
11927 #pragma omp simd
11928     for (int i = 0; i < 10; ++i)
11929       ;
11930   }
11931 #pragma omp parallel for
11932   for (int i = 0; i < 10; ++i) {
11933 #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?}}
11934     for (int i = 0; i < 10; ++i)
11935       ;
11936   }
11937 
11938 #pragma omp parallel for
11939   for (int i = 0; i < 10; ++i) {
11940 #pragma omp parallel
11941     for (int i = 0; i < 10; ++i)
11942       ;
11943   }
11944 #pragma omp parallel for
11945   for (int i = 0; i < 10; ++i) {
11946 #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?}}
11947     {
11948       bar();
11949     }
11950   }
11951 #pragma omp parallel for
11952   for (int i = 0; i < 10; ++i) {
11953 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
11954     {
11955       bar();
11956     }
11957   }
11958 #pragma omp parallel for
11959   for (int i = 0; i < 10; ++i) {
11960 #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?}}
11961     {
11962       bar();
11963     }
11964 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11965     {
11966       bar();
11967     }
11968 #pragma omp critical
11969     {
11970       bar();
11971     }
11972   }
11973 #pragma omp parallel for
11974   for (int i = 0; i < 10; ++i) {
11975 #pragma omp parallel
11976     {
11977 #pragma omp single // OK
11978       {
11979         bar();
11980       }
11981 #pragma omp master // OK
11982       {
11983         bar();
11984       }
11985 #pragma omp critical // OK
11986       {
11987         bar();
11988       }
11989 #pragma omp for // OK
11990       for (int i = 0; i < 10; ++i)
11991         ;
11992 #pragma omp for simd // OK
11993       for (int i = 0; i < 10; ++i)
11994         ;
11995 #pragma omp sections // OK
11996       {
11997         bar();
11998       }
11999     }
12000   }
12001 #pragma omp parallel for
12002   for (int i = 0; i < 10; ++i) {
12003 #pragma omp parallel for
12004     for (int i = 0; i < 10; ++i)
12005       ;
12006   }
12007 #pragma omp parallel for
12008   for (int i = 0; i < 10; ++i) {
12009 #pragma omp parallel for simd
12010     for (int i = 0; i < 10; ++i)
12011       ;
12012   }
12013 #pragma omp parallel for
12014   for (int i = 0; i < 10; ++i) {
12015 #pragma omp parallel sections
12016     {
12017       bar();
12018     }
12019   }
12020 #pragma omp parallel for
12021   for (int i = 0; i < 10; ++i) {
12022 #pragma omp task
12023     {
12024       bar();
12025     }
12026   }
12027 #pragma omp parallel for
12028   for (int i = 0; i < 10; ++i) {
12029 #pragma omp taskyield
12030     bar();
12031   }
12032 #pragma omp parallel for
12033   for (int i = 0; i < 10; ++i) {
12034 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
12035     bar();
12036   }
12037 #pragma omp parallel for
12038   for (int i = 0; i < 10; ++i) {
12039 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'parallel for' region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
12040     bar();
12041   }
12042 #pragma omp parallel for
12043   for (int i = 0; i < 10; ++i) {
12044 #pragma omp taskwait
12045     bar();
12046   }
12047 #pragma omp parallel for
12048   for (int i = 0; i < 10; ++i) {
12049 #pragma omp flush
12050     bar();
12051   }
12052 #pragma omp parallel for
12053   for (int i = 0; i < 10; ++i) {
12054 #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?}}
12055     bar();
12056   }
12057 #pragma omp parallel for ordered
12058   for (int i = 0; i < 10; ++i) {
12059 #pragma omp ordered // OK
12060     bar();
12061   }
12062 #pragma omp parallel for
12063   for (int i = 0; i < 10; ++i) {
12064 #pragma omp atomic
12065     ++a;
12066   }
12067 #pragma omp parallel for
12068   for (int i = 0; i < 10; ++i) {
12069 #pragma omp target
12070     ++a;
12071   }
12072 #pragma omp parallel for
12073   for (int i = 0; i < 10; ++i) {
12074 #pragma omp target parallel
12075     ++a;
12076   }
12077 #pragma omp parallel for
12078   for (int i = 0; i < 10; ++i) {
12079 #pragma omp target parallel for
12080     for (int i = 0; i < 10; ++i)
12081       ;
12082   }
12083 #pragma omp parallel for
12084   for (int i = 0; i < 10; ++i) {
12085 #pragma omp target enter data map(to: a)
12086     ++a;
12087   }
12088 #pragma omp parallel for
12089   for (int i = 0; i < 10; ++i) {
12090 #pragma omp target exit data map(from: a)
12091     ++a;
12092   }
12093 #pragma omp parallel for
12094   for (int i = 0; i < 10; ++i) {
12095 #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?}}
12096     ++a;
12097   }
12098 #pragma omp parallel for
12099   for (int i = 0; i < 10; ++i) {
12100 #pragma omp taskloop
12101   for (int i = 0; i < 10; ++i)
12102     ++a;
12103   }
12104 #pragma omp parallel for
12105   for (int i = 0; i < 10; ++i) {
12106 #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?}}
12107     for (int j = 0; j < 10; ++j)
12108       ;
12109   }
12110 #pragma omp parallel for
12111   for (int i = 0; i < 10; ++i) {
12112 #pragma omp target update to(a)
12113     a++;
12114   }
12115 #pragma omp parallel for
12116   for (int i = 0; i < 10; ++i) {
12117 #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?}}
12118     for (int j = 0; j < 10; ++j)
12119       ;
12120   }
12121 #pragma omp parallel for
12122   for (int i = 0; i < 10; ++i) {
12123 #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?}}
12124     for (int j = 0; j < 10; ++j)
12125       ;
12126   }
12127 #pragma omp parallel for
12128   for (int i = 0; i < 10; ++i) {
12129 #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?}}
12130     for (int j = 0; j < 10; ++j)
12131       ;
12132   }
12133 #pragma omp parallel for
12134   for (int i = 0; i < 10; ++i) {
12135 #pragma omp target simd // OK
12136     for (int j = 0; j < 10; ++j)
12137       ;
12138   }
12139 #pragma omp parallel for
12140   for (int i = 0; i < 10; ++i) {
12141 #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?}}
12142     for (int j = 0; j < 10; ++j)
12143       ;
12144   }
12145 #pragma omp parallel for
12146   for (int i = 0; i < 10; ++i) {
12147 #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?}}
12148     for (int j = 0; j < 10; ++j)
12149       ;
12150   }
12151 #pragma omp parallel for
12152   for (int i = 0; i < 10; ++i) {
12153 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12154     for (int j = 0; j < 10; ++j)
12155       ;
12156   }
12157 #pragma omp parallel for
12158   for (int i = 0; i < 10; ++i) {
12159 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12160     for (int j = 0; j < 10; ++j)
12161       ;
12162   }
12163 #pragma omp parallel for
12164   for (int i = 0; i < 10; ++i) {
12165 #pragma omp target teams // OK
12166     a++;
12167   }
12168 #pragma omp parallel for
12169   for (int i = 0; i < 10; ++i) {
12170 #pragma omp target teams distribute // OK
12171     for (int j = 0; j < 10; ++j)
12172       ;
12173   }
12174 #pragma omp parallel for
12175   for (int i = 0; i < 10; ++i) {
12176 #pragma omp target teams distribute parallel for // OK
12177     for (int j = 0; j < 10; ++j)
12178       ;
12179   }
12180 #pragma omp parallel for
12181   for (int i = 0; i < 10; ++i) {
12182 #pragma omp target teams distribute parallel for simd // OK
12183     for (int j = 0; j < 10; ++j)
12184       ;
12185   }
12186 #pragma omp parallel for
12187   for (int i = 0; i < 10; ++i) {
12188 #pragma omp target teams distribute simd // OK
12189     for (int j = 0; j < 10; ++j)
12190       ;
12191   }
12192 
12193 // PARALLEL FOR SIMD DIRECTIVE
12194 #pragma omp parallel for simd
12195   for (int i = 0; i < 10; ++i) {
12196 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12197     for (int i = 0; i < 10; ++i)
12198       ;
12199   }
12200 #pragma omp parallel for simd
12201   for (int i = 0; i < 10; ++i) {
12202 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12203     for (int i = 0; i < 10; ++i)
12204       ;
12205   }
12206 #pragma omp parallel for simd
12207   for (int i = 0; i < 10; ++i) {
12208 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12209     for (int i = 0; i < 10; ++i)
12210       ;
12211   }
12212 #pragma omp parallel for simd
12213   for (int i = 0; i < 10; ++i) {
12214 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12215     for (int i = 0; i < 10; ++i)
12216       ;
12217   }
12218 #pragma omp parallel for simd
12219   for (int i = 0; i < 10; ++i) {
12220 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12221     {
12222       bar();
12223     }
12224   }
12225 #pragma omp parallel for simd
12226   for (int i = 0; i < 10; ++i) {
12227 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12228     {
12229       bar();
12230     }
12231   }
12232 #pragma omp parallel for simd
12233   for (int i = 0; i < 10; ++i) {
12234 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12235     {
12236       bar();
12237     }
12238   }
12239 
12240 #pragma omp parallel for simd
12241   for (int i = 0; i < 10; ++i) {
12242 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12243     {
12244       bar();
12245     }
12246   }
12247 
12248 #pragma omp parallel for simd
12249   for (int i = 0; i < 10; ++i) {
12250 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12251     {
12252       bar();
12253     }
12254   }
12255 
12256 #pragma omp parallel for simd
12257   for (int i = 0; i < 10; ++i) {
12258 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12259     {
12260 #pragma omp single
12261       {
12262         bar();
12263       }
12264 #pragma omp for
12265       for (int i = 0; i < 10; ++i)
12266         ;
12267 #pragma omp for simd
12268       for (int i = 0; i < 10; ++i)
12269         ;
12270 #pragma omp sections
12271       {
12272         bar();
12273       }
12274     }
12275   }
12276 #pragma omp parallel for simd
12277   for (int i = 0; i < 10; ++i) {
12278 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12279     for (int i = 0; i < 10; ++i)
12280       ;
12281   }
12282 #pragma omp parallel for simd
12283   for (int i = 0; i < 10; ++i) {
12284 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
12285     for (int i = 0; i < 10; ++i)
12286       ;
12287   }
12288 #pragma omp parallel for simd
12289   for (int i = 0; i < 10; ++i) {
12290 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12291     {
12292       bar();
12293     }
12294   }
12295 #pragma omp parallel for simd
12296   for (int i = 0; i < 10; ++i) {
12297 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12298     {
12299       bar();
12300     }
12301   }
12302 #pragma omp parallel for simd
12303   for (int i = 0; i < 10; ++i) {
12304 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12305     bar();
12306   }
12307 #pragma omp parallel for simd
12308   for (int i = 0; i < 10; ++i) {
12309 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12310     bar();
12311   }
12312 #pragma omp parallel for simd
12313   for (int i = 0; i < 10; ++i) {
12314 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
12315     bar();
12316   }
12317 #pragma omp parallel for simd
12318   for (int i = 0; i < 10; ++i) {
12319 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12320     bar();
12321   }
12322 #pragma omp parallel for simd
12323   for (int i = 0; i < 10; ++i) {
12324 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12325     bar();
12326   }
12327 #pragma omp parallel for simd
12328   for (int i = 0; i < 10; ++i) {
12329 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12330     bar();
12331   }
12332 #pragma omp parallel for simd
12333   for (int i = 0; i < 10; ++i) {
12334 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12335     bar();
12336   }
12337 #pragma omp parallel for simd
12338   for (int i = 0; i < 10; ++i) {
12339 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
12340     ++a;
12341   }
12342 #pragma omp parallel for simd
12343   for (int i = 0; i < 10; ++i) {
12344 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12345     ++a;
12346   }
12347 #pragma omp parallel for simd
12348   for (int i = 0; i < 10; ++i) {
12349 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12350     ++a;
12351   }
12352 #pragma omp parallel for simd
12353   for (int i = 0; i < 10; ++i) {
12354 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12355     for (int i = 0; i < 10; ++i)
12356       ;
12357   }
12358 #pragma omp parallel for simd
12359   for (int i = 0; i < 10; ++i) {
12360 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12361     ++a;
12362   }
12363 #pragma omp parallel for simd
12364   for (int i = 0; i < 10; ++i) {
12365 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12366     ++a;
12367   }
12368 #pragma omp parallel for simd
12369   for (int i = 0; i < 10; ++i) {
12370 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12371     ++a;
12372   }
12373 #pragma omp parallel for simd
12374   for (int i = 0; i < 10; ++i) {
12375 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12376   for (int i = 0; i < 10; ++i)
12377     ++a;
12378   }
12379 #pragma omp parallel for simd
12380   for (int i = 0; i < 10; ++i) {
12381 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12382     for (int j = 0; j < 10; ++j)
12383       ;
12384   }
12385 #pragma omp parallel for simd
12386   for (int i = 0; i < 10; ++i) {
12387 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12388     a++;
12389   }
12390 #pragma omp parallel for simd
12391   for (int i = 0; i < 10; ++i) {
12392 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12393     for (int j = 0; j < 10; ++j)
12394       ;
12395   }
12396 #pragma omp parallel for simd
12397   for (int i = 0; i < 10; ++i) {
12398 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12399     for (int j = 0; j < 10; ++j)
12400       ;
12401   }
12402 #pragma omp parallel for simd
12403   for (int i = 0; i < 10; ++i) {
12404 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12405     for (int j = 0; j < 10; ++j)
12406       ;
12407   }
12408 #pragma omp parallel for simd
12409   for (int i = 0; i < 10; ++i) {
12410 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12411     for (int j = 0; j < 10; ++j)
12412       ;
12413   }
12414 #pragma omp parallel for simd
12415   for (int i = 0; i < 10; ++i) {
12416 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12417     for (int j = 0; j < 10; ++j)
12418       ;
12419   }
12420 #pragma omp parallel for simd
12421   for (int i = 0; i < 10; ++i) {
12422 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12423     for (int j = 0; j < 10; ++j)
12424       ;
12425   }
12426 #pragma omp parallel for simd
12427   for (int i = 0; i < 10; ++i) {
12428 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12429     for (int j = 0; j < 10; ++j)
12430       ;
12431   }
12432 #pragma omp parallel for simd
12433   for (int i = 0; i < 10; ++i) {
12434 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12435     for (int j = 0; j < 10; ++j)
12436       ;
12437   }
12438 #pragma omp parallel for simd
12439   for (int i = 0; i < 10; ++i) {
12440 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12441     a++;
12442   }
12443 #pragma omp parallel for simd
12444   for (int i = 0; i < 10; ++i) {
12445 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12446     for (int j = 0; j < 10; ++j)
12447       ;
12448   }
12449 #pragma omp parallel for simd
12450   for (int i = 0; i < 10; ++i) {
12451 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12452     for (int j = 0; j < 10; ++j)
12453       ;
12454   }
12455 #pragma omp parallel for simd
12456   for (int i = 0; i < 10; ++i) {
12457 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12458     for (int j = 0; j < 10; ++j)
12459       ;
12460   }
12461 #pragma omp parallel for simd
12462   for (int i = 0; i < 10; ++i) {
12463 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12464     for (int j = 0; j < 10; ++j)
12465       ;
12466   }
12467 
12468 // PARALLEL SECTIONS DIRECTIVE
12469 #pragma omp parallel sections
12470   {
12471 #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?}}
12472     for (int i = 0; i < 10; ++i)
12473       ;
12474   }
12475 #pragma omp parallel sections
12476   {
12477 #pragma omp simd
12478     for (int i = 0; i < 10; ++i)
12479       ;
12480   }
12481 #pragma omp parallel sections
12482   {
12483 #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?}}
12484     for (int i = 0; i < 10; ++i)
12485       ;
12486   }
12487 #pragma omp parallel sections
12488   {
12489 #pragma omp parallel
12490     for (int i = 0; i < 10; ++i)
12491       ;
12492   }
12493 #pragma omp parallel sections
12494   {
12495 #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?}}
12496     {
12497       bar();
12498     }
12499   }
12500 #pragma omp parallel sections
12501   {
12502 #pragma omp section
12503     {
12504       bar();
12505     }
12506   }
12507 #pragma omp parallel sections
12508   {
12509 #pragma omp section
12510     {
12511 #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?}}
12512       bar();
12513 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
12514       bar();
12515 #pragma omp critical
12516       bar();
12517     }
12518   }
12519 #pragma omp parallel sections
12520   {
12521 #pragma omp parallel
12522     {
12523 #pragma omp single // OK
12524       {
12525         bar();
12526       }
12527 #pragma omp master // OK
12528       {
12529         bar();
12530       }
12531 #pragma omp critical // OK
12532       {
12533         bar();
12534       }
12535 #pragma omp for // OK
12536       for (int i = 0; i < 10; ++i)
12537         ;
12538 #pragma omp for simd // OK
12539       for (int i = 0; i < 10; ++i)
12540         ;
12541 #pragma omp sections // OK
12542       {
12543         bar();
12544       }
12545     }
12546   }
12547 #pragma omp parallel sections
12548   {
12549 #pragma omp parallel for
12550     for (int i = 0; i < 10; ++i)
12551       ;
12552   }
12553 #pragma omp parallel sections
12554   {
12555 #pragma omp parallel for simd
12556     for (int i = 0; i < 10; ++i)
12557       ;
12558   }
12559 #pragma omp parallel sections
12560   {
12561 #pragma omp parallel sections
12562     {
12563       bar();
12564     }
12565   }
12566 #pragma omp parallel sections
12567   {
12568 #pragma omp task
12569     {
12570       bar();
12571     }
12572   }
12573 #pragma omp parallel sections
12574   {
12575 #pragma omp taskyield
12576   }
12577 #pragma omp parallel sections
12578   {
12579 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
12580   }
12581 #pragma omp parallel sections
12582   {
12583 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
12584   }
12585 #pragma omp parallel sections
12586   {
12587 #pragma omp taskwait
12588   }
12589 #pragma omp parallel sections
12590   {
12591 #pragma omp flush
12592   }
12593 #pragma omp parallel sections
12594   {
12595 #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?}}
12596     bar();
12597   }
12598 #pragma omp parallel sections
12599   {
12600 #pragma omp atomic
12601     ++a;
12602   }
12603 #pragma omp parallel sections
12604   {
12605 #pragma omp target
12606     ++a;
12607   }
12608 #pragma omp parallel sections
12609   {
12610 #pragma omp target parallel
12611     ++a;
12612   }
12613 #pragma omp parallel sections
12614   {
12615 #pragma omp target parallel for
12616     for (int i = 0; i < 10; ++i)
12617       ;
12618   }
12619 #pragma omp parallel sections
12620   {
12621 #pragma omp target enter data map(to: a)
12622   }
12623 #pragma omp parallel sections
12624   {
12625 #pragma omp target exit data map(from: a)
12626   }
12627 #pragma omp parallel sections
12628   {
12629 #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?}}
12630     ++a;
12631   }
12632 #pragma omp parallel sections
12633   {
12634 #pragma omp taskloop
12635   for (int i = 0; i < 10; ++i)
12636     ++a;
12637   }
12638 #pragma omp parallel sections
12639   {
12640 #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?}}
12641     for (int i = 0; i < 10; ++i)
12642       ;
12643   }
12644 #pragma omp parallel sections
12645   {
12646 #pragma omp target update to(a)
12647   }
12648 #pragma omp parallel sections
12649   {
12650 #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?}}
12651     for (int i = 0; i < 10; ++i)
12652       ;
12653   }
12654 #pragma omp parallel sections
12655   {
12656 #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?}}
12657     for (int i = 0; i < 10; ++i)
12658       ;
12659   }
12660 #pragma omp parallel sections
12661   {
12662 #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?}}
12663     for (int i = 0; i < 10; ++i)
12664       ;
12665   }
12666 #pragma omp parallel sections
12667   {
12668 #pragma omp target simd // OK
12669     for (int i = 0; i < 10; ++i)
12670       ;
12671   }
12672 #pragma omp parallel sections
12673   {
12674 #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?}}
12675     for (int i = 0; i < 10; ++i)
12676       ;
12677   }
12678 #pragma omp parallel sections
12679   {
12680 #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?}}
12681     for (int i = 0; i < 10; ++i)
12682       ;
12683   }
12684 #pragma omp parallel sections
12685   {
12686 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12687     for (int i = 0; i < 10; ++i)
12688       ;
12689   }
12690 #pragma omp parallel sections
12691   {
12692 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12693     for (int i = 0; i < 10; ++i)
12694       ;
12695   }
12696 #pragma omp parallel sections
12697   {
12698 #pragma omp target teams // OK
12699     a++;
12700   }
12701 #pragma omp parallel sections
12702   {
12703 #pragma omp target teams distribute // OK
12704     for (int i = 0; i < 10; ++i)
12705       ;
12706   }
12707 #pragma omp parallel sections
12708   {
12709 #pragma omp target teams distribute parallel for // OK
12710     for (int i = 0; i < 10; ++i)
12711       ;
12712   }
12713 #pragma omp parallel sections
12714   {
12715 #pragma omp target teams distribute parallel for simd // OK
12716     for (int i = 0; i < 10; ++i)
12717       ;
12718   }
12719 #pragma omp parallel sections
12720   {
12721 #pragma omp target teams distribute simd // OK
12722     for (int i = 0; i < 10; ++i)
12723       ;
12724   }
12725 
12726 // TASK DIRECTIVE
12727 #pragma omp task
12728 #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?}}
12729   for (int i = 0; i < 10; ++i)
12730     ;
12731 #pragma omp task
12732 #pragma omp simd
12733   for (int i = 0; i < 10; ++i)
12734     ;
12735 #pragma omp task
12736 #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?}}
12737   for (int i = 0; i < 10; ++i)
12738     ;
12739 #pragma omp task
12740 #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?}}
12741   {
12742     bar();
12743   }
12744 #pragma omp task
12745 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
12746   {
12747     bar();
12748   }
12749 #pragma omp task
12750 #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?}}
12751   bar();
12752 #pragma omp task
12753 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
12754   bar();
12755 #pragma omp task
12756 #pragma omp critical
12757   bar();
12758 #pragma omp task
12759 #pragma omp parallel for
12760   for (int i = 0; i < 10; ++i)
12761     ;
12762 #pragma omp task
12763 #pragma omp parallel for simd
12764   for (int i = 0; i < 10; ++i)
12765     ;
12766 #pragma omp task
12767 #pragma omp parallel sections
12768   {
12769     bar();
12770   }
12771 #pragma omp task
12772 #pragma omp task
12773   {
12774     bar();
12775   }
12776 #pragma omp task
12777   {
12778 #pragma omp taskyield
12779     bar();
12780   }
12781 #pragma omp task
12782   {
12783 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
12784     bar();
12785   }
12786 #pragma omp task
12787   {
12788 #pragma omp scan // expected-error {{region cannot be closely nested inside 'task' region}}
12789     bar();
12790   }
12791 #pragma omp task
12792   {
12793 #pragma omp taskwait
12794     bar();
12795   }
12796 #pragma omp task
12797   {
12798 #pragma omp flush
12799     bar();
12800   }
12801 #pragma omp task
12802   {
12803 #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?}}
12804     bar();
12805   }
12806 #pragma omp task
12807   {
12808 #pragma omp atomic
12809     ++a;
12810   }
12811 #pragma omp task
12812   {
12813 #pragma omp target
12814     ++a;
12815   }
12816 #pragma omp task
12817   {
12818 #pragma omp target parallel
12819     ++a;
12820   }
12821 #pragma omp task
12822 #pragma omp target parallel for
12823   for (int i = 0; i < 10; ++i)
12824     ;
12825 #pragma omp task
12826   {
12827 #pragma omp target enter data map(to: a)
12828     ++a;
12829   }
12830 #pragma omp task
12831   {
12832 #pragma omp target exit data map(from: a)
12833     ++a;
12834   }
12835 #pragma omp task
12836   {
12837 #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?}}
12838     ++a;
12839   }
12840 #pragma omp task
12841   {
12842 #pragma omp taskloop
12843   for (int i = 0; i < 10; ++i)
12844     ++a;
12845   }
12846 #pragma omp task
12847   {
12848 #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?}}
12849     for (int i = 0; i < 10; ++i)
12850       ;
12851   }
12852 #pragma omp task
12853   {
12854 #pragma omp target update to(a)
12855     a++;
12856   }
12857 #pragma omp task
12858   {
12859 #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?}}
12860     for (int i = 0; i < 10; ++i)
12861       ;
12862   }
12863 #pragma omp task
12864   {
12865 #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?}}
12866     for (int i = 0; i < 10; ++i)
12867       ;
12868   }
12869 #pragma omp task
12870   {
12871 #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?}}
12872     for (int i = 0; i < 10; ++i)
12873       ;
12874   }
12875 #pragma omp task
12876   {
12877 #pragma omp target simd // OK
12878     for (int i = 0; i < 10; ++i)
12879       ;
12880   }
12881 #pragma omp task
12882   {
12883 #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?}}
12884     for (int i = 0; i < 10; ++i)
12885       ;
12886   }
12887 #pragma omp task
12888   {
12889 #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?}}
12890     for (int i = 0; i < 10; ++i)
12891       ;
12892   }
12893 #pragma omp task
12894   {
12895 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12896     for (int i = 0; i < 10; ++i)
12897       ;
12898   }
12899 #pragma omp task
12900   {
12901 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12902     for (int i = 0; i < 10; ++i)
12903       ;
12904   }
12905 #pragma omp task
12906   {
12907 #pragma omp target teams // OK
12908     a++;
12909   }
12910 #pragma omp task
12911   {
12912 #pragma omp target teams distribute // OK
12913     for (int i = 0; i < 10; ++i)
12914       ;
12915   }
12916 #pragma omp task
12917   {
12918 #pragma omp target teams distribute parallel for // OK
12919     for (int i = 0; i < 10; ++i)
12920       ;
12921   }
12922 #pragma omp task
12923   {
12924 #pragma omp target teams distribute parallel for simd // OK
12925     for (int i = 0; i < 10; ++i)
12926       ;
12927   }
12928 #pragma omp task
12929   {
12930 #pragma omp target teams distribute simd // OK
12931     for (int i = 0; i < 10; ++i)
12932       ;
12933   }
12934 
12935 // ATOMIC DIRECTIVE
12936 #pragma omp atomic
12937   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12938   // expected-note@+1 {{expected an expression statement}}
12939   {
12940 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12941     for (int i = 0; i < 10; ++i)
12942       ;
12943   }
12944 #pragma omp atomic
12945   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12946   // expected-note@+1 {{expected an expression statement}}
12947   {
12948 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12949     for (int i = 0; i < 10; ++i)
12950       ;
12951   }
12952 #pragma omp atomic
12953   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12954   // expected-note@+1 {{expected an expression statement}}
12955   {
12956 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12957     for (int i = 0; i < 10; ++i)
12958       ;
12959   }
12960 #pragma omp atomic
12961   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12962   // expected-note@+1 {{expected an expression statement}}
12963   {
12964 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12965     for (int i = 0; i < 10; ++i)
12966       ;
12967   }
12968 #pragma omp atomic
12969   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12970   // expected-note@+1 {{expected an expression statement}}
12971   {
12972 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12973     {
12974       bar();
12975     }
12976   }
12977 #pragma omp atomic
12978   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12979   // expected-note@+1 {{expected an expression statement}}
12980   {
12981 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12982     {
12983       bar();
12984     }
12985   }
12986 #pragma omp atomic
12987   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12988   // expected-note@+1 {{expected an expression statement}}
12989   {
12990 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12991     {
12992       bar();
12993     }
12994   }
12995 #pragma omp atomic
12996   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12997   // expected-note@+1 {{expected an expression statement}}
12998   {
12999 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13000     {
13001       bar();
13002     }
13003   }
13004 #pragma omp atomic
13005   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13006   // expected-note@+1 {{expected an expression statement}}
13007   {
13008 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13009     {
13010       bar();
13011     }
13012   }
13013 #pragma omp atomic
13014   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13015   // expected-note@+1 {{expected an expression statement}}
13016   {
13017 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13018     for (int i = 0; i < 10; ++i)
13019       ;
13020   }
13021 #pragma omp atomic
13022   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13023   // expected-note@+1 {{expected an expression statement}}
13024   {
13025 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13026     for (int i = 0; i < 10; ++i)
13027       ;
13028   }
13029 #pragma omp atomic
13030   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13031   // expected-note@+1 {{expected an expression statement}}
13032   {
13033 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13034     {
13035       bar();
13036     }
13037   }
13038 #pragma omp atomic
13039   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13040   // expected-note@+1 {{expected an expression statement}}
13041   {
13042 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13043     {
13044       bar();
13045     }
13046   }
13047 #pragma omp atomic
13048   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13049   // expected-note@+1 {{expected an expression statement}}
13050   {
13051 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13052     bar();
13053   }
13054 #pragma omp atomic
13055   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13056   // expected-note@+1 {{expected an expression statement}}
13057   {
13058 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13059     bar();
13060   }
13061 #pragma omp atomic
13062   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13063   // expected-note@+1 {{expected an expression statement}}
13064   {
13065 #pragma omp scan // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13066     bar();
13067   }
13068 #pragma omp atomic
13069   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13070   // expected-note@+1 {{expected an expression statement}}
13071   {
13072 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13073     bar();
13074   }
13075 #pragma omp atomic
13076   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13077   // expected-note@+1 {{expected an expression statement}}
13078   {
13079 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13080     bar();
13081   }
13082 #pragma omp atomic
13083   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13084   // expected-note@+1 {{expected an expression statement}}
13085   {
13086 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13087     bar();
13088   }
13089 #pragma omp atomic
13090   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13091   // expected-note@+1 {{expected an expression statement}}
13092   {
13093 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13094     ++a;
13095   }
13096 #pragma omp atomic
13097   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13098   // expected-note@+1 {{expected an expression statement}}
13099   {
13100 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13101     ++a;
13102   }
13103 #pragma omp atomic
13104   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13105   // expected-note@+1 {{expected an expression statement}}
13106   {
13107 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13108     ++a;
13109   }
13110 #pragma omp atomic
13111   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13112   // expected-note@+1 {{expected an expression statement}}
13113   {
13114 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13115     for (int i = 0; i < 10; ++i)
13116       ;
13117   }
13118 #pragma omp atomic
13119   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13120   // expected-note@+1 {{expected an expression statement}}
13121   {
13122 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13123     ++a;
13124   }
13125 #pragma omp atomic
13126   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13127   // expected-note@+1 {{expected an expression statement}}
13128   {
13129 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13130     ++a;
13131   }
13132 #pragma omp atomic
13133   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13134   // expected-note@+1 {{expected an expression statement}}
13135   {
13136 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13137     ++a;
13138   }
13139 #pragma omp atomic
13140   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13141   // expected-note@+1 {{expected an expression statement}}
13142   {
13143 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13144   for (int i = 0; i < 10; ++i)
13145     ++a;
13146   }
13147 #pragma omp atomic
13148   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13149   // expected-note@+1 {{expected an expression statement}}
13150   {
13151 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13152     for (int i = 0; i < 10; ++i)
13153       ;
13154   }
13155 #pragma omp atomic
13156   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13157   // expected-note@+1 {{expected an expression statement}}
13158   {
13159 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13160   }
13161 #pragma omp atomic
13162   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13163   // expected-note@+1 {{expected an expression statement}}
13164   {
13165 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13166     for (int i = 0; i < 10; ++i)
13167       ;
13168   }
13169 #pragma omp atomic
13170   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13171   // expected-note@+1 {{expected an expression statement}}
13172   {
13173 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13174     for (int i = 0; i < 10; ++i)
13175       ;
13176   }
13177 #pragma omp atomic
13178   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13179   // expected-note@+1 {{expected an expression statement}}
13180   {
13181 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13182     for (int i = 0; i < 10; ++i)
13183       ;
13184   }
13185 #pragma omp atomic
13186   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13187   // expected-note@+1 {{expected an expression statement}}
13188   {
13189 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13190     for (int i = 0; i < 10; ++i)
13191       ;
13192   }
13193 #pragma omp atomic
13194   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13195   // expected-note@+1 {{expected an expression statement}}
13196   {
13197 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13198     for (int i = 0; i < 10; ++i)
13199       ;
13200   }
13201 #pragma omp atomic
13202   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13203   // expected-note@+1 {{expected an expression statement}}
13204   {
13205 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13206     for (int i = 0; i < 10; ++i)
13207       ;
13208   }
13209 #pragma omp atomic
13210   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13211   // expected-note@+1 {{expected an expression statement}}
13212   {
13213 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13214     for (int i = 0; i < 10; ++i)
13215       ;
13216   }
13217 #pragma omp atomic
13218   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13219   // expected-note@+1 {{expected an expression statement}}
13220   {
13221 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13222     for (int i = 0; i < 10; ++i)
13223       ;
13224   }
13225 #pragma omp atomic
13226   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13227   // expected-note@+1 {{expected an expression statement}}
13228   {
13229 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13230     a++;
13231   }
13232 #pragma omp atomic
13233   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13234   // expected-note@+1 {{expected an expression statement}}
13235   {
13236 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13237     for (int i = 0; i < 10; ++i)
13238       ;
13239   }
13240 #pragma omp atomic
13241   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13242   // expected-note@+1 {{expected an expression statement}}
13243   {
13244 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13245     for (int i = 0; i < 10; ++i)
13246       ;
13247   }
13248 #pragma omp atomic
13249   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13250   // expected-note@+1 {{expected an expression statement}}
13251   {
13252 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13253     for (int i = 0; i < 10; ++i)
13254       ;
13255   }
13256 #pragma omp atomic
13257   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13258   // expected-note@+1 {{expected an expression statement}}
13259   {
13260 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13261     for (int i = 0; i < 10; ++i)
13262       ;
13263   }
13264 
13265 // TARGET DIRECTIVE
13266 #pragma omp target
13267 #pragma omp parallel
13268   bar();
13269 #pragma omp target
13270 #pragma omp for
13271   for (int i = 0; i < 10; ++i)
13272     ;
13273 #pragma omp target
13274 #pragma omp simd
13275   for (int i = 0; i < 10; ++i)
13276     ;
13277 #pragma omp target
13278 #pragma omp for simd
13279   for (int i = 0; i < 10; ++i)
13280     ;
13281 #pragma omp target
13282 #pragma omp sections
13283   {
13284     bar();
13285   }
13286 #pragma omp target
13287 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
13288   {
13289     bar();
13290   }
13291 #pragma omp target
13292 #pragma omp single
13293   bar();
13294 
13295 #pragma omp target
13296 #pragma omp master
13297   {
13298     bar();
13299   }
13300 #pragma omp target
13301 #pragma omp critical
13302   {
13303     bar();
13304   }
13305 #pragma omp target
13306 #pragma omp parallel for
13307   for (int i = 0; i < 10; ++i)
13308     ;
13309 #pragma omp target
13310 #pragma omp parallel for simd
13311   for (int i = 0; i < 10; ++i)
13312     ;
13313 #pragma omp target
13314 #pragma omp parallel sections
13315   {
13316     bar();
13317   }
13318 #pragma omp target
13319 #pragma omp task
13320   {
13321     bar();
13322   }
13323 #pragma omp target
13324   {
13325 #pragma omp taskyield
13326     bar();
13327   }
13328 #pragma omp target
13329   {
13330 #pragma omp barrier
13331     bar();
13332   }
13333 #pragma omp target
13334   {
13335 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
13336     bar();
13337   }
13338 #pragma omp target
13339   {
13340 #pragma omp taskwait
13341     bar();
13342   }
13343 #pragma omp target
13344   {
13345 #pragma omp flush
13346     bar();
13347   }
13348 #pragma omp target
13349   {
13350 #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?}}
13351     bar();
13352   }
13353 #pragma omp target
13354   {
13355 #pragma omp atomic
13356     ++a;
13357   }
13358 #pragma omp target
13359   {
13360 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13361     ++a;
13362   }
13363 #pragma omp target
13364   {
13365 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13366     ++a;
13367   }
13368 #pragma omp target
13369 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13370   for (int i = 0; i < 10; ++i)
13371     ;
13372 #pragma omp target
13373   {
13374 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13375   }
13376 #pragma omp target
13377   {
13378 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13379   }
13380 #pragma omp target
13381   {
13382 #pragma omp teams
13383     ++a;
13384   }
13385 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13386   {
13387 #pragma omp teams // expected-note {{directive outside teams construct here}}
13388     ++a;
13389 #pragma omp teams // expected-note {{nested teams construct here}}
13390     ++a;
13391   }
13392 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13393   {
13394     ++a;          // expected-note {{statement outside teams construct here}}
13395 #pragma omp teams // expected-note {{nested teams construct here}}
13396     ++a;
13397   }
13398 #pragma omp target
13399   {
13400 #pragma omp taskloop
13401   for (int i = 0; i < 10; ++i)
13402     ++a;
13403   }
13404 #pragma omp target
13405   {
13406 #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?}}
13407     for (int i = 0; i < 10; ++i)
13408       ;
13409   }
13410 #pragma omp atomic
13411   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13412   // expected-note@+1 {{expected an expression statement}}
13413   {
13414 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13415     a++;
13416   }
13417 #pragma omp target
13418   {
13419 #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?}}
13420     for (int i = 0; i < 10; ++i)
13421       ;
13422   }
13423 #pragma omp target
13424   {
13425 #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?}}
13426     for (int i = 0; i < 10; ++i)
13427       ;
13428   }
13429 #pragma omp target
13430   {
13431 #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?}}
13432     for (int i = 0; i < 10; ++i)
13433       ;
13434   }
13435 #pragma omp target
13436   {
13437 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13438     for (int i = 0; i < 10; ++i)
13439       ;
13440   }
13441 #pragma omp target
13442   {
13443 #pragma omp teams distribute // OK
13444     for (int i = 0; i < 10; ++i)
13445       ;
13446   }
13447 #pragma omp target
13448   {
13449 #pragma omp teams distribute simd // OK
13450     for (int i = 0; i < 10; ++i)
13451       ;
13452   }
13453 #pragma omp target
13454   {
13455 #pragma omp teams distribute parallel for simd // OK
13456     for (int i = 0; i < 10; ++i)
13457       ;
13458   }
13459 #pragma omp target
13460   {
13461 #pragma omp teams distribute parallel for // OK
13462     for (int i = 0; i < 10; ++i)
13463       ;
13464   }
13465 #pragma omp target
13466   {
13467 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13468     a++;
13469   }
13470 #pragma omp target
13471   {
13472 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13473     for (int i = 0; i < 10; ++i)
13474       ;
13475   }
13476 #pragma omp target
13477   {
13478 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13479     for (int i = 0; i < 10; ++i)
13480       ;
13481   }
13482 #pragma omp target
13483   {
13484 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13485     for (int i = 0; i < 10; ++i)
13486       ;
13487   }
13488 #pragma omp target
13489   {
13490 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13491     for (int i = 0; i < 10; ++i)
13492       ;
13493   }
13494 
13495 // TARGET PARALLEL DIRECTIVE
13496 #pragma omp target parallel
13497 #pragma omp parallel
13498   bar();
13499 #pragma omp target parallel
13500 #pragma omp for
13501   for (int i = 0; i < 10; ++i)
13502     ;
13503 #pragma omp target parallel
13504 #pragma omp simd
13505   for (int i = 0; i < 10; ++i)
13506     ;
13507 #pragma omp target parallel
13508 #pragma omp for simd
13509   for (int i = 0; i < 10; ++i)
13510     ;
13511 #pragma omp target parallel
13512 #pragma omp sections
13513   {
13514     bar();
13515   }
13516 #pragma omp target parallel
13517 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
13518   {
13519     bar();
13520   }
13521 #pragma omp target parallel
13522 #pragma omp single
13523   bar();
13524 
13525 #pragma omp target parallel
13526 #pragma omp master
13527   {
13528     bar();
13529   }
13530 #pragma omp target parallel
13531 #pragma omp critical
13532   {
13533     bar();
13534   }
13535 #pragma omp target parallel
13536 #pragma omp parallel for
13537   for (int i = 0; i < 10; ++i)
13538     ;
13539 #pragma omp target parallel
13540 #pragma omp parallel for simd
13541   for (int i = 0; i < 10; ++i)
13542     ;
13543 #pragma omp target parallel
13544 #pragma omp parallel sections
13545   {
13546     bar();
13547   }
13548 #pragma omp target parallel
13549 #pragma omp task
13550   {
13551     bar();
13552   }
13553 #pragma omp target parallel
13554   {
13555 #pragma omp taskyield
13556     bar();
13557   }
13558 #pragma omp target parallel
13559   {
13560 #pragma omp barrier
13561     bar();
13562   }
13563 #pragma omp target parallel
13564   {
13565 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
13566     bar();
13567   }
13568 #pragma omp target parallel
13569   {
13570 #pragma omp taskwait
13571     bar();
13572   }
13573 #pragma omp target parallel
13574   {
13575 #pragma omp flush
13576     bar();
13577   }
13578 #pragma omp target parallel
13579   {
13580 #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?}}
13581     bar();
13582   }
13583 #pragma omp target parallel
13584   {
13585 #pragma omp atomic
13586     ++a;
13587   }
13588 #pragma omp target parallel
13589   {
13590 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
13591     ++a;
13592   }
13593 #pragma omp target parallel
13594   {
13595 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
13596     ++a;
13597   }
13598 #pragma omp target parallel
13599 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13600   for (int i = 0; i < 10; ++i)
13601     ;
13602 #pragma omp target parallel
13603   {
13604 #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?}}
13605     ++a;
13606   }
13607 #pragma omp target parallel
13608   {
13609     ++a;
13610 #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?}}
13611     ++a;
13612   }
13613 #pragma omp target parallel
13614   {
13615 #pragma omp taskloop
13616   for (int i = 0; i < 10; ++i)
13617     ++a;
13618   }
13619 #pragma omp target parallel
13620   {
13621 #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?}}
13622     for (int i = 0; i < 10; ++i)
13623       ;
13624   }
13625 #pragma omp target parallel
13626   {
13627 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13628   }
13629 #pragma omp target parallel
13630   {
13631 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13632   }
13633 #pragma omp target parallel
13634   {
13635 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13636   }
13637 #pragma omp target parallel
13638   {
13639 #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?}}
13640     for (int i = 0; i < 10; ++i)
13641       ;
13642   }
13643 #pragma omp target parallel
13644   {
13645 #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?}}
13646     for (int i = 0; i < 10; ++i)
13647       ;
13648   }
13649 #pragma omp target parallel
13650   {
13651 #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?}}
13652     for (int i = 0; i < 10; ++i)
13653       ;
13654   }
13655 #pragma omp target parallel
13656   {
13657 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
13658     for (int i = 0; i < 10; ++i)
13659       ;
13660   }
13661 #pragma omp target parallel
13662   {
13663 #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?}}
13664     for (int i = 0; i < 10; ++i)
13665       ;
13666   }
13667 #pragma omp target parallel
13668   {
13669 #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?}}
13670     for (int i = 0; i < 10; ++i)
13671       ;
13672   }
13673 #pragma omp target parallel
13674   {
13675 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13676     for (int i = 0; i < 10; ++i)
13677       ;
13678   }
13679 #pragma omp target parallel
13680   {
13681 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13682     for (int i = 0; i < 10; ++i)
13683       ;
13684   }
13685 #pragma omp target parallel
13686   {
13687 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
13688     a++;
13689   }
13690 #pragma omp target parallel
13691   {
13692 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
13693     for (int i = 0; i < 10; ++i)
13694       ;
13695   }
13696 #pragma omp target parallel
13697   {
13698 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13699     for (int i = 0; i < 10; ++i)
13700       ;
13701   }
13702 #pragma omp target parallel
13703   {
13704 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13705     for (int i = 0; i < 10; ++i)
13706       ;
13707   }
13708 #pragma omp target parallel
13709   {
13710 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13711     for (int i = 0; i < 10; ++i)
13712       ;
13713   }
13714 
13715 // TARGET PARALLEL FOR DIRECTIVE
13716 #pragma omp target parallel for
13717   for (int i = 0; i < 10; ++i) {
13718 #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?}}
13719     for (int i = 0; i < 10; ++i)
13720       ;
13721   }
13722 #pragma omp target parallel for
13723   for (int i = 0; i < 10; ++i) {
13724 #pragma omp simd
13725     for (int i = 0; i < 10; ++i)
13726       ;
13727   }
13728 #pragma omp target parallel for
13729   for (int i = 0; i < 10; ++i) {
13730 #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?}}
13731     for (int i = 0; i < 10; ++i)
13732       ;
13733   }
13734 #pragma omp target parallel for
13735   for (int i = 0; i < 10; ++i) {
13736 #pragma omp parallel
13737     for (int i = 0; i < 10; ++i)
13738       ;
13739   }
13740 #pragma omp target parallel for
13741   for (int i = 0; i < 10; ++i) {
13742 #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?}}
13743     {
13744       bar();
13745     }
13746   }
13747 #pragma omp target parallel for
13748   for (int i = 0; i < 10; ++i) {
13749 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
13750     {
13751       bar();
13752     }
13753   }
13754 #pragma omp target parallel for
13755   for (int i = 0; i < 10; ++i) {
13756 #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?}}
13757     {
13758       bar();
13759     }
13760   }
13761 
13762 #pragma omp target parallel for
13763   for (int i = 0; i < 10; ++i) {
13764 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13765     {
13766       bar();
13767     }
13768   }
13769 
13770 #pragma omp target parallel for
13771   for (int i = 0; i < 10; ++i) {
13772 #pragma omp critical
13773     {
13774       bar();
13775     }
13776   }
13777 
13778 #pragma omp target parallel for
13779   for (int i = 0; i < 10; ++i) {
13780 #pragma omp parallel
13781     {
13782 #pragma omp single // OK
13783       {
13784         bar();
13785       }
13786 #pragma omp for // OK
13787       for (int i = 0; i < 10; ++i)
13788         ;
13789 #pragma omp for simd // OK
13790       for (int i = 0; i < 10; ++i)
13791         ;
13792 #pragma omp sections // OK
13793       {
13794         bar();
13795       }
13796     }
13797   }
13798 #pragma omp target parallel for
13799   for (int i = 0; i < 10; ++i) {
13800 #pragma omp parallel for
13801     for (int i = 0; i < 10; ++i)
13802       ;
13803   }
13804 #pragma omp target parallel for
13805   for (int i = 0; i < 10; ++i) {
13806 #pragma omp parallel for simd
13807     for (int i = 0; i < 10; ++i)
13808       ;
13809   }
13810 #pragma omp target parallel for
13811   for (int i = 0; i < 10; ++i) {
13812 #pragma omp parallel sections
13813     {
13814       bar();
13815     }
13816   }
13817 #pragma omp target parallel for
13818   for (int i = 0; i < 10; ++i) {
13819 #pragma omp task
13820     {
13821       bar();
13822     }
13823   }
13824 #pragma omp target parallel for
13825   for (int i = 0; i < 10; ++i) {
13826 #pragma omp taskyield
13827     bar();
13828   }
13829 #pragma omp target parallel for
13830   for (int i = 0; i < 10; ++i) {
13831 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13832     bar();
13833   }
13834 #pragma omp target parallel for
13835   for (int i = 0; i < 10; ++i) {
13836 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13837     bar();
13838   }
13839 #pragma omp target parallel for
13840   for (int i = 0; i < 10; ++i) {
13841 #pragma omp taskwait
13842     bar();
13843   }
13844 #pragma omp target parallel for
13845   for (int i = 0; i < 10; ++i) {
13846 #pragma omp flush
13847     bar();
13848   }
13849 #pragma omp target parallel for
13850   for (int i = 0; i < 10; ++i) {
13851 #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?}}
13852     bar();
13853   }
13854 #pragma omp target parallel for ordered
13855   for (int i = 0; i < 10; ++i) {
13856 #pragma omp ordered // OK
13857     bar();
13858   }
13859 #pragma omp target parallel for
13860   for (int i = 0; i < 10; ++i) {
13861 #pragma omp atomic
13862     ++a;
13863   }
13864 #pragma omp target parallel for
13865   for (int i = 0; i < 10; ++i) {
13866 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
13867     ++a;
13868   }
13869 #pragma omp target parallel for
13870   for (int i = 0; i < 10; ++i) {
13871 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
13872     ++a;
13873   }
13874 #pragma omp target parallel for
13875   for (int i = 0; i < 10; ++i) {
13876 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13877     for (int i = 0; i < 10; ++i)
13878       ;
13879   }
13880 #pragma omp target parallel for
13881   for (int i = 0; i < 10; ++i) {
13882 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13883     ++a;
13884   }
13885 #pragma omp target parallel for
13886   for (int i = 0; i < 10; ++i) {
13887 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13888     ++a;
13889   }
13890 #pragma omp target parallel for
13891   for (int i = 0; i < 10; ++i) {
13892 #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?}}
13893     ++a;
13894   }
13895 #pragma omp target parallel for
13896   for (int i = 0; i < 10; ++i) {
13897 #pragma omp taskloop
13898   for (int i = 0; i < 10; ++i)
13899     ++a;
13900   }
13901 #pragma omp target parallel for
13902   for (int i = 0; i < 10; ++i) {
13903 #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?}}
13904     for (int j = 0; j < 10; ++j)
13905       ;
13906   }
13907 #pragma omp target parallel for
13908   for (int i = 0; i < 10; ++i) {
13909 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13910     a++;
13911   }
13912 #pragma omp target parallel for
13913   for (int i = 0; i < 10; ++i) {
13914 #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?}}
13915     for (int j = 0; j < 10; ++j)
13916       ;
13917   }
13918 #pragma omp target parallel for
13919   for (int i = 0; i < 10; ++i) {
13920 #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?}}
13921     for (int j = 0; j < 10; ++j)
13922       ;
13923   }
13924 #pragma omp target parallel for
13925   for (int i = 0; i < 10; ++i) {
13926 #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?}}
13927     for (int j = 0; j < 10; ++j)
13928       ;
13929   }
13930 #pragma omp target parallel for
13931   for (int i = 0; i < 10; ++i) {
13932 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13933     for (int j = 0; j < 10; ++j)
13934       ;
13935   }
13936 #pragma omp target parallel for
13937   for (int i = 0; i < 10; ++i) {
13938 #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?}}
13939     for (int j = 0; j < 10; ++j)
13940       ;
13941   }
13942 #pragma omp target parallel for
13943   for (int i = 0; i < 10; ++i) {
13944 #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?}}
13945     for (int j = 0; j < 10; ++j)
13946       ;
13947   }
13948 #pragma omp target parallel for
13949   for (int i = 0; i < 10; ++i) {
13950 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13951     for (int j = 0; j < 10; ++j)
13952       ;
13953   }
13954 #pragma omp target parallel for
13955   for (int i = 0; i < 10; ++i) {
13956 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13957     for (int j = 0; j < 10; ++j)
13958       ;
13959   }
13960 #pragma omp target parallel for
13961   for (int i = 0; i < 10; ++i) {
13962 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
13963     a++;
13964   }
13965 #pragma omp target parallel for
13966   for (int i = 0; i < 10; ++i) {
13967 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
13968     for (int j = 0; j < 10; ++j)
13969       ;
13970   }
13971 #pragma omp target parallel for
13972   for (int i = 0; i < 10; ++i) {
13973 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13974     for (int j = 0; j < 10; ++j)
13975       ;
13976   }
13977 #pragma omp target parallel for
13978   for (int i = 0; i < 10; ++i) {
13979 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13980     for (int j = 0; j < 10; ++j)
13981       ;
13982   }
13983 #pragma omp target parallel for
13984   for (int i = 0; i < 10; ++i) {
13985 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13986     for (int j = 0; j < 10; ++j)
13987       ;
13988   }
13989 
13990 // TEAMS DIRECTIVE
13991 #pragma omp target
13992 #pragma omp teams
13993 #pragma omp parallel
13994   bar();
13995 #pragma omp target
13996 #pragma omp teams
13997 #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?}}
13998   for (int i = 0; i < 10; ++i)
13999     ;
14000 #pragma omp target
14001 #pragma omp teams
14002 #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?}}
14003   for (int i = 0; i < 10; ++i)
14004     ;
14005 #pragma omp target
14006 #pragma omp teams
14007 #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?}}
14008   for (int i = 0; i < 10; ++i)
14009     ;
14010 #pragma omp target
14011 #pragma omp teams
14012 #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?}}
14013   {
14014     bar();
14015   }
14016 #pragma omp target
14017 #pragma omp teams
14018 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
14019   {
14020     bar();
14021   }
14022 #pragma omp target
14023 #pragma omp teams
14024 #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?}}
14025   bar();
14026 
14027 #pragma omp target
14028 #pragma omp teams
14029 #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?}}
14030   {
14031     bar();
14032   }
14033 #pragma omp target
14034 #pragma omp teams
14035 #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?}}
14036   {
14037     bar();
14038   }
14039 #pragma omp target
14040 #pragma omp teams
14041 #pragma omp parallel for
14042   for (int i = 0; i < 10; ++i)
14043     ;
14044 #pragma omp target
14045 #pragma omp teams
14046 #pragma omp parallel for simd
14047   for (int i = 0; i < 10; ++i)
14048     ;
14049 #pragma omp target
14050 #pragma omp teams
14051 #pragma omp parallel sections
14052   {
14053     bar();
14054   }
14055 #pragma omp target
14056 #pragma omp teams
14057 #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?}}
14058   {
14059     bar();
14060   }
14061 #pragma omp target
14062 #pragma omp teams
14063   {
14064 #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?}}
14065     bar();
14066   }
14067 #pragma omp target
14068 #pragma omp teams
14069   {
14070 #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?}}
14071     bar();
14072   }
14073 #pragma omp target
14074 #pragma omp teams
14075   {
14076 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
14077     bar();
14078   }
14079 #pragma omp target
14080 #pragma omp teams
14081   {
14082 #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?}}
14083     bar();
14084   }
14085 #pragma omp target
14086 #pragma omp teams
14087   {
14088 #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?}}
14089     bar();
14090   }
14091 #pragma omp target
14092 #pragma omp teams
14093   {
14094 #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?}}
14095     bar();
14096   }
14097 #pragma omp target
14098 #pragma omp teams
14099   {
14100 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
14101     ++a;
14102   }
14103 #pragma omp target
14104 #pragma omp teams
14105   {
14106 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14107     ++a;
14108   }
14109 #pragma omp target
14110 #pragma omp teams
14111   {
14112 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14113     ++a;
14114   }
14115 #pragma omp target
14116 #pragma omp teams
14117 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14118   for (int i = 0; i < 10; ++i)
14119     ;
14120 #pragma omp target
14121 #pragma omp teams
14122   {
14123 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14124   }
14125 #pragma omp target
14126 #pragma omp teams
14127   {
14128 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14129   }
14130 #pragma omp target
14131 #pragma omp teams
14132   {
14133 #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?}}
14134     ++a;
14135   }
14136 #pragma omp target
14137 #pragma omp teams
14138   {
14139 #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?}}
14140   for (int i = 0; i < 10; ++i)
14141     ++a;
14142   }
14143 #pragma omp target
14144 #pragma omp teams
14145 #pragma omp distribute
14146   for (int i = 0; i < 10; ++i)
14147     ;
14148 #pragma omp target
14149 #pragma omp teams
14150 #pragma omp distribute
14151   for (int i = 0; i < 10; ++i)
14152     ;
14153 #pragma omp distribute
14154   for (int j = 0; j < 10; ++j)
14155     ;
14156 #pragma omp target
14157 #pragma omp teams
14158   {
14159 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14160     ++a;
14161   }
14162 #pragma omp target
14163 #pragma omp teams
14164 #pragma omp distribute parallel for
14165   for (int i = 0; i < 10; ++i)
14166     ;
14167 #pragma omp target
14168 #pragma omp teams
14169   {
14170 #pragma omp distribute parallel for
14171   for (int i = 0; i < 10; ++i)
14172     ;
14173 #pragma omp distribute parallel for
14174   for (int j = 0; j < 10; ++j)
14175     ;
14176   }
14177 #pragma omp target
14178 #pragma omp teams
14179   {
14180 #pragma omp distribute parallel for simd
14181   for (int i = 0; i < 10; ++i)
14182     ;
14183 #pragma omp distribute parallel for simd
14184   for (int j = 0; j < 10; ++j)
14185     ;
14186   }
14187 #pragma omp target
14188 #pragma omp teams
14189   {
14190 #pragma omp distribute simd
14191   for (int i = 0; i < 10; ++i)
14192     ;
14193 #pragma omp distribute simd
14194   for (int j = 0; j < 10; ++j)
14195     ;
14196   }
14197 #pragma omp target
14198 #pragma omp teams
14199   {
14200 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14201   for (int i = 0; i < 10; ++i)
14202     ;
14203   }
14204 #pragma omp target
14205 #pragma omp teams
14206   {
14207 #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?}}
14208   for (int i = 0; i < 10; ++i)
14209     ;
14210   }
14211 #pragma omp target
14212 #pragma omp teams
14213   {
14214 #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?}}
14215   for (int i = 0; i < 10; ++i)
14216     ;
14217   }
14218 #pragma omp target
14219 #pragma omp teams
14220   {
14221 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
14222   for (int i = 0; i < 10; ++i)
14223     ;
14224   }
14225 #pragma omp target
14226 #pragma omp teams
14227   {
14228 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
14229   for (int i = 0; i < 10; ++i)
14230     ;
14231   }
14232 #pragma omp target
14233 #pragma omp teams
14234   {
14235 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14236     a++;
14237   }
14238 #pragma omp target
14239 #pragma omp teams
14240   {
14241 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14242   for (int i = 0; i < 10; ++i)
14243     ;
14244   }
14245 #pragma omp target
14246 #pragma omp teams
14247   {
14248 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14249   for (int i = 0; i < 10; ++i)
14250     ;
14251   }
14252 #pragma omp target
14253 #pragma omp teams
14254   {
14255 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14256   for (int i = 0; i < 10; ++i)
14257     ;
14258   }
14259 #pragma omp target
14260 #pragma omp teams
14261   {
14262 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14263   for (int i = 0; i < 10; ++i)
14264     ;
14265   }
14266 
14267 // TASKLOOP DIRECTIVE
14268 #pragma omp taskloop
14269   for (int i = 0; i < 10; ++i) {
14270 #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?}}
14271     for (int i = 0; i < 10; ++i)
14272       ;
14273   }
14274 #pragma omp taskloop
14275   for (int i = 0; i < 10; ++i) {
14276 #pragma omp simd
14277     for (int i = 0; i < 10; ++i)
14278       ;
14279   }
14280 #pragma omp taskloop
14281   for (int i = 0; i < 10; ++i) {
14282 #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?}}
14283     for (int i = 0; i < 10; ++i)
14284       ;
14285   }
14286 #pragma omp taskloop
14287   for (int i = 0; i < 10; ++i) {
14288 #pragma omp parallel
14289     for (int i = 0; i < 10; ++i)
14290       ;
14291   }
14292 #pragma omp taskloop
14293   for (int i = 0; i < 10; ++i) {
14294 #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?}}
14295     {
14296       bar();
14297     }
14298   }
14299 #pragma omp taskloop
14300   for (int i = 0; i < 10; ++i) {
14301 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
14302     {
14303       bar();
14304     }
14305   }
14306 #pragma omp taskloop
14307   for (int i = 0; i < 10; ++i) {
14308 #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?}}
14309     {
14310       bar();
14311     }
14312   }
14313 
14314 #pragma omp taskloop
14315   for (int i = 0; i < 10; ++i) {
14316 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14317     {
14318       bar();
14319     }
14320   }
14321 #pragma omp taskloop
14322   for (int i = 0; i < 10; ++i) {
14323 #pragma omp critical
14324     {
14325       bar();
14326     }
14327   }
14328 #pragma omp taskloop
14329   for (int i = 0; i < 10; ++i) {
14330 #pragma omp parallel
14331     {
14332 #pragma omp single // OK
14333       {
14334         bar();
14335       }
14336 #pragma omp for // OK
14337       for (int i = 0; i < 10; ++i)
14338         ;
14339 #pragma omp sections // OK
14340       {
14341         bar();
14342       }
14343     }
14344   }
14345 #pragma omp taskloop
14346   for (int i = 0; i < 10; ++i) {
14347 #pragma omp parallel for
14348     for (int i = 0; i < 10; ++i)
14349       ;
14350   }
14351 #pragma omp taskloop
14352   for (int i = 0; i < 10; ++i) {
14353 #pragma omp parallel for simd
14354     for (int i = 0; i < 10; ++i)
14355       ;
14356   }
14357 #pragma omp taskloop
14358   for (int i = 0; i < 10; ++i) {
14359 #pragma omp parallel sections
14360     {
14361       bar();
14362     }
14363   }
14364 #pragma omp taskloop
14365   for (int i = 0; i < 10; ++i) {
14366 #pragma omp task
14367     {
14368       bar();
14369     }
14370   }
14371 #pragma omp taskloop
14372   for (int i = 0; i < 10; ++i) {
14373 #pragma omp taskyield
14374     bar();
14375   }
14376 #pragma omp taskloop
14377   for (int i = 0; i < 10; ++i) {
14378 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14379     bar();
14380   }
14381 #pragma omp taskloop
14382   for (int i = 0; i < 10; ++i) {
14383 #pragma omp scan // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14384     bar();
14385   }
14386 #pragma omp taskloop
14387   for (int i = 0; i < 10; ++i) {
14388 #pragma omp taskwait
14389     bar();
14390   }
14391 #pragma omp taskloop
14392   for (int i = 0; i < 10; ++i) {
14393 #pragma omp flush
14394     bar();
14395   }
14396 #pragma omp taskloop
14397   for (int i = 0; i < 10; ++i) {
14398 #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?}}
14399     bar();
14400   }
14401 #pragma omp taskloop
14402   for (int i = 0; i < 10; ++i) {
14403 #pragma omp atomic
14404     ++a;
14405   }
14406 #pragma omp taskloop
14407   for (int i = 0; i < 10; ++i) {
14408 #pragma omp target
14409     ++a;
14410   }
14411 #pragma omp taskloop
14412   for (int i = 0; i < 10; ++i) {
14413 #pragma omp target parallel
14414     ++a;
14415   }
14416 #pragma omp taskloop
14417   for (int i = 0; i < 10; ++i) {
14418 #pragma omp target parallel for
14419     for (int i = 0; i < 10; ++i)
14420       ;
14421   }
14422 #pragma omp taskloop
14423   for (int i = 0; i < 10; ++i) {
14424 #pragma omp target enter data map(to: a)
14425     ++a;
14426   }
14427 #pragma omp taskloop
14428   for (int i = 0; i < 10; ++i) {
14429 #pragma omp target exit data map(from: a)
14430     ++a;
14431   }
14432 #pragma omp taskloop
14433   for (int i = 0; i < 10; ++i) {
14434 #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?}}
14435     ++a;
14436   }
14437 #pragma omp taskloop
14438   for (int i = 0; i < 10; ++i) {
14439 #pragma omp taskloop
14440   for (int i = 0; i < 10; ++i)
14441     ++a;
14442   }
14443 #pragma omp taskloop
14444   for (int i = 0; i < 10; ++i) {
14445 #pragma omp target update to(a)
14446     ++a;
14447   }
14448 #pragma omp taskloop
14449   for (int i = 0; i < 10; ++i) {
14450 #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?}}
14451     for (int i = 0; i < 10; ++i)
14452       ;
14453   }
14454 #pragma omp taskloop
14455   for (int i = 0; i < 10; ++i) {
14456 #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?}}
14457     for (int i = 0; i < 10; ++i)
14458       ;
14459   }
14460 #pragma omp taskloop
14461   for (int i = 0; i < 10; ++i) {
14462 #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?}}
14463     for (int i = 0; i < 10; ++i)
14464       ;
14465   }
14466 #pragma omp taskloop
14467   for (int i = 0; i < 10; ++i) {
14468 #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?}}
14469     for (int i = 0; i < 10; ++i)
14470       ;
14471   }
14472 #pragma omp taskloop
14473   for (int i = 0; i < 10; ++i) {
14474 #pragma omp target simd // OK
14475     for (int i = 0; i < 10; ++i)
14476       ;
14477   }
14478 #pragma omp taskloop
14479   for (int i = 0; i < 10; ++i) {
14480 #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?}}
14481     for (int i = 0; i < 10; ++i)
14482       ;
14483   }
14484 #pragma omp taskloop
14485   for (int i = 0; i < 10; ++i) {
14486 #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?}}
14487     for (int i = 0; i < 10; ++i)
14488       ;
14489   }
14490 #pragma omp taskloop
14491   for (int i = 0; i < 10; ++i) {
14492 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
14493     for (int i = 0; i < 10; ++i)
14494       ;
14495   }
14496 #pragma omp taskloop
14497   for (int i = 0; i < 10; ++i) {
14498 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
14499     for (int i = 0; i < 10; ++i)
14500       ;
14501   }
14502 #pragma omp taskloop
14503   for (int i = 0; i < 10; ++i) {
14504 #pragma omp target teams // OK
14505     a++;
14506   }
14507 #pragma omp taskloop
14508   for (int i = 0; i < 10; ++i) {
14509 #pragma omp target teams distribute // OK
14510     for (int i = 0; i < 10; ++i)
14511       ;
14512   }
14513 #pragma omp taskloop
14514   for (int i = 0; i < 10; ++i) {
14515 #pragma omp target teams distribute parallel for // OK
14516     for (int i = 0; i < 10; ++i)
14517       ;
14518   }
14519 #pragma omp taskloop
14520   for (int i = 0; i < 10; ++i) {
14521 #pragma omp target teams distribute parallel for simd // OK
14522     for (int i = 0; i < 10; ++i)
14523       ;
14524   }
14525 #pragma omp taskloop
14526   for (int i = 0; i < 10; ++i) {
14527 #pragma omp target teams distribute simd // OK
14528     for (int i = 0; i < 10; ++i)
14529       ;
14530   }
14531 
14532 // DISTRIBUTE DIRECTIVE
14533 #pragma omp target
14534 #pragma omp teams
14535 #pragma omp distribute
14536   for (int i = 0; i < 10; ++i) {
14537 #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?}}
14538     for (int i = 0; i < 10; ++i)
14539       ;
14540   }
14541 #pragma omp target
14542 #pragma omp teams
14543 #pragma omp distribute
14544   for (int i = 0; i < 10; ++i) {
14545 #pragma omp for
14546     for (int i = 0; i < 10; ++i)
14547       ;
14548   }
14549 #pragma omp target
14550 #pragma omp teams
14551 #pragma omp distribute
14552   for (int i = 0; i < 10; ++i) {
14553 #pragma omp simd
14554     for (int i = 0; i < 10; ++i)
14555       ;
14556   }
14557 #pragma omp target
14558 #pragma omp teams
14559 #pragma omp distribute
14560   for (int i = 0; i < 10; ++i) {
14561 #pragma omp for simd
14562     for (int i = 0; i < 10; ++i)
14563       ;
14564   }
14565 #pragma omp target
14566 #pragma omp teams
14567 #pragma omp distribute
14568   for (int i = 0; i < 10; ++i) {
14569 #pragma omp parallel
14570     for (int i = 0; i < 10; ++i)
14571       ;
14572   }
14573 #pragma omp target
14574 #pragma omp teams
14575 #pragma omp distribute
14576   for (int i = 0; i < 10; ++i) {
14577 #pragma omp sections
14578     {
14579       bar();
14580     }
14581   }
14582 #pragma omp target
14583 #pragma omp teams
14584 #pragma omp distribute
14585   for (int i = 0; i < 10; ++i) {
14586 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
14587     {
14588       bar();
14589     }
14590   }
14591 #pragma omp target
14592 #pragma omp teams
14593 #pragma omp distribute
14594   for (int i = 0; i < 10; ++i) {
14595 #pragma omp single
14596     {
14597       bar();
14598     }
14599   }
14600 #pragma omp target
14601 #pragma omp teams
14602 #pragma omp distribute
14603   for (int i = 0; i < 10; ++i) {
14604 #pragma omp master
14605     {
14606       bar();
14607     }
14608   }
14609 #pragma omp target
14610 #pragma omp teams
14611 #pragma omp distribute
14612   for (int i = 0; i < 10; ++i) {
14613 #pragma omp critical
14614     {
14615       bar();
14616     }
14617   }
14618 #pragma omp target
14619 #pragma omp teams
14620 #pragma omp distribute
14621   for (int i = 0; i < 10; ++i) {
14622 #pragma omp parallel
14623     {
14624 #pragma omp single
14625       {
14626         bar();
14627       }
14628     }
14629   }
14630 #pragma omp target
14631 #pragma omp teams
14632 #pragma omp distribute
14633   for (int i = 0; i < 10; ++i) {
14634 #pragma omp parallel for
14635     for (int i = 0; i < 10; ++i)
14636       ;
14637   }
14638 #pragma omp target
14639 #pragma omp teams
14640 #pragma omp distribute
14641   for (int i = 0; i < 10; ++i) {
14642 #pragma omp parallel for simd
14643     for (int i = 0; i < 10; ++i)
14644       ;
14645   }
14646 #pragma omp target
14647 #pragma omp teams
14648 #pragma omp distribute
14649   for (int i = 0; i < 10; ++i) {
14650 #pragma omp parallel sections
14651     {
14652       bar();
14653     }
14654   }
14655 #pragma omp target
14656 #pragma omp teams
14657 #pragma omp distribute
14658   for (int i = 0; i < 10; ++i) {
14659 #pragma omp task
14660     {
14661       bar();
14662     }
14663   }
14664 #pragma omp target
14665 #pragma omp teams
14666 #pragma omp distribute
14667   for (int i = 0; i < 10; ++i) {
14668 #pragma omp taskyield
14669     bar();
14670   }
14671 #pragma omp target
14672 #pragma omp teams
14673 #pragma omp distribute
14674   for (int i = 0; i < 10; ++i) {
14675 #pragma omp barrier
14676     bar();
14677   }
14678 #pragma omp target
14679 #pragma omp teams
14680 #pragma omp distribute
14681   for (int i = 0; i < 10; ++i) {
14682 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
14683     bar();
14684   }
14685 #pragma omp target
14686 #pragma omp teams
14687 #pragma omp distribute
14688   for (int i = 0; i < 10; ++i) {
14689 #pragma omp taskwait
14690     bar();
14691   }
14692 #pragma omp target
14693 #pragma omp teams
14694 #pragma omp distribute
14695   for (int i = 0; i < 10; ++i) {
14696 #pragma omp flush
14697     bar();
14698   }
14699 #pragma omp target
14700 #pragma omp teams
14701 #pragma omp distribute
14702   for (int i = 0; i < 10; ++i) {
14703 #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?}}
14704     bar();
14705   }
14706 #pragma omp target
14707 #pragma omp teams
14708 #pragma omp distribute
14709   for (int i = 0; i < 10; ++i) {
14710 #pragma omp atomic
14711     ++a;
14712   }
14713 #pragma omp target
14714 #pragma omp teams
14715 #pragma omp distribute
14716   for (int i = 0; i < 10; ++i) {
14717 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14718     ++a;
14719   }
14720 #pragma omp target
14721 #pragma omp teams
14722 #pragma omp distribute
14723   for (int i = 0; i < 10; ++i) {
14724 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14725     ++a;
14726   }
14727 #pragma omp target
14728 #pragma omp teams
14729 #pragma omp distribute
14730   for (int i = 0; i < 10; ++i) {
14731 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14732     for (int i = 0; i < 10; ++i)
14733       ;
14734   }
14735 #pragma omp target
14736 #pragma omp teams
14737 #pragma omp distribute
14738   for (int i = 0; i < 10; ++i) {
14739 #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?}}
14740     ++a;
14741   }
14742 #pragma omp target
14743 #pragma omp teams
14744 #pragma omp distribute
14745   for (int i = 0; i < 10; ++i) {
14746 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14747     ++a;
14748   }
14749 #pragma omp target
14750 #pragma omp teams
14751 #pragma omp distribute
14752   for (int i = 0; i < 10; ++i) {
14753 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14754     ++a;
14755   }
14756 #pragma omp target
14757 #pragma omp teams
14758 #pragma omp distribute
14759   for (int i = 0; i < 10; ++i) {
14760 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14761     ++a;
14762   }
14763 #pragma omp target
14764 #pragma omp teams
14765 #pragma omp distribute
14766   for (int i = 0; i < 10; ++i) {
14767 #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?}}
14768   for (int i = 0; i < 10; ++i)
14769     ++a;
14770   }
14771 #pragma omp target
14772 #pragma omp teams
14773 #pragma omp distribute
14774   for (int i = 0; i < 10; ++i) {
14775 #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?}}
14776   for (int i = 0; i < 10; ++i)
14777     ++a;
14778   }
14779 #pragma omp target
14780 #pragma omp teams
14781 #pragma omp distribute
14782   for (int i = 0; i < 10; ++i) {
14783 #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?}}
14784   for (int i = 0; i < 10; ++i)
14785     ++a;
14786   }
14787 #pragma omp target
14788 #pragma omp teams
14789 #pragma omp distribute
14790   for (int i = 0; i < 10; ++i) {
14791 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14792   for (int i = 0; i < 10; ++i)
14793     ++a;
14794   }
14795 #pragma omp target
14796 #pragma omp teams
14797 #pragma omp distribute
14798   for (int i = 0; i < 10; ++i) {
14799 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14800   for (int i = 0; i < 10; ++i)
14801     ++a;
14802   }
14803 #pragma omp target
14804 #pragma omp teams
14805 #pragma omp distribute
14806   for (int i = 0; i < 10; ++i) {
14807 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14808   for (int i = 0; i < 10; ++i)
14809     ++a;
14810   }
14811 #pragma omp target
14812 #pragma omp teams
14813 #pragma omp distribute
14814   for (int i = 0; i < 10; ++i) {
14815 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14816   for (int i = 0; i < 10; ++i)
14817     ++a;
14818   }
14819 #pragma omp target
14820 #pragma omp teams
14821 #pragma omp distribute
14822   for (int i = 0; i < 10; ++i) {
14823 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14824   for (int i = 0; i < 10; ++i)
14825     ++a;
14826   }
14827 #pragma omp target
14828 #pragma omp teams
14829 #pragma omp distribute
14830   for (int i = 0; i < 10; ++i) {
14831 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14832   for (int i = 0; i < 10; ++i)
14833     ++a;
14834   }
14835 #pragma omp target
14836 #pragma omp teams
14837 #pragma omp distribute
14838   for (int i = 0; i < 10; ++i) {
14839 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14840   for (int i = 0; i < 10; ++i)
14841     ++a;
14842   }
14843 #pragma omp target
14844 #pragma omp teams
14845 #pragma omp distribute
14846   for (int i = 0; i < 10; ++i) {
14847 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14848   for (int i = 0; i < 10; ++i)
14849     ++a;
14850   }
14851 
14852 // DISTRIBUTE PARALLEL FOR DIRECTIVE
14853 #pragma omp target
14854 #pragma omp teams
14855 #pragma omp distribute parallel for
14856   for (int i = 0; i < 10; ++i) {
14857 #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?}}
14858     for (int i = 0; i < 10; ++i)
14859       ;
14860   }
14861 
14862 #pragma omp target
14863 #pragma omp teams
14864 #pragma omp distribute parallel for
14865   for (int i = 0; i < 10; ++i) {
14866 #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?}}
14867     for (int i = 0; i < 10; ++i)
14868       ;
14869   }
14870 #pragma omp target
14871 #pragma omp teams
14872 #pragma omp distribute parallel for
14873   for (int i = 0; i < 10; ++i) {
14874 #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?}}
14875     for (int i = 0; i < 10; ++i)
14876       ;
14877   }
14878 #pragma omp target
14879 #pragma omp teams
14880 #pragma omp distribute parallel for
14881   for (int i = 0; i < 10; ++i) {
14882 #pragma omp simd
14883     for (int i = 0; i < 10; ++i)
14884       ;
14885   }
14886 #pragma omp target
14887 #pragma omp teams
14888 #pragma omp distribute parallel for
14889   for (int i = 0; i < 10; ++i) {
14890 #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?}}
14891     for (int i = 0; i < 10; ++i)
14892       ;
14893   }
14894 #pragma omp target
14895 #pragma omp teams
14896 #pragma omp distribute parallel for
14897   for (int i = 0; i < 10; ++i) {
14898 #pragma omp parallel
14899     for (int i = 0; i < 10; ++i)
14900       ;
14901   }
14902 #pragma omp target
14903 #pragma omp teams
14904 #pragma omp distribute parallel for
14905   for (int i = 0; i < 10; ++i) {
14906 #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?}}
14907     {
14908       bar();
14909     }
14910   }
14911 #pragma omp target
14912 #pragma omp teams
14913 #pragma omp distribute parallel for
14914   for (int i = 0; i < 10; ++i) {
14915 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
14916     {
14917       bar();
14918     }
14919   }
14920 #pragma omp target
14921 #pragma omp teams
14922 #pragma omp distribute parallel for
14923   for (int i = 0; i < 10; ++i) {
14924 #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?}}
14925     {
14926       bar();
14927     }
14928   }
14929 #pragma omp target
14930 #pragma omp teams
14931 #pragma omp distribute parallel for
14932   for (int i = 0; i < 10; ++i) {
14933 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14934     {
14935       bar();
14936     }
14937   }
14938 #pragma omp target
14939 #pragma omp teams
14940 #pragma omp distribute parallel for
14941   for (int i = 0; i < 10; ++i) {
14942 #pragma omp critical
14943     {
14944       bar();
14945     }
14946   }
14947 #pragma omp target
14948 #pragma omp teams
14949 #pragma omp distribute parallel for
14950   for (int i = 0; i < 10; ++i) {
14951 #pragma omp parallel
14952     {
14953 #pragma omp single
14954       {
14955         bar();
14956       }
14957     }
14958   }
14959 #pragma omp target
14960 #pragma omp teams
14961 #pragma omp distribute parallel for
14962   for (int i = 0; i < 10; ++i) {
14963 #pragma omp parallel for
14964     for (int i = 0; i < 10; ++i)
14965       ;
14966   }
14967 #pragma omp target
14968 #pragma omp teams
14969 #pragma omp distribute parallel for
14970   for (int i = 0; i < 10; ++i) {
14971 #pragma omp parallel for simd
14972     for (int i = 0; i < 10; ++i)
14973       ;
14974   }
14975 #pragma omp target
14976 #pragma omp teams
14977 #pragma omp distribute parallel for
14978   for (int i = 0; i < 10; ++i) {
14979 #pragma omp parallel sections
14980     {
14981       bar();
14982     }
14983   }
14984 #pragma omp target
14985 #pragma omp teams
14986 #pragma omp distribute parallel for
14987   for (int i = 0; i < 10; ++i) {
14988 #pragma omp task
14989     {
14990       bar();
14991     }
14992   }
14993 #pragma omp target
14994 #pragma omp teams
14995 #pragma omp distribute parallel for
14996   for (int i = 0; i < 10; ++i) {
14997 #pragma omp taskyield
14998     bar();
14999   }
15000 #pragma omp target
15001 #pragma omp teams
15002 #pragma omp distribute parallel for
15003   for (int i = 0; i < 10; ++i) {
15004 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
15005     bar();
15006   }
15007 #pragma omp target
15008 #pragma omp teams
15009 #pragma omp distribute parallel for
15010   for (int i = 0; i < 10; ++i) {
15011 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
15012     bar();
15013   }
15014 #pragma omp target
15015 #pragma omp teams
15016 #pragma omp distribute parallel for
15017   for (int i = 0; i < 10; ++i) {
15018 #pragma omp taskwait
15019     bar();
15020   }
15021 #pragma omp target
15022 #pragma omp teams
15023 #pragma omp distribute parallel for
15024   for (int i = 0; i < 10; ++i) {
15025 #pragma omp flush
15026     bar();
15027   }
15028 #pragma omp target
15029 #pragma omp teams
15030 #pragma omp distribute parallel for
15031   for (int i = 0; i < 10; ++i) {
15032 #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?}}
15033     bar();
15034   }
15035 #pragma omp target
15036 #pragma omp teams
15037 #pragma omp distribute parallel for
15038   for (int i = 0; i < 10; ++i) {
15039 #pragma omp atomic
15040     ++a;
15041   }
15042 #pragma omp target
15043 #pragma omp teams
15044 #pragma omp distribute parallel for
15045   for (int i = 0; i < 10; ++i) {
15046 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15047     ++a;
15048   }
15049 #pragma omp target
15050 #pragma omp teams
15051 #pragma omp distribute parallel for
15052   for (int i = 0; i < 10; ++i) {
15053 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
15054     ++a;
15055   }
15056 #pragma omp target
15057 #pragma omp teams
15058 #pragma omp distribute parallel for
15059   for (int i = 0; i < 10; ++i) {
15060 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15061     for (int i = 0; i < 10; ++i)
15062       ;
15063   }
15064 #pragma omp target
15065 #pragma omp teams
15066 #pragma omp distribute parallel for
15067   for (int i = 0; i < 10; ++i) {
15068 #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?}}
15069     ++a;
15070   }
15071 #pragma omp target
15072 #pragma omp teams
15073 #pragma omp distribute parallel for
15074   for (int i = 0; i < 10; ++i) {
15075 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15076     ++a;
15077   }
15078 #pragma omp target
15079 #pragma omp teams
15080 #pragma omp distribute parallel for
15081   for (int i = 0; i < 10; ++i) {
15082 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15083     ++a;
15084   }
15085 #pragma omp target
15086 #pragma omp teams
15087 #pragma omp distribute parallel for
15088   for (int i = 0; i < 10; ++i) {
15089 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15090     ++a;
15091   }
15092 #pragma omp target
15093 #pragma omp teams
15094 #pragma omp distribute parallel for
15095   for (int i = 0; i < 10; ++i) {
15096 #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?}}
15097   for (int i = 0; i < 10; ++i)
15098     ++a;
15099   }
15100 #pragma omp target
15101 #pragma omp teams
15102 #pragma omp distribute parallel for
15103   for (int i = 0; i < 10; ++i) {
15104 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15105   for (int i = 0; i < 10; ++i)
15106     ++a;
15107   }
15108 #pragma omp target
15109 #pragma omp teams
15110 #pragma omp distribute parallel for
15111   for (int i = 0; i < 10; ++i) {
15112 #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?}}
15113   for (int i = 0; i < 10; ++i)
15114     ++a;
15115   }
15116 #pragma omp target
15117 #pragma omp teams
15118 #pragma omp distribute parallel for
15119   for (int i = 0; i < 10; ++i) {
15120 #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?}}
15121   for (int i = 0; i < 10; ++i)
15122     ++a;
15123   }
15124 #pragma omp target
15125 #pragma omp teams
15126 #pragma omp distribute parallel for
15127   for (int i = 0; i < 10; ++i) {
15128 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
15129   for (int i = 0; i < 10; ++i)
15130     ++a;
15131   }
15132 #pragma omp target
15133 #pragma omp teams
15134 #pragma omp distribute parallel for
15135   for (int i = 0; i < 10; ++i) {
15136 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
15137   for (int i = 0; i < 10; ++i)
15138     ++a;
15139   }
15140 #pragma omp target
15141 #pragma omp teams
15142 #pragma omp distribute parallel for
15143   for (int i = 0; i < 10; ++i) {
15144 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15145     ++a;
15146   }
15147 #pragma omp target
15148 #pragma omp teams
15149 #pragma omp distribute parallel for
15150   for (int i = 0; i < 10; ++i) {
15151 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15152   for (int i = 0; i < 10; ++i)
15153     ++a;
15154   }
15155 #pragma omp target
15156 #pragma omp teams
15157 #pragma omp distribute parallel for
15158   for (int i = 0; i < 10; ++i) {
15159 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15160   for (int i = 0; i < 10; ++i)
15161     ++a;
15162   }
15163 #pragma omp target
15164 #pragma omp teams
15165 #pragma omp distribute parallel for
15166   for (int i = 0; i < 10; ++i) {
15167 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15168   for (int i = 0; i < 10; ++i)
15169     ++a;
15170   }
15171 #pragma omp target
15172 #pragma omp teams
15173 #pragma omp distribute parallel for
15174   for (int i = 0; i < 10; ++i) {
15175 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
15176   for (int i = 0; i < 10; ++i)
15177     ++a;
15178   }
15179 
15180 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
15181 #pragma omp target
15182 #pragma omp teams
15183 #pragma omp distribute parallel for simd
15184   for (int i = 0; i < 10; ++i) {
15185 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15186     for (int i = 0; i < 10; ++i)
15187       ;
15188   }
15189 #pragma omp target
15190 #pragma omp teams
15191 #pragma omp distribute parallel for simd
15192   for (int i = 0; i < 10; ++i) {
15193 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15194     for (int i = 0; i < 10; ++i)
15195       ;
15196   }
15197 #pragma omp target
15198 #pragma omp teams
15199 #pragma omp distribute parallel for simd
15200   for (int i = 0; i < 10; ++i) {
15201 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15202     for (int i = 0; i < 10; ++i)
15203       ;
15204   }
15205 #pragma omp target
15206 #pragma omp teams
15207 #pragma omp distribute parallel for simd
15208   for (int i = 0; i < 10; ++i) {
15209 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15210     for (int i = 0; i < 10; ++i)
15211       ;
15212   }
15213 #pragma omp target
15214 #pragma omp teams
15215 #pragma omp distribute parallel for simd
15216   for (int i = 0; i < 10; ++i) {
15217 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15218     for (int i = 0; i < 10; ++i)
15219       ;
15220   }
15221 #pragma omp target
15222 #pragma omp teams
15223 #pragma omp distribute parallel for simd
15224   for (int i = 0; i < 10; ++i) {
15225 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15226     for (int i = 0; i < 10; ++i)
15227       ;
15228   }
15229 #pragma omp target
15230 #pragma omp teams
15231 #pragma omp distribute parallel for simd
15232   for (int i = 0; i < 10; ++i) {
15233 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15234     {
15235       bar();
15236     }
15237   }
15238 #pragma omp target
15239 #pragma omp teams
15240 #pragma omp distribute parallel for simd
15241   for (int i = 0; i < 10; ++i) {
15242 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15243     {
15244       bar();
15245     }
15246   }
15247 #pragma omp target
15248 #pragma omp teams
15249 #pragma omp distribute parallel for simd
15250   for (int i = 0; i < 10; ++i) {
15251 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15252     {
15253       bar();
15254     }
15255   }
15256 #pragma omp target
15257 #pragma omp teams
15258 #pragma omp distribute parallel for simd
15259   for (int i = 0; i < 10; ++i) {
15260 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15261     {
15262       bar();
15263     }
15264   }
15265 #pragma omp target
15266 #pragma omp teams
15267 #pragma omp distribute parallel for simd
15268   for (int i = 0; i < 10; ++i) {
15269 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15270     {
15271       bar();
15272     }
15273   }
15274 #pragma omp target
15275 #pragma omp teams
15276 #pragma omp distribute parallel for simd
15277   for (int i = 0; i < 10; ++i) {
15278 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15279     {
15280 #pragma omp single
15281       {
15282         bar();
15283       }
15284     }
15285   }
15286 #pragma omp target
15287 #pragma omp teams
15288 #pragma omp distribute parallel for simd
15289   for (int i = 0; i < 10; ++i) {
15290 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15291     for (int i = 0; i < 10; ++i)
15292       ;
15293   }
15294 #pragma omp target
15295 #pragma omp teams
15296 #pragma omp distribute parallel for simd
15297   for (int i = 0; i < 10; ++i) {
15298 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15299     for (int i = 0; i < 10; ++i)
15300       ;
15301   }
15302 #pragma omp target
15303 #pragma omp teams
15304 #pragma omp distribute parallel for simd
15305   for (int i = 0; i < 10; ++i) {
15306 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15307     {
15308       bar();
15309     }
15310   }
15311 #pragma omp target
15312 #pragma omp teams
15313 #pragma omp distribute parallel for simd
15314   for (int i = 0; i < 10; ++i) {
15315 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15316     {
15317       bar();
15318     }
15319   }
15320 #pragma omp target
15321 #pragma omp teams
15322 #pragma omp distribute parallel for simd
15323   for (int i = 0; i < 10; ++i) {
15324 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15325     bar();
15326   }
15327 #pragma omp target
15328 #pragma omp teams
15329 #pragma omp distribute parallel for simd
15330   for (int i = 0; i < 10; ++i) {
15331 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15332     bar();
15333   }
15334 #pragma omp target
15335 #pragma omp teams
15336 #pragma omp distribute parallel for simd
15337   for (int i = 0; i < 10; ++i) {
15338 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
15339     bar();
15340   }
15341 #pragma omp target
15342 #pragma omp teams
15343 #pragma omp distribute parallel for simd
15344   for (int i = 0; i < 10; ++i) {
15345 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15346     bar();
15347   }
15348 #pragma omp target
15349 #pragma omp teams
15350 #pragma omp distribute parallel for simd
15351   for (int i = 0; i < 10; ++i) {
15352 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15353     bar();
15354   }
15355 #pragma omp target
15356 #pragma omp teams
15357 #pragma omp distribute parallel for simd
15358   for (int i = 0; i < 10; ++i) {
15359 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15360     bar();
15361   }
15362 #pragma omp target
15363 #pragma omp teams
15364 #pragma omp distribute parallel for simd
15365   for (int i = 0; i < 10; ++i) {
15366 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15367     ++a;
15368   }
15369 #pragma omp target
15370 #pragma omp teams
15371 #pragma omp distribute parallel for simd
15372   for (int i = 0; i < 10; ++i) {
15373 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15374     ++a;
15375   }
15376 #pragma omp target
15377 #pragma omp teams
15378 #pragma omp distribute parallel for simd
15379   for (int i = 0; i < 10; ++i) {
15380 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15381     ++a;
15382   }
15383 #pragma omp target
15384 #pragma omp teams
15385 #pragma omp distribute parallel for simd
15386   for (int i = 0; i < 10; ++i) {
15387 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15388     ++a;
15389   }
15390 #pragma omp target
15391 #pragma omp teams
15392 #pragma omp distribute parallel for simd
15393   for (int i = 0; i < 10; ++i) {
15394 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15395     ++a;
15396   }
15397 #pragma omp target
15398 #pragma omp teams
15399 #pragma omp distribute parallel for simd
15400   for (int i = 0; i < 10; ++i) {
15401 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15402     ++a;
15403   }
15404 #pragma omp target
15405 #pragma omp teams
15406 #pragma omp distribute parallel for simd
15407   for (int i = 0; i < 10; ++i) {
15408 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15409     ++a;
15410   }
15411 #pragma omp target
15412 #pragma omp teams
15413 #pragma omp distribute parallel for simd
15414   for (int i = 0; i < 10; ++i) {
15415 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15416     for (int i = 0; i < 10; ++i)
15417       ;
15418   }
15419 #pragma omp target
15420 #pragma omp teams
15421 #pragma omp distribute parallel for simd
15422   for (int i = 0; i < 10; ++i) {
15423 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15424     for (int i = 0; i < 10; ++i)
15425       ;
15426   }
15427 #pragma omp target
15428 #pragma omp teams
15429 #pragma omp distribute parallel for simd
15430   for (int i = 0; i < 10; ++i) {
15431 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15432     for (int i = 0; i < 10; ++i)
15433       ;
15434   }
15435 #pragma omp target
15436 #pragma omp teams
15437 #pragma omp distribute parallel for simd
15438   for (int i = 0; i < 10; ++i) {
15439 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15440     for (int i = 0; i < 10; ++i)
15441       ;
15442   }
15443 #pragma omp target
15444 #pragma omp teams
15445 #pragma omp distribute parallel for simd
15446   for (int i = 0; i < 10; ++i) {
15447 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15448     for (int i = 0; i < 10; ++i)
15449       ;
15450   }
15451 #pragma omp target
15452 #pragma omp teams
15453 #pragma omp distribute parallel for simd
15454   for (int i = 0; i < 10; ++i) {
15455 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15456     for (int i = 0; i < 10; ++i)
15457       ;
15458   }
15459 #pragma omp target
15460 #pragma omp teams
15461 #pragma omp distribute parallel for simd
15462   for (int i = 0; i < 10; ++i) {
15463 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15464     a++;
15465   }
15466 #pragma omp target
15467 #pragma omp teams
15468 #pragma omp distribute parallel for simd
15469   for (int i = 0; i < 10; ++i) {
15470 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15471     for (int i = 0; i < 10; ++i)
15472       ;
15473   }
15474 #pragma omp target
15475 #pragma omp teams
15476 #pragma omp distribute parallel for simd
15477   for (int i = 0; i < 10; ++i) {
15478 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15479     for (int i = 0; i < 10; ++i)
15480       ;
15481   }
15482 #pragma omp target
15483 #pragma omp teams
15484 #pragma omp distribute parallel for simd
15485   for (int i = 0; i < 10; ++i) {
15486 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15487     for (int i = 0; i < 10; ++i)
15488       ;
15489   }
15490 #pragma omp target
15491 #pragma omp teams
15492 #pragma omp distribute parallel for simd
15493   for (int i = 0; i < 10; ++i) {
15494 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15495     for (int i = 0; i < 10; ++i)
15496       ;
15497   }
15498 
15499 // DISTRIBUTE SIMD DIRECTIVE
15500 #pragma omp target
15501 #pragma omp teams
15502 #pragma omp distribute simd
15503   for (int i = 0; i < 10; ++i) {
15504 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15505     for (int i = 0; i < 10; ++i)
15506       ;
15507   }
15508 #pragma omp target
15509 #pragma omp teams
15510 #pragma omp distribute simd
15511   for (int i = 0; i < 10; ++i) {
15512 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15513     for (int i = 0; i < 10; ++i)
15514       ;
15515   }
15516 #pragma omp target
15517 #pragma omp teams
15518 #pragma omp distribute simd
15519   for (int i = 0; i < 10; ++i) {
15520 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15521     for (int i = 0; i < 10; ++i)
15522       ;
15523   }
15524 #pragma omp target
15525 #pragma omp teams
15526 #pragma omp distribute simd
15527   for (int i = 0; i < 10; ++i) {
15528 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15529     for (int i = 0; i < 10; ++i)
15530       ;
15531   }
15532 #pragma omp target
15533 #pragma omp teams
15534 #pragma omp distribute simd
15535   for (int i = 0; i < 10; ++i) {
15536 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15537     for (int i = 0; i < 10; ++i)
15538       ;
15539   }
15540 #pragma omp target
15541 #pragma omp teams
15542 #pragma omp distribute simd
15543   for (int i = 0; i < 10; ++i) {
15544 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15545     for (int i = 0; i < 10; ++i)
15546       ;
15547   }
15548 #pragma omp target
15549 #pragma omp teams
15550 #pragma omp distribute simd
15551   for (int i = 0; i < 10; ++i) {
15552 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15553     {
15554       bar();
15555     }
15556   }
15557 #pragma omp target
15558 #pragma omp teams
15559 #pragma omp distribute simd
15560   for (int i = 0; i < 10; ++i) {
15561 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15562     {
15563       bar();
15564     }
15565   }
15566 #pragma omp target
15567 #pragma omp teams
15568 #pragma omp distribute simd
15569   for (int i = 0; i < 10; ++i) {
15570 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15571     {
15572       bar();
15573     }
15574   }
15575 #pragma omp target
15576 #pragma omp teams
15577 #pragma omp distribute simd
15578   for (int i = 0; i < 10; ++i) {
15579 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15580     {
15581       bar();
15582     }
15583   }
15584 #pragma omp target
15585 #pragma omp teams
15586 #pragma omp distribute simd
15587   for (int i = 0; i < 10; ++i) {
15588 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15589     {
15590       bar();
15591     }
15592   }
15593 #pragma omp target
15594 #pragma omp teams
15595 #pragma omp distribute simd
15596   for (int i = 0; i < 10; ++i) {
15597 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15598     {
15599 #pragma omp single
15600       {
15601         bar();
15602       }
15603     }
15604   }
15605 #pragma omp target
15606 #pragma omp teams
15607 #pragma omp distribute simd
15608   for (int i = 0; i < 10; ++i) {
15609 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15610     for (int i = 0; i < 10; ++i)
15611       ;
15612   }
15613 #pragma omp target
15614 #pragma omp teams
15615 #pragma omp distribute simd
15616   for (int i = 0; i < 10; ++i) {
15617 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15618     for (int i = 0; i < 10; ++i)
15619       ;
15620   }
15621 #pragma omp target
15622 #pragma omp teams
15623 #pragma omp distribute simd
15624   for (int i = 0; i < 10; ++i) {
15625 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15626     {
15627       bar();
15628     }
15629   }
15630 #pragma omp target
15631 #pragma omp teams
15632 #pragma omp distribute simd
15633   for (int i = 0; i < 10; ++i) {
15634 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15635     {
15636       bar();
15637     }
15638   }
15639 #pragma omp target
15640 #pragma omp teams
15641 #pragma omp distribute simd
15642   for (int i = 0; i < 10; ++i) {
15643 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15644     bar();
15645   }
15646 #pragma omp target
15647 #pragma omp teams
15648 #pragma omp distribute simd
15649   for (int i = 0; i < 10; ++i) {
15650 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15651     bar();
15652   }
15653 #pragma omp target
15654 #pragma omp teams
15655 #pragma omp distribute simd
15656   for (int i = 0; i < 10; ++i) {
15657 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
15658     bar();
15659   }
15660 #pragma omp target
15661 #pragma omp teams
15662 #pragma omp distribute simd
15663   for (int i = 0; i < 10; ++i) {
15664 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15665     bar();
15666   }
15667 #pragma omp target
15668 #pragma omp teams
15669 #pragma omp distribute simd
15670   for (int i = 0; i < 10; ++i) {
15671 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15672     bar();
15673   }
15674 #pragma omp target
15675 #pragma omp teams
15676 #pragma omp distribute simd
15677   for (int i = 0; i < 10; ++i) {
15678 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15679     bar();
15680   }
15681 #pragma omp target
15682 #pragma omp teams
15683 #pragma omp distribute simd
15684   for (int i = 0; i < 10; ++i) {
15685 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15686     ++a;
15687   }
15688 #pragma omp target
15689 #pragma omp teams
15690 #pragma omp distribute simd
15691   for (int i = 0; i < 10; ++i) {
15692 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15693     ++a;
15694   }
15695 #pragma omp target
15696 #pragma omp teams
15697 #pragma omp distribute simd
15698   for (int i = 0; i < 10; ++i) {
15699 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15700     ++a;
15701   }
15702 #pragma omp target
15703 #pragma omp teams
15704 #pragma omp distribute simd
15705   for (int i = 0; i < 10; ++i) {
15706 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15707     ++a;
15708   }
15709 #pragma omp target
15710 #pragma omp teams
15711 #pragma omp distribute simd
15712   for (int i = 0; i < 10; ++i) {
15713 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15714     ++a;
15715   }
15716 #pragma omp target
15717 #pragma omp teams
15718 #pragma omp distribute simd
15719   for (int i = 0; i < 10; ++i) {
15720 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15721     ++a;
15722   }
15723 #pragma omp target
15724 #pragma omp teams
15725 #pragma omp distribute simd
15726   for (int i = 0; i < 10; ++i) {
15727 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15728     ++a;
15729   }
15730 #pragma omp target
15731 #pragma omp teams
15732 #pragma omp distribute simd
15733   for (int i = 0; i < 10; ++i) {
15734 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15735     for (int i = 0; i < 10; ++i)
15736       ;
15737   }
15738 #pragma omp target
15739 #pragma omp teams
15740 #pragma omp distribute simd
15741   for (int i = 0; i < 10; ++i) {
15742 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15743     for (int i = 0; i < 10; ++i)
15744       ;
15745   }
15746 #pragma omp target
15747 #pragma omp teams
15748 #pragma omp distribute simd
15749   for (int i = 0; i < 10; ++i) {
15750 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15751     for (int i = 0; i < 10; ++i)
15752       ;
15753   }
15754 #pragma omp target
15755 #pragma omp teams
15756 #pragma omp distribute simd
15757   for (int i = 0; i < 10; ++i) {
15758 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15759     for (int i = 0; i < 10; ++i)
15760       ;
15761   }
15762 #pragma omp target
15763 #pragma omp teams
15764 #pragma omp distribute simd
15765   for (int i = 0; i < 10; ++i) {
15766 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15767     for (int i = 0; i < 10; ++i)
15768       ;
15769   }
15770 #pragma omp target
15771 #pragma omp teams
15772 #pragma omp distribute simd
15773   for (int i = 0; i < 10; ++i) {
15774 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15775     for (int i = 0; i < 10; ++i)
15776       ;
15777   }
15778 #pragma omp target
15779 #pragma omp teams
15780 #pragma omp distribute simd
15781   for (int i = 0; i < 10; ++i) {
15782 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15783     a++;
15784   }
15785 #pragma omp target
15786 #pragma omp teams
15787 #pragma omp distribute simd
15788   for (int i = 0; i < 10; ++i) {
15789 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15790     for (int i = 0; i < 10; ++i)
15791       ;
15792   }
15793 #pragma omp target
15794 #pragma omp teams
15795 #pragma omp distribute simd
15796   for (int i = 0; i < 10; ++i) {
15797 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15798     for (int i = 0; i < 10; ++i)
15799       ;
15800   }
15801 #pragma omp target
15802 #pragma omp teams
15803 #pragma omp distribute simd
15804   for (int i = 0; i < 10; ++i) {
15805 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15806     for (int i = 0; i < 10; ++i)
15807       ;
15808   }
15809 #pragma omp target
15810 #pragma omp teams
15811 #pragma omp distribute simd
15812   for (int i = 0; i < 10; ++i) {
15813 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15814     for (int i = 0; i < 10; ++i)
15815       ;
15816   }
15817 
15818 // TARGET SIMD DIRECTIVE
15819 #pragma omp target simd
15820   for (int i = 0; i < 10; ++i) {
15821 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15822     for (int i = 0; i < 10; ++i)
15823       ;
15824   }
15825 #pragma omp target simd
15826   for (int i = 0; i < 10; ++i) {
15827 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15828     for (int i = 0; i < 10; ++i)
15829       ;
15830   }
15831 #pragma omp target simd
15832   for (int i = 0; i < 10; ++i) {
15833 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15834     for (int i = 0; i < 10; ++i)
15835       ;
15836   }
15837 #pragma omp target simd
15838   for (int i = 0; i < 10; ++i) {
15839 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15840     for (int i = 0; i < 10; ++i)
15841       ;
15842   }
15843 #pragma omp target simd
15844   for (int i = 0; i < 10; ++i) {
15845 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15846     for (int i = 0; i < 10; ++i)
15847       ;
15848   }
15849 #pragma omp target simd
15850   for (int i = 0; i < 10; ++i) {
15851 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15852     for (int i = 0; i < 10; ++i)
15853       ;
15854   }
15855 #pragma omp target simd
15856   for (int i = 0; i < 10; ++i) {
15857 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15858     {
15859       bar();
15860     }
15861   }
15862 #pragma omp target simd
15863   for (int i = 0; i < 10; ++i) {
15864 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15865     {
15866       bar();
15867     }
15868   }
15869 #pragma omp target simd
15870   for (int i = 0; i < 10; ++i) {
15871 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15872     {
15873       bar();
15874     }
15875   }
15876 #pragma omp target simd
15877   for (int i = 0; i < 10; ++i) {
15878 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15879     {
15880       bar();
15881     }
15882   }
15883 #pragma omp target simd
15884   for (int i = 0; i < 10; ++i) {
15885 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15886     {
15887       bar();
15888     }
15889   }
15890 #pragma omp target simd
15891   for (int i = 0; i < 10; ++i) {
15892 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15893     {
15894 #pragma omp single
15895       {
15896         bar();
15897       }
15898     }
15899   }
15900 #pragma omp target simd
15901   for (int i = 0; i < 10; ++i) {
15902 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15903     for (int i = 0; i < 10; ++i)
15904       ;
15905   }
15906 #pragma omp target simd
15907   for (int i = 0; i < 10; ++i) {
15908 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15909     for (int i = 0; i < 10; ++i)
15910       ;
15911   }
15912 #pragma omp target simd
15913   for (int i = 0; i < 10; ++i) {
15914 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15915     {
15916       bar();
15917     }
15918   }
15919 #pragma omp target simd
15920   for (int i = 0; i < 10; ++i) {
15921 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15922     {
15923       bar();
15924     }
15925   }
15926 #pragma omp target simd
15927   for (int i = 0; i < 10; ++i) {
15928 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15929     bar();
15930   }
15931 #pragma omp target simd
15932   for (int i = 0; i < 10; ++i) {
15933 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15934     bar();
15935   }
15936 #pragma omp target simd
15937   for (int i = 0; i < 10; ++i) {
15938 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
15939     bar();
15940   }
15941 #pragma omp target simd
15942   for (int i = 0; i < 10; ++i) {
15943 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15944     bar();
15945   }
15946 #pragma omp target simd
15947   for (int i = 0; i < 10; ++i) {
15948 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15949     bar();
15950   }
15951 #pragma omp target simd
15952   for (int i = 0; i < 10; ++i) {
15953 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15954     bar();
15955   }
15956 #pragma omp target simd
15957   for (int i = 0; i < 10; ++i) {
15958 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15959     ++a;
15960   }
15961 #pragma omp target simd
15962   for (int i = 0; i < 10; ++i) {
15963 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15964     ++a;
15965   }
15966 #pragma omp target simd
15967   for (int i = 0; i < 10; ++i) {
15968 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15969     ++a;
15970   }
15971 #pragma omp target simd
15972   for (int i = 0; i < 10; ++i) {
15973 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15974     ++a;
15975   }
15976 #pragma omp target simd
15977   for (int i = 0; i < 10; ++i) {
15978 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15979     ++a;
15980   }
15981 #pragma omp target simd
15982   for (int i = 0; i < 10; ++i) {
15983 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15984     ++a;
15985   }
15986 #pragma omp target simd
15987   for (int i = 0; i < 10; ++i) {
15988 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15989     ++a;
15990   }
15991 #pragma omp target simd
15992   for (int i = 0; i < 10; ++i) {
15993 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15994     for (int i = 0; i < 10; ++i)
15995       ;
15996   }
15997 #pragma omp target simd
15998   for (int i = 0; i < 10; ++i) {
15999 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16000     for (int i = 0; i < 10; ++i)
16001       ;
16002   }
16003 #pragma omp target simd
16004   for (int i = 0; i < 10; ++i) {
16005 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16006     for (int i = 0; i < 10; ++i)
16007       ;
16008   }
16009 #pragma omp target simd
16010   for (int i = 0; i < 10; ++i) {
16011 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16012     for (int i = 0; i < 10; ++i)
16013       ;
16014   }
16015 #pragma omp target simd
16016   for (int i = 0; i < 10; ++i) {
16017 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16018     for (int i = 0; i < 10; ++i)
16019       ;
16020   }
16021 #pragma omp target simd
16022   for (int i = 0; i < 10; ++i) {
16023 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16024     for (int i = 0; i < 10; ++i)
16025       ;
16026   }
16027 #pragma omp target simd
16028   for (int i = 0; i < 10; ++i) {
16029 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16030     a++;
16031   }
16032 #pragma omp target simd
16033   for (int i = 0; i < 10; ++i) {
16034 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16035     for (int i = 0; i < 10; ++i)
16036       ;
16037   }
16038 #pragma omp target simd
16039   for (int i = 0; i < 10; ++i) {
16040 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16041     for (int i = 0; i < 10; ++i)
16042       ;
16043   }
16044 #pragma omp target simd
16045   for (int i = 0; i < 10; ++i) {
16046 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16047     for (int i = 0; i < 10; ++i)
16048       ;
16049   }
16050 #pragma omp target simd
16051   for (int i = 0; i < 10; ++i) {
16052 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16053     for (int i = 0; i < 10; ++i)
16054       ;
16055   }
16056 
16057 // TEAMS DISTRIBUTE DIRECTIVE
16058 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16059   for (int i = 0; i < 10; ++i)
16060     ;
16061 #pragma omp target
16062 #pragma omp teams distribute
16063   for (int i = 0; i < 10; ++i) {
16064 #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?}}
16065     for (int i = 0; i < 10; ++i)
16066       ;
16067   }
16068 #pragma omp target
16069 #pragma omp teams distribute
16070   for (int i = 0; i < 10; ++i) {
16071 #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?}}
16072     for (int i = 0; i < 10; ++i)
16073       ;
16074   }
16075 #pragma omp target
16076 #pragma omp teams distribute
16077   for (int i = 0; i < 10; ++i) {
16078 #pragma omp for // OK
16079     for (int i = 0; i < 10; ++i)
16080       ;
16081   }
16082 #pragma omp target
16083 #pragma omp teams distribute
16084   for (int i = 0; i < 10; ++i) {
16085 #pragma omp simd // OK
16086     for (int i = 0; i < 10; ++i)
16087       ;
16088   }
16089 #pragma omp target
16090 #pragma omp teams distribute
16091   for (int i = 0; i < 10; ++i) {
16092 #pragma omp for simd // OK
16093     for (int i = 0; i < 10; ++i)
16094       ;
16095   }
16096 #pragma omp target
16097 #pragma omp teams distribute
16098   for (int i = 0; i < 10; ++i) {
16099 #pragma omp parallel // OK
16100     for (int i = 0; i < 10; ++i)
16101       ;
16102   }
16103 #pragma omp target
16104 #pragma omp teams distribute
16105   for (int i = 0; i < 10; ++i) {
16106 #pragma omp sections // OK
16107     {
16108       bar();
16109     }
16110   }
16111 #pragma omp target
16112 #pragma omp teams distribute
16113   for (int i = 0; i < 10; ++i) {
16114 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
16115     {
16116       bar();
16117     }
16118   }
16119 #pragma omp target
16120 #pragma omp teams distribute
16121   for (int i = 0; i < 10; ++i) {
16122 #pragma omp single // OK
16123     {
16124       bar();
16125     }
16126   }
16127 #pragma omp target
16128 #pragma omp teams distribute
16129   for (int i = 0; i < 10; ++i) {
16130 #pragma omp master // OK
16131     {
16132       bar();
16133     }
16134   }
16135 #pragma omp target
16136 #pragma omp teams distribute
16137   for (int i = 0; i < 10; ++i) {
16138 #pragma omp critical // OK
16139     {
16140       bar();
16141     }
16142   }
16143 #pragma omp target
16144 #pragma omp teams distribute
16145   for (int i = 0; i < 10; ++i) {
16146 #pragma omp parallel // OK
16147     {
16148 #pragma omp single
16149       {
16150         bar();
16151       }
16152     }
16153   }
16154 #pragma omp target
16155 #pragma omp teams distribute
16156   for (int i = 0; i < 10; ++i) {
16157 #pragma omp parallel for // OK
16158     for (int i = 0; i < 10; ++i)
16159       ;
16160   }
16161 #pragma omp target
16162 #pragma omp teams distribute
16163   for (int i = 0; i < 10; ++i) {
16164 #pragma omp parallel for simd // OK
16165     for (int i = 0; i < 10; ++i)
16166       ;
16167   }
16168 #pragma omp target
16169 #pragma omp teams distribute
16170   for (int i = 0; i < 10; ++i) {
16171 #pragma omp parallel sections // OK
16172     {
16173       bar();
16174     }
16175   }
16176 #pragma omp target
16177 #pragma omp teams distribute
16178   for (int i = 0; i < 10; ++i) {
16179 #pragma omp task // OK
16180     {
16181       bar();
16182     }
16183   }
16184 #pragma omp target
16185 #pragma omp teams distribute
16186   for (int i = 0; i < 10; ++i) {
16187 #pragma omp taskyield // OK
16188     bar();
16189   }
16190 #pragma omp target
16191 #pragma omp teams distribute
16192   for (int i = 0; i < 10; ++i) {
16193 #pragma omp barrier // OK
16194     bar();
16195   }
16196 #pragma omp target
16197 #pragma omp teams distribute
16198   for (int i = 0; i < 10; ++i) {
16199 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
16200     bar();
16201   }
16202 #pragma omp target
16203 #pragma omp teams distribute
16204   for (int i = 0; i < 10; ++i) {
16205 #pragma omp taskwait // OK
16206     bar();
16207   }
16208 #pragma omp target
16209 #pragma omp teams distribute
16210   for (int i = 0; i < 10; ++i) {
16211 #pragma omp flush // OK
16212     bar();
16213   }
16214 #pragma omp target
16215 #pragma omp teams distribute
16216   for (int i = 0; i < 10; ++i) {
16217 #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?}}
16218     bar();
16219   }
16220 #pragma omp target
16221 #pragma omp teams distribute
16222   for (int i = 0; i < 10; ++i) {
16223 #pragma omp atomic // OK
16224     ++a;
16225   }
16226 #pragma omp target
16227 #pragma omp teams distribute
16228   for (int i = 0; i < 10; ++i) {
16229 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
16230     ++a;
16231   }
16232 #pragma omp target
16233 #pragma omp teams distribute
16234   for (int i = 0; i < 10; ++i) {
16235 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
16236     ++a;
16237   }
16238 #pragma omp target
16239 #pragma omp teams distribute
16240   for (int i = 0; i < 10; ++i) {
16241 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
16242     for (int i = 0; i < 10; ++i)
16243       ;
16244   }
16245 #pragma omp target
16246 #pragma omp teams distribute
16247   for (int i = 0; i < 10; ++i) {
16248 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
16249     ++a;
16250   }
16251 #pragma omp target
16252 #pragma omp teams distribute
16253   for (int i = 0; i < 10; ++i) {
16254 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
16255     ++a;
16256   }
16257 #pragma omp target
16258 #pragma omp teams distribute
16259   for (int i = 0; i < 10; ++i) {
16260 #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?}}
16261     ++a;
16262   }
16263 #pragma omp target
16264 #pragma omp teams distribute
16265   for (int i = 0; i < 10; ++i) {
16266 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
16267     ++a;
16268   }
16269 #pragma omp target
16270 #pragma omp teams distribute
16271   for (int i = 0; i < 10; ++i) {
16272 #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?}}
16273     for (int i = 0; i < 10; ++i)
16274       ++a;
16275   }
16276 #pragma omp target
16277 #pragma omp teams distribute
16278   for (int i = 0; i < 10; ++i) {
16279 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
16280     for (int i = 0; i < 10; ++i)
16281       ++a;
16282   }
16283 #pragma omp target
16284 #pragma omp teams distribute
16285   for (int i = 0; i < 10; ++i) {
16286 #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?}}
16287     for (int i = 0; i < 10; ++i)
16288       ++a;
16289   }
16290 #pragma omp target
16291 #pragma omp teams distribute
16292   for (int i = 0; i < 10; ++i) {
16293 #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?}}
16294     for (int i = 0; i < 10; ++i)
16295       ++a;
16296   }
16297 #pragma omp target
16298 #pragma omp teams distribute
16299   for (int i = 0; i < 10; ++i) {
16300 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
16301     for (int i = 0; i < 10; ++i)
16302       ++a;
16303   }
16304 #pragma omp target
16305 #pragma omp teams distribute
16306   for (int i = 0; i < 10; ++i) {
16307 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
16308     for (int i = 0; i < 10; ++i)
16309       ++a;
16310   }
16311 #pragma omp target
16312 #pragma omp teams distribute
16313   for (int i = 0; i < 10; ++i) {
16314 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
16315     ++a;
16316   }
16317 #pragma omp target
16318 #pragma omp teams distribute
16319   for (int i = 0; i < 10; ++i) {
16320 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
16321     for (int i = 0; i < 10; ++i)
16322       ++a;
16323   }
16324 #pragma omp target
16325 #pragma omp teams distribute
16326   for (int i = 0; i < 10; ++i) {
16327 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
16328     for (int i = 0; i < 10; ++i)
16329       ++a;
16330   }
16331 #pragma omp target
16332 #pragma omp teams distribute
16333   for (int i = 0; i < 10; ++i) {
16334 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16335     for (int i = 0; i < 10; ++i)
16336       ++a;
16337   }
16338 #pragma omp target
16339 #pragma omp teams distribute
16340   for (int i = 0; i < 10; ++i) {
16341 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16342     for (int i = 0; i < 10; ++i)
16343       ++a;
16344   }
16345 
16346 // TEAMS DISTRIBUTE SIMD DIRECTIVE
16347 #pragma omp teams distribute simd // omp45-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16348   for (int i = 0; i < 10; ++i)
16349     ;
16350 #pragma omp target
16351 #pragma omp teams distribute simd
16352   for (int i = 0; i < 10; ++i) {
16353 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16354     for (int i = 0; i < 10; ++i)
16355       ;
16356   }
16357 #pragma omp target
16358 #pragma omp teams distribute simd
16359   for (int i = 0; i < 10; ++i) {
16360 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16361     for (int i = 0; i < 10; ++i)
16362       ;
16363   }
16364 #pragma omp target
16365 #pragma omp teams distribute simd
16366   for (int i = 0; i < 10; ++i) {
16367 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16368     for (int i = 0; i < 10; ++i)
16369       ;
16370   }
16371 #pragma omp target
16372 #pragma omp teams distribute simd
16373   for (int i = 0; i < 10; ++i) {
16374 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16375     for (int i = 0; i < 10; ++i)
16376       ;
16377   }
16378 #pragma omp target
16379 #pragma omp teams distribute simd
16380   for (int i = 0; i < 10; ++i) {
16381 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16382     for (int i = 0; i < 10; ++i)
16383       ;
16384   }
16385 #pragma omp target
16386 #pragma omp teams distribute simd
16387   for (int i = 0; i < 10; ++i) {
16388 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16389     for (int i = 0; i < 10; ++i)
16390       ;
16391   }
16392 #pragma omp target
16393 #pragma omp teams distribute simd
16394   for (int i = 0; i < 10; ++i) {
16395 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16396     {
16397       bar();
16398     }
16399   }
16400 #pragma omp target
16401 #pragma omp teams distribute simd
16402   for (int i = 0; i < 10; ++i) {
16403 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16404     {
16405       bar();
16406     }
16407   }
16408 #pragma omp target
16409 #pragma omp teams distribute simd
16410   for (int i = 0; i < 10; ++i) {
16411 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16412     {
16413       bar();
16414     }
16415   }
16416 #pragma omp target
16417 #pragma omp teams distribute simd
16418   for (int i = 0; i < 10; ++i) {
16419 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16420     {
16421       bar();
16422     }
16423   }
16424 #pragma omp target
16425 #pragma omp teams distribute simd
16426   for (int i = 0; i < 10; ++i) {
16427 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16428     {
16429       bar();
16430     }
16431   }
16432 #pragma omp target
16433 #pragma omp teams distribute simd
16434   for (int i = 0; i < 10; ++i) {
16435 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16436     {
16437 #pragma omp single
16438       {
16439         bar();
16440       }
16441     }
16442   }
16443 #pragma omp target
16444 #pragma omp teams distribute simd
16445   for (int i = 0; i < 10; ++i) {
16446 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16447     for (int i = 0; i < 10; ++i)
16448       ;
16449   }
16450 #pragma omp target
16451 #pragma omp teams distribute simd
16452   for (int i = 0; i < 10; ++i) {
16453 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16454     for (int i = 0; i < 10; ++i)
16455       ;
16456   }
16457 #pragma omp target
16458 #pragma omp teams distribute simd
16459   for (int i = 0; i < 10; ++i) {
16460 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16461     {
16462       bar();
16463     }
16464   }
16465 #pragma omp target
16466 #pragma omp teams distribute simd
16467   for (int i = 0; i < 10; ++i) {
16468 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16469     {
16470       bar();
16471     }
16472   }
16473 #pragma omp target
16474 #pragma omp teams distribute simd
16475   for (int i = 0; i < 10; ++i) {
16476 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16477     bar();
16478   }
16479 #pragma omp target
16480 #pragma omp teams distribute simd
16481   for (int i = 0; i < 10; ++i) {
16482 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16483     bar();
16484   }
16485 #pragma omp target
16486 #pragma omp teams distribute simd
16487   for (int i = 0; i < 10; ++i) {
16488 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
16489     bar();
16490   }
16491 #pragma omp target
16492 #pragma omp teams distribute simd
16493   for (int i = 0; i < 10; ++i) {
16494 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16495     bar();
16496   }
16497 #pragma omp target
16498 #pragma omp teams distribute simd
16499   for (int i = 0; i < 10; ++i) {
16500 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16501     bar();
16502   }
16503 #pragma omp target
16504 #pragma omp teams distribute simd
16505   for (int i = 0; i < 10; ++i) {
16506 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16507     bar();
16508   }
16509 #pragma omp target
16510 #pragma omp teams distribute simd
16511   for (int i = 0; i < 10; ++i) {
16512 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16513     ++a;
16514   }
16515 #pragma omp target
16516 #pragma omp teams distribute simd
16517   for (int i = 0; i < 10; ++i) {
16518 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16519     ++a;
16520   }
16521 #pragma omp target
16522 #pragma omp teams distribute simd
16523   for (int i = 0; i < 10; ++i) {
16524 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16525     ++a;
16526   }
16527 #pragma omp target
16528 #pragma omp teams distribute simd
16529   for (int i = 0; i < 10; ++i) {
16530 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16531     for (int i = 0; i < 10; ++i)
16532       ;
16533   }
16534 #pragma omp target
16535 #pragma omp teams distribute simd
16536   for (int i = 0; i < 10; ++i) {
16537 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16538     ++a;
16539   }
16540 #pragma omp target
16541 #pragma omp teams distribute simd
16542   for (int i = 0; i < 10; ++i) {
16543 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16544     ++a;
16545   }
16546 #pragma omp target
16547 #pragma omp teams distribute simd
16548   for (int i = 0; i < 10; ++i) {
16549 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16550     ++a;
16551   }
16552 #pragma omp target
16553 #pragma omp teams distribute simd
16554   for (int i = 0; i < 10; ++i) {
16555 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16556     ++a;
16557   }
16558 #pragma omp target
16559 #pragma omp teams distribute simd
16560   for (int i = 0; i < 10; ++i) {
16561 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16562     for (int i = 0; i < 10; ++i)
16563       ++a;
16564   }
16565 #pragma omp target
16566 #pragma omp teams distribute simd
16567   for (int i = 0; i < 10; ++i) {
16568 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16569     for (int i = 0; i < 10; ++i)
16570       ++a;
16571   }
16572 #pragma omp target
16573 #pragma omp teams distribute simd
16574   for (int i = 0; i < 10; ++i) {
16575 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16576     for (int i = 0; i < 10; ++i)
16577       ++a;
16578   }
16579 #pragma omp target
16580 #pragma omp teams distribute simd
16581   for (int i = 0; i < 10; ++i) {
16582 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16583     for (int i = 0; i < 10; ++i)
16584       ++a;
16585   }
16586 #pragma omp target
16587 #pragma omp teams distribute simd
16588   for (int i = 0; i < 10; ++i) {
16589 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16590     for (int i = 0; i < 10; ++i)
16591       ++a;
16592   }
16593 #pragma omp target
16594 #pragma omp teams distribute simd
16595   for (int i = 0; i < 10; ++i) {
16596 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16597     for (int i = 0; i < 10; ++i)
16598       ++a;
16599   }
16600 #pragma omp target
16601 #pragma omp teams distribute simd
16602   for (int i = 0; i < 10; ++i) {
16603 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16604     ++a;
16605   }
16606 #pragma omp target
16607 #pragma omp teams distribute simd
16608   for (int i = 0; i < 10; ++i) {
16609 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16610     for (int i = 0; i < 10; ++i)
16611       ++a;
16612   }
16613 #pragma omp target
16614 #pragma omp teams distribute simd
16615   for (int i = 0; i < 10; ++i) {
16616 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16617     for (int i = 0; i < 10; ++i)
16618       ++a;
16619   }
16620 #pragma omp target
16621 #pragma omp teams distribute simd
16622   for (int i = 0; i < 10; ++i) {
16623 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16624     for (int i = 0; i < 10; ++i)
16625       ++a;
16626   }
16627 #pragma omp target
16628 #pragma omp teams distribute simd
16629   for (int i = 0; i < 10; ++i) {
16630 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16631     for (int i = 0; i < 10; ++i)
16632       ++a;
16633   }
16634 
16635 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
16636 #pragma omp teams distribute parallel for simd // omp45-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16637   for (int i = 0; i < 10; ++i)
16638     ;
16639 #pragma omp target
16640 #pragma omp teams distribute parallel for simd
16641   for (int i = 0; i < 10; ++i) {
16642 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16643     for (int i = 0; i < 10; ++i)
16644       ;
16645   }
16646 #pragma omp target
16647 #pragma omp teams distribute parallel for simd
16648   for (int i = 0; i < 10; ++i) {
16649 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16650     for (int i = 0; i < 10; ++i)
16651       ;
16652   }
16653 #pragma omp target
16654 #pragma omp teams distribute parallel for simd
16655   for (int i = 0; i < 10; ++i) {
16656 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16657     for (int i = 0; i < 10; ++i)
16658       ;
16659   }
16660 #pragma omp target
16661 #pragma omp teams distribute parallel for simd
16662   for (int i = 0; i < 10; ++i) {
16663 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16664     for (int i = 0; i < 10; ++i)
16665       ;
16666   }
16667 #pragma omp target
16668 #pragma omp teams distribute parallel for simd
16669   for (int i = 0; i < 10; ++i) {
16670 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16671     for (int i = 0; i < 10; ++i)
16672       ;
16673   }
16674 #pragma omp target
16675 #pragma omp teams distribute parallel for simd
16676   for (int i = 0; i < 10; ++i) {
16677 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16678     for (int i = 0; i < 10; ++i)
16679       ;
16680   }
16681 #pragma omp target
16682 #pragma omp teams distribute parallel for simd
16683   for (int i = 0; i < 10; ++i) {
16684 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16685     {
16686       bar();
16687     }
16688   }
16689 #pragma omp target
16690 #pragma omp teams distribute parallel for simd
16691   for (int i = 0; i < 10; ++i) {
16692 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16693     {
16694       bar();
16695     }
16696   }
16697 #pragma omp target
16698 #pragma omp teams distribute parallel for simd
16699   for (int i = 0; i < 10; ++i) {
16700 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16701     {
16702       bar();
16703     }
16704   }
16705 #pragma omp target
16706 #pragma omp teams distribute parallel for simd
16707   for (int i = 0; i < 10; ++i) {
16708 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16709     {
16710       bar();
16711     }
16712   }
16713 #pragma omp target
16714 #pragma omp teams distribute parallel for simd
16715   for (int i = 0; i < 10; ++i) {
16716 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16717     {
16718       bar();
16719     }
16720   }
16721 #pragma omp target
16722 #pragma omp teams distribute parallel for simd
16723   for (int i = 0; i < 10; ++i) {
16724 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16725     {
16726 #pragma omp single
16727       {
16728         bar();
16729       }
16730     }
16731   }
16732 #pragma omp target
16733 #pragma omp teams distribute parallel for simd
16734   for (int i = 0; i < 10; ++i) {
16735 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16736     for (int i = 0; i < 10; ++i)
16737       ;
16738   }
16739 #pragma omp target
16740 #pragma omp teams distribute parallel for simd
16741   for (int i = 0; i < 10; ++i) {
16742 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16743     for (int i = 0; i < 10; ++i)
16744       ;
16745   }
16746 #pragma omp target
16747 #pragma omp teams distribute parallel for simd
16748   for (int i = 0; i < 10; ++i) {
16749 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16750     {
16751       bar();
16752     }
16753   }
16754 #pragma omp target
16755 #pragma omp teams distribute parallel for simd
16756   for (int i = 0; i < 10; ++i) {
16757 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16758     {
16759       bar();
16760     }
16761   }
16762 #pragma omp target
16763 #pragma omp teams distribute parallel for simd
16764   for (int i = 0; i < 10; ++i) {
16765 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16766     bar();
16767   }
16768 #pragma omp target
16769 #pragma omp teams distribute parallel for simd
16770   for (int i = 0; i < 10; ++i) {
16771 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16772     bar();
16773   }
16774 #pragma omp target
16775 #pragma omp teams distribute parallel for simd
16776   for (int i = 0; i < 10; ++i) {
16777 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
16778     bar();
16779   }
16780 #pragma omp target
16781 #pragma omp teams distribute parallel for simd
16782   for (int i = 0; i < 10; ++i) {
16783 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16784     bar();
16785   }
16786 #pragma omp target
16787 #pragma omp teams distribute parallel for simd
16788   for (int i = 0; i < 10; ++i) {
16789 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16790     bar();
16791   }
16792 #pragma omp target
16793 #pragma omp teams distribute parallel for simd
16794   for (int i = 0; i < 10; ++i) {
16795 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16796     bar();
16797   }
16798 #pragma omp target
16799 #pragma omp teams distribute parallel for simd
16800   for (int i = 0; i < 10; ++i) {
16801 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16802     ++a;
16803   }
16804 #pragma omp target
16805 #pragma omp teams distribute parallel for simd
16806   for (int i = 0; i < 10; ++i) {
16807 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16808     ++a;
16809   }
16810 #pragma omp target
16811 #pragma omp teams distribute parallel for simd
16812   for (int i = 0; i < 10; ++i) {
16813 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16814     ++a;
16815   }
16816 #pragma omp target
16817 #pragma omp teams distribute parallel for simd
16818   for (int i = 0; i < 10; ++i) {
16819 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16820     for (int i = 0; i < 10; ++i)
16821       ;
16822   }
16823 #pragma omp target
16824 #pragma omp teams distribute parallel for simd
16825   for (int i = 0; i < 10; ++i) {
16826 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16827     ++a;
16828   }
16829 #pragma omp target
16830 #pragma omp teams distribute parallel for simd
16831   for (int i = 0; i < 10; ++i) {
16832 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16833     ++a;
16834   }
16835 #pragma omp target
16836 #pragma omp teams distribute parallel for simd
16837   for (int i = 0; i < 10; ++i) {
16838 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16839     ++a;
16840   }
16841 #pragma omp target
16842 #pragma omp teams distribute parallel for simd
16843   for (int i = 0; i < 10; ++i) {
16844 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16845     ++a;
16846   }
16847 #pragma omp target
16848 #pragma omp teams distribute parallel for simd
16849   for (int i = 0; i < 10; ++i) {
16850 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16851     for (int i = 0; i < 10; ++i)
16852       ++a;
16853   }
16854 #pragma omp target
16855 #pragma omp teams distribute parallel for simd
16856   for (int i = 0; i < 10; ++i) {
16857 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16858     for (int i = 0; i < 10; ++i)
16859       ++a;
16860   }
16861 #pragma omp target
16862 #pragma omp teams distribute parallel for simd
16863   for (int i = 0; i < 10; ++i) {
16864 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16865     for (int i = 0; i < 10; ++i)
16866       ++a;
16867   }
16868 #pragma omp target
16869 #pragma omp teams distribute parallel for simd
16870   for (int i = 0; i < 10; ++i) {
16871 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16872     for (int i = 0; i < 10; ++i)
16873       ++a;
16874   }
16875 #pragma omp target
16876 #pragma omp teams distribute parallel for simd
16877   for (int i = 0; i < 10; ++i) {
16878 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16879     for (int i = 0; i < 10; ++i)
16880       ++a;
16881   }
16882 #pragma omp target
16883 #pragma omp teams distribute parallel for simd
16884   for (int i = 0; i < 10; ++i) {
16885 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16886     for (int i = 0; i < 10; ++i)
16887       ++a;
16888   }
16889 #pragma omp target
16890 #pragma omp teams distribute parallel for simd
16891   for (int i = 0; i < 10; ++i) {
16892 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16893     ++a;
16894   }
16895 #pragma omp target
16896 #pragma omp teams distribute parallel for simd
16897   for (int i = 0; i < 10; ++i) {
16898 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16899     for (int i = 0; i < 10; ++i)
16900       ++a;
16901   }
16902 #pragma omp target
16903 #pragma omp teams distribute parallel for simd
16904   for (int i = 0; i < 10; ++i) {
16905 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16906     for (int i = 0; i < 10; ++i)
16907       ++a;
16908   }
16909 #pragma omp target
16910 #pragma omp teams distribute parallel for simd
16911   for (int i = 0; i < 10; ++i) {
16912 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16913     for (int i = 0; i < 10; ++i)
16914       ++a;
16915   }
16916 #pragma omp target
16917 #pragma omp teams distribute parallel for simd
16918   for (int i = 0; i < 10; ++i) {
16919 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16920     for (int i = 0; i < 10; ++i)
16921       ++a;
16922   }
16923 
16924 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16925 #pragma omp teams distribute parallel for // omp45-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16926   for (int i = 0; i < 10; ++i)
16927     ;
16928 #pragma omp target
16929 #pragma omp teams distribute parallel for
16930   for (int i = 0; i < 10; ++i) {
16931 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
16932     for (int i = 0; i < 10; ++i)
16933       ;
16934   }
16935 #pragma omp target
16936 #pragma omp teams distribute parallel for
16937   for (int i = 0; i < 10; ++i) {
16938 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
16939     for (int i = 0; i < 10; ++i)
16940       ;
16941   }
16942 #pragma omp target
16943 #pragma omp teams distribute parallel for
16944   for (int i = 0; i < 10; ++i) {
16945 #pragma omp for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
16946     for (int i = 0; i < 10; ++i)
16947       ;
16948   }
16949 #pragma omp target
16950 #pragma omp teams distribute parallel for
16951   for (int i = 0; i < 10; ++i) {
16952 #pragma omp simd // OK
16953     for (int i = 0; i < 10; ++i)
16954       ;
16955   }
16956 #pragma omp target
16957 #pragma omp teams distribute parallel for
16958   for (int i = 0; i < 10; ++i) {
16959 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
16960     for (int i = 0; i < 10; ++i)
16961       ;
16962   }
16963 #pragma omp target
16964 #pragma omp teams distribute parallel for
16965   for (int i = 0; i < 10; ++i) {
16966 #pragma omp parallel // OK
16967     for (int i = 0; i < 10; ++i)
16968       ;
16969   }
16970 #pragma omp target
16971 #pragma omp teams distribute parallel for
16972   for (int i = 0; i < 10; ++i) {
16973 #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
16974     {
16975       bar();
16976     }
16977   }
16978 #pragma omp target
16979 #pragma omp teams distribute parallel for
16980   for (int i = 0; i < 10; ++i) {
16981 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
16982     {
16983       bar();
16984     }
16985   }
16986 #pragma omp target
16987 #pragma omp teams distribute parallel for
16988   for (int i = 0; i < 10; ++i) {
16989 #pragma omp single // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
16990     {
16991       bar();
16992     }
16993   }
16994 #pragma omp target
16995 #pragma omp teams distribute parallel for
16996   for (int i = 0; i < 10; ++i) {
16997 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16998     {
16999       bar();
17000     }
17001   }
17002 #pragma omp target
17003 #pragma omp teams distribute parallel for
17004   for (int i = 0; i < 10; ++i) {
17005 #pragma omp critical // OK
17006     {
17007       bar();
17008     }
17009   }
17010 #pragma omp target
17011 #pragma omp teams distribute parallel for
17012   for (int i = 0; i < 10; ++i) {
17013 #pragma omp parallel // OK
17014     {
17015 #pragma omp single
17016       {
17017         bar();
17018       }
17019     }
17020   }
17021 #pragma omp target
17022 #pragma omp teams distribute parallel for
17023   for (int i = 0; i < 10; ++i) {
17024 #pragma omp parallel for // OK
17025     for (int i = 0; i < 10; ++i)
17026       ;
17027   }
17028 #pragma omp target
17029 #pragma omp teams distribute parallel for
17030   for (int i = 0; i < 10; ++i) {
17031 #pragma omp parallel for simd // OK
17032     for (int i = 0; i < 10; ++i)
17033       ;
17034   }
17035 #pragma omp target
17036 #pragma omp teams distribute parallel for
17037   for (int i = 0; i < 10; ++i) {
17038 #pragma omp parallel sections // OK
17039     {
17040       bar();
17041     }
17042   }
17043 #pragma omp target
17044 #pragma omp teams distribute parallel for
17045   for (int i = 0; i < 10; ++i) {
17046 #pragma omp task // OK
17047     {
17048       bar();
17049     }
17050   }
17051 #pragma omp target
17052 #pragma omp teams distribute parallel for
17053   for (int i = 0; i < 10; ++i) {
17054 #pragma omp taskyield // OK
17055     bar();
17056   }
17057 #pragma omp target
17058 #pragma omp teams distribute parallel for
17059   for (int i = 0; i < 10; ++i) {
17060 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
17061     bar();
17062   }
17063 #pragma omp target
17064 #pragma omp teams distribute parallel for
17065   for (int i = 0; i < 10; ++i) {
17066 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
17067     bar();
17068   }
17069 #pragma omp target
17070 #pragma omp teams distribute parallel for
17071   for (int i = 0; i < 10; ++i) {
17072 #pragma omp taskwait // OK
17073     bar();
17074   }
17075 #pragma omp target
17076 #pragma omp teams distribute parallel for
17077   for (int i = 0; i < 10; ++i) {
17078 #pragma omp flush // OK
17079     bar();
17080   }
17081 #pragma omp target
17082 #pragma omp teams distribute parallel for
17083   for (int i = 0; i < 10; ++i) {
17084 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
17085     bar();
17086   }
17087 #pragma omp target
17088 #pragma omp teams distribute parallel for
17089   for (int i = 0; i < 10; ++i) {
17090 #pragma omp atomic // OK
17091     ++a;
17092   }
17093 #pragma omp target
17094 #pragma omp teams distribute parallel for
17095   for (int i = 0; i < 10; ++i) {
17096 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
17097     ++a;
17098   }
17099 #pragma omp target
17100 #pragma omp teams distribute parallel for
17101   for (int i = 0; i < 10; ++i) {
17102 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
17103     ++a;
17104   }
17105 #pragma omp target
17106 #pragma omp teams distribute parallel for
17107   for (int i = 0; i < 10; ++i) {
17108 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
17109     for (int i = 0; i < 10; ++i)
17110       ;
17111   }
17112 #pragma omp target
17113 #pragma omp teams distribute parallel for
17114   for (int i = 0; i < 10; ++i) {
17115 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
17116     ++a;
17117   }
17118 #pragma omp target
17119 #pragma omp teams distribute parallel for
17120   for (int i = 0; i < 10; ++i) {
17121 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
17122     ++a;
17123   }
17124 #pragma omp target
17125 #pragma omp teams distribute parallel for
17126   for (int i = 0; i < 10; ++i) {
17127 #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
17128     ++a;
17129   }
17130 #pragma omp target
17131 #pragma omp teams distribute parallel for
17132   for (int i = 0; i < 10; ++i) {
17133 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
17134     ++a;
17135   }
17136 #pragma omp target
17137 #pragma omp teams distribute parallel for
17138   for (int i = 0; i < 10; ++i) {
17139 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
17140     for (int i = 0; i < 10; ++i)
17141       ++a;
17142   }
17143 #pragma omp target
17144 #pragma omp teams distribute parallel for
17145   for (int i = 0; i < 10; ++i) {
17146 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
17147     for (int i = 0; i < 10; ++i)
17148       ++a;
17149   }
17150 #pragma omp target
17151 #pragma omp teams distribute parallel for
17152   for (int i = 0; i < 10; ++i) {
17153 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
17154     for (int i = 0; i < 10; ++i)
17155       ++a;
17156   }
17157 #pragma omp target
17158 #pragma omp teams distribute parallel for
17159   for (int i = 0; i < 10; ++i) {
17160 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
17161     for (int i = 0; i < 10; ++i)
17162       ++a;
17163   }
17164 #pragma omp target
17165 #pragma omp teams distribute parallel for
17166   for (int i = 0; i < 10; ++i) {
17167 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
17168     for (int i = 0; i < 10; ++i)
17169       ++a;
17170   }
17171 #pragma omp target
17172 #pragma omp teams distribute parallel for
17173   for (int i = 0; i < 10; ++i) {
17174 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
17175     for (int i = 0; i < 10; ++i)
17176       ++a;
17177   }
17178 #pragma omp target
17179 #pragma omp teams distribute parallel for
17180   for (int i = 0; i < 10; ++i) {
17181 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
17182     ++a;
17183   }
17184 #pragma omp target
17185 #pragma omp teams distribute parallel for
17186   for (int i = 0; i < 10; ++i) {
17187 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
17188     for (int i = 0; i < 10; ++i)
17189       ++a;
17190   }
17191 #pragma omp target
17192 #pragma omp teams distribute parallel for
17193   for (int i = 0; i < 10; ++i) {
17194 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
17195     for (int i = 0; i < 10; ++i)
17196       ++a;
17197   }
17198 #pragma omp target
17199 #pragma omp teams distribute parallel for
17200   for (int i = 0; i < 10; ++i) {
17201 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
17202     for (int i = 0; i < 10; ++i)
17203       ++a;
17204   }
17205 #pragma omp target
17206 #pragma omp teams distribute parallel for
17207   for (int i = 0; i < 10; ++i) {
17208 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
17209     for (int i = 0; i < 10; ++i)
17210       ++a;
17211   }
17212 
17213 // TARGET TEAMS DIRECTIVE
17214 #pragma omp target teams
17215 #pragma omp parallel
17216   bar();
17217 #pragma omp target teams
17218 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
17219   for (int i = 0; i < 10; ++i)
17220     ;
17221 #pragma omp target teams
17222 #pragma omp simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
17223   for (int i = 0; i < 10; ++i)
17224     ;
17225 #pragma omp target teams
17226 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
17227   for (int i = 0; i < 10; ++i)
17228     ;
17229 #pragma omp target teams
17230 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
17231   {
17232     bar();
17233   }
17234 #pragma omp target teams
17235 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
17236   {
17237     bar();
17238   }
17239 #pragma omp target teams
17240 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
17241   bar();
17242 
17243 #pragma omp target teams
17244 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
17245   {
17246     bar();
17247   }
17248 #pragma omp target teams
17249 #pragma omp critical // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
17250   {
17251     bar();
17252   }
17253 #pragma omp target teams
17254 #pragma omp parallel for
17255   for (int i = 0; i < 10; ++i)
17256     ;
17257 #pragma omp target teams
17258 #pragma omp parallel for simd
17259   for (int i = 0; i < 10; ++i)
17260     ;
17261 #pragma omp target teams
17262 #pragma omp parallel sections
17263   {
17264     bar();
17265   }
17266 #pragma omp target teams
17267 #pragma omp task // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
17268   {
17269     bar();
17270   }
17271 #pragma omp target teams
17272   {
17273 #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
17274     bar();
17275   }
17276 #pragma omp target teams
17277   {
17278 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
17279     bar();
17280   }
17281 #pragma omp target teams
17282   {
17283 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
17284     bar();
17285   }
17286 #pragma omp target teams
17287   {
17288 #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
17289     bar();
17290   }
17291 #pragma omp target teams
17292   {
17293 #pragma omp flush // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
17294     bar();
17295   }
17296 #pragma omp target teams
17297   {
17298 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
17299     bar();
17300   }
17301 #pragma omp target teams
17302   {
17303 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
17304     ++a;
17305   }
17306 #pragma omp target teams
17307   {
17308 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
17309     ++a;
17310   }
17311 #pragma omp target teams
17312   {
17313 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
17314     ++a;
17315   }
17316 #pragma omp target teams
17317 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
17318   for (int i = 0; i < 10; ++i)
17319     ;
17320 #pragma omp target teams
17321   {
17322 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
17323   }
17324 #pragma omp target teams
17325   {
17326 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
17327   }
17328 #pragma omp target teams
17329   {
17330 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
17331     ++a;
17332   }
17333 #pragma omp target teams
17334   {
17335 #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
17336   for (int i = 0; i < 10; ++i)
17337     ++a;
17338   }
17339 #pragma omp target teams
17340 #pragma omp distribute
17341   for (int i = 0; i < 10; ++i)
17342     ;
17343 #pragma omp target teams
17344   {
17345 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
17346     ++a;
17347   }
17348 #pragma omp target teams
17349 #pragma omp distribute parallel for
17350   for (int i = 0; i < 10; ++i)
17351     ;
17352 #pragma omp target teams
17353   {
17354 #pragma omp distribute parallel for
17355   for (int i = 0; i < 10; ++i)
17356     ;
17357 #pragma omp distribute parallel for
17358   for (int j = 0; j < 10; ++j)
17359     ;
17360   }
17361 #pragma omp target teams
17362   {
17363 #pragma omp distribute parallel for simd
17364   for (int i = 0; i < 10; ++i)
17365     ;
17366 #pragma omp distribute parallel for simd
17367   for (int j = 0; j < 10; ++j)
17368     ;
17369   }
17370 #pragma omp target teams
17371   {
17372 #pragma omp distribute simd
17373   for (int i = 0; i < 10; ++i)
17374     ;
17375 #pragma omp distribute simd
17376   for (int j = 0; j < 10; ++j)
17377     ;
17378   }
17379 #pragma omp target teams
17380   {
17381 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
17382   for (int i = 0; i < 10; ++i)
17383     ;
17384   }
17385 #pragma omp target teams
17386   {
17387 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
17388   for (int i = 0; i < 10; ++i)
17389     ;
17390   }
17391 #pragma omp target teams
17392   {
17393 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
17394   for (int i = 0; i < 10; ++i)
17395     ;
17396   }
17397 #pragma omp target teams
17398   {
17399 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
17400   for (int i = 0; i < 10; ++i)
17401     ;
17402   }
17403 #pragma omp target teams
17404   {
17405 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
17406   for (int i = 0; i < 10; ++i)
17407     ;
17408   }
17409 #pragma omp target teams
17410   {
17411 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
17412     a++;
17413   }
17414 #pragma omp target teams
17415   {
17416 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
17417   for (int i = 0; i < 10; ++i)
17418     ;
17419   }
17420 #pragma omp target teams
17421   {
17422 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
17423   for (int i = 0; i < 10; ++i)
17424     ;
17425   }
17426 #pragma omp target teams
17427   {
17428 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
17429   for (int i = 0; i < 10; ++i)
17430     ;
17431   }
17432 #pragma omp target teams
17433   {
17434 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
17435   for (int i = 0; i < 10; ++i)
17436     ;
17437   }
17438 
17439 // TARGET TEAMS DISTRIBUTE DIRECTIVE
17440 #pragma omp target teams distribute // OK
17441   for (int i = 0; i < 10; ++i)
17442     ;
17443 #pragma omp target teams distribute
17444   for (int i = 0; i < 10; ++i) {
17445 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
17446     for (int i = 0; i < 10; ++i)
17447       ;
17448   }
17449 #pragma omp target teams distribute
17450   for (int i = 0; i < 10; ++i) {
17451 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
17452     for (int i = 0; i < 10; ++i)
17453       ;
17454   }
17455 #pragma omp target teams distribute
17456   for (int i = 0; i < 10; ++i) {
17457 #pragma omp for // OK
17458     for (int i = 0; i < 10; ++i)
17459       ;
17460   }
17461 #pragma omp target teams distribute
17462   for (int i = 0; i < 10; ++i) {
17463 #pragma omp simd // OK
17464     for (int i = 0; i < 10; ++i)
17465       ;
17466   }
17467 #pragma omp target teams distribute
17468   for (int i = 0; i < 10; ++i) {
17469 #pragma omp for simd // OK
17470     for (int i = 0; i < 10; ++i)
17471       ;
17472   }
17473 #pragma omp target teams distribute
17474   for (int i = 0; i < 10; ++i) {
17475 #pragma omp parallel // OK
17476     for (int i = 0; i < 10; ++i)
17477       ;
17478   }
17479 #pragma omp target teams distribute
17480   for (int i = 0; i < 10; ++i) {
17481 #pragma omp sections // OK
17482     {
17483       bar();
17484     }
17485   }
17486 #pragma omp target teams distribute
17487   for (int i = 0; i < 10; ++i) {
17488 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
17489     {
17490       bar();
17491     }
17492   }
17493 #pragma omp target teams distribute
17494   for (int i = 0; i < 10; ++i) {
17495 #pragma omp single // OK
17496     {
17497       bar();
17498     }
17499   }
17500 #pragma omp target teams distribute
17501   for (int i = 0; i < 10; ++i) {
17502 #pragma omp master // OK
17503     {
17504       bar();
17505     }
17506   }
17507 #pragma omp target teams distribute
17508   for (int i = 0; i < 10; ++i) {
17509 #pragma omp critical // OK
17510     {
17511       bar();
17512     }
17513   }
17514 #pragma omp target teams distribute
17515   for (int i = 0; i < 10; ++i) {
17516 #pragma omp parallel // OK
17517     {
17518 #pragma omp single
17519       {
17520         bar();
17521       }
17522     }
17523   }
17524 #pragma omp target teams distribute
17525   for (int i = 0; i < 10; ++i) {
17526 #pragma omp parallel for // OK
17527     for (int i = 0; i < 10; ++i)
17528       ;
17529   }
17530 #pragma omp target teams distribute
17531   for (int i = 0; i < 10; ++i) {
17532 #pragma omp parallel for simd // OK
17533     for (int i = 0; i < 10; ++i)
17534       ;
17535   }
17536 #pragma omp target teams distribute
17537   for (int i = 0; i < 10; ++i) {
17538 #pragma omp parallel sections // OK
17539     {
17540       bar();
17541     }
17542   }
17543 #pragma omp target teams distribute
17544   for (int i = 0; i < 10; ++i) {
17545 #pragma omp task // OK
17546     {
17547       bar();
17548     }
17549   }
17550 #pragma omp target teams distribute
17551   for (int i = 0; i < 10; ++i) {
17552 #pragma omp taskyield // OK
17553     bar();
17554   }
17555 #pragma omp target teams distribute
17556   for (int i = 0; i < 10; ++i) {
17557 #pragma omp barrier // OK
17558     bar();
17559   }
17560 #pragma omp target teams distribute
17561   for (int i = 0; i < 10; ++i) {
17562 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
17563     bar();
17564   }
17565 #pragma omp target teams distribute
17566   for (int i = 0; i < 10; ++i) {
17567 #pragma omp taskwait // OK
17568     bar();
17569   }
17570 #pragma omp target teams distribute
17571   for (int i = 0; i < 10; ++i) {
17572 #pragma omp flush // OK
17573     bar();
17574   }
17575 #pragma omp target teams distribute
17576   for (int i = 0; i < 10; ++i) {
17577 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
17578     bar();
17579   }
17580 #pragma omp target teams distribute
17581   for (int i = 0; i < 10; ++i) {
17582 #pragma omp atomic // OK
17583     ++a;
17584   }
17585 #pragma omp target teams distribute
17586   for (int i = 0; i < 10; ++i) {
17587 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17588     ++a;
17589   }
17590 #pragma omp target teams distribute
17591   for (int i = 0; i < 10; ++i) {
17592 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17593     ++a;
17594   }
17595 #pragma omp target teams distribute
17596   for (int i = 0; i < 10; ++i) {
17597 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17598     for (int i = 0; i < 10; ++i)
17599       ;
17600   }
17601 #pragma omp target teams distribute
17602   for (int i = 0; i < 10; ++i) {
17603 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17604     ++a;
17605   }
17606 #pragma omp target teams distribute
17607   for (int i = 0; i < 10; ++i) {
17608 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17609     ++a;
17610   }
17611 #pragma omp target teams distribute
17612   for (int i = 0; i < 10; ++i) {
17613 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
17614     ++a;
17615   }
17616 #pragma omp target teams distribute
17617   for (int i = 0; i < 10; ++i) {
17618 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17619     ++a;
17620   }
17621 #pragma omp target teams distribute
17622   for (int i = 0; i < 10; ++i) {
17623 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
17624     for (int i = 0; i < 10; ++i)
17625       ++a;
17626   }
17627 #pragma omp target teams distribute
17628   for (int i = 0; i < 10; ++i) {
17629 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17630     for (int i = 0; i < 10; ++i)
17631       ++a;
17632   }
17633 #pragma omp target teams distribute
17634   for (int i = 0; i < 10; ++i) {
17635 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
17636     for (int i = 0; i < 10; ++i)
17637       ++a;
17638   }
17639 #pragma omp target teams distribute
17640   for (int i = 0; i < 10; ++i) {
17641 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
17642     for (int i = 0; i < 10; ++i)
17643       ++a;
17644   }
17645 #pragma omp target teams distribute
17646   for (int i = 0; i < 10; ++i) {
17647 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
17648     for (int i = 0; i < 10; ++i)
17649       ++a;
17650   }
17651 #pragma omp target teams distribute
17652   for (int i = 0; i < 10; ++i) {
17653 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
17654     for (int i = 0; i < 10; ++i)
17655       ++a;
17656   }
17657 #pragma omp target teams distribute
17658   for (int i = 0; i < 10; ++i) {
17659 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17660     ++a;
17661   }
17662 #pragma omp target teams distribute
17663   for (int i = 0; i < 10; ++i) {
17664 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17665     for (int i = 0; i < 10; ++i)
17666       ++a;
17667   }
17668 #pragma omp target teams distribute
17669   for (int i = 0; i < 10; ++i) {
17670 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17671     for (int i = 0; i < 10; ++i)
17672       ++a;
17673   }
17674 #pragma omp target teams distribute
17675   for (int i = 0; i < 10; ++i) {
17676 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17677     for (int i = 0; i < 10; ++i)
17678       ++a;
17679   }
17680 #pragma omp target teams distribute
17681   for (int i = 0; i < 10; ++i) {
17682 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17683     for (int i = 0; i < 10; ++i)
17684       ++a;
17685   }
17686 
17687 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
17688 #pragma omp target teams distribute parallel for // OK
17689   for (int i = 0; i < 10; ++i)
17690     ;
17691 #pragma omp target teams distribute parallel for
17692   for (int i = 0; i < 10; ++i) {
17693 #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
17694     for (int i = 0; i < 10; ++i)
17695       ;
17696   }
17697 #pragma omp target teams distribute parallel for
17698   for (int i = 0; i < 10; ++i) {
17699 #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
17700     for (int i = 0; i < 10; ++i)
17701       ;
17702   }
17703 #pragma omp target teams distribute parallel for
17704   for (int i = 0; i < 10; ++i) {
17705 #pragma omp for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
17706     for (int i = 0; i < 10; ++i)
17707       ;
17708   }
17709 #pragma omp target teams distribute parallel for
17710   for (int i = 0; i < 10; ++i) {
17711 #pragma omp simd // OK
17712     for (int i = 0; i < 10; ++i)
17713       ;
17714   }
17715 #pragma omp target teams distribute parallel for
17716   for (int i = 0; i < 10; ++i) {
17717 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
17718     for (int i = 0; i < 10; ++i)
17719       ;
17720   }
17721 #pragma omp target teams distribute parallel for
17722   for (int i = 0; i < 10; ++i) {
17723 #pragma omp parallel // OK
17724     for (int i = 0; i < 10; ++i)
17725       ;
17726   }
17727 #pragma omp target teams distribute parallel for
17728   for (int i = 0; i < 10; ++i) {
17729 #pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
17730     {
17731       bar();
17732     }
17733   }
17734 #pragma omp target teams distribute parallel for
17735   for (int i = 0; i < 10; ++i) {
17736 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
17737     {
17738       bar();
17739     }
17740   }
17741 #pragma omp target teams distribute parallel for
17742   for (int i = 0; i < 10; ++i) {
17743 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17744     {
17745       bar();
17746     }
17747   }
17748 #pragma omp target teams distribute parallel for
17749   for (int i = 0; i < 10; ++i) {
17750 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17751     {
17752       bar();
17753     }
17754   }
17755 #pragma omp target teams distribute parallel for
17756   for (int i = 0; i < 10; ++i) {
17757 #pragma omp critical // OK
17758     {
17759       bar();
17760     }
17761   }
17762 #pragma omp target teams distribute parallel for
17763   for (int i = 0; i < 10; ++i) {
17764 #pragma omp parallel // OK
17765     {
17766 #pragma omp single
17767       {
17768         bar();
17769       }
17770     }
17771   }
17772 #pragma omp target teams distribute parallel for
17773   for (int i = 0; i < 10; ++i) {
17774 #pragma omp parallel for // OK
17775     for (int i = 0; i < 10; ++i)
17776       ;
17777   }
17778 #pragma omp target teams distribute parallel for
17779   for (int i = 0; i < 10; ++i) {
17780 #pragma omp parallel for simd // OK
17781     for (int i = 0; i < 10; ++i)
17782       ;
17783   }
17784 #pragma omp target teams distribute parallel for
17785   for (int i = 0; i < 10; ++i) {
17786 #pragma omp parallel sections // OK
17787     {
17788       bar();
17789     }
17790   }
17791 #pragma omp target teams distribute parallel for
17792   for (int i = 0; i < 10; ++i) {
17793 #pragma omp task // OK
17794     {
17795       bar();
17796     }
17797   }
17798 #pragma omp target teams distribute parallel for
17799   for (int i = 0; i < 10; ++i) {
17800 #pragma omp taskyield // OK
17801     bar();
17802   }
17803 #pragma omp target teams distribute parallel for
17804   for (int i = 0; i < 10; ++i) {
17805 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17806     bar();
17807   }
17808 #pragma omp target teams distribute parallel for
17809   for (int i = 0; i < 10; ++i) {
17810 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17811     bar();
17812   }
17813 #pragma omp target teams distribute parallel for
17814   for (int i = 0; i < 10; ++i) {
17815 #pragma omp taskwait // OK
17816     bar();
17817   }
17818 #pragma omp target teams distribute parallel for
17819   for (int i = 0; i < 10; ++i) {
17820 #pragma omp flush // OK
17821     bar();
17822   }
17823 #pragma omp target teams distribute parallel for
17824   for (int i = 0; i < 10; ++i) {
17825 #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
17826     bar();
17827   }
17828 #pragma omp target teams distribute parallel for
17829   for (int i = 0; i < 10; ++i) {
17830 #pragma omp atomic // OK
17831     ++a;
17832   }
17833 #pragma omp target teams distribute parallel for
17834   for (int i = 0; i < 10; ++i) {
17835 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17836     ++a;
17837   }
17838 #pragma omp target teams distribute parallel for
17839   for (int i = 0; i < 10; ++i) {
17840 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17841     ++a;
17842   }
17843 #pragma omp target teams distribute parallel for
17844   for (int i = 0; i < 10; ++i) {
17845 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17846     for (int i = 0; i < 10; ++i)
17847       ;
17848   }
17849 #pragma omp target teams distribute parallel for
17850   for (int i = 0; i < 10; ++i) {
17851 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17852     ++a;
17853   }
17854 #pragma omp target teams distribute parallel for
17855   for (int i = 0; i < 10; ++i) {
17856 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17857     ++a;
17858   }
17859 #pragma omp target teams distribute parallel for
17860   for (int i = 0; i < 10; ++i) {
17861 #pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
17862     ++a;
17863   }
17864 #pragma omp target teams distribute parallel for
17865   for (int i = 0; i < 10; ++i) {
17866 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17867     ++a;
17868   }
17869 #pragma omp target teams distribute parallel for
17870   for (int i = 0; i < 10; ++i) {
17871 #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
17872     for (int i = 0; i < 10; ++i)
17873       ++a;
17874   }
17875 #pragma omp target teams distribute parallel for
17876   for (int i = 0; i < 10; ++i) {
17877 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17878     for (int i = 0; i < 10; ++i)
17879       ++a;
17880   }
17881 #pragma omp target teams distribute parallel for
17882   for (int i = 0; i < 10; ++i) {
17883 #pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
17884     for (int i = 0; i < 10; ++i)
17885       ++a;
17886   }
17887 #pragma omp target teams distribute parallel for
17888   for (int i = 0; i < 10; ++i) {
17889 #pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
17890     for (int i = 0; i < 10; ++i)
17891       ++a;
17892   }
17893 #pragma omp target teams distribute parallel for
17894   for (int i = 0; i < 10; ++i) {
17895 #pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
17896     for (int i = 0; i < 10; ++i)
17897       ++a;
17898   }
17899 #pragma omp target teams distribute parallel for
17900   for (int i = 0; i < 10; ++i) {
17901 #pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
17902     for (int i = 0; i < 10; ++i)
17903       ++a;
17904   }
17905 #pragma omp target teams distribute parallel for
17906   for (int i = 0; i < 10; ++i) {
17907 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17908     ++a;
17909   }
17910 #pragma omp target teams distribute parallel for
17911   for (int i = 0; i < 10; ++i) {
17912 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17913     for (int i = 0; i < 10; ++i)
17914       ++a;
17915   }
17916 #pragma omp target teams distribute parallel for
17917   for (int i = 0; i < 10; ++i) {
17918 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17919     for (int i = 0; i < 10; ++i)
17920       ++a;
17921   }
17922 #pragma omp target teams distribute parallel for
17923   for (int i = 0; i < 10; ++i) {
17924 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17925     for (int i = 0; i < 10; ++i)
17926       ++a;
17927   }
17928 #pragma omp target teams distribute parallel for
17929   for (int i = 0; i < 10; ++i) {
17930 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17931     for (int i = 0; i < 10; ++i)
17932       ++a;
17933   }
17934 
17935 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
17936 #pragma omp target teams distribute parallel for simd // OK
17937   for (int i = 0; i < 10; ++i)
17938     ;
17939 #pragma omp target teams distribute parallel for simd
17940   for (int i = 0; i < 10; ++i) {
17941 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17942     for (int i = 0; i < 10; ++i)
17943       ;
17944   }
17945 #pragma omp target teams distribute parallel for simd
17946   for (int i = 0; i < 10; ++i) {
17947 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17948     for (int i = 0; i < 10; ++i)
17949       ;
17950   }
17951 #pragma omp target teams distribute parallel for simd
17952   for (int i = 0; i < 10; ++i) {
17953 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17954     for (int i = 0; i < 10; ++i)
17955       ;
17956   }
17957 #pragma omp target teams distribute parallel for simd
17958   for (int i = 0; i < 10; ++i) {
17959 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17960     for (int i = 0; i < 10; ++i)
17961       ;
17962   }
17963 #pragma omp target teams distribute parallel for simd
17964   for (int i = 0; i < 10; ++i) {
17965 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17966     for (int i = 0; i < 10; ++i)
17967       ;
17968   }
17969 #pragma omp target teams distribute parallel for simd
17970   for (int i = 0; i < 10; ++i) {
17971 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17972     for (int i = 0; i < 10; ++i)
17973       ;
17974   }
17975 #pragma omp target teams distribute parallel for simd
17976   for (int i = 0; i < 10; ++i) {
17977 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17978     {
17979       bar();
17980     }
17981   }
17982 #pragma omp target teams distribute parallel for simd
17983   for (int i = 0; i < 10; ++i) {
17984 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17985     {
17986       bar();
17987     }
17988   }
17989 #pragma omp target teams distribute parallel for simd
17990   for (int i = 0; i < 10; ++i) {
17991 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17992     {
17993       bar();
17994     }
17995   }
17996 #pragma omp target teams distribute parallel for simd
17997   for (int i = 0; i < 10; ++i) {
17998 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17999     {
18000       bar();
18001     }
18002   }
18003 #pragma omp target teams distribute parallel for simd
18004   for (int i = 0; i < 10; ++i) {
18005 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18006     {
18007       bar();
18008     }
18009   }
18010 #pragma omp target teams distribute parallel for simd
18011   for (int i = 0; i < 10; ++i) {
18012 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18013     {
18014 #pragma omp single
18015       {
18016         bar();
18017       }
18018     }
18019   }
18020 #pragma omp target teams distribute parallel for simd
18021   for (int i = 0; i < 10; ++i) {
18022 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18023     for (int i = 0; i < 10; ++i)
18024       ;
18025   }
18026 #pragma omp target teams distribute parallel for simd
18027   for (int i = 0; i < 10; ++i) {
18028 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18029     for (int i = 0; i < 10; ++i)
18030       ;
18031   }
18032 #pragma omp target teams distribute parallel for simd
18033   for (int i = 0; i < 10; ++i) {
18034 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18035     {
18036       bar();
18037     }
18038   }
18039 #pragma omp target teams distribute parallel for simd
18040   for (int i = 0; i < 10; ++i) {
18041 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18042     {
18043       bar();
18044     }
18045   }
18046 #pragma omp target teams distribute parallel for simd
18047   for (int i = 0; i < 10; ++i) {
18048 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18049     bar();
18050   }
18051 #pragma omp target teams distribute parallel for simd
18052   for (int i = 0; i < 10; ++i) {
18053 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18054     bar();
18055   }
18056 #pragma omp target teams distribute parallel for simd
18057   for (int i = 0; i < 10; ++i) {
18058 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
18059     bar();
18060   }
18061 #pragma omp target teams distribute parallel for simd
18062   for (int i = 0; i < 10; ++i) {
18063 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18064     bar();
18065   }
18066 #pragma omp target teams distribute parallel for simd
18067   for (int i = 0; i < 10; ++i) {
18068 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18069     bar();
18070   }
18071 #pragma omp target teams distribute parallel for simd
18072   for (int i = 0; i < 10; ++i) {
18073 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18074     bar();
18075   }
18076 #pragma omp target teams distribute parallel for simd
18077   for (int i = 0; i < 10; ++i) {
18078 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
18079     ++a;
18080   }
18081 #pragma omp target teams distribute parallel for simd
18082   for (int i = 0; i < 10; ++i) {
18083 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18084     ++a;
18085   }
18086 #pragma omp target teams distribute parallel for simd
18087   for (int i = 0; i < 10; ++i) {
18088 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18089     ++a;
18090   }
18091 #pragma omp target teams distribute parallel for simd
18092   for (int i = 0; i < 10; ++i) {
18093 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18094     for (int i = 0; i < 10; ++i)
18095       ;
18096   }
18097 #pragma omp target teams distribute parallel for simd
18098   for (int i = 0; i < 10; ++i) {
18099 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18100     ++a;
18101   }
18102 #pragma omp target teams distribute parallel for simd
18103   for (int i = 0; i < 10; ++i) {
18104 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18105     ++a;
18106   }
18107 #pragma omp target teams distribute parallel for simd
18108   for (int i = 0; i < 10; ++i) {
18109 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18110     ++a;
18111   }
18112 #pragma omp target teams distribute parallel for simd
18113   for (int i = 0; i < 10; ++i) {
18114 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18115     ++a;
18116   }
18117 #pragma omp target teams distribute parallel for simd
18118   for (int i = 0; i < 10; ++i) {
18119 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18120     for (int i = 0; i < 10; ++i)
18121       ++a;
18122   }
18123 #pragma omp target teams distribute parallel for simd
18124   for (int i = 0; i < 10; ++i) {
18125 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18126     for (int i = 0; i < 10; ++i)
18127       ++a;
18128   }
18129 #pragma omp target teams distribute parallel for simd
18130   for (int i = 0; i < 10; ++i) {
18131 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18132     for (int i = 0; i < 10; ++i)
18133       ++a;
18134   }
18135 #pragma omp target teams distribute parallel for simd
18136   for (int i = 0; i < 10; ++i) {
18137 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18138     for (int i = 0; i < 10; ++i)
18139       ++a;
18140   }
18141 #pragma omp target teams distribute parallel for simd
18142   for (int i = 0; i < 10; ++i) {
18143 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18144     for (int i = 0; i < 10; ++i)
18145       ++a;
18146   }
18147 #pragma omp target teams distribute parallel for simd
18148   for (int i = 0; i < 10; ++i) {
18149 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18150     for (int i = 0; i < 10; ++i)
18151       ;
18152   }
18153 #pragma omp target teams distribute parallel for simd
18154   for (int i = 0; i < 10; ++i) {
18155 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18156     a++;
18157   }
18158 #pragma omp target teams distribute parallel for simd
18159   for (int i = 0; i < 10; ++i) {
18160 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18161     for (int i = 0; i < 10; ++i)
18162       ;
18163   }
18164 #pragma omp target teams distribute parallel for simd
18165   for (int i = 0; i < 10; ++i) {
18166 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18167     for (int i = 0; i < 10; ++i)
18168       ;
18169   }
18170 #pragma omp target teams distribute parallel for simd
18171   for (int i = 0; i < 10; ++i) {
18172 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18173     for (int i = 0; i < 10; ++i)
18174       ;
18175   }
18176 #pragma omp target teams distribute parallel for simd
18177   for (int i = 0; i < 10; ++i) {
18178 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18179     for (int i = 0; i < 10; ++i)
18180       ;
18181   }
18182 
18183 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
18184 #pragma omp target teams distribute simd // OK
18185   for (int i = 0; i < 10; ++i)
18186     ;
18187 #pragma omp target teams distribute simd
18188   for (int i = 0; i < 10; ++i) {
18189 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18190     for (int i = 0; i < 10; ++i)
18191       ;
18192   }
18193 #pragma omp target teams distribute simd
18194   for (int i = 0; i < 10; ++i) {
18195 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18196     for (int i = 0; i < 10; ++i)
18197       ;
18198   }
18199 #pragma omp target teams distribute simd
18200   for (int i = 0; i < 10; ++i) {
18201 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18202     for (int i = 0; i < 10; ++i)
18203       ;
18204   }
18205 #pragma omp target teams distribute simd
18206   for (int i = 0; i < 10; ++i) {
18207 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
18208     for (int i = 0; i < 10; ++i)
18209       ;
18210   }
18211 #pragma omp target teams distribute simd
18212   for (int i = 0; i < 10; ++i) {
18213 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18214     for (int i = 0; i < 10; ++i)
18215       ;
18216   }
18217 #pragma omp target teams distribute simd
18218   for (int i = 0; i < 10; ++i) {
18219 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18220     for (int i = 0; i < 10; ++i)
18221       ;
18222   }
18223 #pragma omp target teams distribute simd
18224   for (int i = 0; i < 10; ++i) {
18225 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18226     {
18227       bar();
18228     }
18229   }
18230 #pragma omp target teams distribute simd
18231   for (int i = 0; i < 10; ++i) {
18232 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18233     {
18234       bar();
18235     }
18236   }
18237 #pragma omp target teams distribute simd
18238   for (int i = 0; i < 10; ++i) {
18239 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18240     {
18241       bar();
18242     }
18243   }
18244 #pragma omp target teams distribute simd
18245   for (int i = 0; i < 10; ++i) {
18246 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18247     {
18248       bar();
18249     }
18250   }
18251 #pragma omp target teams distribute simd
18252   for (int i = 0; i < 10; ++i) {
18253 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18254     {
18255       bar();
18256     }
18257   }
18258 #pragma omp target teams distribute simd
18259   for (int i = 0; i < 10; ++i) {
18260 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18261     {
18262 #pragma omp single
18263       {
18264         bar();
18265       }
18266     }
18267   }
18268 #pragma omp target teams distribute simd
18269   for (int i = 0; i < 10; ++i) {
18270 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18271     for (int i = 0; i < 10; ++i)
18272       ;
18273   }
18274 #pragma omp target teams distribute simd
18275   for (int i = 0; i < 10; ++i) {
18276 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18277     for (int i = 0; i < 10; ++i)
18278       ;
18279   }
18280 #pragma omp target teams distribute simd
18281   for (int i = 0; i < 10; ++i) {
18282 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18283     {
18284       bar();
18285     }
18286   }
18287 #pragma omp target teams distribute simd
18288   for (int i = 0; i < 10; ++i) {
18289 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18290     {
18291       bar();
18292     }
18293   }
18294 #pragma omp target teams distribute simd
18295   for (int i = 0; i < 10; ++i) {
18296 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18297     bar();
18298   }
18299 #pragma omp target teams distribute simd
18300   for (int i = 0; i < 10; ++i) {
18301 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18302     bar();
18303   }
18304 #pragma omp target teams distribute simd
18305   for (int i = 0; i < 10; ++i) {
18306 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
18307     bar();
18308   }
18309 #pragma omp target teams distribute simd
18310   for (int i = 0; i < 10; ++i) {
18311 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18312     bar();
18313   }
18314 #pragma omp target teams distribute simd
18315   for (int i = 0; i < 10; ++i) {
18316 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18317     bar();
18318   }
18319 #pragma omp target teams distribute simd
18320   for (int i = 0; i < 10; ++i) {
18321 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18322     bar();
18323   }
18324 #pragma omp target teams distribute simd
18325   for (int i = 0; i < 10; ++i) {
18326 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
18327     ++a;
18328   }
18329 #pragma omp target teams distribute simd
18330   for (int i = 0; i < 10; ++i) {
18331 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18332     ++a;
18333   }
18334 #pragma omp target teams distribute simd
18335   for (int i = 0; i < 10; ++i) {
18336 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18337     ++a;
18338   }
18339 #pragma omp target teams distribute simd
18340   for (int i = 0; i < 10; ++i) {
18341 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18342     for (int i = 0; i < 10; ++i)
18343       ;
18344   }
18345 #pragma omp target teams distribute simd
18346   for (int i = 0; i < 10; ++i) {
18347 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18348     ++a;
18349   }
18350 #pragma omp target teams distribute simd
18351   for (int i = 0; i < 10; ++i) {
18352 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18353     ++a;
18354   }
18355 #pragma omp target teams distribute simd
18356   for (int i = 0; i < 10; ++i) {
18357 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18358     ++a;
18359   }
18360 #pragma omp target teams distribute simd
18361   for (int i = 0; i < 10; ++i) {
18362 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18363     ++a;
18364   }
18365 #pragma omp target teams distribute simd
18366   for (int i = 0; i < 10; ++i) {
18367 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18368     for (int i = 0; i < 10; ++i)
18369       ++a;
18370   }
18371 #pragma omp target teams distribute simd
18372   for (int i = 0; i < 10; ++i) {
18373 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18374     for (int i = 0; i < 10; ++i)
18375       ++a;
18376   }
18377 #pragma omp target teams distribute simd
18378   for (int i = 0; i < 10; ++i) {
18379 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18380     for (int i = 0; i < 10; ++i)
18381       ++a;
18382   }
18383 #pragma omp target teams distribute simd
18384   for (int i = 0; i < 10; ++i) {
18385 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18386     for (int i = 0; i < 10; ++i)
18387       ++a;
18388   }
18389 #pragma omp target teams distribute simd
18390   for (int i = 0; i < 10; ++i) {
18391 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18392     for (int i = 0; i < 10; ++i)
18393       ++a;
18394   }
18395 #pragma omp target teams distribute simd
18396   for (int i = 0; i < 10; ++i) {
18397 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18398     for (int i = 0; i < 10; ++i)
18399       ;
18400   }
18401 #pragma omp target teams distribute simd
18402   for (int i = 0; i < 10; ++i) {
18403 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18404     a++;
18405   }
18406 #pragma omp target teams distribute simd
18407   for (int i = 0; i < 10; ++i) {
18408 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18409     for (int i = 0; i < 10; ++i)
18410       ;
18411   }
18412 #pragma omp target teams distribute simd
18413   for (int i = 0; i < 10; ++i) {
18414 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18415     for (int i = 0; i < 10; ++i)
18416       ;
18417   }
18418 #pragma omp target teams distribute simd
18419   for (int i = 0; i < 10; ++i) {
18420 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18421     for (int i = 0; i < 10; ++i)
18422       ;
18423   }
18424 #pragma omp target teams distribute simd
18425   for (int i = 0; i < 10; ++i) {
18426 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18427     for (int i = 0; i < 10; ++i)
18428       ;
18429   }
18430 
18431   return foo<int>();
18432 }
18433 
18434