1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp45,omp45warn %s
2 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -verify=expected,omp50 %s
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 -Wno-openmp %s
4 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 -Wno-source-uses-openmp %s
5 
6 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45,omp45warn %s
7 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50 %s
8 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
9 
10 void bar();
11 
12 template <class T>
13 void foo() {
14   T a = T();
15 // PARALLEL DIRECTIVE
16 #pragma omp parallel
17 #pragma omp for
18   for (int i = 0; i < 10; ++i)
19     ;
20 #pragma omp parallel
21 #pragma omp simd
22   for (int i = 0; i < 10; ++i)
23     ;
24 #pragma omp parallel
25 #pragma omp for simd
26   for (int i = 0; i < 10; ++i)
27     ;
28 #pragma omp parallel
29 #pragma omp sections
30   {
31     bar();
32   }
33 #pragma omp parallel
34 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
35   {
36     bar();
37   }
38 #pragma omp parallel
39 #pragma omp single
40   bar();
41 
42 #pragma omp parallel
43 #pragma omp master
44   {
45     bar();
46   }
47 #pragma omp parallel
48 #pragma omp critical
49   {
50     bar();
51   }
52 #pragma omp parallel
53 #pragma omp parallel for
54   for (int i = 0; i < 10; ++i)
55     ;
56 #pragma omp parallel
57 #pragma omp parallel for simd
58   for (int i = 0; i < 10; ++i)
59     ;
60 #pragma omp parallel
61 #pragma omp parallel sections
62   {
63     bar();
64   }
65 #pragma omp parallel
66 #pragma omp parallel master
67   {
68     bar();
69   }
70 #pragma omp parallel
71 #pragma omp task
72   {
73     bar();
74   }
75 #pragma omp parallel
76   {
77 #pragma omp taskyield
78     bar();
79   }
80 #pragma omp parallel
81   {
82 #pragma omp barrier
83     bar();
84   }
85 #pragma omp parallel
86   {
87 #pragma omp taskwait
88     bar();
89   }
90 #pragma omp parallel
91   {
92 #pragma omp flush
93     bar();
94   }
95 #pragma omp parallel
96   {
97 #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?}}
98     bar();
99   }
100 #pragma omp parallel
101   {
102 #pragma omp atomic
103     ++a;
104   }
105 #pragma omp parallel
106   {
107 #pragma omp target
108     ++a;
109   }
110 #pragma omp parallel
111   {
112 #pragma omp target parallel
113     ++a;
114   }
115 #pragma omp parallel
116   {
117 #pragma omp target parallel for
118   for (int i = 0; i < 10; ++i)
119     ;
120   }
121 #pragma omp parallel
122   {
123 #pragma omp target enter data map(to: a)
124     ++a;
125   }
126 #pragma omp parallel
127   {
128 #pragma omp target exit data map(from: a)
129     ++a;
130   }
131 #pragma omp parallel
132   {
133 #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?}}
134     ++a;
135   }
136 #pragma omp parallel
137   {
138 #pragma omp taskloop
139   for (int i = 0; i < 10; ++i)
140     ++a;
141   }
142 #pragma omp parallel
143   {
144 #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?}}
145     for (int i = 0; i < 10; ++i)
146       ;
147   }
148 #pragma omp parallel
149   {
150 #pragma omp target update to(a)
151   }
152 #pragma omp parallel
153   {
154 #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?}}
155     for (int i = 0; i < 10; ++i)
156       ;
157   }
158 #pragma omp parallel
159   {
160 #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?}}
161     for (int i = 0; i < 10; ++i)
162       ;
163   }
164 #pragma omp parallel
165   {
166 #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?}}
167     for (int i = 0; i < 10; ++i)
168       ;
169   }
170 #pragma omp parallel
171   {
172 #pragma omp target simd // OK
173     for (int i = 0; i < 10; ++i)
174       ;
175   }
176 #pragma omp parallel
177   {
178 #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?}}
179     for (int i = 0; i < 10; ++i)
180       ;
181   }
182 #pragma omp parallel
183   {
184 #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?}}
185     for (int i = 0; i < 10; ++i)
186       ;
187   }
188 #pragma omp parallel
189   {
190 #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?}}
191     for (int i = 0; i < 10; ++i)
192       ;
193   }
194 #pragma omp parallel
195   {
196 #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?}}
197     for (int i = 0; i < 10; ++i)
198       ;
199   }
200 #pragma omp parallel
201   {
202 #pragma omp target teams // OK
203     ++a;
204   }
205 #pragma omp parallel
206   {
207 #pragma omp target teams distribute // OK
208     for (int i = 0; i < 10; ++i)
209       ;
210   }
211 #pragma omp parallel
212   {
213 #pragma omp target teams distribute parallel for // OK
214     for (int i = 0; i < 10; ++i)
215       ;
216   }
217 #pragma omp parallel
218   {
219 #pragma omp target teams distribute parallel for simd // OK
220     for (int i = 0; i < 10; ++i)
221       ;
222   }
223 #pragma omp parallel
224   {
225 #pragma omp target teams distribute simd // OK
226     for (int i = 0; i < 10; ++i)
227       ;
228   }
229 
230 // SIMD DIRECTIVE
231 #pragma omp simd
232   for (int i = 0; i < 10; ++i) {
233 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
234     for (int i = 0; i < 10; ++i)
235       ;
236   }
237 #pragma omp simd
238   for (int i = 0; i < 10; ++i) {
239 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
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 for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
246     for (int i = 0; i < 10; ++i)
247       ;
248   }
249 #pragma omp simd
250   for (int i = 0; i < 10; ++i) {
251 #pragma omp parallel // 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 sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
258     {
259       bar();
260     }
261   }
262 #pragma omp simd
263   for (int i = 0; i < 10; ++i) {
264 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
265     {
266       bar();
267     }
268   }
269 #pragma omp simd
270   for (int i = 0; i < 10; ++i) {
271 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
272     {
273       bar();
274     }
275   }
276 #pragma omp simd
277   for (int i = 0; i < 10; ++i) {
278 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
279     {
280       bar();
281     }
282   }
283 #pragma omp simd
284   for (int i = 0; i < 10; ++i) {
285 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
286     {
287       bar();
288     }
289   }
290 #pragma omp simd
291   for (int i = 0; i < 10; ++i) {
292 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
293     for (int i = 0; i < 10; ++i)
294       ;
295   }
296 #pragma omp simd
297   for (int i = 0; i < 10; ++i) {
298 #pragma omp parallel for simd // 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 sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
305     {
306       bar();
307     }
308   }
309 #pragma omp simd
310   for (int i = 0; i < 10; ++i) {
311 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
312     {
313       bar();
314     }
315   }
316 #pragma omp simd
317   for (int i = 0; i < 10; ++i) {
318 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
319     {
320       bar();
321     }
322   }
323 #pragma omp simd
324   for (int i = 0; i < 10; ++i) {
325 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
326     bar();
327   }
328 #pragma omp simd
329   for (int i = 0; i < 10; ++i) {
330 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
331     bar();
332   }
333 #pragma omp simd
334   for (int i = 0; i < 10; ++i) {
335 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
336     bar();
337   }
338 #pragma omp simd
339   for (int i = 0; i < 10; ++i) {
340 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
341     bar();
342   }
343 #pragma omp simd
344   for (int i = 0; i < 10; ++i) {
345 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
346     bar();
347   }
348 #pragma omp simd
349   for (int i = 0; i < 10; ++i) {
350 #pragma omp ordered simd // OK
351     bar();
352   }
353 #pragma omp simd
354   for (int i = 0; i < 10; ++i) {
355 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
356     bar();
357   }
358 #pragma omp simd
359   for (int i = 0; i < 10; ++i) {
360 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
361     ++a;
362   }
363 #pragma omp simd
364   for (int i = 0; i < 10; ++i) {
365 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
366     ++a;
367   }
368 #pragma omp simd
369   for (int i = 0; i < 10; ++i) {
370 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
371     ++a;
372   }
373 #pragma omp simd
374   for (int i = 0; i < 10; ++i) {
375 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
376     for (int i = 0; i < 10; ++i)
377       ;
378   }
379 #pragma omp simd
380   for (int i = 0; i < 10; ++i) {
381 #pragma omp target enter data map(to: a) // 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 exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
387     ++a;
388   }
389 #pragma omp simd
390   for (int i = 0; i < 10; ++i) {
391 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
392     ++a;
393   }
394 #pragma omp simd
395   for (int i = 0; i < 10; ++i) {
396 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
397   for (int i = 0; i < 10; ++i)
398     ++a;
399   }
400 #pragma omp simd
401   for (int i = 0; i < 10; ++i) {
402 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
403     for (int j = 0; j < 10; ++j)
404       ;
405   }
406 #pragma omp simd
407   for (int i = 0; i < 10; ++i) {
408 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
409   }
410 #pragma omp simd
411   for (int i = 0; i < 10; ++i) {
412 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
413     for (int j = 0; j < 10; ++j)
414       ;
415   }
416 #pragma omp simd
417   for (int i = 0; i < 10; ++i) {
418 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
419     for (int j = 0; j < 10; ++j)
420       ;
421   }
422 #pragma omp simd
423   for (int i = 0; i < 10; ++i) {
424 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
425     for (int j = 0; j < 10; ++j)
426       ;
427   }
428 #pragma omp simd
429   for (int i = 0; i < 10; ++i) {
430 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
431     for (int j = 0; j < 10; ++j)
432       ;
433   }
434 #pragma omp simd
435   for (int i = 0; i < 10; ++i) {
436 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
437     for (int j = 0; j < 10; ++j)
438       ;
439   }
440 #pragma omp simd
441   for (int i = 0; i < 10; ++i) {
442 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
443     for (int j = 0; j < 10; ++j)
444       ;
445   }
446 #pragma omp simd
447   for (int i = 0; i < 10; ++i) {
448 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
449     for (int j = 0; j < 10; ++j)
450       ;
451   }
452 #pragma omp simd
453   for (int i = 0; i < 10; ++i) {
454 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
455     for (int j = 0; j < 10; ++j)
456       ;
457   }
458 #pragma omp simd
459   for (int i = 0; i < 10; ++i) {
460 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
461     ++a;
462   }
463 #pragma omp simd
464   for (int i = 0; i < 10; ++i) {
465 #pragma omp target teams distribute // 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 distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
472     for (int j = 0; j < 10; ++j)
473       ;
474   }
475 #pragma omp simd
476   for (int i = 0; i < 10; ++i) {
477 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
478     for (int j = 0; j < 10; ++j)
479       ;
480   }
481 #pragma omp simd
482   for (int i = 0; i < 10; ++i) {
483 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
484     for (int j = 0; j < 10; ++j)
485       ;
486   }
487 
488 // FOR DIRECTIVE
489 #pragma omp for
490   for (int i = 0; i < 10; ++i) {
491 #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?}}
492     for (int i = 0; i < 10; ++i)
493       ;
494   }
495 #pragma omp for
496   for (int i = 0; i < 10; ++i) {
497 #pragma omp simd
498     for (int i = 0; i < 10; ++i)
499       ;
500   }
501 #pragma omp for
502   for (int i = 0; i < 10; ++i) {
503 #pragma omp 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?}}
504     for (int i = 0; i < 10; ++i)
505       ;
506   }
507 #pragma omp for
508   for (int i = 0; i < 10; ++i) {
509 #pragma omp parallel
510     for (int i = 0; i < 10; ++i)
511       ;
512   }
513 #pragma omp for
514   for (int i = 0; i < 10; ++i) {
515 #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?}}
516     {
517       bar();
518     }
519   }
520 #pragma omp for
521   for (int i = 0; i < 10; ++i) {
522 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
523     {
524       bar();
525     }
526   }
527 #pragma omp for
528   for (int i = 0; i < 10; ++i) {
529 #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?}}
530     {
531       bar();
532     }
533   }
534 
535 #pragma omp for
536   for (int i = 0; i < 10; ++i) {
537 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
538     {
539       bar();
540     }
541   }
542 #pragma omp for
543   for (int i = 0; i < 10; ++i) {
544 #pragma omp critical
545     {
546       bar();
547     }
548   }
549 #pragma omp for
550   for (int i = 0; i < 10; ++i) {
551 #pragma omp parallel
552     {
553 #pragma omp single // OK
554       {
555         bar();
556       }
557 #pragma omp for // OK
558       for (int i = 0; i < 10; ++i)
559         ;
560 #pragma omp sections // OK
561       {
562         bar();
563       }
564     }
565   }
566 #pragma omp for
567   for (int i = 0; i < 10; ++i) {
568 #pragma omp parallel for
569     for (int i = 0; i < 10; ++i)
570       ;
571   }
572 #pragma omp for
573   for (int i = 0; i < 10; ++i) {
574 #pragma omp parallel for simd
575     for (int i = 0; i < 10; ++i)
576       ;
577   }
578 #pragma omp for
579   for (int i = 0; i < 10; ++i) {
580 #pragma omp parallel master
581     {
582       bar();
583     }
584   }
585 #pragma omp for
586   for (int i = 0; i < 10; ++i) {
587 #pragma omp parallel sections
588     {
589       bar();
590     }
591   }
592 #pragma omp for
593   for (int i = 0; i < 10; ++i) {
594 #pragma omp task
595     {
596       bar();
597     }
598   }
599 #pragma omp for
600   for (int i = 0; i < 10; ++i) {
601 #pragma omp taskyield
602     bar();
603   }
604 #pragma omp for
605   for (int i = 0; i < 10; ++i) {
606 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
607     bar();
608   }
609 #pragma omp for
610   for (int i = 0; i < 10; ++i) {
611 #pragma omp taskwait
612     bar();
613   }
614 #pragma omp for
615   for (int i = 0; i < 10; ++i) {
616 #pragma omp flush
617     bar();
618   }
619 #pragma omp for
620   for (int i = 0; i < 10; ++i) {
621 #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?}}
622     bar();
623   }
624 #pragma omp for ordered
625   for (int i = 0; i < 10; ++i) {
626 #pragma omp ordered // OK
627     bar();
628   }
629 #pragma omp for
630   for (int i = 0; i < 10; ++i) {
631 #pragma omp atomic
632     ++a;
633   }
634 #pragma omp for
635   for (int i = 0; i < 10; ++i) {
636 #pragma omp target
637     ++a;
638   }
639 #pragma omp for
640   for (int i = 0; i < 10; ++i) {
641 #pragma omp target parallel
642     ++a;
643   }
644 #pragma omp for
645   for (int i = 0; i < 10; ++i) {
646 #pragma omp target parallel for
647     for (int i = 0; i < 10; ++i)
648       ;
649   }
650 #pragma omp for
651   for (int i = 0; i < 10; ++i) {
652 #pragma omp target enter data map(to: a)
653     ++a;
654   }
655 #pragma omp for
656   for (int i = 0; i < 10; ++i) {
657 #pragma omp target exit data map(from: a)
658     ++a;
659   }
660 #pragma omp for
661   for (int i = 0; i < 10; ++i) {
662 #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?}}
663     ++a;
664   }
665 #pragma omp for
666   for (int i = 0; i < 10; ++i) {
667 #pragma omp taskloop
668   for (int i = 0; i < 10; ++i)
669     ++a;
670   }
671 #pragma omp for
672   for (int i = 0; i < 10; ++i) {
673 #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?}}
674     for (int j = 0; j < 10; ++j)
675       ;
676   }
677 #pragma omp for
678   for (int i = 0; i < 10; ++i) {
679 #pragma omp target update to(a)
680   }
681 #pragma omp for
682   for (int i = 0; i < 10; ++i) {
683 #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?}}
684     for (int j = 0; j < 10; ++j)
685       ;
686   }
687 #pragma omp for
688   for (int i = 0; i < 10; ++i) {
689 #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?}}
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 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?}}
696     for (int j = 0; j < 10; ++j)
697       ;
698   }
699 #pragma omp for
700   for (int i = 0; i < 10; ++i) {
701 #pragma omp target simd // OK
702     for (int j = 0; j < 10; ++j)
703       ;
704   }
705 #pragma omp for
706   for (int i = 0; i < 10; ++i) {
707 #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?}}
708     for (int j = 0; j < 10; ++j)
709       ;
710   }
711 #pragma omp for
712   for (int i = 0; i < 10; ++i) {
713 #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?}}
714     for (int j = 0; j < 10; ++j)
715       ;
716   }
717 #pragma omp for
718   for (int i = 0; i < 10; ++i) {
719 #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?}}
720     for (int j = 0; j < 10; ++j)
721       ;
722   }
723 #pragma omp for
724   for (int i = 0; i < 10; ++i) {
725 #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?}}
726     for (int j = 0; j < 10; ++j)
727       ;
728   }
729 #pragma omp for
730   for (int i = 0; i < 10; ++i) {
731 #pragma omp target teams // OK
732     ++a;
733   }
734 #pragma omp for
735   for (int i = 0; i < 10; ++i) {
736 #pragma omp target teams distribute // OK
737     for (int j = 0; j < 10; ++j)
738       ;
739   }
740 #pragma omp for
741   for (int i = 0; i < 10; ++i) {
742 #pragma omp target teams distribute parallel for // OK
743     for (int j = 0; j < 10; ++j)
744       ;
745   }
746 #pragma omp for
747   for (int i = 0; i < 10; ++i) {
748 #pragma omp target teams distribute parallel for simd // OK
749     for (int j = 0; j < 10; ++j)
750       ;
751   }
752 #pragma omp for
753   for (int i = 0; i < 10; ++i) {
754 #pragma omp target teams distribute simd // OK
755     for (int j = 0; j < 10; ++j)
756       ;
757   }
758 
759 // FOR SIMD DIRECTIVE
760 #pragma omp for simd
761   for (int i = 0; i < 10; ++i) {
762 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
763     for (int i = 0; i < 10; ++i)
764       ;
765   }
766 #pragma omp for simd
767   for (int i = 0; i < 10; ++i) {
768 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
769     for (int i = 0; i < 10; ++i)
770       ;
771   }
772 #pragma omp for simd
773   for (int i = 0; i < 10; ++i) {
774 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
775     for (int i = 0; i < 10; ++i)
776       ;
777   }
778 #pragma omp for simd
779   for (int i = 0; i < 10; ++i) {
780 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
781     for (int i = 0; i < 10; ++i)
782       ;
783   }
784 #pragma omp for simd
785   for (int i = 0; i < 10; ++i) {
786 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
787     {
788       bar();
789     }
790   }
791 #pragma omp for simd
792   for (int i = 0; i < 10; ++i) {
793 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
794     {
795       bar();
796     }
797   }
798 #pragma omp for simd
799   for (int i = 0; i < 10; ++i) {
800 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
801     {
802       bar();
803     }
804   }
805 #pragma omp for simd
806   for (int i = 0; i < 10; ++i) {
807 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
808     {
809       bar();
810     }
811   }
812 #pragma omp for simd
813   for (int i = 0; i < 10; ++i) {
814 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
815     {
816       bar();
817     }
818   }
819 #pragma omp for simd
820   for (int i = 0; i < 10; ++i) {
821 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
822     for (int i = 0; i < 10; ++i)
823       ;
824   }
825 #pragma omp for simd
826   for (int i = 0; i < 10; ++i) {
827 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
828     for (int i = 0; i < 10; ++i)
829       ;
830   }
831 #pragma omp for simd
832   for (int i = 0; i < 10; ++i) {
833 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
834     {
835       bar();
836     }
837   }
838 #pragma omp for simd
839   for (int i = 0; i < 10; ++i) {
840 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
841     {
842       bar();
843     }
844   }
845 #pragma omp for simd
846   for (int i = 0; i < 10; ++i) {
847 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
848     {
849       bar();
850     }
851   }
852 #pragma omp for simd
853   for (int i = 0; i < 10; ++i) {
854 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
855     bar();
856   }
857 #pragma omp for simd
858   for (int i = 0; i < 10; ++i) {
859 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
860     bar();
861   }
862 #pragma omp for simd
863   for (int i = 0; i < 10; ++i) {
864 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
865     bar();
866   }
867 #pragma omp for simd
868   for (int i = 0; i < 10; ++i) {
869 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
870     bar();
871   }
872 #pragma omp for simd
873   for (int i = 0; i < 10; ++i) {
874 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
875     bar();
876   }
877 #pragma omp for simd
878   for (int i = 0; i < 10; ++i) {
879 #pragma omp ordered simd // OK
880     bar();
881   }
882 #pragma omp for simd
883   for (int i = 0; i < 10; ++i) {
884 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
885     bar();
886   }
887 #pragma omp for simd
888   for (int i = 0; i < 10; ++i) {
889 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
890     ++a;
891   }
892 #pragma omp for simd
893   for (int i = 0; i < 10; ++i) {
894 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
895     ++a;
896   }
897 #pragma omp for simd
898   for (int i = 0; i < 10; ++i) {
899 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
900     ++a;
901   }
902 #pragma omp for simd
903   for (int i = 0; i < 10; ++i) {
904 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
905     for (int i = 0; i < 10; ++i)
906       ;
907   }
908 #pragma omp for simd
909   for (int i = 0; i < 10; ++i) {
910 #pragma omp target enter data map(to: a) // expected-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 exit data map(from: a) // 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 teams // 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 taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
926   for (int i = 0; i < 10; ++i)
927     ++a;
928   }
929 #pragma omp for simd
930   for (int i = 0; i < 10; ++i) {
931 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
932     for (int j = 0; j < 10; ++j)
933       ;
934   }
935 #pragma omp for simd
936   for (int i = 0; i < 10; ++i) {
937 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
938     bar();
939   }
940 #pragma omp for simd
941   for (int i = 0; i < 10; ++i) {
942 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
943     for (int j = 0; j < 10; ++j)
944       ;
945   }
946 #pragma omp for simd
947   for (int i = 0; i < 10; ++i) {
948 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
949     for (int j = 0; j < 10; ++j)
950       ;
951   }
952 #pragma omp for simd
953   for (int i = 0; i < 10; ++i) {
954 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
955     for (int j = 0; j < 10; ++j)
956       ;
957   }
958 #pragma omp for simd
959   for (int i = 0; i < 10; ++i) {
960 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
961     for (int j = 0; j < 10; ++j)
962       ;
963   }
964 #pragma omp for simd
965   for (int i = 0; i < 10; ++i) {
966 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
967     for (int j = 0; j < 10; ++j)
968       ;
969   }
970 #pragma omp for simd
971   for (int i = 0; i < 10; ++i) {
972 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
973     for (int j = 0; j < 10; ++j)
974       ;
975   }
976 #pragma omp for simd
977   for (int i = 0; i < 10; ++i) {
978 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
979     for (int j = 0; j < 10; ++j)
980       ;
981   }
982 #pragma omp for simd
983   for (int i = 0; i < 10; ++i) {
984 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
985     for (int j = 0; j < 10; ++j)
986       ;
987   }
988 #pragma omp for simd
989   for (int i = 0; i < 10; ++i) {
990 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
991     a++;
992   }
993 #pragma omp for simd
994   for (int i = 0; i < 10; ++i) {
995 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
996     for (int j = 0; j < 10; ++j)
997       ;
998   }
999 #pragma omp for simd
1000   for (int i = 0; i < 10; ++i) {
1001 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1002     for (int j = 0; j < 10; ++j)
1003       ;
1004   }
1005 #pragma omp for simd
1006   for (int i = 0; i < 10; ++i) {
1007 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1008     for (int j = 0; j < 10; ++j)
1009       ;
1010   }
1011 #pragma omp for simd
1012   for (int i = 0; i < 10; ++i) {
1013 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1014     for (int j = 0; j < 10; ++j)
1015       ;
1016   }
1017 
1018 // SECTIONS DIRECTIVE
1019 #pragma omp sections
1020   {
1021 #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?}}
1022     for (int i = 0; i < 10; ++i)
1023       ;
1024   }
1025 #pragma omp sections
1026   {
1027 #pragma omp simd
1028     for (int i = 0; i < 10; ++i)
1029       ;
1030   }
1031 #pragma omp sections
1032   {
1033 #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?}}
1034     for (int i = 0; i < 10; ++i)
1035       ;
1036   }
1037 #pragma omp sections
1038   {
1039 #pragma omp parallel
1040     for (int i = 0; i < 10; ++i)
1041       ;
1042   }
1043 #pragma omp sections
1044   {
1045 #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?}}
1046     {
1047       bar();
1048     }
1049   }
1050 #pragma omp sections
1051   {
1052 #pragma omp section
1053     {
1054       bar();
1055     }
1056   }
1057 #pragma omp sections
1058   {
1059 #pragma omp parallel
1060     {
1061 #pragma omp single // OK
1062       {
1063         bar();
1064       }
1065 #pragma omp for // OK
1066       for (int i = 0; i < 10; ++i)
1067         ;
1068 #pragma omp sections // OK
1069       {
1070         bar();
1071       }
1072     }
1073   }
1074 #pragma omp sections
1075   {
1076 #pragma omp parallel master
1077     {
1078       bar();
1079     }
1080   }
1081 #pragma omp sections
1082   {
1083 #pragma omp parallel
1084     {
1085 #pragma omp master // OK
1086       {
1087         bar();
1088       }
1089 #pragma omp for // OK
1090       for (int i = 0; i < 10; ++i)
1091         ;
1092 #pragma omp master // OK
1093       {
1094         bar();
1095       }
1096     }
1097 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
1098     bar();
1099   }
1100 #pragma omp sections
1101   {
1102 #pragma omp parallel
1103     {
1104 #pragma omp critical(A) // OK
1105       {
1106         bar();
1107       }
1108 #pragma omp for // OK
1109       for (int i = 0; i < 10; ++i)
1110         ;
1111 #pragma omp critical // OK
1112       {
1113         bar();
1114       }
1115     }
1116 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
1117     bar();
1118   }
1119 #pragma omp sections
1120   {
1121 #pragma omp parallel for
1122     for (int i = 0; i < 10; ++i)
1123       ;
1124   }
1125 #pragma omp sections
1126   {
1127 #pragma omp parallel for simd
1128     for (int i = 0; i < 10; ++i)
1129       ;
1130   }
1131 #pragma omp sections
1132   {
1133 #pragma omp parallel sections
1134     {
1135       bar();
1136     }
1137   }
1138 #pragma omp sections
1139   {
1140 #pragma omp task
1141     {
1142       bar();
1143     }
1144   }
1145 #pragma omp sections
1146   {
1147 #pragma omp taskyield
1148   }
1149 #pragma omp sections
1150   {
1151 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1152   }
1153 #pragma omp sections
1154   {
1155 #pragma omp taskwait
1156   }
1157 #pragma omp sections
1158   {
1159 #pragma omp flush
1160   }
1161 #pragma omp sections
1162   {
1163 #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?}}
1164     bar();
1165   }
1166 #pragma omp sections
1167   {
1168 #pragma omp atomic
1169     ++a;
1170   }
1171 #pragma omp sections
1172   {
1173 #pragma omp target
1174     ++a;
1175   }
1176 #pragma omp sections
1177   {
1178 #pragma omp target parallel
1179     ++a;
1180   }
1181 #pragma omp sections
1182   {
1183 #pragma omp target parallel for
1184     for (int i = 0; i < 10; ++i)
1185       ;
1186   }
1187 #pragma omp sections
1188   {
1189 #pragma omp target enter data map(to: a)
1190   }
1191 #pragma omp sections
1192   {
1193 #pragma omp target exit data map(from: a)
1194   }
1195 #pragma omp sections
1196   {
1197 #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?}}
1198     ++a;
1199   }
1200 #pragma omp sections
1201   {
1202 #pragma omp taskloop
1203   for (int i = 0; i < 10; ++i)
1204     ++a;
1205   }
1206 #pragma omp sections
1207   {
1208 #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?}}
1209     for (int i = 0; i < 10; ++i)
1210       ;
1211   }
1212 #pragma omp sections
1213   {
1214 #pragma omp target update to(a)
1215   }
1216 #pragma omp sections
1217   {
1218 #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?}}
1219     for (int i = 0; i < 10; ++i)
1220       ;
1221   }
1222 #pragma omp sections
1223   {
1224 #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?}}
1225     for (int i = 0; i < 10; ++i)
1226       ;
1227   }
1228 #pragma omp sections
1229   {
1230 #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?}}
1231     for (int i = 0; i < 10; ++i)
1232       ;
1233   }
1234 #pragma omp sections
1235   {
1236 #pragma omp target simd // OK
1237     for (int i = 0; i < 10; ++i)
1238       ;
1239   }
1240 #pragma omp sections
1241   {
1242 #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?}}
1243     for (int i = 0; i < 10; ++i)
1244       ;
1245   }
1246 #pragma omp sections
1247   {
1248 #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?}}
1249     for (int i = 0; i < 10; ++i)
1250       ;
1251   }
1252 #pragma omp sections
1253   {
1254 #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?}}
1255     for (int i = 0; i < 10; ++i)
1256       ;
1257   }
1258 #pragma omp sections
1259   {
1260 #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?}}
1261     for (int i = 0; i < 10; ++i)
1262       ;
1263   }
1264 #pragma omp sections
1265   {
1266 #pragma omp target teams // OK
1267     ++a;
1268   }
1269 #pragma omp sections
1270   {
1271 #pragma omp target teams distribute // OK
1272     for (int i = 0; i < 10; ++i)
1273       ;
1274   }
1275 #pragma omp sections
1276   {
1277 #pragma omp target teams distribute parallel for // OK
1278     for (int i = 0; i < 10; ++i)
1279       ;
1280   }
1281 #pragma omp sections
1282   {
1283 #pragma omp target teams distribute parallel for simd // OK
1284     for (int i = 0; i < 10; ++i)
1285       ;
1286   }
1287 #pragma omp sections
1288   {
1289 #pragma omp target teams distribute simd // OK
1290     for (int i = 0; i < 10; ++i)
1291       ;
1292   }
1293 
1294 // SECTION DIRECTIVE
1295 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1296   {
1297     bar();
1298   }
1299 #pragma omp sections
1300   {
1301 #pragma omp section
1302     {
1303 #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?}}
1304       for (int i = 0; i < 10; ++i)
1305         ;
1306     }
1307   }
1308 #pragma omp sections
1309   {
1310 #pragma omp section
1311     {
1312 #pragma omp simd
1313       for (int i = 0; i < 10; ++i)
1314         ;
1315     }
1316   }
1317 #pragma omp sections
1318   {
1319 #pragma omp section
1320     {
1321 #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?}}
1322       for (int i = 0; i < 10; ++i)
1323         ;
1324     }
1325   }
1326 #pragma omp sections
1327   {
1328 #pragma omp section
1329     {
1330 #pragma omp parallel
1331       for (int i = 0; i < 10; ++i)
1332         ;
1333     }
1334   }
1335 #pragma omp sections
1336   {
1337 #pragma omp section
1338     {
1339 #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?}}
1340       {
1341         bar();
1342       }
1343     }
1344   }
1345 #pragma omp sections
1346   {
1347 #pragma omp section
1348     {
1349 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1350       {
1351         bar();
1352       }
1353     }
1354   }
1355 #pragma omp sections
1356   {
1357 #pragma omp section
1358     {
1359 #pragma omp parallel master
1360       bar();
1361 #pragma omp critical
1362       bar();
1363     }
1364   }
1365 #pragma omp sections
1366   {
1367 #pragma omp section
1368     {
1369 #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?}}
1370       bar();
1371 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1372       bar();
1373 #pragma omp critical
1374       bar();
1375     }
1376   }
1377 #pragma omp sections
1378   {
1379 #pragma omp section
1380     {
1381 #pragma omp parallel
1382       {
1383 #pragma omp single // OK
1384         {
1385           bar();
1386         }
1387 #pragma omp for // OK
1388         for (int i = 0; i < 10; ++i)
1389           ;
1390 #pragma omp for simd // OK
1391         for (int i = 0; i < 10; ++i)
1392           ;
1393 #pragma omp sections // OK
1394         {
1395           bar();
1396         }
1397       }
1398     }
1399   }
1400 #pragma omp sections
1401   {
1402 #pragma omp section
1403     {
1404 #pragma omp parallel for
1405       for (int i = 0; i < 10; ++i)
1406         ;
1407     }
1408   }
1409 #pragma omp sections
1410   {
1411 #pragma omp section
1412     {
1413 #pragma omp parallel for simd
1414       for (int i = 0; i < 10; ++i)
1415         ;
1416     }
1417   }
1418 #pragma omp sections
1419   {
1420 #pragma omp section
1421     {
1422 #pragma omp parallel sections
1423       {
1424         bar();
1425       }
1426     }
1427   }
1428 #pragma omp sections
1429   {
1430 #pragma omp section
1431     {
1432 #pragma omp task
1433       {
1434         bar();
1435       }
1436     }
1437   }
1438 #pragma omp sections
1439   {
1440 #pragma omp section
1441     {
1442 #pragma omp taskyield
1443       bar();
1444     }
1445   }
1446 #pragma omp sections
1447   {
1448 #pragma omp section
1449     {
1450 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1451       bar();
1452     }
1453   }
1454 #pragma omp sections
1455   {
1456 #pragma omp section
1457     {
1458 #pragma omp taskwait
1459       bar();
1460     }
1461   }
1462 #pragma omp sections
1463   {
1464 #pragma omp section
1465     {
1466 #pragma omp flush
1467       bar();
1468     }
1469   }
1470 #pragma omp sections
1471   {
1472 #pragma omp section
1473     {
1474 #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?}}
1475       bar();
1476     }
1477   }
1478 #pragma omp sections
1479   {
1480 #pragma omp section
1481 #pragma omp atomic
1482     ++a;
1483   }
1484 #pragma omp sections
1485   {
1486 #pragma omp section
1487 #pragma omp target
1488     ++a;
1489   }
1490 #pragma omp sections
1491   {
1492 #pragma omp section
1493 #pragma omp target parallel
1494     ++a;
1495   }
1496 #pragma omp sections
1497   {
1498 #pragma omp section
1499     {
1500 #pragma omp target parallel for
1501       for (int i = 0; i < 10; ++i)
1502         ;
1503     }
1504   }
1505 #pragma omp sections
1506   {
1507 #pragma omp section
1508     {
1509 #pragma omp target enter data map(to: a)
1510       ++a;
1511     }
1512   }
1513 #pragma omp sections
1514   {
1515 #pragma omp section
1516     {
1517 #pragma omp target exit data map(from: a)
1518       ++a;
1519     }
1520   }
1521 #pragma omp sections
1522   {
1523 #pragma omp section
1524 #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?}}
1525     ++a;
1526   }
1527 #pragma omp sections
1528   {
1529 #pragma omp section
1530 #pragma omp taskloop
1531   for (int i = 0; i < 10; ++i)
1532     ++a;
1533   }
1534 #pragma omp sections
1535   {
1536 #pragma omp section
1537 #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?}}
1538     for (int i = 0; i < 10; ++i)
1539       ;
1540   }
1541 #pragma omp sections
1542   {
1543 #pragma omp section
1544     {
1545       bar();
1546 #pragma omp target update to(a)
1547     }
1548   }
1549 #pragma omp sections
1550   {
1551 #pragma omp section
1552 #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?}}
1553     for (int i = 0; i < 10; ++i)
1554       ;
1555   }
1556 #pragma omp sections
1557   {
1558 #pragma omp section
1559 #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?}}
1560     for (int i = 0; i < 10; ++i)
1561       ;
1562   }
1563 #pragma omp sections
1564   {
1565 #pragma omp section
1566 #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?}}
1567     for (int i = 0; i < 10; ++i)
1568       ;
1569   }
1570 #pragma omp sections
1571   {
1572 #pragma omp section
1573 #pragma omp target simd // OK
1574     for (int i = 0; i < 10; ++i)
1575       ;
1576   }
1577 #pragma omp sections
1578   {
1579 #pragma omp section
1580 #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?}}
1581     for (int i = 0; i < 10; ++i)
1582       ;
1583   }
1584 #pragma omp sections
1585   {
1586 #pragma omp section
1587 #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?}}
1588     for (int i = 0; i < 10; ++i)
1589       ;
1590   }
1591 #pragma omp sections
1592   {
1593 #pragma omp section
1594 #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?}}
1595     for (int i = 0; i < 10; ++i)
1596       ;
1597   }
1598 #pragma omp sections
1599   {
1600 #pragma omp section
1601 #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?}}
1602     for (int i = 0; i < 10; ++i)
1603       ;
1604   }
1605 #pragma omp sections
1606   {
1607 #pragma omp section
1608 #pragma omp target teams // OK
1609     ++a;
1610   }
1611 #pragma omp sections
1612   {
1613 #pragma omp section
1614 #pragma omp target teams distribute // OK
1615     for (int i = 0; i < 10; ++i)
1616       ;
1617   }
1618 #pragma omp sections
1619   {
1620 #pragma omp section
1621 #pragma omp target teams distribute parallel for // OK
1622     for (int i = 0; i < 10; ++i)
1623       ;
1624   }
1625 #pragma omp sections
1626   {
1627 #pragma omp section
1628 #pragma omp target teams distribute parallel for simd // OK
1629     for (int i = 0; i < 10; ++i)
1630       ;
1631   }
1632 #pragma omp sections
1633   {
1634 #pragma omp section
1635 #pragma omp target teams distribute simd // OK
1636     for (int i = 0; i < 10; ++i)
1637       ;
1638   }
1639 
1640 // SINGLE DIRECTIVE
1641 #pragma omp single
1642   {
1643 #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?}}
1644     for (int i = 0; i < 10; ++i)
1645       ;
1646   }
1647 #pragma omp single
1648   {
1649 #pragma omp simd
1650     for (int i = 0; i < 10; ++i)
1651       ;
1652   }
1653 #pragma omp single
1654   {
1655 #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?}}
1656     for (int i = 0; i < 10; ++i)
1657       ;
1658   }
1659 #pragma omp single
1660   {
1661 #pragma omp parallel
1662     for (int i = 0; i < 10; ++i)
1663       ;
1664   }
1665 #pragma omp single
1666   {
1667 #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?}}
1668     {
1669       bar();
1670     }
1671   }
1672 #pragma omp single
1673   {
1674 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1675     {
1676       bar();
1677     }
1678   }
1679 #pragma omp single
1680   {
1681 #pragma omp parallel master
1682     {
1683       bar();
1684     }
1685   }
1686 #pragma omp single
1687   {
1688 #pragma omp critical
1689     {
1690       bar();
1691     }
1692   }
1693 #pragma omp single
1694   {
1695 #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?}}
1696     {
1697       bar();
1698     }
1699   }
1700 #pragma omp single
1701   {
1702 #pragma omp parallel
1703     {
1704 #pragma omp single // OK
1705       {
1706         bar();
1707       }
1708 #pragma omp for // OK
1709       for (int i = 0; i < 10; ++i)
1710         ;
1711 #pragma omp for simd // OK
1712       for (int i = 0; i < 10; ++i)
1713         ;
1714 #pragma omp sections // OK
1715       {
1716         bar();
1717       }
1718     }
1719   }
1720 #pragma omp single
1721   {
1722 #pragma omp parallel for
1723     for (int i = 0; i < 10; ++i)
1724       ;
1725   }
1726 #pragma omp single
1727   {
1728 #pragma omp parallel for simd
1729     for (int i = 0; i < 10; ++i)
1730       ;
1731   }
1732 #pragma omp single
1733   {
1734 #pragma omp parallel sections
1735     {
1736       bar();
1737     }
1738   }
1739 #pragma omp single
1740   {
1741 #pragma omp task
1742     {
1743       bar();
1744     }
1745   }
1746 #pragma omp single
1747   {
1748 #pragma omp taskyield
1749     bar();
1750   }
1751 #pragma omp single
1752   {
1753 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1754     bar();
1755   }
1756 #pragma omp single
1757   {
1758 #pragma omp taskwait
1759     bar();
1760   }
1761 #pragma omp single
1762   {
1763 #pragma omp flush
1764     bar();
1765   }
1766 #pragma omp single
1767   {
1768 #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?}}
1769     bar();
1770   }
1771 #pragma omp single
1772   {
1773 #pragma omp atomic
1774     ++a;
1775   }
1776 #pragma omp single
1777   {
1778 #pragma omp target
1779     ++a;
1780   }
1781 #pragma omp single
1782   {
1783 #pragma omp target parallel
1784     ++a;
1785   }
1786 #pragma omp single
1787   {
1788 #pragma omp target parallel for
1789     for (int i = 0; i < 10; ++i)
1790       ;
1791   }
1792 #pragma omp single
1793   {
1794 #pragma omp target enter data map(to: a)
1795     ++a;
1796   }
1797 #pragma omp single
1798   {
1799 #pragma omp target exit data map(from: a)
1800     ++a;
1801   }
1802 #pragma omp single
1803   {
1804 #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?}}
1805     ++a;
1806   }
1807 #pragma omp single
1808   {
1809 #pragma omp taskloop
1810   for (int i = 0; i < 10; ++i)
1811     ++a;
1812   }
1813 #pragma omp single
1814   {
1815 #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?}}
1816     for (int i = 0; i < 10; ++i)
1817       ;
1818   }
1819 #pragma omp single
1820   {
1821 #pragma omp target update to(a)
1822     bar();
1823   }
1824 #pragma omp single
1825   {
1826 #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?}}
1827     for (int i = 0; i < 10; ++i)
1828       ;
1829   }
1830 #pragma omp single
1831   {
1832 #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?}}
1833     for (int i = 0; i < 10; ++i)
1834       ;
1835   }
1836 #pragma omp single
1837   {
1838 #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?}}
1839     for (int i = 0; i < 10; ++i)
1840       ;
1841   }
1842 #pragma omp single
1843   {
1844 #pragma omp target simd // OK
1845     for (int i = 0; i < 10; ++i)
1846       ;
1847   }
1848 #pragma omp single
1849   {
1850 #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?}}
1851     for (int i = 0; i < 10; ++i)
1852       ;
1853   }
1854 #pragma omp single
1855   {
1856 #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?}}
1857     for (int i = 0; i < 10; ++i)
1858       ;
1859   }
1860 #pragma omp single
1861   {
1862 #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?}}
1863     for (int i = 0; i < 10; ++i)
1864       ;
1865   }
1866 #pragma omp single
1867   {
1868 #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?}}
1869     for (int i = 0; i < 10; ++i)
1870       ;
1871   }
1872 #pragma omp single
1873   {
1874 #pragma omp target teams // OK
1875     ++a;
1876   }
1877 #pragma omp single
1878   {
1879 #pragma omp target teams distribute // OK
1880     for (int i = 0; i < 10; ++i)
1881       ;
1882   }
1883 #pragma omp single
1884   {
1885 #pragma omp target teams distribute parallel for // OK
1886     for (int i = 0; i < 10; ++i)
1887       ;
1888   }
1889 #pragma omp single
1890   {
1891 #pragma omp target teams distribute parallel for simd // OK
1892     for (int i = 0; i < 10; ++i)
1893       ;
1894   }
1895 #pragma omp single
1896   {
1897 #pragma omp target teams distribute simd // OK
1898     for (int i = 0; i < 10; ++i)
1899       ;
1900   }
1901 
1902 // MASTER DIRECTIVE
1903 #pragma omp master
1904   {
1905 #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?}}
1906     for (int i = 0; i < 10; ++i)
1907       ;
1908   }
1909 #pragma omp master
1910   {
1911 #pragma omp simd
1912     for (int i = 0; i < 10; ++i)
1913       ;
1914   }
1915 #pragma omp master
1916   {
1917 #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?}}
1918     for (int i = 0; i < 10; ++i)
1919       ;
1920   }
1921 #pragma omp master
1922   {
1923 #pragma omp parallel
1924     for (int i = 0; i < 10; ++i)
1925       ;
1926   }
1927 #pragma omp master
1928   {
1929 #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?}}
1930     {
1931       bar();
1932     }
1933   }
1934 #pragma omp master
1935   {
1936 #pragma omp master // OK, though second 'master' is redundant
1937     {
1938       bar();
1939     }
1940   }
1941 #pragma omp master
1942   {
1943 #pragma omp critical
1944     {
1945       bar();
1946     }
1947   }
1948 #pragma omp master
1949   {
1950 #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?}}
1951     {
1952       bar();
1953     }
1954   }
1955 #pragma omp master
1956   {
1957 #pragma omp parallel
1958     {
1959 #pragma omp master // OK
1960       {
1961         bar();
1962       }
1963 #pragma omp for // OK
1964       for (int i = 0; i < 10; ++i)
1965         ;
1966 #pragma omp for simd // OK
1967       for (int i = 0; i < 10; ++i)
1968         ;
1969 #pragma omp sections // OK
1970       {
1971         bar();
1972       }
1973     }
1974   }
1975 #pragma omp master
1976   {
1977 #pragma omp parallel master // OK
1978       {
1979         bar();
1980       }
1981 #pragma omp parallel
1982     {
1983 #pragma omp for // OK
1984       for (int i = 0; i < 10; ++i)
1985         ;
1986 #pragma omp for simd // OK
1987       for (int i = 0; i < 10; ++i)
1988         ;
1989 #pragma omp sections // OK
1990       {
1991         bar();
1992       }
1993     }
1994   }
1995 #pragma omp master
1996   {
1997 #pragma omp parallel for
1998     for (int i = 0; i < 10; ++i)
1999       ;
2000   }
2001 #pragma omp master
2002   {
2003 #pragma omp parallel for simd
2004     for (int i = 0; i < 10; ++i)
2005       ;
2006   }
2007 #pragma omp master
2008   {
2009 #pragma omp parallel sections
2010     {
2011       bar();
2012     }
2013   }
2014 #pragma omp master
2015   {
2016 #pragma omp task
2017     {
2018       bar();
2019     }
2020   }
2021 #pragma omp master
2022   {
2023 #pragma omp taskyield
2024     bar();
2025   }
2026 #pragma omp master
2027   {
2028 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
2029     bar();
2030   }
2031 #pragma omp master
2032   {
2033 #pragma omp taskwait
2034     bar();
2035   }
2036 #pragma omp master
2037   {
2038 #pragma omp flush
2039     bar();
2040   }
2041 #pragma omp master
2042   {
2043 #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?}}
2044     bar();
2045   }
2046 #pragma omp master
2047   {
2048 #pragma omp atomic
2049     ++a;
2050   }
2051 #pragma omp master
2052   {
2053 #pragma omp target
2054     ++a;
2055   }
2056 #pragma omp master
2057   {
2058 #pragma omp target parallel
2059     ++a;
2060   }
2061 #pragma omp master
2062   {
2063 #pragma omp target parallel for
2064     for (int i = 0; i < 10; ++i)
2065       ;
2066   }
2067 #pragma omp master
2068   {
2069 #pragma omp target enter data map(to: a)
2070     ++a;
2071   }
2072 #pragma omp master
2073   {
2074 #pragma omp target exit data map(from: a)
2075     ++a;
2076   }
2077 #pragma omp master
2078   {
2079 #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?}}
2080     ++a;
2081   }
2082 #pragma omp master
2083   {
2084 #pragma omp taskloop
2085   for (int i = 0; i < 10; ++i)
2086     ++a;
2087   }
2088 #pragma omp master
2089   {
2090 #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?}}
2091     for (int i = 0; i < 10; ++i)
2092       ;
2093   }
2094 #pragma omp master
2095   {
2096 #pragma omp target update to(a)
2097     bar();
2098   }
2099 #pragma omp master
2100   {
2101 #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?}}
2102     for (int i = 0; i < 10; ++i)
2103       ;
2104   }
2105 #pragma omp master
2106   {
2107 #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?}}
2108     for (int i = 0; i < 10; ++i)
2109       ;
2110   }
2111 #pragma omp master
2112   {
2113 #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?}}
2114     for (int i = 0; i < 10; ++i)
2115       ;
2116   }
2117 #pragma omp master
2118   {
2119 #pragma omp target simd // OK
2120     for (int i = 0; i < 10; ++i)
2121       ;
2122   }
2123 #pragma omp master
2124   {
2125 #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?}}
2126     for (int i = 0; i < 10; ++i)
2127       ;
2128   }
2129 #pragma omp master
2130   {
2131 #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?}}
2132     for (int i = 0; i < 10; ++i)
2133       ;
2134   }
2135 #pragma omp master
2136   {
2137 #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?}}
2138     for (int i = 0; i < 10; ++i)
2139       ;
2140   }
2141 #pragma omp master
2142   {
2143 #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?}}
2144     for (int i = 0; i < 10; ++i)
2145       ;
2146   }
2147 #pragma omp master
2148   {
2149 #pragma omp target teams // OK
2150     a++;
2151   }
2152 #pragma omp master
2153   {
2154 #pragma omp target teams distribute // OK
2155     for (int i = 0; i < 10; ++i)
2156       ;
2157   }
2158 #pragma omp master
2159   {
2160 #pragma omp target teams distribute parallel for // OK
2161     for (int i = 0; i < 10; ++i)
2162       ;
2163   }
2164 #pragma omp master
2165   {
2166 #pragma omp target teams distribute parallel for simd // OK
2167     for (int i = 0; i < 10; ++i)
2168       ;
2169   }
2170 #pragma omp master
2171   {
2172 #pragma omp target teams distribute simd // OK
2173     for (int i = 0; i < 10; ++i)
2174       ;
2175   }
2176 
2177 // CRITICAL DIRECTIVE
2178 #pragma omp critical
2179   {
2180 #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?}}
2181     for (int i = 0; i < 10; ++i)
2182       ;
2183   }
2184 #pragma omp critical
2185   {
2186 #pragma omp simd
2187     for (int i = 0; i < 10; ++i)
2188       ;
2189   }
2190 #pragma omp critical
2191   {
2192 #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?}}
2193     for (int i = 0; i < 10; ++i)
2194       ;
2195   }
2196 #pragma omp critical
2197   {
2198 #pragma omp parallel
2199     for (int i = 0; i < 10; ++i)
2200       ;
2201   }
2202 #pragma omp critical
2203   {
2204 #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?}}
2205     {
2206       bar();
2207     }
2208   }
2209 #pragma omp critical
2210   {
2211 #pragma omp master // OK, though second 'master' is redundant
2212     {
2213       bar();
2214     }
2215   }
2216 #pragma omp critical
2217   {
2218 #pragma omp critical
2219     {
2220       bar();
2221     }
2222   }
2223 #pragma omp critical
2224   {
2225 #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?}}
2226     {
2227       bar();
2228     }
2229   }
2230 #pragma omp critical
2231   {
2232 #pragma omp parallel
2233     {
2234 #pragma omp master // OK
2235       {
2236         bar();
2237       }
2238 #pragma omp for // OK
2239       for (int i = 0; i < 10; ++i)
2240         ;
2241 #pragma omp for simd // OK
2242       for (int i = 0; i < 10; ++i)
2243         ;
2244 #pragma omp sections // OK
2245       {
2246         bar();
2247       }
2248     }
2249   }
2250 #pragma omp critical
2251   {
2252 #pragma omp parallel master
2253     {
2254       bar();
2255     }
2256   }
2257 #pragma omp critical
2258   {
2259 #pragma omp parallel for
2260     for (int i = 0; i < 10; ++i)
2261       ;
2262   }
2263 #pragma omp critical
2264   {
2265 #pragma omp parallel for simd
2266     for (int i = 0; i < 10; ++i)
2267       ;
2268   }
2269 #pragma omp critical
2270   {
2271 #pragma omp parallel sections
2272     {
2273       bar();
2274     }
2275   }
2276 #pragma omp critical
2277   {
2278 #pragma omp task
2279     {
2280       bar();
2281     }
2282   }
2283 #pragma omp critical
2284   {
2285 #pragma omp taskyield
2286     bar();
2287   }
2288 #pragma omp critical
2289   {
2290 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2291     bar();
2292   }
2293 #pragma omp critical
2294   {
2295 #pragma omp taskwait
2296     bar();
2297   }
2298 #pragma omp critical(Tuzik)
2299   {
2300 #pragma omp critical(grelka)
2301     bar();
2302   }
2303 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2304   {
2305 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2306     {
2307 #pragma omp critical(Tuzik)
2308       {
2309 #pragma omp parallel
2310 #pragma omp critical(grelka)
2311         {
2312           bar();
2313         }
2314       }
2315     }
2316   }
2317 #pragma omp critical
2318   {
2319 #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?}}
2320     bar();
2321   }
2322 #pragma omp critical
2323   {
2324 #pragma omp atomic
2325     ++a;
2326   }
2327 #pragma omp critical
2328   {
2329 #pragma omp target
2330     ++a;
2331   }
2332 #pragma omp critical
2333   {
2334 #pragma omp target parallel
2335     ++a;
2336   }
2337 #pragma omp critical
2338   {
2339 #pragma omp target parallel for
2340     for (int i = 0; i < 10; ++i)
2341       ;
2342   }
2343 #pragma omp critical
2344   {
2345 #pragma omp target enter data map(to: a)
2346     ++a;
2347   }
2348 #pragma omp critical
2349   {
2350 #pragma omp target exit data map(from: a)
2351     ++a;
2352   }
2353 #pragma omp critical
2354   {
2355 #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?}}
2356     ++a;
2357   }
2358 #pragma omp critical
2359   {
2360 #pragma omp taskloop
2361   for (int i = 0; i < 10; ++i)
2362     ++a;
2363   }
2364 #pragma omp critical
2365   {
2366 #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?}}
2367     for (int i = 0; i < 10; ++i)
2368       ;
2369   }
2370 #pragma omp critical
2371   {
2372 #pragma omp target update to(a)
2373     bar();
2374   }
2375 #pragma omp critical
2376   {
2377 #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?}}
2378     for (int i = 0; i < 10; ++i)
2379       ;
2380   }
2381 #pragma omp critical
2382   {
2383 #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?}}
2384     for (int i = 0; i < 10; ++i)
2385       ;
2386   }
2387 #pragma omp critical
2388   {
2389 #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?}}
2390     for (int i = 0; i < 10; ++i)
2391       ;
2392   }
2393 #pragma omp critical
2394   {
2395 #pragma omp target simd // OK
2396     for (int i = 0; i < 10; ++i)
2397       ;
2398   }
2399 #pragma omp critical
2400   {
2401 #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?}}
2402     for (int i = 0; i < 10; ++i)
2403       ;
2404   }
2405 #pragma omp critical
2406   {
2407 #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?}}
2408     for (int i = 0; i < 10; ++i)
2409       ;
2410   }
2411 #pragma omp critical
2412   {
2413 #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?}}
2414     for (int i = 0; i < 10; ++i)
2415       ;
2416   }
2417 #pragma omp critical
2418   {
2419 #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?}}
2420     for (int i = 0; i < 10; ++i)
2421       ;
2422   }
2423 #pragma omp critical
2424   {
2425 #pragma omp target teams // OK
2426     a++;
2427   }
2428 #pragma omp critical
2429   {
2430 #pragma omp target teams distribute // OK
2431     for (int i = 0; i < 10; ++i)
2432       ;
2433   }
2434 #pragma omp critical
2435   {
2436 #pragma omp target teams distribute parallel for // OK
2437     for (int i = 0; i < 10; ++i)
2438       ;
2439   }
2440 #pragma omp critical
2441   {
2442 #pragma omp target teams distribute parallel for simd // OK
2443     for (int i = 0; i < 10; ++i)
2444       ;
2445   }
2446 #pragma omp critical
2447   {
2448 #pragma omp target teams distribute simd // OK
2449     for (int i = 0; i < 10; ++i)
2450       ;
2451   }
2452 
2453 // PARALLEL FOR DIRECTIVE
2454 #pragma omp parallel for
2455   for (int i = 0; i < 10; ++i) {
2456 #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?}}
2457     for (int i = 0; i < 10; ++i)
2458       ;
2459   }
2460 #pragma omp parallel for
2461   for (int i = 0; i < 10; ++i) {
2462 #pragma omp simd
2463     for (int i = 0; i < 10; ++i)
2464       ;
2465   }
2466 #pragma omp parallel for
2467   for (int i = 0; i < 10; ++i) {
2468 #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?}}
2469     for (int i = 0; i < 10; ++i)
2470       ;
2471   }
2472 #pragma omp parallel for
2473   for (int i = 0; i < 10; ++i) {
2474 #pragma omp parallel
2475     for (int i = 0; i < 10; ++i)
2476       ;
2477   }
2478 #pragma omp parallel for
2479   for (int i = 0; i < 10; ++i) {
2480 #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?}}
2481     {
2482       bar();
2483     }
2484   }
2485 #pragma omp parallel for
2486   for (int i = 0; i < 10; ++i) {
2487 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2488     {
2489       bar();
2490     }
2491   }
2492 #pragma omp parallel for
2493   for (int i = 0; i < 10; ++i) {
2494 #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?}}
2495     {
2496       bar();
2497     }
2498   }
2499 
2500 #pragma omp parallel for
2501   for (int i = 0; i < 10; ++i) {
2502 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2503     {
2504       bar();
2505     }
2506   }
2507 
2508 #pragma omp parallel for
2509   for (int i = 0; i < 10; ++i) {
2510 #pragma omp critical
2511     {
2512       bar();
2513     }
2514   }
2515 
2516 #pragma omp parallel for
2517   for (int i = 0; i < 10; ++i) {
2518 #pragma omp parallel
2519     {
2520 #pragma omp single // OK
2521       {
2522         bar();
2523       }
2524 #pragma omp for // OK
2525       for (int i = 0; i < 10; ++i)
2526         ;
2527 #pragma omp for simd // OK
2528       for (int i = 0; i < 10; ++i)
2529         ;
2530 #pragma omp sections // OK
2531       {
2532         bar();
2533       }
2534     }
2535   }
2536 #pragma omp parallel for
2537   for (int i = 0; i < 10; ++i) {
2538 #pragma omp parallel for
2539     for (int i = 0; i < 10; ++i)
2540       ;
2541   }
2542 #pragma omp parallel for
2543   for (int i = 0; i < 10; ++i) {
2544 #pragma omp parallel for simd
2545     for (int i = 0; i < 10; ++i)
2546       ;
2547   }
2548 #pragma omp parallel for
2549   for (int i = 0; i < 10; ++i) {
2550 #pragma omp parallel sections
2551     {
2552       bar();
2553     }
2554   }
2555 #pragma omp parallel for
2556   for (int i = 0; i < 10; ++i) {
2557 #pragma omp task
2558     {
2559       bar();
2560     }
2561   }
2562 #pragma omp parallel for
2563   for (int i = 0; i < 10; ++i) {
2564 #pragma omp taskyield
2565     bar();
2566   }
2567 #pragma omp parallel for
2568   for (int i = 0; i < 10; ++i) {
2569 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2570     bar();
2571   }
2572 #pragma omp parallel for
2573   for (int i = 0; i < 10; ++i) {
2574 #pragma omp taskwait
2575     bar();
2576   }
2577 #pragma omp parallel for
2578   for (int i = 0; i < 10; ++i) {
2579 #pragma omp flush
2580     bar();
2581   }
2582 #pragma omp parallel for
2583   for (int i = 0; i < 10; ++i) {
2584 #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?}}
2585     bar();
2586   }
2587 #pragma omp parallel for ordered
2588   for (int i = 0; i < 10; ++i) {
2589 #pragma omp ordered // OK
2590     bar();
2591   }
2592 #pragma omp parallel for
2593   for (int i = 0; i < 10; ++i) {
2594 #pragma omp atomic
2595     ++a;
2596   }
2597 #pragma omp parallel for
2598   for (int i = 0; i < 10; ++i) {
2599 #pragma omp target
2600     ++a;
2601   }
2602 #pragma omp parallel for
2603   for (int i = 0; i < 10; ++i) {
2604 #pragma omp target parallel
2605     ++a;
2606   }
2607 #pragma omp parallel for
2608   for (int i = 0; i < 10; ++i) {
2609 #pragma omp target parallel for
2610     for (int i = 0; i < 10; ++i)
2611       ;
2612   }
2613 #pragma omp parallel for
2614   for (int i = 0; i < 10; ++i) {
2615 #pragma omp target enter data map(to: a)
2616     ++a;
2617   }
2618 #pragma omp parallel for
2619   for (int i = 0; i < 10; ++i) {
2620 #pragma omp target exit data map(from: a)
2621     ++a;
2622   }
2623 #pragma omp parallel for
2624   for (int i = 0; i < 10; ++i) {
2625 #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?}}
2626     ++a;
2627   }
2628 #pragma omp parallel for
2629   for (int i = 0; i < 10; ++i) {
2630 #pragma omp taskloop
2631   for (int i = 0; i < 10; ++i)
2632     ++a;
2633   }
2634 #pragma omp parallel for
2635   for (int i = 0; i < 10; ++i) {
2636 #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?}}
2637     for (int j = 0; j < 10; ++j)
2638       ;
2639   }
2640 #pragma omp parallel for
2641   for (int i = 0; i < 10; ++i) {
2642 #pragma omp target update to(a)
2643   }
2644 #pragma omp parallel for
2645   for (int i = 0; i < 10; ++i) {
2646 #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?}}
2647     for (int j = 0; j < 10; ++j)
2648       ;
2649   }
2650 #pragma omp parallel for
2651   for (int i = 0; i < 10; ++i) {
2652 #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?}}
2653     for (int j = 0; j < 10; ++j)
2654       ;
2655   }
2656 #pragma omp parallel for
2657   for (int i = 0; i < 10; ++i) {
2658 #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?}}
2659     for (int j = 0; j < 10; ++j)
2660       ;
2661   }
2662 #pragma omp parallel for
2663   for (int i = 0; i < 10; ++i) {
2664 #pragma omp target simd // OK
2665     for (int j = 0; j < 10; ++j)
2666       ;
2667   }
2668 #pragma omp parallel for
2669   for (int i = 0; i < 10; ++i) {
2670 #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?}}
2671     for (int j = 0; j < 10; ++j)
2672       ;
2673   }
2674 #pragma omp parallel for
2675   for (int i = 0; i < 10; ++i) {
2676 #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?}}
2677     for (int j = 0; j < 10; ++j)
2678       ;
2679   }
2680 #pragma omp parallel for
2681   for (int i = 0; i < 10; ++i) {
2682 #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?}}
2683     for (int j = 0; j < 10; ++j)
2684       ;
2685   }
2686 #pragma omp parallel for
2687   for (int i = 0; i < 10; ++i) {
2688 #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?}}
2689     for (int j = 0; j < 10; ++j)
2690       ;
2691   }
2692 #pragma omp parallel for
2693   for (int i = 0; i < 10; ++i) {
2694 #pragma omp target teams // OK
2695     a++;
2696   }
2697 #pragma omp parallel for
2698   for (int i = 0; i < 10; ++i) {
2699 #pragma omp target teams distribute // OK
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 target teams distribute parallel for // OK
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 target teams distribute parallel for simd // OK
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 teams distribute simd // OK
2718     for (int j = 0; j < 10; ++j)
2719       ;
2720   }
2721 
2722 // PARALLEL FOR SIMD DIRECTIVE
2723 #pragma omp parallel for simd
2724   for (int i = 0; i < 10; ++i) {
2725 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2726     for (int i = 0; i < 10; ++i)
2727       ;
2728   }
2729 #pragma omp parallel for simd
2730   for (int i = 0; i < 10; ++i) {
2731 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2732     for (int i = 0; i < 10; ++i)
2733       ;
2734   }
2735 #pragma omp parallel for simd
2736   for (int i = 0; i < 10; ++i) {
2737 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2738     for (int i = 0; i < 10; ++i)
2739       ;
2740   }
2741 #pragma omp parallel for simd
2742   for (int i = 0; i < 10; ++i) {
2743 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2744     for (int i = 0; i < 10; ++i)
2745       ;
2746   }
2747 #pragma omp parallel for simd
2748   for (int i = 0; i < 10; ++i) {
2749 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2750     {
2751       bar();
2752     }
2753   }
2754 #pragma omp parallel for simd
2755   for (int i = 0; i < 10; ++i) {
2756 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2757     {
2758       bar();
2759     }
2760   }
2761 #pragma omp parallel for simd
2762   for (int i = 0; i < 10; ++i) {
2763 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2764     {
2765       bar();
2766     }
2767   }
2768 
2769 #pragma omp parallel for simd
2770   for (int i = 0; i < 10; ++i) {
2771 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2772     {
2773       bar();
2774     }
2775   }
2776 
2777 #pragma omp parallel for simd
2778   for (int i = 0; i < 10; ++i) {
2779 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2780     {
2781       bar();
2782     }
2783   }
2784 
2785 #pragma omp parallel for simd
2786   for (int i = 0; i < 10; ++i) {
2787 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2788     {
2789 #pragma omp single
2790       {
2791         bar();
2792       }
2793 #pragma omp for
2794       for (int i = 0; i < 10; ++i)
2795         ;
2796 #pragma omp for simd
2797       for (int i = 0; i < 10; ++i)
2798         ;
2799 #pragma omp sections
2800       {
2801         bar();
2802       }
2803     }
2804   }
2805 #pragma omp parallel for simd
2806   for (int i = 0; i < 10; ++i) {
2807 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2808     for (int i = 0; i < 10; ++i)
2809       ;
2810   }
2811 #pragma omp parallel for simd
2812   for (int i = 0; i < 10; ++i) {
2813 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2814     for (int i = 0; i < 10; ++i)
2815       ;
2816   }
2817 #pragma omp parallel for simd
2818   for (int i = 0; i < 10; ++i) {
2819 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2820     {
2821       bar();
2822     }
2823   }
2824 #pragma omp parallel for simd
2825   for (int i = 0; i < 10; ++i) {
2826 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2827     {
2828       bar();
2829     }
2830   }
2831 #pragma omp parallel for simd
2832   for (int i = 0; i < 10; ++i) {
2833 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2834     bar();
2835   }
2836 #pragma omp parallel for simd
2837   for (int i = 0; i < 10; ++i) {
2838 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2839     bar();
2840   }
2841 #pragma omp parallel for simd
2842   for (int i = 0; i < 10; ++i) {
2843 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2844     bar();
2845   }
2846 #pragma omp parallel for simd
2847   for (int i = 0; i < 10; ++i) {
2848 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2849     bar();
2850   }
2851 #pragma omp parallel for simd
2852   for (int i = 0; i < 10; ++i) {
2853 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2854     bar();
2855   }
2856 #pragma omp parallel for simd
2857   for (int i = 0; i < 10; ++i) {
2858 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2859     bar();
2860   }
2861 #pragma omp parallel for simd
2862   for (int i = 0; i < 10; ++i) {
2863 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
2864     ++a;
2865   }
2866 #pragma omp parallel for simd
2867   for (int i = 0; i < 10; ++i) {
2868 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2869     ++a;
2870   }
2871 #pragma omp parallel for simd
2872   for (int i = 0; i < 10; ++i) {
2873 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2874     ++a;
2875   }
2876 #pragma omp parallel for simd
2877   for (int i = 0; i < 10; ++i) {
2878 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2879     for (int i = 0; i < 10; ++i)
2880       ;
2881   }
2882 #pragma omp parallel for simd
2883   for (int i = 0; i < 10; ++i) {
2884 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2885     ++a;
2886   }
2887 #pragma omp parallel for simd
2888   for (int i = 0; i < 10; ++i) {
2889 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2890     ++a;
2891   }
2892 #pragma omp parallel for simd
2893   for (int i = 0; i < 10; ++i) {
2894 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2895     ++a;
2896   }
2897 #pragma omp parallel for simd
2898   for (int i = 0; i < 10; ++i) {
2899 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2900   for (int i = 0; i < 10; ++i)
2901     ++a;
2902   }
2903 #pragma omp parallel for simd
2904   for (int i = 0; i < 10; ++i) {
2905 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2906     for (int j = 0; j < 10; ++j)
2907       ;
2908   }
2909 #pragma omp parallel for simd
2910   for (int i = 0; i < 10; ++i) {
2911 #pragma omp target update to(a) // 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 distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2917     for (int j = 0; j < 10; ++j)
2918       ;
2919   }
2920 #pragma omp parallel for simd
2921   for (int i = 0; i < 10; ++i) {
2922 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2923     for (int j = 0; j < 10; ++j)
2924       ;
2925   }
2926 #pragma omp parallel for simd
2927   for (int i = 0; i < 10; ++i) {
2928 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2929     for (int j = 0; j < 10; ++j)
2930       ;
2931   }
2932 #pragma omp parallel for simd
2933   for (int i = 0; i < 10; ++i) {
2934 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2935     for (int j = 0; j < 10; ++j)
2936       ;
2937   }
2938 #pragma omp parallel for simd
2939   for (int i = 0; i < 10; ++i) {
2940 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2941     for (int j = 0; j < 10; ++j)
2942       ;
2943   }
2944 #pragma omp parallel for simd
2945   for (int i = 0; i < 10; ++i) {
2946 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2947     for (int j = 0; j < 10; ++j)
2948       ;
2949   }
2950 #pragma omp parallel for simd
2951   for (int i = 0; i < 10; ++i) {
2952 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2953     for (int j = 0; j < 10; ++j)
2954       ;
2955   }
2956 #pragma omp parallel for simd
2957   for (int i = 0; i < 10; ++i) {
2958 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2959     for (int j = 0; j < 10; ++j)
2960       ;
2961   }
2962 #pragma omp parallel for simd
2963   for (int i = 0; i < 10; ++i) {
2964 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2965     a++;
2966   }
2967 #pragma omp parallel for simd
2968   for (int i = 0; i < 10; ++i) {
2969 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2970     for (int j = 0; j < 10; ++j)
2971       ;
2972   }
2973 #pragma omp parallel for simd
2974   for (int i = 0; i < 10; ++i) {
2975 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2976     for (int j = 0; j < 10; ++j)
2977       ;
2978   }
2979 #pragma omp parallel for simd
2980   for (int i = 0; i < 10; ++i) {
2981 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2982     for (int j = 0; j < 10; ++j)
2983       ;
2984   }
2985 #pragma omp parallel for simd
2986   for (int i = 0; i < 10; ++i) {
2987 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2988     for (int j = 0; j < 10; ++j)
2989       ;
2990   }
2991 
2992 // PARALLEL MASTER DIRECTIVE
2993 #pragma omp parallel master
2994   {
2995 #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?}}
2996     for (int i = 0; i < 10; ++i)
2997       ;
2998   }
2999 #pragma omp parallel master
3000   {
3001 #pragma omp simd
3002     for (int i = 0; i < 10; ++i)
3003       ;
3004   }
3005 #pragma omp parallel master
3006   {
3007 #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?}}
3008     for (int i = 0; i < 10; ++i)
3009       ;
3010   }
3011 #pragma omp parallel master
3012   {
3013 #pragma omp parallel
3014     for (int i = 0; i < 10; ++i)
3015       ;
3016   }
3017 #pragma omp parallel master
3018   {
3019 #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?}}
3020     {
3021       bar();
3022     }
3023   }
3024 #pragma omp parallel master
3025   {
3026 #pragma omp master // OK, though second 'master' is redundant
3027     {
3028       bar();
3029     }
3030   }
3031 #pragma omp parallel master
3032   {
3033 #pragma omp critical
3034     {
3035       bar();
3036     }
3037   }
3038 #pragma omp parallel master
3039   {
3040 #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?}}
3041     {
3042       bar();
3043     }
3044   }
3045 #pragma omp parallel master
3046   {
3047 #pragma omp parallel
3048     {
3049 #pragma omp parallel master // OK
3050       {
3051         bar();
3052       }
3053 #pragma omp for // OK
3054       for (int i = 0; i < 10; ++i)
3055         ;
3056 #pragma omp for simd // OK
3057       for (int i = 0; i < 10; ++i)
3058         ;
3059 #pragma omp sections // OK
3060       {
3061         bar();
3062       }
3063     }
3064   }
3065 #pragma omp parallel master
3066   {
3067 #pragma omp parallel master // OK
3068       {
3069         bar();
3070       }
3071 #pragma omp parallel
3072     {
3073 #pragma omp for // OK
3074       for (int i = 0; i < 10; ++i)
3075         ;
3076 #pragma omp for simd // OK
3077       for (int i = 0; i < 10; ++i)
3078         ;
3079 #pragma omp sections // OK
3080       {
3081         bar();
3082       }
3083     }
3084   }
3085 #pragma omp parallel master
3086   {
3087 #pragma omp parallel for
3088     for (int i = 0; i < 10; ++i)
3089       ;
3090   }
3091 #pragma omp parallel master
3092   {
3093 #pragma omp parallel for simd
3094     for (int i = 0; i < 10; ++i)
3095       ;
3096   }
3097 #pragma omp parallel master
3098   {
3099 #pragma omp parallel sections
3100     {
3101       bar();
3102     }
3103   }
3104 #pragma omp parallel master
3105   {
3106 #pragma omp task
3107     {
3108       bar();
3109     }
3110   }
3111 #pragma omp parallel master
3112   {
3113 #pragma omp taskyield
3114     bar();
3115   }
3116 #pragma omp parallel master
3117   {
3118 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3119     bar();
3120   }
3121 #pragma omp parallel master
3122   {
3123 #pragma omp taskwait
3124     bar();
3125   }
3126 #pragma omp parallel master
3127   {
3128 #pragma omp flush
3129     bar();
3130   }
3131 #pragma omp parallel master
3132   {
3133 #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?}}
3134     bar();
3135   }
3136 #pragma omp parallel master
3137   {
3138 #pragma omp atomic
3139     ++a;
3140   }
3141 #pragma omp parallel master
3142   {
3143 #pragma omp target
3144     ++a;
3145   }
3146 #pragma omp parallel master
3147   {
3148 #pragma omp target parallel
3149     ++a;
3150   }
3151 #pragma omp parallel master
3152   {
3153 #pragma omp target parallel for
3154     for (int i = 0; i < 10; ++i)
3155       ;
3156   }
3157 #pragma omp parallel master
3158   {
3159 #pragma omp target enter data map(to: a)
3160     ++a;
3161   }
3162 #pragma omp parallel master
3163   {
3164 #pragma omp target exit data map(from: a)
3165     ++a;
3166   }
3167 #pragma omp parallel master
3168   {
3169 #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?}}
3170     ++a;
3171   }
3172 #pragma omp parallel master
3173   {
3174 #pragma omp taskloop
3175   for (int i = 0; i < 10; ++i)
3176     ++a;
3177   }
3178 #pragma omp parallel master
3179   {
3180 #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?}}
3181     for (int i = 0; i < 10; ++i)
3182       ;
3183   }
3184 #pragma omp parallel master
3185   {
3186 #pragma omp target update to(a)
3187     bar();
3188   }
3189 #pragma omp parallel master
3190   {
3191 #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?}}
3192     for (int i = 0; i < 10; ++i)
3193       ;
3194   }
3195 #pragma omp parallel master
3196   {
3197 #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?}}
3198     for (int i = 0; i < 10; ++i)
3199       ;
3200   }
3201 #pragma omp parallel master
3202   {
3203 #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?}}
3204     for (int i = 0; i < 10; ++i)
3205       ;
3206   }
3207 #pragma omp parallel master
3208   {
3209 #pragma omp target simd // OK
3210     for (int i = 0; i < 10; ++i)
3211       ;
3212   }
3213 #pragma omp parallel master
3214   {
3215 #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?}}
3216     for (int i = 0; i < 10; ++i)
3217       ;
3218   }
3219 #pragma omp parallel master
3220   {
3221 #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?}}
3222     for (int i = 0; i < 10; ++i)
3223       ;
3224   }
3225 #pragma omp parallel master
3226   {
3227 #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?}}
3228     for (int i = 0; i < 10; ++i)
3229       ;
3230   }
3231 #pragma omp parallel master
3232   {
3233 #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?}}
3234     for (int i = 0; i < 10; ++i)
3235       ;
3236   }
3237 #pragma omp parallel master
3238   {
3239 #pragma omp target teams // OK
3240     a++;
3241   }
3242 #pragma omp parallel master
3243   {
3244 #pragma omp target teams distribute // OK
3245     for (int i = 0; i < 10; ++i)
3246       ;
3247   }
3248 #pragma omp parallel master
3249   {
3250 #pragma omp target teams distribute parallel for // OK
3251     for (int i = 0; i < 10; ++i)
3252       ;
3253   }
3254 #pragma omp parallel master
3255   {
3256 #pragma omp target teams distribute parallel for simd // OK
3257     for (int i = 0; i < 10; ++i)
3258       ;
3259   }
3260 #pragma omp parallel master
3261   {
3262 #pragma omp target teams distribute simd // OK
3263     for (int i = 0; i < 10; ++i)
3264       ;
3265   }
3266 
3267 // PARALLEL SECTIONS DIRECTIVE
3268 #pragma omp parallel sections
3269   {
3270 #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?}}
3271     for (int i = 0; i < 10; ++i)
3272       ;
3273   }
3274 #pragma omp parallel sections
3275   {
3276 #pragma omp simd
3277     for (int i = 0; i < 10; ++i)
3278       ;
3279   }
3280 #pragma omp parallel sections
3281   {
3282 #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?}}
3283     for (int i = 0; i < 10; ++i)
3284       ;
3285   }
3286 #pragma omp parallel sections
3287   {
3288 #pragma omp parallel
3289     for (int i = 0; i < 10; ++i)
3290       ;
3291   }
3292 #pragma omp parallel sections
3293   {
3294 #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?}}
3295     {
3296       bar();
3297     }
3298   }
3299 #pragma omp parallel sections
3300   {
3301 #pragma omp section
3302     {
3303       bar();
3304     }
3305   }
3306 #pragma omp parallel sections
3307   {
3308 #pragma omp section
3309     {
3310 #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?}}
3311       bar();
3312     }
3313   }
3314 #pragma omp parallel sections
3315   {
3316 #pragma omp section
3317     {
3318 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
3319       bar();
3320     }
3321   }
3322 #pragma omp parallel sections
3323   {
3324 #pragma omp section
3325     {
3326 #pragma omp critical
3327       bar();
3328     }
3329   }
3330 #pragma omp parallel sections
3331   {
3332 #pragma omp parallel
3333     {
3334 #pragma omp single // OK
3335       {
3336         bar();
3337       }
3338 #pragma omp for // OK
3339       for (int i = 0; i < 10; ++i)
3340         ;
3341 #pragma omp for simd // OK
3342       for (int i = 0; i < 10; ++i)
3343         ;
3344 #pragma omp sections // OK
3345       {
3346         bar();
3347       }
3348     }
3349   }
3350 #pragma omp parallel sections
3351   {
3352 #pragma omp parallel for
3353     for (int i = 0; i < 10; ++i)
3354       ;
3355   }
3356 #pragma omp parallel sections
3357   {
3358 #pragma omp parallel for simd
3359     for (int i = 0; i < 10; ++i)
3360       ;
3361   }
3362 #pragma omp parallel sections
3363   {
3364 #pragma omp parallel sections
3365     {
3366       bar();
3367     }
3368   }
3369 #pragma omp parallel sections
3370   {
3371 #pragma omp task
3372     {
3373       bar();
3374     }
3375   }
3376 #pragma omp parallel sections
3377   {
3378 #pragma omp taskyield
3379   }
3380 #pragma omp parallel sections
3381   {
3382 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3383   }
3384 #pragma omp parallel sections
3385   {
3386 #pragma omp taskwait
3387   }
3388 #pragma omp parallel sections
3389   {
3390 #pragma omp flush
3391   }
3392 #pragma omp parallel sections
3393   {
3394 #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?}}
3395     bar();
3396   }
3397 #pragma omp parallel sections
3398   {
3399 #pragma omp atomic
3400     ++a;
3401   }
3402 #pragma omp parallel sections
3403   {
3404 #pragma omp target
3405     ++a;
3406   }
3407 #pragma omp parallel sections
3408   {
3409 #pragma omp target parallel
3410     ++a;
3411   }
3412 #pragma omp parallel sections
3413   {
3414 #pragma omp target parallel for
3415     for (int i = 0; i < 10; ++i)
3416       ;
3417   }
3418 #pragma omp parallel sections
3419   {
3420 #pragma omp target enter data map(to: a)
3421   }
3422 #pragma omp parallel sections
3423   {
3424 #pragma omp target exit data map(from: a)
3425   }
3426 #pragma omp parallel sections
3427   {
3428 #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?}}
3429     ++a;
3430   }
3431 #pragma omp parallel sections
3432   {
3433 #pragma omp taskloop
3434   for (int i = 0; i < 10; ++i)
3435     ++a;
3436   }
3437 #pragma omp parallel sections
3438   {
3439 #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?}}
3440     for (int i = 0; i < 10; ++i)
3441       ;
3442   }
3443 #pragma omp parallel sections
3444   {
3445 #pragma omp target update to(a)
3446   }
3447 #pragma omp parallel sections
3448   {
3449 #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?}}
3450     for (int i = 0; i < 10; ++i)
3451       ;
3452   }
3453 #pragma omp parallel sections
3454   {
3455 #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?}}
3456     for (int i = 0; i < 10; ++i)
3457       ;
3458   }
3459 #pragma omp parallel sections
3460   {
3461 #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?}}
3462     for (int i = 0; i < 10; ++i)
3463       ;
3464   }
3465 #pragma omp parallel sections
3466   {
3467 #pragma omp target simd // OK
3468     for (int i = 0; i < 10; ++i)
3469       ;
3470   }
3471 #pragma omp parallel sections
3472   {
3473 #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?}}
3474     for (int i = 0; i < 10; ++i)
3475       ;
3476   }
3477 #pragma omp parallel sections
3478   {
3479 #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?}}
3480     for (int i = 0; i < 10; ++i)
3481       ;
3482   }
3483 #pragma omp parallel sections
3484   {
3485 #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?}}
3486     for (int i = 0; i < 10; ++i)
3487       ;
3488   }
3489 #pragma omp parallel sections
3490   {
3491 #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?}}
3492     for (int i = 0; i < 10; ++i)
3493       ;
3494   }
3495 #pragma omp parallel sections
3496   {
3497 #pragma omp target teams // OK
3498     a++;
3499   }
3500 #pragma omp parallel sections
3501   {
3502 #pragma omp target teams distribute // OK
3503     for (int i = 0; i < 10; ++i)
3504       ;
3505   }
3506 #pragma omp parallel sections
3507   {
3508 #pragma omp target teams distribute parallel for // OK
3509     for (int i = 0; i < 10; ++i)
3510       ;
3511   }
3512 #pragma omp parallel sections
3513   {
3514 #pragma omp target teams distribute parallel for simd // OK
3515     for (int i = 0; i < 10; ++i)
3516       ;
3517   }
3518 #pragma omp parallel sections
3519   {
3520 #pragma omp target teams distribute simd // OK
3521     for (int i = 0; i < 10; ++i)
3522       ;
3523   }
3524 
3525 // TASK DIRECTIVE
3526 #pragma omp task
3527 #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?}}
3528   for (int i = 0; i < 10; ++i)
3529     ;
3530 #pragma omp task
3531 #pragma omp simd
3532   for (int i = 0; i < 10; ++i)
3533     ;
3534 #pragma omp task
3535 #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?}}
3536   for (int i = 0; i < 10; ++i)
3537     ;
3538 #pragma omp task
3539 #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?}}
3540   {
3541     bar();
3542   }
3543 #pragma omp task
3544 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
3545   {
3546     bar();
3547   }
3548 #pragma omp task
3549 #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?}}
3550   bar();
3551 #pragma omp task
3552 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
3553   bar();
3554 #pragma omp task
3555 #pragma omp critical
3556   bar();
3557 
3558 #pragma omp task
3559 #pragma omp parallel for
3560   for (int i = 0; i < 10; ++i)
3561     ;
3562 #pragma omp task
3563 #pragma omp parallel for simd
3564   for (int i = 0; i < 10; ++i)
3565     ;
3566 #pragma omp task
3567 #pragma omp parallel sections
3568   {
3569     bar();
3570   }
3571 #pragma omp task
3572 #pragma omp task
3573   {
3574     bar();
3575   }
3576 #pragma omp task
3577   {
3578 #pragma omp taskyield
3579     bar();
3580   }
3581 #pragma omp task
3582   {
3583 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
3584     bar();
3585   }
3586 #pragma omp task
3587   {
3588 #pragma omp taskwait
3589     bar();
3590   }
3591 #pragma omp task
3592   {
3593 #pragma omp flush
3594     bar();
3595   }
3596 #pragma omp task
3597   {
3598 #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?}}
3599     bar();
3600   }
3601 #pragma omp task
3602   {
3603 #pragma omp atomic
3604     ++a;
3605   }
3606 #pragma omp task
3607   {
3608 #pragma omp target
3609     ++a;
3610   }
3611 #pragma omp task
3612   {
3613 #pragma omp target parallel
3614     ++a;
3615   }
3616 #pragma omp task
3617 #pragma omp target parallel for
3618   for (int i = 0; i < 10; ++i)
3619     ;
3620 #pragma omp task
3621   {
3622 #pragma omp target enter data map(to: a)
3623     ++a;
3624   }
3625 #pragma omp task
3626   {
3627 #pragma omp target exit data map(from: a)
3628     ++a;
3629   }
3630 #pragma omp task
3631   {
3632 #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?}}
3633     ++a;
3634   }
3635 #pragma omp task
3636   {
3637 #pragma omp taskloop
3638   for (int i = 0; i < 10; ++i)
3639     ++a;
3640   }
3641 #pragma omp task
3642   {
3643 #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?}}
3644     for (int i = 0; i < 10; ++i)
3645       ;
3646   }
3647 #pragma omp task
3648   {
3649 #pragma omp target update to(a)
3650     bar();
3651   }
3652 #pragma omp task
3653   {
3654 #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?}}
3655     for (int i = 0; i < 10; ++i)
3656       ;
3657   }
3658 #pragma omp task
3659   {
3660 #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?}}
3661     for (int i = 0; i < 10; ++i)
3662       ;
3663   }
3664 #pragma omp task
3665   {
3666 #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?}}
3667     for (int i = 0; i < 10; ++i)
3668       ;
3669   }
3670 #pragma omp task
3671   {
3672 #pragma omp target simd // OK
3673     for (int i = 0; i < 10; ++i)
3674       ;
3675   }
3676 #pragma omp task
3677   {
3678 #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?}}
3679     for (int i = 0; i < 10; ++i)
3680       ;
3681   }
3682 #pragma omp task
3683   {
3684 #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?}}
3685     for (int i = 0; i < 10; ++i)
3686       ;
3687   }
3688 #pragma omp task
3689   {
3690 #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?}}
3691     for (int i = 0; i < 10; ++i)
3692       ;
3693   }
3694 #pragma omp task
3695   {
3696 #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?}}
3697     for (int i = 0; i < 10; ++i)
3698       ;
3699   }
3700 #pragma omp task
3701   {
3702 #pragma omp target teams // OK
3703     a++;
3704   }
3705 #pragma omp task
3706   {
3707 #pragma omp target teams distribute // OK
3708     for (int i = 0; i < 10; ++i)
3709       ;
3710   }
3711 #pragma omp task
3712   {
3713 #pragma omp target teams distribute parallel for // OK
3714     for (int i = 0; i < 10; ++i)
3715       ;
3716   }
3717 #pragma omp task
3718   {
3719 #pragma omp target teams distribute parallel for simd // OK
3720     for (int i = 0; i < 10; ++i)
3721       ;
3722   }
3723 #pragma omp task
3724   {
3725 #pragma omp target teams distribute simd // OK
3726     for (int i = 0; i < 10; ++i)
3727       ;
3728   }
3729 
3730 // ORDERED DIRECTIVE
3731 #pragma omp ordered
3732   {
3733 #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?}}
3734     for (int i = 0; i < 10; ++i)
3735       ;
3736   }
3737 #pragma omp ordered
3738   {
3739 #pragma omp simd
3740     for (int i = 0; i < 10; ++i)
3741       ;
3742   }
3743 #pragma omp ordered
3744   {
3745 #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?}}
3746     for (int i = 0; i < 10; ++i)
3747       ;
3748   }
3749 #pragma omp ordered
3750   {
3751 #pragma omp parallel
3752     for (int i = 0; i < 10; ++i)
3753       ;
3754   }
3755 #pragma omp ordered
3756   {
3757 #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?}}
3758     {
3759       bar();
3760     }
3761   }
3762 #pragma omp ordered
3763   {
3764 #pragma omp master // OK, though second 'ordered' is redundant
3765     {
3766       bar();
3767     }
3768   }
3769 #pragma omp ordered
3770   {
3771 #pragma omp critical
3772     {
3773       bar();
3774     }
3775   }
3776 #pragma omp ordered
3777   {
3778 #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?}}
3779     {
3780       bar();
3781     }
3782   }
3783 #pragma omp ordered
3784   {
3785 #pragma omp parallel for ordered
3786     for (int j = 0; j < 10; ++j) {
3787 #pragma omp ordered // OK
3788       {
3789         bar();
3790       }
3791     }
3792   }
3793 #pragma omp ordered
3794   {
3795 #pragma omp parallel for simd ordered
3796     for (int j = 0; j < 10; ++j) {
3797 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3798       {
3799         bar();
3800       }
3801     }
3802   }
3803 #pragma omp ordered
3804   {
3805 #pragma omp parallel for simd ordered
3806     for (int j = 0; j < 10; ++j) {
3807 #pragma omp ordered simd
3808       {
3809         bar();
3810       }
3811     }
3812   }
3813 #pragma omp ordered
3814   {
3815 #pragma omp parallel for
3816     for (int i = 0; i < 10; ++i)
3817       ;
3818   }
3819 #pragma omp ordered
3820   {
3821 #pragma omp parallel for simd
3822     for (int i = 0; i < 10; ++i)
3823       ;
3824   }
3825 #pragma omp ordered
3826   {
3827 #pragma omp parallel sections
3828     {
3829       bar();
3830     }
3831   }
3832 #pragma omp ordered
3833   {
3834 #pragma omp task
3835     {
3836       bar();
3837     }
3838   }
3839 #pragma omp ordered
3840   {
3841 #pragma omp taskyield
3842     bar();
3843   }
3844 #pragma omp ordered
3845   {
3846 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3847     bar();
3848   }
3849 #pragma omp ordered
3850   {
3851 #pragma omp taskwait
3852     bar();
3853   }
3854 #pragma omp ordered
3855   {
3856 #pragma omp flush
3857     bar();
3858   }
3859 #pragma omp ordered
3860   {
3861 #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?}}
3862     bar();
3863   }
3864 #pragma omp ordered
3865   {
3866 #pragma omp atomic
3867     ++a;
3868   }
3869 #pragma omp ordered
3870   {
3871 #pragma omp target
3872     ++a;
3873   }
3874 #pragma omp ordered
3875   {
3876 #pragma omp target parallel
3877     ++a;
3878   }
3879 #pragma omp ordered
3880   {
3881 #pragma omp target parallel for ordered
3882     for (int j = 0; j < 10; ++j) {
3883 #pragma omp ordered // OK
3884       {
3885         bar();
3886       }
3887     }
3888   }
3889 #pragma omp ordered
3890   {
3891 #pragma omp target parallel for
3892     for (int i = 0; i < 10; ++i)
3893       ;
3894   }
3895 #pragma omp ordered
3896   {
3897 #pragma omp target enter data map(to: a)
3898     ++a;
3899   }
3900 #pragma omp ordered
3901   {
3902 #pragma omp target exit data map(from: a)
3903     ++a;
3904   }
3905 #pragma omp ordered
3906   {
3907 #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?}}
3908     ++a;
3909   }
3910 #pragma omp ordered
3911   {
3912 #pragma omp taskloop
3913   for (int i = 0; i < 10; ++i)
3914     ++a;
3915   }
3916 #pragma omp ordered
3917   {
3918 #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?}}
3919     for (int i = 0; i < 10; ++i)
3920       ;
3921   }
3922 #pragma omp ordered
3923   {
3924     bar();
3925 #pragma omp target update to(a)
3926     bar();
3927   }
3928 #pragma omp ordered
3929   {
3930 #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?}}
3931     for (int i = 0; i < 10; ++i)
3932       ;
3933   }
3934 #pragma omp ordered
3935   {
3936 #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?}}
3937     for (int i = 0; i < 10; ++i)
3938       ;
3939   }
3940 #pragma omp ordered
3941   {
3942 #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?}}
3943     for (int i = 0; i < 10; ++i)
3944       ;
3945   }
3946 #pragma omp ordered
3947   {
3948 #pragma omp target simd // OK
3949     for (int i = 0; i < 10; ++i)
3950       ;
3951   }
3952 #pragma omp ordered
3953   {
3954 #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?}}
3955     for (int i = 0; i < 10; ++i)
3956       ;
3957   }
3958 #pragma omp ordered
3959   {
3960 #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?}}
3961     for (int i = 0; i < 10; ++i)
3962       ;
3963   }
3964 #pragma omp ordered
3965   {
3966 #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?}}
3967     for (int i = 0; i < 10; ++i)
3968       ;
3969   }
3970 #pragma omp ordered
3971   {
3972 #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?}}
3973     for (int i = 0; i < 10; ++i)
3974       ;
3975   }
3976 #pragma omp ordered
3977   {
3978 #pragma omp target teams // OK
3979     a++;
3980   }
3981 #pragma omp ordered
3982   {
3983 #pragma omp target teams distribute // OK
3984     for (int i = 0; i < 10; ++i)
3985       ;
3986   }
3987 #pragma omp ordered
3988   {
3989 #pragma omp target teams distribute parallel for // OK
3990     for (int i = 0; i < 10; ++i)
3991       ;
3992   }
3993 #pragma omp ordered
3994   {
3995 #pragma omp target teams distribute parallel for simd // OK
3996     for (int i = 0; i < 10; ++i)
3997       ;
3998   }
3999 #pragma omp ordered
4000   {
4001 #pragma omp target teams distribute simd // OK
4002     for (int i = 0; i < 10; ++i)
4003       ;
4004   }
4005 
4006 // ATOMIC DIRECTIVE
4007 #pragma omp atomic
4008   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4009   // expected-note@+1 {{expected an expression statement}}
4010   {
4011 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4012     for (int i = 0; i < 10; ++i)
4013       ;
4014   }
4015 #pragma omp atomic
4016   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4017   // expected-note@+1 {{expected an expression statement}}
4018   {
4019 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4020     for (int i = 0; i < 10; ++i)
4021       ;
4022   }
4023 #pragma omp atomic
4024   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4025   // expected-note@+1 {{expected an expression statement}}
4026   {
4027 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4028     for (int i = 0; i < 10; ++i)
4029       ;
4030   }
4031 #pragma omp atomic
4032   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4033   // expected-note@+1 {{expected an expression statement}}
4034   {
4035 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4036     for (int i = 0; i < 10; ++i)
4037       ;
4038   }
4039 #pragma omp atomic
4040   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4041   // expected-note@+1 {{expected an expression statement}}
4042   {
4043 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4044     {
4045       bar();
4046     }
4047   }
4048 #pragma omp atomic
4049   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4050   // expected-note@+1 {{expected an expression statement}}
4051   {
4052 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4053     {
4054       bar();
4055     }
4056   }
4057 #pragma omp atomic
4058   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4059   // expected-note@+1 {{expected an expression statement}}
4060   {
4061 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4062     {
4063       bar();
4064     }
4065   }
4066 #pragma omp atomic
4067   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4068   // expected-note@+1 {{expected an expression statement}}
4069   {
4070 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4071     {
4072       bar();
4073     }
4074   }
4075 #pragma omp atomic
4076   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4077   // expected-note@+1 {{expected an expression statement}}
4078   {
4079 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4080     {
4081       bar();
4082     }
4083   }
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 l-value expression with scalar type}}
4086   // expected-note@+1 {{expected an expression statement}}
4087   {
4088 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4089     {
4090       bar();
4091     }
4092   }
4093 #pragma omp atomic
4094   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4095   // expected-note@+1 {{expected an expression statement}}
4096   {
4097 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4098     for (int i = 0; i < 10; ++i)
4099       ;
4100   }
4101 #pragma omp atomic
4102   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4103   // expected-note@+1 {{expected an expression statement}}
4104   {
4105 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4106     for (int i = 0; i < 10; ++i)
4107       ;
4108   }
4109 #pragma omp atomic
4110   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4111   // expected-note@+1 {{expected an expression statement}}
4112   {
4113 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4114     {
4115       bar();
4116     }
4117   }
4118 #pragma omp atomic
4119   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4120   // expected-note@+1 {{expected an expression statement}}
4121   {
4122 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4123     {
4124       bar();
4125     }
4126   }
4127 #pragma omp atomic
4128   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4129   // expected-note@+1 {{expected an expression statement}}
4130   {
4131 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4132     bar();
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 l-value expression with scalar type}}
4136   // expected-note@+1 {{expected an expression statement}}
4137   {
4138 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4139     bar();
4140   }
4141 #pragma omp atomic
4142   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4143   // expected-note@+1 {{expected an expression statement}}
4144   {
4145 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4146     bar();
4147   }
4148 #pragma omp atomic
4149   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4150   // expected-note@+1 {{expected an expression statement}}
4151   {
4152 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4153     bar();
4154   }
4155 #pragma omp atomic
4156   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4157   // expected-note@+1 {{expected an expression statement}}
4158   {
4159 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4160     bar();
4161   }
4162 #pragma omp atomic
4163   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4164   // expected-note@+1 {{expected an expression statement}}
4165   {
4166 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4167     ++a;
4168   }
4169 #pragma omp atomic
4170   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4171   // expected-note@+1 {{expected an expression statement}}
4172   {
4173 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4174     ++a;
4175   }
4176 #pragma omp atomic
4177   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4178   // expected-note@+1 {{expected an expression statement}}
4179   {
4180 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4181     ++a;
4182   }
4183 #pragma omp atomic
4184   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4185   // expected-note@+1 {{expected an expression statement}}
4186   {
4187 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4188     for (int i = 0; i < 10; ++i)
4189       ;
4190   }
4191 #pragma omp atomic
4192   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4193   // expected-note@+1 {{expected an expression statement}}
4194   {
4195 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4196     ++a;
4197   }
4198 #pragma omp atomic
4199   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4200   // expected-note@+1 {{expected an expression statement}}
4201   {
4202 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4203     ++a;
4204   }
4205 #pragma omp atomic
4206   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4207   // expected-note@+1 {{expected an expression statement}}
4208   {
4209 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4210     ++a;
4211   }
4212 #pragma omp atomic
4213   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4214   // expected-note@+1 {{expected an expression statement}}
4215   {
4216 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4217   for (int i = 0; i < 10; ++i)
4218     ++a;
4219   }
4220 #pragma omp atomic
4221   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4222   // expected-note@+1 {{expected an expression statement}}
4223   {
4224 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4225     for (int i = 0; i < 10; ++i)
4226       ;
4227   }
4228 #pragma omp atomic
4229   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4230   // expected-note@+1 {{expected an expression statement}}
4231   {
4232 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4233     bar();
4234   }
4235 #pragma omp atomic
4236   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4237   // expected-note@+1 {{expected an expression statement}}
4238   {
4239 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4240     for (int i = 0; i < 10; ++i)
4241       ;
4242   }
4243 #pragma omp atomic
4244   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4245   // expected-note@+1 {{expected an expression statement}}
4246   {
4247 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4248     for (int i = 0; i < 10; ++i)
4249       ;
4250   }
4251 #pragma omp atomic
4252   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4253   // expected-note@+1 {{expected an expression statement}}
4254   {
4255 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4256     for (int i = 0; i < 10; ++i)
4257       ;
4258   }
4259 #pragma omp atomic
4260   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4261   // expected-note@+1 {{expected an expression statement}}
4262   {
4263 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4264     for (int i = 0; i < 10; ++i)
4265       ;
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 l-value expression with scalar type}}
4269   // expected-note@+1 {{expected an expression statement}}
4270   {
4271 #pragma omp teams distribute // 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 l-value expression with scalar type}}
4277   // expected-note@+1 {{expected an expression statement}}
4278   {
4279 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4280     for (int i = 0; i < 10; ++i)
4281       ;
4282   }
4283 #pragma omp atomic
4284   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4285   // expected-note@+1 {{expected an expression statement}}
4286   {
4287 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4288     for (int i = 0; i < 10; ++i)
4289       ;
4290   }
4291 #pragma omp atomic
4292   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4293   // expected-note@+1 {{expected an expression statement}}
4294   {
4295 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4296     for (int i = 0; i < 10; ++i)
4297       ;
4298   }
4299 #pragma omp atomic
4300   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4301   // expected-note@+1 {{expected an expression statement}}
4302   {
4303 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4304     a++;
4305   }
4306 #pragma omp atomic
4307   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4308   // expected-note@+1 {{expected an expression statement}}
4309   {
4310 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4311     for (int i = 0; i < 10; ++i)
4312       ;
4313   }
4314 #pragma omp atomic
4315   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4316   // expected-note@+1 {{expected an expression statement}}
4317   {
4318 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4319     for (int i = 0; i < 10; ++i)
4320       ;
4321   }
4322 #pragma omp atomic
4323   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4324   // expected-note@+1 {{expected an expression statement}}
4325   {
4326 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4327     for (int i = 0; i < 10; ++i)
4328       ;
4329   }
4330 #pragma omp atomic
4331   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
4332   // expected-note@+1 {{expected an expression statement}}
4333   {
4334 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4335     for (int i = 0; i < 10; ++i)
4336       ;
4337   }
4338 
4339 // TARGET DIRECTIVE
4340 #pragma omp target
4341 #pragma omp parallel
4342   bar();
4343 #pragma omp target
4344 #pragma omp for
4345   for (int i = 0; i < 10; ++i)
4346     ;
4347 #pragma omp target
4348 #pragma omp simd
4349   for (int i = 0; i < 10; ++i)
4350     ;
4351 #pragma omp target
4352 #pragma omp for simd
4353   for (int i = 0; i < 10; ++i)
4354     ;
4355 #pragma omp target
4356 #pragma omp sections
4357   {
4358     bar();
4359   }
4360 #pragma omp target
4361 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
4362   {
4363     bar();
4364   }
4365 #pragma omp target
4366 #pragma omp single
4367   bar();
4368 
4369 #pragma omp target
4370 #pragma omp master
4371   {
4372     bar();
4373   }
4374 #pragma omp target
4375 #pragma omp critical
4376   {
4377     bar();
4378   }
4379 #pragma omp target
4380 #pragma omp parallel for
4381   for (int i = 0; i < 10; ++i)
4382     ;
4383 #pragma omp target
4384 #pragma omp parallel for simd
4385   for (int i = 0; i < 10; ++i)
4386     ;
4387 #pragma omp target
4388 #pragma omp parallel sections
4389   {
4390     bar();
4391   }
4392 #pragma omp target
4393 #pragma omp task
4394   {
4395     bar();
4396   }
4397 #pragma omp target
4398   {
4399 #pragma omp taskyield
4400     bar();
4401   }
4402 #pragma omp target
4403   {
4404 #pragma omp barrier
4405     bar();
4406   }
4407 #pragma omp target
4408   {
4409 #pragma omp taskwait
4410     bar();
4411   }
4412 #pragma omp target
4413   {
4414 #pragma omp flush
4415     bar();
4416   }
4417 #pragma omp target
4418   {
4419 #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?}}
4420     bar();
4421   }
4422 #pragma omp target
4423   {
4424 #pragma omp atomic
4425     ++a;
4426   }
4427 #pragma omp target
4428   {
4429 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4430     ++a;
4431   }
4432 #pragma omp target
4433   {
4434 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4435     ++a;
4436   }
4437 #pragma omp target
4438 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4439   for (int i = 0; i < 10; ++i)
4440     ;
4441 #pragma omp target
4442   {
4443 #pragma omp teams
4444     ++a;
4445   }
4446 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4447   {
4448 #pragma omp teams // expected-note {{directive outside teams construct here}}
4449     ++a;
4450 #pragma omp teams // expected-note {{nested teams construct here}}
4451     ++a;
4452   }
4453 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4454   {
4455     ++a;           // expected-note {{statement outside teams construct here}}
4456 #pragma omp teams  // expected-note {{nested teams construct here}}
4457     ++a;
4458   }
4459 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4460   {
4461     while (0)      // expected-note {{statement outside teams construct here}}
4462 #pragma omp teams  // expected-note {{nested teams construct here}}
4463     ++a;
4464   }
4465 #pragma omp target
4466   {
4467 #pragma omp taskloop
4468   for (int i = 0; i < 10; ++i)
4469     ++a;
4470   }
4471 #pragma omp target
4472   {
4473 #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?}}
4474     for (int i = 0; i < 10; ++i)
4475       ;
4476   }
4477 #pragma omp target
4478   {
4479 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4480   }
4481 #pragma omp target
4482   {
4483 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4484   }
4485 #pragma omp target
4486   {
4487 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4488   }
4489 #pragma omp target
4490   {
4491 #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?}}
4492     for (int i = 0; i < 10; ++i)
4493       ;
4494   }
4495 #pragma omp target
4496   {
4497 #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?}}
4498     for (int i = 0; i < 10; ++i)
4499       ;
4500   }
4501 #pragma omp target
4502   {
4503 #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?}}
4504     for (int i = 0; i < 10; ++i)
4505       ;
4506   }
4507 #pragma omp target
4508   {
4509 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4510     for (int i = 0; i < 10; ++i)
4511       ;
4512   }
4513 #pragma omp target
4514   {
4515 #pragma omp teams distribute // OK
4516     for (int i = 0; i < 10; ++i)
4517       ;
4518   }
4519 #pragma omp target
4520   {
4521 #pragma omp teams distribute simd // OK
4522     for (int i = 0; i < 10; ++i)
4523       ;
4524   }
4525 #pragma omp target
4526   {
4527 #pragma omp teams distribute parallel for simd // OK
4528     for (int i = 0; i < 10; ++i)
4529       ;
4530   }
4531 #pragma omp target
4532   {
4533 #pragma omp teams distribute parallel for // OK
4534     for (int i = 0; i < 10; ++i)
4535       ;
4536   }
4537 #pragma omp target
4538   {
4539 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4540     for (int i = 0; i < 10; ++i)
4541       ;
4542   }
4543 #pragma omp target
4544   {
4545 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4546     for (int i = 0; i < 10; ++i)
4547       ;
4548   }
4549 #pragma omp target
4550   {
4551 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4552     for (int i = 0; i < 10; ++i)
4553       ;
4554   }
4555 #pragma omp target
4556   {
4557 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4558     for (int i = 0; i < 10; ++i)
4559       ;
4560   }
4561 #pragma omp target
4562   {
4563 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4564     for (int i = 0; i < 10; ++i)
4565       ;
4566   }
4567 
4568 // TARGET PARALLEL DIRECTIVE
4569 #pragma omp target parallel
4570 #pragma omp parallel
4571   bar();
4572 #pragma omp target parallel
4573 #pragma omp for
4574   for (int i = 0; i < 10; ++i)
4575     ;
4576 #pragma omp target parallel
4577 #pragma omp simd
4578   for (int i = 0; i < 10; ++i)
4579     ;
4580 #pragma omp target parallel
4581 #pragma omp for simd
4582   for (int i = 0; i < 10; ++i)
4583     ;
4584 #pragma omp target parallel
4585 #pragma omp sections
4586   {
4587     bar();
4588   }
4589 #pragma omp target parallel
4590 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
4591   {
4592     bar();
4593   }
4594 #pragma omp target parallel
4595 #pragma omp single
4596   bar();
4597 
4598 #pragma omp target parallel
4599 #pragma omp master
4600   {
4601     bar();
4602   }
4603 #pragma omp target
4604 #pragma omp parallel master
4605   {
4606     bar();
4607   }
4608 #pragma omp target parallel
4609 #pragma omp critical
4610   {
4611     bar();
4612   }
4613 #pragma omp target parallel
4614 #pragma omp parallel for
4615   for (int i = 0; i < 10; ++i)
4616     ;
4617 #pragma omp target parallel
4618 #pragma omp parallel for simd
4619   for (int i = 0; i < 10; ++i)
4620     ;
4621 #pragma omp target parallel
4622 #pragma omp parallel sections
4623   {
4624     bar();
4625   }
4626 #pragma omp target parallel
4627 #pragma omp task
4628   {
4629     bar();
4630   }
4631 #pragma omp target parallel
4632   {
4633 #pragma omp taskyield
4634     bar();
4635   }
4636 #pragma omp target parallel
4637   {
4638 #pragma omp barrier
4639     bar();
4640   }
4641 #pragma omp target parallel
4642   {
4643 #pragma omp taskwait
4644     bar();
4645   }
4646 #pragma omp target parallel
4647   {
4648 #pragma omp flush
4649     bar();
4650   }
4651 #pragma omp target parallel
4652   {
4653 #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?}}
4654     bar();
4655   }
4656 #pragma omp target parallel
4657   {
4658 #pragma omp atomic
4659     ++a;
4660   }
4661 #pragma omp target parallel
4662   {
4663 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
4664     ++a;
4665   }
4666 #pragma omp target parallel
4667   {
4668 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
4669     ++a;
4670   }
4671 #pragma omp target parallel
4672 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4673   for (int i = 0; i < 10; ++i)
4674     ;
4675 #pragma omp target parallel
4676   {
4677 #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?}}
4678     ++a;
4679   }
4680 #pragma omp target parallel
4681   {
4682     ++a;
4683 #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?}}
4684     ++a;
4685   }
4686 #pragma omp target parallel
4687   {
4688 #pragma omp taskloop
4689   for (int i = 0; i < 10; ++i)
4690     ++a;
4691   }
4692 #pragma omp target parallel
4693   {
4694 #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?}}
4695     for (int i = 0; i < 10; ++i)
4696       ;
4697   }
4698 #pragma omp target parallel
4699   {
4700 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4701   }
4702 #pragma omp target parallel
4703   {
4704 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4705   }
4706 #pragma omp target parallel
4707   {
4708 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4709   }
4710 #pragma omp target parallel
4711   {
4712 #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?}}
4713     for (int i = 0; i < 10; ++i)
4714       ;
4715   }
4716 #pragma omp target parallel
4717   {
4718 #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?}}
4719     for (int i = 0; i < 10; ++i)
4720       ;
4721   }
4722 #pragma omp target parallel
4723   {
4724 #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?}}
4725     for (int i = 0; i < 10; ++i)
4726       ;
4727   }
4728 #pragma omp target parallel
4729   {
4730 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4731     for (int i = 0; i < 10; ++i)
4732       ;
4733   }
4734 #pragma omp target parallel
4735   {
4736 #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?}}
4737     for (int i = 0; i < 10; ++i)
4738       ;
4739   }
4740 #pragma omp target parallel
4741   {
4742 #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?}}
4743     for (int i = 0; i < 10; ++i)
4744       ;
4745   }
4746 #pragma omp target parallel
4747   {
4748 #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?}}
4749     for (int i = 0; i < 10; ++i)
4750       ;
4751   }
4752 #pragma omp target parallel
4753   {
4754 #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?}}
4755     for (int i = 0; i < 10; ++i)
4756       ;
4757   }
4758 #pragma omp target parallel
4759   {
4760 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
4761     a++;
4762   }
4763 #pragma omp target parallel
4764   {
4765 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
4766     for (int i = 0; i < 10; ++i)
4767       ;
4768   }
4769 #pragma omp target parallel
4770   {
4771 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4772     for (int i = 0; i < 10; ++i)
4773       ;
4774   }
4775 #pragma omp target parallel
4776   {
4777 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4778     for (int i = 0; i < 10; ++i)
4779       ;
4780   }
4781 #pragma omp target parallel
4782   {
4783 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4784     for (int i = 0; i < 10; ++i)
4785       ;
4786   }
4787 
4788 // TARGET PARALLEL FOR DIRECTIVE
4789 #pragma omp target parallel for
4790   for (int i = 0; i < 10; ++i) {
4791 #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?}}
4792     for (int i = 0; i < 10; ++i)
4793       ;
4794   }
4795 #pragma omp target parallel for
4796   for (int i = 0; i < 10; ++i) {
4797 #pragma omp simd
4798     for (int i = 0; i < 10; ++i)
4799       ;
4800   }
4801 #pragma omp target parallel for
4802   for (int i = 0; i < 10; ++i) {
4803 #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?}}
4804     for (int i = 0; i < 10; ++i)
4805       ;
4806   }
4807 #pragma omp target parallel for
4808   for (int i = 0; i < 10; ++i) {
4809 #pragma omp parallel
4810     for (int i = 0; i < 10; ++i)
4811       ;
4812   }
4813 #pragma omp target parallel for
4814   for (int i = 0; i < 10; ++i) {
4815 #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?}}
4816     {
4817       bar();
4818     }
4819   }
4820 #pragma omp target parallel for
4821   for (int i = 0; i < 10; ++i) {
4822 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
4823     {
4824       bar();
4825     }
4826   }
4827 #pragma omp target parallel for
4828   for (int i = 0; i < 10; ++i) {
4829 #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?}}
4830     {
4831       bar();
4832     }
4833   }
4834 
4835 #pragma omp target parallel for
4836   for (int i = 0; i < 10; ++i) {
4837 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4838     {
4839       bar();
4840     }
4841   }
4842 
4843 #pragma omp target parallel for
4844   for (int i = 0; i < 10; ++i) {
4845 #pragma omp critical
4846     {
4847       bar();
4848     }
4849   }
4850 
4851 #pragma omp target parallel for
4852   for (int i = 0; i < 10; ++i) {
4853 #pragma omp parallel
4854     {
4855 #pragma omp single // OK
4856       {
4857         bar();
4858       }
4859 #pragma omp for // OK
4860       for (int i = 0; i < 10; ++i)
4861         ;
4862 #pragma omp for simd // OK
4863       for (int i = 0; i < 10; ++i)
4864         ;
4865 #pragma omp sections // OK
4866       {
4867         bar();
4868       }
4869     }
4870   }
4871 #pragma omp target parallel for
4872   for (int i = 0; i < 10; ++i) {
4873 #pragma omp parallel for
4874     for (int i = 0; i < 10; ++i)
4875       ;
4876   }
4877 #pragma omp target parallel for
4878   for (int i = 0; i < 10; ++i) {
4879 #pragma omp parallel for simd
4880     for (int i = 0; i < 10; ++i)
4881       ;
4882   }
4883 #pragma omp target parallel for
4884   for (int i = 0; i < 10; ++i) {
4885 #pragma omp parallel sections
4886     {
4887       bar();
4888     }
4889   }
4890 #pragma omp target parallel for
4891   for (int i = 0; i < 10; ++i) {
4892 #pragma omp task
4893     {
4894       bar();
4895     }
4896   }
4897 #pragma omp target parallel for
4898   for (int i = 0; i < 10; ++i) {
4899 #pragma omp taskyield
4900     bar();
4901   }
4902 #pragma omp target parallel for
4903   for (int i = 0; i < 10; ++i) {
4904 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4905     bar();
4906   }
4907 #pragma omp target parallel for
4908   for (int i = 0; i < 10; ++i) {
4909 #pragma omp taskwait
4910     bar();
4911   }
4912 #pragma omp target parallel for
4913   for (int i = 0; i < 10; ++i) {
4914 #pragma omp flush
4915     bar();
4916   }
4917 #pragma omp target parallel for
4918   for (int i = 0; i < 10; ++i) {
4919 #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?}}
4920     bar();
4921   }
4922 #pragma omp target parallel for ordered
4923   for (int i = 0; i < 10; ++i) {
4924 #pragma omp ordered // OK
4925     bar();
4926   }
4927 #pragma omp target parallel for
4928   for (int i = 0; i < 10; ++i) {
4929 #pragma omp atomic
4930     ++a;
4931   }
4932 #pragma omp target parallel for
4933   for (int i = 0; i < 10; ++i) {
4934 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
4935     ++a;
4936   }
4937 #pragma omp target parallel for
4938   for (int i = 0; i < 10; ++i) {
4939 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
4940     ++a;
4941   }
4942 #pragma omp target parallel for
4943   for (int i = 0; i < 10; ++i) {
4944 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4945     for (int i = 0; i < 10; ++i)
4946       ;
4947   }
4948 #pragma omp target parallel for
4949   for (int i = 0; i < 10; ++i) {
4950 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4951     ++a;
4952   }
4953 #pragma omp target parallel for
4954   for (int i = 0; i < 10; ++i) {
4955 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4956     ++a;
4957   }
4958 #pragma omp target parallel for
4959   for (int i = 0; i < 10; ++i) {
4960 #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?}}
4961     ++a;
4962   }
4963 #pragma omp target parallel for
4964   for (int i = 0; i < 10; ++i) {
4965 #pragma omp taskloop
4966   for (int i = 0; i < 10; ++i)
4967     ++a;
4968   }
4969 #pragma omp target parallel for
4970   for (int i = 0; i < 10; ++i) {
4971 #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?}}
4972     for (int j = 0; j < 10; ++j)
4973       ;
4974   }
4975 #pragma omp target parallel for
4976   for (int i = 0; i < 10; ++i) {
4977 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4978   }
4979 #pragma omp target parallel for
4980   for (int i = 0; i < 10; ++i) {
4981 #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?}}
4982     for (int j = 0; j < 10; ++j)
4983       ;
4984   }
4985 #pragma omp target parallel for
4986   for (int i = 0; i < 10; ++i) {
4987 #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?}}
4988     for (int j = 0; j < 10; ++j)
4989       ;
4990   }
4991 #pragma omp target parallel for
4992   for (int i = 0; i < 10; ++i) {
4993 #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?}}
4994     for (int j = 0; j < 10; ++j)
4995       ;
4996   }
4997 #pragma omp target parallel for
4998   for (int i = 0; i < 10; ++i) {
4999 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5000     for (int j = 0; j < 10; ++j)
5001       ;
5002   }
5003 #pragma omp target parallel for
5004   for (int i = 0; i < 10; ++i) {
5005 #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?}}
5006     for (int j = 0; j < 10; ++j)
5007       ;
5008   }
5009 #pragma omp target parallel for
5010   for (int i = 0; i < 10; ++i) {
5011 #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?}}
5012     for (int j = 0; j < 10; ++j)
5013       ;
5014   }
5015 #pragma omp target parallel for
5016   for (int i = 0; i < 10; ++i) {
5017 #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?}}
5018     for (int j = 0; j < 10; ++j)
5019       ;
5020   }
5021 #pragma omp target parallel for
5022   for (int i = 0; i < 10; ++i) {
5023 #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?}}
5024     for (int j = 0; j < 10; ++j)
5025       ;
5026   }
5027 #pragma omp target parallel for
5028   for (int i = 0; i < 10; ++i) {
5029 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
5030     a++;
5031   }
5032 #pragma omp target parallel for
5033   for (int i = 0; i < 10; ++i) {
5034 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
5035     for (int j = 0; j < 10; ++j)
5036       ;
5037   }
5038 #pragma omp target parallel for
5039   for (int i = 0; i < 10; ++i) {
5040 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
5041     for (int j = 0; j < 10; ++j)
5042       ;
5043   }
5044 #pragma omp target parallel for
5045   for (int i = 0; i < 10; ++i) {
5046 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5047     for (int j = 0; j < 10; ++j)
5048       ;
5049   }
5050 #pragma omp target parallel for
5051   for (int i = 0; i < 10; ++i) {
5052 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5053     for (int j = 0; j < 10; ++j)
5054       ;
5055   }
5056 
5057 // TEAMS DIRECTIVE
5058 #pragma omp teams // omp45-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5059   bar();
5060 #pragma omp target
5061 #pragma omp teams
5062 #pragma omp parallel
5063   bar();
5064 #pragma omp target
5065 #pragma omp teams
5066 #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?}}
5067   for (int i = 0; i < 10; ++i)
5068     ;
5069 #pragma omp target
5070 #pragma omp teams
5071 #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?}}
5072   for (int i = 0; i < 10; ++i)
5073     ;
5074 #pragma omp target
5075 #pragma omp teams
5076 #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?}}
5077   for (int i = 0; i < 10; ++i)
5078     ;
5079 #pragma omp target
5080 #pragma omp teams
5081 #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?}}
5082   {
5083     bar();
5084   }
5085 #pragma omp target
5086 #pragma omp teams
5087 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
5088   {
5089     bar();
5090   }
5091 #pragma omp target
5092 #pragma omp teams
5093 #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?}}
5094   bar();
5095 
5096 #pragma omp target
5097 #pragma omp teams
5098 #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?}}
5099   {
5100     bar();
5101   }
5102 #pragma omp target
5103 #pragma omp teams
5104 #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?}}
5105   {
5106     bar();
5107   }
5108 #pragma omp target
5109 #pragma omp teams
5110 #pragma omp parallel for
5111   for (int i = 0; i < 10; ++i)
5112     ;
5113 #pragma omp target
5114 #pragma omp teams
5115 #pragma omp parallel for simd
5116   for (int i = 0; i < 10; ++i)
5117     ;
5118 #pragma omp target
5119 #pragma omp teams
5120 #pragma omp parallel sections
5121   {
5122     bar();
5123   }
5124 #pragma omp target
5125 #pragma omp teams
5126 #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?}}
5127   {
5128     bar();
5129   }
5130 #pragma omp target
5131 #pragma omp teams
5132   {
5133 #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?}}
5134     bar();
5135   }
5136 #pragma omp target
5137 #pragma omp teams
5138   {
5139 #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?}}
5140     bar();
5141   }
5142 #pragma omp target
5143 #pragma omp teams
5144   {
5145 #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?}}
5146     bar();
5147   }
5148 #pragma omp target
5149 #pragma omp teams
5150   {
5151 #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?}}
5152     bar();
5153   }
5154 #pragma omp target
5155 #pragma omp teams
5156   {
5157 #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?}}
5158     bar();
5159   }
5160 #pragma omp target
5161 #pragma omp teams
5162   {
5163 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
5164     ++a;
5165   }
5166 #pragma omp target
5167 #pragma omp teams
5168   {
5169 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5170     ++a;
5171   }
5172 #pragma omp target
5173 #pragma omp teams
5174   {
5175 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5176     ++a;
5177   }
5178 #pragma omp target
5179 #pragma omp teams
5180 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5181   for (int i = 0; i < 10; ++i)
5182     ;
5183 #pragma omp target
5184 #pragma omp teams
5185   {
5186 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5187     ++a;
5188   }
5189 #pragma omp target
5190 #pragma omp teams
5191   {
5192 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5193     ++a;
5194   }
5195 #pragma omp target
5196 #pragma omp teams
5197   {
5198 #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?}}
5199     ++a;
5200   }
5201 #pragma omp target
5202 #pragma omp teams
5203   {
5204 #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?}}
5205   for (int i = 0; i < 10; ++i)
5206     ++a;
5207   }
5208 #pragma omp target
5209 #pragma omp teams
5210 #pragma omp distribute
5211   for (int i = 0; i < 10; ++i)
5212     ;
5213 #pragma omp target
5214 #pragma omp teams
5215 #pragma omp distribute
5216   for (int i = 0; i < 10; ++i)
5217     ;
5218 #pragma omp distribute
5219   for (int j = 0; j < 10; ++j)
5220     ;
5221 #pragma omp target
5222 #pragma omp teams
5223   {
5224 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5225   }
5226 #pragma omp target
5227 #pragma omp teams
5228   {
5229 #pragma omp distribute parallel for
5230   for (int i = 0; i < 10; ++i)
5231     ;
5232 #pragma omp distribute parallel for
5233   for (int j = 0; j < 10; ++j)
5234     ;
5235   }
5236 #pragma omp target
5237 #pragma omp teams
5238   {
5239 #pragma omp distribute parallel for simd
5240   for (int i = 0; i < 10; ++i)
5241     ;
5242 #pragma omp distribute parallel for simd
5243   for (int j = 0; j < 10; ++j)
5244     ;
5245   }
5246 #pragma omp target
5247 #pragma omp teams
5248   {
5249 #pragma omp distribute simd
5250   for (int i = 0; i < 10; ++i)
5251     ;
5252 #pragma omp distribute simd
5253   for (int j = 0; j < 10; ++j)
5254     ;
5255   }
5256 #pragma omp target
5257 #pragma omp teams
5258   {
5259 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5260   for (int i = 0; i < 10; ++i)
5261     ;
5262   }
5263 #pragma omp target
5264 #pragma omp teams
5265   {
5266 #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?}}
5267   for (int i = 0; i < 10; ++i)
5268     ;
5269   }
5270 #pragma omp target
5271 #pragma omp teams
5272   {
5273 #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?}}
5274   for (int i = 0; i < 10; ++i)
5275     ;
5276   }
5277 #pragma omp target
5278 #pragma omp teams
5279   {
5280 #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?}}
5281   for (int i = 0; i < 10; ++i)
5282     ;
5283   }
5284 #pragma omp target
5285 #pragma omp teams
5286   {
5287 #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?}}
5288   for (int i = 0; i < 10; ++i)
5289     ;
5290   }
5291 #pragma omp target
5292 #pragma omp teams
5293   {
5294 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5295     a++;
5296   }
5297 #pragma omp target
5298 #pragma omp teams
5299   {
5300 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5301   for (int i = 0; i < 10; ++i)
5302     ;
5303   }
5304 #pragma omp target
5305 #pragma omp teams
5306   {
5307 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5308   for (int i = 0; i < 10; ++i)
5309     ;
5310   }
5311 #pragma omp target
5312 #pragma omp teams
5313   {
5314 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5315   for (int i = 0; i < 10; ++i)
5316     ;
5317   }
5318 #pragma omp target
5319 #pragma omp teams
5320   {
5321 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5322   for (int i = 0; i < 10; ++i)
5323     ;
5324   }
5325 
5326 // TASKLOOP DIRECTIVE
5327 #pragma omp taskloop
5328   for (int i = 0; i < 10; ++i) {
5329 #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?}}
5330     for (int i = 0; i < 10; ++i)
5331       ;
5332   }
5333 #pragma omp taskloop
5334   for (int i = 0; i < 10; ++i) {
5335 #pragma omp simd
5336     for (int i = 0; i < 10; ++i)
5337       ;
5338   }
5339 #pragma omp taskloop
5340   for (int i = 0; i < 10; ++i) {
5341 #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?}}
5342     for (int i = 0; i < 10; ++i)
5343       ;
5344   }
5345 #pragma omp taskloop
5346   for (int i = 0; i < 10; ++i) {
5347 #pragma omp parallel
5348     for (int i = 0; i < 10; ++i)
5349       ;
5350   }
5351 #pragma omp taskloop
5352   for (int i = 0; i < 10; ++i) {
5353 #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?}}
5354     {
5355       bar();
5356     }
5357   }
5358 #pragma omp taskloop
5359   for (int i = 0; i < 10; ++i) {
5360 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
5361     {
5362       bar();
5363     }
5364   }
5365 #pragma omp taskloop
5366   for (int i = 0; i < 10; ++i) {
5367 #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?}}
5368     {
5369       bar();
5370     }
5371   }
5372 
5373 #pragma omp taskloop
5374   for (int i = 0; i < 10; ++i) {
5375 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5376     {
5377       bar();
5378     }
5379   }
5380 #pragma omp taskloop
5381   for (int i = 0; i < 10; ++i) {
5382 #pragma omp critical
5383     {
5384       bar();
5385     }
5386   }
5387 #pragma omp taskloop
5388   for (int i = 0; i < 10; ++i) {
5389 #pragma omp parallel
5390     {
5391 #pragma omp single // OK
5392       {
5393         bar();
5394       }
5395 #pragma omp for // OK
5396       for (int i = 0; i < 10; ++i)
5397         ;
5398 #pragma omp sections // OK
5399       {
5400         bar();
5401       }
5402     }
5403   }
5404 #pragma omp taskloop
5405   for (int i = 0; i < 10; ++i) {
5406 #pragma omp parallel for
5407     for (int i = 0; i < 10; ++i)
5408       ;
5409   }
5410 #pragma omp taskloop
5411   for (int i = 0; i < 10; ++i) {
5412 #pragma omp parallel for simd
5413     for (int i = 0; i < 10; ++i)
5414       ;
5415   }
5416 #pragma omp taskloop
5417   for (int i = 0; i < 10; ++i) {
5418 #pragma omp parallel sections
5419     {
5420       bar();
5421     }
5422   }
5423 #pragma omp taskloop
5424   for (int i = 0; i < 10; ++i) {
5425 #pragma omp task
5426     {
5427       bar();
5428     }
5429   }
5430 #pragma omp taskloop
5431   for (int i = 0; i < 10; ++i) {
5432 #pragma omp taskyield
5433     bar();
5434   }
5435 #pragma omp taskloop
5436   for (int i = 0; i < 10; ++i) {
5437 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5438     bar();
5439   }
5440 #pragma omp taskloop
5441   for (int i = 0; i < 10; ++i) {
5442 #pragma omp taskwait
5443     bar();
5444   }
5445 #pragma omp taskloop
5446   for (int i = 0; i < 10; ++i) {
5447 #pragma omp flush
5448     bar();
5449   }
5450 #pragma omp taskloop
5451   for (int i = 0; i < 10; ++i) {
5452 #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?}}
5453     bar();
5454   }
5455 #pragma omp taskloop
5456   for (int i = 0; i < 10; ++i) {
5457 #pragma omp atomic
5458     ++a;
5459   }
5460 #pragma omp taskloop
5461   for (int i = 0; i < 10; ++i) {
5462 #pragma omp target
5463     ++a;
5464   }
5465 #pragma omp taskloop
5466   for (int i = 0; i < 10; ++i) {
5467 #pragma omp target parallel
5468     ++a;
5469   }
5470 #pragma omp taskloop
5471   for (int i = 0; i < 10; ++i) {
5472 #pragma omp target parallel for
5473     for (int i = 0; i < 10; ++i)
5474       ;
5475   }
5476 #pragma omp taskloop
5477   for (int i = 0; i < 10; ++i) {
5478 #pragma omp target enter data map(to: a)
5479     ++a;
5480   }
5481 #pragma omp taskloop
5482   for (int i = 0; i < 10; ++i) {
5483 #pragma omp target exit data map(from: a)
5484     ++a;
5485   }
5486 #pragma omp taskloop
5487   for (int i = 0; i < 10; ++i) {
5488 #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?}}
5489     ++a;
5490   }
5491 #pragma omp taskloop
5492   for (int i = 0; i < 10; ++i) {
5493 #pragma omp taskloop
5494   for (int i = 0; i < 10; ++i)
5495     ++a;
5496   }
5497 #pragma omp taskloop
5498   for (int i = 0; i < 10; ++i) {
5499 #pragma omp target update to(a)
5500     bar();
5501   }
5502 #pragma omp taskloop
5503   for (int i = 0; i < 10; ++i) {
5504 #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?}}
5505   for (int j = 0; j < 10; ++j)
5506     ++a;
5507   }
5508 #pragma omp taskloop
5509   for (int i = 0; i < 10; ++i) {
5510 #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?}}
5511   for (int j = 0; j < 10; ++j)
5512     ++a;
5513   }
5514 #pragma omp taskloop
5515   for (int i = 0; i < 10; ++i) {
5516 #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?}}
5517   for (int j = 0; j < 10; ++j)
5518     ++a;
5519   }
5520 #pragma omp taskloop
5521   for (int i = 0; i < 10; ++i) {
5522 #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?}}
5523   for (int j = 0; j < 10; ++j)
5524     ++a;
5525   }
5526 #pragma omp taskloop
5527   for (int i = 0; i < 10; ++i) {
5528 #pragma omp target simd // OK
5529   for (int j = 0; j < 10; ++j)
5530     ++a;
5531   }
5532 #pragma omp taskloop
5533   for (int i = 0; i < 10; ++i) {
5534 #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?}}
5535   for (int j = 0; j < 10; ++j)
5536     ++a;
5537   }
5538 #pragma omp taskloop
5539   for (int i = 0; i < 10; ++i) {
5540 #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?}}
5541   for (int j = 0; j < 10; ++j)
5542     ++a;
5543   }
5544 #pragma omp taskloop
5545   for (int i = 0; i < 10; ++i) {
5546 #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?}}
5547   for (int j = 0; j < 10; ++j)
5548     ++a;
5549   }
5550 #pragma omp taskloop
5551   for (int i = 0; i < 10; ++i) {
5552 #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?}}
5553   for (int j = 0; j < 10; ++j)
5554     ++a;
5555   }
5556 #pragma omp taskloop
5557   for (int i = 0; i < 10; ++i) {
5558 #pragma omp target teams // OK
5559     ++a;
5560   }
5561 #pragma omp taskloop
5562   for (int i = 0; i < 10; ++i) {
5563 #pragma omp target teams distribute // OK
5564   for (int j = 0; j < 10; ++j)
5565     ++a;
5566   }
5567 #pragma omp taskloop
5568   for (int i = 0; i < 10; ++i) {
5569 #pragma omp target teams distribute parallel for // OK
5570   for (int j = 0; j < 10; ++j)
5571     ++a;
5572   }
5573 #pragma omp taskloop
5574   for (int i = 0; i < 10; ++i) {
5575 #pragma omp target teams distribute parallel for simd // OK
5576   for (int j = 0; j < 10; ++j)
5577     ++a;
5578   }
5579 #pragma omp taskloop
5580   for (int i = 0; i < 10; ++i) {
5581 #pragma omp target teams distribute simd // OK
5582   for (int j = 0; j < 10; ++j)
5583     ++a;
5584   }
5585 #pragma omp taskloop
5586   for (int i = 0; i < 10; ++i) {
5587 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
5588 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
5589   }
5590 #pragma omp taskloop
5591   for (int i = 0; i < 10; ++i) {
5592 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5593 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5594   }
5595 #pragma omp master taskloop
5596   for (int i = 0; i < 10; ++i) {
5597 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
5598 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
5599   }
5600 #pragma omp master taskloop
5601   for (int i = 0; i < 10; ++i) {
5602 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
5603 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
5604   }
5605 #pragma omp parallel master taskloop
5606   for (int i = 0; i < 10; ++i) {
5607 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5608 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5609   }
5610 #pragma omp parallel master taskloop
5611   for (int i = 0; i < 10; ++i) {
5612 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5613 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5614   }
5615 
5616 // DISTRIBUTE DIRECTIVE
5617 #pragma omp target
5618 #pragma omp teams
5619 #pragma omp distribute
5620   for (int i = 0; i < 10; ++i) {
5621 #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?}}
5622     for (int i = 0; i < 10; ++i)
5623       ;
5624   }
5625 #pragma omp target
5626 #pragma omp teams
5627 #pragma omp distribute
5628   for (int i = 0; i < 10; ++i) {
5629 #pragma omp for
5630     for (int i = 0; i < 10; ++i)
5631       ;
5632   }
5633 #pragma omp target
5634 #pragma omp teams
5635 #pragma omp distribute
5636   for (int i = 0; i < 10; ++i) {
5637 #pragma omp simd
5638     for (int i = 0; i < 10; ++i)
5639       ;
5640   }
5641 #pragma omp target
5642 #pragma omp teams
5643 #pragma omp distribute
5644   for (int i = 0; i < 10; ++i) {
5645 #pragma omp for simd
5646     for (int i = 0; i < 10; ++i)
5647       ;
5648   }
5649 #pragma omp target
5650 #pragma omp teams
5651 #pragma omp distribute
5652   for (int i = 0; i < 10; ++i) {
5653 #pragma omp parallel
5654     for (int i = 0; i < 10; ++i)
5655       ;
5656   }
5657 #pragma omp target
5658 #pragma omp teams
5659 #pragma omp distribute
5660   for (int i = 0; i < 10; ++i) {
5661 #pragma omp sections
5662     {
5663       bar();
5664     }
5665   }
5666 #pragma omp target
5667 #pragma omp teams
5668 #pragma omp distribute
5669   for (int i = 0; i < 10; ++i) {
5670 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
5671     {
5672       bar();
5673     }
5674   }
5675 #pragma omp target
5676 #pragma omp teams
5677 #pragma omp distribute
5678   for (int i = 0; i < 10; ++i) {
5679 #pragma omp single
5680     {
5681       bar();
5682     }
5683   }
5684 #pragma omp target
5685 #pragma omp teams
5686 #pragma omp distribute
5687   for (int i = 0; i < 10; ++i) {
5688 #pragma omp master
5689     {
5690       bar();
5691     }
5692   }
5693 #pragma omp target
5694 #pragma omp teams
5695 #pragma omp distribute
5696   for (int i = 0; i < 10; ++i) {
5697 #pragma omp critical
5698     {
5699       bar();
5700     }
5701   }
5702 #pragma omp target
5703 #pragma omp teams
5704 #pragma omp distribute
5705   for (int i = 0; i < 10; ++i) {
5706 #pragma omp parallel
5707     {
5708 #pragma omp single
5709       {
5710         bar();
5711       }
5712     }
5713   }
5714 #pragma omp target
5715 #pragma omp teams
5716 #pragma omp distribute
5717   for (int i = 0; i < 10; ++i) {
5718 #pragma omp parallel for
5719     for (int i = 0; i < 10; ++i)
5720       ;
5721   }
5722 #pragma omp target
5723 #pragma omp teams
5724 #pragma omp distribute
5725   for (int i = 0; i < 10; ++i) {
5726 #pragma omp parallel for simd
5727     for (int i = 0; i < 10; ++i)
5728       ;
5729   }
5730 #pragma omp target
5731 #pragma omp teams
5732 #pragma omp distribute
5733   for (int i = 0; i < 10; ++i) {
5734 #pragma omp parallel sections
5735     {
5736       bar();
5737     }
5738   }
5739 #pragma omp target
5740 #pragma omp teams
5741 #pragma omp distribute
5742   for (int i = 0; i < 10; ++i) {
5743 #pragma omp task
5744     {
5745       bar();
5746     }
5747   }
5748 #pragma omp target
5749 #pragma omp teams
5750 #pragma omp distribute
5751   for (int i = 0; i < 10; ++i) {
5752 #pragma omp taskyield
5753     bar();
5754   }
5755 #pragma omp target
5756 #pragma omp teams
5757 #pragma omp distribute
5758   for (int i = 0; i < 10; ++i) {
5759 #pragma omp barrier
5760     bar();
5761   }
5762 #pragma omp target
5763 #pragma omp teams
5764 #pragma omp distribute
5765   for (int i = 0; i < 10; ++i) {
5766 #pragma omp taskwait
5767     bar();
5768   }
5769 #pragma omp target
5770 #pragma omp teams
5771 #pragma omp distribute
5772   for (int i = 0; i < 10; ++i) {
5773 #pragma omp flush
5774     bar();
5775   }
5776 #pragma omp target
5777 #pragma omp teams
5778 #pragma omp distribute
5779   for (int i = 0; i < 10; ++i) {
5780 #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?}}
5781     bar();
5782   }
5783 #pragma omp target
5784 #pragma omp teams
5785 #pragma omp distribute
5786   for (int i = 0; i < 10; ++i) {
5787 #pragma omp atomic
5788     ++a;
5789   }
5790 #pragma omp target
5791 #pragma omp teams
5792 #pragma omp distribute
5793   for (int i = 0; i < 10; ++i) {
5794 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5795     ++a;
5796   }
5797 #pragma omp target
5798 #pragma omp teams
5799 #pragma omp distribute
5800   for (int i = 0; i < 10; ++i) {
5801 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5802     ++a;
5803   }
5804 #pragma omp target
5805 #pragma omp teams
5806 #pragma omp distribute
5807   for (int i = 0; i < 10; ++i) {
5808 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5809     for (int i = 0; i < 10; ++i)
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 target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5817     ++a;
5818   }
5819 #pragma omp target
5820 #pragma omp teams
5821 #pragma omp distribute
5822   for (int i = 0; i < 10; ++i) {
5823 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5824     ++a;
5825   }
5826 #pragma omp target
5827 #pragma omp teams
5828 #pragma omp distribute
5829   for (int i = 0; i < 10; ++i) {
5830 #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?}}
5831     ++a;
5832   }
5833 #pragma omp target
5834 #pragma omp teams
5835 #pragma omp distribute
5836   for (int i = 0; i < 10; ++i) {
5837 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5838     ++a;
5839   }
5840 #pragma omp target
5841 #pragma omp teams
5842 #pragma omp distribute
5843   for (int i = 0; i < 10; ++i) {
5844 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5845     for (int j = 0; j < 10; ++j)
5846       ;
5847   }
5848 #pragma omp target
5849 #pragma omp teams
5850 #pragma omp distribute
5851   for (int i = 0; i < 10; ++i) {
5852 #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?}}
5853     for (int j = 0; j < 10; ++j)
5854       ;
5855   }
5856 #pragma omp target
5857 #pragma omp teams
5858 #pragma omp distribute
5859   for (int i = 0; i < 10; ++i) {
5860 #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?}}
5861     for (int j = 0; j < 10; ++j)
5862       ;
5863   }
5864 #pragma omp target
5865 #pragma omp teams
5866 #pragma omp distribute
5867   for (int i = 0; i < 10; ++i) {
5868 #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?}}
5869     for (int j = 0; j < 10; ++j)
5870       ;
5871   }
5872 #pragma omp target
5873 #pragma omp teams
5874 #pragma omp distribute
5875   for (int i = 0; i < 10; ++i) {
5876 #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?}}
5877     for (int j = 0; j < 10; ++j)
5878       ;
5879   }
5880 #pragma omp target
5881 #pragma omp teams
5882 #pragma omp distribute
5883   for (int i = 0; i < 10; ++i) {
5884 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5885     a++;
5886   }
5887 #pragma omp target
5888 #pragma omp teams
5889 #pragma omp distribute
5890   for (int i = 0; i < 10; ++i) {
5891 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5892     for (int j = 0; j < 10; ++j)
5893       ;
5894   }
5895 #pragma omp target
5896 #pragma omp teams
5897 #pragma omp distribute
5898   for (int i = 0; i < 10; ++i) {
5899 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5900     for (int j = 0; j < 10; ++j)
5901       ;
5902   }
5903 #pragma omp target
5904 #pragma omp teams
5905 #pragma omp distribute
5906   for (int i = 0; i < 10; ++i) {
5907 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5908     for (int j = 0; j < 10; ++j)
5909       ;
5910   }
5911 #pragma omp target
5912 #pragma omp teams
5913 #pragma omp distribute
5914   for (int i = 0; i < 10; ++i) {
5915 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5916     for (int j = 0; j < 10; ++j)
5917       ;
5918   }
5919 
5920 // DISTRIBUTE PARALLEL FOR DIRECTIVE
5921 #pragma omp target
5922 #pragma omp teams
5923 #pragma omp distribute parallel for
5924   for (int i = 0; i < 10; ++i) {
5925 #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?}}
5926     for (int i = 0; i < 10; ++i)
5927       ;
5928   }
5929 #pragma omp target
5930 #pragma omp teams
5931 #pragma omp distribute parallel for
5932   for (int i = 0; i < 10; ++i) {
5933 #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?}}
5934     for (int i = 0; i < 10; ++i)
5935       ;
5936   }
5937 #pragma omp target
5938 #pragma omp teams
5939 #pragma omp distribute parallel for
5940   for (int i = 0; i < 10; ++i) {
5941 #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?}}
5942     for (int i = 0; i < 10; ++i)
5943       ;
5944   }
5945 #pragma omp target
5946 #pragma omp teams
5947 #pragma omp distribute parallel for
5948   for (int i = 0; i < 10; ++i) {
5949 #pragma omp simd
5950     for (int i = 0; i < 10; ++i)
5951       ;
5952   }
5953 #pragma omp target
5954 #pragma omp teams
5955 #pragma omp distribute parallel for
5956   for (int i = 0; i < 10; ++i) {
5957 #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?}}
5958     for (int i = 0; i < 10; ++i)
5959       ;
5960   }
5961 #pragma omp target
5962 #pragma omp teams
5963 #pragma omp distribute parallel for
5964   for (int i = 0; i < 10; ++i) {
5965 #pragma omp parallel
5966     for (int i = 0; i < 10; ++i)
5967       ;
5968   }
5969 #pragma omp target
5970 #pragma omp teams
5971 #pragma omp distribute parallel for
5972   for (int i = 0; i < 10; ++i) {
5973 #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?}}
5974     {
5975       bar();
5976     }
5977   }
5978 #pragma omp target
5979 #pragma omp teams
5980 #pragma omp distribute parallel for
5981   for (int i = 0; i < 10; ++i) {
5982 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
5983     {
5984       bar();
5985     }
5986   }
5987 #pragma omp target
5988 #pragma omp teams
5989 #pragma omp distribute parallel for
5990   for (int i = 0; i < 10; ++i) {
5991 #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?}}
5992     {
5993       bar();
5994     }
5995   }
5996 #pragma omp target
5997 #pragma omp teams
5998 #pragma omp distribute parallel for
5999   for (int i = 0; i < 10; ++i) {
6000 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6001     {
6002       bar();
6003     }
6004   }
6005 #pragma omp target
6006 #pragma omp teams
6007 #pragma omp distribute parallel for
6008   for (int i = 0; i < 10; ++i) {
6009 #pragma omp critical
6010     {
6011       bar();
6012     }
6013   }
6014 #pragma omp target
6015 #pragma omp teams
6016 #pragma omp distribute parallel for
6017   for (int i = 0; i < 10; ++i) {
6018 #pragma omp parallel
6019     {
6020 #pragma omp single
6021       {
6022         bar();
6023       }
6024     }
6025   }
6026 #pragma omp target
6027 #pragma omp teams
6028 #pragma omp distribute parallel for
6029   for (int i = 0; i < 10; ++i) {
6030 #pragma omp parallel for
6031     for (int i = 0; i < 10; ++i)
6032       ;
6033   }
6034 #pragma omp target
6035 #pragma omp teams
6036 #pragma omp distribute parallel for
6037   for (int i = 0; i < 10; ++i) {
6038 #pragma omp parallel for simd
6039     for (int i = 0; i < 10; ++i)
6040       ;
6041   }
6042 #pragma omp target
6043 #pragma omp teams
6044 #pragma omp distribute parallel for
6045   for (int i = 0; i < 10; ++i) {
6046 #pragma omp parallel sections
6047     {
6048       bar();
6049     }
6050   }
6051 #pragma omp target
6052 #pragma omp teams
6053 #pragma omp distribute parallel for
6054   for (int i = 0; i < 10; ++i) {
6055 #pragma omp task
6056     {
6057       bar();
6058     }
6059   }
6060 #pragma omp target
6061 #pragma omp teams
6062 #pragma omp distribute parallel for
6063   for (int i = 0; i < 10; ++i) {
6064 #pragma omp taskyield
6065     bar();
6066   }
6067 #pragma omp target
6068 #pragma omp teams
6069 #pragma omp distribute parallel for
6070   for (int i = 0; i < 10; ++i) {
6071 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6072     bar();
6073   }
6074 #pragma omp target
6075 #pragma omp teams
6076 #pragma omp distribute parallel for
6077   for (int i = 0; i < 10; ++i) {
6078 #pragma omp taskwait
6079     bar();
6080   }
6081 #pragma omp target
6082 #pragma omp teams
6083 #pragma omp distribute parallel for
6084   for (int i = 0; i < 10; ++i) {
6085 #pragma omp flush
6086     bar();
6087   }
6088 #pragma omp target
6089 #pragma omp teams
6090 #pragma omp distribute parallel for
6091   for (int i = 0; i < 10; ++i) {
6092 #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?}}
6093     bar();
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 atomic
6100     ++a;
6101   }
6102 #pragma omp target
6103 #pragma omp teams
6104 #pragma omp distribute parallel for
6105   for (int i = 0; i < 10; ++i) {
6106 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6107     ++a;
6108   }
6109 #pragma omp target
6110 #pragma omp teams
6111 #pragma omp distribute parallel for
6112   for (int i = 0; i < 10; ++i) {
6113 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
6114     ++a;
6115   }
6116 #pragma omp target
6117 #pragma omp teams
6118 #pragma omp distribute parallel for
6119   for (int i = 0; i < 10; ++i) {
6120 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6121     for (int i = 0; i < 10; ++i)
6122       ;
6123   }
6124 #pragma omp target
6125 #pragma omp teams
6126 #pragma omp distribute parallel for
6127   for (int i = 0; i < 10; ++i) {
6128 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6129     ++a;
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 target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6136     ++a;
6137   }
6138 #pragma omp target
6139 #pragma omp teams
6140 #pragma omp distribute parallel for
6141   for (int i = 0; i < 10; ++i) {
6142 #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?}}
6143     ++a;
6144   }
6145 #pragma omp target
6146 #pragma omp teams
6147 #pragma omp distribute parallel for
6148   for (int i = 0; i < 10; ++i) {
6149 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6150     ++a;
6151   }
6152 #pragma omp target
6153 #pragma omp teams
6154 #pragma omp distribute parallel for
6155   for (int i = 0; i < 10; ++i) {
6156 #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?}}
6157     for (int i = 0; i < 10; ++i)
6158       ;
6159   }
6160 #pragma omp target
6161 #pragma omp teams
6162 #pragma omp distribute parallel for
6163   for (int i = 0; i < 10; ++i) {
6164 #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?}}
6165     for (int i = 0; i < 10; ++i)
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 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?}}
6173     for (int i = 0; i < 10; ++i)
6174       ;
6175   }
6176 #pragma omp target
6177 #pragma omp teams
6178 #pragma omp distribute parallel for
6179   for (int i = 0; i < 10; ++i) {
6180 #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?}}
6181     for (int i = 0; i < 10; ++i)
6182       ;
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 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?}}
6189     for (int i = 0; i < 10; ++i)
6190       ;
6191   }
6192 #pragma omp target
6193 #pragma omp teams
6194 #pragma omp distribute parallel for
6195   for (int i = 0; i < 10; ++i) {
6196 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6197     a++;
6198   }
6199 #pragma omp target
6200 #pragma omp teams
6201 #pragma omp distribute parallel for
6202   for (int i = 0; i < 10; ++i) {
6203 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6204     for (int i = 0; i < 10; ++i)
6205       ;
6206   }
6207 #pragma omp target
6208 #pragma omp teams
6209 #pragma omp distribute parallel for
6210   for (int i = 0; i < 10; ++i) {
6211 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6212     for (int i = 0; i < 10; ++i)
6213       ;
6214   }
6215 #pragma omp target
6216 #pragma omp teams
6217 #pragma omp distribute parallel for
6218   for (int i = 0; i < 10; ++i) {
6219 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6220     for (int i = 0; i < 10; ++i)
6221       ;
6222   }
6223 #pragma omp target
6224 #pragma omp teams
6225 #pragma omp distribute parallel for
6226   for (int i = 0; i < 10; ++i) {
6227 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6228     for (int i = 0; i < 10; ++i)
6229       ;
6230   }
6231 
6232 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
6233 #pragma omp target
6234 #pragma omp teams
6235 #pragma omp distribute parallel for simd
6236   for (int i = 0; i < 10; ++i) {
6237 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6238     for (int i = 0; i < 10; ++i)
6239       ;
6240   }
6241 #pragma omp target
6242 #pragma omp teams
6243 #pragma omp distribute parallel for simd
6244   for (int i = 0; i < 10; ++i) {
6245 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6246     for (int i = 0; i < 10; ++i)
6247       ;
6248   }
6249 #pragma omp target
6250 #pragma omp teams
6251 #pragma omp distribute parallel for simd
6252   for (int i = 0; i < 10; ++i) {
6253 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6254     for (int i = 0; i < 10; ++i)
6255       ;
6256   }
6257 #pragma omp target
6258 #pragma omp teams
6259 #pragma omp distribute parallel for simd
6260   for (int i = 0; i < 10; ++i) {
6261 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6262     for (int i = 0; i < 10; ++i)
6263       ;
6264   }
6265 #pragma omp target
6266 #pragma omp teams
6267 #pragma omp distribute parallel for simd
6268   for (int i = 0; i < 10; ++i) {
6269 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6270     for (int i = 0; i < 10; ++i)
6271       ;
6272   }
6273 #pragma omp target
6274 #pragma omp teams
6275 #pragma omp distribute parallel for simd
6276   for (int i = 0; i < 10; ++i) {
6277 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6278     for (int i = 0; i < 10; ++i)
6279       ;
6280   }
6281 #pragma omp target
6282 #pragma omp teams
6283 #pragma omp distribute parallel for simd
6284   for (int i = 0; i < 10; ++i) {
6285 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6286     {
6287       bar();
6288     }
6289   }
6290 #pragma omp target
6291 #pragma omp teams
6292 #pragma omp distribute parallel for simd
6293   for (int i = 0; i < 10; ++i) {
6294 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6295     {
6296       bar();
6297     }
6298   }
6299 #pragma omp target
6300 #pragma omp teams
6301 #pragma omp distribute parallel for simd
6302   for (int i = 0; i < 10; ++i) {
6303 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6304     {
6305       bar();
6306     }
6307   }
6308 #pragma omp target
6309 #pragma omp teams
6310 #pragma omp distribute parallel for simd
6311   for (int i = 0; i < 10; ++i) {
6312 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6313     {
6314       bar();
6315     }
6316   }
6317 #pragma omp target
6318 #pragma omp teams
6319 #pragma omp distribute parallel for simd
6320   for (int i = 0; i < 10; ++i) {
6321 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6322     {
6323       bar();
6324     }
6325   }
6326 #pragma omp target
6327 #pragma omp teams
6328 #pragma omp distribute parallel for simd
6329   for (int i = 0; i < 10; ++i) {
6330 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6331     {
6332 #pragma omp single
6333       {
6334         bar();
6335       }
6336     }
6337   }
6338 #pragma omp target
6339 #pragma omp teams
6340 #pragma omp distribute parallel for simd
6341   for (int i = 0; i < 10; ++i) {
6342 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6343     for (int i = 0; i < 10; ++i)
6344       ;
6345   }
6346 #pragma omp target
6347 #pragma omp teams
6348 #pragma omp distribute parallel for simd
6349   for (int i = 0; i < 10; ++i) {
6350 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6351     for (int i = 0; i < 10; ++i)
6352       ;
6353   }
6354 #pragma omp target
6355 #pragma omp teams
6356 #pragma omp distribute parallel for simd
6357   for (int i = 0; i < 10; ++i) {
6358 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6359     {
6360       bar();
6361     }
6362   }
6363 #pragma omp target
6364 #pragma omp teams
6365 #pragma omp distribute parallel for simd
6366   for (int i = 0; i < 10; ++i) {
6367 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6368     {
6369       bar();
6370     }
6371   }
6372 #pragma omp target
6373 #pragma omp teams
6374 #pragma omp distribute parallel for simd
6375   for (int i = 0; i < 10; ++i) {
6376 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6377     bar();
6378   }
6379 #pragma omp target
6380 #pragma omp teams
6381 #pragma omp distribute parallel for simd
6382   for (int i = 0; i < 10; ++i) {
6383 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6384     bar();
6385   }
6386 #pragma omp target
6387 #pragma omp teams
6388 #pragma omp distribute parallel for simd
6389   for (int i = 0; i < 10; ++i) {
6390 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6391     bar();
6392   }
6393 #pragma omp target
6394 #pragma omp teams
6395 #pragma omp distribute parallel for simd
6396   for (int i = 0; i < 10; ++i) {
6397 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6398     bar();
6399   }
6400 #pragma omp target
6401 #pragma omp teams
6402 #pragma omp distribute parallel for simd
6403   for (int i = 0; i < 10; ++i) {
6404 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6405     bar();
6406   }
6407 #pragma omp target
6408 #pragma omp teams
6409 #pragma omp distribute parallel for simd
6410   for (int i = 0; i < 10; ++i) {
6411 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
6412     ++a;
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 target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6419     ++a;
6420   }
6421 #pragma omp target
6422 #pragma omp teams
6423 #pragma omp distribute parallel for simd
6424   for (int i = 0; i < 10; ++i) {
6425 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6426     ++a;
6427   }
6428 #pragma omp target
6429 #pragma omp teams
6430 #pragma omp distribute parallel for simd
6431   for (int i = 0; i < 10; ++i) {
6432 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6433     for (int i = 0; i < 10; ++i)
6434       ;
6435   }
6436 #pragma omp target
6437 #pragma omp teams
6438 #pragma omp distribute parallel for simd
6439   for (int i = 0; i < 10; ++i) {
6440 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6441     ++a;
6442   }
6443 #pragma omp target
6444 #pragma omp teams
6445 #pragma omp distribute parallel for simd
6446   for (int i = 0; i < 10; ++i) {
6447 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6448     ++a;
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 teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6455     ++a;
6456   }
6457 #pragma omp target
6458 #pragma omp teams
6459 #pragma omp distribute parallel for simd
6460   for (int i = 0; i < 10; ++i) {
6461 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6462     ++a;
6463   }
6464 #pragma omp target
6465 #pragma omp teams
6466 #pragma omp distribute parallel for simd
6467   for (int i = 0; i < 10; ++i) {
6468 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6469     for (int i = 0; i < 10; ++i)
6470       ++a;
6471   }
6472 #pragma omp target
6473 #pragma omp teams
6474 #pragma omp distribute parallel for simd
6475   for (int i = 0; i < 10; ++i) {
6476 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6477     for (int i = 0; i < 10; ++i)
6478       ++a;
6479   }
6480 #pragma omp target
6481 #pragma omp teams
6482 #pragma omp distribute parallel for simd
6483   for (int i = 0; i < 10; ++i) {
6484 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6485     for (int i = 0; i < 10; ++i)
6486       ++a;
6487   }
6488 #pragma omp target
6489 #pragma omp teams
6490 #pragma omp distribute parallel for simd
6491   for (int i = 0; i < 10; ++i) {
6492 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6493     for (int i = 0; i < 10; ++i)
6494       ++a;
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 teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6501     for (int i = 0; i < 10; ++i)
6502       ++a;
6503   }
6504 #pragma omp target
6505 #pragma omp teams
6506 #pragma omp distribute parallel for simd
6507   for (int i = 0; i < 10; ++i) {
6508 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6509     for (int i = 0; i < 10; ++i)
6510       ++a;
6511   }
6512 #pragma omp target
6513 #pragma omp teams
6514 #pragma omp distribute parallel for simd
6515   for (int i = 0; i < 10; ++i) {
6516 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6517     ++a;
6518   }
6519 #pragma omp target
6520 #pragma omp teams
6521 #pragma omp distribute parallel for simd
6522   for (int i = 0; i < 10; ++i) {
6523 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6524     for (int i = 0; i < 10; ++i)
6525       ++a;
6526   }
6527 #pragma omp target
6528 #pragma omp teams
6529 #pragma omp distribute parallel for simd
6530   for (int i = 0; i < 10; ++i) {
6531 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6532     for (int i = 0; i < 10; ++i)
6533       ++a;
6534   }
6535 #pragma omp target
6536 #pragma omp teams
6537 #pragma omp distribute parallel for simd
6538   for (int i = 0; i < 10; ++i) {
6539 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6540     for (int i = 0; i < 10; ++i)
6541       ++a;
6542   }
6543 #pragma omp target
6544 #pragma omp teams
6545 #pragma omp distribute parallel for simd
6546   for (int i = 0; i < 10; ++i) {
6547 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6548     for (int i = 0; i < 10; ++i)
6549       ++a;
6550   }
6551 
6552 // TARGET SIMD DIRECTIVE
6553 #pragma omp target simd
6554   for (int i = 0; i < 10; ++i) {
6555 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6556     for (int i = 0; i < 10; ++i)
6557       ;
6558   }
6559 #pragma omp target simd
6560   for (int i = 0; i < 10; ++i) {
6561 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6562     for (int i = 0; i < 10; ++i)
6563       ;
6564   }
6565 #pragma omp target simd
6566   for (int i = 0; i < 10; ++i) {
6567 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6568     for (int i = 0; i < 10; ++i)
6569       ;
6570   }
6571 #pragma omp target simd
6572   for (int i = 0; i < 10; ++i) {
6573 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6574     for (int i = 0; i < 10; ++i)
6575       ;
6576   }
6577 #pragma omp target simd
6578   for (int i = 0; i < 10; ++i) {
6579 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6580     for (int i = 0; i < 10; ++i)
6581       ;
6582   }
6583 #pragma omp target simd
6584   for (int i = 0; i < 10; ++i) {
6585 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6586     for (int i = 0; i < 10; ++i)
6587       ;
6588   }
6589 #pragma omp target simd
6590   for (int i = 0; i < 10; ++i) {
6591 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6592     {
6593       bar();
6594     }
6595   }
6596 #pragma omp target simd
6597   for (int i = 0; i < 10; ++i) {
6598 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6599     {
6600       bar();
6601     }
6602   }
6603 #pragma omp target simd
6604   for (int i = 0; i < 10; ++i) {
6605 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6606     {
6607       bar();
6608     }
6609   }
6610 #pragma omp target simd
6611   for (int i = 0; i < 10; ++i) {
6612 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6613     {
6614       bar();
6615     }
6616   }
6617 #pragma omp target simd
6618   for (int i = 0; i < 10; ++i) {
6619 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6620     {
6621       bar();
6622     }
6623   }
6624 #pragma omp target simd
6625   for (int i = 0; i < 10; ++i) {
6626 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6627     {
6628 #pragma omp single
6629       {
6630         bar();
6631       }
6632     }
6633   }
6634 #pragma omp target simd
6635   for (int i = 0; i < 10; ++i) {
6636 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6637     for (int i = 0; i < 10; ++i)
6638       ;
6639   }
6640 #pragma omp target simd
6641   for (int i = 0; i < 10; ++i) {
6642 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6643     for (int i = 0; i < 10; ++i)
6644       ;
6645   }
6646 #pragma omp target simd
6647   for (int i = 0; i < 10; ++i) {
6648 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6649     {
6650       bar();
6651     }
6652   }
6653 #pragma omp target simd
6654   for (int i = 0; i < 10; ++i) {
6655 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6656     {
6657       bar();
6658     }
6659   }
6660 #pragma omp target simd
6661   for (int i = 0; i < 10; ++i) {
6662 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6663     bar();
6664   }
6665 #pragma omp target simd
6666   for (int i = 0; i < 10; ++i) {
6667 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6668     bar();
6669   }
6670 #pragma omp target simd
6671   for (int i = 0; i < 10; ++i) {
6672 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6673     bar();
6674   }
6675 #pragma omp target simd
6676   for (int i = 0; i < 10; ++i) {
6677 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6678     bar();
6679   }
6680 #pragma omp target simd
6681   for (int i = 0; i < 10; ++i) {
6682 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6683     bar();
6684   }
6685 #pragma omp target simd
6686   for (int i = 0; i < 10; ++i) {
6687 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
6688     ++a;
6689   }
6690 #pragma omp target simd
6691   for (int i = 0; i < 10; ++i) {
6692 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6693     ++a;
6694   }
6695 #pragma omp target simd
6696   for (int i = 0; i < 10; ++i) {
6697 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6698     ++a;
6699   }
6700 #pragma omp target simd
6701   for (int i = 0; i < 10; ++i) {
6702 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6703     for (int i = 0; i < 10; ++i)
6704       ;
6705   }
6706 #pragma omp target simd
6707   for (int i = 0; i < 10; ++i) {
6708 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6709     ++a;
6710   }
6711 #pragma omp target simd
6712   for (int i = 0; i < 10; ++i) {
6713 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6714     ++a;
6715   }
6716 #pragma omp target simd
6717   for (int i = 0; i < 10; ++i) {
6718 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6719     ++a;
6720   }
6721 #pragma omp target simd
6722   for (int i = 0; i < 10; ++i) {
6723 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6724     ++a;
6725   }
6726 #pragma omp target simd
6727   for (int i = 0; i < 10; ++i) {
6728 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6729     for (int i = 0; i < 10; ++i)
6730       ++a;
6731   }
6732 #pragma omp target simd
6733   for (int i = 0; i < 10; ++i) {
6734 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6735     for (int i = 0; i < 10; ++i)
6736       ++a;
6737   }
6738 #pragma omp target simd
6739   for (int i = 0; i < 10; ++i) {
6740 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6741     for (int i = 0; i < 10; ++i)
6742       ++a;
6743   }
6744 #pragma omp target simd
6745   for (int i = 0; i < 10; ++i) {
6746 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6747     for (int i = 0; i < 10; ++i)
6748       ++a;
6749   }
6750 #pragma omp target simd
6751   for (int i = 0; i < 10; ++i) {
6752 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6753     for (int i = 0; i < 10; ++i)
6754       ++a;
6755   }
6756 #pragma omp target simd
6757   for (int i = 0; i < 10; ++i) {
6758 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6759     for (int i = 0; i < 10; ++i)
6760       ++a;
6761   }
6762 #pragma omp target simd
6763   for (int i = 0; i < 10; ++i) {
6764 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6765     for (int i = 0; i < 10; ++i)
6766       ++a;
6767   }
6768 #pragma omp target simd
6769   for (int i = 0; i < 10; ++i) {
6770 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6771     for (int i = 0; i < 10; ++i)
6772       ++a;
6773   }
6774 
6775 // TEAMS DISTRIBUTE DIRECTIVE
6776 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6777   for (int i = 0; i < 10; ++i)
6778     ;
6779 #pragma omp target
6780 #pragma omp teams distribute
6781   for (int i = 0; i < 10; ++i) {
6782 #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?}}
6783     for (int i = 0; i < 10; ++i)
6784       ;
6785   }
6786 #pragma omp target
6787 #pragma omp teams distribute
6788   for (int i = 0; i < 10; ++i) {
6789 #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?}}
6790     for (int i = 0; i < 10; ++i)
6791       ;
6792   }
6793 #pragma omp target
6794 #pragma omp teams distribute
6795   for (int i = 0; i < 10; ++i) {
6796 #pragma omp for // OK
6797     for (int i = 0; i < 10; ++i)
6798       ;
6799   }
6800 #pragma omp target
6801 #pragma omp teams distribute
6802   for (int i = 0; i < 10; ++i) {
6803 #pragma omp simd // OK
6804     for (int i = 0; i < 10; ++i)
6805       ;
6806   }
6807 #pragma omp target
6808 #pragma omp teams distribute
6809   for (int i = 0; i < 10; ++i) {
6810 #pragma omp for simd // OK
6811     for (int i = 0; i < 10; ++i)
6812       ;
6813   }
6814 #pragma omp target
6815 #pragma omp teams distribute
6816   for (int i = 0; i < 10; ++i) {
6817 #pragma omp parallel // OK
6818     for (int i = 0; i < 10; ++i)
6819       ;
6820   }
6821 #pragma omp target
6822 #pragma omp teams distribute
6823   for (int i = 0; i < 10; ++i) {
6824 #pragma omp sections // OK
6825     {
6826       bar();
6827     }
6828   }
6829 #pragma omp target
6830 #pragma omp teams distribute
6831   for (int i = 0; i < 10; ++i) {
6832 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6833     {
6834       bar();
6835     }
6836   }
6837 #pragma omp target
6838 #pragma omp teams distribute
6839   for (int i = 0; i < 10; ++i) {
6840 #pragma omp single // OK
6841     {
6842       bar();
6843     }
6844   }
6845 #pragma omp target
6846 #pragma omp teams distribute
6847   for (int i = 0; i < 10; ++i) {
6848 #pragma omp master // OK
6849     {
6850       bar();
6851     }
6852   }
6853 #pragma omp target
6854 #pragma omp teams distribute
6855   for (int i = 0; i < 10; ++i) {
6856 #pragma omp critical // OK
6857     {
6858       bar();
6859     }
6860   }
6861 #pragma omp target
6862 #pragma omp teams distribute
6863   for (int i = 0; i < 10; ++i) {
6864 #pragma omp parallel // OK
6865     {
6866 #pragma omp single
6867       {
6868         bar();
6869       }
6870     }
6871   }
6872 #pragma omp target
6873 #pragma omp teams distribute
6874   for (int i = 0; i < 10; ++i) {
6875 #pragma omp parallel for // OK
6876     for (int i = 0; i < 10; ++i)
6877       ;
6878   }
6879 #pragma omp target
6880 #pragma omp teams distribute
6881   for (int i = 0; i < 10; ++i) {
6882 #pragma omp parallel for simd // OK
6883     for (int i = 0; i < 10; ++i)
6884       ;
6885   }
6886 #pragma omp target
6887 #pragma omp teams distribute
6888   for (int i = 0; i < 10; ++i) {
6889 #pragma omp parallel sections // OK
6890     {
6891       bar();
6892     }
6893   }
6894 #pragma omp target
6895 #pragma omp teams distribute
6896   for (int i = 0; i < 10; ++i) {
6897 #pragma omp task // OK
6898     {
6899       bar();
6900     }
6901   }
6902 #pragma omp target
6903 #pragma omp teams distribute
6904   for (int i = 0; i < 10; ++i) {
6905 #pragma omp taskyield // OK
6906     bar();
6907   }
6908 #pragma omp target
6909 #pragma omp teams distribute
6910   for (int i = 0; i < 10; ++i) {
6911 #pragma omp barrier // OK
6912     bar();
6913   }
6914 #pragma omp target
6915 #pragma omp teams distribute
6916   for (int i = 0; i < 10; ++i) {
6917 #pragma omp taskwait // OK
6918     bar();
6919   }
6920 #pragma omp target
6921 #pragma omp teams distribute
6922   for (int i = 0; i < 10; ++i) {
6923 #pragma omp flush // OK
6924     bar();
6925   }
6926 #pragma omp target
6927 #pragma omp teams distribute
6928   for (int i = 0; i < 10; ++i) {
6929 #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?}}
6930     bar();
6931   }
6932 #pragma omp target
6933 #pragma omp teams distribute
6934   for (int i = 0; i < 10; ++i) {
6935 #pragma omp atomic // OK
6936     ++a;
6937   }
6938 #pragma omp target
6939 #pragma omp teams distribute
6940   for (int i = 0; i < 10; ++i) {
6941 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6942     ++a;
6943   }
6944 #pragma omp target
6945 #pragma omp teams distribute
6946   for (int i = 0; i < 10; ++i) {
6947 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6948     ++a;
6949   }
6950 #pragma omp target
6951 #pragma omp teams distribute
6952   for (int i = 0; i < 10; ++i) {
6953 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
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 target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6961     ++a;
6962   }
6963 #pragma omp target
6964 #pragma omp teams distribute
6965   for (int i = 0; i < 10; ++i) {
6966 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6967     ++a;
6968   }
6969 #pragma omp target
6970 #pragma omp teams distribute
6971   for (int i = 0; i < 10; ++i) {
6972 #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?}}
6973     ++a;
6974   }
6975 #pragma omp target
6976 #pragma omp teams distribute
6977   for (int i = 0; i < 10; ++i) {
6978 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6979     ++a;
6980   }
6981 #pragma omp target
6982 #pragma omp teams distribute
6983   for (int i = 0; i < 10; ++i) {
6984 #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?}}
6985     for (int i = 0; i < 10; ++i)
6986       ++a;
6987   }
6988 #pragma omp target
6989 #pragma omp teams distribute
6990   for (int i = 0; i < 10; ++i) {
6991 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6992     for (int i = 0; i < 10; ++i)
6993       ++a;
6994   }
6995 #pragma omp target
6996 #pragma omp teams distribute
6997   for (int i = 0; i < 10; ++i) {
6998 #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?}}
6999     for (int i = 0; i < 10; ++i)
7000       ++a;
7001   }
7002 #pragma omp target
7003 #pragma omp teams distribute
7004   for (int i = 0; i < 10; ++i) {
7005 #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?}}
7006     for (int i = 0; i < 10; ++i)
7007       ++a;
7008   }
7009 #pragma omp target
7010 #pragma omp teams distribute
7011   for (int i = 0; i < 10; ++i) {
7012 #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?}}
7013     for (int i = 0; i < 10; ++i)
7014       ++a;
7015   }
7016 #pragma omp target
7017 #pragma omp teams distribute
7018   for (int i = 0; i < 10; ++i) {
7019 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7020     for (int i = 0; i < 10; ++i)
7021       ++a;
7022   }
7023 #pragma omp target
7024 #pragma omp teams distribute
7025   for (int i = 0; i < 10; ++i) {
7026 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7027     for (int i = 0; i < 10; ++i)
7028       ++a;
7029   }
7030 #pragma omp target
7031 #pragma omp teams distribute
7032   for (int i = 0; i < 10; ++i) {
7033 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7034     for (int i = 0; i < 10; ++i)
7035       ++a;
7036   }
7037 
7038 // TEAMS DISTRIBUTE DIRECTIVE
7039 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7040   for (int i = 0; i < 10; ++i)
7041     ;
7042 #pragma omp target
7043 #pragma omp teams distribute
7044   for (int i = 0; i < 10; ++i) {
7045 #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?}}
7046     for (int i = 0; i < 10; ++i)
7047       ;
7048   }
7049 #pragma omp target
7050 #pragma omp teams distribute
7051   for (int i = 0; i < 10; ++i) {
7052 #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?}}
7053     for (int i = 0; i < 10; ++i)
7054       ;
7055   }
7056 #pragma omp target
7057 #pragma omp teams distribute
7058   for (int i = 0; i < 10; ++i) {
7059 #pragma omp for // OK
7060     for (int i = 0; i < 10; ++i)
7061       ;
7062   }
7063 #pragma omp target
7064 #pragma omp teams distribute
7065   for (int i = 0; i < 10; ++i) {
7066 #pragma omp simd // OK
7067     for (int i = 0; i < 10; ++i)
7068       ;
7069   }
7070 #pragma omp target
7071 #pragma omp teams distribute
7072   for (int i = 0; i < 10; ++i) {
7073 #pragma omp for simd // OK
7074     for (int i = 0; i < 10; ++i)
7075       ;
7076   }
7077 #pragma omp target
7078 #pragma omp teams distribute
7079   for (int i = 0; i < 10; ++i) {
7080 #pragma omp parallel // OK
7081     for (int i = 0; i < 10; ++i)
7082       ;
7083   }
7084 #pragma omp target
7085 #pragma omp teams distribute
7086   for (int i = 0; i < 10; ++i) {
7087 #pragma omp sections // OK
7088     {
7089       bar();
7090     }
7091   }
7092 #pragma omp target
7093 #pragma omp teams distribute
7094   for (int i = 0; i < 10; ++i) {
7095 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
7096     {
7097       bar();
7098     }
7099   }
7100 #pragma omp target
7101 #pragma omp teams distribute
7102   for (int i = 0; i < 10; ++i) {
7103 #pragma omp single // OK
7104     {
7105       bar();
7106     }
7107   }
7108 #pragma omp target
7109 #pragma omp teams distribute
7110   for (int i = 0; i < 10; ++i) {
7111 #pragma omp master // OK
7112     {
7113       bar();
7114     }
7115   }
7116 #pragma omp target
7117 #pragma omp teams distribute
7118   for (int i = 0; i < 10; ++i) {
7119 #pragma omp critical // OK
7120     {
7121       bar();
7122     }
7123   }
7124 #pragma omp target
7125 #pragma omp teams distribute
7126   for (int i = 0; i < 10; ++i) {
7127 #pragma omp parallel // OK
7128     {
7129 #pragma omp single
7130       {
7131         bar();
7132       }
7133     }
7134   }
7135 #pragma omp target
7136 #pragma omp teams distribute
7137   for (int i = 0; i < 10; ++i) {
7138 #pragma omp parallel for // OK
7139     for (int i = 0; i < 10; ++i)
7140       ;
7141   }
7142 #pragma omp target
7143 #pragma omp teams distribute
7144   for (int i = 0; i < 10; ++i) {
7145 #pragma omp parallel for simd // OK
7146     for (int i = 0; i < 10; ++i)
7147       ;
7148   }
7149 #pragma omp target
7150 #pragma omp teams distribute
7151   for (int i = 0; i < 10; ++i) {
7152 #pragma omp parallel sections // OK
7153     {
7154       bar();
7155     }
7156   }
7157 #pragma omp target
7158 #pragma omp teams distribute
7159   for (int i = 0; i < 10; ++i) {
7160 #pragma omp task // OK
7161     {
7162       bar();
7163     }
7164   }
7165 #pragma omp target
7166 #pragma omp teams distribute
7167   for (int i = 0; i < 10; ++i) {
7168 #pragma omp taskyield // OK
7169     bar();
7170   }
7171 #pragma omp target
7172 #pragma omp teams distribute
7173   for (int i = 0; i < 10; ++i) {
7174 #pragma omp barrier // OK
7175     bar();
7176   }
7177 #pragma omp target
7178 #pragma omp teams distribute
7179   for (int i = 0; i < 10; ++i) {
7180 #pragma omp taskwait // OK
7181     bar();
7182   }
7183 #pragma omp target
7184 #pragma omp teams distribute
7185   for (int i = 0; i < 10; ++i) {
7186 #pragma omp flush // OK
7187     bar();
7188   }
7189 #pragma omp target
7190 #pragma omp teams distribute
7191   for (int i = 0; i < 10; ++i) {
7192 #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?}}
7193     bar();
7194   }
7195 #pragma omp target
7196 #pragma omp teams distribute
7197   for (int i = 0; i < 10; ++i) {
7198 #pragma omp atomic // OK
7199     ++a;
7200   }
7201 #pragma omp target
7202 #pragma omp teams distribute
7203   for (int i = 0; i < 10; ++i) {
7204 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7205     ++a;
7206   }
7207 #pragma omp target
7208 #pragma omp teams distribute
7209   for (int i = 0; i < 10; ++i) {
7210 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7211     ++a;
7212   }
7213 #pragma omp target
7214 #pragma omp teams distribute
7215   for (int i = 0; i < 10; ++i) {
7216 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7217     for (int i = 0; i < 10; ++i)
7218       ;
7219   }
7220 #pragma omp target
7221 #pragma omp teams distribute
7222   for (int i = 0; i < 10; ++i) {
7223 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7224     ++a;
7225   }
7226 #pragma omp target
7227 #pragma omp teams distribute
7228   for (int i = 0; i < 10; ++i) {
7229 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7230     ++a;
7231   }
7232 #pragma omp target
7233 #pragma omp teams distribute
7234   for (int i = 0; i < 10; ++i) {
7235 #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?}}
7236     ++a;
7237   }
7238 #pragma omp target
7239 #pragma omp teams distribute
7240   for (int i = 0; i < 10; ++i) {
7241 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7242     ++a;
7243   }
7244 #pragma omp target
7245 #pragma omp teams distribute
7246   for (int i = 0; i < 10; ++i) {
7247 #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?}}
7248     for (int i = 0; i < 10; ++i)
7249       ++a;
7250   }
7251 #pragma omp target
7252 #pragma omp teams distribute
7253   for (int i = 0; i < 10; ++i) {
7254 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7255     for (int i = 0; i < 10; ++i)
7256       ++a;
7257   }
7258 #pragma omp target
7259 #pragma omp teams distribute
7260   for (int i = 0; i < 10; ++i) {
7261 #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?}}
7262     for (int i = 0; i < 10; ++i)
7263       ++a;
7264   }
7265 #pragma omp target
7266 #pragma omp teams distribute
7267   for (int i = 0; i < 10; ++i) {
7268 #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?}}
7269     for (int i = 0; i < 10; ++i)
7270       ++a;
7271   }
7272 #pragma omp target
7273 #pragma omp teams distribute
7274   for (int i = 0; i < 10; ++i) {
7275 #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?}}
7276     for (int i = 0; i < 10; ++i)
7277       ++a;
7278   }
7279 #pragma omp target
7280 #pragma omp teams distribute
7281   for (int i = 0; i < 10; ++i) {
7282 #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?}}
7283     for (int i = 0; i < 10; ++i)
7284       ++a;
7285   }
7286 #pragma omp target
7287 #pragma omp teams distribute
7288   for (int i = 0; i < 10; ++i) {
7289 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7290     ++a;
7291   }
7292 #pragma omp target
7293 #pragma omp teams distribute
7294   for (int i = 0; i < 10; ++i) {
7295 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
7296     for (int i = 0; i < 10; ++i)
7297       ++a;
7298   }
7299 #pragma omp target
7300 #pragma omp teams distribute
7301   for (int i = 0; i < 10; ++i) {
7302 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7303     for (int i = 0; i < 10; ++i)
7304       ++a;
7305   }
7306 #pragma omp target
7307 #pragma omp teams distribute
7308   for (int i = 0; i < 10; ++i) {
7309 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7310     for (int i = 0; i < 10; ++i)
7311       ++a;
7312   }
7313 #pragma omp target
7314 #pragma omp teams distribute
7315   for (int i = 0; i < 10; ++i) {
7316 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7317     for (int i = 0; i < 10; ++i)
7318       ++a;
7319   }
7320 
7321 // TEAMS DISTRIBUTE SIMD DIRECTIVE
7322 #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?}}
7323   for (int i = 0; i < 10; ++i)
7324     ;
7325 #pragma omp target
7326 #pragma omp teams distribute simd
7327   for (int i = 0; i < 10; ++i) {
7328 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7329     for (int i = 0; i < 10; ++i)
7330       ;
7331   }
7332 #pragma omp target
7333 #pragma omp teams distribute simd
7334   for (int i = 0; i < 10; ++i) {
7335 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7336     for (int i = 0; i < 10; ++i)
7337       ;
7338   }
7339 #pragma omp target
7340 #pragma omp teams distribute simd
7341   for (int i = 0; i < 10; ++i) {
7342 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7343     for (int i = 0; i < 10; ++i)
7344       ;
7345   }
7346 #pragma omp target
7347 #pragma omp teams distribute simd
7348   for (int i = 0; i < 10; ++i) {
7349 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7350     for (int i = 0; i < 10; ++i)
7351       ;
7352   }
7353 #pragma omp target
7354 #pragma omp teams distribute simd
7355   for (int i = 0; i < 10; ++i) {
7356 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7357     for (int i = 0; i < 10; ++i)
7358       ;
7359   }
7360 #pragma omp target
7361 #pragma omp teams distribute simd
7362   for (int i = 0; i < 10; ++i) {
7363 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7364     for (int i = 0; i < 10; ++i)
7365       ;
7366   }
7367 #pragma omp target
7368 #pragma omp teams distribute simd
7369   for (int i = 0; i < 10; ++i) {
7370 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7371     {
7372       bar();
7373     }
7374   }
7375 #pragma omp target
7376 #pragma omp teams distribute simd
7377   for (int i = 0; i < 10; ++i) {
7378 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7379     {
7380       bar();
7381     }
7382   }
7383 #pragma omp target
7384 #pragma omp teams distribute simd
7385   for (int i = 0; i < 10; ++i) {
7386 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7387     {
7388       bar();
7389     }
7390   }
7391 #pragma omp target
7392 #pragma omp teams distribute simd
7393   for (int i = 0; i < 10; ++i) {
7394 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7395     {
7396       bar();
7397     }
7398   }
7399 #pragma omp target
7400 #pragma omp teams distribute simd
7401   for (int i = 0; i < 10; ++i) {
7402 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7403     {
7404       bar();
7405     }
7406   }
7407 #pragma omp target
7408 #pragma omp teams distribute simd
7409   for (int i = 0; i < 10; ++i) {
7410 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7411     {
7412 #pragma omp single
7413       {
7414         bar();
7415       }
7416     }
7417   }
7418 #pragma omp target
7419 #pragma omp teams distribute simd
7420   for (int i = 0; i < 10; ++i) {
7421 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7422     for (int i = 0; i < 10; ++i)
7423       ;
7424   }
7425 #pragma omp target
7426 #pragma omp teams distribute simd
7427   for (int i = 0; i < 10; ++i) {
7428 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7429     for (int i = 0; i < 10; ++i)
7430       ;
7431   }
7432 #pragma omp target
7433 #pragma omp teams distribute simd
7434   for (int i = 0; i < 10; ++i) {
7435 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7436     {
7437       bar();
7438     }
7439   }
7440 #pragma omp target
7441 #pragma omp teams distribute simd
7442   for (int i = 0; i < 10; ++i) {
7443 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7444     {
7445       bar();
7446     }
7447   }
7448 #pragma omp target
7449 #pragma omp teams distribute simd
7450   for (int i = 0; i < 10; ++i) {
7451 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7452     bar();
7453   }
7454 #pragma omp target
7455 #pragma omp teams distribute simd
7456   for (int i = 0; i < 10; ++i) {
7457 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7458     bar();
7459   }
7460 #pragma omp target
7461 #pragma omp teams distribute simd
7462   for (int i = 0; i < 10; ++i) {
7463 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7464     bar();
7465   }
7466 #pragma omp target
7467 #pragma omp teams distribute simd
7468   for (int i = 0; i < 10; ++i) {
7469 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7470     bar();
7471   }
7472 #pragma omp target
7473 #pragma omp teams distribute simd
7474   for (int i = 0; i < 10; ++i) {
7475 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7476     bar();
7477   }
7478 #pragma omp target
7479 #pragma omp teams distribute simd
7480   for (int i = 0; i < 10; ++i) {
7481 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7482     ++a;
7483   }
7484 #pragma omp target
7485 #pragma omp teams distribute simd
7486   for (int i = 0; i < 10; ++i) {
7487 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7488     ++a;
7489   }
7490 #pragma omp target
7491 #pragma omp teams distribute simd
7492   for (int i = 0; i < 10; ++i) {
7493 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7494     ++a;
7495   }
7496 #pragma omp target
7497 #pragma omp teams distribute simd
7498   for (int i = 0; i < 10; ++i) {
7499 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7500     for (int i = 0; i < 10; ++i)
7501       ;
7502   }
7503 #pragma omp target
7504 #pragma omp teams distribute simd
7505   for (int i = 0; i < 10; ++i) {
7506 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7507     ++a;
7508   }
7509 #pragma omp target
7510 #pragma omp teams distribute simd
7511   for (int i = 0; i < 10; ++i) {
7512 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7513     ++a;
7514   }
7515 #pragma omp target
7516 #pragma omp teams distribute simd
7517   for (int i = 0; i < 10; ++i) {
7518 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7519     ++a;
7520   }
7521 #pragma omp target
7522 #pragma omp teams distribute simd
7523   for (int i = 0; i < 10; ++i) {
7524 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7525     ++a;
7526   }
7527 #pragma omp target
7528 #pragma omp teams distribute simd
7529   for (int i = 0; i < 10; ++i) {
7530 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7531     for (int i = 0; i < 10; ++i)
7532       ++a;
7533   }
7534 #pragma omp target
7535 #pragma omp teams distribute simd
7536   for (int i = 0; i < 10; ++i) {
7537 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7538     for (int i = 0; i < 10; ++i)
7539       ++a;
7540   }
7541 #pragma omp target
7542 #pragma omp teams distribute simd
7543   for (int i = 0; i < 10; ++i) {
7544 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7545     for (int i = 0; i < 10; ++i)
7546       ++a;
7547   }
7548 #pragma omp target
7549 #pragma omp teams distribute simd
7550   for (int i = 0; i < 10; ++i) {
7551 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7552     for (int i = 0; i < 10; ++i)
7553       ++a;
7554   }
7555 #pragma omp target
7556 #pragma omp teams distribute simd
7557   for (int i = 0; i < 10; ++i) {
7558 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7559     for (int i = 0; i < 10; ++i)
7560       ++a;
7561   }
7562 #pragma omp target
7563 #pragma omp teams distribute simd
7564   for (int i = 0; i < 10; ++i) {
7565 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7566     for (int i = 0; i < 10; ++i)
7567       ++a;
7568   }
7569 #pragma omp target
7570 #pragma omp teams distribute simd
7571   for (int i = 0; i < 10; ++i) {
7572 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7573     ++a;
7574   }
7575 #pragma omp target
7576 #pragma omp teams distribute simd
7577   for (int i = 0; i < 10; ++i) {
7578 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7579     for (int i = 0; i < 10; ++i)
7580       ++a;
7581   }
7582 #pragma omp target
7583 #pragma omp teams distribute simd
7584   for (int i = 0; i < 10; ++i) {
7585 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7586     for (int i = 0; i < 10; ++i)
7587       ++a;
7588   }
7589 #pragma omp target
7590 #pragma omp teams distribute simd
7591   for (int i = 0; i < 10; ++i) {
7592 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7593     for (int i = 0; i < 10; ++i)
7594       ++a;
7595   }
7596 #pragma omp target
7597 #pragma omp teams distribute simd
7598   for (int i = 0; i < 10; ++i) {
7599 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7600     for (int i = 0; i < 10; ++i)
7601       ++a;
7602   }
7603 
7604 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
7605 #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?}}
7606   for (int i = 0; i < 10; ++i)
7607     ;
7608 #pragma omp target
7609 #pragma omp teams distribute parallel for simd
7610   for (int i = 0; i < 10; ++i) {
7611 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7612     for (int i = 0; i < 10; ++i)
7613       ;
7614   }
7615 #pragma omp target
7616 #pragma omp teams distribute parallel for simd
7617   for (int i = 0; i < 10; ++i) {
7618 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7619     for (int i = 0; i < 10; ++i)
7620       ;
7621   }
7622 #pragma omp target
7623 #pragma omp teams distribute parallel for simd
7624   for (int i = 0; i < 10; ++i) {
7625 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7626     for (int i = 0; i < 10; ++i)
7627       ;
7628   }
7629 #pragma omp target
7630 #pragma omp teams distribute parallel for simd
7631   for (int i = 0; i < 10; ++i) {
7632 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7633     for (int i = 0; i < 10; ++i)
7634       ;
7635   }
7636 #pragma omp target
7637 #pragma omp teams distribute parallel for simd
7638   for (int i = 0; i < 10; ++i) {
7639 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7640     for (int i = 0; i < 10; ++i)
7641       ;
7642   }
7643 #pragma omp target
7644 #pragma omp teams distribute parallel for simd
7645   for (int i = 0; i < 10; ++i) {
7646 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7647     for (int i = 0; i < 10; ++i)
7648       ;
7649   }
7650 #pragma omp target
7651 #pragma omp teams distribute parallel for simd
7652   for (int i = 0; i < 10; ++i) {
7653 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7654     {
7655       bar();
7656     }
7657   }
7658 #pragma omp target
7659 #pragma omp teams distribute parallel for simd
7660   for (int i = 0; i < 10; ++i) {
7661 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7662     {
7663       bar();
7664     }
7665   }
7666 #pragma omp target
7667 #pragma omp teams distribute parallel for simd
7668   for (int i = 0; i < 10; ++i) {
7669 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7670     {
7671       bar();
7672     }
7673   }
7674 #pragma omp target
7675 #pragma omp teams distribute parallel for simd
7676   for (int i = 0; i < 10; ++i) {
7677 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7678     {
7679       bar();
7680     }
7681   }
7682 #pragma omp target
7683 #pragma omp teams distribute parallel for simd
7684   for (int i = 0; i < 10; ++i) {
7685 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7686     {
7687       bar();
7688     }
7689   }
7690 #pragma omp target
7691 #pragma omp teams distribute parallel for simd
7692   for (int i = 0; i < 10; ++i) {
7693 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7694     {
7695 #pragma omp single
7696       {
7697         bar();
7698       }
7699     }
7700   }
7701 #pragma omp target
7702 #pragma omp teams distribute parallel for simd
7703   for (int i = 0; i < 10; ++i) {
7704 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7705     for (int i = 0; i < 10; ++i)
7706       ;
7707   }
7708 #pragma omp target
7709 #pragma omp teams distribute parallel for simd
7710   for (int i = 0; i < 10; ++i) {
7711 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7712     for (int i = 0; i < 10; ++i)
7713       ;
7714   }
7715 #pragma omp target
7716 #pragma omp teams distribute parallel for simd
7717   for (int i = 0; i < 10; ++i) {
7718 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7719     {
7720       bar();
7721     }
7722   }
7723 #pragma omp target
7724 #pragma omp teams distribute parallel for simd
7725   for (int i = 0; i < 10; ++i) {
7726 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7727     {
7728       bar();
7729     }
7730   }
7731 #pragma omp target
7732 #pragma omp teams distribute parallel for simd
7733   for (int i = 0; i < 10; ++i) {
7734 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7735     bar();
7736   }
7737 #pragma omp target
7738 #pragma omp teams distribute parallel for simd
7739   for (int i = 0; i < 10; ++i) {
7740 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7741     bar();
7742   }
7743 #pragma omp target
7744 #pragma omp teams distribute parallel for simd
7745   for (int i = 0; i < 10; ++i) {
7746 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7747     bar();
7748   }
7749 #pragma omp target
7750 #pragma omp teams distribute parallel for simd
7751   for (int i = 0; i < 10; ++i) {
7752 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7753     bar();
7754   }
7755 #pragma omp target
7756 #pragma omp teams distribute parallel for simd
7757   for (int i = 0; i < 10; ++i) {
7758 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7759     bar();
7760   }
7761 #pragma omp target
7762 #pragma omp teams distribute parallel for simd
7763   for (int i = 0; i < 10; ++i) {
7764 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7765     ++a;
7766   }
7767 #pragma omp target
7768 #pragma omp teams distribute parallel for simd
7769   for (int i = 0; i < 10; ++i) {
7770 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7771     ++a;
7772   }
7773 #pragma omp target
7774 #pragma omp teams distribute parallel for simd
7775   for (int i = 0; i < 10; ++i) {
7776 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7777     ++a;
7778   }
7779 #pragma omp target
7780 #pragma omp teams distribute parallel for simd
7781   for (int i = 0; i < 10; ++i) {
7782 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7783     for (int i = 0; i < 10; ++i)
7784       ;
7785   }
7786 #pragma omp target
7787 #pragma omp teams distribute parallel for simd
7788   for (int i = 0; i < 10; ++i) {
7789 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7790     ++a;
7791   }
7792 #pragma omp target
7793 #pragma omp teams distribute parallel for simd
7794   for (int i = 0; i < 10; ++i) {
7795 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7796     ++a;
7797   }
7798 #pragma omp target
7799 #pragma omp teams distribute parallel for simd
7800   for (int i = 0; i < 10; ++i) {
7801 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7802     ++a;
7803   }
7804 #pragma omp target
7805 #pragma omp teams distribute parallel for simd
7806   for (int i = 0; i < 10; ++i) {
7807 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7808     ++a;
7809   }
7810 #pragma omp target
7811 #pragma omp teams distribute parallel for simd
7812   for (int i = 0; i < 10; ++i) {
7813 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7814     for (int i = 0; i < 10; ++i)
7815       ++a;
7816   }
7817 #pragma omp target
7818 #pragma omp teams distribute parallel for simd
7819   for (int i = 0; i < 10; ++i) {
7820 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7821     for (int i = 0; i < 10; ++i)
7822       ++a;
7823   }
7824 #pragma omp target
7825 #pragma omp teams distribute parallel for simd
7826   for (int i = 0; i < 10; ++i) {
7827 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7828     for (int i = 0; i < 10; ++i)
7829       ++a;
7830   }
7831 #pragma omp target
7832 #pragma omp teams distribute parallel for simd
7833   for (int i = 0; i < 10; ++i) {
7834 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7835     for (int i = 0; i < 10; ++i)
7836       ++a;
7837   }
7838 #pragma omp target
7839 #pragma omp teams distribute parallel for simd
7840   for (int i = 0; i < 10; ++i) {
7841 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7842     for (int i = 0; i < 10; ++i)
7843       ++a;
7844   }
7845 #pragma omp target
7846 #pragma omp teams distribute parallel for simd
7847   for (int i = 0; i < 10; ++i) {
7848 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7849     for (int i = 0; i < 10; ++i)
7850       ++a;
7851   }
7852 #pragma omp target
7853 #pragma omp teams distribute parallel for simd
7854   for (int i = 0; i < 10; ++i) {
7855 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7856     ++a;
7857   }
7858 #pragma omp target
7859 #pragma omp teams distribute parallel for simd
7860   for (int i = 0; i < 10; ++i) {
7861 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7862     for (int i = 0; i < 10; ++i)
7863       ++a;
7864   }
7865 #pragma omp target
7866 #pragma omp teams distribute parallel for simd
7867   for (int i = 0; i < 10; ++i) {
7868 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7869     for (int i = 0; i < 10; ++i)
7870       ++a;
7871   }
7872 #pragma omp target
7873 #pragma omp teams distribute parallel for simd
7874   for (int i = 0; i < 10; ++i) {
7875 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7876     for (int i = 0; i < 10; ++i)
7877       ++a;
7878   }
7879 #pragma omp target
7880 #pragma omp teams distribute parallel for simd
7881   for (int i = 0; i < 10; ++i) {
7882 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7883     for (int i = 0; i < 10; ++i)
7884       ++a;
7885   }
7886 
7887 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
7888 #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?}}
7889   for (int i = 0; i < 10; ++i)
7890     ;
7891 #pragma omp target
7892 #pragma omp teams distribute parallel for
7893   for (int i = 0; i < 10; ++i) {
7894 #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?}}
7895     for (int i = 0; i < 10; ++i)
7896       ;
7897   }
7898 #pragma omp target
7899 #pragma omp teams distribute parallel for
7900   for (int i = 0; i < 10; ++i) {
7901 #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?}}
7902     for (int i = 0; i < 10; ++i)
7903       ;
7904   }
7905 #pragma omp target
7906 #pragma omp teams distribute parallel for
7907   for (int i = 0; i < 10; ++i) {
7908 #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?}}
7909     for (int i = 0; i < 10; ++i)
7910       ;
7911   }
7912 #pragma omp target
7913 #pragma omp teams distribute parallel for
7914   for (int i = 0; i < 10; ++i) {
7915 #pragma omp simd // OK
7916     for (int i = 0; i < 10; ++i)
7917       ;
7918   }
7919 #pragma omp target
7920 #pragma omp teams distribute parallel for
7921   for (int i = 0; i < 10; ++i) {
7922 #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?}}
7923     for (int i = 0; i < 10; ++i)
7924       ;
7925   }
7926 #pragma omp target
7927 #pragma omp teams distribute parallel for
7928   for (int i = 0; i < 10; ++i) {
7929 #pragma omp parallel // OK
7930     for (int i = 0; i < 10; ++i)
7931       ;
7932   }
7933 #pragma omp target
7934 #pragma omp teams distribute parallel for
7935   for (int i = 0; i < 10; ++i) {
7936 #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?}}
7937     {
7938       bar();
7939     }
7940   }
7941 #pragma omp target
7942 #pragma omp teams distribute parallel for
7943   for (int i = 0; i < 10; ++i) {
7944 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
7945     {
7946       bar();
7947     }
7948   }
7949 #pragma omp target
7950 #pragma omp teams distribute parallel for
7951   for (int i = 0; i < 10; ++i) {
7952 #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?}}
7953     {
7954       bar();
7955     }
7956   }
7957 #pragma omp target
7958 #pragma omp teams distribute parallel for
7959   for (int i = 0; i < 10; ++i) {
7960 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
7961     {
7962       bar();
7963     }
7964   }
7965 #pragma omp target
7966 #pragma omp teams distribute parallel for
7967   for (int i = 0; i < 10; ++i) {
7968 #pragma omp critical // OK
7969     {
7970       bar();
7971     }
7972   }
7973 #pragma omp target
7974 #pragma omp teams distribute parallel for
7975   for (int i = 0; i < 10; ++i) {
7976 #pragma omp parallel // OK
7977     {
7978 #pragma omp single
7979       {
7980         bar();
7981       }
7982     }
7983   }
7984 #pragma omp target
7985 #pragma omp teams distribute parallel for
7986   for (int i = 0; i < 10; ++i) {
7987 #pragma omp parallel for // OK
7988     for (int i = 0; i < 10; ++i)
7989       ;
7990   }
7991 #pragma omp target
7992 #pragma omp teams distribute parallel for
7993   for (int i = 0; i < 10; ++i) {
7994 #pragma omp parallel for simd // OK
7995     for (int i = 0; i < 10; ++i)
7996       ;
7997   }
7998 #pragma omp target
7999 #pragma omp teams distribute parallel for
8000   for (int i = 0; i < 10; ++i) {
8001 #pragma omp parallel sections // OK
8002     {
8003       bar();
8004     }
8005   }
8006 #pragma omp target
8007 #pragma omp teams distribute parallel for
8008   for (int i = 0; i < 10; ++i) {
8009 #pragma omp task // OK
8010     {
8011       bar();
8012     }
8013   }
8014 #pragma omp target
8015 #pragma omp teams distribute parallel for
8016   for (int i = 0; i < 10; ++i) {
8017 #pragma omp taskyield // OK
8018     bar();
8019   }
8020 #pragma omp target
8021 #pragma omp teams distribute parallel for
8022   for (int i = 0; i < 10; ++i) {
8023 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8024     bar();
8025   }
8026 #pragma omp target
8027 #pragma omp teams distribute parallel for
8028   for (int i = 0; i < 10; ++i) {
8029 #pragma omp taskwait // OK
8030     bar();
8031   }
8032 #pragma omp target
8033 #pragma omp teams distribute parallel for
8034   for (int i = 0; i < 10; ++i) {
8035 #pragma omp flush // OK
8036     bar();
8037   }
8038 #pragma omp target
8039 #pragma omp teams distribute parallel for
8040   for (int i = 0; i < 10; ++i) {
8041 #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?}}
8042     bar();
8043   }
8044 #pragma omp target
8045 #pragma omp teams distribute parallel for
8046   for (int i = 0; i < 10; ++i) {
8047 #pragma omp atomic // OK
8048     ++a;
8049   }
8050 #pragma omp target
8051 #pragma omp teams distribute parallel for
8052   for (int i = 0; i < 10; ++i) {
8053 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8054     ++a;
8055   }
8056 #pragma omp target
8057 #pragma omp teams distribute parallel for
8058   for (int i = 0; i < 10; ++i) {
8059 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
8060     ++a;
8061   }
8062 #pragma omp target
8063 #pragma omp teams distribute parallel for
8064   for (int i = 0; i < 10; ++i) {
8065 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8066     for (int i = 0; i < 10; ++i)
8067       ;
8068   }
8069 #pragma omp target
8070 #pragma omp teams distribute parallel for
8071   for (int i = 0; i < 10; ++i) {
8072 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8073     ++a;
8074   }
8075 #pragma omp target
8076 #pragma omp teams distribute parallel for
8077   for (int i = 0; i < 10; ++i) {
8078 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8079     ++a;
8080   }
8081 #pragma omp target
8082 #pragma omp teams distribute parallel for
8083   for (int i = 0; i < 10; ++i) {
8084 #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?}}
8085     ++a;
8086   }
8087 #pragma omp target
8088 #pragma omp teams distribute parallel for
8089   for (int i = 0; i < 10; ++i) {
8090 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8091     ++a;
8092   }
8093 #pragma omp target
8094 #pragma omp teams distribute parallel for
8095   for (int i = 0; i < 10; ++i) {
8096 #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?}}
8097     for (int i = 0; i < 10; ++i)
8098       ++a;
8099   }
8100 #pragma omp target
8101 #pragma omp teams distribute parallel for
8102   for (int i = 0; i < 10; ++i) {
8103 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
8104     for (int i = 0; i < 10; ++i)
8105       ++a;
8106   }
8107 #pragma omp target
8108 #pragma omp teams distribute parallel for
8109   for (int i = 0; i < 10; ++i) {
8110 #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?}}
8111     for (int i = 0; i < 10; ++i)
8112       ++a;
8113   }
8114 #pragma omp target
8115 #pragma omp teams distribute parallel for
8116   for (int i = 0; i < 10; ++i) {
8117 #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?}}
8118     for (int i = 0; i < 10; ++i)
8119       ++a;
8120   }
8121 #pragma omp target
8122 #pragma omp teams distribute parallel for
8123   for (int i = 0; i < 10; ++i) {
8124 #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?}}
8125     for (int i = 0; i < 10; ++i)
8126       ++a;
8127   }
8128 #pragma omp target
8129 #pragma omp teams distribute parallel for
8130   for (int i = 0; i < 10; ++i) {
8131 #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?}}
8132     for (int i = 0; i < 10; ++i)
8133       ++a;
8134   }
8135 #pragma omp target
8136 #pragma omp teams distribute parallel for
8137   for (int i = 0; i < 10; ++i) {
8138 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
8139     ++a;
8140   }
8141 #pragma omp target
8142 #pragma omp teams distribute parallel for
8143   for (int i = 0; i < 10; ++i) {
8144 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
8145     for (int i = 0; i < 10; ++i)
8146       ++a;
8147   }
8148 #pragma omp target
8149 #pragma omp teams distribute parallel for
8150   for (int i = 0; i < 10; ++i) {
8151 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
8152     for (int i = 0; i < 10; ++i)
8153       ++a;
8154   }
8155 #pragma omp target
8156 #pragma omp teams distribute parallel for
8157   for (int i = 0; i < 10; ++i) {
8158 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
8159     for (int i = 0; i < 10; ++i)
8160       ++a;
8161   }
8162 #pragma omp target
8163 #pragma omp teams distribute parallel for
8164   for (int i = 0; i < 10; ++i) {
8165 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
8166     for (int i = 0; i < 10; ++i)
8167       ++a;
8168   }
8169 
8170 // TARGET TEAMS DIRECTIVE
8171 #pragma omp target teams
8172 #pragma omp parallel
8173   bar();
8174 #pragma omp target teams
8175 #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?}}
8176   for (int i = 0; i < 10; ++i)
8177     ;
8178 #pragma omp target teams
8179 #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?}}
8180   for (int i = 0; i < 10; ++i)
8181     ;
8182 #pragma omp target teams
8183 #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?}}
8184   for (int i = 0; i < 10; ++i)
8185     ;
8186 #pragma omp target teams
8187 #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?}}
8188   {
8189     bar();
8190   }
8191 #pragma omp target teams
8192 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
8193   {
8194     bar();
8195   }
8196 #pragma omp target teams
8197 #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?}}
8198   bar();
8199 
8200 #pragma omp target teams
8201 #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?}}
8202   {
8203     bar();
8204   }
8205 #pragma omp target teams
8206 #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?}}
8207   {
8208     bar();
8209   }
8210 #pragma omp target teams
8211 #pragma omp parallel for
8212   for (int i = 0; i < 10; ++i)
8213     ;
8214 #pragma omp target teams
8215 #pragma omp parallel for simd
8216   for (int i = 0; i < 10; ++i)
8217     ;
8218 #pragma omp target teams
8219 #pragma omp parallel sections
8220   {
8221     bar();
8222   }
8223 #pragma omp target teams
8224 #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?}}
8225   {
8226     bar();
8227   }
8228 #pragma omp target teams
8229   {
8230 #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?}}
8231     bar();
8232   }
8233 #pragma omp target teams
8234   {
8235 #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?}}
8236     bar();
8237   }
8238 #pragma omp target teams
8239   {
8240 #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?}}
8241     bar();
8242   }
8243 #pragma omp target teams
8244   {
8245 #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?}}
8246     bar();
8247   }
8248 #pragma omp target teams
8249   {
8250 #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?}}
8251     bar();
8252   }
8253 #pragma omp target teams
8254   {
8255 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
8256     ++a;
8257   }
8258 #pragma omp target teams
8259   {
8260 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
8261     ++a;
8262   }
8263 #pragma omp target teams
8264   {
8265 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
8266     ++a;
8267   }
8268 #pragma omp target teams
8269 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8270   for (int i = 0; i < 10; ++i)
8271     ;
8272 #pragma omp target teams
8273   {
8274 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8275   }
8276 #pragma omp target teams
8277   {
8278 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8279   }
8280 #pragma omp target teams
8281   {
8282 #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?}}
8283     ++a;
8284   }
8285 #pragma omp target teams
8286   {
8287 #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?}}
8288   for (int i = 0; i < 10; ++i)
8289     ++a;
8290   }
8291 #pragma omp target teams
8292 #pragma omp distribute
8293   for (int i = 0; i < 10; ++i)
8294     ;
8295 #pragma omp target teams
8296   {
8297 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
8298     ++a;
8299   }
8300 #pragma omp target teams
8301 #pragma omp distribute parallel for
8302   for (int i = 0; i < 10; ++i)
8303     ;
8304 #pragma omp target teams
8305   {
8306 #pragma omp distribute parallel for
8307   for (int i = 0; i < 10; ++i)
8308     ;
8309 #pragma omp distribute parallel for
8310   for (int j = 0; j < 10; ++j)
8311     ;
8312   }
8313 #pragma omp target teams
8314   {
8315 #pragma omp distribute parallel for simd
8316   for (int i = 0; i < 10; ++i)
8317     ;
8318 #pragma omp distribute parallel for simd
8319   for (int j = 0; j < 10; ++j)
8320     ;
8321   }
8322 #pragma omp target teams
8323   {
8324 #pragma omp distribute simd
8325   for (int i = 0; i < 10; ++i)
8326     ;
8327 #pragma omp distribute simd
8328   for (int j = 0; j < 10; ++j)
8329     ;
8330   }
8331 #pragma omp target teams
8332   {
8333 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
8334   for (int i = 0; i < 10; ++i)
8335     ;
8336   }
8337 #pragma omp target teams
8338   {
8339 #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?}}
8340   for (int i = 0; i < 10; ++i)
8341     ;
8342   }
8343 #pragma omp target teams
8344   {
8345 #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?}}
8346   for (int i = 0; i < 10; ++i)
8347     ;
8348   }
8349 #pragma omp target teams
8350   {
8351 #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?}}
8352   for (int i = 0; i < 10; ++i)
8353     ;
8354   }
8355 #pragma omp target teams
8356   {
8357 #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?}}
8358   for (int i = 0; i < 10; ++i)
8359     ;
8360   }
8361 #pragma omp target teams
8362   {
8363 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
8364     a++;
8365   }
8366 #pragma omp target teams
8367   {
8368 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
8369   for (int i = 0; i < 10; ++i)
8370     ;
8371   }
8372 #pragma omp target teams
8373   {
8374 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8375   for (int i = 0; i < 10; ++i)
8376     ;
8377   }
8378 #pragma omp target teams
8379   {
8380 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
8381   for (int i = 0; i < 10; ++i)
8382     ;
8383   }
8384 #pragma omp target teams
8385   {
8386 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
8387   for (int i = 0; i < 10; ++i)
8388     ;
8389   }
8390 
8391 // TARGET TEAMS DISTRIBUTE DIRECTIVE
8392 #pragma omp target teams distribute // OK
8393   for (int i = 0; i < 10; ++i)
8394     ;
8395 #pragma omp target teams distribute
8396   for (int i = 0; i < 10; ++i) {
8397 #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?}}
8398     for (int i = 0; i < 10; ++i)
8399       ;
8400   }
8401 #pragma omp target teams distribute
8402   for (int i = 0; i < 10; ++i) {
8403 #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?}}
8404     for (int i = 0; i < 10; ++i)
8405       ;
8406   }
8407 #pragma omp target teams distribute
8408   for (int i = 0; i < 10; ++i) {
8409 #pragma omp for // OK
8410     for (int i = 0; i < 10; ++i)
8411       ;
8412   }
8413 #pragma omp target teams distribute
8414   for (int i = 0; i < 10; ++i) {
8415 #pragma omp simd // OK
8416     for (int i = 0; i < 10; ++i)
8417       ;
8418   }
8419 #pragma omp target teams distribute
8420   for (int i = 0; i < 10; ++i) {
8421 #pragma omp for simd // OK
8422     for (int i = 0; i < 10; ++i)
8423       ;
8424   }
8425 #pragma omp target teams distribute
8426   for (int i = 0; i < 10; ++i) {
8427 #pragma omp parallel // OK
8428     for (int i = 0; i < 10; ++i)
8429       ;
8430   }
8431 #pragma omp target teams distribute
8432   for (int i = 0; i < 10; ++i) {
8433 #pragma omp sections // OK
8434     {
8435       bar();
8436     }
8437   }
8438 #pragma omp target teams distribute
8439   for (int i = 0; i < 10; ++i) {
8440 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
8441     {
8442       bar();
8443     }
8444   }
8445 #pragma omp target teams distribute
8446   for (int i = 0; i < 10; ++i) {
8447 #pragma omp single // OK
8448     {
8449       bar();
8450     }
8451   }
8452 #pragma omp target teams distribute
8453   for (int i = 0; i < 10; ++i) {
8454 #pragma omp master // OK
8455     {
8456       bar();
8457     }
8458   }
8459 #pragma omp target teams distribute
8460   for (int i = 0; i < 10; ++i) {
8461 #pragma omp critical // OK
8462     {
8463       bar();
8464     }
8465   }
8466 #pragma omp target teams distribute
8467   for (int i = 0; i < 10; ++i) {
8468 #pragma omp parallel // OK
8469     {
8470 #pragma omp single
8471       {
8472         bar();
8473       }
8474     }
8475   }
8476 #pragma omp target teams distribute
8477   for (int i = 0; i < 10; ++i) {
8478 #pragma omp parallel for // OK
8479     for (int i = 0; i < 10; ++i)
8480       ;
8481   }
8482 #pragma omp target teams distribute
8483   for (int i = 0; i < 10; ++i) {
8484 #pragma omp parallel for simd // OK
8485     for (int i = 0; i < 10; ++i)
8486       ;
8487   }
8488 #pragma omp target teams distribute
8489   for (int i = 0; i < 10; ++i) {
8490 #pragma omp parallel sections // OK
8491     {
8492       bar();
8493     }
8494   }
8495 #pragma omp target teams distribute
8496   for (int i = 0; i < 10; ++i) {
8497 #pragma omp task // OK
8498     {
8499       bar();
8500     }
8501   }
8502 #pragma omp target teams distribute
8503   for (int i = 0; i < 10; ++i) {
8504 #pragma omp taskyield // OK
8505     bar();
8506   }
8507 #pragma omp target teams distribute
8508   for (int i = 0; i < 10; ++i) {
8509 #pragma omp barrier // OK
8510     bar();
8511   }
8512 #pragma omp target teams distribute
8513   for (int i = 0; i < 10; ++i) {
8514 #pragma omp taskwait // OK
8515     bar();
8516   }
8517 #pragma omp target teams distribute
8518   for (int i = 0; i < 10; ++i) {
8519 #pragma omp flush // OK
8520     bar();
8521   }
8522 #pragma omp target teams distribute
8523   for (int i = 0; i < 10; ++i) {
8524 #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?}}
8525     bar();
8526   }
8527 #pragma omp target teams distribute
8528   for (int i = 0; i < 10; ++i) {
8529 #pragma omp atomic // OK
8530     ++a;
8531   }
8532 #pragma omp target teams distribute
8533   for (int i = 0; i < 10; ++i) {
8534 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8535     ++a;
8536   }
8537 #pragma omp target teams distribute
8538   for (int i = 0; i < 10; ++i) {
8539 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8540     ++a;
8541   }
8542 #pragma omp target teams distribute
8543   for (int i = 0; i < 10; ++i) {
8544 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8545     for (int i = 0; i < 10; ++i)
8546       ;
8547   }
8548 #pragma omp target teams distribute
8549   for (int i = 0; i < 10; ++i) {
8550 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8551     ++a;
8552   }
8553 #pragma omp target teams distribute
8554   for (int i = 0; i < 10; ++i) {
8555 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8556     ++a;
8557   }
8558 #pragma omp target teams distribute
8559   for (int i = 0; i < 10; ++i) {
8560 #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?}}
8561     ++a;
8562   }
8563 #pragma omp target teams distribute
8564   for (int i = 0; i < 10; ++i) {
8565 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8566     ++a;
8567   }
8568 #pragma omp target teams distribute
8569   for (int i = 0; i < 10; ++i) {
8570 #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?}}
8571     for (int i = 0; i < 10; ++i)
8572       ++a;
8573   }
8574 #pragma omp target teams distribute
8575   for (int i = 0; i < 10; ++i) {
8576 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8577     for (int i = 0; i < 10; ++i)
8578       ++a;
8579   }
8580 #pragma omp target teams distribute
8581   for (int i = 0; i < 10; ++i) {
8582 #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?}}
8583     for (int i = 0; i < 10; ++i)
8584       ++a;
8585   }
8586 #pragma omp target teams distribute
8587   for (int i = 0; i < 10; ++i) {
8588 #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?}}
8589     for (int i = 0; i < 10; ++i)
8590       ++a;
8591   }
8592 #pragma omp target teams distribute
8593   for (int i = 0; i < 10; ++i) {
8594 #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?}}
8595     for (int i = 0; i < 10; ++i)
8596       ++a;
8597   }
8598 #pragma omp target teams distribute
8599   for (int i = 0; i < 10; ++i) {
8600 #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?}}
8601     for (int i = 0; i < 10; ++i)
8602       ;
8603   }
8604 #pragma omp target teams distribute
8605   for (int i = 0; i < 10; ++i) {
8606 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8607     a++;
8608   }
8609 #pragma omp target teams distribute
8610   for (int i = 0; i < 10; ++i) {
8611 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8612     for (int i = 0; i < 10; ++i)
8613       ;
8614   }
8615 #pragma omp target teams distribute
8616   for (int i = 0; i < 10; ++i) {
8617 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8618     for (int i = 0; i < 10; ++i)
8619       ;
8620   }
8621 #pragma omp target teams distribute
8622   for (int i = 0; i < 10; ++i) {
8623 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8624     for (int i = 0; i < 10; ++i)
8625       ;
8626   }
8627 #pragma omp target teams distribute
8628   for (int i = 0; i < 10; ++i) {
8629 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8630     for (int i = 0; i < 10; ++i)
8631       ;
8632   }
8633 
8634 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8635 #pragma omp target teams distribute parallel for // OK
8636   for (int i = 0; i < 10; ++i)
8637     ;
8638 #pragma omp target teams distribute parallel for
8639   for (int i = 0; i < 10; ++i) {
8640 #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?}}
8641     for (int i = 0; i < 10; ++i)
8642       ;
8643   }
8644 #pragma omp target teams distribute parallel for
8645   for (int i = 0; i < 10; ++i) {
8646 #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?}}
8647     for (int i = 0; i < 10; ++i)
8648       ;
8649   }
8650 #pragma omp target teams distribute parallel for
8651   for (int i = 0; i < 10; ++i) {
8652 #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?}}
8653     for (int i = 0; i < 10; ++i)
8654       ;
8655   }
8656 #pragma omp target teams distribute parallel for
8657   for (int i = 0; i < 10; ++i) {
8658 #pragma omp simd // OK
8659     for (int i = 0; i < 10; ++i)
8660       ;
8661   }
8662 #pragma omp target teams distribute parallel for
8663   for (int i = 0; i < 10; ++i) {
8664 #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?}}
8665     for (int i = 0; i < 10; ++i)
8666       ;
8667   }
8668 #pragma omp target teams distribute parallel for
8669   for (int i = 0; i < 10; ++i) {
8670 #pragma omp parallel // OK
8671     for (int i = 0; i < 10; ++i)
8672       ;
8673   }
8674 #pragma omp target teams distribute parallel for
8675   for (int i = 0; i < 10; ++i) {
8676 #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?}}
8677     {
8678       bar();
8679     }
8680   }
8681 #pragma omp target teams distribute parallel for
8682   for (int i = 0; i < 10; ++i) {
8683 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
8684     {
8685       bar();
8686     }
8687   }
8688 #pragma omp target teams distribute parallel for
8689   for (int i = 0; i < 10; ++i) {
8690 #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?}}
8691     {
8692       bar();
8693     }
8694   }
8695 #pragma omp target teams distribute parallel for
8696   for (int i = 0; i < 10; ++i) {
8697 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8698     {
8699       bar();
8700     }
8701   }
8702 #pragma omp target teams distribute parallel for
8703   for (int i = 0; i < 10; ++i) {
8704 #pragma omp critical // OK
8705     {
8706       bar();
8707     }
8708   }
8709 #pragma omp target teams distribute parallel for
8710   for (int i = 0; i < 10; ++i) {
8711 #pragma omp parallel // OK
8712     {
8713 #pragma omp single
8714       {
8715         bar();
8716       }
8717     }
8718   }
8719 #pragma omp target teams distribute parallel for
8720   for (int i = 0; i < 10; ++i) {
8721 #pragma omp parallel for // OK
8722     for (int i = 0; i < 10; ++i)
8723       ;
8724   }
8725 #pragma omp target teams distribute parallel for
8726   for (int i = 0; i < 10; ++i) {
8727 #pragma omp parallel for simd // OK
8728     for (int i = 0; i < 10; ++i)
8729       ;
8730   }
8731 #pragma omp target teams distribute parallel for
8732   for (int i = 0; i < 10; ++i) {
8733 #pragma omp parallel sections // OK
8734     {
8735       bar();
8736     }
8737   }
8738 #pragma omp target teams distribute parallel for
8739   for (int i = 0; i < 10; ++i) {
8740 #pragma omp task // OK
8741     {
8742       bar();
8743     }
8744   }
8745 #pragma omp target teams distribute parallel for
8746   for (int i = 0; i < 10; ++i) {
8747 #pragma omp taskyield // OK
8748     bar();
8749   }
8750 #pragma omp target teams distribute parallel for
8751   for (int i = 0; i < 10; ++i) {
8752 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8753     bar();
8754   }
8755 #pragma omp target teams distribute parallel for
8756   for (int i = 0; i < 10; ++i) {
8757 #pragma omp taskwait // OK
8758     bar();
8759   }
8760 #pragma omp target teams distribute parallel for
8761   for (int i = 0; i < 10; ++i) {
8762 #pragma omp flush // OK
8763     bar();
8764   }
8765 #pragma omp target teams distribute parallel for
8766   for (int i = 0; i < 10; ++i) {
8767 #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?}}
8768     bar();
8769   }
8770 #pragma omp target teams distribute parallel for
8771   for (int i = 0; i < 10; ++i) {
8772 #pragma omp atomic // OK
8773     ++a;
8774   }
8775 #pragma omp target teams distribute parallel for
8776   for (int i = 0; i < 10; ++i) {
8777 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8778     ++a;
8779   }
8780 #pragma omp target teams distribute parallel for
8781   for (int i = 0; i < 10; ++i) {
8782 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8783     ++a;
8784   }
8785 #pragma omp target teams distribute parallel for
8786   for (int i = 0; i < 10; ++i) {
8787 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8788     for (int i = 0; i < 10; ++i)
8789       ;
8790   }
8791 #pragma omp target teams distribute parallel for
8792   for (int i = 0; i < 10; ++i) {
8793 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8794     ++a;
8795   }
8796 #pragma omp target teams distribute parallel for
8797   for (int i = 0; i < 10; ++i) {
8798 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8799     ++a;
8800   }
8801 #pragma omp target teams distribute parallel for
8802   for (int i = 0; i < 10; ++i) {
8803 #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?}}
8804     ++a;
8805   }
8806 #pragma omp target teams distribute parallel for
8807   for (int i = 0; i < 10; ++i) {
8808 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8809     ++a;
8810   }
8811 #pragma omp target teams distribute parallel for
8812   for (int i = 0; i < 10; ++i) {
8813 #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?}}
8814     for (int i = 0; i < 10; ++i)
8815       ++a;
8816   }
8817 #pragma omp target teams distribute parallel for
8818   for (int i = 0; i < 10; ++i) {
8819 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8820     for (int i = 0; i < 10; ++i)
8821       ++a;
8822   }
8823 #pragma omp target teams distribute parallel for
8824   for (int i = 0; i < 10; ++i) {
8825 #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?}}
8826     for (int i = 0; i < 10; ++i)
8827       ++a;
8828   }
8829 #pragma omp target teams distribute parallel for
8830   for (int i = 0; i < 10; ++i) {
8831 #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?}}
8832     for (int i = 0; i < 10; ++i)
8833       ++a;
8834   }
8835 #pragma omp target teams distribute parallel for
8836   for (int i = 0; i < 10; ++i) {
8837 #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?}}
8838     for (int i = 0; i < 10; ++i)
8839       ++a;
8840   }
8841 #pragma omp target teams distribute parallel for
8842   for (int i = 0; i < 10; ++i) {
8843 #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?}}
8844     for (int i = 0; i < 10; ++i)
8845       ;
8846   }
8847 #pragma omp target teams distribute parallel for
8848   for (int i = 0; i < 10; ++i) {
8849 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8850     a++;
8851   }
8852 #pragma omp target teams distribute parallel for
8853   for (int i = 0; i < 10; ++i) {
8854 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8855     for (int i = 0; i < 10; ++i)
8856       ;
8857   }
8858 #pragma omp target teams distribute parallel for
8859   for (int i = 0; i < 10; ++i) {
8860 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8861     for (int i = 0; i < 10; ++i)
8862       ;
8863   }
8864 #pragma omp target teams distribute parallel for
8865   for (int i = 0; i < 10; ++i) {
8866 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8867     for (int i = 0; i < 10; ++i)
8868       ;
8869   }
8870 #pragma omp target teams distribute parallel for
8871   for (int i = 0; i < 10; ++i) {
8872 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8873     for (int i = 0; i < 10; ++i)
8874       ;
8875   }
8876 
8877 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
8878 #pragma omp target teams distribute parallel for simd // OK
8879   for (int i = 0; i < 10; ++i)
8880     ;
8881 #pragma omp target teams distribute parallel for simd
8882   for (int i = 0; i < 10; ++i) {
8883 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8884     for (int i = 0; i < 10; ++i)
8885       ;
8886   }
8887 #pragma omp target teams distribute parallel for simd
8888   for (int i = 0; i < 10; ++i) {
8889 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8890     for (int i = 0; i < 10; ++i)
8891       ;
8892   }
8893 #pragma omp target teams distribute parallel for simd
8894   for (int i = 0; i < 10; ++i) {
8895 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8896     for (int i = 0; i < 10; ++i)
8897       ;
8898   }
8899 #pragma omp target teams distribute parallel for simd
8900   for (int i = 0; i < 10; ++i) {
8901 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8902     for (int i = 0; i < 10; ++i)
8903       ;
8904   }
8905 #pragma omp target teams distribute parallel for simd
8906   for (int i = 0; i < 10; ++i) {
8907 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8908     for (int i = 0; i < 10; ++i)
8909       ;
8910   }
8911 #pragma omp target teams distribute parallel for simd
8912   for (int i = 0; i < 10; ++i) {
8913 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8914     for (int i = 0; i < 10; ++i)
8915       ;
8916   }
8917 #pragma omp target teams distribute parallel for simd
8918   for (int i = 0; i < 10; ++i) {
8919 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8920     {
8921       bar();
8922     }
8923   }
8924 #pragma omp target teams distribute parallel for simd
8925   for (int i = 0; i < 10; ++i) {
8926 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8927     {
8928       bar();
8929     }
8930   }
8931 #pragma omp target teams distribute parallel for simd
8932   for (int i = 0; i < 10; ++i) {
8933 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8934     {
8935       bar();
8936     }
8937   }
8938 #pragma omp target teams distribute parallel for simd
8939   for (int i = 0; i < 10; ++i) {
8940 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8941     {
8942       bar();
8943     }
8944   }
8945 #pragma omp target teams distribute parallel for simd
8946   for (int i = 0; i < 10; ++i) {
8947 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8948     {
8949       bar();
8950     }
8951   }
8952 #pragma omp target teams distribute parallel for simd
8953   for (int i = 0; i < 10; ++i) {
8954 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8955     {
8956 #pragma omp single
8957       {
8958         bar();
8959       }
8960     }
8961   }
8962 #pragma omp target teams distribute parallel for simd
8963   for (int i = 0; i < 10; ++i) {
8964 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8965     for (int i = 0; i < 10; ++i)
8966       ;
8967   }
8968 #pragma omp target teams distribute parallel for simd
8969   for (int i = 0; i < 10; ++i) {
8970 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8971     for (int i = 0; i < 10; ++i)
8972       ;
8973   }
8974 #pragma omp target teams distribute parallel for simd
8975   for (int i = 0; i < 10; ++i) {
8976 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8977     {
8978       bar();
8979     }
8980   }
8981 #pragma omp target teams distribute parallel for simd
8982   for (int i = 0; i < 10; ++i) {
8983 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8984     {
8985       bar();
8986     }
8987   }
8988 #pragma omp target teams distribute parallel for simd
8989   for (int i = 0; i < 10; ++i) {
8990 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8991     bar();
8992   }
8993 #pragma omp target teams distribute parallel for simd
8994   for (int i = 0; i < 10; ++i) {
8995 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8996     bar();
8997   }
8998 #pragma omp target teams distribute parallel for simd
8999   for (int i = 0; i < 10; ++i) {
9000 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9001     bar();
9002   }
9003 #pragma omp target teams distribute parallel for simd
9004   for (int i = 0; i < 10; ++i) {
9005 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9006     bar();
9007   }
9008 #pragma omp target teams distribute parallel for simd
9009   for (int i = 0; i < 10; ++i) {
9010 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9011     bar();
9012   }
9013 #pragma omp target teams distribute parallel for simd
9014   for (int i = 0; i < 10; ++i) {
9015 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK
9016     ++a;
9017   }
9018 #pragma omp target teams distribute parallel for simd
9019   for (int i = 0; i < 10; ++i) {
9020 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9021     ++a;
9022   }
9023 #pragma omp target teams distribute parallel for simd
9024   for (int i = 0; i < 10; ++i) {
9025 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9026     ++a;
9027   }
9028 #pragma omp target teams distribute parallel for simd
9029   for (int i = 0; i < 10; ++i) {
9030 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9031     for (int i = 0; i < 10; ++i)
9032       ;
9033   }
9034 #pragma omp target teams distribute parallel for simd
9035   for (int i = 0; i < 10; ++i) {
9036 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9037     ++a;
9038   }
9039 #pragma omp target teams distribute parallel for simd
9040   for (int i = 0; i < 10; ++i) {
9041 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9042     ++a;
9043   }
9044 #pragma omp target teams distribute parallel for simd
9045   for (int i = 0; i < 10; ++i) {
9046 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9047     ++a;
9048   }
9049 #pragma omp target teams distribute parallel for simd
9050   for (int i = 0; i < 10; ++i) {
9051 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9052     ++a;
9053   }
9054 #pragma omp target teams distribute parallel for simd
9055   for (int i = 0; i < 10; ++i) {
9056 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9057     for (int i = 0; i < 10; ++i)
9058       ++a;
9059   }
9060 #pragma omp target teams distribute parallel for simd
9061   for (int i = 0; i < 10; ++i) {
9062 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9063     for (int i = 0; i < 10; ++i)
9064       ++a;
9065   }
9066 #pragma omp target teams distribute parallel for simd
9067   for (int i = 0; i < 10; ++i) {
9068 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9069     for (int i = 0; i < 10; ++i)
9070       ++a;
9071   }
9072 #pragma omp target teams distribute parallel for simd
9073   for (int i = 0; i < 10; ++i) {
9074 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9075     for (int i = 0; i < 10; ++i)
9076       ++a;
9077   }
9078 #pragma omp target teams distribute parallel for simd
9079   for (int i = 0; i < 10; ++i) {
9080 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9081     for (int i = 0; i < 10; ++i)
9082       ++a;
9083   }
9084 #pragma omp target teams distribute parallel for simd
9085   for (int i = 0; i < 10; ++i) {
9086 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9087     for (int i = 0; i < 10; ++i)
9088       ;
9089   }
9090 #pragma omp target teams distribute parallel for simd
9091   for (int i = 0; i < 10; ++i) {
9092 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9093     a++;
9094   }
9095 #pragma omp target teams distribute parallel for simd
9096   for (int i = 0; i < 10; ++i) {
9097 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9098     for (int i = 0; i < 10; ++i)
9099       ;
9100   }
9101 #pragma omp target teams distribute parallel for simd
9102   for (int i = 0; i < 10; ++i) {
9103 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9104     for (int i = 0; i < 10; ++i)
9105       ;
9106   }
9107 #pragma omp target teams distribute parallel for simd
9108   for (int i = 0; i < 10; ++i) {
9109 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9110     for (int i = 0; i < 10; ++i)
9111       ;
9112   }
9113 #pragma omp target teams distribute parallel for simd
9114   for (int i = 0; i < 10; ++i) {
9115 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9116     for (int i = 0; i < 10; ++i)
9117       ;
9118   }
9119 
9120 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
9121 #pragma omp target teams distribute simd // OK
9122   for (int i = 0; i < 10; ++i)
9123     ;
9124 #pragma omp target teams distribute simd
9125   for (int i = 0; i < 10; ++i) {
9126 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9127     for (int i = 0; i < 10; ++i)
9128       ;
9129   }
9130 #pragma omp target teams distribute simd
9131   for (int i = 0; i < 10; ++i) {
9132 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9133     for (int i = 0; i < 10; ++i)
9134       ;
9135   }
9136 #pragma omp target teams distribute simd
9137   for (int i = 0; i < 10; ++i) {
9138 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9139     for (int i = 0; i < 10; ++i)
9140       ;
9141   }
9142 #pragma omp target teams distribute simd
9143   for (int i = 0; i < 10; ++i) {
9144 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9145     for (int i = 0; i < 10; ++i)
9146       ;
9147   }
9148 #pragma omp target teams distribute simd
9149   for (int i = 0; i < 10; ++i) {
9150 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9151     for (int i = 0; i < 10; ++i)
9152       ;
9153   }
9154 #pragma omp target teams distribute simd
9155   for (int i = 0; i < 10; ++i) {
9156 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9157     for (int i = 0; i < 10; ++i)
9158       ;
9159   }
9160 #pragma omp target teams distribute simd
9161   for (int i = 0; i < 10; ++i) {
9162 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9163     {
9164       bar();
9165     }
9166   }
9167 #pragma omp target teams distribute simd
9168   for (int i = 0; i < 10; ++i) {
9169 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9170     {
9171       bar();
9172     }
9173   }
9174 #pragma omp target teams distribute simd
9175   for (int i = 0; i < 10; ++i) {
9176 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9177     {
9178       bar();
9179     }
9180   }
9181 #pragma omp target teams distribute simd
9182   for (int i = 0; i < 10; ++i) {
9183 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9184     {
9185       bar();
9186     }
9187   }
9188 #pragma omp target teams distribute simd
9189   for (int i = 0; i < 10; ++i) {
9190 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9191     {
9192       bar();
9193     }
9194   }
9195 #pragma omp target teams distribute simd
9196   for (int i = 0; i < 10; ++i) {
9197 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9198     {
9199 #pragma omp single
9200       {
9201         bar();
9202       }
9203     }
9204   }
9205 #pragma omp target teams distribute simd
9206   for (int i = 0; i < 10; ++i) {
9207 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9208     for (int i = 0; i < 10; ++i)
9209       ;
9210   }
9211 #pragma omp target teams distribute simd
9212   for (int i = 0; i < 10; ++i) {
9213 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9214     for (int i = 0; i < 10; ++i)
9215       ;
9216   }
9217 #pragma omp target teams distribute simd
9218   for (int i = 0; i < 10; ++i) {
9219 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9220     {
9221       bar();
9222     }
9223   }
9224 #pragma omp target teams distribute simd
9225   for (int i = 0; i < 10; ++i) {
9226 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9227     {
9228       bar();
9229     }
9230   }
9231 #pragma omp target teams distribute simd
9232   for (int i = 0; i < 10; ++i) {
9233 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9234     bar();
9235   }
9236 #pragma omp target teams distribute simd
9237   for (int i = 0; i < 10; ++i) {
9238 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9239     bar();
9240   }
9241 #pragma omp target teams distribute simd
9242   for (int i = 0; i < 10; ++i) {
9243 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9244     bar();
9245   }
9246 #pragma omp target teams distribute simd
9247   for (int i = 0; i < 10; ++i) {
9248 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9249     bar();
9250   }
9251 #pragma omp target teams distribute simd
9252   for (int i = 0; i < 10; ++i) {
9253 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9254     bar();
9255   }
9256 #pragma omp target teams distribute simd
9257   for (int i = 0; i < 10; ++i) {
9258 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK
9259     ++a;
9260   }
9261 #pragma omp target teams distribute simd
9262   for (int i = 0; i < 10; ++i) {
9263 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9264     ++a;
9265   }
9266 #pragma omp target teams distribute simd
9267   for (int i = 0; i < 10; ++i) {
9268 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9269     ++a;
9270   }
9271 #pragma omp target teams distribute simd
9272   for (int i = 0; i < 10; ++i) {
9273 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9274     for (int i = 0; i < 10; ++i)
9275       ;
9276   }
9277 #pragma omp target teams distribute simd
9278   for (int i = 0; i < 10; ++i) {
9279 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9280     ++a;
9281   }
9282 #pragma omp target teams distribute simd
9283   for (int i = 0; i < 10; ++i) {
9284 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9285     ++a;
9286   }
9287 #pragma omp target teams distribute simd
9288   for (int i = 0; i < 10; ++i) {
9289 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9290     ++a;
9291   }
9292 #pragma omp target teams distribute simd
9293   for (int i = 0; i < 10; ++i) {
9294 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9295     ++a;
9296   }
9297 #pragma omp target teams distribute simd
9298   for (int i = 0; i < 10; ++i) {
9299 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9300     for (int i = 0; i < 10; ++i)
9301       ++a;
9302   }
9303 #pragma omp target teams distribute simd
9304   for (int i = 0; i < 10; ++i) {
9305 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9306     for (int i = 0; i < 10; ++i)
9307       ++a;
9308   }
9309 #pragma omp target teams distribute simd
9310   for (int i = 0; i < 10; ++i) {
9311 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9312     for (int i = 0; i < 10; ++i)
9313       ++a;
9314   }
9315 #pragma omp target teams distribute simd
9316   for (int i = 0; i < 10; ++i) {
9317 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9318     for (int i = 0; i < 10; ++i)
9319       ++a;
9320   }
9321 #pragma omp target teams distribute simd
9322   for (int i = 0; i < 10; ++i) {
9323 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9324     for (int i = 0; i < 10; ++i)
9325       ++a;
9326   }
9327 #pragma omp target teams distribute simd
9328   for (int i = 0; i < 10; ++i) {
9329 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9330     for (int i = 0; i < 10; ++i)
9331       ;
9332   }
9333 #pragma omp target teams distribute simd
9334   for (int i = 0; i < 10; ++i) {
9335 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9336     a++;
9337   }
9338 #pragma omp target teams distribute simd
9339   for (int i = 0; i < 10; ++i) {
9340 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9341     for (int i = 0; i < 10; ++i)
9342       ;
9343   }
9344 #pragma omp target teams distribute simd
9345   for (int i = 0; i < 10; ++i) {
9346 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9347     for (int i = 0; i < 10; ++i)
9348       ;
9349   }
9350 #pragma omp target teams distribute simd
9351   for (int i = 0; i < 10; ++i) {
9352 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9353     for (int i = 0; i < 10; ++i)
9354       ;
9355   }
9356 #pragma omp target teams distribute simd
9357   for (int i = 0; i < 10; ++i) {
9358 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9359     for (int i = 0; i < 10; ++i)
9360       ;
9361   }
9362 
9363 }
9364 
9365 void foo() {
9366   int a = 0;
9367 // PARALLEL DIRECTIVE
9368 #pragma omp parallel
9369 #pragma omp for
9370   for (int i = 0; i < 10; ++i)
9371     ;
9372 #pragma omp parallel
9373 #pragma omp simd
9374   for (int i = 0; i < 10; ++i)
9375     ;
9376 #pragma omp parallel
9377 #pragma omp for simd
9378   for (int i = 0; i < 10; ++i)
9379     ;
9380 #pragma omp parallel
9381 #pragma omp sections
9382   {
9383     bar();
9384   }
9385 #pragma omp parallel
9386 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
9387   {
9388     bar();
9389   }
9390 #pragma omp parallel
9391 #pragma omp sections
9392   {
9393     bar();
9394   }
9395 #pragma omp parallel
9396 #pragma omp single
9397   bar();
9398 #pragma omp parallel
9399 #pragma omp master
9400   bar();
9401 #pragma omp parallel master
9402   bar();
9403 #pragma omp parallel
9404 #pragma omp critical
9405   bar();
9406 #pragma omp parallel
9407 #pragma omp parallel for
9408   for (int i = 0; i < 10; ++i)
9409     ;
9410 #pragma omp parallel
9411 #pragma omp parallel for simd
9412   for (int i = 0; i < 10; ++i)
9413     ;
9414 #pragma omp parallel
9415 #pragma omp parallel sections
9416   {
9417     bar();
9418   }
9419 #pragma omp parallel
9420 #pragma omp task
9421   {
9422     bar();
9423   }
9424 #pragma omp parallel
9425   {
9426 #pragma omp taskyield
9427     bar();
9428   }
9429 #pragma omp parallel
9430   {
9431 #pragma omp barrier
9432     bar();
9433   }
9434 #pragma omp parallel
9435   {
9436 #pragma omp taskwait
9437     bar();
9438   }
9439 #pragma omp parallel
9440   {
9441 #pragma omp flush
9442     bar();
9443   }
9444 #pragma omp parallel
9445   {
9446 #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?}}
9447     bar();
9448   }
9449 #pragma omp parallel
9450   {
9451 #pragma omp atomic
9452     ++a;
9453   }
9454 #pragma omp parallel
9455   {
9456 #pragma omp target
9457     ++a;
9458   }
9459 #pragma omp parallel
9460   {
9461 #pragma omp target parallel
9462     ++a;
9463   }
9464 #pragma omp parallel
9465 #pragma omp target parallel for
9466   for (int i = 0; i < 10; ++i)
9467     ;
9468 #pragma omp parallel
9469   {
9470 #pragma omp target enter data map(to: a)
9471     ++a;
9472   }
9473 #pragma omp parallel
9474   {
9475 #pragma omp target exit data map(from: a)
9476     ++a;
9477   }
9478 #pragma omp parallel
9479   {
9480 #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?}}
9481     ++a;
9482   }
9483 #pragma omp parallel
9484   {
9485 #pragma omp taskloop
9486   for (int i = 0; i < 10; ++i)
9487     ++a;
9488   }
9489 #pragma omp parallel
9490   {
9491 #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?}}
9492     for (int i = 0; i < 10; ++i)
9493       ;
9494   }
9495 #pragma omp parallel
9496   {
9497 #pragma omp target update to(a)
9498     a++;
9499   }
9500 #pragma omp parallel
9501   {
9502 #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?}}
9503     for (int i = 0; i < 10; ++i)
9504       ;
9505   }
9506 #pragma omp parallel
9507   {
9508 #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?}}
9509     for (int i = 0; i < 10; ++i)
9510       ;
9511   }
9512 #pragma omp parallel
9513   {
9514 #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?}}
9515     for (int i = 0; i < 10; ++i)
9516       ;
9517   }
9518 #pragma omp parallel
9519   {
9520 #pragma omp target simd // OK
9521     for (int i = 0; i < 10; ++i)
9522       ;
9523   }
9524 #pragma omp parallel
9525   {
9526 #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?}}
9527     for (int i = 0; i < 10; ++i)
9528       ;
9529   }
9530 #pragma omp parallel
9531   {
9532 #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?}}
9533     for (int i = 0; i < 10; ++i)
9534       ;
9535   }
9536 #pragma omp parallel
9537   {
9538 #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?}}
9539     for (int i = 0; i < 10; ++i)
9540       ;
9541   }
9542 #pragma omp parallel
9543   {
9544 #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?}}
9545     for (int i = 0; i < 10; ++i)
9546       ;
9547   }
9548 #pragma omp parallel
9549   {
9550 #pragma omp target teams // OK
9551     a++;
9552   }
9553 #pragma omp parallel
9554   {
9555 #pragma omp target teams distribute // OK
9556     for (int i = 0; i < 10; ++i)
9557       ;
9558   }
9559 #pragma omp parallel
9560   {
9561 #pragma omp target teams distribute parallel for // OK
9562     for (int i = 0; i < 10; ++i)
9563       ;
9564   }
9565 #pragma omp parallel
9566   {
9567 #pragma omp target teams distribute parallel for simd // OK
9568     for (int i = 0; i < 10; ++i)
9569       ;
9570   }
9571 #pragma omp parallel
9572   {
9573 #pragma omp target teams distribute simd // OK
9574     for (int i = 0; i < 10; ++i)
9575       ;
9576   }
9577 
9578 // SIMD DIRECTIVE
9579 #pragma omp simd
9580   for (int i = 0; i < 10; ++i) {
9581 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9582     for (int i = 0; i < 10; ++i)
9583       ;
9584   }
9585 #pragma omp simd
9586   for (int i = 0; i < 10; ++i) {
9587 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9588     for (int i = 0; i < 10; ++i)
9589       ;
9590   }
9591 #pragma omp simd
9592   for (int i = 0; i < 10; ++i) {
9593 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9594     for (int i = 0; i < 10; ++i)
9595       ;
9596   }
9597 #pragma omp simd
9598   for (int i = 0; i < 10; ++i) {
9599 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9600     for (int i = 0; i < 10; ++i)
9601       ;
9602   }
9603 #pragma omp simd
9604   for (int i = 0; i < 10; ++i) {
9605 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9606     {
9607       bar();
9608     }
9609   }
9610 #pragma omp simd
9611   for (int i = 0; i < 10; ++i) {
9612 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9613     {
9614       bar();
9615     }
9616   }
9617 #pragma omp simd
9618   for (int i = 0; i < 10; ++i) {
9619 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9620     bar();
9621 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9622     bar();
9623   }
9624 #pragma omp simd
9625   for (int i = 0; i < 10; ++i) {
9626 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9627     bar();
9628 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9629     bar();
9630   }
9631 #pragma omp simd
9632   for (int i = 0; i < 10; ++i) {
9633 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9634     for (int i = 0; i < 10; ++i)
9635       ;
9636   }
9637 #pragma omp simd
9638   for (int i = 0; i < 10; ++i) {
9639 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9640     for (int i = 0; i < 10; ++i)
9641       ;
9642   }
9643 #pragma omp simd
9644   for (int i = 0; i < 10; ++i) {
9645 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9646     {
9647       bar();
9648     }
9649   }
9650 #pragma omp simd
9651   for (int i = 0; i < 10; ++i) {
9652 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9653     {
9654       bar();
9655     }
9656   }
9657 #pragma omp simd
9658   for (int i = 0; i < 10; ++i) {
9659 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9660     bar();
9661   }
9662 #pragma omp simd
9663   for (int i = 0; i < 10; ++i) {
9664 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9665     bar();
9666   }
9667 #pragma omp simd
9668   for (int i = 0; i < 10; ++i) {
9669 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9670     bar();
9671   }
9672 #pragma omp simd
9673   for (int i = 0; i < 10; ++i) {
9674 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9675     bar();
9676   }
9677 #pragma omp simd
9678   for (int i = 0; i < 10; ++i) {
9679 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9680     bar();
9681   }
9682 #pragma omp simd
9683   for (int i = 0; i < 10; ++i) {
9684 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9685     ++a;
9686   }
9687 #pragma omp simd
9688   for (int i = 0; i < 10; ++i) {
9689 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9690     ++a;
9691   }
9692 #pragma omp simd
9693   for (int i = 0; i < 10; ++i) {
9694 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9695     ++a;
9696   }
9697 #pragma omp simd
9698   for (int i = 0; i < 10; ++i) {
9699 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9700     for (int i = 0; i < 10; ++i)
9701       ;
9702   }
9703 #pragma omp simd
9704   for (int i = 0; i < 10; ++i) {
9705 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9706     ++a;
9707   }
9708 #pragma omp simd
9709   for (int i = 0; i < 10; ++i) {
9710 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9711     ++a;
9712   }
9713 #pragma omp simd
9714   for (int i = 0; i < 10; ++i) {
9715 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9716     ++a;
9717   }
9718 #pragma omp simd
9719   for (int i = 0; i < 10; ++i) {
9720 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9721   for (int i = 0; i < 10; ++i)
9722     ++a;
9723   }
9724 #pragma omp simd
9725   for (int i = 0; i < 10; ++i) {
9726 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9727     for (int j = 0; j < 10; ++j)
9728       ;
9729   }
9730 #pragma omp simd
9731   for (int i = 0; i < 10; ++i) {
9732 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9733     a++;
9734   }
9735 #pragma omp simd
9736   for (int i = 0; i < 10; ++i) {
9737 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9738     for (int j = 0; j < 10; ++j)
9739       ;
9740   }
9741 #pragma omp simd
9742   for (int i = 0; i < 10; ++i) {
9743 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9744     for (int j = 0; j < 10; ++j)
9745       ;
9746   }
9747 #pragma omp simd
9748   for (int i = 0; i < 10; ++i) {
9749 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9750     for (int j = 0; j < 10; ++j)
9751       ;
9752   }
9753 #pragma omp simd
9754   for (int i = 0; i < 10; ++i) {
9755 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9756     for (int j = 0; j < 10; ++j)
9757       ;
9758   }
9759 #pragma omp simd
9760   for (int i = 0; i < 10; ++i) {
9761 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9762     for (int j = 0; j < 10; ++j)
9763       ;
9764   }
9765 #pragma omp simd
9766   for (int i = 0; i < 10; ++i) {
9767 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9768     for (int j = 0; j < 10; ++j)
9769       ;
9770   }
9771 #pragma omp simd
9772   for (int i = 0; i < 10; ++i) {
9773 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9774     for (int j = 0; j < 10; ++j)
9775       ;
9776   }
9777 #pragma omp simd
9778   for (int i = 0; i < 10; ++i) {
9779 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9780     for (int j = 0; j < 10; ++j)
9781       ;
9782   }
9783 #pragma omp simd
9784   for (int i = 0; i < 10; ++i) {
9785 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9786     a++;
9787   }
9788 #pragma omp simd
9789   for (int i = 0; i < 10; ++i) {
9790 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9791     for (int j = 0; j < 10; ++j)
9792       ;
9793   }
9794 #pragma omp simd
9795   for (int i = 0; i < 10; ++i) {
9796 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9797     for (int j = 0; j < 10; ++j)
9798       ;
9799   }
9800 #pragma omp simd
9801   for (int i = 0; i < 10; ++i) {
9802 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9803     for (int j = 0; j < 10; ++j)
9804       ;
9805   }
9806 #pragma omp simd
9807   for (int i = 0; i < 10; ++i) {
9808 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9809     for (int j = 0; j < 10; ++j)
9810       ;
9811   }
9812 
9813 // FOR DIRECTIVE
9814 #pragma omp for
9815   for (int i = 0; i < 10; ++i) {
9816 #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?}}
9817     for (int i = 0; i < 10; ++i)
9818       ;
9819   }
9820 #pragma omp for
9821   for (int i = 0; i < 10; ++i) {
9822 #pragma omp simd
9823     for (int i = 0; i < 10; ++i)
9824       ;
9825   }
9826 #pragma omp for
9827   for (int i = 0; i < 10; ++i) {
9828 #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?}}
9829     for (int i = 0; i < 10; ++i)
9830       ;
9831   }
9832 #pragma omp for
9833   for (int i = 0; i < 10; ++i) {
9834 #pragma omp parallel
9835     for (int i = 0; i < 10; ++i)
9836       ;
9837   }
9838 #pragma omp for
9839   for (int i = 0; i < 10; ++i) {
9840 #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?}}
9841     {
9842       bar();
9843     }
9844   }
9845 #pragma omp for
9846   for (int i = 0; i < 10; ++i) {
9847 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
9848     {
9849       bar();
9850     }
9851   }
9852 #pragma omp for
9853   for (int i = 0; i < 10; ++i) {
9854 #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?}}
9855     bar();
9856 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
9857     bar();
9858 #pragma omp critical
9859     bar();
9860   }
9861 #pragma omp for
9862   for (int i = 0; i < 10; ++i) {
9863 #pragma omp parallel
9864     {
9865 #pragma omp single // OK
9866       {
9867         bar();
9868       }
9869 #pragma omp for // OK
9870       for (int i = 0; i < 10; ++i)
9871         ;
9872 #pragma omp for simd // OK
9873       for (int i = 0; i < 10; ++i)
9874         ;
9875 #pragma omp sections // OK
9876       {
9877         bar();
9878       }
9879     }
9880   }
9881 #pragma omp for
9882   for (int i = 0; i < 10; ++i) {
9883 #pragma omp parallel for
9884     for (int i = 0; i < 10; ++i)
9885       ;
9886   }
9887 #pragma omp for
9888   for (int i = 0; i < 10; ++i) {
9889 #pragma omp parallel for simd
9890     for (int i = 0; i < 10; ++i)
9891       ;
9892   }
9893 #pragma omp for
9894   for (int i = 0; i < 10; ++i) {
9895 #pragma omp parallel sections
9896     {
9897       bar();
9898     }
9899   }
9900 #pragma omp for
9901   for (int i = 0; i < 10; ++i) {
9902 #pragma omp task
9903     {
9904       bar();
9905     }
9906   }
9907 #pragma omp for
9908   for (int i = 0; i < 10; ++i) {
9909 #pragma omp taskyield
9910     bar();
9911   }
9912 #pragma omp for
9913   for (int i = 0; i < 10; ++i) {
9914 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
9915     bar();
9916   }
9917 #pragma omp for
9918   for (int i = 0; i < 10; ++i) {
9919 #pragma omp taskwait
9920     bar();
9921   }
9922 #pragma omp for
9923   for (int i = 0; i < 10; ++i) {
9924 #pragma omp flush
9925     bar();
9926   }
9927 #pragma omp for
9928   for (int i = 0; i < 10; ++i) {
9929 #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?}}
9930     bar();
9931   }
9932 #pragma omp for ordered
9933   for (int i = 0; i < 10; ++i) {
9934 #pragma omp ordered // OK
9935     bar();
9936   }
9937 #pragma omp for
9938   for (int i = 0; i < 10; ++i) {
9939 #pragma omp atomic
9940     ++a;
9941   }
9942 #pragma omp for
9943   for (int i = 0; i < 10; ++i) {
9944 #pragma omp target
9945     ++a;
9946   }
9947 #pragma omp for
9948   for (int i = 0; i < 10; ++i) {
9949 #pragma omp target parallel
9950     ++a;
9951   }
9952 #pragma omp for
9953   for (int i = 0; i < 10; ++i) {
9954 #pragma omp target parallel for
9955     for (int i = 0; i < 10; ++i)
9956       ;
9957   }
9958 #pragma omp for
9959   for (int i = 0; i < 10; ++i) {
9960 #pragma omp target enter data map(to: a)
9961     ++a;
9962   }
9963 #pragma omp for
9964   for (int i = 0; i < 10; ++i) {
9965 #pragma omp target exit data map(from: a)
9966     ++a;
9967   }
9968 #pragma omp for
9969   for (int i = 0; i < 10; ++i) {
9970 #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?}}
9971     ++a;
9972   }
9973 #pragma omp for
9974   for (int i = 0; i < 10; ++i) {
9975 #pragma omp taskloop
9976   for (int i = 0; i < 10; ++i)
9977     ++a;
9978   }
9979 #pragma omp for
9980   for (int i = 0; i < 10; ++i) {
9981 #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?}}
9982     for (int j = 0; j < 10; ++j)
9983       ;
9984   }
9985 #pragma omp for
9986   for (int i = 0; i < 10; ++i) {
9987 #pragma omp target update to(a)
9988     ++a;
9989   }
9990 #pragma omp for
9991   for (int i = 0; i < 10; ++i) {
9992 #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?}}
9993     for (int j = 0; j < 10; ++j)
9994       ;
9995   }
9996 #pragma omp for
9997   for (int i = 0; i < 10; ++i) {
9998 #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?}}
9999     for (int j = 0; j < 10; ++j)
10000       ;
10001   }
10002 #pragma omp for
10003   for (int i = 0; i < 10; ++i) {
10004 #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?}}
10005     for (int j = 0; j < 10; ++j)
10006       ;
10007   }
10008 #pragma omp for
10009   for (int i = 0; i < 10; ++i) {
10010 #pragma omp target simd // OK
10011     for (int j = 0; j < 10; ++j)
10012       ;
10013   }
10014 #pragma omp for
10015   for (int i = 0; i < 10; ++i) {
10016 #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?}}
10017     for (int j = 0; j < 10; ++j)
10018       ;
10019   }
10020 #pragma omp for
10021   for (int i = 0; i < 10; ++i) {
10022 #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?}}
10023     for (int j = 0; j < 10; ++j)
10024       ;
10025   }
10026 #pragma omp for
10027   for (int i = 0; i < 10; ++i) {
10028 #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?}}
10029     for (int j = 0; j < 10; ++j)
10030       ;
10031   }
10032 #pragma omp for
10033   for (int i = 0; i < 10; ++i) {
10034 #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?}}
10035     for (int j = 0; j < 10; ++j)
10036       ;
10037   }
10038 #pragma omp for
10039   for (int i = 0; i < 10; ++i) {
10040 #pragma omp target teams // OK
10041     a++;
10042   }
10043 #pragma omp for
10044   for (int i = 0; i < 10; ++i) {
10045 #pragma omp target teams distribute // OK
10046     for (int j = 0; j < 10; ++j)
10047       ;
10048   }
10049 #pragma omp for
10050   for (int i = 0; i < 10; ++i) {
10051 #pragma omp target teams distribute parallel for // OK
10052     for (int j = 0; j < 10; ++j)
10053       ;
10054   }
10055 #pragma omp for
10056   for (int i = 0; i < 10; ++i) {
10057 #pragma omp target teams distribute parallel for simd // OK
10058     for (int j = 0; j < 10; ++j)
10059       ;
10060   }
10061 #pragma omp for
10062   for (int i = 0; i < 10; ++i) {
10063 #pragma omp target teams distribute simd // OK
10064     for (int j = 0; j < 10; ++j)
10065       ;
10066   }
10067 
10068 // FOR SIMD DIRECTIVE
10069 #pragma omp for simd
10070   for (int i = 0; i < 10; ++i) {
10071 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10072     for (int i = 0; i < 10; ++i)
10073       ;
10074   }
10075 #pragma omp for simd
10076   for (int i = 0; i < 10; ++i) {
10077 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
10078     for (int i = 0; i < 10; ++i)
10079       ;
10080   }
10081 #pragma omp for simd
10082   for (int i = 0; i < 10; ++i) {
10083 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10084     for (int i = 0; i < 10; ++i)
10085       ;
10086   }
10087 #pragma omp for simd
10088   for (int i = 0; i < 10; ++i) {
10089 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10090     for (int i = 0; i < 10; ++i)
10091       ;
10092   }
10093 #pragma omp for simd
10094   for (int i = 0; i < 10; ++i) {
10095 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10096     {
10097       bar();
10098     }
10099   }
10100 #pragma omp for simd
10101   for (int i = 0; i < 10; ++i) {
10102 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10103     {
10104       bar();
10105     }
10106   }
10107 #pragma omp for simd
10108   for (int i = 0; i < 10; ++i) {
10109 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10110     bar();
10111 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10112     bar();
10113   }
10114 #pragma omp for simd
10115   for (int i = 0; i < 10; ++i) {
10116 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10117     bar();
10118 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10119     bar();
10120   }
10121 #pragma omp for simd
10122   for (int i = 0; i < 10; ++i) {
10123 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10124     for (int i = 0; i < 10; ++i)
10125       ;
10126   }
10127 #pragma omp for simd
10128   for (int i = 0; i < 10; ++i) {
10129 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10130     for (int i = 0; i < 10; ++i)
10131       ;
10132   }
10133 #pragma omp for simd
10134   for (int i = 0; i < 10; ++i) {
10135 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10136     {
10137       bar();
10138     }
10139   }
10140 #pragma omp for simd
10141   for (int i = 0; i < 10; ++i) {
10142 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10143     {
10144       bar();
10145     }
10146   }
10147 #pragma omp for simd
10148   for (int i = 0; i < 10; ++i) {
10149 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10150     bar();
10151   }
10152 #pragma omp for simd
10153   for (int i = 0; i < 10; ++i) {
10154 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10155     bar();
10156   }
10157 #pragma omp for simd
10158   for (int i = 0; i < 10; ++i) {
10159 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10160     bar();
10161   }
10162 #pragma omp for simd
10163   for (int i = 0; i < 10; ++i) {
10164 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10165     bar();
10166   }
10167 #pragma omp for simd
10168   for (int i = 0; i < 10; ++i) {
10169 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10170     bar();
10171   }
10172 #pragma omp for simd
10173   for (int i = 0; i < 10; ++i) {
10174 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
10175     ++a;
10176   }
10177 #pragma omp for simd
10178   for (int i = 0; i < 10; ++i) {
10179 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10180     ++a;
10181   }
10182 #pragma omp for simd
10183   for (int i = 0; i < 10; ++i) {
10184 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10185     ++a;
10186   }
10187 #pragma omp for simd
10188   for (int i = 0; i < 10; ++i) {
10189 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10190     for (int i = 0; i < 10; ++i)
10191       ;
10192   }
10193 #pragma omp for simd
10194   for (int i = 0; i < 10; ++i) {
10195 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10196     ++a;
10197   }
10198 #pragma omp for simd
10199   for (int i = 0; i < 10; ++i) {
10200 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10201     ++a;
10202   }
10203 #pragma omp for simd
10204   for (int i = 0; i < 10; ++i) {
10205 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10206     ++a;
10207   }
10208 #pragma omp for simd
10209   for (int i = 0; i < 10; ++i) {
10210 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10211   for (int i = 0; i < 10; ++i)
10212     ++a;
10213   }
10214 #pragma omp for simd
10215   for (int i = 0; i < 10; ++i) {
10216 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10217     for (int j = 0; j < 10; ++j)
10218       ;
10219   }
10220 #pragma omp for simd
10221   for (int i = 0; i < 10; ++i) {
10222 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10223     ++a;
10224   }
10225 #pragma omp for simd
10226   for (int i = 0; i < 10; ++i) {
10227 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10228     for (int j = 0; j < 10; ++j)
10229       ;
10230   }
10231 #pragma omp for simd
10232   for (int i = 0; i < 10; ++i) {
10233 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10234     for (int j = 0; j < 10; ++j)
10235       ;
10236   }
10237 #pragma omp for simd
10238   for (int i = 0; i < 10; ++i) {
10239 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10240     for (int j = 0; j < 10; ++j)
10241       ;
10242   }
10243 #pragma omp for simd
10244   for (int i = 0; i < 10; ++i) {
10245 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10246     for (int j = 0; j < 10; ++j)
10247       ;
10248   }
10249 #pragma omp for simd
10250   for (int i = 0; i < 10; ++i) {
10251 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10252     for (int j = 0; j < 10; ++j)
10253       ;
10254   }
10255 #pragma omp for simd
10256   for (int i = 0; i < 10; ++i) {
10257 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10258     for (int j = 0; j < 10; ++j)
10259       ;
10260   }
10261 #pragma omp for simd
10262   for (int i = 0; i < 10; ++i) {
10263 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10264     for (int j = 0; j < 10; ++j)
10265       ;
10266   }
10267 #pragma omp for simd
10268   for (int i = 0; i < 10; ++i) {
10269 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10270     for (int j = 0; j < 10; ++j)
10271       ;
10272   }
10273 #pragma omp for simd
10274   for (int i = 0; i < 10; ++i) {
10275 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10276     a++;
10277   }
10278 #pragma omp for simd
10279   for (int i = 0; i < 10; ++i) {
10280 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10281     for (int j = 0; j < 10; ++j)
10282       ;
10283   }
10284 #pragma omp for simd
10285   for (int i = 0; i < 10; ++i) {
10286 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10287     for (int j = 0; j < 10; ++j)
10288       ;
10289   }
10290 #pragma omp for simd
10291   for (int i = 0; i < 10; ++i) {
10292 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10293     for (int j = 0; j < 10; ++j)
10294       ;
10295   }
10296 #pragma omp for simd
10297   for (int i = 0; i < 10; ++i) {
10298 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10299     for (int j = 0; j < 10; ++j)
10300       ;
10301   }
10302 
10303 // SECTIONS DIRECTIVE
10304 #pragma omp sections
10305   {
10306 #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?}}
10307     for (int i = 0; i < 10; ++i)
10308       ;
10309   }
10310 #pragma omp sections
10311   {
10312 #pragma omp simd
10313     for (int i = 0; i < 10; ++i)
10314       ;
10315   }
10316 #pragma omp sections
10317   {
10318 #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?}}
10319     for (int i = 0; i < 10; ++i)
10320       ;
10321   }
10322 #pragma omp sections
10323   {
10324 #pragma omp parallel
10325     for (int i = 0; i < 10; ++i)
10326       ;
10327   }
10328 #pragma omp sections
10329   {
10330 #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?}}
10331     {
10332       bar();
10333     }
10334   }
10335 #pragma omp sections
10336   {
10337 #pragma omp section
10338     {
10339       bar();
10340     }
10341   }
10342 #pragma omp sections
10343   {
10344 #pragma omp critical
10345     bar();
10346 #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?}}
10347     bar();
10348 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
10349     bar();
10350   }
10351 #pragma omp sections
10352   {
10353 #pragma omp parallel
10354     {
10355 #pragma omp single // OK
10356       {
10357         bar();
10358       }
10359 #pragma omp for // OK
10360       for (int i = 0; i < 10; ++i)
10361         ;
10362 #pragma omp for simd // OK
10363       for (int i = 0; i < 10; ++i)
10364         ;
10365 #pragma omp sections // OK
10366       {
10367         bar();
10368       }
10369     }
10370   }
10371 #pragma omp sections
10372   {
10373 #pragma omp parallel for
10374     for (int i = 0; i < 10; ++i)
10375       ;
10376   }
10377 #pragma omp sections
10378   {
10379 #pragma omp parallel for simd
10380     for (int i = 0; i < 10; ++i)
10381       ;
10382   }
10383 #pragma omp sections
10384   {
10385 #pragma omp parallel sections
10386     {
10387       bar();
10388     }
10389   }
10390 #pragma omp sections
10391   {
10392 #pragma omp task
10393     {
10394       bar();
10395     }
10396   }
10397 #pragma omp sections
10398   {
10399 #pragma omp taskyield
10400   }
10401 #pragma omp sections
10402   {
10403 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
10404     bar();
10405   }
10406 #pragma omp sections
10407   {
10408 #pragma omp taskwait
10409   }
10410 #pragma omp sections
10411   {
10412 #pragma omp flush
10413   }
10414 #pragma omp sections
10415   {
10416 #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?}}
10417     bar();
10418   }
10419 #pragma omp sections
10420   {
10421 #pragma omp atomic
10422     ++a;
10423   }
10424 #pragma omp sections
10425   {
10426 #pragma omp target
10427     ++a;
10428   }
10429 #pragma omp sections
10430   {
10431 #pragma omp target parallel
10432     ++a;
10433   }
10434 #pragma omp sections
10435   {
10436 #pragma omp target parallel for
10437     for (int i = 0; i < 10; ++i)
10438       ;
10439   }
10440 #pragma omp sections
10441   {
10442 #pragma omp target enter data map(to: a)
10443   }
10444 #pragma omp sections
10445   {
10446 #pragma omp target exit data map(from: a)
10447   }
10448 #pragma omp sections
10449   {
10450 #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?}}
10451     ++a;
10452   }
10453 #pragma omp sections
10454   {
10455 #pragma omp taskloop
10456   for (int i = 0; i < 10; ++i)
10457     ++a;
10458   }
10459 #pragma omp sections
10460   {
10461 #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?}}
10462     for (int i = 0; i < 10; ++i)
10463       ;
10464   }
10465 #pragma omp sections
10466   {
10467 #pragma omp target update to(a)
10468   }
10469 #pragma omp sections
10470   {
10471 #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?}}
10472     for (int i = 0; i < 10; ++i)
10473       ;
10474   }
10475 #pragma omp sections
10476   {
10477 #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?}}
10478     for (int i = 0; i < 10; ++i)
10479       ;
10480   }
10481 #pragma omp sections
10482   {
10483 #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?}}
10484     for (int i = 0; i < 10; ++i)
10485       ;
10486   }
10487 #pragma omp sections
10488   {
10489 #pragma omp target simd // OK
10490     for (int i = 0; i < 10; ++i)
10491       ;
10492   }
10493 #pragma omp sections
10494   {
10495 #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?}}
10496     for (int i = 0; i < 10; ++i)
10497       ;
10498   }
10499 #pragma omp sections
10500   {
10501 #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?}}
10502     for (int i = 0; i < 10; ++i)
10503       ;
10504   }
10505 #pragma omp sections
10506   {
10507 #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?}}
10508     for (int i = 0; i < 10; ++i)
10509       ;
10510   }
10511 #pragma omp sections
10512   {
10513 #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?}}
10514     for (int i = 0; i < 10; ++i)
10515       ;
10516   }
10517 #pragma omp sections
10518   {
10519 #pragma omp target teams // OK
10520     a++;
10521   }
10522 #pragma omp sections
10523   {
10524 #pragma omp target teams distribute // OK
10525     for (int i = 0; i < 10; ++i)
10526       ;
10527   }
10528 #pragma omp sections
10529   {
10530 #pragma omp target teams distribute parallel for // OK
10531     for (int i = 0; i < 10; ++i)
10532       ;
10533   }
10534 #pragma omp sections
10535   {
10536 #pragma omp target teams distribute parallel for simd // OK
10537     for (int i = 0; i < 10; ++i)
10538       ;
10539   }
10540 #pragma omp sections
10541   {
10542 #pragma omp target teams distribute simd // OK
10543     for (int i = 0; i < 10; ++i)
10544       ;
10545   }
10546 
10547 // SECTION DIRECTIVE
10548 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
10549   {
10550     bar();
10551   }
10552 #pragma omp sections
10553   {
10554 #pragma omp section
10555     {
10556 #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?}}
10557       for (int i = 0; i < 10; ++i)
10558         ;
10559     }
10560   }
10561 #pragma omp sections
10562   {
10563 #pragma omp section
10564     {
10565 #pragma omp simd
10566       for (int i = 0; i < 10; ++i)
10567         ;
10568     }
10569   }
10570 #pragma omp sections
10571   {
10572 #pragma omp section
10573     {
10574 #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?}}
10575       for (int i = 0; i < 10; ++i)
10576         ;
10577     }
10578   }
10579 #pragma omp sections
10580   {
10581 #pragma omp section
10582     {
10583 #pragma omp parallel
10584       for (int i = 0; i < 10; ++i)
10585         ;
10586     }
10587   }
10588 #pragma omp sections
10589   {
10590 #pragma omp section
10591     {
10592 #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?}}
10593       {
10594         bar();
10595       }
10596     }
10597   }
10598 #pragma omp sections
10599   {
10600 #pragma omp section
10601     {
10602 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
10603       {
10604         bar();
10605       }
10606     }
10607   }
10608 #pragma omp sections
10609   {
10610 #pragma omp section
10611     {
10612 #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?}}
10613       bar();
10614 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
10615       bar();
10616 #pragma omp critical
10617       bar();
10618     }
10619   }
10620 #pragma omp sections
10621   {
10622 #pragma omp section
10623     {
10624 #pragma omp parallel
10625       {
10626 #pragma omp single // OK
10627         {
10628           bar();
10629         }
10630 #pragma omp for // OK
10631         for (int i = 0; i < 10; ++i)
10632           ;
10633 #pragma omp for simd // OK
10634         for (int i = 0; i < 10; ++i)
10635           ;
10636 #pragma omp sections // OK
10637         {
10638           bar();
10639         }
10640       }
10641     }
10642   }
10643 #pragma omp sections
10644   {
10645 #pragma omp section
10646     {
10647 #pragma omp parallel for
10648       for (int i = 0; i < 10; ++i)
10649         ;
10650     }
10651   }
10652 #pragma omp sections
10653   {
10654 #pragma omp section
10655     {
10656 #pragma omp parallel for simd
10657       for (int i = 0; i < 10; ++i)
10658         ;
10659     }
10660   }
10661 #pragma omp sections
10662   {
10663 #pragma omp section
10664     {
10665 #pragma omp parallel sections
10666       {
10667         bar();
10668       }
10669     }
10670   }
10671 #pragma omp sections
10672   {
10673 #pragma omp section
10674     {
10675 #pragma omp task
10676       {
10677         bar();
10678       }
10679     }
10680   }
10681 #pragma omp sections
10682   {
10683 #pragma omp section
10684     {
10685 #pragma omp taskyield
10686       bar();
10687     }
10688   }
10689 #pragma omp sections
10690   {
10691 #pragma omp section
10692     {
10693 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
10694       bar();
10695     }
10696   }
10697 #pragma omp sections
10698   {
10699 #pragma omp section
10700     {
10701 #pragma omp taskwait
10702       bar();
10703     }
10704   }
10705 #pragma omp sections
10706   {
10707 #pragma omp section
10708     {
10709 #pragma omp flush
10710       bar();
10711     }
10712   }
10713 #pragma omp sections
10714   {
10715 #pragma omp section
10716     {
10717 #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?}}
10718       bar();
10719     }
10720   }
10721 #pragma omp sections
10722   {
10723 #pragma omp section
10724     {
10725 #pragma omp atomic
10726       ++a;
10727     }
10728   }
10729 #pragma omp sections
10730   {
10731 #pragma omp section
10732     {
10733 #pragma omp target
10734       ++a;
10735     }
10736   }
10737 #pragma omp sections
10738   {
10739 #pragma omp section
10740     {
10741 #pragma omp target parallel
10742       ++a;
10743     }
10744   }
10745 #pragma omp sections
10746   {
10747 #pragma omp section
10748     {
10749 #pragma omp target parallel for
10750       for (int i = 0; i < 10; ++i)
10751         ;
10752     }
10753   }
10754 #pragma omp sections
10755   {
10756 #pragma omp section
10757     {
10758 #pragma omp target enter data map(to: a)
10759       ++a;
10760     }
10761   }
10762 #pragma omp sections
10763   {
10764 #pragma omp section
10765     {
10766 #pragma omp target exit data map(from: a)
10767       ++a;
10768     }
10769   }
10770 #pragma omp sections
10771   {
10772 #pragma omp section
10773     {
10774 #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?}}
10775       ++a;
10776     }
10777   }
10778 #pragma omp sections
10779   {
10780 #pragma omp section
10781     {
10782 #pragma omp taskloop
10783   for (int i = 0; i < 10; ++i)
10784       ++a;
10785     }
10786   }
10787 #pragma omp sections
10788   {
10789 #pragma omp section
10790 #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?}}
10791     for (int i = 0; i < 10; ++i)
10792       ;
10793   }
10794 #pragma omp sections
10795   {
10796 #pragma omp section
10797     {
10798 #pragma omp target update to(a)
10799       a++;
10800     }
10801   }
10802 #pragma omp sections
10803   {
10804 #pragma omp section
10805 #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?}}
10806     for (int i = 0; i < 10; ++i)
10807       ;
10808   }
10809 #pragma omp sections
10810   {
10811 #pragma omp section
10812 #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?}}
10813     for (int i = 0; i < 10; ++i)
10814       ;
10815   }
10816 #pragma omp sections
10817   {
10818 #pragma omp section
10819 #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?}}
10820     for (int i = 0; i < 10; ++i)
10821       ;
10822   }
10823 #pragma omp sections
10824   {
10825 #pragma omp section
10826 #pragma omp target simd // OK
10827     for (int i = 0; i < 10; ++i)
10828       ;
10829   }
10830 #pragma omp sections
10831   {
10832 #pragma omp section
10833 #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?}}
10834     for (int i = 0; i < 10; ++i)
10835       ;
10836   }
10837 #pragma omp sections
10838   {
10839 #pragma omp section
10840 #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?}}
10841     for (int i = 0; i < 10; ++i)
10842       ;
10843   }
10844 #pragma omp sections
10845   {
10846 #pragma omp section
10847 #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?}}
10848     for (int i = 0; i < 10; ++i)
10849       ;
10850   }
10851 #pragma omp sections
10852   {
10853 #pragma omp section
10854 #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?}}
10855     for (int i = 0; i < 10; ++i)
10856       ;
10857   }
10858 #pragma omp sections
10859   {
10860 #pragma omp section
10861 #pragma omp target teams // OK
10862     a++;
10863   }
10864 #pragma omp sections
10865   {
10866 #pragma omp section
10867 #pragma omp target teams distribute // OK
10868     for (int i = 0; i < 10; ++i)
10869       ;
10870   }
10871 #pragma omp sections
10872   {
10873 #pragma omp section
10874 #pragma omp target teams distribute parallel for // OK
10875     for (int i = 0; i < 10; ++i)
10876       ;
10877   }
10878 #pragma omp sections
10879   {
10880 #pragma omp section
10881 #pragma omp target teams distribute parallel for simd // OK
10882     for (int i = 0; i < 10; ++i)
10883       ;
10884   }
10885 #pragma omp sections
10886   {
10887 #pragma omp section
10888 #pragma omp target teams distribute simd // OK
10889     for (int i = 0; i < 10; ++i)
10890       ;
10891   }
10892 
10893 // SINGLE DIRECTIVE
10894 #pragma omp single
10895   {
10896 #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?}}
10897     for (int i = 0; i < 10; ++i)
10898       ;
10899   }
10900 #pragma omp single
10901   {
10902 #pragma omp simd
10903     for (int i = 0; i < 10; ++i)
10904       ;
10905   }
10906 #pragma omp single
10907   {
10908 #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?}}
10909     for (int i = 0; i < 10; ++i)
10910       ;
10911   }
10912 #pragma omp single
10913   {
10914 #pragma omp parallel
10915     for (int i = 0; i < 10; ++i)
10916       ;
10917   }
10918 #pragma omp single
10919   {
10920 #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?}}
10921     {
10922       bar();
10923     }
10924 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
10925     bar();
10926 #pragma omp critical
10927     bar();
10928   }
10929 #pragma omp single
10930   {
10931 #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?}}
10932     {
10933       bar();
10934     }
10935   }
10936 #pragma omp single
10937   {
10938 #pragma omp parallel
10939     {
10940 #pragma omp single // OK
10941       {
10942         bar();
10943       }
10944 #pragma omp for // OK
10945       for (int i = 0; i < 10; ++i)
10946         ;
10947 #pragma omp for simd // OK
10948       for (int i = 0; i < 10; ++i)
10949         ;
10950 #pragma omp sections // OK
10951       {
10952         bar();
10953       }
10954     }
10955   }
10956 #pragma omp single
10957   {
10958 #pragma omp parallel for
10959     for (int i = 0; i < 10; ++i)
10960       ;
10961   }
10962 #pragma omp single
10963   {
10964 #pragma omp parallel for simd
10965     for (int i = 0; i < 10; ++i)
10966       ;
10967   }
10968 #pragma omp single
10969   {
10970 #pragma omp parallel sections
10971     {
10972       bar();
10973     }
10974   }
10975 #pragma omp single
10976   {
10977 #pragma omp task
10978     {
10979       bar();
10980     }
10981   }
10982 #pragma omp single
10983   {
10984 #pragma omp taskyield
10985     bar();
10986   }
10987 #pragma omp single
10988   {
10989 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
10990     bar();
10991   }
10992 #pragma omp single
10993   {
10994 #pragma omp taskwait
10995     bar();
10996   }
10997 #pragma omp single
10998   {
10999 #pragma omp flush
11000     bar();
11001   }
11002 #pragma omp single
11003   {
11004 #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?}}
11005     bar();
11006   }
11007 #pragma omp single
11008   {
11009 #pragma omp atomic
11010     ++a;
11011   }
11012 #pragma omp single
11013   {
11014 #pragma omp target
11015     ++a;
11016   }
11017 #pragma omp single
11018   {
11019 #pragma omp target parallel
11020     ++a;
11021   }
11022 #pragma omp single
11023   {
11024 #pragma omp target parallel for
11025     for (int i = 0; i < 10; ++i)
11026       ;
11027   }
11028 #pragma omp single
11029   {
11030 #pragma omp target enter data map(to: a)
11031     ++a;
11032   }
11033 #pragma omp single
11034   {
11035 #pragma omp target exit data map(from: a)
11036     ++a;
11037   }
11038 #pragma omp single
11039   {
11040 #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?}}
11041     ++a;
11042   }
11043 #pragma omp single
11044   {
11045 #pragma omp taskloop
11046   for (int i = 0; i < 10; ++i)
11047     ++a;
11048   }
11049 #pragma omp single
11050   {
11051 #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?}}
11052     for (int i = 0; i < 10; ++i)
11053       ;
11054   }
11055 #pragma omp single
11056   {
11057 #pragma omp target update to(a)
11058     a++;
11059   }
11060 #pragma omp single
11061   {
11062 #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?}}
11063     for (int i = 0; i < 10; ++i)
11064       ;
11065   }
11066 #pragma omp single
11067   {
11068 #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?}}
11069     for (int i = 0; i < 10; ++i)
11070       ;
11071   }
11072 #pragma omp single
11073   {
11074 #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?}}
11075     for (int i = 0; i < 10; ++i)
11076       ;
11077   }
11078 #pragma omp single
11079   {
11080 #pragma omp target simd // OK
11081     for (int i = 0; i < 10; ++i)
11082       ;
11083   }
11084 #pragma omp single
11085   {
11086 #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?}}
11087     for (int i = 0; i < 10; ++i)
11088       ;
11089   }
11090 #pragma omp single
11091   {
11092 #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?}}
11093     for (int i = 0; i < 10; ++i)
11094       ;
11095   }
11096 #pragma omp single
11097   {
11098 #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?}}
11099     for (int i = 0; i < 10; ++i)
11100       ;
11101   }
11102 #pragma omp single
11103   {
11104 #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?}}
11105     for (int i = 0; i < 10; ++i)
11106       ;
11107   }
11108 #pragma omp single
11109   {
11110 #pragma omp target teams // oK
11111     a++;
11112   }
11113 #pragma omp single
11114   {
11115 #pragma omp target teams distribute // OK
11116     for (int i = 0; i < 10; ++i)
11117       ;
11118   }
11119 #pragma omp single
11120   {
11121 #pragma omp target teams distribute parallel for // OK
11122     for (int i = 0; i < 10; ++i)
11123       ;
11124   }
11125 #pragma omp single
11126   {
11127 #pragma omp target teams distribute parallel for simd // OK
11128     for (int i = 0; i < 10; ++i)
11129       ;
11130   }
11131 #pragma omp single
11132   {
11133 #pragma omp target teams distribute simd // OK
11134     for (int i = 0; i < 10; ++i)
11135       ;
11136   }
11137 
11138 // MASTER DIRECTIVE
11139 #pragma omp master
11140   {
11141 #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?}}
11142     for (int i = 0; i < 10; ++i)
11143       ;
11144   }
11145 #pragma omp master
11146   {
11147 #pragma omp simd
11148     for (int i = 0; i < 10; ++i)
11149       ;
11150   }
11151 #pragma omp master
11152   {
11153 #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?}}
11154     for (int i = 0; i < 10; ++i)
11155       ;
11156   }
11157 #pragma omp master
11158   {
11159 #pragma omp parallel
11160     for (int i = 0; i < 10; ++i)
11161       ;
11162   }
11163 #pragma omp parallel master
11164   {
11165     for (int i = 0; i < 10; ++i)
11166       ;
11167   }
11168 #pragma omp master
11169   {
11170 #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?}}
11171     {
11172       bar();
11173     }
11174   }
11175 #pragma omp master
11176   {
11177 #pragma omp master // OK, though second 'master' is redundant
11178     {
11179       bar();
11180     }
11181   }
11182 #pragma omp master
11183   {
11184 #pragma omp critical
11185     {
11186       bar();
11187     }
11188   }
11189 #pragma omp master
11190   {
11191 #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?}}
11192     {
11193       bar();
11194     }
11195   }
11196 #pragma omp master
11197   {
11198 #pragma omp parallel
11199     {
11200 #pragma omp master // OK
11201       {
11202         bar();
11203       }
11204 #pragma omp for // OK
11205       for (int i = 0; i < 10; ++i)
11206         ;
11207 #pragma omp for simd // OK
11208       for (int i = 0; i < 10; ++i)
11209         ;
11210 #pragma omp sections // OK
11211       {
11212         bar();
11213       }
11214     }
11215   }
11216 #pragma omp master
11217   {
11218 #pragma omp parallel master
11219     {
11220       bar();
11221     }
11222   }
11223 #pragma omp master
11224   {
11225 #pragma omp parallel for
11226     for (int i = 0; i < 10; ++i)
11227       ;
11228   }
11229 #pragma omp master
11230   {
11231 #pragma omp parallel for simd
11232     for (int i = 0; i < 10; ++i)
11233       ;
11234   }
11235 #pragma omp master
11236   {
11237 #pragma omp parallel sections
11238     {
11239       bar();
11240     }
11241   }
11242 #pragma omp master
11243   {
11244 #pragma omp task
11245     {
11246       bar();
11247     }
11248   }
11249 #pragma omp master
11250   {
11251 #pragma omp taskyield
11252     bar();
11253   }
11254 #pragma omp master
11255   {
11256 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
11257     bar();
11258   }
11259 #pragma omp master
11260   {
11261 #pragma omp taskwait
11262     bar();
11263   }
11264 #pragma omp master
11265   {
11266 #pragma omp flush
11267     bar();
11268   }
11269 #pragma omp master
11270   {
11271 #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?}}
11272     bar();
11273   }
11274 #pragma omp master
11275   {
11276 #pragma omp atomic
11277     ++a;
11278   }
11279 #pragma omp master
11280   {
11281 #pragma omp target
11282     ++a;
11283   }
11284 #pragma omp master
11285   {
11286 #pragma omp target parallel
11287     ++a;
11288   }
11289 #pragma omp master
11290   {
11291 #pragma omp target parallel for
11292     for (int i = 0; i < 10; ++i)
11293       ;
11294   }
11295 #pragma omp master
11296   {
11297 #pragma omp target enter data map(to: a)
11298     ++a;
11299   }
11300 #pragma omp master
11301   {
11302 #pragma omp target exit data map(from: a)
11303     ++a;
11304   }
11305 #pragma omp master
11306   {
11307 #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?}}
11308     ++a;
11309   }
11310 #pragma omp master
11311   {
11312 #pragma omp taskloop
11313   for (int i = 0; i < 10; ++i)
11314     ++a;
11315   }
11316 #pragma omp master
11317   {
11318 #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?}}
11319     for (int i = 0; i < 10; ++i)
11320       ;
11321   }
11322 #pragma omp master
11323   {
11324 #pragma omp target update to(a)
11325     ++a;
11326   }
11327 #pragma omp master
11328   {
11329 #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?}}
11330     for (int i = 0; i < 10; ++i)
11331       ;
11332   }
11333 #pragma omp master
11334   {
11335 #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?}}
11336     for (int i = 0; i < 10; ++i)
11337       ;
11338   }
11339 #pragma omp master
11340   {
11341 #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?}}
11342     for (int i = 0; i < 10; ++i)
11343       ;
11344   }
11345 #pragma omp master
11346   {
11347 #pragma omp target simd // OK
11348     for (int i = 0; i < 10; ++i)
11349       ;
11350   }
11351 #pragma omp master
11352   {
11353 #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?}}
11354     for (int i = 0; i < 10; ++i)
11355       ;
11356   }
11357 #pragma omp master
11358   {
11359 #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?}}
11360     for (int i = 0; i < 10; ++i)
11361       ;
11362   }
11363 #pragma omp master
11364   {
11365 #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?}}
11366     for (int i = 0; i < 10; ++i)
11367       ;
11368   }
11369 #pragma omp master
11370   {
11371 #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?}}
11372     for (int i = 0; i < 10; ++i)
11373       ;
11374   }
11375 #pragma omp master
11376   {
11377 #pragma omp target teams // OK
11378     a++;
11379   }
11380 #pragma omp master
11381   {
11382 #pragma omp target teams distribute // OK
11383     for (int i = 0; i < 10; ++i)
11384       ;
11385   }
11386 #pragma omp master
11387   {
11388 #pragma omp target teams distribute parallel for // OK
11389     for (int i = 0; i < 10; ++i)
11390       ;
11391   }
11392 #pragma omp master
11393   {
11394 #pragma omp target teams distribute parallel for simd // OK
11395     for (int i = 0; i < 10; ++i)
11396       ;
11397   }
11398 #pragma omp master
11399   {
11400 #pragma omp target teams distribute simd // OK
11401     for (int i = 0; i < 10; ++i)
11402       ;
11403   }
11404 
11405 // CRITICAL DIRECTIVE
11406 #pragma omp critical
11407   {
11408 #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?}}
11409     for (int i = 0; i < 10; ++i)
11410       ;
11411   }
11412 #pragma omp critical
11413   {
11414 #pragma omp simd
11415     for (int i = 0; i < 10; ++i)
11416       ;
11417   }
11418 #pragma omp critical
11419   {
11420 #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?}}
11421     for (int i = 0; i < 10; ++i)
11422       ;
11423   }
11424 #pragma omp critical
11425   {
11426 #pragma omp parallel
11427     for (int i = 0; i < 10; ++i)
11428       ;
11429   }
11430 #pragma omp critical
11431   {
11432 #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?}}
11433     {
11434       bar();
11435     }
11436   }
11437 #pragma omp critical
11438   {
11439 #pragma omp master // OK, though second 'master' is redundant
11440     {
11441       bar();
11442     }
11443   }
11444 #pragma omp critical
11445   {
11446 #pragma omp critical
11447     {
11448       bar();
11449     }
11450   }
11451 #pragma omp critical
11452   {
11453 #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?}}
11454     {
11455       bar();
11456     }
11457   }
11458 #pragma omp critical
11459   {
11460 #pragma omp parallel
11461     {
11462 #pragma omp master // OK
11463       {
11464         bar();
11465       }
11466 #pragma omp for // OK
11467       for (int i = 0; i < 10; ++i)
11468         ;
11469 #pragma omp for simd // OK
11470       for (int i = 0; i < 10; ++i)
11471         ;
11472 #pragma omp sections // OK
11473       {
11474         bar();
11475       }
11476     }
11477   }
11478 #pragma omp critical
11479   {
11480 #pragma omp parallel for
11481     for (int i = 0; i < 10; ++i)
11482       ;
11483   }
11484 #pragma omp critical
11485   {
11486 #pragma omp parallel for simd
11487     for (int i = 0; i < 10; ++i)
11488       ;
11489   }
11490 #pragma omp critical
11491   {
11492 #pragma omp parallel sections
11493     {
11494       bar();
11495     }
11496   }
11497 #pragma omp critical
11498   {
11499 #pragma omp task
11500     {
11501       bar();
11502     }
11503   }
11504 #pragma omp critical
11505   {
11506 #pragma omp taskyield
11507     bar();
11508   }
11509 #pragma omp critical
11510   {
11511 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
11512     bar();
11513   }
11514 #pragma omp critical
11515   {
11516 #pragma omp taskwait
11517     bar();
11518   }
11519 #pragma omp critical(Belka)
11520   {
11521 #pragma omp critical(Strelka)
11522     bar();
11523   }
11524 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
11525   {
11526 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
11527     {
11528 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
11529       {
11530 #pragma omp parallel
11531 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
11532         {
11533           bar();
11534         }
11535       }
11536     }
11537   }
11538 #pragma omp critical
11539   {
11540 #pragma omp flush
11541     bar();
11542   }
11543 #pragma omp critical
11544   {
11545 #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?}}
11546     bar();
11547   }
11548 #pragma omp critical
11549   {
11550 #pragma omp atomic
11551     ++a;
11552   }
11553 #pragma omp critical
11554   {
11555 #pragma omp target
11556     ++a;
11557   }
11558 #pragma omp critical
11559   {
11560 #pragma omp target parallel
11561     ++a;
11562   }
11563 #pragma omp critical
11564   {
11565 #pragma omp target parallel for
11566     for (int i = 0; i < 10; ++i)
11567       ;
11568   }
11569 #pragma omp critical
11570   {
11571 #pragma omp target enter data map(to: a)
11572     ++a;
11573   }
11574 #pragma omp critical
11575   {
11576 #pragma omp target exit data map(from: a)
11577     ++a;
11578   }
11579 #pragma omp critical
11580   {
11581 #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?}}
11582     ++a;
11583   }
11584 #pragma omp critical
11585   {
11586 #pragma omp taskloop
11587   for (int i = 0; i < 10; ++i)
11588     ++a;
11589   }
11590 #pragma omp critical
11591   {
11592 #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?}}
11593     for (int i = 0; i < 10; ++i)
11594       ;
11595   }
11596 #pragma omp critical
11597   {
11598 #pragma omp target update to(a)
11599     a++;
11600   }
11601 #pragma omp critical
11602   {
11603 #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?}}
11604     for (int i = 0; i < 10; ++i)
11605       ;
11606   }
11607 #pragma omp critical
11608   {
11609 #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?}}
11610     for (int i = 0; i < 10; ++i)
11611       ;
11612   }
11613 #pragma omp critical
11614   {
11615 #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?}}
11616     for (int i = 0; i < 10; ++i)
11617       ;
11618   }
11619 #pragma omp critical
11620   {
11621 #pragma omp target simd // OK
11622     for (int i = 0; i < 10; ++i)
11623       ;
11624   }
11625 #pragma omp critical
11626   {
11627 #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?}}
11628     for (int i = 0; i < 10; ++i)
11629       ;
11630   }
11631 #pragma omp critical
11632   {
11633 #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?}}
11634     for (int i = 0; i < 10; ++i)
11635       ;
11636   }
11637 #pragma omp critical
11638   {
11639 #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?}}
11640     for (int i = 0; i < 10; ++i)
11641       ;
11642   }
11643 #pragma omp critical
11644   {
11645 #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?}}
11646     for (int i = 0; i < 10; ++i)
11647       ;
11648   }
11649 #pragma omp critical
11650   {
11651 #pragma omp target teams // OK
11652     a++;
11653   }
11654 #pragma omp critical
11655   {
11656 #pragma omp target teams distribute // OK
11657     for (int i = 0; i < 10; ++i)
11658       ;
11659   }
11660 #pragma omp critical
11661   {
11662 #pragma omp target teams distribute parallel for // OK
11663     for (int i = 0; i < 10; ++i)
11664       ;
11665   }
11666 #pragma omp critical
11667   {
11668 #pragma omp target teams distribute parallel for simd // OK
11669     for (int i = 0; i < 10; ++i)
11670       ;
11671   }
11672 #pragma omp critical
11673   {
11674 #pragma omp target teams distribute simd // OK
11675     for (int i = 0; i < 10; ++i)
11676       ;
11677   }
11678 
11679 // PARALLEL FOR DIRECTIVE
11680 #pragma omp parallel for
11681   for (int i = 0; i < 10; ++i) {
11682 #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?}}
11683     for (int i = 0; i < 10; ++i)
11684       ;
11685   }
11686 #pragma omp parallel for
11687   for (int i = 0; i < 10; ++i) {
11688 #pragma omp simd
11689     for (int i = 0; i < 10; ++i)
11690       ;
11691   }
11692 #pragma omp parallel for
11693   for (int i = 0; i < 10; ++i) {
11694 #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?}}
11695     for (int i = 0; i < 10; ++i)
11696       ;
11697   }
11698 
11699 #pragma omp parallel for
11700   for (int i = 0; i < 10; ++i) {
11701 #pragma omp parallel
11702     for (int i = 0; i < 10; ++i)
11703       ;
11704   }
11705 #pragma omp parallel for
11706   for (int i = 0; i < 10; ++i) {
11707 #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?}}
11708     {
11709       bar();
11710     }
11711   }
11712 #pragma omp parallel for
11713   for (int i = 0; i < 10; ++i) {
11714 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
11715     {
11716       bar();
11717     }
11718   }
11719 #pragma omp parallel for
11720   for (int i = 0; i < 10; ++i) {
11721 #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?}}
11722     {
11723       bar();
11724     }
11725 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11726     {
11727       bar();
11728     }
11729 #pragma omp critical
11730     {
11731       bar();
11732     }
11733   }
11734 #pragma omp parallel for
11735   for (int i = 0; i < 10; ++i) {
11736 #pragma omp parallel
11737     {
11738 #pragma omp single // OK
11739       {
11740         bar();
11741       }
11742 #pragma omp master // OK
11743       {
11744         bar();
11745       }
11746 #pragma omp critical // OK
11747       {
11748         bar();
11749       }
11750 #pragma omp for // OK
11751       for (int i = 0; i < 10; ++i)
11752         ;
11753 #pragma omp for simd // OK
11754       for (int i = 0; i < 10; ++i)
11755         ;
11756 #pragma omp sections // OK
11757       {
11758         bar();
11759       }
11760     }
11761   }
11762 #pragma omp parallel for
11763   for (int i = 0; i < 10; ++i) {
11764 #pragma omp parallel for
11765     for (int i = 0; i < 10; ++i)
11766       ;
11767   }
11768 #pragma omp parallel for
11769   for (int i = 0; i < 10; ++i) {
11770 #pragma omp parallel for simd
11771     for (int i = 0; i < 10; ++i)
11772       ;
11773   }
11774 #pragma omp parallel for
11775   for (int i = 0; i < 10; ++i) {
11776 #pragma omp parallel sections
11777     {
11778       bar();
11779     }
11780   }
11781 #pragma omp parallel for
11782   for (int i = 0; i < 10; ++i) {
11783 #pragma omp task
11784     {
11785       bar();
11786     }
11787   }
11788 #pragma omp parallel for
11789   for (int i = 0; i < 10; ++i) {
11790 #pragma omp taskyield
11791     bar();
11792   }
11793 #pragma omp parallel for
11794   for (int i = 0; i < 10; ++i) {
11795 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11796     bar();
11797   }
11798 #pragma omp parallel for
11799   for (int i = 0; i < 10; ++i) {
11800 #pragma omp taskwait
11801     bar();
11802   }
11803 #pragma omp parallel for
11804   for (int i = 0; i < 10; ++i) {
11805 #pragma omp flush
11806     bar();
11807   }
11808 #pragma omp parallel for
11809   for (int i = 0; i < 10; ++i) {
11810 #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?}}
11811     bar();
11812   }
11813 #pragma omp parallel for ordered
11814   for (int i = 0; i < 10; ++i) {
11815 #pragma omp ordered // OK
11816     bar();
11817   }
11818 #pragma omp parallel for
11819   for (int i = 0; i < 10; ++i) {
11820 #pragma omp atomic
11821     ++a;
11822   }
11823 #pragma omp parallel for
11824   for (int i = 0; i < 10; ++i) {
11825 #pragma omp target
11826     ++a;
11827   }
11828 #pragma omp parallel for
11829   for (int i = 0; i < 10; ++i) {
11830 #pragma omp target parallel
11831     ++a;
11832   }
11833 #pragma omp parallel for
11834   for (int i = 0; i < 10; ++i) {
11835 #pragma omp target parallel for
11836     for (int i = 0; i < 10; ++i)
11837       ;
11838   }
11839 #pragma omp parallel for
11840   for (int i = 0; i < 10; ++i) {
11841 #pragma omp target enter data map(to: a)
11842     ++a;
11843   }
11844 #pragma omp parallel for
11845   for (int i = 0; i < 10; ++i) {
11846 #pragma omp target exit data map(from: a)
11847     ++a;
11848   }
11849 #pragma omp parallel for
11850   for (int i = 0; i < 10; ++i) {
11851 #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?}}
11852     ++a;
11853   }
11854 #pragma omp parallel for
11855   for (int i = 0; i < 10; ++i) {
11856 #pragma omp taskloop
11857   for (int i = 0; i < 10; ++i)
11858     ++a;
11859   }
11860 #pragma omp parallel for
11861   for (int i = 0; i < 10; ++i) {
11862 #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?}}
11863     for (int j = 0; j < 10; ++j)
11864       ;
11865   }
11866 #pragma omp parallel for
11867   for (int i = 0; i < 10; ++i) {
11868 #pragma omp target update to(a)
11869     a++;
11870   }
11871 #pragma omp parallel for
11872   for (int i = 0; i < 10; ++i) {
11873 #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?}}
11874     for (int j = 0; j < 10; ++j)
11875       ;
11876   }
11877 #pragma omp parallel for
11878   for (int i = 0; i < 10; ++i) {
11879 #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?}}
11880     for (int j = 0; j < 10; ++j)
11881       ;
11882   }
11883 #pragma omp parallel for
11884   for (int i = 0; i < 10; ++i) {
11885 #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?}}
11886     for (int j = 0; j < 10; ++j)
11887       ;
11888   }
11889 #pragma omp parallel for
11890   for (int i = 0; i < 10; ++i) {
11891 #pragma omp target simd // OK
11892     for (int j = 0; j < 10; ++j)
11893       ;
11894   }
11895 #pragma omp parallel for
11896   for (int i = 0; i < 10; ++i) {
11897 #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?}}
11898     for (int j = 0; j < 10; ++j)
11899       ;
11900   }
11901 #pragma omp parallel for
11902   for (int i = 0; i < 10; ++i) {
11903 #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?}}
11904     for (int j = 0; j < 10; ++j)
11905       ;
11906   }
11907 #pragma omp parallel for
11908   for (int i = 0; i < 10; ++i) {
11909 #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?}}
11910     for (int j = 0; j < 10; ++j)
11911       ;
11912   }
11913 #pragma omp parallel for
11914   for (int i = 0; i < 10; ++i) {
11915 #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?}}
11916     for (int j = 0; j < 10; ++j)
11917       ;
11918   }
11919 #pragma omp parallel for
11920   for (int i = 0; i < 10; ++i) {
11921 #pragma omp target teams // OK
11922     a++;
11923   }
11924 #pragma omp parallel for
11925   for (int i = 0; i < 10; ++i) {
11926 #pragma omp target teams distribute // OK
11927     for (int j = 0; j < 10; ++j)
11928       ;
11929   }
11930 #pragma omp parallel for
11931   for (int i = 0; i < 10; ++i) {
11932 #pragma omp target teams distribute parallel for // OK
11933     for (int j = 0; j < 10; ++j)
11934       ;
11935   }
11936 #pragma omp parallel for
11937   for (int i = 0; i < 10; ++i) {
11938 #pragma omp target teams distribute parallel for simd // OK
11939     for (int j = 0; j < 10; ++j)
11940       ;
11941   }
11942 #pragma omp parallel for
11943   for (int i = 0; i < 10; ++i) {
11944 #pragma omp target teams distribute simd // OK
11945     for (int j = 0; j < 10; ++j)
11946       ;
11947   }
11948 
11949 // PARALLEL FOR SIMD DIRECTIVE
11950 #pragma omp parallel for simd
11951   for (int i = 0; i < 10; ++i) {
11952 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11953     for (int i = 0; i < 10; ++i)
11954       ;
11955   }
11956 #pragma omp parallel for simd
11957   for (int i = 0; i < 10; ++i) {
11958 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
11959     for (int i = 0; i < 10; ++i)
11960       ;
11961   }
11962 #pragma omp parallel for simd
11963   for (int i = 0; i < 10; ++i) {
11964 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11965     for (int i = 0; i < 10; ++i)
11966       ;
11967   }
11968 #pragma omp parallel for simd
11969   for (int i = 0; i < 10; ++i) {
11970 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11971     for (int i = 0; i < 10; ++i)
11972       ;
11973   }
11974 #pragma omp parallel for simd
11975   for (int i = 0; i < 10; ++i) {
11976 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11977     {
11978       bar();
11979     }
11980   }
11981 #pragma omp parallel for simd
11982   for (int i = 0; i < 10; ++i) {
11983 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11984     {
11985       bar();
11986     }
11987   }
11988 #pragma omp parallel for simd
11989   for (int i = 0; i < 10; ++i) {
11990 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11991     {
11992       bar();
11993     }
11994   }
11995 
11996 #pragma omp parallel for simd
11997   for (int i = 0; i < 10; ++i) {
11998 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11999     {
12000       bar();
12001     }
12002   }
12003 
12004 #pragma omp parallel for simd
12005   for (int i = 0; i < 10; ++i) {
12006 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12007     {
12008       bar();
12009     }
12010   }
12011 
12012 #pragma omp parallel for simd
12013   for (int i = 0; i < 10; ++i) {
12014 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12015     {
12016 #pragma omp single
12017       {
12018         bar();
12019       }
12020 #pragma omp for
12021       for (int i = 0; i < 10; ++i)
12022         ;
12023 #pragma omp for simd
12024       for (int i = 0; i < 10; ++i)
12025         ;
12026 #pragma omp sections
12027       {
12028         bar();
12029       }
12030     }
12031   }
12032 #pragma omp parallel for simd
12033   for (int i = 0; i < 10; ++i) {
12034 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12035     for (int i = 0; i < 10; ++i)
12036       ;
12037   }
12038 #pragma omp parallel for simd
12039   for (int i = 0; i < 10; ++i) {
12040 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
12041     for (int i = 0; i < 10; ++i)
12042       ;
12043   }
12044 #pragma omp parallel for simd
12045   for (int i = 0; i < 10; ++i) {
12046 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12047     {
12048       bar();
12049     }
12050   }
12051 #pragma omp parallel for simd
12052   for (int i = 0; i < 10; ++i) {
12053 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12054     {
12055       bar();
12056     }
12057   }
12058 #pragma omp parallel for simd
12059   for (int i = 0; i < 10; ++i) {
12060 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12061     bar();
12062   }
12063 #pragma omp parallel for simd
12064   for (int i = 0; i < 10; ++i) {
12065 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12066     bar();
12067   }
12068 #pragma omp parallel for simd
12069   for (int i = 0; i < 10; ++i) {
12070 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12071     bar();
12072   }
12073 #pragma omp parallel for simd
12074   for (int i = 0; i < 10; ++i) {
12075 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12076     bar();
12077   }
12078 #pragma omp parallel for simd
12079   for (int i = 0; i < 10; ++i) {
12080 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12081     bar();
12082   }
12083 #pragma omp parallel for simd
12084   for (int i = 0; i < 10; ++i) {
12085 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12086     bar();
12087   }
12088 #pragma omp parallel for simd
12089   for (int i = 0; i < 10; ++i) {
12090 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
12091     ++a;
12092   }
12093 #pragma omp parallel for simd
12094   for (int i = 0; i < 10; ++i) {
12095 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12096     ++a;
12097   }
12098 #pragma omp parallel for simd
12099   for (int i = 0; i < 10; ++i) {
12100 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12101     ++a;
12102   }
12103 #pragma omp parallel for simd
12104   for (int i = 0; i < 10; ++i) {
12105 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12106     for (int i = 0; i < 10; ++i)
12107       ;
12108   }
12109 #pragma omp parallel for simd
12110   for (int i = 0; i < 10; ++i) {
12111 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12112     ++a;
12113   }
12114 #pragma omp parallel for simd
12115   for (int i = 0; i < 10; ++i) {
12116 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12117     ++a;
12118   }
12119 #pragma omp parallel for simd
12120   for (int i = 0; i < 10; ++i) {
12121 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12122     ++a;
12123   }
12124 #pragma omp parallel for simd
12125   for (int i = 0; i < 10; ++i) {
12126 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12127   for (int i = 0; i < 10; ++i)
12128     ++a;
12129   }
12130 #pragma omp parallel for simd
12131   for (int i = 0; i < 10; ++i) {
12132 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12133     for (int j = 0; j < 10; ++j)
12134       ;
12135   }
12136 #pragma omp parallel for simd
12137   for (int i = 0; i < 10; ++i) {
12138 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12139     a++;
12140   }
12141 #pragma omp parallel for simd
12142   for (int i = 0; i < 10; ++i) {
12143 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12144     for (int j = 0; j < 10; ++j)
12145       ;
12146   }
12147 #pragma omp parallel for simd
12148   for (int i = 0; i < 10; ++i) {
12149 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12150     for (int j = 0; j < 10; ++j)
12151       ;
12152   }
12153 #pragma omp parallel for simd
12154   for (int i = 0; i < 10; ++i) {
12155 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12156     for (int j = 0; j < 10; ++j)
12157       ;
12158   }
12159 #pragma omp parallel for simd
12160   for (int i = 0; i < 10; ++i) {
12161 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12162     for (int j = 0; j < 10; ++j)
12163       ;
12164   }
12165 #pragma omp parallel for simd
12166   for (int i = 0; i < 10; ++i) {
12167 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12168     for (int j = 0; j < 10; ++j)
12169       ;
12170   }
12171 #pragma omp parallel for simd
12172   for (int i = 0; i < 10; ++i) {
12173 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12174     for (int j = 0; j < 10; ++j)
12175       ;
12176   }
12177 #pragma omp parallel for simd
12178   for (int i = 0; i < 10; ++i) {
12179 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12180     for (int j = 0; j < 10; ++j)
12181       ;
12182   }
12183 #pragma omp parallel for simd
12184   for (int i = 0; i < 10; ++i) {
12185 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12186     for (int j = 0; j < 10; ++j)
12187       ;
12188   }
12189 #pragma omp parallel for simd
12190   for (int i = 0; i < 10; ++i) {
12191 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12192     a++;
12193   }
12194 #pragma omp parallel for simd
12195   for (int i = 0; i < 10; ++i) {
12196 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12197     for (int j = 0; j < 10; ++j)
12198       ;
12199   }
12200 #pragma omp parallel for simd
12201   for (int i = 0; i < 10; ++i) {
12202 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12203     for (int j = 0; j < 10; ++j)
12204       ;
12205   }
12206 #pragma omp parallel for simd
12207   for (int i = 0; i < 10; ++i) {
12208 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12209     for (int j = 0; j < 10; ++j)
12210       ;
12211   }
12212 #pragma omp parallel for simd
12213   for (int i = 0; i < 10; ++i) {
12214 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12215     for (int j = 0; j < 10; ++j)
12216       ;
12217   }
12218 
12219 // PARALLEL SECTIONS DIRECTIVE
12220 #pragma omp parallel sections
12221   {
12222 #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?}}
12223     for (int i = 0; i < 10; ++i)
12224       ;
12225   }
12226 #pragma omp parallel sections
12227   {
12228 #pragma omp simd
12229     for (int i = 0; i < 10; ++i)
12230       ;
12231   }
12232 #pragma omp parallel sections
12233   {
12234 #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?}}
12235     for (int i = 0; i < 10; ++i)
12236       ;
12237   }
12238 #pragma omp parallel sections
12239   {
12240 #pragma omp parallel
12241     for (int i = 0; i < 10; ++i)
12242       ;
12243   }
12244 #pragma omp parallel sections
12245   {
12246 #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?}}
12247     {
12248       bar();
12249     }
12250   }
12251 #pragma omp parallel sections
12252   {
12253 #pragma omp section
12254     {
12255       bar();
12256     }
12257   }
12258 #pragma omp parallel sections
12259   {
12260 #pragma omp section
12261     {
12262 #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?}}
12263       bar();
12264 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
12265       bar();
12266 #pragma omp critical
12267       bar();
12268     }
12269   }
12270 #pragma omp parallel sections
12271   {
12272 #pragma omp parallel
12273     {
12274 #pragma omp single // OK
12275       {
12276         bar();
12277       }
12278 #pragma omp master // OK
12279       {
12280         bar();
12281       }
12282 #pragma omp critical // OK
12283       {
12284         bar();
12285       }
12286 #pragma omp for // OK
12287       for (int i = 0; i < 10; ++i)
12288         ;
12289 #pragma omp for simd // OK
12290       for (int i = 0; i < 10; ++i)
12291         ;
12292 #pragma omp sections // OK
12293       {
12294         bar();
12295       }
12296     }
12297   }
12298 #pragma omp parallel sections
12299   {
12300 #pragma omp parallel for
12301     for (int i = 0; i < 10; ++i)
12302       ;
12303   }
12304 #pragma omp parallel sections
12305   {
12306 #pragma omp parallel for simd
12307     for (int i = 0; i < 10; ++i)
12308       ;
12309   }
12310 #pragma omp parallel sections
12311   {
12312 #pragma omp parallel sections
12313     {
12314       bar();
12315     }
12316   }
12317 #pragma omp parallel sections
12318   {
12319 #pragma omp task
12320     {
12321       bar();
12322     }
12323   }
12324 #pragma omp parallel sections
12325   {
12326 #pragma omp taskyield
12327   }
12328 #pragma omp parallel sections
12329   {
12330 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
12331   }
12332 #pragma omp parallel sections
12333   {
12334 #pragma omp taskwait
12335   }
12336 #pragma omp parallel sections
12337   {
12338 #pragma omp flush
12339   }
12340 #pragma omp parallel sections
12341   {
12342 #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?}}
12343     bar();
12344   }
12345 #pragma omp parallel sections
12346   {
12347 #pragma omp atomic
12348     ++a;
12349   }
12350 #pragma omp parallel sections
12351   {
12352 #pragma omp target
12353     ++a;
12354   }
12355 #pragma omp parallel sections
12356   {
12357 #pragma omp target parallel
12358     ++a;
12359   }
12360 #pragma omp parallel sections
12361   {
12362 #pragma omp target parallel for
12363     for (int i = 0; i < 10; ++i)
12364       ;
12365   }
12366 #pragma omp parallel sections
12367   {
12368 #pragma omp target enter data map(to: a)
12369   }
12370 #pragma omp parallel sections
12371   {
12372 #pragma omp target exit data map(from: a)
12373   }
12374 #pragma omp parallel sections
12375   {
12376 #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?}}
12377     ++a;
12378   }
12379 #pragma omp parallel sections
12380   {
12381 #pragma omp taskloop
12382   for (int i = 0; i < 10; ++i)
12383     ++a;
12384   }
12385 #pragma omp parallel sections
12386   {
12387 #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?}}
12388     for (int i = 0; i < 10; ++i)
12389       ;
12390   }
12391 #pragma omp parallel sections
12392   {
12393 #pragma omp target update to(a)
12394   }
12395 #pragma omp parallel sections
12396   {
12397 #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?}}
12398     for (int i = 0; i < 10; ++i)
12399       ;
12400   }
12401 #pragma omp parallel sections
12402   {
12403 #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?}}
12404     for (int i = 0; i < 10; ++i)
12405       ;
12406   }
12407 #pragma omp parallel sections
12408   {
12409 #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?}}
12410     for (int i = 0; i < 10; ++i)
12411       ;
12412   }
12413 #pragma omp parallel sections
12414   {
12415 #pragma omp target simd // OK
12416     for (int i = 0; i < 10; ++i)
12417       ;
12418   }
12419 #pragma omp parallel sections
12420   {
12421 #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?}}
12422     for (int i = 0; i < 10; ++i)
12423       ;
12424   }
12425 #pragma omp parallel sections
12426   {
12427 #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?}}
12428     for (int i = 0; i < 10; ++i)
12429       ;
12430   }
12431 #pragma omp parallel sections
12432   {
12433 #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?}}
12434     for (int i = 0; i < 10; ++i)
12435       ;
12436   }
12437 #pragma omp parallel sections
12438   {
12439 #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?}}
12440     for (int i = 0; i < 10; ++i)
12441       ;
12442   }
12443 #pragma omp parallel sections
12444   {
12445 #pragma omp target teams // OK
12446     a++;
12447   }
12448 #pragma omp parallel sections
12449   {
12450 #pragma omp target teams distribute // OK
12451     for (int i = 0; i < 10; ++i)
12452       ;
12453   }
12454 #pragma omp parallel sections
12455   {
12456 #pragma omp target teams distribute parallel for // OK
12457     for (int i = 0; i < 10; ++i)
12458       ;
12459   }
12460 #pragma omp parallel sections
12461   {
12462 #pragma omp target teams distribute parallel for simd // OK
12463     for (int i = 0; i < 10; ++i)
12464       ;
12465   }
12466 #pragma omp parallel sections
12467   {
12468 #pragma omp target teams distribute simd // OK
12469     for (int i = 0; i < 10; ++i)
12470       ;
12471   }
12472 
12473 // TASK DIRECTIVE
12474 #pragma omp task
12475 #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?}}
12476   for (int i = 0; i < 10; ++i)
12477     ;
12478 #pragma omp task
12479 #pragma omp simd
12480   for (int i = 0; i < 10; ++i)
12481     ;
12482 #pragma omp task
12483 #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?}}
12484   for (int i = 0; i < 10; ++i)
12485     ;
12486 #pragma omp task
12487 #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?}}
12488   {
12489     bar();
12490   }
12491 #pragma omp task
12492 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
12493   {
12494     bar();
12495   }
12496 #pragma omp task
12497 #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?}}
12498   bar();
12499 #pragma omp task
12500 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
12501   bar();
12502 #pragma omp task
12503 #pragma omp critical
12504   bar();
12505 #pragma omp task
12506 #pragma omp parallel for
12507   for (int i = 0; i < 10; ++i)
12508     ;
12509 #pragma omp task
12510 #pragma omp parallel for simd
12511   for (int i = 0; i < 10; ++i)
12512     ;
12513 #pragma omp task
12514 #pragma omp parallel sections
12515   {
12516     bar();
12517   }
12518 #pragma omp task
12519 #pragma omp task
12520   {
12521     bar();
12522   }
12523 #pragma omp task
12524   {
12525 #pragma omp taskyield
12526     bar();
12527   }
12528 #pragma omp task
12529   {
12530 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
12531     bar();
12532   }
12533 #pragma omp task
12534   {
12535 #pragma omp taskwait
12536     bar();
12537   }
12538 #pragma omp task
12539   {
12540 #pragma omp flush
12541     bar();
12542   }
12543 #pragma omp task
12544   {
12545 #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?}}
12546     bar();
12547   }
12548 #pragma omp task
12549   {
12550 #pragma omp atomic
12551     ++a;
12552   }
12553 #pragma omp task
12554   {
12555 #pragma omp target
12556     ++a;
12557   }
12558 #pragma omp task
12559   {
12560 #pragma omp target parallel
12561     ++a;
12562   }
12563 #pragma omp task
12564 #pragma omp target parallel for
12565   for (int i = 0; i < 10; ++i)
12566     ;
12567 #pragma omp task
12568   {
12569 #pragma omp target enter data map(to: a)
12570     ++a;
12571   }
12572 #pragma omp task
12573   {
12574 #pragma omp target exit data map(from: a)
12575     ++a;
12576   }
12577 #pragma omp task
12578   {
12579 #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?}}
12580     ++a;
12581   }
12582 #pragma omp task
12583   {
12584 #pragma omp taskloop
12585   for (int i = 0; i < 10; ++i)
12586     ++a;
12587   }
12588 #pragma omp task
12589   {
12590 #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?}}
12591     for (int i = 0; i < 10; ++i)
12592       ;
12593   }
12594 #pragma omp task
12595   {
12596 #pragma omp target update to(a)
12597     a++;
12598   }
12599 #pragma omp task
12600   {
12601 #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?}}
12602     for (int i = 0; i < 10; ++i)
12603       ;
12604   }
12605 #pragma omp task
12606   {
12607 #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?}}
12608     for (int i = 0; i < 10; ++i)
12609       ;
12610   }
12611 #pragma omp task
12612   {
12613 #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?}}
12614     for (int i = 0; i < 10; ++i)
12615       ;
12616   }
12617 #pragma omp task
12618   {
12619 #pragma omp target simd // OK
12620     for (int i = 0; i < 10; ++i)
12621       ;
12622   }
12623 #pragma omp task
12624   {
12625 #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?}}
12626     for (int i = 0; i < 10; ++i)
12627       ;
12628   }
12629 #pragma omp task
12630   {
12631 #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?}}
12632     for (int i = 0; i < 10; ++i)
12633       ;
12634   }
12635 #pragma omp task
12636   {
12637 #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?}}
12638     for (int i = 0; i < 10; ++i)
12639       ;
12640   }
12641 #pragma omp task
12642   {
12643 #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?}}
12644     for (int i = 0; i < 10; ++i)
12645       ;
12646   }
12647 #pragma omp task
12648   {
12649 #pragma omp target teams // OK
12650     a++;
12651   }
12652 #pragma omp task
12653   {
12654 #pragma omp target teams distribute // OK
12655     for (int i = 0; i < 10; ++i)
12656       ;
12657   }
12658 #pragma omp task
12659   {
12660 #pragma omp target teams distribute parallel for // OK
12661     for (int i = 0; i < 10; ++i)
12662       ;
12663   }
12664 #pragma omp task
12665   {
12666 #pragma omp target teams distribute parallel for simd // OK
12667     for (int i = 0; i < 10; ++i)
12668       ;
12669   }
12670 #pragma omp task
12671   {
12672 #pragma omp target teams distribute simd // OK
12673     for (int i = 0; i < 10; ++i)
12674       ;
12675   }
12676 
12677 // ATOMIC DIRECTIVE
12678 #pragma omp atomic
12679   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12680   // expected-note@+1 {{expected an expression statement}}
12681   {
12682 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12683     for (int i = 0; i < 10; ++i)
12684       ;
12685   }
12686 #pragma omp atomic
12687   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12688   // expected-note@+1 {{expected an expression statement}}
12689   {
12690 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12691     for (int i = 0; i < 10; ++i)
12692       ;
12693   }
12694 #pragma omp atomic
12695   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12696   // expected-note@+1 {{expected an expression statement}}
12697   {
12698 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12699     for (int i = 0; i < 10; ++i)
12700       ;
12701   }
12702 #pragma omp atomic
12703   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12704   // expected-note@+1 {{expected an expression statement}}
12705   {
12706 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12707     for (int i = 0; i < 10; ++i)
12708       ;
12709   }
12710 #pragma omp atomic
12711   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12712   // expected-note@+1 {{expected an expression statement}}
12713   {
12714 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12715     {
12716       bar();
12717     }
12718   }
12719 #pragma omp atomic
12720   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12721   // expected-note@+1 {{expected an expression statement}}
12722   {
12723 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12724     {
12725       bar();
12726     }
12727   }
12728 #pragma omp atomic
12729   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12730   // expected-note@+1 {{expected an expression statement}}
12731   {
12732 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12733     {
12734       bar();
12735     }
12736   }
12737 #pragma omp atomic
12738   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12739   // expected-note@+1 {{expected an expression statement}}
12740   {
12741 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12742     {
12743       bar();
12744     }
12745   }
12746 #pragma omp atomic
12747   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12748   // expected-note@+1 {{expected an expression statement}}
12749   {
12750 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12751     {
12752       bar();
12753     }
12754   }
12755 #pragma omp atomic
12756   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12757   // expected-note@+1 {{expected an expression statement}}
12758   {
12759 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12760     for (int i = 0; i < 10; ++i)
12761       ;
12762   }
12763 #pragma omp atomic
12764   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12765   // expected-note@+1 {{expected an expression statement}}
12766   {
12767 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12768     for (int i = 0; i < 10; ++i)
12769       ;
12770   }
12771 #pragma omp atomic
12772   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12773   // expected-note@+1 {{expected an expression statement}}
12774   {
12775 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12776     {
12777       bar();
12778     }
12779   }
12780 #pragma omp atomic
12781   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12782   // expected-note@+1 {{expected an expression statement}}
12783   {
12784 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12785     {
12786       bar();
12787     }
12788   }
12789 #pragma omp atomic
12790   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12791   // expected-note@+1 {{expected an expression statement}}
12792   {
12793 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12794     bar();
12795   }
12796 #pragma omp atomic
12797   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12798   // expected-note@+1 {{expected an expression statement}}
12799   {
12800 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12801     bar();
12802   }
12803 #pragma omp atomic
12804   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12805   // expected-note@+1 {{expected an expression statement}}
12806   {
12807 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12808     bar();
12809   }
12810 #pragma omp atomic
12811   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12812   // expected-note@+1 {{expected an expression statement}}
12813   {
12814 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12815     bar();
12816   }
12817 #pragma omp atomic
12818   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12819   // expected-note@+1 {{expected an expression statement}}
12820   {
12821 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12822     bar();
12823   }
12824 #pragma omp atomic
12825   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12826   // expected-note@+1 {{expected an expression statement}}
12827   {
12828 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12829     ++a;
12830   }
12831 #pragma omp atomic
12832   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12833   // expected-note@+1 {{expected an expression statement}}
12834   {
12835 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12836     ++a;
12837   }
12838 #pragma omp atomic
12839   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12840   // expected-note@+1 {{expected an expression statement}}
12841   {
12842 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12843     ++a;
12844   }
12845 #pragma omp atomic
12846   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12847   // expected-note@+1 {{expected an expression statement}}
12848   {
12849 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12850     for (int i = 0; i < 10; ++i)
12851       ;
12852   }
12853 #pragma omp atomic
12854   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12855   // expected-note@+1 {{expected an expression statement}}
12856   {
12857 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12858     ++a;
12859   }
12860 #pragma omp atomic
12861   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12862   // expected-note@+1 {{expected an expression statement}}
12863   {
12864 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12865     ++a;
12866   }
12867 #pragma omp atomic
12868   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12869   // expected-note@+1 {{expected an expression statement}}
12870   {
12871 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12872     ++a;
12873   }
12874 #pragma omp atomic
12875   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12876   // expected-note@+1 {{expected an expression statement}}
12877   {
12878 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12879   for (int i = 0; i < 10; ++i)
12880     ++a;
12881   }
12882 #pragma omp atomic
12883   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12884   // expected-note@+1 {{expected an expression statement}}
12885   {
12886 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12887     for (int i = 0; i < 10; ++i)
12888       ;
12889   }
12890 #pragma omp atomic
12891   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12892   // expected-note@+1 {{expected an expression statement}}
12893   {
12894 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12895   }
12896 #pragma omp atomic
12897   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12898   // expected-note@+1 {{expected an expression statement}}
12899   {
12900 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12901     for (int i = 0; i < 10; ++i)
12902       ;
12903   }
12904 #pragma omp atomic
12905   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12906   // expected-note@+1 {{expected an expression statement}}
12907   {
12908 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12909     for (int i = 0; i < 10; ++i)
12910       ;
12911   }
12912 #pragma omp atomic
12913   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12914   // expected-note@+1 {{expected an expression statement}}
12915   {
12916 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12917     for (int i = 0; i < 10; ++i)
12918       ;
12919   }
12920 #pragma omp atomic
12921   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12922   // expected-note@+1 {{expected an expression statement}}
12923   {
12924 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12925     for (int i = 0; i < 10; ++i)
12926       ;
12927   }
12928 #pragma omp atomic
12929   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12930   // expected-note@+1 {{expected an expression statement}}
12931   {
12932 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12933     for (int i = 0; i < 10; ++i)
12934       ;
12935   }
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 l-value expression with scalar type}}
12938   // expected-note@+1 {{expected an expression statement}}
12939   {
12940 #pragma omp teams distribute simd // 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 l-value expression with scalar type}}
12946   // expected-note@+1 {{expected an expression statement}}
12947   {
12948 #pragma omp teams distribute parallel for 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 l-value expression with scalar type}}
12954   // expected-note@+1 {{expected an expression statement}}
12955   {
12956 #pragma omp teams distribute parallel for // 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 l-value expression with scalar type}}
12962   // expected-note@+1 {{expected an expression statement}}
12963   {
12964 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12965     a++;
12966   }
12967 #pragma omp atomic
12968   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12969   // expected-note@+1 {{expected an expression statement}}
12970   {
12971 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12972     for (int i = 0; i < 10; ++i)
12973       ;
12974   }
12975 #pragma omp atomic
12976   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12977   // expected-note@+1 {{expected an expression statement}}
12978   {
12979 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12980     for (int i = 0; i < 10; ++i)
12981       ;
12982   }
12983 #pragma omp atomic
12984   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12985   // expected-note@+1 {{expected an expression statement}}
12986   {
12987 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12988     for (int i = 0; i < 10; ++i)
12989       ;
12990   }
12991 #pragma omp atomic
12992   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12993   // expected-note@+1 {{expected an expression statement}}
12994   {
12995 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12996     for (int i = 0; i < 10; ++i)
12997       ;
12998   }
12999 
13000 // TARGET DIRECTIVE
13001 #pragma omp target
13002 #pragma omp parallel
13003   bar();
13004 #pragma omp target
13005 #pragma omp for
13006   for (int i = 0; i < 10; ++i)
13007     ;
13008 #pragma omp target
13009 #pragma omp simd
13010   for (int i = 0; i < 10; ++i)
13011     ;
13012 #pragma omp target
13013 #pragma omp for simd
13014   for (int i = 0; i < 10; ++i)
13015     ;
13016 #pragma omp target
13017 #pragma omp sections
13018   {
13019     bar();
13020   }
13021 #pragma omp target
13022 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
13023   {
13024     bar();
13025   }
13026 #pragma omp target
13027 #pragma omp single
13028   bar();
13029 
13030 #pragma omp target
13031 #pragma omp master
13032   {
13033     bar();
13034   }
13035 #pragma omp target
13036 #pragma omp critical
13037   {
13038     bar();
13039   }
13040 #pragma omp target
13041 #pragma omp parallel for
13042   for (int i = 0; i < 10; ++i)
13043     ;
13044 #pragma omp target
13045 #pragma omp parallel for simd
13046   for (int i = 0; i < 10; ++i)
13047     ;
13048 #pragma omp target
13049 #pragma omp parallel sections
13050   {
13051     bar();
13052   }
13053 #pragma omp target
13054 #pragma omp task
13055   {
13056     bar();
13057   }
13058 #pragma omp target
13059   {
13060 #pragma omp taskyield
13061     bar();
13062   }
13063 #pragma omp target
13064   {
13065 #pragma omp barrier
13066     bar();
13067   }
13068 #pragma omp target
13069   {
13070 #pragma omp taskwait
13071     bar();
13072   }
13073 #pragma omp target
13074   {
13075 #pragma omp flush
13076     bar();
13077   }
13078 #pragma omp target
13079   {
13080 #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?}}
13081     bar();
13082   }
13083 #pragma omp target
13084   {
13085 #pragma omp atomic
13086     ++a;
13087   }
13088 #pragma omp target
13089   {
13090 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13091     ++a;
13092   }
13093 #pragma omp target
13094   {
13095 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13096     ++a;
13097   }
13098 #pragma omp target
13099 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13100   for (int i = 0; i < 10; ++i)
13101     ;
13102 #pragma omp target
13103   {
13104 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13105   }
13106 #pragma omp target
13107   {
13108 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13109   }
13110 #pragma omp target
13111   {
13112 #pragma omp teams
13113     ++a;
13114   }
13115 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13116   {
13117 #pragma omp teams // expected-note {{directive outside teams construct here}}
13118     ++a;
13119 #pragma omp teams // expected-note {{nested teams construct here}}
13120     ++a;
13121   }
13122 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13123   {
13124     ++a;          // expected-note {{statement outside teams construct here}}
13125 #pragma omp teams // expected-note {{nested teams construct here}}
13126     ++a;
13127   }
13128 #pragma omp target
13129   {
13130 #pragma omp taskloop
13131   for (int i = 0; i < 10; ++i)
13132     ++a;
13133   }
13134 #pragma omp target
13135   {
13136 #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?}}
13137     for (int i = 0; i < 10; ++i)
13138       ;
13139   }
13140 #pragma omp atomic
13141   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
13142   // expected-note@+1 {{expected an expression statement}}
13143   {
13144 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13145     a++;
13146   }
13147 #pragma omp target
13148   {
13149 #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?}}
13150     for (int i = 0; i < 10; ++i)
13151       ;
13152   }
13153 #pragma omp target
13154   {
13155 #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?}}
13156     for (int i = 0; i < 10; ++i)
13157       ;
13158   }
13159 #pragma omp target
13160   {
13161 #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?}}
13162     for (int i = 0; i < 10; ++i)
13163       ;
13164   }
13165 #pragma omp target
13166   {
13167 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13168     for (int i = 0; i < 10; ++i)
13169       ;
13170   }
13171 #pragma omp target
13172   {
13173 #pragma omp teams distribute // OK
13174     for (int i = 0; i < 10; ++i)
13175       ;
13176   }
13177 #pragma omp target
13178   {
13179 #pragma omp teams distribute simd // OK
13180     for (int i = 0; i < 10; ++i)
13181       ;
13182   }
13183 #pragma omp target
13184   {
13185 #pragma omp teams distribute parallel for simd // OK
13186     for (int i = 0; i < 10; ++i)
13187       ;
13188   }
13189 #pragma omp target
13190   {
13191 #pragma omp teams distribute parallel for // OK
13192     for (int i = 0; i < 10; ++i)
13193       ;
13194   }
13195 #pragma omp target
13196   {
13197 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13198     a++;
13199   }
13200 #pragma omp target
13201   {
13202 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13203     for (int i = 0; i < 10; ++i)
13204       ;
13205   }
13206 #pragma omp target
13207   {
13208 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13209     for (int i = 0; i < 10; ++i)
13210       ;
13211   }
13212 #pragma omp target
13213   {
13214 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13215     for (int i = 0; i < 10; ++i)
13216       ;
13217   }
13218 #pragma omp target
13219   {
13220 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13221     for (int i = 0; i < 10; ++i)
13222       ;
13223   }
13224 
13225 // TARGET PARALLEL DIRECTIVE
13226 #pragma omp target parallel
13227 #pragma omp parallel
13228   bar();
13229 #pragma omp target parallel
13230 #pragma omp for
13231   for (int i = 0; i < 10; ++i)
13232     ;
13233 #pragma omp target parallel
13234 #pragma omp simd
13235   for (int i = 0; i < 10; ++i)
13236     ;
13237 #pragma omp target parallel
13238 #pragma omp for simd
13239   for (int i = 0; i < 10; ++i)
13240     ;
13241 #pragma omp target parallel
13242 #pragma omp sections
13243   {
13244     bar();
13245   }
13246 #pragma omp target parallel
13247 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
13248   {
13249     bar();
13250   }
13251 #pragma omp target parallel
13252 #pragma omp single
13253   bar();
13254 
13255 #pragma omp target parallel
13256 #pragma omp master
13257   {
13258     bar();
13259   }
13260 #pragma omp target parallel
13261 #pragma omp critical
13262   {
13263     bar();
13264   }
13265 #pragma omp target parallel
13266 #pragma omp parallel for
13267   for (int i = 0; i < 10; ++i)
13268     ;
13269 #pragma omp target parallel
13270 #pragma omp parallel for simd
13271   for (int i = 0; i < 10; ++i)
13272     ;
13273 #pragma omp target parallel
13274 #pragma omp parallel sections
13275   {
13276     bar();
13277   }
13278 #pragma omp target parallel
13279 #pragma omp task
13280   {
13281     bar();
13282   }
13283 #pragma omp target parallel
13284   {
13285 #pragma omp taskyield
13286     bar();
13287   }
13288 #pragma omp target parallel
13289   {
13290 #pragma omp barrier
13291     bar();
13292   }
13293 #pragma omp target parallel
13294   {
13295 #pragma omp taskwait
13296     bar();
13297   }
13298 #pragma omp target parallel
13299   {
13300 #pragma omp flush
13301     bar();
13302   }
13303 #pragma omp target parallel
13304   {
13305 #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?}}
13306     bar();
13307   }
13308 #pragma omp target parallel
13309   {
13310 #pragma omp atomic
13311     ++a;
13312   }
13313 #pragma omp target parallel
13314   {
13315 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
13316     ++a;
13317   }
13318 #pragma omp target parallel
13319   {
13320 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
13321     ++a;
13322   }
13323 #pragma omp target parallel
13324 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13325   for (int i = 0; i < 10; ++i)
13326     ;
13327 #pragma omp target parallel
13328   {
13329 #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?}}
13330     ++a;
13331   }
13332 #pragma omp target parallel
13333   {
13334     ++a;
13335 #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?}}
13336     ++a;
13337   }
13338 #pragma omp target parallel
13339   {
13340 #pragma omp taskloop
13341   for (int i = 0; i < 10; ++i)
13342     ++a;
13343   }
13344 #pragma omp target parallel
13345   {
13346 #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?}}
13347     for (int i = 0; i < 10; ++i)
13348       ;
13349   }
13350 #pragma omp target parallel
13351   {
13352 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13353   }
13354 #pragma omp target parallel
13355   {
13356 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13357   }
13358 #pragma omp target parallel
13359   {
13360 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13361   }
13362 #pragma omp target parallel
13363   {
13364 #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?}}
13365     for (int i = 0; i < 10; ++i)
13366       ;
13367   }
13368 #pragma omp target parallel
13369   {
13370 #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?}}
13371     for (int i = 0; i < 10; ++i)
13372       ;
13373   }
13374 #pragma omp target parallel
13375   {
13376 #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?}}
13377     for (int i = 0; i < 10; ++i)
13378       ;
13379   }
13380 #pragma omp target parallel
13381   {
13382 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
13383     for (int i = 0; i < 10; ++i)
13384       ;
13385   }
13386 #pragma omp target parallel
13387   {
13388 #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?}}
13389     for (int i = 0; i < 10; ++i)
13390       ;
13391   }
13392 #pragma omp target parallel
13393   {
13394 #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?}}
13395     for (int i = 0; i < 10; ++i)
13396       ;
13397   }
13398 #pragma omp target parallel
13399   {
13400 #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?}}
13401     for (int i = 0; i < 10; ++i)
13402       ;
13403   }
13404 #pragma omp target parallel
13405   {
13406 #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?}}
13407     for (int i = 0; i < 10; ++i)
13408       ;
13409   }
13410 #pragma omp target parallel
13411   {
13412 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
13413     a++;
13414   }
13415 #pragma omp target parallel
13416   {
13417 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
13418     for (int i = 0; i < 10; ++i)
13419       ;
13420   }
13421 #pragma omp target parallel
13422   {
13423 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13424     for (int i = 0; i < 10; ++i)
13425       ;
13426   }
13427 #pragma omp target parallel
13428   {
13429 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13430     for (int i = 0; i < 10; ++i)
13431       ;
13432   }
13433 #pragma omp target parallel
13434   {
13435 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13436     for (int i = 0; i < 10; ++i)
13437       ;
13438   }
13439 
13440 // TARGET PARALLEL FOR DIRECTIVE
13441 #pragma omp target parallel for
13442   for (int i = 0; i < 10; ++i) {
13443 #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?}}
13444     for (int i = 0; i < 10; ++i)
13445       ;
13446   }
13447 #pragma omp target parallel for
13448   for (int i = 0; i < 10; ++i) {
13449 #pragma omp simd
13450     for (int i = 0; i < 10; ++i)
13451       ;
13452   }
13453 #pragma omp target parallel for
13454   for (int i = 0; i < 10; ++i) {
13455 #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?}}
13456     for (int i = 0; i < 10; ++i)
13457       ;
13458   }
13459 #pragma omp target parallel for
13460   for (int i = 0; i < 10; ++i) {
13461 #pragma omp parallel
13462     for (int i = 0; i < 10; ++i)
13463       ;
13464   }
13465 #pragma omp target parallel for
13466   for (int i = 0; i < 10; ++i) {
13467 #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?}}
13468     {
13469       bar();
13470     }
13471   }
13472 #pragma omp target parallel for
13473   for (int i = 0; i < 10; ++i) {
13474 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
13475     {
13476       bar();
13477     }
13478   }
13479 #pragma omp target parallel for
13480   for (int i = 0; i < 10; ++i) {
13481 #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?}}
13482     {
13483       bar();
13484     }
13485   }
13486 
13487 #pragma omp target parallel for
13488   for (int i = 0; i < 10; ++i) {
13489 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13490     {
13491       bar();
13492     }
13493   }
13494 
13495 #pragma omp target parallel for
13496   for (int i = 0; i < 10; ++i) {
13497 #pragma omp critical
13498     {
13499       bar();
13500     }
13501   }
13502 
13503 #pragma omp target parallel for
13504   for (int i = 0; i < 10; ++i) {
13505 #pragma omp parallel
13506     {
13507 #pragma omp single // OK
13508       {
13509         bar();
13510       }
13511 #pragma omp for // OK
13512       for (int i = 0; i < 10; ++i)
13513         ;
13514 #pragma omp for simd // OK
13515       for (int i = 0; i < 10; ++i)
13516         ;
13517 #pragma omp sections // OK
13518       {
13519         bar();
13520       }
13521     }
13522   }
13523 #pragma omp target parallel for
13524   for (int i = 0; i < 10; ++i) {
13525 #pragma omp parallel for
13526     for (int i = 0; i < 10; ++i)
13527       ;
13528   }
13529 #pragma omp target parallel for
13530   for (int i = 0; i < 10; ++i) {
13531 #pragma omp parallel for simd
13532     for (int i = 0; i < 10; ++i)
13533       ;
13534   }
13535 #pragma omp target parallel for
13536   for (int i = 0; i < 10; ++i) {
13537 #pragma omp parallel sections
13538     {
13539       bar();
13540     }
13541   }
13542 #pragma omp target parallel for
13543   for (int i = 0; i < 10; ++i) {
13544 #pragma omp task
13545     {
13546       bar();
13547     }
13548   }
13549 #pragma omp target parallel for
13550   for (int i = 0; i < 10; ++i) {
13551 #pragma omp taskyield
13552     bar();
13553   }
13554 #pragma omp target parallel for
13555   for (int i = 0; i < 10; ++i) {
13556 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13557     bar();
13558   }
13559 #pragma omp target parallel for
13560   for (int i = 0; i < 10; ++i) {
13561 #pragma omp taskwait
13562     bar();
13563   }
13564 #pragma omp target parallel for
13565   for (int i = 0; i < 10; ++i) {
13566 #pragma omp flush
13567     bar();
13568   }
13569 #pragma omp target parallel for
13570   for (int i = 0; i < 10; ++i) {
13571 #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?}}
13572     bar();
13573   }
13574 #pragma omp target parallel for ordered
13575   for (int i = 0; i < 10; ++i) {
13576 #pragma omp ordered // OK
13577     bar();
13578   }
13579 #pragma omp target parallel for
13580   for (int i = 0; i < 10; ++i) {
13581 #pragma omp atomic
13582     ++a;
13583   }
13584 #pragma omp target parallel for
13585   for (int i = 0; i < 10; ++i) {
13586 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
13587     ++a;
13588   }
13589 #pragma omp target parallel for
13590   for (int i = 0; i < 10; ++i) {
13591 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
13592     ++a;
13593   }
13594 #pragma omp target parallel for
13595   for (int i = 0; i < 10; ++i) {
13596 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13597     for (int i = 0; i < 10; ++i)
13598       ;
13599   }
13600 #pragma omp target parallel for
13601   for (int i = 0; i < 10; ++i) {
13602 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13603     ++a;
13604   }
13605 #pragma omp target parallel for
13606   for (int i = 0; i < 10; ++i) {
13607 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13608     ++a;
13609   }
13610 #pragma omp target parallel for
13611   for (int i = 0; i < 10; ++i) {
13612 #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?}}
13613     ++a;
13614   }
13615 #pragma omp target parallel for
13616   for (int i = 0; i < 10; ++i) {
13617 #pragma omp taskloop
13618   for (int i = 0; i < 10; ++i)
13619     ++a;
13620   }
13621 #pragma omp target parallel for
13622   for (int i = 0; i < 10; ++i) {
13623 #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?}}
13624     for (int j = 0; j < 10; ++j)
13625       ;
13626   }
13627 #pragma omp target parallel for
13628   for (int i = 0; i < 10; ++i) {
13629 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13630     a++;
13631   }
13632 #pragma omp target parallel for
13633   for (int i = 0; i < 10; ++i) {
13634 #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?}}
13635     for (int j = 0; j < 10; ++j)
13636       ;
13637   }
13638 #pragma omp target parallel for
13639   for (int i = 0; i < 10; ++i) {
13640 #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?}}
13641     for (int j = 0; j < 10; ++j)
13642       ;
13643   }
13644 #pragma omp target parallel for
13645   for (int i = 0; i < 10; ++i) {
13646 #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?}}
13647     for (int j = 0; j < 10; ++j)
13648       ;
13649   }
13650 #pragma omp target parallel for
13651   for (int i = 0; i < 10; ++i) {
13652 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13653     for (int j = 0; j < 10; ++j)
13654       ;
13655   }
13656 #pragma omp target parallel for
13657   for (int i = 0; i < 10; ++i) {
13658 #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?}}
13659     for (int j = 0; j < 10; ++j)
13660       ;
13661   }
13662 #pragma omp target parallel for
13663   for (int i = 0; i < 10; ++i) {
13664 #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?}}
13665     for (int j = 0; j < 10; ++j)
13666       ;
13667   }
13668 #pragma omp target parallel for
13669   for (int i = 0; i < 10; ++i) {
13670 #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?}}
13671     for (int j = 0; j < 10; ++j)
13672       ;
13673   }
13674 #pragma omp target parallel for
13675   for (int i = 0; i < 10; ++i) {
13676 #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?}}
13677     for (int j = 0; j < 10; ++j)
13678       ;
13679   }
13680 #pragma omp target parallel for
13681   for (int i = 0; i < 10; ++i) {
13682 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
13683     a++;
13684   }
13685 #pragma omp target parallel for
13686   for (int i = 0; i < 10; ++i) {
13687 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
13688     for (int j = 0; j < 10; ++j)
13689       ;
13690   }
13691 #pragma omp target parallel for
13692   for (int i = 0; i < 10; ++i) {
13693 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13694     for (int j = 0; j < 10; ++j)
13695       ;
13696   }
13697 #pragma omp target parallel for
13698   for (int i = 0; i < 10; ++i) {
13699 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13700     for (int j = 0; j < 10; ++j)
13701       ;
13702   }
13703 #pragma omp target parallel for
13704   for (int i = 0; i < 10; ++i) {
13705 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13706     for (int j = 0; j < 10; ++j)
13707       ;
13708   }
13709 
13710 // TEAMS DIRECTIVE
13711 #pragma omp target
13712 #pragma omp teams
13713 #pragma omp parallel
13714   bar();
13715 #pragma omp target
13716 #pragma omp teams
13717 #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?}}
13718   for (int i = 0; i < 10; ++i)
13719     ;
13720 #pragma omp target
13721 #pragma omp teams
13722 #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?}}
13723   for (int i = 0; i < 10; ++i)
13724     ;
13725 #pragma omp target
13726 #pragma omp teams
13727 #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?}}
13728   for (int i = 0; i < 10; ++i)
13729     ;
13730 #pragma omp target
13731 #pragma omp teams
13732 #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?}}
13733   {
13734     bar();
13735   }
13736 #pragma omp target
13737 #pragma omp teams
13738 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
13739   {
13740     bar();
13741   }
13742 #pragma omp target
13743 #pragma omp teams
13744 #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?}}
13745   bar();
13746 
13747 #pragma omp target
13748 #pragma omp teams
13749 #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?}}
13750   {
13751     bar();
13752   }
13753 #pragma omp target
13754 #pragma omp teams
13755 #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?}}
13756   {
13757     bar();
13758   }
13759 #pragma omp target
13760 #pragma omp teams
13761 #pragma omp parallel for
13762   for (int i = 0; i < 10; ++i)
13763     ;
13764 #pragma omp target
13765 #pragma omp teams
13766 #pragma omp parallel for simd
13767   for (int i = 0; i < 10; ++i)
13768     ;
13769 #pragma omp target
13770 #pragma omp teams
13771 #pragma omp parallel sections
13772   {
13773     bar();
13774   }
13775 #pragma omp target
13776 #pragma omp teams
13777 #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?}}
13778   {
13779     bar();
13780   }
13781 #pragma omp target
13782 #pragma omp teams
13783   {
13784 #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?}}
13785     bar();
13786   }
13787 #pragma omp target
13788 #pragma omp teams
13789   {
13790 #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?}}
13791     bar();
13792   }
13793 #pragma omp target
13794 #pragma omp teams
13795   {
13796 #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?}}
13797     bar();
13798   }
13799 #pragma omp target
13800 #pragma omp teams
13801   {
13802 #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?}}
13803     bar();
13804   }
13805 #pragma omp target
13806 #pragma omp teams
13807   {
13808 #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?}}
13809     bar();
13810   }
13811 #pragma omp target
13812 #pragma omp teams
13813   {
13814 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
13815     ++a;
13816   }
13817 #pragma omp target
13818 #pragma omp teams
13819   {
13820 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13821     ++a;
13822   }
13823 #pragma omp target
13824 #pragma omp teams
13825   {
13826 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13827     ++a;
13828   }
13829 #pragma omp target
13830 #pragma omp teams
13831 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13832   for (int i = 0; i < 10; ++i)
13833     ;
13834 #pragma omp target
13835 #pragma omp teams
13836   {
13837 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13838   }
13839 #pragma omp target
13840 #pragma omp teams
13841   {
13842 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13843   }
13844 #pragma omp target
13845 #pragma omp teams
13846   {
13847 #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?}}
13848     ++a;
13849   }
13850 #pragma omp target
13851 #pragma omp teams
13852   {
13853 #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?}}
13854   for (int i = 0; i < 10; ++i)
13855     ++a;
13856   }
13857 #pragma omp target
13858 #pragma omp teams
13859 #pragma omp distribute
13860   for (int i = 0; i < 10; ++i)
13861     ;
13862 #pragma omp target
13863 #pragma omp teams
13864 #pragma omp distribute
13865   for (int i = 0; i < 10; ++i)
13866     ;
13867 #pragma omp distribute
13868   for (int j = 0; j < 10; ++j)
13869     ;
13870 #pragma omp target
13871 #pragma omp teams
13872   {
13873 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
13874     ++a;
13875   }
13876 #pragma omp target
13877 #pragma omp teams
13878 #pragma omp distribute parallel for
13879   for (int i = 0; i < 10; ++i)
13880     ;
13881 #pragma omp target
13882 #pragma omp teams
13883   {
13884 #pragma omp distribute parallel for
13885   for (int i = 0; i < 10; ++i)
13886     ;
13887 #pragma omp distribute parallel for
13888   for (int j = 0; j < 10; ++j)
13889     ;
13890   }
13891 #pragma omp target
13892 #pragma omp teams
13893   {
13894 #pragma omp distribute parallel for simd
13895   for (int i = 0; i < 10; ++i)
13896     ;
13897 #pragma omp distribute parallel for simd
13898   for (int j = 0; j < 10; ++j)
13899     ;
13900   }
13901 #pragma omp target
13902 #pragma omp teams
13903   {
13904 #pragma omp distribute simd
13905   for (int i = 0; i < 10; ++i)
13906     ;
13907 #pragma omp distribute simd
13908   for (int j = 0; j < 10; ++j)
13909     ;
13910   }
13911 #pragma omp target
13912 #pragma omp teams
13913   {
13914 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13915   for (int i = 0; i < 10; ++i)
13916     ;
13917   }
13918 #pragma omp target
13919 #pragma omp teams
13920   {
13921 #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?}}
13922   for (int i = 0; i < 10; ++i)
13923     ;
13924   }
13925 #pragma omp target
13926 #pragma omp teams
13927   {
13928 #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?}}
13929   for (int i = 0; i < 10; ++i)
13930     ;
13931   }
13932 #pragma omp target
13933 #pragma omp teams
13934   {
13935 #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?}}
13936   for (int i = 0; i < 10; ++i)
13937     ;
13938   }
13939 #pragma omp target
13940 #pragma omp teams
13941   {
13942 #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?}}
13943   for (int i = 0; i < 10; ++i)
13944     ;
13945   }
13946 #pragma omp target
13947 #pragma omp teams
13948   {
13949 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13950     a++;
13951   }
13952 #pragma omp target
13953 #pragma omp teams
13954   {
13955 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13956   for (int i = 0; i < 10; ++i)
13957     ;
13958   }
13959 #pragma omp target
13960 #pragma omp teams
13961   {
13962 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13963   for (int i = 0; i < 10; ++i)
13964     ;
13965   }
13966 #pragma omp target
13967 #pragma omp teams
13968   {
13969 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13970   for (int i = 0; i < 10; ++i)
13971     ;
13972   }
13973 #pragma omp target
13974 #pragma omp teams
13975   {
13976 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13977   for (int i = 0; i < 10; ++i)
13978     ;
13979   }
13980 
13981 // TASKLOOP DIRECTIVE
13982 #pragma omp taskloop
13983   for (int i = 0; i < 10; ++i) {
13984 #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?}}
13985     for (int i = 0; i < 10; ++i)
13986       ;
13987   }
13988 #pragma omp taskloop
13989   for (int i = 0; i < 10; ++i) {
13990 #pragma omp simd
13991     for (int i = 0; i < 10; ++i)
13992       ;
13993   }
13994 #pragma omp taskloop
13995   for (int i = 0; i < 10; ++i) {
13996 #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?}}
13997     for (int i = 0; i < 10; ++i)
13998       ;
13999   }
14000 #pragma omp taskloop
14001   for (int i = 0; i < 10; ++i) {
14002 #pragma omp parallel
14003     for (int i = 0; i < 10; ++i)
14004       ;
14005   }
14006 #pragma omp taskloop
14007   for (int i = 0; i < 10; ++i) {
14008 #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?}}
14009     {
14010       bar();
14011     }
14012   }
14013 #pragma omp taskloop
14014   for (int i = 0; i < 10; ++i) {
14015 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
14016     {
14017       bar();
14018     }
14019   }
14020 #pragma omp taskloop
14021   for (int i = 0; i < 10; ++i) {
14022 #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?}}
14023     {
14024       bar();
14025     }
14026   }
14027 
14028 #pragma omp taskloop
14029   for (int i = 0; i < 10; ++i) {
14030 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14031     {
14032       bar();
14033     }
14034   }
14035 #pragma omp taskloop
14036   for (int i = 0; i < 10; ++i) {
14037 #pragma omp critical
14038     {
14039       bar();
14040     }
14041   }
14042 #pragma omp taskloop
14043   for (int i = 0; i < 10; ++i) {
14044 #pragma omp parallel
14045     {
14046 #pragma omp single // OK
14047       {
14048         bar();
14049       }
14050 #pragma omp for // OK
14051       for (int i = 0; i < 10; ++i)
14052         ;
14053 #pragma omp sections // OK
14054       {
14055         bar();
14056       }
14057     }
14058   }
14059 #pragma omp taskloop
14060   for (int i = 0; i < 10; ++i) {
14061 #pragma omp parallel for
14062     for (int i = 0; i < 10; ++i)
14063       ;
14064   }
14065 #pragma omp taskloop
14066   for (int i = 0; i < 10; ++i) {
14067 #pragma omp parallel for simd
14068     for (int i = 0; i < 10; ++i)
14069       ;
14070   }
14071 #pragma omp taskloop
14072   for (int i = 0; i < 10; ++i) {
14073 #pragma omp parallel sections
14074     {
14075       bar();
14076     }
14077   }
14078 #pragma omp taskloop
14079   for (int i = 0; i < 10; ++i) {
14080 #pragma omp task
14081     {
14082       bar();
14083     }
14084   }
14085 #pragma omp taskloop
14086   for (int i = 0; i < 10; ++i) {
14087 #pragma omp taskyield
14088     bar();
14089   }
14090 #pragma omp taskloop
14091   for (int i = 0; i < 10; ++i) {
14092 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14093     bar();
14094   }
14095 #pragma omp taskloop
14096   for (int i = 0; i < 10; ++i) {
14097 #pragma omp taskwait
14098     bar();
14099   }
14100 #pragma omp taskloop
14101   for (int i = 0; i < 10; ++i) {
14102 #pragma omp flush
14103     bar();
14104   }
14105 #pragma omp taskloop
14106   for (int i = 0; i < 10; ++i) {
14107 #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?}}
14108     bar();
14109   }
14110 #pragma omp taskloop
14111   for (int i = 0; i < 10; ++i) {
14112 #pragma omp atomic
14113     ++a;
14114   }
14115 #pragma omp taskloop
14116   for (int i = 0; i < 10; ++i) {
14117 #pragma omp target
14118     ++a;
14119   }
14120 #pragma omp taskloop
14121   for (int i = 0; i < 10; ++i) {
14122 #pragma omp target parallel
14123     ++a;
14124   }
14125 #pragma omp taskloop
14126   for (int i = 0; i < 10; ++i) {
14127 #pragma omp target parallel for
14128     for (int i = 0; i < 10; ++i)
14129       ;
14130   }
14131 #pragma omp taskloop
14132   for (int i = 0; i < 10; ++i) {
14133 #pragma omp target enter data map(to: a)
14134     ++a;
14135   }
14136 #pragma omp taskloop
14137   for (int i = 0; i < 10; ++i) {
14138 #pragma omp target exit data map(from: a)
14139     ++a;
14140   }
14141 #pragma omp taskloop
14142   for (int i = 0; i < 10; ++i) {
14143 #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?}}
14144     ++a;
14145   }
14146 #pragma omp taskloop
14147   for (int i = 0; i < 10; ++i) {
14148 #pragma omp taskloop
14149   for (int i = 0; i < 10; ++i)
14150     ++a;
14151   }
14152 #pragma omp taskloop
14153   for (int i = 0; i < 10; ++i) {
14154 #pragma omp target update to(a)
14155     ++a;
14156   }
14157 #pragma omp taskloop
14158   for (int i = 0; i < 10; ++i) {
14159 #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?}}
14160     for (int i = 0; i < 10; ++i)
14161       ;
14162   }
14163 #pragma omp taskloop
14164   for (int i = 0; i < 10; ++i) {
14165 #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?}}
14166     for (int i = 0; i < 10; ++i)
14167       ;
14168   }
14169 #pragma omp taskloop
14170   for (int i = 0; i < 10; ++i) {
14171 #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?}}
14172     for (int i = 0; i < 10; ++i)
14173       ;
14174   }
14175 #pragma omp taskloop
14176   for (int i = 0; i < 10; ++i) {
14177 #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?}}
14178     for (int i = 0; i < 10; ++i)
14179       ;
14180   }
14181 #pragma omp taskloop
14182   for (int i = 0; i < 10; ++i) {
14183 #pragma omp target simd // OK
14184     for (int i = 0; i < 10; ++i)
14185       ;
14186   }
14187 #pragma omp taskloop
14188   for (int i = 0; i < 10; ++i) {
14189 #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?}}
14190     for (int i = 0; i < 10; ++i)
14191       ;
14192   }
14193 #pragma omp taskloop
14194   for (int i = 0; i < 10; ++i) {
14195 #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?}}
14196     for (int i = 0; i < 10; ++i)
14197       ;
14198   }
14199 #pragma omp taskloop
14200   for (int i = 0; i < 10; ++i) {
14201 #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?}}
14202     for (int i = 0; i < 10; ++i)
14203       ;
14204   }
14205 #pragma omp taskloop
14206   for (int i = 0; i < 10; ++i) {
14207 #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?}}
14208     for (int i = 0; i < 10; ++i)
14209       ;
14210   }
14211 #pragma omp taskloop
14212   for (int i = 0; i < 10; ++i) {
14213 #pragma omp target teams // OK
14214     a++;
14215   }
14216 #pragma omp taskloop
14217   for (int i = 0; i < 10; ++i) {
14218 #pragma omp target teams distribute // OK
14219     for (int i = 0; i < 10; ++i)
14220       ;
14221   }
14222 #pragma omp taskloop
14223   for (int i = 0; i < 10; ++i) {
14224 #pragma omp target teams distribute parallel for // OK
14225     for (int i = 0; i < 10; ++i)
14226       ;
14227   }
14228 #pragma omp taskloop
14229   for (int i = 0; i < 10; ++i) {
14230 #pragma omp target teams distribute parallel for simd // OK
14231     for (int i = 0; i < 10; ++i)
14232       ;
14233   }
14234 #pragma omp taskloop
14235   for (int i = 0; i < 10; ++i) {
14236 #pragma omp target teams distribute simd // OK
14237     for (int i = 0; i < 10; ++i)
14238       ;
14239   }
14240 
14241 // DISTRIBUTE DIRECTIVE
14242 #pragma omp target
14243 #pragma omp teams
14244 #pragma omp distribute
14245   for (int i = 0; i < 10; ++i) {
14246 #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?}}
14247     for (int i = 0; i < 10; ++i)
14248       ;
14249   }
14250 #pragma omp target
14251 #pragma omp teams
14252 #pragma omp distribute
14253   for (int i = 0; i < 10; ++i) {
14254 #pragma omp for
14255     for (int i = 0; i < 10; ++i)
14256       ;
14257   }
14258 #pragma omp target
14259 #pragma omp teams
14260 #pragma omp distribute
14261   for (int i = 0; i < 10; ++i) {
14262 #pragma omp simd
14263     for (int i = 0; i < 10; ++i)
14264       ;
14265   }
14266 #pragma omp target
14267 #pragma omp teams
14268 #pragma omp distribute
14269   for (int i = 0; i < 10; ++i) {
14270 #pragma omp for simd
14271     for (int i = 0; i < 10; ++i)
14272       ;
14273   }
14274 #pragma omp target
14275 #pragma omp teams
14276 #pragma omp distribute
14277   for (int i = 0; i < 10; ++i) {
14278 #pragma omp parallel
14279     for (int i = 0; i < 10; ++i)
14280       ;
14281   }
14282 #pragma omp target
14283 #pragma omp teams
14284 #pragma omp distribute
14285   for (int i = 0; i < 10; ++i) {
14286 #pragma omp sections
14287     {
14288       bar();
14289     }
14290   }
14291 #pragma omp target
14292 #pragma omp teams
14293 #pragma omp distribute
14294   for (int i = 0; i < 10; ++i) {
14295 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
14296     {
14297       bar();
14298     }
14299   }
14300 #pragma omp target
14301 #pragma omp teams
14302 #pragma omp distribute
14303   for (int i = 0; i < 10; ++i) {
14304 #pragma omp single
14305     {
14306       bar();
14307     }
14308   }
14309 #pragma omp target
14310 #pragma omp teams
14311 #pragma omp distribute
14312   for (int i = 0; i < 10; ++i) {
14313 #pragma omp master
14314     {
14315       bar();
14316     }
14317   }
14318 #pragma omp target
14319 #pragma omp teams
14320 #pragma omp distribute
14321   for (int i = 0; i < 10; ++i) {
14322 #pragma omp critical
14323     {
14324       bar();
14325     }
14326   }
14327 #pragma omp target
14328 #pragma omp teams
14329 #pragma omp distribute
14330   for (int i = 0; i < 10; ++i) {
14331 #pragma omp parallel
14332     {
14333 #pragma omp single
14334       {
14335         bar();
14336       }
14337     }
14338   }
14339 #pragma omp target
14340 #pragma omp teams
14341 #pragma omp distribute
14342   for (int i = 0; i < 10; ++i) {
14343 #pragma omp parallel for
14344     for (int i = 0; i < 10; ++i)
14345       ;
14346   }
14347 #pragma omp target
14348 #pragma omp teams
14349 #pragma omp distribute
14350   for (int i = 0; i < 10; ++i) {
14351 #pragma omp parallel for simd
14352     for (int i = 0; i < 10; ++i)
14353       ;
14354   }
14355 #pragma omp target
14356 #pragma omp teams
14357 #pragma omp distribute
14358   for (int i = 0; i < 10; ++i) {
14359 #pragma omp parallel sections
14360     {
14361       bar();
14362     }
14363   }
14364 #pragma omp target
14365 #pragma omp teams
14366 #pragma omp distribute
14367   for (int i = 0; i < 10; ++i) {
14368 #pragma omp task
14369     {
14370       bar();
14371     }
14372   }
14373 #pragma omp target
14374 #pragma omp teams
14375 #pragma omp distribute
14376   for (int i = 0; i < 10; ++i) {
14377 #pragma omp taskyield
14378     bar();
14379   }
14380 #pragma omp target
14381 #pragma omp teams
14382 #pragma omp distribute
14383   for (int i = 0; i < 10; ++i) {
14384 #pragma omp barrier
14385     bar();
14386   }
14387 #pragma omp target
14388 #pragma omp teams
14389 #pragma omp distribute
14390   for (int i = 0; i < 10; ++i) {
14391 #pragma omp taskwait
14392     bar();
14393   }
14394 #pragma omp target
14395 #pragma omp teams
14396 #pragma omp distribute
14397   for (int i = 0; i < 10; ++i) {
14398 #pragma omp flush
14399     bar();
14400   }
14401 #pragma omp target
14402 #pragma omp teams
14403 #pragma omp distribute
14404   for (int i = 0; i < 10; ++i) {
14405 #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?}}
14406     bar();
14407   }
14408 #pragma omp target
14409 #pragma omp teams
14410 #pragma omp distribute
14411   for (int i = 0; i < 10; ++i) {
14412 #pragma omp atomic
14413     ++a;
14414   }
14415 #pragma omp target
14416 #pragma omp teams
14417 #pragma omp distribute
14418   for (int i = 0; i < 10; ++i) {
14419 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14420     ++a;
14421   }
14422 #pragma omp target
14423 #pragma omp teams
14424 #pragma omp distribute
14425   for (int i = 0; i < 10; ++i) {
14426 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14427     ++a;
14428   }
14429 #pragma omp target
14430 #pragma omp teams
14431 #pragma omp distribute
14432   for (int i = 0; i < 10; ++i) {
14433 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14434     for (int i = 0; i < 10; ++i)
14435       ;
14436   }
14437 #pragma omp target
14438 #pragma omp teams
14439 #pragma omp distribute
14440   for (int i = 0; i < 10; ++i) {
14441 #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?}}
14442     ++a;
14443   }
14444 #pragma omp target
14445 #pragma omp teams
14446 #pragma omp distribute
14447   for (int i = 0; i < 10; ++i) {
14448 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14449     ++a;
14450   }
14451 #pragma omp target
14452 #pragma omp teams
14453 #pragma omp distribute
14454   for (int i = 0; i < 10; ++i) {
14455 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14456     ++a;
14457   }
14458 #pragma omp target
14459 #pragma omp teams
14460 #pragma omp distribute
14461   for (int i = 0; i < 10; ++i) {
14462 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14463     ++a;
14464   }
14465 #pragma omp target
14466 #pragma omp teams
14467 #pragma omp distribute
14468   for (int i = 0; i < 10; ++i) {
14469 #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?}}
14470   for (int i = 0; i < 10; ++i)
14471     ++a;
14472   }
14473 #pragma omp target
14474 #pragma omp teams
14475 #pragma omp distribute
14476   for (int i = 0; i < 10; ++i) {
14477 #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?}}
14478   for (int i = 0; i < 10; ++i)
14479     ++a;
14480   }
14481 #pragma omp target
14482 #pragma omp teams
14483 #pragma omp distribute
14484   for (int i = 0; i < 10; ++i) {
14485 #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?}}
14486   for (int i = 0; i < 10; ++i)
14487     ++a;
14488   }
14489 #pragma omp target
14490 #pragma omp teams
14491 #pragma omp distribute
14492   for (int i = 0; i < 10; ++i) {
14493 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14494   for (int i = 0; i < 10; ++i)
14495     ++a;
14496   }
14497 #pragma omp target
14498 #pragma omp teams
14499 #pragma omp distribute
14500   for (int i = 0; i < 10; ++i) {
14501 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14502   for (int i = 0; i < 10; ++i)
14503     ++a;
14504   }
14505 #pragma omp target
14506 #pragma omp teams
14507 #pragma omp distribute
14508   for (int i = 0; i < 10; ++i) {
14509 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14510   for (int i = 0; i < 10; ++i)
14511     ++a;
14512   }
14513 #pragma omp target
14514 #pragma omp teams
14515 #pragma omp distribute
14516   for (int i = 0; i < 10; ++i) {
14517 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14518   for (int i = 0; i < 10; ++i)
14519     ++a;
14520   }
14521 #pragma omp target
14522 #pragma omp teams
14523 #pragma omp distribute
14524   for (int i = 0; i < 10; ++i) {
14525 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14526   for (int i = 0; i < 10; ++i)
14527     ++a;
14528   }
14529 #pragma omp target
14530 #pragma omp teams
14531 #pragma omp distribute
14532   for (int i = 0; i < 10; ++i) {
14533 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14534   for (int i = 0; i < 10; ++i)
14535     ++a;
14536   }
14537 #pragma omp target
14538 #pragma omp teams
14539 #pragma omp distribute
14540   for (int i = 0; i < 10; ++i) {
14541 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14542   for (int i = 0; i < 10; ++i)
14543     ++a;
14544   }
14545 #pragma omp target
14546 #pragma omp teams
14547 #pragma omp distribute
14548   for (int i = 0; i < 10; ++i) {
14549 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14550   for (int i = 0; i < 10; ++i)
14551     ++a;
14552   }
14553 
14554 // DISTRIBUTE PARALLEL FOR DIRECTIVE
14555 #pragma omp target
14556 #pragma omp teams
14557 #pragma omp distribute parallel for
14558   for (int i = 0; i < 10; ++i) {
14559 #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?}}
14560     for (int i = 0; i < 10; ++i)
14561       ;
14562   }
14563 
14564 #pragma omp target
14565 #pragma omp teams
14566 #pragma omp distribute parallel for
14567   for (int i = 0; i < 10; ++i) {
14568 #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?}}
14569     for (int i = 0; i < 10; ++i)
14570       ;
14571   }
14572 #pragma omp target
14573 #pragma omp teams
14574 #pragma omp distribute parallel for
14575   for (int i = 0; i < 10; ++i) {
14576 #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?}}
14577     for (int i = 0; i < 10; ++i)
14578       ;
14579   }
14580 #pragma omp target
14581 #pragma omp teams
14582 #pragma omp distribute parallel for
14583   for (int i = 0; i < 10; ++i) {
14584 #pragma omp simd
14585     for (int i = 0; i < 10; ++i)
14586       ;
14587   }
14588 #pragma omp target
14589 #pragma omp teams
14590 #pragma omp distribute parallel for
14591   for (int i = 0; i < 10; ++i) {
14592 #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?}}
14593     for (int i = 0; i < 10; ++i)
14594       ;
14595   }
14596 #pragma omp target
14597 #pragma omp teams
14598 #pragma omp distribute parallel for
14599   for (int i = 0; i < 10; ++i) {
14600 #pragma omp parallel
14601     for (int i = 0; i < 10; ++i)
14602       ;
14603   }
14604 #pragma omp target
14605 #pragma omp teams
14606 #pragma omp distribute parallel for
14607   for (int i = 0; i < 10; ++i) {
14608 #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?}}
14609     {
14610       bar();
14611     }
14612   }
14613 #pragma omp target
14614 #pragma omp teams
14615 #pragma omp distribute parallel for
14616   for (int i = 0; i < 10; ++i) {
14617 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
14618     {
14619       bar();
14620     }
14621   }
14622 #pragma omp target
14623 #pragma omp teams
14624 #pragma omp distribute parallel for
14625   for (int i = 0; i < 10; ++i) {
14626 #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?}}
14627     {
14628       bar();
14629     }
14630   }
14631 #pragma omp target
14632 #pragma omp teams
14633 #pragma omp distribute parallel for
14634   for (int i = 0; i < 10; ++i) {
14635 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14636     {
14637       bar();
14638     }
14639   }
14640 #pragma omp target
14641 #pragma omp teams
14642 #pragma omp distribute parallel for
14643   for (int i = 0; i < 10; ++i) {
14644 #pragma omp critical
14645     {
14646       bar();
14647     }
14648   }
14649 #pragma omp target
14650 #pragma omp teams
14651 #pragma omp distribute parallel for
14652   for (int i = 0; i < 10; ++i) {
14653 #pragma omp parallel
14654     {
14655 #pragma omp single
14656       {
14657         bar();
14658       }
14659     }
14660   }
14661 #pragma omp target
14662 #pragma omp teams
14663 #pragma omp distribute parallel for
14664   for (int i = 0; i < 10; ++i) {
14665 #pragma omp parallel for
14666     for (int i = 0; i < 10; ++i)
14667       ;
14668   }
14669 #pragma omp target
14670 #pragma omp teams
14671 #pragma omp distribute parallel for
14672   for (int i = 0; i < 10; ++i) {
14673 #pragma omp parallel for simd
14674     for (int i = 0; i < 10; ++i)
14675       ;
14676   }
14677 #pragma omp target
14678 #pragma omp teams
14679 #pragma omp distribute parallel for
14680   for (int i = 0; i < 10; ++i) {
14681 #pragma omp parallel sections
14682     {
14683       bar();
14684     }
14685   }
14686 #pragma omp target
14687 #pragma omp teams
14688 #pragma omp distribute parallel for
14689   for (int i = 0; i < 10; ++i) {
14690 #pragma omp task
14691     {
14692       bar();
14693     }
14694   }
14695 #pragma omp target
14696 #pragma omp teams
14697 #pragma omp distribute parallel for
14698   for (int i = 0; i < 10; ++i) {
14699 #pragma omp taskyield
14700     bar();
14701   }
14702 #pragma omp target
14703 #pragma omp teams
14704 #pragma omp distribute parallel for
14705   for (int i = 0; i < 10; ++i) {
14706 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14707     bar();
14708   }
14709 #pragma omp target
14710 #pragma omp teams
14711 #pragma omp distribute parallel for
14712   for (int i = 0; i < 10; ++i) {
14713 #pragma omp taskwait
14714     bar();
14715   }
14716 #pragma omp target
14717 #pragma omp teams
14718 #pragma omp distribute parallel for
14719   for (int i = 0; i < 10; ++i) {
14720 #pragma omp flush
14721     bar();
14722   }
14723 #pragma omp target
14724 #pragma omp teams
14725 #pragma omp distribute parallel for
14726   for (int i = 0; i < 10; ++i) {
14727 #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?}}
14728     bar();
14729   }
14730 #pragma omp target
14731 #pragma omp teams
14732 #pragma omp distribute parallel for
14733   for (int i = 0; i < 10; ++i) {
14734 #pragma omp atomic
14735     ++a;
14736   }
14737 #pragma omp target
14738 #pragma omp teams
14739 #pragma omp distribute parallel for
14740   for (int i = 0; i < 10; ++i) {
14741 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14742     ++a;
14743   }
14744 #pragma omp target
14745 #pragma omp teams
14746 #pragma omp distribute parallel for
14747   for (int i = 0; i < 10; ++i) {
14748 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14749     ++a;
14750   }
14751 #pragma omp target
14752 #pragma omp teams
14753 #pragma omp distribute parallel for
14754   for (int i = 0; i < 10; ++i) {
14755 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14756     for (int i = 0; i < 10; ++i)
14757       ;
14758   }
14759 #pragma omp target
14760 #pragma omp teams
14761 #pragma omp distribute parallel for
14762   for (int i = 0; i < 10; ++i) {
14763 #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?}}
14764     ++a;
14765   }
14766 #pragma omp target
14767 #pragma omp teams
14768 #pragma omp distribute parallel for
14769   for (int i = 0; i < 10; ++i) {
14770 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14771     ++a;
14772   }
14773 #pragma omp target
14774 #pragma omp teams
14775 #pragma omp distribute parallel for
14776   for (int i = 0; i < 10; ++i) {
14777 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14778     ++a;
14779   }
14780 #pragma omp target
14781 #pragma omp teams
14782 #pragma omp distribute parallel for
14783   for (int i = 0; i < 10; ++i) {
14784 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14785     ++a;
14786   }
14787 #pragma omp target
14788 #pragma omp teams
14789 #pragma omp distribute parallel for
14790   for (int i = 0; i < 10; ++i) {
14791 #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?}}
14792   for (int i = 0; i < 10; ++i)
14793     ++a;
14794   }
14795 #pragma omp target
14796 #pragma omp teams
14797 #pragma omp distribute parallel for
14798   for (int i = 0; i < 10; ++i) {
14799 #pragma omp target 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 parallel for
14806   for (int i = 0; i < 10; ++i) {
14807 #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?}}
14808   for (int i = 0; i < 10; ++i)
14809     ++a;
14810   }
14811 #pragma omp target
14812 #pragma omp teams
14813 #pragma omp distribute parallel for
14814   for (int i = 0; i < 10; ++i) {
14815 #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?}}
14816   for (int i = 0; i < 10; ++i)
14817     ++a;
14818   }
14819 #pragma omp target
14820 #pragma omp teams
14821 #pragma omp distribute parallel for
14822   for (int i = 0; i < 10; ++i) {
14823 #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?}}
14824   for (int i = 0; i < 10; ++i)
14825     ++a;
14826   }
14827 #pragma omp target
14828 #pragma omp teams
14829 #pragma omp distribute parallel for
14830   for (int i = 0; i < 10; ++i) {
14831 #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?}}
14832   for (int i = 0; i < 10; ++i)
14833     ++a;
14834   }
14835 #pragma omp target
14836 #pragma omp teams
14837 #pragma omp distribute parallel for
14838   for (int i = 0; i < 10; ++i) {
14839 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14840     ++a;
14841   }
14842 #pragma omp target
14843 #pragma omp teams
14844 #pragma omp distribute parallel for
14845   for (int i = 0; i < 10; ++i) {
14846 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14847   for (int i = 0; i < 10; ++i)
14848     ++a;
14849   }
14850 #pragma omp target
14851 #pragma omp teams
14852 #pragma omp distribute parallel for
14853   for (int i = 0; i < 10; ++i) {
14854 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14855   for (int i = 0; i < 10; ++i)
14856     ++a;
14857   }
14858 #pragma omp target
14859 #pragma omp teams
14860 #pragma omp distribute parallel for
14861   for (int i = 0; i < 10; ++i) {
14862 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14863   for (int i = 0; i < 10; ++i)
14864     ++a;
14865   }
14866 #pragma omp target
14867 #pragma omp teams
14868 #pragma omp distribute parallel for
14869   for (int i = 0; i < 10; ++i) {
14870 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14871   for (int i = 0; i < 10; ++i)
14872     ++a;
14873   }
14874 
14875 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
14876 #pragma omp target
14877 #pragma omp teams
14878 #pragma omp distribute parallel for simd
14879   for (int i = 0; i < 10; ++i) {
14880 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14881     for (int i = 0; i < 10; ++i)
14882       ;
14883   }
14884 #pragma omp target
14885 #pragma omp teams
14886 #pragma omp distribute parallel for simd
14887   for (int i = 0; i < 10; ++i) {
14888 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14889     for (int i = 0; i < 10; ++i)
14890       ;
14891   }
14892 #pragma omp target
14893 #pragma omp teams
14894 #pragma omp distribute parallel for simd
14895   for (int i = 0; i < 10; ++i) {
14896 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14897     for (int i = 0; i < 10; ++i)
14898       ;
14899   }
14900 #pragma omp target
14901 #pragma omp teams
14902 #pragma omp distribute parallel for simd
14903   for (int i = 0; i < 10; ++i) {
14904 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
14905     for (int i = 0; i < 10; ++i)
14906       ;
14907   }
14908 #pragma omp target
14909 #pragma omp teams
14910 #pragma omp distribute parallel for simd
14911   for (int i = 0; i < 10; ++i) {
14912 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14913     for (int i = 0; i < 10; ++i)
14914       ;
14915   }
14916 #pragma omp target
14917 #pragma omp teams
14918 #pragma omp distribute parallel for simd
14919   for (int i = 0; i < 10; ++i) {
14920 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14921     for (int i = 0; i < 10; ++i)
14922       ;
14923   }
14924 #pragma omp target
14925 #pragma omp teams
14926 #pragma omp distribute parallel for simd
14927   for (int i = 0; i < 10; ++i) {
14928 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14929     {
14930       bar();
14931     }
14932   }
14933 #pragma omp target
14934 #pragma omp teams
14935 #pragma omp distribute parallel for simd
14936   for (int i = 0; i < 10; ++i) {
14937 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14938     {
14939       bar();
14940     }
14941   }
14942 #pragma omp target
14943 #pragma omp teams
14944 #pragma omp distribute parallel for simd
14945   for (int i = 0; i < 10; ++i) {
14946 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14947     {
14948       bar();
14949     }
14950   }
14951 #pragma omp target
14952 #pragma omp teams
14953 #pragma omp distribute parallel for simd
14954   for (int i = 0; i < 10; ++i) {
14955 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14956     {
14957       bar();
14958     }
14959   }
14960 #pragma omp target
14961 #pragma omp teams
14962 #pragma omp distribute parallel for simd
14963   for (int i = 0; i < 10; ++i) {
14964 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14965     {
14966       bar();
14967     }
14968   }
14969 #pragma omp target
14970 #pragma omp teams
14971 #pragma omp distribute parallel for simd
14972   for (int i = 0; i < 10; ++i) {
14973 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14974     {
14975 #pragma omp single
14976       {
14977         bar();
14978       }
14979     }
14980   }
14981 #pragma omp target
14982 #pragma omp teams
14983 #pragma omp distribute parallel for simd
14984   for (int i = 0; i < 10; ++i) {
14985 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14986     for (int i = 0; i < 10; ++i)
14987       ;
14988   }
14989 #pragma omp target
14990 #pragma omp teams
14991 #pragma omp distribute parallel for simd
14992   for (int i = 0; i < 10; ++i) {
14993 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14994     for (int i = 0; i < 10; ++i)
14995       ;
14996   }
14997 #pragma omp target
14998 #pragma omp teams
14999 #pragma omp distribute parallel for simd
15000   for (int i = 0; i < 10; ++i) {
15001 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15002     {
15003       bar();
15004     }
15005   }
15006 #pragma omp target
15007 #pragma omp teams
15008 #pragma omp distribute parallel for simd
15009   for (int i = 0; i < 10; ++i) {
15010 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15011     {
15012       bar();
15013     }
15014   }
15015 #pragma omp target
15016 #pragma omp teams
15017 #pragma omp distribute parallel for simd
15018   for (int i = 0; i < 10; ++i) {
15019 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15020     bar();
15021   }
15022 #pragma omp target
15023 #pragma omp teams
15024 #pragma omp distribute parallel for simd
15025   for (int i = 0; i < 10; ++i) {
15026 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15027     bar();
15028   }
15029 #pragma omp target
15030 #pragma omp teams
15031 #pragma omp distribute parallel for simd
15032   for (int i = 0; i < 10; ++i) {
15033 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15034     bar();
15035   }
15036 #pragma omp target
15037 #pragma omp teams
15038 #pragma omp distribute parallel for simd
15039   for (int i = 0; i < 10; ++i) {
15040 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15041     bar();
15042   }
15043 #pragma omp target
15044 #pragma omp teams
15045 #pragma omp distribute parallel for simd
15046   for (int i = 0; i < 10; ++i) {
15047 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15048     bar();
15049   }
15050 #pragma omp target
15051 #pragma omp teams
15052 #pragma omp distribute parallel for simd
15053   for (int i = 0; i < 10; ++i) {
15054 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15055     ++a;
15056   }
15057 #pragma omp target
15058 #pragma omp teams
15059 #pragma omp distribute parallel for simd
15060   for (int i = 0; i < 10; ++i) {
15061 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15062     ++a;
15063   }
15064 #pragma omp target
15065 #pragma omp teams
15066 #pragma omp distribute parallel for simd
15067   for (int i = 0; i < 10; ++i) {
15068 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15069     ++a;
15070   }
15071 #pragma omp target
15072 #pragma omp teams
15073 #pragma omp distribute parallel for simd
15074   for (int i = 0; i < 10; ++i) {
15075 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15076     ++a;
15077   }
15078 #pragma omp target
15079 #pragma omp teams
15080 #pragma omp distribute parallel for simd
15081   for (int i = 0; i < 10; ++i) {
15082 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15083     ++a;
15084   }
15085 #pragma omp target
15086 #pragma omp teams
15087 #pragma omp distribute parallel for simd
15088   for (int i = 0; i < 10; ++i) {
15089 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15090     ++a;
15091   }
15092 #pragma omp target
15093 #pragma omp teams
15094 #pragma omp distribute parallel for simd
15095   for (int i = 0; i < 10; ++i) {
15096 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15097     ++a;
15098   }
15099 #pragma omp target
15100 #pragma omp teams
15101 #pragma omp distribute parallel for simd
15102   for (int i = 0; i < 10; ++i) {
15103 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15104     for (int i = 0; i < 10; ++i)
15105       ;
15106   }
15107 #pragma omp target
15108 #pragma omp teams
15109 #pragma omp distribute parallel for simd
15110   for (int i = 0; i < 10; ++i) {
15111 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15112     for (int i = 0; i < 10; ++i)
15113       ;
15114   }
15115 #pragma omp target
15116 #pragma omp teams
15117 #pragma omp distribute parallel for simd
15118   for (int i = 0; i < 10; ++i) {
15119 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15120     for (int i = 0; i < 10; ++i)
15121       ;
15122   }
15123 #pragma omp target
15124 #pragma omp teams
15125 #pragma omp distribute parallel for simd
15126   for (int i = 0; i < 10; ++i) {
15127 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15128     for (int i = 0; i < 10; ++i)
15129       ;
15130   }
15131 #pragma omp target
15132 #pragma omp teams
15133 #pragma omp distribute parallel for simd
15134   for (int i = 0; i < 10; ++i) {
15135 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15136     for (int i = 0; i < 10; ++i)
15137       ;
15138   }
15139 #pragma omp target
15140 #pragma omp teams
15141 #pragma omp distribute parallel for simd
15142   for (int i = 0; i < 10; ++i) {
15143 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15144     for (int i = 0; i < 10; ++i)
15145       ;
15146   }
15147 #pragma omp target
15148 #pragma omp teams
15149 #pragma omp distribute parallel for simd
15150   for (int i = 0; i < 10; ++i) {
15151 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15152     a++;
15153   }
15154 #pragma omp target
15155 #pragma omp teams
15156 #pragma omp distribute parallel for simd
15157   for (int i = 0; i < 10; ++i) {
15158 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15159     for (int i = 0; i < 10; ++i)
15160       ;
15161   }
15162 #pragma omp target
15163 #pragma omp teams
15164 #pragma omp distribute parallel for simd
15165   for (int i = 0; i < 10; ++i) {
15166 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15167     for (int i = 0; i < 10; ++i)
15168       ;
15169   }
15170 #pragma omp target
15171 #pragma omp teams
15172 #pragma omp distribute parallel for simd
15173   for (int i = 0; i < 10; ++i) {
15174 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15175     for (int i = 0; i < 10; ++i)
15176       ;
15177   }
15178 #pragma omp target
15179 #pragma omp teams
15180 #pragma omp distribute parallel for simd
15181   for (int i = 0; i < 10; ++i) {
15182 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15183     for (int i = 0; i < 10; ++i)
15184       ;
15185   }
15186 
15187 // DISTRIBUTE SIMD DIRECTIVE
15188 #pragma omp target
15189 #pragma omp teams
15190 #pragma omp distribute simd
15191   for (int i = 0; i < 10; ++i) {
15192 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15193     for (int i = 0; i < 10; ++i)
15194       ;
15195   }
15196 #pragma omp target
15197 #pragma omp teams
15198 #pragma omp distribute simd
15199   for (int i = 0; i < 10; ++i) {
15200 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15201     for (int i = 0; i < 10; ++i)
15202       ;
15203   }
15204 #pragma omp target
15205 #pragma omp teams
15206 #pragma omp distribute simd
15207   for (int i = 0; i < 10; ++i) {
15208 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15209     for (int i = 0; i < 10; ++i)
15210       ;
15211   }
15212 #pragma omp target
15213 #pragma omp teams
15214 #pragma omp distribute simd
15215   for (int i = 0; i < 10; ++i) {
15216 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15217     for (int i = 0; i < 10; ++i)
15218       ;
15219   }
15220 #pragma omp target
15221 #pragma omp teams
15222 #pragma omp distribute simd
15223   for (int i = 0; i < 10; ++i) {
15224 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15225     for (int i = 0; i < 10; ++i)
15226       ;
15227   }
15228 #pragma omp target
15229 #pragma omp teams
15230 #pragma omp distribute simd
15231   for (int i = 0; i < 10; ++i) {
15232 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15233     for (int i = 0; i < 10; ++i)
15234       ;
15235   }
15236 #pragma omp target
15237 #pragma omp teams
15238 #pragma omp distribute simd
15239   for (int i = 0; i < 10; ++i) {
15240 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15241     {
15242       bar();
15243     }
15244   }
15245 #pragma omp target
15246 #pragma omp teams
15247 #pragma omp distribute simd
15248   for (int i = 0; i < 10; ++i) {
15249 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15250     {
15251       bar();
15252     }
15253   }
15254 #pragma omp target
15255 #pragma omp teams
15256 #pragma omp distribute simd
15257   for (int i = 0; i < 10; ++i) {
15258 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15259     {
15260       bar();
15261     }
15262   }
15263 #pragma omp target
15264 #pragma omp teams
15265 #pragma omp distribute simd
15266   for (int i = 0; i < 10; ++i) {
15267 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15268     {
15269       bar();
15270     }
15271   }
15272 #pragma omp target
15273 #pragma omp teams
15274 #pragma omp distribute simd
15275   for (int i = 0; i < 10; ++i) {
15276 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15277     {
15278       bar();
15279     }
15280   }
15281 #pragma omp target
15282 #pragma omp teams
15283 #pragma omp distribute simd
15284   for (int i = 0; i < 10; ++i) {
15285 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15286     {
15287 #pragma omp single
15288       {
15289         bar();
15290       }
15291     }
15292   }
15293 #pragma omp target
15294 #pragma omp teams
15295 #pragma omp distribute simd
15296   for (int i = 0; i < 10; ++i) {
15297 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15298     for (int i = 0; i < 10; ++i)
15299       ;
15300   }
15301 #pragma omp target
15302 #pragma omp teams
15303 #pragma omp distribute simd
15304   for (int i = 0; i < 10; ++i) {
15305 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15306     for (int i = 0; i < 10; ++i)
15307       ;
15308   }
15309 #pragma omp target
15310 #pragma omp teams
15311 #pragma omp distribute simd
15312   for (int i = 0; i < 10; ++i) {
15313 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15314     {
15315       bar();
15316     }
15317   }
15318 #pragma omp target
15319 #pragma omp teams
15320 #pragma omp distribute simd
15321   for (int i = 0; i < 10; ++i) {
15322 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15323     {
15324       bar();
15325     }
15326   }
15327 #pragma omp target
15328 #pragma omp teams
15329 #pragma omp distribute simd
15330   for (int i = 0; i < 10; ++i) {
15331 #pragma omp taskyield // 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 simd
15337   for (int i = 0; i < 10; ++i) {
15338 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15339     bar();
15340   }
15341 #pragma omp target
15342 #pragma omp teams
15343 #pragma omp distribute 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 // TARGET SIMD DIRECTIVE
15500 #pragma omp target simd
15501   for (int i = 0; i < 10; ++i) {
15502 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15503     for (int i = 0; i < 10; ++i)
15504       ;
15505   }
15506 #pragma omp target simd
15507   for (int i = 0; i < 10; ++i) {
15508 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15509     for (int i = 0; i < 10; ++i)
15510       ;
15511   }
15512 #pragma omp target simd
15513   for (int i = 0; i < 10; ++i) {
15514 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15515     for (int i = 0; i < 10; ++i)
15516       ;
15517   }
15518 #pragma omp target simd
15519   for (int i = 0; i < 10; ++i) {
15520 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15521     for (int i = 0; i < 10; ++i)
15522       ;
15523   }
15524 #pragma omp target simd
15525   for (int i = 0; i < 10; ++i) {
15526 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15527     for (int i = 0; i < 10; ++i)
15528       ;
15529   }
15530 #pragma omp target simd
15531   for (int i = 0; i < 10; ++i) {
15532 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15533     for (int i = 0; i < 10; ++i)
15534       ;
15535   }
15536 #pragma omp target simd
15537   for (int i = 0; i < 10; ++i) {
15538 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15539     {
15540       bar();
15541     }
15542   }
15543 #pragma omp target simd
15544   for (int i = 0; i < 10; ++i) {
15545 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15546     {
15547       bar();
15548     }
15549   }
15550 #pragma omp target simd
15551   for (int i = 0; i < 10; ++i) {
15552 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15553     {
15554       bar();
15555     }
15556   }
15557 #pragma omp target simd
15558   for (int i = 0; i < 10; ++i) {
15559 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15560     {
15561       bar();
15562     }
15563   }
15564 #pragma omp target simd
15565   for (int i = 0; i < 10; ++i) {
15566 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15567     {
15568       bar();
15569     }
15570   }
15571 #pragma omp target simd
15572   for (int i = 0; i < 10; ++i) {
15573 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15574     {
15575 #pragma omp single
15576       {
15577         bar();
15578       }
15579     }
15580   }
15581 #pragma omp target simd
15582   for (int i = 0; i < 10; ++i) {
15583 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15584     for (int i = 0; i < 10; ++i)
15585       ;
15586   }
15587 #pragma omp target simd
15588   for (int i = 0; i < 10; ++i) {
15589 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15590     for (int i = 0; i < 10; ++i)
15591       ;
15592   }
15593 #pragma omp target simd
15594   for (int i = 0; i < 10; ++i) {
15595 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15596     {
15597       bar();
15598     }
15599   }
15600 #pragma omp target simd
15601   for (int i = 0; i < 10; ++i) {
15602 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15603     {
15604       bar();
15605     }
15606   }
15607 #pragma omp target simd
15608   for (int i = 0; i < 10; ++i) {
15609 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15610     bar();
15611   }
15612 #pragma omp target simd
15613   for (int i = 0; i < 10; ++i) {
15614 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15615     bar();
15616   }
15617 #pragma omp target simd
15618   for (int i = 0; i < 10; ++i) {
15619 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15620     bar();
15621   }
15622 #pragma omp target simd
15623   for (int i = 0; i < 10; ++i) {
15624 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15625     bar();
15626   }
15627 #pragma omp target simd
15628   for (int i = 0; i < 10; ++i) {
15629 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15630     bar();
15631   }
15632 #pragma omp target simd
15633   for (int i = 0; i < 10; ++i) {
15634 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15635     ++a;
15636   }
15637 #pragma omp target simd
15638   for (int i = 0; i < 10; ++i) {
15639 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15640     ++a;
15641   }
15642 #pragma omp target simd
15643   for (int i = 0; i < 10; ++i) {
15644 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15645     ++a;
15646   }
15647 #pragma omp target simd
15648   for (int i = 0; i < 10; ++i) {
15649 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15650     ++a;
15651   }
15652 #pragma omp target simd
15653   for (int i = 0; i < 10; ++i) {
15654 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15655     ++a;
15656   }
15657 #pragma omp target simd
15658   for (int i = 0; i < 10; ++i) {
15659 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15660     ++a;
15661   }
15662 #pragma omp target simd
15663   for (int i = 0; i < 10; ++i) {
15664 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15665     ++a;
15666   }
15667 #pragma omp target simd
15668   for (int i = 0; i < 10; ++i) {
15669 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15670     for (int i = 0; i < 10; ++i)
15671       ;
15672   }
15673 #pragma omp target simd
15674   for (int i = 0; i < 10; ++i) {
15675 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15676     for (int i = 0; i < 10; ++i)
15677       ;
15678   }
15679 #pragma omp target simd
15680   for (int i = 0; i < 10; ++i) {
15681 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15682     for (int i = 0; i < 10; ++i)
15683       ;
15684   }
15685 #pragma omp target simd
15686   for (int i = 0; i < 10; ++i) {
15687 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15688     for (int i = 0; i < 10; ++i)
15689       ;
15690   }
15691 #pragma omp target simd
15692   for (int i = 0; i < 10; ++i) {
15693 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15694     for (int i = 0; i < 10; ++i)
15695       ;
15696   }
15697 #pragma omp target simd
15698   for (int i = 0; i < 10; ++i) {
15699 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15700     for (int i = 0; i < 10; ++i)
15701       ;
15702   }
15703 #pragma omp target simd
15704   for (int i = 0; i < 10; ++i) {
15705 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15706     a++;
15707   }
15708 #pragma omp target simd
15709   for (int i = 0; i < 10; ++i) {
15710 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15711     for (int i = 0; i < 10; ++i)
15712       ;
15713   }
15714 #pragma omp target simd
15715   for (int i = 0; i < 10; ++i) {
15716 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15717     for (int i = 0; i < 10; ++i)
15718       ;
15719   }
15720 #pragma omp target simd
15721   for (int i = 0; i < 10; ++i) {
15722 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15723     for (int i = 0; i < 10; ++i)
15724       ;
15725   }
15726 #pragma omp target simd
15727   for (int i = 0; i < 10; ++i) {
15728 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15729     for (int i = 0; i < 10; ++i)
15730       ;
15731   }
15732 
15733 // TEAMS DISTRIBUTE DIRECTIVE
15734 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15735   for (int i = 0; i < 10; ++i)
15736     ;
15737 #pragma omp target
15738 #pragma omp teams distribute
15739   for (int i = 0; i < 10; ++i) {
15740 #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?}}
15741     for (int i = 0; i < 10; ++i)
15742       ;
15743   }
15744 #pragma omp target
15745 #pragma omp teams distribute
15746   for (int i = 0; i < 10; ++i) {
15747 #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?}}
15748     for (int i = 0; i < 10; ++i)
15749       ;
15750   }
15751 #pragma omp target
15752 #pragma omp teams distribute
15753   for (int i = 0; i < 10; ++i) {
15754 #pragma omp for // OK
15755     for (int i = 0; i < 10; ++i)
15756       ;
15757   }
15758 #pragma omp target
15759 #pragma omp teams distribute
15760   for (int i = 0; i < 10; ++i) {
15761 #pragma omp simd // OK
15762     for (int i = 0; i < 10; ++i)
15763       ;
15764   }
15765 #pragma omp target
15766 #pragma omp teams distribute
15767   for (int i = 0; i < 10; ++i) {
15768 #pragma omp for simd // OK
15769     for (int i = 0; i < 10; ++i)
15770       ;
15771   }
15772 #pragma omp target
15773 #pragma omp teams distribute
15774   for (int i = 0; i < 10; ++i) {
15775 #pragma omp parallel // OK
15776     for (int i = 0; i < 10; ++i)
15777       ;
15778   }
15779 #pragma omp target
15780 #pragma omp teams distribute
15781   for (int i = 0; i < 10; ++i) {
15782 #pragma omp sections // OK
15783     {
15784       bar();
15785     }
15786   }
15787 #pragma omp target
15788 #pragma omp teams distribute
15789   for (int i = 0; i < 10; ++i) {
15790 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
15791     {
15792       bar();
15793     }
15794   }
15795 #pragma omp target
15796 #pragma omp teams distribute
15797   for (int i = 0; i < 10; ++i) {
15798 #pragma omp single // OK
15799     {
15800       bar();
15801     }
15802   }
15803 #pragma omp target
15804 #pragma omp teams distribute
15805   for (int i = 0; i < 10; ++i) {
15806 #pragma omp master // OK
15807     {
15808       bar();
15809     }
15810   }
15811 #pragma omp target
15812 #pragma omp teams distribute
15813   for (int i = 0; i < 10; ++i) {
15814 #pragma omp critical // OK
15815     {
15816       bar();
15817     }
15818   }
15819 #pragma omp target
15820 #pragma omp teams distribute
15821   for (int i = 0; i < 10; ++i) {
15822 #pragma omp parallel // OK
15823     {
15824 #pragma omp single
15825       {
15826         bar();
15827       }
15828     }
15829   }
15830 #pragma omp target
15831 #pragma omp teams distribute
15832   for (int i = 0; i < 10; ++i) {
15833 #pragma omp parallel for // OK
15834     for (int i = 0; i < 10; ++i)
15835       ;
15836   }
15837 #pragma omp target
15838 #pragma omp teams distribute
15839   for (int i = 0; i < 10; ++i) {
15840 #pragma omp parallel for simd // OK
15841     for (int i = 0; i < 10; ++i)
15842       ;
15843   }
15844 #pragma omp target
15845 #pragma omp teams distribute
15846   for (int i = 0; i < 10; ++i) {
15847 #pragma omp parallel sections // OK
15848     {
15849       bar();
15850     }
15851   }
15852 #pragma omp target
15853 #pragma omp teams distribute
15854   for (int i = 0; i < 10; ++i) {
15855 #pragma omp task // OK
15856     {
15857       bar();
15858     }
15859   }
15860 #pragma omp target
15861 #pragma omp teams distribute
15862   for (int i = 0; i < 10; ++i) {
15863 #pragma omp taskyield // OK
15864     bar();
15865   }
15866 #pragma omp target
15867 #pragma omp teams distribute
15868   for (int i = 0; i < 10; ++i) {
15869 #pragma omp barrier // OK
15870     bar();
15871   }
15872 #pragma omp target
15873 #pragma omp teams distribute
15874   for (int i = 0; i < 10; ++i) {
15875 #pragma omp taskwait // OK
15876     bar();
15877   }
15878 #pragma omp target
15879 #pragma omp teams distribute
15880   for (int i = 0; i < 10; ++i) {
15881 #pragma omp flush // OK
15882     bar();
15883   }
15884 #pragma omp target
15885 #pragma omp teams distribute
15886   for (int i = 0; i < 10; ++i) {
15887 #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?}}
15888     bar();
15889   }
15890 #pragma omp target
15891 #pragma omp teams distribute
15892   for (int i = 0; i < 10; ++i) {
15893 #pragma omp atomic // OK
15894     ++a;
15895   }
15896 #pragma omp target
15897 #pragma omp teams distribute
15898   for (int i = 0; i < 10; ++i) {
15899 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15900     ++a;
15901   }
15902 #pragma omp target
15903 #pragma omp teams distribute
15904   for (int i = 0; i < 10; ++i) {
15905 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
15906     ++a;
15907   }
15908 #pragma omp target
15909 #pragma omp teams distribute
15910   for (int i = 0; i < 10; ++i) {
15911 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15912     for (int i = 0; i < 10; ++i)
15913       ;
15914   }
15915 #pragma omp target
15916 #pragma omp teams distribute
15917   for (int i = 0; i < 10; ++i) {
15918 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15919     ++a;
15920   }
15921 #pragma omp target
15922 #pragma omp teams distribute
15923   for (int i = 0; i < 10; ++i) {
15924 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15925     ++a;
15926   }
15927 #pragma omp target
15928 #pragma omp teams distribute
15929   for (int i = 0; i < 10; ++i) {
15930 #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?}}
15931     ++a;
15932   }
15933 #pragma omp target
15934 #pragma omp teams distribute
15935   for (int i = 0; i < 10; ++i) {
15936 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15937     ++a;
15938   }
15939 #pragma omp target
15940 #pragma omp teams distribute
15941   for (int i = 0; i < 10; ++i) {
15942 #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?}}
15943     for (int i = 0; i < 10; ++i)
15944       ++a;
15945   }
15946 #pragma omp target
15947 #pragma omp teams distribute
15948   for (int i = 0; i < 10; ++i) {
15949 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15950     for (int i = 0; i < 10; ++i)
15951       ++a;
15952   }
15953 #pragma omp target
15954 #pragma omp teams distribute
15955   for (int i = 0; i < 10; ++i) {
15956 #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?}}
15957     for (int i = 0; i < 10; ++i)
15958       ++a;
15959   }
15960 #pragma omp target
15961 #pragma omp teams distribute
15962   for (int i = 0; i < 10; ++i) {
15963 #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?}}
15964     for (int i = 0; i < 10; ++i)
15965       ++a;
15966   }
15967 #pragma omp target
15968 #pragma omp teams distribute
15969   for (int i = 0; i < 10; ++i) {
15970 #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?}}
15971     for (int i = 0; i < 10; ++i)
15972       ++a;
15973   }
15974 #pragma omp target
15975 #pragma omp teams distribute
15976   for (int i = 0; i < 10; ++i) {
15977 #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?}}
15978     for (int i = 0; i < 10; ++i)
15979       ++a;
15980   }
15981 #pragma omp target
15982 #pragma omp teams distribute
15983   for (int i = 0; i < 10; ++i) {
15984 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15985     ++a;
15986   }
15987 #pragma omp target
15988 #pragma omp teams distribute
15989   for (int i = 0; i < 10; ++i) {
15990 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15991     for (int i = 0; i < 10; ++i)
15992       ++a;
15993   }
15994 #pragma omp target
15995 #pragma omp teams distribute
15996   for (int i = 0; i < 10; ++i) {
15997 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15998     for (int i = 0; i < 10; ++i)
15999       ++a;
16000   }
16001 #pragma omp target
16002 #pragma omp teams distribute
16003   for (int i = 0; i < 10; ++i) {
16004 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16005     for (int i = 0; i < 10; ++i)
16006       ++a;
16007   }
16008 #pragma omp target
16009 #pragma omp teams distribute
16010   for (int i = 0; i < 10; ++i) {
16011 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16012     for (int i = 0; i < 10; ++i)
16013       ++a;
16014   }
16015 
16016 // TEAMS DISTRIBUTE SIMD DIRECTIVE
16017 #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?}}
16018   for (int i = 0; i < 10; ++i)
16019     ;
16020 #pragma omp target
16021 #pragma omp teams distribute simd
16022   for (int i = 0; i < 10; ++i) {
16023 #pragma omp distribute parallel for simd // 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
16028 #pragma omp teams distribute simd
16029   for (int i = 0; i < 10; ++i) {
16030 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16031     for (int i = 0; i < 10; ++i)
16032       ;
16033   }
16034 #pragma omp target
16035 #pragma omp teams distribute simd
16036   for (int i = 0; i < 10; ++i) {
16037 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16038     for (int i = 0; i < 10; ++i)
16039       ;
16040   }
16041 #pragma omp target
16042 #pragma omp teams distribute simd
16043   for (int i = 0; i < 10; ++i) {
16044 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16045     for (int i = 0; i < 10; ++i)
16046       ;
16047   }
16048 #pragma omp target
16049 #pragma omp teams distribute simd
16050   for (int i = 0; i < 10; ++i) {
16051 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16052     for (int i = 0; i < 10; ++i)
16053       ;
16054   }
16055 #pragma omp target
16056 #pragma omp teams distribute simd
16057   for (int i = 0; i < 10; ++i) {
16058 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16059     for (int i = 0; i < 10; ++i)
16060       ;
16061   }
16062 #pragma omp target
16063 #pragma omp teams distribute simd
16064   for (int i = 0; i < 10; ++i) {
16065 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16066     {
16067       bar();
16068     }
16069   }
16070 #pragma omp target
16071 #pragma omp teams distribute simd
16072   for (int i = 0; i < 10; ++i) {
16073 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16074     {
16075       bar();
16076     }
16077   }
16078 #pragma omp target
16079 #pragma omp teams distribute simd
16080   for (int i = 0; i < 10; ++i) {
16081 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16082     {
16083       bar();
16084     }
16085   }
16086 #pragma omp target
16087 #pragma omp teams distribute simd
16088   for (int i = 0; i < 10; ++i) {
16089 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16090     {
16091       bar();
16092     }
16093   }
16094 #pragma omp target
16095 #pragma omp teams distribute simd
16096   for (int i = 0; i < 10; ++i) {
16097 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16098     {
16099       bar();
16100     }
16101   }
16102 #pragma omp target
16103 #pragma omp teams distribute simd
16104   for (int i = 0; i < 10; ++i) {
16105 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16106     {
16107 #pragma omp single
16108       {
16109         bar();
16110       }
16111     }
16112   }
16113 #pragma omp target
16114 #pragma omp teams distribute simd
16115   for (int i = 0; i < 10; ++i) {
16116 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16117     for (int i = 0; i < 10; ++i)
16118       ;
16119   }
16120 #pragma omp target
16121 #pragma omp teams distribute simd
16122   for (int i = 0; i < 10; ++i) {
16123 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16124     for (int i = 0; i < 10; ++i)
16125       ;
16126   }
16127 #pragma omp target
16128 #pragma omp teams distribute simd
16129   for (int i = 0; i < 10; ++i) {
16130 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16131     {
16132       bar();
16133     }
16134   }
16135 #pragma omp target
16136 #pragma omp teams distribute simd
16137   for (int i = 0; i < 10; ++i) {
16138 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16139     {
16140       bar();
16141     }
16142   }
16143 #pragma omp target
16144 #pragma omp teams distribute simd
16145   for (int i = 0; i < 10; ++i) {
16146 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16147     bar();
16148   }
16149 #pragma omp target
16150 #pragma omp teams distribute simd
16151   for (int i = 0; i < 10; ++i) {
16152 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16153     bar();
16154   }
16155 #pragma omp target
16156 #pragma omp teams distribute simd
16157   for (int i = 0; i < 10; ++i) {
16158 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16159     bar();
16160   }
16161 #pragma omp target
16162 #pragma omp teams distribute simd
16163   for (int i = 0; i < 10; ++i) {
16164 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16165     bar();
16166   }
16167 #pragma omp target
16168 #pragma omp teams distribute simd
16169   for (int i = 0; i < 10; ++i) {
16170 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16171     bar();
16172   }
16173 #pragma omp target
16174 #pragma omp teams distribute simd
16175   for (int i = 0; i < 10; ++i) {
16176 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16177     ++a;
16178   }
16179 #pragma omp target
16180 #pragma omp teams distribute simd
16181   for (int i = 0; i < 10; ++i) {
16182 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16183     ++a;
16184   }
16185 #pragma omp target
16186 #pragma omp teams distribute simd
16187   for (int i = 0; i < 10; ++i) {
16188 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16189     ++a;
16190   }
16191 #pragma omp target
16192 #pragma omp teams distribute simd
16193   for (int i = 0; i < 10; ++i) {
16194 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16195     for (int i = 0; i < 10; ++i)
16196       ;
16197   }
16198 #pragma omp target
16199 #pragma omp teams distribute simd
16200   for (int i = 0; i < 10; ++i) {
16201 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16202     ++a;
16203   }
16204 #pragma omp target
16205 #pragma omp teams distribute simd
16206   for (int i = 0; i < 10; ++i) {
16207 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16208     ++a;
16209   }
16210 #pragma omp target
16211 #pragma omp teams distribute simd
16212   for (int i = 0; i < 10; ++i) {
16213 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16214     ++a;
16215   }
16216 #pragma omp target
16217 #pragma omp teams distribute simd
16218   for (int i = 0; i < 10; ++i) {
16219 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16220     ++a;
16221   }
16222 #pragma omp target
16223 #pragma omp teams distribute simd
16224   for (int i = 0; i < 10; ++i) {
16225 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16226     for (int i = 0; i < 10; ++i)
16227       ++a;
16228   }
16229 #pragma omp target
16230 #pragma omp teams distribute simd
16231   for (int i = 0; i < 10; ++i) {
16232 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16233     for (int i = 0; i < 10; ++i)
16234       ++a;
16235   }
16236 #pragma omp target
16237 #pragma omp teams distribute simd
16238   for (int i = 0; i < 10; ++i) {
16239 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16240     for (int i = 0; i < 10; ++i)
16241       ++a;
16242   }
16243 #pragma omp target
16244 #pragma omp teams distribute simd
16245   for (int i = 0; i < 10; ++i) {
16246 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16247     for (int i = 0; i < 10; ++i)
16248       ++a;
16249   }
16250 #pragma omp target
16251 #pragma omp teams distribute simd
16252   for (int i = 0; i < 10; ++i) {
16253 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16254     for (int i = 0; i < 10; ++i)
16255       ++a;
16256   }
16257 #pragma omp target
16258 #pragma omp teams distribute simd
16259   for (int i = 0; i < 10; ++i) {
16260 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16261     for (int i = 0; i < 10; ++i)
16262       ++a;
16263   }
16264 #pragma omp target
16265 #pragma omp teams distribute simd
16266   for (int i = 0; i < 10; ++i) {
16267 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16268     ++a;
16269   }
16270 #pragma omp target
16271 #pragma omp teams distribute simd
16272   for (int i = 0; i < 10; ++i) {
16273 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16274     for (int i = 0; i < 10; ++i)
16275       ++a;
16276   }
16277 #pragma omp target
16278 #pragma omp teams distribute simd
16279   for (int i = 0; i < 10; ++i) {
16280 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16281     for (int i = 0; i < 10; ++i)
16282       ++a;
16283   }
16284 #pragma omp target
16285 #pragma omp teams distribute simd
16286   for (int i = 0; i < 10; ++i) {
16287 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16288     for (int i = 0; i < 10; ++i)
16289       ++a;
16290   }
16291 #pragma omp target
16292 #pragma omp teams distribute simd
16293   for (int i = 0; i < 10; ++i) {
16294 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16295     for (int i = 0; i < 10; ++i)
16296       ++a;
16297   }
16298 
16299 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
16300 #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?}}
16301   for (int i = 0; i < 10; ++i)
16302     ;
16303 #pragma omp target
16304 #pragma omp teams distribute parallel for simd
16305   for (int i = 0; i < 10; ++i) {
16306 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16307     for (int i = 0; i < 10; ++i)
16308       ;
16309   }
16310 #pragma omp target
16311 #pragma omp teams distribute parallel for simd
16312   for (int i = 0; i < 10; ++i) {
16313 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16314     for (int i = 0; i < 10; ++i)
16315       ;
16316   }
16317 #pragma omp target
16318 #pragma omp teams distribute parallel for simd
16319   for (int i = 0; i < 10; ++i) {
16320 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16321     for (int i = 0; i < 10; ++i)
16322       ;
16323   }
16324 #pragma omp target
16325 #pragma omp teams distribute parallel for simd
16326   for (int i = 0; i < 10; ++i) {
16327 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16328     for (int i = 0; i < 10; ++i)
16329       ;
16330   }
16331 #pragma omp target
16332 #pragma omp teams distribute parallel for simd
16333   for (int i = 0; i < 10; ++i) {
16334 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16335     for (int i = 0; i < 10; ++i)
16336       ;
16337   }
16338 #pragma omp target
16339 #pragma omp teams distribute parallel for simd
16340   for (int i = 0; i < 10; ++i) {
16341 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16342     for (int i = 0; i < 10; ++i)
16343       ;
16344   }
16345 #pragma omp target
16346 #pragma omp teams distribute parallel for simd
16347   for (int i = 0; i < 10; ++i) {
16348 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16349     {
16350       bar();
16351     }
16352   }
16353 #pragma omp target
16354 #pragma omp teams distribute parallel for simd
16355   for (int i = 0; i < 10; ++i) {
16356 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16357     {
16358       bar();
16359     }
16360   }
16361 #pragma omp target
16362 #pragma omp teams distribute parallel for simd
16363   for (int i = 0; i < 10; ++i) {
16364 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16365     {
16366       bar();
16367     }
16368   }
16369 #pragma omp target
16370 #pragma omp teams distribute parallel for simd
16371   for (int i = 0; i < 10; ++i) {
16372 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16373     {
16374       bar();
16375     }
16376   }
16377 #pragma omp target
16378 #pragma omp teams distribute parallel for simd
16379   for (int i = 0; i < 10; ++i) {
16380 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16381     {
16382       bar();
16383     }
16384   }
16385 #pragma omp target
16386 #pragma omp teams distribute parallel for 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     {
16390 #pragma omp single
16391       {
16392         bar();
16393       }
16394     }
16395   }
16396 #pragma omp target
16397 #pragma omp teams distribute parallel for simd
16398   for (int i = 0; i < 10; ++i) {
16399 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16400     for (int i = 0; i < 10; ++i)
16401       ;
16402   }
16403 #pragma omp target
16404 #pragma omp teams distribute parallel for simd
16405   for (int i = 0; i < 10; ++i) {
16406 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16407     for (int i = 0; i < 10; ++i)
16408       ;
16409   }
16410 #pragma omp target
16411 #pragma omp teams distribute parallel for simd
16412   for (int i = 0; i < 10; ++i) {
16413 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16414     {
16415       bar();
16416     }
16417   }
16418 #pragma omp target
16419 #pragma omp teams distribute parallel for simd
16420   for (int i = 0; i < 10; ++i) {
16421 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16422     {
16423       bar();
16424     }
16425   }
16426 #pragma omp target
16427 #pragma omp teams distribute parallel for simd
16428   for (int i = 0; i < 10; ++i) {
16429 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16430     bar();
16431   }
16432 #pragma omp target
16433 #pragma omp teams distribute parallel for simd
16434   for (int i = 0; i < 10; ++i) {
16435 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16436     bar();
16437   }
16438 #pragma omp target
16439 #pragma omp teams distribute parallel for simd
16440   for (int i = 0; i < 10; ++i) {
16441 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16442     bar();
16443   }
16444 #pragma omp target
16445 #pragma omp teams distribute parallel for simd
16446   for (int i = 0; i < 10; ++i) {
16447 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16448     bar();
16449   }
16450 #pragma omp target
16451 #pragma omp teams distribute parallel for simd
16452   for (int i = 0; i < 10; ++i) {
16453 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16454     bar();
16455   }
16456 #pragma omp target
16457 #pragma omp teams distribute parallel for simd
16458   for (int i = 0; i < 10; ++i) {
16459 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16460     ++a;
16461   }
16462 #pragma omp target
16463 #pragma omp teams distribute parallel for simd
16464   for (int i = 0; i < 10; ++i) {
16465 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16466     ++a;
16467   }
16468 #pragma omp target
16469 #pragma omp teams distribute parallel for simd
16470   for (int i = 0; i < 10; ++i) {
16471 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16472     ++a;
16473   }
16474 #pragma omp target
16475 #pragma omp teams distribute parallel for simd
16476   for (int i = 0; i < 10; ++i) {
16477 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16478     for (int i = 0; i < 10; ++i)
16479       ;
16480   }
16481 #pragma omp target
16482 #pragma omp teams distribute parallel for simd
16483   for (int i = 0; i < 10; ++i) {
16484 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16485     ++a;
16486   }
16487 #pragma omp target
16488 #pragma omp teams distribute parallel for simd
16489   for (int i = 0; i < 10; ++i) {
16490 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16491     ++a;
16492   }
16493 #pragma omp target
16494 #pragma omp teams distribute parallel for simd
16495   for (int i = 0; i < 10; ++i) {
16496 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16497     ++a;
16498   }
16499 #pragma omp target
16500 #pragma omp teams distribute parallel for simd
16501   for (int i = 0; i < 10; ++i) {
16502 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16503     ++a;
16504   }
16505 #pragma omp target
16506 #pragma omp teams distribute parallel for simd
16507   for (int i = 0; i < 10; ++i) {
16508 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16509     for (int i = 0; i < 10; ++i)
16510       ++a;
16511   }
16512 #pragma omp target
16513 #pragma omp teams distribute parallel for simd
16514   for (int i = 0; i < 10; ++i) {
16515 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16516     for (int i = 0; i < 10; ++i)
16517       ++a;
16518   }
16519 #pragma omp target
16520 #pragma omp teams distribute parallel for simd
16521   for (int i = 0; i < 10; ++i) {
16522 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16523     for (int i = 0; i < 10; ++i)
16524       ++a;
16525   }
16526 #pragma omp target
16527 #pragma omp teams distribute parallel for simd
16528   for (int i = 0; i < 10; ++i) {
16529 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16530     for (int i = 0; i < 10; ++i)
16531       ++a;
16532   }
16533 #pragma omp target
16534 #pragma omp teams distribute parallel for simd
16535   for (int i = 0; i < 10; ++i) {
16536 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16537     for (int i = 0; i < 10; ++i)
16538       ++a;
16539   }
16540 #pragma omp target
16541 #pragma omp teams distribute parallel for simd
16542   for (int i = 0; i < 10; ++i) {
16543 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16544     for (int i = 0; i < 10; ++i)
16545       ++a;
16546   }
16547 #pragma omp target
16548 #pragma omp teams distribute parallel for simd
16549   for (int i = 0; i < 10; ++i) {
16550 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16551     ++a;
16552   }
16553 #pragma omp target
16554 #pragma omp teams distribute parallel for simd
16555   for (int i = 0; i < 10; ++i) {
16556 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16557     for (int i = 0; i < 10; ++i)
16558       ++a;
16559   }
16560 #pragma omp target
16561 #pragma omp teams distribute parallel for simd
16562   for (int i = 0; i < 10; ++i) {
16563 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16564     for (int i = 0; i < 10; ++i)
16565       ++a;
16566   }
16567 #pragma omp target
16568 #pragma omp teams distribute parallel for simd
16569   for (int i = 0; i < 10; ++i) {
16570 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16571     for (int i = 0; i < 10; ++i)
16572       ++a;
16573   }
16574 #pragma omp target
16575 #pragma omp teams distribute parallel for simd
16576   for (int i = 0; i < 10; ++i) {
16577 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16578     for (int i = 0; i < 10; ++i)
16579       ++a;
16580   }
16581 
16582 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16583 #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?}}
16584   for (int i = 0; i < 10; ++i)
16585     ;
16586 #pragma omp target
16587 #pragma omp teams distribute parallel for
16588   for (int i = 0; i < 10; ++i) {
16589 #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?}}
16590     for (int i = 0; i < 10; ++i)
16591       ;
16592   }
16593 #pragma omp target
16594 #pragma omp teams distribute parallel for
16595   for (int i = 0; i < 10; ++i) {
16596 #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?}}
16597     for (int i = 0; i < 10; ++i)
16598       ;
16599   }
16600 #pragma omp target
16601 #pragma omp teams distribute parallel for
16602   for (int i = 0; i < 10; ++i) {
16603 #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?}}
16604     for (int i = 0; i < 10; ++i)
16605       ;
16606   }
16607 #pragma omp target
16608 #pragma omp teams distribute parallel for
16609   for (int i = 0; i < 10; ++i) {
16610 #pragma omp simd // OK
16611     for (int i = 0; i < 10; ++i)
16612       ;
16613   }
16614 #pragma omp target
16615 #pragma omp teams distribute parallel for
16616   for (int i = 0; i < 10; ++i) {
16617 #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?}}
16618     for (int i = 0; i < 10; ++i)
16619       ;
16620   }
16621 #pragma omp target
16622 #pragma omp teams distribute parallel for
16623   for (int i = 0; i < 10; ++i) {
16624 #pragma omp parallel // OK
16625     for (int i = 0; i < 10; ++i)
16626       ;
16627   }
16628 #pragma omp target
16629 #pragma omp teams distribute parallel for
16630   for (int i = 0; i < 10; ++i) {
16631 #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?}}
16632     {
16633       bar();
16634     }
16635   }
16636 #pragma omp target
16637 #pragma omp teams distribute parallel for
16638   for (int i = 0; i < 10; ++i) {
16639 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
16640     {
16641       bar();
16642     }
16643   }
16644 #pragma omp target
16645 #pragma omp teams distribute parallel for
16646   for (int i = 0; i < 10; ++i) {
16647 #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?}}
16648     {
16649       bar();
16650     }
16651   }
16652 #pragma omp target
16653 #pragma omp teams distribute parallel for
16654   for (int i = 0; i < 10; ++i) {
16655 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16656     {
16657       bar();
16658     }
16659   }
16660 #pragma omp target
16661 #pragma omp teams distribute parallel for
16662   for (int i = 0; i < 10; ++i) {
16663 #pragma omp critical // OK
16664     {
16665       bar();
16666     }
16667   }
16668 #pragma omp target
16669 #pragma omp teams distribute parallel for
16670   for (int i = 0; i < 10; ++i) {
16671 #pragma omp parallel // OK
16672     {
16673 #pragma omp single
16674       {
16675         bar();
16676       }
16677     }
16678   }
16679 #pragma omp target
16680 #pragma omp teams distribute parallel for
16681   for (int i = 0; i < 10; ++i) {
16682 #pragma omp parallel for // OK
16683     for (int i = 0; i < 10; ++i)
16684       ;
16685   }
16686 #pragma omp target
16687 #pragma omp teams distribute parallel for
16688   for (int i = 0; i < 10; ++i) {
16689 #pragma omp parallel for simd // OK
16690     for (int i = 0; i < 10; ++i)
16691       ;
16692   }
16693 #pragma omp target
16694 #pragma omp teams distribute parallel for
16695   for (int i = 0; i < 10; ++i) {
16696 #pragma omp parallel sections // OK
16697     {
16698       bar();
16699     }
16700   }
16701 #pragma omp target
16702 #pragma omp teams distribute parallel for
16703   for (int i = 0; i < 10; ++i) {
16704 #pragma omp task // OK
16705     {
16706       bar();
16707     }
16708   }
16709 #pragma omp target
16710 #pragma omp teams distribute parallel for
16711   for (int i = 0; i < 10; ++i) {
16712 #pragma omp taskyield // OK
16713     bar();
16714   }
16715 #pragma omp target
16716 #pragma omp teams distribute parallel for
16717   for (int i = 0; i < 10; ++i) {
16718 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16719     bar();
16720   }
16721 #pragma omp target
16722 #pragma omp teams distribute parallel for
16723   for (int i = 0; i < 10; ++i) {
16724 #pragma omp taskwait // OK
16725     bar();
16726   }
16727 #pragma omp target
16728 #pragma omp teams distribute parallel for
16729   for (int i = 0; i < 10; ++i) {
16730 #pragma omp flush // OK
16731     bar();
16732   }
16733 #pragma omp target
16734 #pragma omp teams distribute parallel for
16735   for (int i = 0; i < 10; ++i) {
16736 #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?}}
16737     bar();
16738   }
16739 #pragma omp target
16740 #pragma omp teams distribute parallel for
16741   for (int i = 0; i < 10; ++i) {
16742 #pragma omp atomic // OK
16743     ++a;
16744   }
16745 #pragma omp target
16746 #pragma omp teams distribute parallel for
16747   for (int i = 0; i < 10; ++i) {
16748 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
16749     ++a;
16750   }
16751 #pragma omp target
16752 #pragma omp teams distribute parallel for
16753   for (int i = 0; i < 10; ++i) {
16754 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
16755     ++a;
16756   }
16757 #pragma omp target
16758 #pragma omp teams distribute parallel for
16759   for (int i = 0; i < 10; ++i) {
16760 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
16761     for (int i = 0; i < 10; ++i)
16762       ;
16763   }
16764 #pragma omp target
16765 #pragma omp teams distribute parallel for
16766   for (int i = 0; i < 10; ++i) {
16767 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
16768     ++a;
16769   }
16770 #pragma omp target
16771 #pragma omp teams distribute parallel for
16772   for (int i = 0; i < 10; ++i) {
16773 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
16774     ++a;
16775   }
16776 #pragma omp target
16777 #pragma omp teams distribute parallel for
16778   for (int i = 0; i < 10; ++i) {
16779 #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?}}
16780     ++a;
16781   }
16782 #pragma omp target
16783 #pragma omp teams distribute parallel for
16784   for (int i = 0; i < 10; ++i) {
16785 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
16786     ++a;
16787   }
16788 #pragma omp target
16789 #pragma omp teams distribute parallel for
16790   for (int i = 0; i < 10; ++i) {
16791 #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?}}
16792     for (int i = 0; i < 10; ++i)
16793       ++a;
16794   }
16795 #pragma omp target
16796 #pragma omp teams distribute parallel for
16797   for (int i = 0; i < 10; ++i) {
16798 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
16799     for (int i = 0; i < 10; ++i)
16800       ++a;
16801   }
16802 #pragma omp target
16803 #pragma omp teams distribute parallel for
16804   for (int i = 0; i < 10; ++i) {
16805 #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?}}
16806     for (int i = 0; i < 10; ++i)
16807       ++a;
16808   }
16809 #pragma omp target
16810 #pragma omp teams distribute parallel for
16811   for (int i = 0; i < 10; ++i) {
16812 #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?}}
16813     for (int i = 0; i < 10; ++i)
16814       ++a;
16815   }
16816 #pragma omp target
16817 #pragma omp teams distribute parallel for
16818   for (int i = 0; i < 10; ++i) {
16819 #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?}}
16820     for (int i = 0; i < 10; ++i)
16821       ++a;
16822   }
16823 #pragma omp target
16824 #pragma omp teams distribute parallel for
16825   for (int i = 0; i < 10; ++i) {
16826 #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?}}
16827     for (int i = 0; i < 10; ++i)
16828       ++a;
16829   }
16830 #pragma omp target
16831 #pragma omp teams distribute parallel for
16832   for (int i = 0; i < 10; ++i) {
16833 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
16834     ++a;
16835   }
16836 #pragma omp target
16837 #pragma omp teams distribute parallel for
16838   for (int i = 0; i < 10; ++i) {
16839 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
16840     for (int i = 0; i < 10; ++i)
16841       ++a;
16842   }
16843 #pragma omp target
16844 #pragma omp teams distribute parallel for
16845   for (int i = 0; i < 10; ++i) {
16846 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
16847     for (int i = 0; i < 10; ++i)
16848       ++a;
16849   }
16850 #pragma omp target
16851 #pragma omp teams distribute parallel for
16852   for (int i = 0; i < 10; ++i) {
16853 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16854     for (int i = 0; i < 10; ++i)
16855       ++a;
16856   }
16857 #pragma omp target
16858 #pragma omp teams distribute parallel for
16859   for (int i = 0; i < 10; ++i) {
16860 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16861     for (int i = 0; i < 10; ++i)
16862       ++a;
16863   }
16864 
16865 // TARGET TEAMS DIRECTIVE
16866 #pragma omp target teams
16867 #pragma omp parallel
16868   bar();
16869 #pragma omp target teams
16870 #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?}}
16871   for (int i = 0; i < 10; ++i)
16872     ;
16873 #pragma omp target teams
16874 #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?}}
16875   for (int i = 0; i < 10; ++i)
16876     ;
16877 #pragma omp target teams
16878 #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?}}
16879   for (int i = 0; i < 10; ++i)
16880     ;
16881 #pragma omp target teams
16882 #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?}}
16883   {
16884     bar();
16885   }
16886 #pragma omp target teams
16887 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
16888   {
16889     bar();
16890   }
16891 #pragma omp target teams
16892 #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?}}
16893   bar();
16894 
16895 #pragma omp target teams
16896 #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?}}
16897   {
16898     bar();
16899   }
16900 #pragma omp target teams
16901 #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?}}
16902   {
16903     bar();
16904   }
16905 #pragma omp target teams
16906 #pragma omp parallel for
16907   for (int i = 0; i < 10; ++i)
16908     ;
16909 #pragma omp target teams
16910 #pragma omp parallel for simd
16911   for (int i = 0; i < 10; ++i)
16912     ;
16913 #pragma omp target teams
16914 #pragma omp parallel sections
16915   {
16916     bar();
16917   }
16918 #pragma omp target teams
16919 #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?}}
16920   {
16921     bar();
16922   }
16923 #pragma omp target teams
16924   {
16925 #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?}}
16926     bar();
16927   }
16928 #pragma omp target teams
16929   {
16930 #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?}}
16931     bar();
16932   }
16933 #pragma omp target teams
16934   {
16935 #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?}}
16936     bar();
16937   }
16938 #pragma omp target teams
16939   {
16940 #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?}}
16941     bar();
16942   }
16943 #pragma omp target teams
16944   {
16945 #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?}}
16946     bar();
16947   }
16948 #pragma omp target teams
16949   {
16950 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
16951     ++a;
16952   }
16953 #pragma omp target teams
16954   {
16955 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
16956     ++a;
16957   }
16958 #pragma omp target teams
16959   {
16960 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
16961     ++a;
16962   }
16963 #pragma omp target teams
16964 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
16965   for (int i = 0; i < 10; ++i)
16966     ;
16967 #pragma omp target teams
16968   {
16969 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16970   }
16971 #pragma omp target teams
16972   {
16973 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16974   }
16975 #pragma omp target teams
16976   {
16977 #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?}}
16978     ++a;
16979   }
16980 #pragma omp target teams
16981   {
16982 #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?}}
16983   for (int i = 0; i < 10; ++i)
16984     ++a;
16985   }
16986 #pragma omp target teams
16987 #pragma omp distribute
16988   for (int i = 0; i < 10; ++i)
16989     ;
16990 #pragma omp target teams
16991   {
16992 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
16993     ++a;
16994   }
16995 #pragma omp target teams
16996 #pragma omp distribute parallel for
16997   for (int i = 0; i < 10; ++i)
16998     ;
16999 #pragma omp target teams
17000   {
17001 #pragma omp distribute parallel for
17002   for (int i = 0; i < 10; ++i)
17003     ;
17004 #pragma omp distribute parallel for
17005   for (int j = 0; j < 10; ++j)
17006     ;
17007   }
17008 #pragma omp target teams
17009   {
17010 #pragma omp distribute parallel for simd
17011   for (int i = 0; i < 10; ++i)
17012     ;
17013 #pragma omp distribute parallel for simd
17014   for (int j = 0; j < 10; ++j)
17015     ;
17016   }
17017 #pragma omp target teams
17018   {
17019 #pragma omp distribute simd
17020   for (int i = 0; i < 10; ++i)
17021     ;
17022 #pragma omp distribute simd
17023   for (int j = 0; j < 10; ++j)
17024     ;
17025   }
17026 #pragma omp target teams
17027   {
17028 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
17029   for (int i = 0; i < 10; ++i)
17030     ;
17031   }
17032 #pragma omp target teams
17033   {
17034 #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?}}
17035   for (int i = 0; i < 10; ++i)
17036     ;
17037   }
17038 #pragma omp target teams
17039   {
17040 #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?}}
17041   for (int i = 0; i < 10; ++i)
17042     ;
17043   }
17044 #pragma omp target teams
17045   {
17046 #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?}}
17047   for (int i = 0; i < 10; ++i)
17048     ;
17049   }
17050 #pragma omp target teams
17051   {
17052 #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?}}
17053   for (int i = 0; i < 10; ++i)
17054     ;
17055   }
17056 #pragma omp target teams
17057   {
17058 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
17059     a++;
17060   }
17061 #pragma omp target teams
17062   {
17063 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
17064   for (int i = 0; i < 10; ++i)
17065     ;
17066   }
17067 #pragma omp target teams
17068   {
17069 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
17070   for (int i = 0; i < 10; ++i)
17071     ;
17072   }
17073 #pragma omp target teams
17074   {
17075 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
17076   for (int i = 0; i < 10; ++i)
17077     ;
17078   }
17079 #pragma omp target teams
17080   {
17081 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
17082   for (int i = 0; i < 10; ++i)
17083     ;
17084   }
17085 
17086 // TARGET TEAMS DISTRIBUTE DIRECTIVE
17087 #pragma omp target teams distribute // OK
17088   for (int i = 0; i < 10; ++i)
17089     ;
17090 #pragma omp target teams distribute
17091   for (int i = 0; i < 10; ++i) {
17092 #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?}}
17093     for (int i = 0; i < 10; ++i)
17094       ;
17095   }
17096 #pragma omp target teams distribute
17097   for (int i = 0; i < 10; ++i) {
17098 #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?}}
17099     for (int i = 0; i < 10; ++i)
17100       ;
17101   }
17102 #pragma omp target teams distribute
17103   for (int i = 0; i < 10; ++i) {
17104 #pragma omp for // OK
17105     for (int i = 0; i < 10; ++i)
17106       ;
17107   }
17108 #pragma omp target teams distribute
17109   for (int i = 0; i < 10; ++i) {
17110 #pragma omp simd // OK
17111     for (int i = 0; i < 10; ++i)
17112       ;
17113   }
17114 #pragma omp target teams distribute
17115   for (int i = 0; i < 10; ++i) {
17116 #pragma omp for simd // OK
17117     for (int i = 0; i < 10; ++i)
17118       ;
17119   }
17120 #pragma omp target teams distribute
17121   for (int i = 0; i < 10; ++i) {
17122 #pragma omp parallel // OK
17123     for (int i = 0; i < 10; ++i)
17124       ;
17125   }
17126 #pragma omp target teams distribute
17127   for (int i = 0; i < 10; ++i) {
17128 #pragma omp sections // OK
17129     {
17130       bar();
17131     }
17132   }
17133 #pragma omp target teams distribute
17134   for (int i = 0; i < 10; ++i) {
17135 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
17136     {
17137       bar();
17138     }
17139   }
17140 #pragma omp target teams distribute
17141   for (int i = 0; i < 10; ++i) {
17142 #pragma omp single // OK
17143     {
17144       bar();
17145     }
17146   }
17147 #pragma omp target teams distribute
17148   for (int i = 0; i < 10; ++i) {
17149 #pragma omp master // OK
17150     {
17151       bar();
17152     }
17153   }
17154 #pragma omp target teams distribute
17155   for (int i = 0; i < 10; ++i) {
17156 #pragma omp critical // OK
17157     {
17158       bar();
17159     }
17160   }
17161 #pragma omp target teams distribute
17162   for (int i = 0; i < 10; ++i) {
17163 #pragma omp parallel // OK
17164     {
17165 #pragma omp single
17166       {
17167         bar();
17168       }
17169     }
17170   }
17171 #pragma omp target teams distribute
17172   for (int i = 0; i < 10; ++i) {
17173 #pragma omp parallel for // OK
17174     for (int i = 0; i < 10; ++i)
17175       ;
17176   }
17177 #pragma omp target teams distribute
17178   for (int i = 0; i < 10; ++i) {
17179 #pragma omp parallel for simd // OK
17180     for (int i = 0; i < 10; ++i)
17181       ;
17182   }
17183 #pragma omp target teams distribute
17184   for (int i = 0; i < 10; ++i) {
17185 #pragma omp parallel sections // OK
17186     {
17187       bar();
17188     }
17189   }
17190 #pragma omp target teams distribute
17191   for (int i = 0; i < 10; ++i) {
17192 #pragma omp task // OK
17193     {
17194       bar();
17195     }
17196   }
17197 #pragma omp target teams distribute
17198   for (int i = 0; i < 10; ++i) {
17199 #pragma omp taskyield // OK
17200     bar();
17201   }
17202 #pragma omp target teams distribute
17203   for (int i = 0; i < 10; ++i) {
17204 #pragma omp barrier // OK
17205     bar();
17206   }
17207 #pragma omp target teams distribute
17208   for (int i = 0; i < 10; ++i) {
17209 #pragma omp taskwait // OK
17210     bar();
17211   }
17212 #pragma omp target teams distribute
17213   for (int i = 0; i < 10; ++i) {
17214 #pragma omp flush // OK
17215     bar();
17216   }
17217 #pragma omp target teams distribute
17218   for (int i = 0; i < 10; ++i) {
17219 #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?}}
17220     bar();
17221   }
17222 #pragma omp target teams distribute
17223   for (int i = 0; i < 10; ++i) {
17224 #pragma omp atomic // OK
17225     ++a;
17226   }
17227 #pragma omp target teams distribute
17228   for (int i = 0; i < 10; ++i) {
17229 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17230     ++a;
17231   }
17232 #pragma omp target teams distribute
17233   for (int i = 0; i < 10; ++i) {
17234 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17235     ++a;
17236   }
17237 #pragma omp target teams distribute
17238   for (int i = 0; i < 10; ++i) {
17239 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17240     for (int i = 0; i < 10; ++i)
17241       ;
17242   }
17243 #pragma omp target teams distribute
17244   for (int i = 0; i < 10; ++i) {
17245 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17246     ++a;
17247   }
17248 #pragma omp target teams distribute
17249   for (int i = 0; i < 10; ++i) {
17250 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17251     ++a;
17252   }
17253 #pragma omp target teams distribute
17254   for (int i = 0; i < 10; ++i) {
17255 #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?}}
17256     ++a;
17257   }
17258 #pragma omp target teams distribute
17259   for (int i = 0; i < 10; ++i) {
17260 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17261     ++a;
17262   }
17263 #pragma omp target teams distribute
17264   for (int i = 0; i < 10; ++i) {
17265 #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?}}
17266     for (int i = 0; i < 10; ++i)
17267       ++a;
17268   }
17269 #pragma omp target teams distribute
17270   for (int i = 0; i < 10; ++i) {
17271 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17272     for (int i = 0; i < 10; ++i)
17273       ++a;
17274   }
17275 #pragma omp target teams distribute
17276   for (int i = 0; i < 10; ++i) {
17277 #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?}}
17278     for (int i = 0; i < 10; ++i)
17279       ++a;
17280   }
17281 #pragma omp target teams distribute
17282   for (int i = 0; i < 10; ++i) {
17283 #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?}}
17284     for (int i = 0; i < 10; ++i)
17285       ++a;
17286   }
17287 #pragma omp target teams distribute
17288   for (int i = 0; i < 10; ++i) {
17289 #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?}}
17290     for (int i = 0; i < 10; ++i)
17291       ++a;
17292   }
17293 #pragma omp target teams distribute
17294   for (int i = 0; i < 10; ++i) {
17295 #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?}}
17296     for (int i = 0; i < 10; ++i)
17297       ++a;
17298   }
17299 #pragma omp target teams distribute
17300   for (int i = 0; i < 10; ++i) {
17301 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17302     ++a;
17303   }
17304 #pragma omp target teams distribute
17305   for (int i = 0; i < 10; ++i) {
17306 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17307     for (int i = 0; i < 10; ++i)
17308       ++a;
17309   }
17310 #pragma omp target teams distribute
17311   for (int i = 0; i < 10; ++i) {
17312 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17313     for (int i = 0; i < 10; ++i)
17314       ++a;
17315   }
17316 #pragma omp target teams distribute
17317   for (int i = 0; i < 10; ++i) {
17318 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17319     for (int i = 0; i < 10; ++i)
17320       ++a;
17321   }
17322 #pragma omp target teams distribute
17323   for (int i = 0; i < 10; ++i) {
17324 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17325     for (int i = 0; i < 10; ++i)
17326       ++a;
17327   }
17328 
17329 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
17330 #pragma omp target teams distribute parallel for // OK
17331   for (int i = 0; i < 10; ++i)
17332     ;
17333 #pragma omp target teams distribute parallel for
17334   for (int i = 0; i < 10; ++i) {
17335 #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?}}
17336     for (int i = 0; i < 10; ++i)
17337       ;
17338   }
17339 #pragma omp target teams distribute parallel for
17340   for (int i = 0; i < 10; ++i) {
17341 #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?}}
17342     for (int i = 0; i < 10; ++i)
17343       ;
17344   }
17345 #pragma omp target teams distribute parallel for
17346   for (int i = 0; i < 10; ++i) {
17347 #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?}}
17348     for (int i = 0; i < 10; ++i)
17349       ;
17350   }
17351 #pragma omp target teams distribute parallel for
17352   for (int i = 0; i < 10; ++i) {
17353 #pragma omp simd // OK
17354     for (int i = 0; i < 10; ++i)
17355       ;
17356   }
17357 #pragma omp target teams distribute parallel for
17358   for (int i = 0; i < 10; ++i) {
17359 #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?}}
17360     for (int i = 0; i < 10; ++i)
17361       ;
17362   }
17363 #pragma omp target teams distribute parallel for
17364   for (int i = 0; i < 10; ++i) {
17365 #pragma omp parallel // OK
17366     for (int i = 0; i < 10; ++i)
17367       ;
17368   }
17369 #pragma omp target teams distribute parallel for
17370   for (int i = 0; i < 10; ++i) {
17371 #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?}}
17372     {
17373       bar();
17374     }
17375   }
17376 #pragma omp target teams distribute parallel for
17377   for (int i = 0; i < 10; ++i) {
17378 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
17379     {
17380       bar();
17381     }
17382   }
17383 #pragma omp target teams distribute parallel for
17384   for (int i = 0; i < 10; ++i) {
17385 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17386     {
17387       bar();
17388     }
17389   }
17390 #pragma omp target teams distribute parallel for
17391   for (int i = 0; i < 10; ++i) {
17392 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17393     {
17394       bar();
17395     }
17396   }
17397 #pragma omp target teams distribute parallel for
17398   for (int i = 0; i < 10; ++i) {
17399 #pragma omp critical // OK
17400     {
17401       bar();
17402     }
17403   }
17404 #pragma omp target teams distribute parallel for
17405   for (int i = 0; i < 10; ++i) {
17406 #pragma omp parallel // OK
17407     {
17408 #pragma omp single
17409       {
17410         bar();
17411       }
17412     }
17413   }
17414 #pragma omp target teams distribute parallel for
17415   for (int i = 0; i < 10; ++i) {
17416 #pragma omp parallel for // OK
17417     for (int i = 0; i < 10; ++i)
17418       ;
17419   }
17420 #pragma omp target teams distribute parallel for
17421   for (int i = 0; i < 10; ++i) {
17422 #pragma omp parallel for simd // OK
17423     for (int i = 0; i < 10; ++i)
17424       ;
17425   }
17426 #pragma omp target teams distribute parallel for
17427   for (int i = 0; i < 10; ++i) {
17428 #pragma omp parallel sections // OK
17429     {
17430       bar();
17431     }
17432   }
17433 #pragma omp target teams distribute parallel for
17434   for (int i = 0; i < 10; ++i) {
17435 #pragma omp task // OK
17436     {
17437       bar();
17438     }
17439   }
17440 #pragma omp target teams distribute parallel for
17441   for (int i = 0; i < 10; ++i) {
17442 #pragma omp taskyield // OK
17443     bar();
17444   }
17445 #pragma omp target teams distribute parallel for
17446   for (int i = 0; i < 10; ++i) {
17447 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17448     bar();
17449   }
17450 #pragma omp target teams distribute parallel for
17451   for (int i = 0; i < 10; ++i) {
17452 #pragma omp taskwait // OK
17453     bar();
17454   }
17455 #pragma omp target teams distribute parallel for
17456   for (int i = 0; i < 10; ++i) {
17457 #pragma omp flush // OK
17458     bar();
17459   }
17460 #pragma omp target teams distribute parallel for
17461   for (int i = 0; i < 10; ++i) {
17462 #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?}}
17463     bar();
17464   }
17465 #pragma omp target teams distribute parallel for
17466   for (int i = 0; i < 10; ++i) {
17467 #pragma omp atomic // OK
17468     ++a;
17469   }
17470 #pragma omp target teams distribute parallel for
17471   for (int i = 0; i < 10; ++i) {
17472 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17473     ++a;
17474   }
17475 #pragma omp target teams distribute parallel for
17476   for (int i = 0; i < 10; ++i) {
17477 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17478     ++a;
17479   }
17480 #pragma omp target teams distribute parallel for
17481   for (int i = 0; i < 10; ++i) {
17482 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17483     for (int i = 0; i < 10; ++i)
17484       ;
17485   }
17486 #pragma omp target teams distribute parallel for
17487   for (int i = 0; i < 10; ++i) {
17488 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17489     ++a;
17490   }
17491 #pragma omp target teams distribute parallel for
17492   for (int i = 0; i < 10; ++i) {
17493 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17494     ++a;
17495   }
17496 #pragma omp target teams distribute parallel for
17497   for (int i = 0; i < 10; ++i) {
17498 #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?}}
17499     ++a;
17500   }
17501 #pragma omp target teams distribute parallel for
17502   for (int i = 0; i < 10; ++i) {
17503 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17504     ++a;
17505   }
17506 #pragma omp target teams distribute parallel for
17507   for (int i = 0; i < 10; ++i) {
17508 #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?}}
17509     for (int i = 0; i < 10; ++i)
17510       ++a;
17511   }
17512 #pragma omp target teams distribute parallel for
17513   for (int i = 0; i < 10; ++i) {
17514 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17515     for (int i = 0; i < 10; ++i)
17516       ++a;
17517   }
17518 #pragma omp target teams distribute parallel for
17519   for (int i = 0; i < 10; ++i) {
17520 #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?}}
17521     for (int i = 0; i < 10; ++i)
17522       ++a;
17523   }
17524 #pragma omp target teams distribute parallel for
17525   for (int i = 0; i < 10; ++i) {
17526 #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?}}
17527     for (int i = 0; i < 10; ++i)
17528       ++a;
17529   }
17530 #pragma omp target teams distribute parallel for
17531   for (int i = 0; i < 10; ++i) {
17532 #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?}}
17533     for (int i = 0; i < 10; ++i)
17534       ++a;
17535   }
17536 #pragma omp target teams distribute parallel for
17537   for (int i = 0; i < 10; ++i) {
17538 #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?}}
17539     for (int i = 0; i < 10; ++i)
17540       ++a;
17541   }
17542 #pragma omp target teams distribute parallel for
17543   for (int i = 0; i < 10; ++i) {
17544 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17545     ++a;
17546   }
17547 #pragma omp target teams distribute parallel for
17548   for (int i = 0; i < 10; ++i) {
17549 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17550     for (int i = 0; i < 10; ++i)
17551       ++a;
17552   }
17553 #pragma omp target teams distribute parallel for
17554   for (int i = 0; i < 10; ++i) {
17555 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17556     for (int i = 0; i < 10; ++i)
17557       ++a;
17558   }
17559 #pragma omp target teams distribute parallel for
17560   for (int i = 0; i < 10; ++i) {
17561 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17562     for (int i = 0; i < 10; ++i)
17563       ++a;
17564   }
17565 #pragma omp target teams distribute parallel for
17566   for (int i = 0; i < 10; ++i) {
17567 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17568     for (int i = 0; i < 10; ++i)
17569       ++a;
17570   }
17571 
17572 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
17573 #pragma omp target teams distribute parallel for simd // OK
17574   for (int i = 0; i < 10; ++i)
17575     ;
17576 #pragma omp target teams distribute parallel for simd
17577   for (int i = 0; i < 10; ++i) {
17578 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17579     for (int i = 0; i < 10; ++i)
17580       ;
17581   }
17582 #pragma omp target teams distribute parallel for simd
17583   for (int i = 0; i < 10; ++i) {
17584 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17585     for (int i = 0; i < 10; ++i)
17586       ;
17587   }
17588 #pragma omp target teams distribute parallel for simd
17589   for (int i = 0; i < 10; ++i) {
17590 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17591     for (int i = 0; i < 10; ++i)
17592       ;
17593   }
17594 #pragma omp target teams distribute parallel for simd
17595   for (int i = 0; i < 10; ++i) {
17596 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17597     for (int i = 0; i < 10; ++i)
17598       ;
17599   }
17600 #pragma omp target teams distribute parallel for simd
17601   for (int i = 0; i < 10; ++i) {
17602 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17603     for (int i = 0; i < 10; ++i)
17604       ;
17605   }
17606 #pragma omp target teams distribute parallel for simd
17607   for (int i = 0; i < 10; ++i) {
17608 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17609     for (int i = 0; i < 10; ++i)
17610       ;
17611   }
17612 #pragma omp target teams distribute parallel for simd
17613   for (int i = 0; i < 10; ++i) {
17614 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17615     {
17616       bar();
17617     }
17618   }
17619 #pragma omp target teams distribute parallel for simd
17620   for (int i = 0; i < 10; ++i) {
17621 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17622     {
17623       bar();
17624     }
17625   }
17626 #pragma omp target teams distribute parallel for simd
17627   for (int i = 0; i < 10; ++i) {
17628 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17629     {
17630       bar();
17631     }
17632   }
17633 #pragma omp target teams distribute parallel for simd
17634   for (int i = 0; i < 10; ++i) {
17635 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17636     {
17637       bar();
17638     }
17639   }
17640 #pragma omp target teams distribute parallel for simd
17641   for (int i = 0; i < 10; ++i) {
17642 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17643     {
17644       bar();
17645     }
17646   }
17647 #pragma omp target teams distribute parallel for simd
17648   for (int i = 0; i < 10; ++i) {
17649 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17650     {
17651 #pragma omp single
17652       {
17653         bar();
17654       }
17655     }
17656   }
17657 #pragma omp target teams distribute parallel for simd
17658   for (int i = 0; i < 10; ++i) {
17659 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17660     for (int i = 0; i < 10; ++i)
17661       ;
17662   }
17663 #pragma omp target teams distribute parallel for simd
17664   for (int i = 0; i < 10; ++i) {
17665 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17666     for (int i = 0; i < 10; ++i)
17667       ;
17668   }
17669 #pragma omp target teams distribute parallel for simd
17670   for (int i = 0; i < 10; ++i) {
17671 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17672     {
17673       bar();
17674     }
17675   }
17676 #pragma omp target teams distribute parallel for simd
17677   for (int i = 0; i < 10; ++i) {
17678 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17679     {
17680       bar();
17681     }
17682   }
17683 #pragma omp target teams distribute parallel for simd
17684   for (int i = 0; i < 10; ++i) {
17685 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17686     bar();
17687   }
17688 #pragma omp target teams distribute parallel for simd
17689   for (int i = 0; i < 10; ++i) {
17690 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17691     bar();
17692   }
17693 #pragma omp target teams distribute parallel for simd
17694   for (int i = 0; i < 10; ++i) {
17695 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17696     bar();
17697   }
17698 #pragma omp target teams distribute parallel for simd
17699   for (int i = 0; i < 10; ++i) {
17700 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17701     bar();
17702   }
17703 #pragma omp target teams distribute parallel for simd
17704   for (int i = 0; i < 10; ++i) {
17705 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17706     bar();
17707   }
17708 #pragma omp target teams distribute parallel for simd
17709   for (int i = 0; i < 10; ++i) {
17710 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK
17711     ++a;
17712   }
17713 #pragma omp target teams distribute parallel for simd
17714   for (int i = 0; i < 10; ++i) {
17715 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17716     ++a;
17717   }
17718 #pragma omp target teams distribute parallel for simd
17719   for (int i = 0; i < 10; ++i) {
17720 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17721     ++a;
17722   }
17723 #pragma omp target teams distribute parallel for simd
17724   for (int i = 0; i < 10; ++i) {
17725 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17726     for (int i = 0; i < 10; ++i)
17727       ;
17728   }
17729 #pragma omp target teams distribute parallel for simd
17730   for (int i = 0; i < 10; ++i) {
17731 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17732     ++a;
17733   }
17734 #pragma omp target teams distribute parallel for simd
17735   for (int i = 0; i < 10; ++i) {
17736 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17737     ++a;
17738   }
17739 #pragma omp target teams distribute parallel for simd
17740   for (int i = 0; i < 10; ++i) {
17741 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17742     ++a;
17743   }
17744 #pragma omp target teams distribute parallel for simd
17745   for (int i = 0; i < 10; ++i) {
17746 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17747     ++a;
17748   }
17749 #pragma omp target teams distribute parallel for simd
17750   for (int i = 0; i < 10; ++i) {
17751 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17752     for (int i = 0; i < 10; ++i)
17753       ++a;
17754   }
17755 #pragma omp target teams distribute parallel for simd
17756   for (int i = 0; i < 10; ++i) {
17757 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17758     for (int i = 0; i < 10; ++i)
17759       ++a;
17760   }
17761 #pragma omp target teams distribute parallel for simd
17762   for (int i = 0; i < 10; ++i) {
17763 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17764     for (int i = 0; i < 10; ++i)
17765       ++a;
17766   }
17767 #pragma omp target teams distribute parallel for simd
17768   for (int i = 0; i < 10; ++i) {
17769 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17770     for (int i = 0; i < 10; ++i)
17771       ++a;
17772   }
17773 #pragma omp target teams distribute parallel for simd
17774   for (int i = 0; i < 10; ++i) {
17775 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17776     for (int i = 0; i < 10; ++i)
17777       ++a;
17778   }
17779 #pragma omp target teams distribute parallel for simd
17780   for (int i = 0; i < 10; ++i) {
17781 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17782     for (int i = 0; i < 10; ++i)
17783       ;
17784   }
17785 #pragma omp target teams distribute parallel for simd
17786   for (int i = 0; i < 10; ++i) {
17787 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17788     a++;
17789   }
17790 #pragma omp target teams distribute parallel for simd
17791   for (int i = 0; i < 10; ++i) {
17792 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17793     for (int i = 0; i < 10; ++i)
17794       ;
17795   }
17796 #pragma omp target teams distribute parallel for simd
17797   for (int i = 0; i < 10; ++i) {
17798 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17799     for (int i = 0; i < 10; ++i)
17800       ;
17801   }
17802 #pragma omp target teams distribute parallel for simd
17803   for (int i = 0; i < 10; ++i) {
17804 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17805     for (int i = 0; i < 10; ++i)
17806       ;
17807   }
17808 #pragma omp target teams distribute parallel for simd
17809   for (int i = 0; i < 10; ++i) {
17810 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17811     for (int i = 0; i < 10; ++i)
17812       ;
17813   }
17814 
17815 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
17816 #pragma omp target teams distribute simd // OK
17817   for (int i = 0; i < 10; ++i)
17818     ;
17819 #pragma omp target teams distribute simd
17820   for (int i = 0; i < 10; ++i) {
17821 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17822     for (int i = 0; i < 10; ++i)
17823       ;
17824   }
17825 #pragma omp target teams distribute simd
17826   for (int i = 0; i < 10; ++i) {
17827 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17828     for (int i = 0; i < 10; ++i)
17829       ;
17830   }
17831 #pragma omp target teams distribute simd
17832   for (int i = 0; i < 10; ++i) {
17833 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17834     for (int i = 0; i < 10; ++i)
17835       ;
17836   }
17837 #pragma omp target teams distribute simd
17838   for (int i = 0; i < 10; ++i) {
17839 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17840     for (int i = 0; i < 10; ++i)
17841       ;
17842   }
17843 #pragma omp target teams distribute simd
17844   for (int i = 0; i < 10; ++i) {
17845 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17846     for (int i = 0; i < 10; ++i)
17847       ;
17848   }
17849 #pragma omp target teams distribute simd
17850   for (int i = 0; i < 10; ++i) {
17851 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17852     for (int i = 0; i < 10; ++i)
17853       ;
17854   }
17855 #pragma omp target teams distribute simd
17856   for (int i = 0; i < 10; ++i) {
17857 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17858     {
17859       bar();
17860     }
17861   }
17862 #pragma omp target teams distribute simd
17863   for (int i = 0; i < 10; ++i) {
17864 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17865     {
17866       bar();
17867     }
17868   }
17869 #pragma omp target teams distribute simd
17870   for (int i = 0; i < 10; ++i) {
17871 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17872     {
17873       bar();
17874     }
17875   }
17876 #pragma omp target teams distribute simd
17877   for (int i = 0; i < 10; ++i) {
17878 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17879     {
17880       bar();
17881     }
17882   }
17883 #pragma omp target teams distribute simd
17884   for (int i = 0; i < 10; ++i) {
17885 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17886     {
17887       bar();
17888     }
17889   }
17890 #pragma omp target teams distribute simd
17891   for (int i = 0; i < 10; ++i) {
17892 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17893     {
17894 #pragma omp single
17895       {
17896         bar();
17897       }
17898     }
17899   }
17900 #pragma omp target teams distribute simd
17901   for (int i = 0; i < 10; ++i) {
17902 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17903     for (int i = 0; i < 10; ++i)
17904       ;
17905   }
17906 #pragma omp target teams distribute simd
17907   for (int i = 0; i < 10; ++i) {
17908 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17909     for (int i = 0; i < 10; ++i)
17910       ;
17911   }
17912 #pragma omp target teams distribute simd
17913   for (int i = 0; i < 10; ++i) {
17914 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17915     {
17916       bar();
17917     }
17918   }
17919 #pragma omp target teams distribute simd
17920   for (int i = 0; i < 10; ++i) {
17921 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17922     {
17923       bar();
17924     }
17925   }
17926 #pragma omp target teams distribute simd
17927   for (int i = 0; i < 10; ++i) {
17928 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17929     bar();
17930   }
17931 #pragma omp target teams distribute simd
17932   for (int i = 0; i < 10; ++i) {
17933 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17934     bar();
17935   }
17936 #pragma omp target teams distribute simd
17937   for (int i = 0; i < 10; ++i) {
17938 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17939     bar();
17940   }
17941 #pragma omp target teams distribute simd
17942   for (int i = 0; i < 10; ++i) {
17943 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17944     bar();
17945   }
17946 #pragma omp target teams distribute simd
17947   for (int i = 0; i < 10; ++i) {
17948 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17949     bar();
17950   }
17951 #pragma omp target teams distribute simd
17952   for (int i = 0; i < 10; ++i) {
17953 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}OK
17954     ++a;
17955   }
17956 #pragma omp target teams distribute simd
17957   for (int i = 0; i < 10; ++i) {
17958 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17959     ++a;
17960   }
17961 #pragma omp target teams distribute simd
17962   for (int i = 0; i < 10; ++i) {
17963 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17964     ++a;
17965   }
17966 #pragma omp target teams distribute simd
17967   for (int i = 0; i < 10; ++i) {
17968 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17969     for (int i = 0; i < 10; ++i)
17970       ;
17971   }
17972 #pragma omp target teams distribute simd
17973   for (int i = 0; i < 10; ++i) {
17974 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17975     ++a;
17976   }
17977 #pragma omp target teams distribute simd
17978   for (int i = 0; i < 10; ++i) {
17979 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17980     ++a;
17981   }
17982 #pragma omp target teams distribute simd
17983   for (int i = 0; i < 10; ++i) {
17984 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17985     ++a;
17986   }
17987 #pragma omp target teams distribute simd
17988   for (int i = 0; i < 10; ++i) {
17989 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17990     ++a;
17991   }
17992 #pragma omp target teams distribute simd
17993   for (int i = 0; i < 10; ++i) {
17994 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17995     for (int i = 0; i < 10; ++i)
17996       ++a;
17997   }
17998 #pragma omp target teams distribute simd
17999   for (int i = 0; i < 10; ++i) {
18000 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18001     for (int i = 0; i < 10; ++i)
18002       ++a;
18003   }
18004 #pragma omp target teams distribute simd
18005   for (int i = 0; i < 10; ++i) {
18006 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18007     for (int i = 0; i < 10; ++i)
18008       ++a;
18009   }
18010 #pragma omp target teams distribute simd
18011   for (int i = 0; i < 10; ++i) {
18012 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18013     for (int i = 0; i < 10; ++i)
18014       ++a;
18015   }
18016 #pragma omp target teams distribute simd
18017   for (int i = 0; i < 10; ++i) {
18018 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18019     for (int i = 0; i < 10; ++i)
18020       ++a;
18021   }
18022 #pragma omp target teams distribute simd
18023   for (int i = 0; i < 10; ++i) {
18024 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18025     for (int i = 0; i < 10; ++i)
18026       ;
18027   }
18028 #pragma omp target teams distribute simd
18029   for (int i = 0; i < 10; ++i) {
18030 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18031     a++;
18032   }
18033 #pragma omp target teams distribute simd
18034   for (int i = 0; i < 10; ++i) {
18035 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18036     for (int i = 0; i < 10; ++i)
18037       ;
18038   }
18039 #pragma omp target teams distribute simd
18040   for (int i = 0; i < 10; ++i) {
18041 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18042     for (int i = 0; i < 10; ++i)
18043       ;
18044   }
18045 #pragma omp target teams distribute simd
18046   for (int i = 0; i < 10; ++i) {
18047 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18048     for (int i = 0; i < 10; ++i)
18049       ;
18050   }
18051 #pragma omp target teams distribute simd
18052   for (int i = 0; i < 10; ++i) {
18053 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18054     for (int i = 0; i < 10; ++i)
18055       ;
18056   }
18057 
18058   return foo<int>();
18059 }
18060 
18061