1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45,omp45warn %s
2 // RUN: %clang_cc1 -fsyntax-only -fopenmp -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 -verify=expected,omp50 %s
8 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
9 
10 void bar();
11 
12 template <class T>
foo()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 scan // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
88     bar();
89   }
90 #pragma omp parallel
91   {
92 #pragma omp taskwait
93     bar();
94   }
95 #pragma omp parallel
96   {
97 #pragma omp flush
98     bar();
99   }
100 #pragma omp parallel
101   {
102 #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?}}
103     bar();
104   }
105 #pragma omp parallel
106   {
107 #pragma omp atomic
108     ++a;
109   }
110 #pragma omp parallel
111   {
112 #pragma omp target
113     ++a;
114   }
115 #pragma omp parallel
116   {
117 #pragma omp target parallel
118     ++a;
119   }
120 #pragma omp parallel
121   {
122 #pragma omp target parallel for
123   for (int i = 0; i < 10; ++i)
124     ;
125   }
126 #pragma omp parallel
127   {
128 #pragma omp target enter data map(to: a)
129     ++a;
130   }
131 #pragma omp parallel
132   {
133 #pragma omp target exit data map(from: a)
134     ++a;
135   }
136 #pragma omp parallel
137   {
138 #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?}}
139     ++a;
140   }
141 #pragma omp parallel
142   {
143 #pragma omp taskloop
144   for (int i = 0; i < 10; ++i)
145     ++a;
146   }
147 #pragma omp parallel
148   {
149 #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?}}
150     for (int i = 0; i < 10; ++i)
151       ;
152   }
153 #pragma omp parallel
154   {
155 #pragma omp target update to(a)
156   }
157 #pragma omp parallel
158   {
159 #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?}}
160     for (int i = 0; i < 10; ++i)
161       ;
162   }
163 #pragma omp parallel
164   {
165 #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?}}
166     for (int i = 0; i < 10; ++i)
167       ;
168   }
169 #pragma omp parallel
170   {
171 #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?}}
172     for (int i = 0; i < 10; ++i)
173       ;
174   }
175 #pragma omp parallel
176   {
177 #pragma omp target simd // OK
178     for (int i = 0; i < 10; ++i)
179       ;
180   }
181 #pragma omp parallel
182   {
183 #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?}}
184     for (int i = 0; i < 10; ++i)
185       ;
186   }
187 #pragma omp parallel
188   {
189 #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?}}
190     for (int i = 0; i < 10; ++i)
191       ;
192   }
193 #pragma omp parallel
194   {
195 #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?}}
196     for (int i = 0; i < 10; ++i)
197       ;
198   }
199 #pragma omp parallel
200   {
201 #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?}}
202     for (int i = 0; i < 10; ++i)
203       ;
204   }
205 #pragma omp parallel
206   {
207 #pragma omp target teams // OK
208     ++a;
209   }
210 #pragma omp parallel
211   {
212 #pragma omp target teams distribute // OK
213     for (int i = 0; i < 10; ++i)
214       ;
215   }
216 #pragma omp parallel
217   {
218 #pragma omp target teams distribute parallel for // OK
219     for (int i = 0; i < 10; ++i)
220       ;
221   }
222 #pragma omp parallel
223   {
224 #pragma omp target teams distribute parallel for simd // OK
225     for (int i = 0; i < 10; ++i)
226       ;
227   }
228 #pragma omp parallel
229   {
230 #pragma omp target teams distribute simd // OK
231     for (int i = 0; i < 10; ++i)
232       ;
233   }
234 
235 // SIMD DIRECTIVE
236 #pragma omp simd
237   for (int i = 0; i < 10; ++i) {
238 #pragma omp for // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{OpenMP constructs may not be nested inside a simd region except for ordered simd, simd, scan, or atomic directive}}
239     for (int i = 0; i < 10; ++i)
240       ;
241   }
242 #pragma omp simd
243   for (int i = 0; i < 10; ++i) {
244 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
245     for (int i = 0; i < 10; ++i)
246       ;
247   }
248 #pragma omp simd
249   for (int i = 0; i < 10; ++i) {
250 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
251     for (int i = 0; i < 10; ++i)
252       ;
253   }
254 #pragma omp simd
255   for (int i = 0; i < 10; ++i) {
256 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
257     for (int i = 0; i < 10; ++i)
258       ;
259   }
260 #pragma omp simd
261   for (int i = 0; i < 10; ++i) {
262 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
263     {
264       bar();
265     }
266   }
267 #pragma omp simd
268   for (int i = 0; i < 10; ++i) {
269 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
270     {
271       bar();
272     }
273   }
274 #pragma omp simd
275   for (int i = 0; i < 10; ++i) {
276 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
277     {
278       bar();
279     }
280   }
281 #pragma omp simd
282   for (int i = 0; i < 10; ++i) {
283 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
284     {
285       bar();
286     }
287   }
288 #pragma omp simd
289   for (int i = 0; i < 10; ++i) {
290 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
291     {
292       bar();
293     }
294   }
295 #pragma omp simd
296   for (int i = 0; i < 10; ++i) {
297 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
298     for (int i = 0; i < 10; ++i)
299       ;
300   }
301 #pragma omp simd
302   for (int i = 0; i < 10; ++i) {
303 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
304     for (int i = 0; i < 10; ++i)
305       ;
306   }
307 #pragma omp simd
308   for (int i = 0; i < 10; ++i) {
309 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
310     {
311       bar();
312     }
313   }
314 #pragma omp simd
315   for (int i = 0; i < 10; ++i) {
316 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
317     {
318       bar();
319     }
320   }
321 #pragma omp simd
322   for (int i = 0; i < 10; ++i) {
323 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
324     {
325       bar();
326     }
327   }
328 #pragma omp simd
329   for (int i = 0; i < 10; ++i) {
330 #pragma omp taskyield // 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 barrier // 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 scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
341     bar();
342   }
343 #pragma omp simd
344   for (int i = 0; i < 10; ++i) {
345 #pragma omp taskwait // 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 flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
351     bar();
352   }
353 #pragma omp simd
354   for (int i = 0; i < 10; ++i) {
355 #pragma omp ordered // 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 ordered simd // OK
361     bar();
362   }
363 #pragma omp simd
364   for (int i = 0; i < 10; ++i) {
365 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
366     bar();
367   }
368 #pragma omp simd
369   for (int i = 0; i < 10; ++i) {
370 #pragma omp atomic // omp45-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 // expected-error {{OpenMP constructs may not be nested inside a simd region}}
376     ++a;
377   }
378 #pragma omp simd
379   for (int i = 0; i < 10; ++i) {
380 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
381     ++a;
382   }
383 #pragma omp simd
384   for (int i = 0; i < 10; ++i) {
385 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
386     for (int i = 0; i < 10; ++i)
387       ;
388   }
389 #pragma omp simd
390   for (int i = 0; i < 10; ++i) {
391 #pragma omp target enter data map(to: a) // 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 target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
397     ++a;
398   }
399 #pragma omp simd
400   for (int i = 0; i < 10; ++i) {
401 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
402     ++a;
403   }
404 #pragma omp simd
405   for (int i = 0; i < 10; ++i) {
406 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
407   for (int i = 0; i < 10; ++i)
408     ++a;
409   }
410 #pragma omp simd
411   for (int i = 0; i < 10; ++i) {
412 #pragma omp distribute // 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 target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
419   }
420 #pragma omp simd
421   for (int i = 0; i < 10; ++i) {
422 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
423     for (int j = 0; j < 10; ++j)
424       ;
425   }
426 #pragma omp simd
427   for (int i = 0; i < 10; ++i) {
428 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
429     for (int j = 0; j < 10; ++j)
430       ;
431   }
432 #pragma omp simd
433   for (int i = 0; i < 10; ++i) {
434 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
435     for (int j = 0; j < 10; ++j)
436       ;
437   }
438 #pragma omp simd
439   for (int i = 0; i < 10; ++i) {
440 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
441     for (int j = 0; j < 10; ++j)
442       ;
443   }
444 #pragma omp simd
445   for (int i = 0; i < 10; ++i) {
446 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
447     for (int j = 0; j < 10; ++j)
448       ;
449   }
450 #pragma omp simd
451   for (int i = 0; i < 10; ++i) {
452 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
453     for (int j = 0; j < 10; ++j)
454       ;
455   }
456 #pragma omp simd
457   for (int i = 0; i < 10; ++i) {
458 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
459     for (int j = 0; j < 10; ++j)
460       ;
461   }
462 #pragma omp simd
463   for (int i = 0; i < 10; ++i) {
464 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
465     for (int j = 0; j < 10; ++j)
466       ;
467   }
468 #pragma omp simd
469   for (int i = 0; i < 10; ++i) {
470 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
471     ++a;
472   }
473 #pragma omp simd
474   for (int i = 0; i < 10; ++i) {
475 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
476     for (int j = 0; j < 10; ++j)
477       ;
478   }
479 #pragma omp simd
480   for (int i = 0; i < 10; ++i) {
481 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
482     for (int j = 0; j < 10; ++j)
483       ;
484   }
485 #pragma omp simd
486   for (int i = 0; i < 10; ++i) {
487 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
488     for (int j = 0; j < 10; ++j)
489       ;
490   }
491 #pragma omp simd
492   for (int i = 0; i < 10; ++i) {
493 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
494     for (int j = 0; j < 10; ++j)
495       ;
496   }
497 
498 // FOR DIRECTIVE
499 #pragma omp for
500   for (int i = 0; i < 10; ++i) {
501 #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?}}
502     for (int i = 0; i < 10; ++i)
503       ;
504   }
505 #pragma omp for
506   for (int i = 0; i < 10; ++i) {
507 #pragma omp simd
508     for (int i = 0; i < 10; ++i)
509       ;
510   }
511 #pragma omp for
512   for (int i = 0; i < 10; ++i) {
513 #pragma omp 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?}}
514     for (int i = 0; i < 10; ++i)
515       ;
516   }
517 #pragma omp for
518   for (int i = 0; i < 10; ++i) {
519 #pragma omp parallel
520     for (int i = 0; i < 10; ++i)
521       ;
522   }
523 #pragma omp for
524   for (int i = 0; i < 10; ++i) {
525 #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?}}
526     {
527       bar();
528     }
529   }
530 #pragma omp for
531   for (int i = 0; i < 10; ++i) {
532 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
533     {
534       bar();
535     }
536   }
537 #pragma omp for
538   for (int i = 0; i < 10; ++i) {
539 #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?}}
540     {
541       bar();
542     }
543   }
544 
545 #pragma omp for
546   for (int i = 0; i < 10; ++i) {
547 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
548     {
549       bar();
550     }
551   }
552 #pragma omp for
553   for (int i = 0; i < 10; ++i) {
554 #pragma omp critical
555     {
556       bar();
557     }
558   }
559 #pragma omp for
560   for (int i = 0; i < 10; ++i) {
561 #pragma omp parallel
562     {
563 #pragma omp single // OK
564       {
565         bar();
566       }
567 #pragma omp for // OK
568       for (int i = 0; i < 10; ++i)
569         ;
570 #pragma omp sections // OK
571       {
572         bar();
573       }
574     }
575   }
576 #pragma omp for
577   for (int i = 0; i < 10; ++i) {
578 #pragma omp parallel for
579     for (int i = 0; i < 10; ++i)
580       ;
581   }
582 #pragma omp for
583   for (int i = 0; i < 10; ++i) {
584 #pragma omp parallel for simd
585     for (int i = 0; i < 10; ++i)
586       ;
587   }
588 #pragma omp for
589   for (int i = 0; i < 10; ++i) {
590 #pragma omp parallel master
591     {
592       bar();
593     }
594   }
595 #pragma omp for
596   for (int i = 0; i < 10; ++i) {
597 #pragma omp parallel sections
598     {
599       bar();
600     }
601   }
602 #pragma omp for
603   for (int i = 0; i < 10; ++i) {
604 #pragma omp task
605     {
606       bar();
607     }
608   }
609 #pragma omp for
610   for (int i = 0; i < 10; ++i) {
611 #pragma omp taskyield
612     bar();
613   }
614 #pragma omp for
615   for (int i = 0; i < 10; ++i) {
616 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
617     bar();
618   }
619 #pragma omp for
620   for (int i = 0; i < 10; ++i) {
621 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
622     bar();
623   }
624 #pragma omp for
625   for (int i = 0; i < 10; ++i) {
626 #pragma omp taskwait
627     bar();
628   }
629 #pragma omp for
630   for (int i = 0; i < 10; ++i) {
631 #pragma omp flush
632     bar();
633   }
634 #pragma omp for
635   for (int i = 0; i < 10; ++i) {
636 #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?}}
637     bar();
638   }
639 #pragma omp for ordered
640   for (int i = 0; i < 10; ++i) {
641 #pragma omp ordered // OK
642     bar();
643   }
644 #pragma omp for
645   for (int i = 0; i < 10; ++i) {
646 #pragma omp atomic
647     ++a;
648   }
649 #pragma omp for
650   for (int i = 0; i < 10; ++i) {
651 #pragma omp target
652     ++a;
653   }
654 #pragma omp for
655   for (int i = 0; i < 10; ++i) {
656 #pragma omp target parallel
657     ++a;
658   }
659 #pragma omp for
660   for (int i = 0; i < 10; ++i) {
661 #pragma omp target parallel for
662     for (int i = 0; i < 10; ++i)
663       ;
664   }
665 #pragma omp for
666   for (int i = 0; i < 10; ++i) {
667 #pragma omp target enter data map(to: a)
668     ++a;
669   }
670 #pragma omp for
671   for (int i = 0; i < 10; ++i) {
672 #pragma omp target exit data map(from: a)
673     ++a;
674   }
675 #pragma omp for
676   for (int i = 0; i < 10; ++i) {
677 #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?}}
678     ++a;
679   }
680 #pragma omp for
681   for (int i = 0; i < 10; ++i) {
682 #pragma omp taskloop
683   for (int i = 0; i < 10; ++i)
684     ++a;
685   }
686 #pragma omp for
687   for (int i = 0; i < 10; ++i) {
688 #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?}}
689     for (int j = 0; j < 10; ++j)
690       ;
691   }
692 #pragma omp for
693   for (int i = 0; i < 10; ++i) {
694 #pragma omp target update to(a)
695   }
696 #pragma omp for
697   for (int i = 0; i < 10; ++i) {
698 #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?}}
699     for (int j = 0; j < 10; ++j)
700       ;
701   }
702 #pragma omp for
703   for (int i = 0; i < 10; ++i) {
704 #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?}}
705     for (int j = 0; j < 10; ++j)
706       ;
707   }
708 #pragma omp for
709   for (int i = 0; i < 10; ++i) {
710 #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?}}
711     for (int j = 0; j < 10; ++j)
712       ;
713   }
714 #pragma omp for
715   for (int i = 0; i < 10; ++i) {
716 #pragma omp target simd // OK
717     for (int j = 0; j < 10; ++j)
718       ;
719   }
720 #pragma omp for
721   for (int i = 0; i < 10; ++i) {
722 #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?}}
723     for (int j = 0; j < 10; ++j)
724       ;
725   }
726 #pragma omp for
727   for (int i = 0; i < 10; ++i) {
728 #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?}}
729     for (int j = 0; j < 10; ++j)
730       ;
731   }
732 #pragma omp for
733   for (int i = 0; i < 10; ++i) {
734 #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?}}
735     for (int j = 0; j < 10; ++j)
736       ;
737   }
738 #pragma omp for
739   for (int i = 0; i < 10; ++i) {
740 #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?}}
741     for (int j = 0; j < 10; ++j)
742       ;
743   }
744 #pragma omp for
745   for (int i = 0; i < 10; ++i) {
746 #pragma omp target teams // OK
747     ++a;
748   }
749 #pragma omp for
750   for (int i = 0; i < 10; ++i) {
751 #pragma omp target teams distribute // OK
752     for (int j = 0; j < 10; ++j)
753       ;
754   }
755 #pragma omp for
756   for (int i = 0; i < 10; ++i) {
757 #pragma omp target teams distribute parallel for // OK
758     for (int j = 0; j < 10; ++j)
759       ;
760   }
761 #pragma omp for
762   for (int i = 0; i < 10; ++i) {
763 #pragma omp target teams distribute parallel for simd // OK
764     for (int j = 0; j < 10; ++j)
765       ;
766   }
767 #pragma omp for
768   for (int i = 0; i < 10; ++i) {
769 #pragma omp target teams distribute simd // OK
770     for (int j = 0; j < 10; ++j)
771       ;
772   }
773 
774 // FOR SIMD DIRECTIVE
775 #pragma omp for simd
776   for (int i = 0; i < 10; ++i) {
777 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
778     for (int i = 0; i < 10; ++i)
779       ;
780   }
781 #pragma omp for simd
782   for (int i = 0; i < 10; ++i) {
783 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
784     for (int i = 0; i < 10; ++i)
785       ;
786   }
787 #pragma omp for simd
788   for (int i = 0; i < 10; ++i) {
789 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
790     for (int i = 0; i < 10; ++i)
791       ;
792   }
793 #pragma omp for simd
794   for (int i = 0; i < 10; ++i) {
795 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
796     for (int i = 0; i < 10; ++i)
797       ;
798   }
799 #pragma omp for simd
800   for (int i = 0; i < 10; ++i) {
801 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
802     {
803       bar();
804     }
805   }
806 #pragma omp for simd
807   for (int i = 0; i < 10; ++i) {
808 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
809     {
810       bar();
811     }
812   }
813 #pragma omp for simd
814   for (int i = 0; i < 10; ++i) {
815 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
816     {
817       bar();
818     }
819   }
820 #pragma omp for simd
821   for (int i = 0; i < 10; ++i) {
822 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
823     {
824       bar();
825     }
826   }
827 #pragma omp for simd
828   for (int i = 0; i < 10; ++i) {
829 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
830     {
831       bar();
832     }
833   }
834 #pragma omp for simd
835   for (int i = 0; i < 10; ++i) {
836 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
837     for (int i = 0; i < 10; ++i)
838       ;
839   }
840 #pragma omp for simd
841   for (int i = 0; i < 10; ++i) {
842 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
843     for (int i = 0; i < 10; ++i)
844       ;
845   }
846 #pragma omp for simd
847   for (int i = 0; i < 10; ++i) {
848 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
849     {
850       bar();
851     }
852   }
853 #pragma omp for simd
854   for (int i = 0; i < 10; ++i) {
855 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
856     {
857       bar();
858     }
859   }
860 #pragma omp for simd
861   for (int i = 0; i < 10; ++i) {
862 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
863     {
864       bar();
865     }
866   }
867 #pragma omp for simd
868   for (int i = 0; i < 10; ++i) {
869 #pragma omp taskyield // 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 barrier // 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 scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
880     bar();
881   }
882 #pragma omp for simd
883   for (int i = 0; i < 10; ++i) {
884 #pragma omp taskwait // 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 flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
890     bar();
891   }
892 #pragma omp for simd
893   for (int i = 0; i < 10; ++i) {
894 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
895     bar();
896   }
897 #pragma omp for simd
898   for (int i = 0; i < 10; ++i) {
899 #pragma omp ordered simd // OK
900     bar();
901   }
902 #pragma omp for simd
903   for (int i = 0; i < 10; ++i) {
904 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
905     bar();
906   }
907 #pragma omp for simd
908   for (int i = 0; i < 10; ++i) {
909 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
910     ++a;
911   }
912 #pragma omp for simd
913   for (int i = 0; i < 10; ++i) {
914 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
915     ++a;
916   }
917 #pragma omp for simd
918   for (int i = 0; i < 10; ++i) {
919 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
920     ++a;
921   }
922 #pragma omp for simd
923   for (int i = 0; i < 10; ++i) {
924 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
925     for (int i = 0; i < 10; ++i)
926       ;
927   }
928 #pragma omp for simd
929   for (int i = 0; i < 10; ++i) {
930 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
931     ++a;
932   }
933 #pragma omp for simd
934   for (int i = 0; i < 10; ++i) {
935 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
936     ++a;
937   }
938 #pragma omp for simd
939   for (int i = 0; i < 10; ++i) {
940 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
941     ++a;
942   }
943 #pragma omp for simd
944   for (int i = 0; i < 10; ++i) {
945 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
946   for (int i = 0; i < 10; ++i)
947     ++a;
948   }
949 #pragma omp for simd
950   for (int i = 0; i < 10; ++i) {
951 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
952     for (int j = 0; j < 10; ++j)
953       ;
954   }
955 #pragma omp for simd
956   for (int i = 0; i < 10; ++i) {
957 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
958     bar();
959   }
960 #pragma omp for simd
961   for (int i = 0; i < 10; ++i) {
962 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
963     for (int j = 0; j < 10; ++j)
964       ;
965   }
966 #pragma omp for simd
967   for (int i = 0; i < 10; ++i) {
968 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
969     for (int j = 0; j < 10; ++j)
970       ;
971   }
972 #pragma omp for simd
973   for (int i = 0; i < 10; ++i) {
974 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
975     for (int j = 0; j < 10; ++j)
976       ;
977   }
978 #pragma omp for simd
979   for (int i = 0; i < 10; ++i) {
980 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
981     for (int j = 0; j < 10; ++j)
982       ;
983   }
984 #pragma omp for simd
985   for (int i = 0; i < 10; ++i) {
986 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
987     for (int j = 0; j < 10; ++j)
988       ;
989   }
990 #pragma omp for simd
991   for (int i = 0; i < 10; ++i) {
992 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
993     for (int j = 0; j < 10; ++j)
994       ;
995   }
996 #pragma omp for simd
997   for (int i = 0; i < 10; ++i) {
998 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
999     for (int j = 0; j < 10; ++j)
1000       ;
1001   }
1002 #pragma omp for simd
1003   for (int i = 0; i < 10; ++i) {
1004 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1005     for (int j = 0; j < 10; ++j)
1006       ;
1007   }
1008 #pragma omp for simd
1009   for (int i = 0; i < 10; ++i) {
1010 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1011     a++;
1012   }
1013 #pragma omp for simd
1014   for (int i = 0; i < 10; ++i) {
1015 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1016     for (int j = 0; j < 10; ++j)
1017       ;
1018   }
1019 #pragma omp for simd
1020   for (int i = 0; i < 10; ++i) {
1021 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1022     for (int j = 0; j < 10; ++j)
1023       ;
1024   }
1025 #pragma omp for simd
1026   for (int i = 0; i < 10; ++i) {
1027 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1028     for (int j = 0; j < 10; ++j)
1029       ;
1030   }
1031 #pragma omp for simd
1032   for (int i = 0; i < 10; ++i) {
1033 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1034     for (int j = 0; j < 10; ++j)
1035       ;
1036   }
1037 
1038 // SECTIONS DIRECTIVE
1039 #pragma omp sections
1040   {
1041 #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?}}
1042     for (int i = 0; i < 10; ++i)
1043       ;
1044   }
1045 #pragma omp sections
1046   {
1047 #pragma omp simd
1048     for (int i = 0; i < 10; ++i)
1049       ;
1050   }
1051 #pragma omp sections
1052   {
1053 #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?}}
1054     for (int i = 0; i < 10; ++i)
1055       ;
1056   }
1057 #pragma omp sections
1058   {
1059 #pragma omp parallel
1060     for (int i = 0; i < 10; ++i)
1061       ;
1062   }
1063 #pragma omp sections
1064   {
1065 #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?}}
1066     {
1067       bar();
1068     }
1069   }
1070 #pragma omp sections
1071   {
1072 #pragma omp section
1073     {
1074       bar();
1075     }
1076   }
1077 #pragma omp sections
1078   {
1079 #pragma omp parallel
1080     {
1081 #pragma omp single // OK
1082       {
1083         bar();
1084       }
1085 #pragma omp for // OK
1086       for (int i = 0; i < 10; ++i)
1087         ;
1088 #pragma omp sections // OK
1089       {
1090         bar();
1091       }
1092     }
1093   }
1094 #pragma omp sections
1095   {
1096 #pragma omp parallel master
1097     {
1098       bar();
1099     }
1100   }
1101 #pragma omp sections
1102   {
1103 #pragma omp parallel
1104     {
1105 #pragma omp master // OK
1106       {
1107         bar();
1108       }
1109 #pragma omp for // OK
1110       for (int i = 0; i < 10; ++i)
1111         ;
1112 #pragma omp master // OK
1113       {
1114         bar();
1115       }
1116     }
1117 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
1118     bar();
1119   }
1120 #pragma omp sections
1121   {
1122 #pragma omp parallel
1123     {
1124 #pragma omp critical(A) // OK
1125       {
1126         bar();
1127       }
1128 #pragma omp for // OK
1129       for (int i = 0; i < 10; ++i)
1130         ;
1131 #pragma omp critical // OK
1132       {
1133         bar();
1134       }
1135     }
1136 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
1137     bar();
1138   }
1139 #pragma omp sections
1140   {
1141 #pragma omp parallel for
1142     for (int i = 0; i < 10; ++i)
1143       ;
1144   }
1145 #pragma omp sections
1146   {
1147 #pragma omp parallel for simd
1148     for (int i = 0; i < 10; ++i)
1149       ;
1150   }
1151 #pragma omp sections
1152   {
1153 #pragma omp parallel sections
1154     {
1155       bar();
1156     }
1157   }
1158 #pragma omp sections
1159   {
1160 #pragma omp task
1161     {
1162       bar();
1163     }
1164   }
1165 #pragma omp sections
1166   {
1167 #pragma omp taskyield
1168   }
1169 #pragma omp sections
1170   {
1171 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1172   }
1173 #pragma omp sections
1174   {
1175 #pragma omp scan // expected-error {{region cannot be closely nested inside 'sections' region}}
1176   }
1177 #pragma omp sections
1178   {
1179 #pragma omp taskwait
1180   }
1181 #pragma omp sections
1182   {
1183 #pragma omp flush
1184   }
1185 #pragma omp sections
1186   {
1187 #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?}}
1188     bar();
1189   }
1190 #pragma omp sections
1191   {
1192 #pragma omp atomic
1193     ++a;
1194   }
1195 #pragma omp sections
1196   {
1197 #pragma omp target
1198     ++a;
1199   }
1200 #pragma omp sections
1201   {
1202 #pragma omp target parallel
1203     ++a;
1204   }
1205 #pragma omp sections
1206   {
1207 #pragma omp target parallel for
1208     for (int i = 0; i < 10; ++i)
1209       ;
1210   }
1211 #pragma omp sections
1212   {
1213 #pragma omp target enter data map(to: a)
1214   }
1215 #pragma omp sections
1216   {
1217 #pragma omp target exit data map(from: a)
1218   }
1219 #pragma omp sections
1220   {
1221 #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?}}
1222     ++a;
1223   }
1224 #pragma omp sections
1225   {
1226 #pragma omp taskloop
1227   for (int i = 0; i < 10; ++i)
1228     ++a;
1229   }
1230 #pragma omp sections
1231   {
1232 #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?}}
1233     for (int i = 0; i < 10; ++i)
1234       ;
1235   }
1236 #pragma omp sections
1237   {
1238 #pragma omp target update to(a)
1239   }
1240 #pragma omp sections
1241   {
1242 #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?}}
1243     for (int i = 0; i < 10; ++i)
1244       ;
1245   }
1246 #pragma omp sections
1247   {
1248 #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?}}
1249     for (int i = 0; i < 10; ++i)
1250       ;
1251   }
1252 #pragma omp sections
1253   {
1254 #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?}}
1255     for (int i = 0; i < 10; ++i)
1256       ;
1257   }
1258 #pragma omp sections
1259   {
1260 #pragma omp target simd // OK
1261     for (int i = 0; i < 10; ++i)
1262       ;
1263   }
1264 #pragma omp sections
1265   {
1266 #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?}}
1267     for (int i = 0; i < 10; ++i)
1268       ;
1269   }
1270 #pragma omp sections
1271   {
1272 #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?}}
1273     for (int i = 0; i < 10; ++i)
1274       ;
1275   }
1276 #pragma omp sections
1277   {
1278 #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?}}
1279     for (int i = 0; i < 10; ++i)
1280       ;
1281   }
1282 #pragma omp sections
1283   {
1284 #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?}}
1285     for (int i = 0; i < 10; ++i)
1286       ;
1287   }
1288 #pragma omp sections
1289   {
1290 #pragma omp target teams // OK
1291     ++a;
1292   }
1293 #pragma omp sections
1294   {
1295 #pragma omp target teams distribute // OK
1296     for (int i = 0; i < 10; ++i)
1297       ;
1298   }
1299 #pragma omp sections
1300   {
1301 #pragma omp target teams distribute parallel for // OK
1302     for (int i = 0; i < 10; ++i)
1303       ;
1304   }
1305 #pragma omp sections
1306   {
1307 #pragma omp target teams distribute parallel for simd // OK
1308     for (int i = 0; i < 10; ++i)
1309       ;
1310   }
1311 #pragma omp sections
1312   {
1313 #pragma omp target teams distribute simd // OK
1314     for (int i = 0; i < 10; ++i)
1315       ;
1316   }
1317 
1318 // SECTION DIRECTIVE
1319 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1320   {
1321     bar();
1322   }
1323 #pragma omp sections
1324   {
1325 #pragma omp section
1326     {
1327 #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?}}
1328       for (int i = 0; i < 10; ++i)
1329         ;
1330     }
1331   }
1332 #pragma omp sections
1333   {
1334 #pragma omp section
1335     {
1336 #pragma omp simd
1337       for (int i = 0; i < 10; ++i)
1338         ;
1339     }
1340   }
1341 #pragma omp sections
1342   {
1343 #pragma omp section
1344     {
1345 #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?}}
1346       for (int i = 0; i < 10; ++i)
1347         ;
1348     }
1349   }
1350 #pragma omp sections
1351   {
1352 #pragma omp section
1353     {
1354 #pragma omp parallel
1355       for (int i = 0; i < 10; ++i)
1356         ;
1357     }
1358   }
1359 #pragma omp sections
1360   {
1361 #pragma omp section
1362     {
1363 #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?}}
1364       {
1365         bar();
1366       }
1367     }
1368   }
1369 #pragma omp sections
1370   {
1371 #pragma omp section
1372     {
1373 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1374       {
1375         bar();
1376       }
1377     }
1378   }
1379 #pragma omp sections
1380   {
1381 #pragma omp section
1382     {
1383 #pragma omp parallel master
1384       bar();
1385 #pragma omp critical
1386       bar();
1387     }
1388   }
1389 #pragma omp sections
1390   {
1391 #pragma omp section
1392     {
1393 #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?}}
1394       bar();
1395 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1396       bar();
1397 #pragma omp critical
1398       bar();
1399     }
1400   }
1401 #pragma omp sections
1402   {
1403 #pragma omp section
1404     {
1405 #pragma omp parallel
1406       {
1407 #pragma omp single // OK
1408         {
1409           bar();
1410         }
1411 #pragma omp for // OK
1412         for (int i = 0; i < 10; ++i)
1413           ;
1414 #pragma omp for simd // OK
1415         for (int i = 0; i < 10; ++i)
1416           ;
1417 #pragma omp sections // OK
1418         {
1419           bar();
1420         }
1421       }
1422     }
1423   }
1424 #pragma omp sections
1425   {
1426 #pragma omp section
1427     {
1428 #pragma omp parallel for
1429       for (int i = 0; i < 10; ++i)
1430         ;
1431     }
1432   }
1433 #pragma omp sections
1434   {
1435 #pragma omp section
1436     {
1437 #pragma omp parallel for simd
1438       for (int i = 0; i < 10; ++i)
1439         ;
1440     }
1441   }
1442 #pragma omp sections
1443   {
1444 #pragma omp section
1445     {
1446 #pragma omp parallel sections
1447       {
1448         bar();
1449       }
1450     }
1451   }
1452 #pragma omp sections
1453   {
1454 #pragma omp section
1455     {
1456 #pragma omp task
1457       {
1458         bar();
1459       }
1460     }
1461   }
1462 #pragma omp sections
1463   {
1464 #pragma omp section
1465     {
1466 #pragma omp taskyield
1467       bar();
1468     }
1469   }
1470 #pragma omp sections
1471   {
1472 #pragma omp section
1473     {
1474 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1475       bar();
1476     }
1477   }
1478 #pragma omp sections
1479   {
1480 #pragma omp section
1481     {
1482 #pragma omp scan // expected-error {{region cannot be closely nested inside 'section' region}}
1483       bar();
1484     }
1485   }
1486 #pragma omp sections
1487   {
1488 #pragma omp section
1489     {
1490 #pragma omp taskwait
1491       bar();
1492     }
1493   }
1494 #pragma omp sections
1495   {
1496 #pragma omp section
1497     {
1498 #pragma omp flush
1499       bar();
1500     }
1501   }
1502 #pragma omp sections
1503   {
1504 #pragma omp section
1505     {
1506 #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?}}
1507       bar();
1508     }
1509   }
1510 #pragma omp sections
1511   {
1512 #pragma omp section
1513 #pragma omp atomic
1514     ++a;
1515   }
1516 #pragma omp sections
1517   {
1518 #pragma omp section
1519 #pragma omp target
1520     ++a;
1521   }
1522 #pragma omp sections
1523   {
1524 #pragma omp section
1525 #pragma omp target parallel
1526     ++a;
1527   }
1528 #pragma omp sections
1529   {
1530 #pragma omp section
1531     {
1532 #pragma omp target parallel for
1533       for (int i = 0; i < 10; ++i)
1534         ;
1535     }
1536   }
1537 #pragma omp sections
1538   {
1539 #pragma omp section
1540     {
1541 #pragma omp target enter data map(to: a)
1542       ++a;
1543     }
1544   }
1545 #pragma omp sections
1546   {
1547 #pragma omp section
1548     {
1549 #pragma omp target exit data map(from: a)
1550       ++a;
1551     }
1552   }
1553 #pragma omp sections
1554   {
1555 #pragma omp section
1556 #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?}}
1557     ++a;
1558   }
1559 #pragma omp sections
1560   {
1561 #pragma omp section
1562 #pragma omp taskloop
1563   for (int i = 0; i < 10; ++i)
1564     ++a;
1565   }
1566 #pragma omp sections
1567   {
1568 #pragma omp section
1569 #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?}}
1570     for (int i = 0; i < 10; ++i)
1571       ;
1572   }
1573 #pragma omp sections
1574   {
1575 #pragma omp section
1576     {
1577       bar();
1578 #pragma omp target update to(a)
1579     }
1580   }
1581 #pragma omp sections
1582   {
1583 #pragma omp section
1584 #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?}}
1585     for (int i = 0; i < 10; ++i)
1586       ;
1587   }
1588 #pragma omp sections
1589   {
1590 #pragma omp section
1591 #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?}}
1592     for (int i = 0; i < 10; ++i)
1593       ;
1594   }
1595 #pragma omp sections
1596   {
1597 #pragma omp section
1598 #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?}}
1599     for (int i = 0; i < 10; ++i)
1600       ;
1601   }
1602 #pragma omp sections
1603   {
1604 #pragma omp section
1605 #pragma omp target simd // OK
1606     for (int i = 0; i < 10; ++i)
1607       ;
1608   }
1609 #pragma omp sections
1610   {
1611 #pragma omp section
1612 #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?}}
1613     for (int i = 0; i < 10; ++i)
1614       ;
1615   }
1616 #pragma omp sections
1617   {
1618 #pragma omp section
1619 #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?}}
1620     for (int i = 0; i < 10; ++i)
1621       ;
1622   }
1623 #pragma omp sections
1624   {
1625 #pragma omp section
1626 #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?}}
1627     for (int i = 0; i < 10; ++i)
1628       ;
1629   }
1630 #pragma omp sections
1631   {
1632 #pragma omp section
1633 #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?}}
1634     for (int i = 0; i < 10; ++i)
1635       ;
1636   }
1637 #pragma omp sections
1638   {
1639 #pragma omp section
1640 #pragma omp target teams // OK
1641     ++a;
1642   }
1643 #pragma omp sections
1644   {
1645 #pragma omp section
1646 #pragma omp target teams distribute // OK
1647     for (int i = 0; i < 10; ++i)
1648       ;
1649   }
1650 #pragma omp sections
1651   {
1652 #pragma omp section
1653 #pragma omp target teams distribute parallel for // OK
1654     for (int i = 0; i < 10; ++i)
1655       ;
1656   }
1657 #pragma omp sections
1658   {
1659 #pragma omp section
1660 #pragma omp target teams distribute parallel for simd // OK
1661     for (int i = 0; i < 10; ++i)
1662       ;
1663   }
1664 #pragma omp sections
1665   {
1666 #pragma omp section
1667 #pragma omp target teams distribute simd // OK
1668     for (int i = 0; i < 10; ++i)
1669       ;
1670   }
1671 
1672 // SINGLE DIRECTIVE
1673 #pragma omp single
1674   {
1675 #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?}}
1676     for (int i = 0; i < 10; ++i)
1677       ;
1678   }
1679 #pragma omp single
1680   {
1681 #pragma omp simd
1682     for (int i = 0; i < 10; ++i)
1683       ;
1684   }
1685 #pragma omp single
1686   {
1687 #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?}}
1688     for (int i = 0; i < 10; ++i)
1689       ;
1690   }
1691 #pragma omp single
1692   {
1693 #pragma omp parallel
1694     for (int i = 0; i < 10; ++i)
1695       ;
1696   }
1697 #pragma omp single
1698   {
1699 #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?}}
1700     {
1701       bar();
1702     }
1703   }
1704 #pragma omp single
1705   {
1706 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1707     {
1708       bar();
1709     }
1710   }
1711 #pragma omp single
1712   {
1713 #pragma omp parallel master
1714     {
1715       bar();
1716     }
1717   }
1718 #pragma omp single
1719   {
1720 #pragma omp critical
1721     {
1722       bar();
1723     }
1724   }
1725 #pragma omp single
1726   {
1727 #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?}}
1728     {
1729       bar();
1730     }
1731   }
1732 #pragma omp single
1733   {
1734 #pragma omp parallel
1735     {
1736 #pragma omp single // OK
1737       {
1738         bar();
1739       }
1740 #pragma omp for // OK
1741       for (int i = 0; i < 10; ++i)
1742         ;
1743 #pragma omp for simd // OK
1744       for (int i = 0; i < 10; ++i)
1745         ;
1746 #pragma omp sections // OK
1747       {
1748         bar();
1749       }
1750     }
1751   }
1752 #pragma omp single
1753   {
1754 #pragma omp parallel for
1755     for (int i = 0; i < 10; ++i)
1756       ;
1757   }
1758 #pragma omp single
1759   {
1760 #pragma omp parallel for simd
1761     for (int i = 0; i < 10; ++i)
1762       ;
1763   }
1764 #pragma omp single
1765   {
1766 #pragma omp parallel sections
1767     {
1768       bar();
1769     }
1770   }
1771 #pragma omp single
1772   {
1773 #pragma omp task
1774     {
1775       bar();
1776     }
1777   }
1778 #pragma omp single
1779   {
1780 #pragma omp taskyield
1781     bar();
1782   }
1783 #pragma omp single
1784   {
1785 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1786     bar();
1787   }
1788 #pragma omp single
1789   {
1790 #pragma omp scan // expected-error {{region cannot be closely nested inside 'single' region}}
1791     bar();
1792   }
1793 #pragma omp single
1794   {
1795 #pragma omp taskwait
1796     bar();
1797   }
1798 #pragma omp single
1799   {
1800 #pragma omp flush
1801     bar();
1802   }
1803 #pragma omp single
1804   {
1805 #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?}}
1806     bar();
1807   }
1808 #pragma omp single
1809   {
1810 #pragma omp atomic
1811     ++a;
1812   }
1813 #pragma omp single
1814   {
1815 #pragma omp target
1816     ++a;
1817   }
1818 #pragma omp single
1819   {
1820 #pragma omp target parallel
1821     ++a;
1822   }
1823 #pragma omp single
1824   {
1825 #pragma omp target parallel for
1826     for (int i = 0; i < 10; ++i)
1827       ;
1828   }
1829 #pragma omp single
1830   {
1831 #pragma omp target enter data map(to: a)
1832     ++a;
1833   }
1834 #pragma omp single
1835   {
1836 #pragma omp target exit data map(from: a)
1837     ++a;
1838   }
1839 #pragma omp single
1840   {
1841 #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?}}
1842     ++a;
1843   }
1844 #pragma omp single
1845   {
1846 #pragma omp taskloop
1847   for (int i = 0; i < 10; ++i)
1848     ++a;
1849   }
1850 #pragma omp single
1851   {
1852 #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?}}
1853     for (int i = 0; i < 10; ++i)
1854       ;
1855   }
1856 #pragma omp single
1857   {
1858 #pragma omp target update to(a)
1859     bar();
1860   }
1861 #pragma omp single
1862   {
1863 #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?}}
1864     for (int i = 0; i < 10; ++i)
1865       ;
1866   }
1867 #pragma omp single
1868   {
1869 #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?}}
1870     for (int i = 0; i < 10; ++i)
1871       ;
1872   }
1873 #pragma omp single
1874   {
1875 #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?}}
1876     for (int i = 0; i < 10; ++i)
1877       ;
1878   }
1879 #pragma omp single
1880   {
1881 #pragma omp target simd // OK
1882     for (int i = 0; i < 10; ++i)
1883       ;
1884   }
1885 #pragma omp single
1886   {
1887 #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?}}
1888     for (int i = 0; i < 10; ++i)
1889       ;
1890   }
1891 #pragma omp single
1892   {
1893 #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?}}
1894     for (int i = 0; i < 10; ++i)
1895       ;
1896   }
1897 #pragma omp single
1898   {
1899 #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?}}
1900     for (int i = 0; i < 10; ++i)
1901       ;
1902   }
1903 #pragma omp single
1904   {
1905 #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?}}
1906     for (int i = 0; i < 10; ++i)
1907       ;
1908   }
1909 #pragma omp single
1910   {
1911 #pragma omp target teams // OK
1912     ++a;
1913   }
1914 #pragma omp single
1915   {
1916 #pragma omp target teams distribute // OK
1917     for (int i = 0; i < 10; ++i)
1918       ;
1919   }
1920 #pragma omp single
1921   {
1922 #pragma omp target teams distribute parallel for // OK
1923     for (int i = 0; i < 10; ++i)
1924       ;
1925   }
1926 #pragma omp single
1927   {
1928 #pragma omp target teams distribute parallel for simd // OK
1929     for (int i = 0; i < 10; ++i)
1930       ;
1931   }
1932 #pragma omp single
1933   {
1934 #pragma omp target teams distribute simd // OK
1935     for (int i = 0; i < 10; ++i)
1936       ;
1937   }
1938 
1939 // MASTER DIRECTIVE
1940 #pragma omp master
1941   {
1942 #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?}}
1943     for (int i = 0; i < 10; ++i)
1944       ;
1945   }
1946 #pragma omp master
1947   {
1948 #pragma omp simd
1949     for (int i = 0; i < 10; ++i)
1950       ;
1951   }
1952 #pragma omp master
1953   {
1954 #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?}}
1955     for (int i = 0; i < 10; ++i)
1956       ;
1957   }
1958 #pragma omp master
1959   {
1960 #pragma omp parallel
1961     for (int i = 0; i < 10; ++i)
1962       ;
1963   }
1964 #pragma omp master
1965   {
1966 #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?}}
1967     {
1968       bar();
1969     }
1970   }
1971 #pragma omp master
1972   {
1973 #pragma omp master // OK, though second 'master' is redundant
1974     {
1975       bar();
1976     }
1977   }
1978 #pragma omp master
1979   {
1980 #pragma omp critical
1981     {
1982       bar();
1983     }
1984   }
1985 #pragma omp master
1986   {
1987 #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?}}
1988     {
1989       bar();
1990     }
1991   }
1992 #pragma omp master
1993   {
1994 #pragma omp parallel
1995     {
1996 #pragma omp master // OK
1997       {
1998         bar();
1999       }
2000 #pragma omp for // OK
2001       for (int i = 0; i < 10; ++i)
2002         ;
2003 #pragma omp for simd // OK
2004       for (int i = 0; i < 10; ++i)
2005         ;
2006 #pragma omp sections // OK
2007       {
2008         bar();
2009       }
2010     }
2011   }
2012 #pragma omp master
2013   {
2014 #pragma omp parallel master // OK
2015       {
2016         bar();
2017       }
2018 #pragma omp parallel
2019     {
2020 #pragma omp for // OK
2021       for (int i = 0; i < 10; ++i)
2022         ;
2023 #pragma omp for simd // OK
2024       for (int i = 0; i < 10; ++i)
2025         ;
2026 #pragma omp sections // OK
2027       {
2028         bar();
2029       }
2030     }
2031   }
2032 #pragma omp master
2033   {
2034 #pragma omp parallel for
2035     for (int i = 0; i < 10; ++i)
2036       ;
2037   }
2038 #pragma omp master
2039   {
2040 #pragma omp parallel for simd
2041     for (int i = 0; i < 10; ++i)
2042       ;
2043   }
2044 #pragma omp master
2045   {
2046 #pragma omp parallel sections
2047     {
2048       bar();
2049     }
2050   }
2051 #pragma omp master
2052   {
2053 #pragma omp task
2054     {
2055       bar();
2056     }
2057   }
2058 #pragma omp master
2059   {
2060 #pragma omp taskyield
2061     bar();
2062   }
2063 #pragma omp master
2064   {
2065 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
2066     bar();
2067   }
2068 #pragma omp master
2069   {
2070 #pragma omp scan // expected-error {{region cannot be closely nested inside 'master' region}}
2071     bar();
2072   }
2073 #pragma omp master
2074   {
2075 #pragma omp taskwait
2076     bar();
2077   }
2078 #pragma omp master
2079   {
2080 #pragma omp flush
2081     bar();
2082   }
2083 #pragma omp master
2084   {
2085 #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?}}
2086     bar();
2087   }
2088 #pragma omp master
2089   {
2090 #pragma omp atomic
2091     ++a;
2092   }
2093 #pragma omp master
2094   {
2095 #pragma omp target
2096     ++a;
2097   }
2098 #pragma omp master
2099   {
2100 #pragma omp target parallel
2101     ++a;
2102   }
2103 #pragma omp master
2104   {
2105 #pragma omp target parallel for
2106     for (int i = 0; i < 10; ++i)
2107       ;
2108   }
2109 #pragma omp master
2110   {
2111 #pragma omp target enter data map(to: a)
2112     ++a;
2113   }
2114 #pragma omp master
2115   {
2116 #pragma omp target exit data map(from: a)
2117     ++a;
2118   }
2119 #pragma omp master
2120   {
2121 #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?}}
2122     ++a;
2123   }
2124 #pragma omp master
2125   {
2126 #pragma omp taskloop
2127   for (int i = 0; i < 10; ++i)
2128     ++a;
2129   }
2130 #pragma omp master
2131   {
2132 #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?}}
2133     for (int i = 0; i < 10; ++i)
2134       ;
2135   }
2136 #pragma omp master
2137   {
2138 #pragma omp target update to(a)
2139     bar();
2140   }
2141 #pragma omp master
2142   {
2143 #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?}}
2144     for (int i = 0; i < 10; ++i)
2145       ;
2146   }
2147 #pragma omp master
2148   {
2149 #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?}}
2150     for (int i = 0; i < 10; ++i)
2151       ;
2152   }
2153 #pragma omp master
2154   {
2155 #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?}}
2156     for (int i = 0; i < 10; ++i)
2157       ;
2158   }
2159 #pragma omp master
2160   {
2161 #pragma omp target simd // OK
2162     for (int i = 0; i < 10; ++i)
2163       ;
2164   }
2165 #pragma omp master
2166   {
2167 #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?}}
2168     for (int i = 0; i < 10; ++i)
2169       ;
2170   }
2171 #pragma omp master
2172   {
2173 #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?}}
2174     for (int i = 0; i < 10; ++i)
2175       ;
2176   }
2177 #pragma omp master
2178   {
2179 #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?}}
2180     for (int i = 0; i < 10; ++i)
2181       ;
2182   }
2183 #pragma omp master
2184   {
2185 #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?}}
2186     for (int i = 0; i < 10; ++i)
2187       ;
2188   }
2189 #pragma omp master
2190   {
2191 #pragma omp target teams // OK
2192     a++;
2193   }
2194 #pragma omp master
2195   {
2196 #pragma omp target teams distribute // OK
2197     for (int i = 0; i < 10; ++i)
2198       ;
2199   }
2200 #pragma omp master
2201   {
2202 #pragma omp target teams distribute parallel for // OK
2203     for (int i = 0; i < 10; ++i)
2204       ;
2205   }
2206 #pragma omp master
2207   {
2208 #pragma omp target teams distribute parallel for simd // OK
2209     for (int i = 0; i < 10; ++i)
2210       ;
2211   }
2212 #pragma omp master
2213   {
2214 #pragma omp target teams distribute simd // OK
2215     for (int i = 0; i < 10; ++i)
2216       ;
2217   }
2218 
2219 // CRITICAL DIRECTIVE
2220 #pragma omp critical
2221   {
2222 #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?}}
2223     for (int i = 0; i < 10; ++i)
2224       ;
2225   }
2226 #pragma omp critical
2227   {
2228 #pragma omp simd
2229     for (int i = 0; i < 10; ++i)
2230       ;
2231   }
2232 #pragma omp critical
2233   {
2234 #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?}}
2235     for (int i = 0; i < 10; ++i)
2236       ;
2237   }
2238 #pragma omp critical
2239   {
2240 #pragma omp parallel
2241     for (int i = 0; i < 10; ++i)
2242       ;
2243   }
2244 #pragma omp critical
2245   {
2246 #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?}}
2247     {
2248       bar();
2249     }
2250   }
2251 #pragma omp critical
2252   {
2253 #pragma omp master // OK, though second 'master' is redundant
2254     {
2255       bar();
2256     }
2257   }
2258 #pragma omp critical
2259   {
2260 #pragma omp critical
2261     {
2262       bar();
2263     }
2264   }
2265 #pragma omp critical
2266   {
2267 #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?}}
2268     {
2269       bar();
2270     }
2271   }
2272 #pragma omp critical
2273   {
2274 #pragma omp parallel
2275     {
2276 #pragma omp master // OK
2277       {
2278         bar();
2279       }
2280 #pragma omp for // OK
2281       for (int i = 0; i < 10; ++i)
2282         ;
2283 #pragma omp for simd // OK
2284       for (int i = 0; i < 10; ++i)
2285         ;
2286 #pragma omp sections // OK
2287       {
2288         bar();
2289       }
2290     }
2291   }
2292 #pragma omp critical
2293   {
2294 #pragma omp parallel master
2295     {
2296       bar();
2297     }
2298   }
2299 #pragma omp critical
2300   {
2301 #pragma omp parallel for
2302     for (int i = 0; i < 10; ++i)
2303       ;
2304   }
2305 #pragma omp critical
2306   {
2307 #pragma omp parallel for simd
2308     for (int i = 0; i < 10; ++i)
2309       ;
2310   }
2311 #pragma omp critical
2312   {
2313 #pragma omp parallel sections
2314     {
2315       bar();
2316     }
2317   }
2318 #pragma omp critical
2319   {
2320 #pragma omp task
2321     {
2322       bar();
2323     }
2324   }
2325 #pragma omp critical
2326   {
2327 #pragma omp taskyield
2328     bar();
2329   }
2330 #pragma omp critical
2331   {
2332 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2333     bar();
2334   }
2335 #pragma omp critical
2336   {
2337 #pragma omp scan // expected-error {{region cannot be closely nested inside 'critical' region}}
2338     bar();
2339   }
2340 #pragma omp critical
2341   {
2342 #pragma omp taskwait
2343     bar();
2344   }
2345 #pragma omp critical(Tuzik)
2346   {
2347 #pragma omp critical(grelka)
2348     bar();
2349   }
2350 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2351   {
2352 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2353     {
2354 #pragma omp critical(Tuzik)
2355       {
2356 #pragma omp parallel
2357 #pragma omp critical(grelka)
2358         {
2359           bar();
2360         }
2361       }
2362     }
2363   }
2364 #pragma omp critical
2365   {
2366 #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?}}
2367     bar();
2368   }
2369 #pragma omp critical
2370   {
2371 #pragma omp atomic
2372     ++a;
2373   }
2374 #pragma omp critical
2375   {
2376 #pragma omp target
2377     ++a;
2378   }
2379 #pragma omp critical
2380   {
2381 #pragma omp target parallel
2382     ++a;
2383   }
2384 #pragma omp critical
2385   {
2386 #pragma omp target parallel for
2387     for (int i = 0; i < 10; ++i)
2388       ;
2389   }
2390 #pragma omp critical
2391   {
2392 #pragma omp target enter data map(to: a)
2393     ++a;
2394   }
2395 #pragma omp critical
2396   {
2397 #pragma omp target exit data map(from: a)
2398     ++a;
2399   }
2400 #pragma omp critical
2401   {
2402 #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?}}
2403     ++a;
2404   }
2405 #pragma omp critical
2406   {
2407 #pragma omp taskloop
2408   for (int i = 0; i < 10; ++i)
2409     ++a;
2410   }
2411 #pragma omp critical
2412   {
2413 #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?}}
2414     for (int i = 0; i < 10; ++i)
2415       ;
2416   }
2417 #pragma omp critical
2418   {
2419 #pragma omp target update to(a)
2420     bar();
2421   }
2422 #pragma omp critical
2423   {
2424 #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?}}
2425     for (int i = 0; i < 10; ++i)
2426       ;
2427   }
2428 #pragma omp critical
2429   {
2430 #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?}}
2431     for (int i = 0; i < 10; ++i)
2432       ;
2433   }
2434 #pragma omp critical
2435   {
2436 #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?}}
2437     for (int i = 0; i < 10; ++i)
2438       ;
2439   }
2440 #pragma omp critical
2441   {
2442 #pragma omp target simd // OK
2443     for (int i = 0; i < 10; ++i)
2444       ;
2445   }
2446 #pragma omp critical
2447   {
2448 #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?}}
2449     for (int i = 0; i < 10; ++i)
2450       ;
2451   }
2452 #pragma omp critical
2453   {
2454 #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?}}
2455     for (int i = 0; i < 10; ++i)
2456       ;
2457   }
2458 #pragma omp critical
2459   {
2460 #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?}}
2461     for (int i = 0; i < 10; ++i)
2462       ;
2463   }
2464 #pragma omp critical
2465   {
2466 #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?}}
2467     for (int i = 0; i < 10; ++i)
2468       ;
2469   }
2470 #pragma omp critical
2471   {
2472 #pragma omp target teams // OK
2473     a++;
2474   }
2475 #pragma omp critical
2476   {
2477 #pragma omp target teams distribute // OK
2478     for (int i = 0; i < 10; ++i)
2479       ;
2480   }
2481 #pragma omp critical
2482   {
2483 #pragma omp target teams distribute parallel for // OK
2484     for (int i = 0; i < 10; ++i)
2485       ;
2486   }
2487 #pragma omp critical
2488   {
2489 #pragma omp target teams distribute parallel for simd // OK
2490     for (int i = 0; i < 10; ++i)
2491       ;
2492   }
2493 #pragma omp critical
2494   {
2495 #pragma omp target teams distribute simd // OK
2496     for (int i = 0; i < 10; ++i)
2497       ;
2498   }
2499 
2500 // PARALLEL FOR DIRECTIVE
2501 #pragma omp parallel for
2502   for (int i = 0; i < 10; ++i) {
2503 #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?}}
2504     for (int i = 0; i < 10; ++i)
2505       ;
2506   }
2507 #pragma omp parallel for
2508   for (int i = 0; i < 10; ++i) {
2509 #pragma omp simd
2510     for (int i = 0; i < 10; ++i)
2511       ;
2512   }
2513 #pragma omp parallel for
2514   for (int i = 0; i < 10; ++i) {
2515 #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?}}
2516     for (int i = 0; i < 10; ++i)
2517       ;
2518   }
2519 #pragma omp parallel for
2520   for (int i = 0; i < 10; ++i) {
2521 #pragma omp parallel
2522     for (int i = 0; i < 10; ++i)
2523       ;
2524   }
2525 #pragma omp parallel for
2526   for (int i = 0; i < 10; ++i) {
2527 #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?}}
2528     {
2529       bar();
2530     }
2531   }
2532 #pragma omp parallel for
2533   for (int i = 0; i < 10; ++i) {
2534 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2535     {
2536       bar();
2537     }
2538   }
2539 #pragma omp parallel for
2540   for (int i = 0; i < 10; ++i) {
2541 #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?}}
2542     {
2543       bar();
2544     }
2545   }
2546 
2547 #pragma omp parallel for
2548   for (int i = 0; i < 10; ++i) {
2549 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2550     {
2551       bar();
2552     }
2553   }
2554 
2555 #pragma omp parallel for
2556   for (int i = 0; i < 10; ++i) {
2557 #pragma omp critical
2558     {
2559       bar();
2560     }
2561   }
2562 
2563 #pragma omp parallel for
2564   for (int i = 0; i < 10; ++i) {
2565 #pragma omp parallel
2566     {
2567 #pragma omp single // OK
2568       {
2569         bar();
2570       }
2571 #pragma omp for // OK
2572       for (int i = 0; i < 10; ++i)
2573         ;
2574 #pragma omp for simd // OK
2575       for (int i = 0; i < 10; ++i)
2576         ;
2577 #pragma omp sections // OK
2578       {
2579         bar();
2580       }
2581     }
2582   }
2583 #pragma omp parallel for
2584   for (int i = 0; i < 10; ++i) {
2585 #pragma omp parallel for
2586     for (int i = 0; i < 10; ++i)
2587       ;
2588   }
2589 #pragma omp parallel for
2590   for (int i = 0; i < 10; ++i) {
2591 #pragma omp parallel for simd
2592     for (int i = 0; i < 10; ++i)
2593       ;
2594   }
2595 #pragma omp parallel for
2596   for (int i = 0; i < 10; ++i) {
2597 #pragma omp parallel sections
2598     {
2599       bar();
2600     }
2601   }
2602 #pragma omp parallel for
2603   for (int i = 0; i < 10; ++i) {
2604 #pragma omp task
2605     {
2606       bar();
2607     }
2608   }
2609 #pragma omp parallel for
2610   for (int i = 0; i < 10; ++i) {
2611 #pragma omp taskyield
2612     bar();
2613   }
2614 #pragma omp parallel for
2615   for (int i = 0; i < 10; ++i) {
2616 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2617     bar();
2618   }
2619 #pragma omp parallel for
2620   for (int i = 0; i < 10; ++i) {
2621 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'parallel for' region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
2622     bar();
2623   }
2624 #pragma omp parallel for
2625   for (int i = 0; i < 10; ++i) {
2626 #pragma omp taskwait
2627     bar();
2628   }
2629 #pragma omp parallel for
2630   for (int i = 0; i < 10; ++i) {
2631 #pragma omp flush
2632     bar();
2633   }
2634 #pragma omp parallel for
2635   for (int i = 0; i < 10; ++i) {
2636 #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?}}
2637     bar();
2638   }
2639 #pragma omp parallel for ordered
2640   for (int i = 0; i < 10; ++i) {
2641 #pragma omp ordered // OK
2642     bar();
2643   }
2644 #pragma omp parallel for
2645   for (int i = 0; i < 10; ++i) {
2646 #pragma omp atomic
2647     ++a;
2648   }
2649 #pragma omp parallel for
2650   for (int i = 0; i < 10; ++i) {
2651 #pragma omp target
2652     ++a;
2653   }
2654 #pragma omp parallel for
2655   for (int i = 0; i < 10; ++i) {
2656 #pragma omp target parallel
2657     ++a;
2658   }
2659 #pragma omp parallel for
2660   for (int i = 0; i < 10; ++i) {
2661 #pragma omp target parallel for
2662     for (int i = 0; i < 10; ++i)
2663       ;
2664   }
2665 #pragma omp parallel for
2666   for (int i = 0; i < 10; ++i) {
2667 #pragma omp target enter data map(to: a)
2668     ++a;
2669   }
2670 #pragma omp parallel for
2671   for (int i = 0; i < 10; ++i) {
2672 #pragma omp target exit data map(from: a)
2673     ++a;
2674   }
2675 #pragma omp parallel for
2676   for (int i = 0; i < 10; ++i) {
2677 #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?}}
2678     ++a;
2679   }
2680 #pragma omp parallel for
2681   for (int i = 0; i < 10; ++i) {
2682 #pragma omp taskloop
2683   for (int i = 0; i < 10; ++i)
2684     ++a;
2685   }
2686 #pragma omp parallel for
2687   for (int i = 0; i < 10; ++i) {
2688 #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?}}
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 update to(a)
2695   }
2696 #pragma omp parallel for
2697   for (int i = 0; i < 10; ++i) {
2698 #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?}}
2699     for (int j = 0; j < 10; ++j)
2700       ;
2701   }
2702 #pragma omp parallel for
2703   for (int i = 0; i < 10; ++i) {
2704 #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?}}
2705     for (int j = 0; j < 10; ++j)
2706       ;
2707   }
2708 #pragma omp parallel for
2709   for (int i = 0; i < 10; ++i) {
2710 #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?}}
2711     for (int j = 0; j < 10; ++j)
2712       ;
2713   }
2714 #pragma omp parallel for
2715   for (int i = 0; i < 10; ++i) {
2716 #pragma omp target simd // OK
2717     for (int j = 0; j < 10; ++j)
2718       ;
2719   }
2720 #pragma omp parallel for
2721   for (int i = 0; i < 10; ++i) {
2722 #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?}}
2723     for (int j = 0; j < 10; ++j)
2724       ;
2725   }
2726 #pragma omp parallel for
2727   for (int i = 0; i < 10; ++i) {
2728 #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?}}
2729     for (int j = 0; j < 10; ++j)
2730       ;
2731   }
2732 #pragma omp parallel for
2733   for (int i = 0; i < 10; ++i) {
2734 #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?}}
2735     for (int j = 0; j < 10; ++j)
2736       ;
2737   }
2738 #pragma omp parallel for
2739   for (int i = 0; i < 10; ++i) {
2740 #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?}}
2741     for (int j = 0; j < 10; ++j)
2742       ;
2743   }
2744 #pragma omp parallel for
2745   for (int i = 0; i < 10; ++i) {
2746 #pragma omp target teams // OK
2747     a++;
2748   }
2749 #pragma omp parallel for
2750   for (int i = 0; i < 10; ++i) {
2751 #pragma omp target teams distribute // OK
2752     for (int j = 0; j < 10; ++j)
2753       ;
2754   }
2755 #pragma omp parallel for
2756   for (int i = 0; i < 10; ++i) {
2757 #pragma omp target teams distribute parallel for // OK
2758     for (int j = 0; j < 10; ++j)
2759       ;
2760   }
2761 #pragma omp parallel for
2762   for (int i = 0; i < 10; ++i) {
2763 #pragma omp target teams distribute parallel for simd // OK
2764     for (int j = 0; j < 10; ++j)
2765       ;
2766   }
2767 #pragma omp parallel for
2768   for (int i = 0; i < 10; ++i) {
2769 #pragma omp target teams distribute simd // OK
2770     for (int j = 0; j < 10; ++j)
2771       ;
2772   }
2773 
2774 // PARALLEL FOR SIMD DIRECTIVE
2775 #pragma omp parallel for simd
2776   for (int i = 0; i < 10; ++i) {
2777 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2778     for (int i = 0; i < 10; ++i)
2779       ;
2780   }
2781 #pragma omp parallel for simd
2782   for (int i = 0; i < 10; ++i) {
2783 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2784     for (int i = 0; i < 10; ++i)
2785       ;
2786   }
2787 #pragma omp parallel for simd
2788   for (int i = 0; i < 10; ++i) {
2789 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2790     for (int i = 0; i < 10; ++i)
2791       ;
2792   }
2793 #pragma omp parallel for simd
2794   for (int i = 0; i < 10; ++i) {
2795 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2796     for (int i = 0; i < 10; ++i)
2797       ;
2798   }
2799 #pragma omp parallel for simd
2800   for (int i = 0; i < 10; ++i) {
2801 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2802     {
2803       bar();
2804     }
2805   }
2806 #pragma omp parallel for simd
2807   for (int i = 0; i < 10; ++i) {
2808 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2809     {
2810       bar();
2811     }
2812   }
2813 #pragma omp parallel for simd
2814   for (int i = 0; i < 10; ++i) {
2815 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2816     {
2817       bar();
2818     }
2819   }
2820 
2821 #pragma omp parallel for simd
2822   for (int i = 0; i < 10; ++i) {
2823 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2824     {
2825       bar();
2826     }
2827   }
2828 
2829 #pragma omp parallel for simd
2830   for (int i = 0; i < 10; ++i) {
2831 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2832     {
2833       bar();
2834     }
2835   }
2836 
2837 #pragma omp parallel for simd
2838   for (int i = 0; i < 10; ++i) {
2839 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2840     {
2841 #pragma omp single
2842       {
2843         bar();
2844       }
2845 #pragma omp for
2846       for (int i = 0; i < 10; ++i)
2847         ;
2848 #pragma omp for simd
2849       for (int i = 0; i < 10; ++i)
2850         ;
2851 #pragma omp sections
2852       {
2853         bar();
2854       }
2855     }
2856   }
2857 #pragma omp parallel for simd
2858   for (int i = 0; i < 10; ++i) {
2859 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2860     for (int i = 0; i < 10; ++i)
2861       ;
2862   }
2863 #pragma omp parallel for simd
2864   for (int i = 0; i < 10; ++i) {
2865 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2866     for (int i = 0; i < 10; ++i)
2867       ;
2868   }
2869 #pragma omp parallel for simd
2870   for (int i = 0; i < 10; ++i) {
2871 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2872     {
2873       bar();
2874     }
2875   }
2876 #pragma omp parallel for simd
2877   for (int i = 0; i < 10; ++i) {
2878 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2879     {
2880       bar();
2881     }
2882   }
2883 #pragma omp parallel for simd
2884   for (int i = 0; i < 10; ++i) {
2885 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2886     bar();
2887   }
2888 #pragma omp parallel for simd
2889   for (int i = 0; i < 10; ++i) {
2890 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2891     bar();
2892   }
2893 #pragma omp parallel for simd
2894   for (int i = 0; i < 10; ++i) {
2895 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
2896     bar();
2897   }
2898 #pragma omp parallel for simd
2899   for (int i = 0; i < 10; ++i) {
2900 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2901     bar();
2902   }
2903 #pragma omp parallel for simd
2904   for (int i = 0; i < 10; ++i) {
2905 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2906     bar();
2907   }
2908 #pragma omp parallel for simd
2909   for (int i = 0; i < 10; ++i) {
2910 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2911     bar();
2912   }
2913 #pragma omp parallel for simd
2914   for (int i = 0; i < 10; ++i) {
2915 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2916     bar();
2917   }
2918 #pragma omp parallel for simd
2919   for (int i = 0; i < 10; ++i) {
2920 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
2921     ++a;
2922   }
2923 #pragma omp parallel for simd
2924   for (int i = 0; i < 10; ++i) {
2925 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2926     ++a;
2927   }
2928 #pragma omp parallel for simd
2929   for (int i = 0; i < 10; ++i) {
2930 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2931     ++a;
2932   }
2933 #pragma omp parallel for simd
2934   for (int i = 0; i < 10; ++i) {
2935 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2936     for (int i = 0; i < 10; ++i)
2937       ;
2938   }
2939 #pragma omp parallel for simd
2940   for (int i = 0; i < 10; ++i) {
2941 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2942     ++a;
2943   }
2944 #pragma omp parallel for simd
2945   for (int i = 0; i < 10; ++i) {
2946 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2947     ++a;
2948   }
2949 #pragma omp parallel for simd
2950   for (int i = 0; i < 10; ++i) {
2951 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2952     ++a;
2953   }
2954 #pragma omp parallel for simd
2955   for (int i = 0; i < 10; ++i) {
2956 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2957   for (int i = 0; i < 10; ++i)
2958     ++a;
2959   }
2960 #pragma omp parallel for simd
2961   for (int i = 0; i < 10; ++i) {
2962 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2963     for (int j = 0; j < 10; ++j)
2964       ;
2965   }
2966 #pragma omp parallel for simd
2967   for (int i = 0; i < 10; ++i) {
2968 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2969     bar();
2970   }
2971 #pragma omp parallel for simd
2972   for (int i = 0; i < 10; ++i) {
2973 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2974     for (int j = 0; j < 10; ++j)
2975       ;
2976   }
2977 #pragma omp parallel for simd
2978   for (int i = 0; i < 10; ++i) {
2979 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2980     for (int j = 0; j < 10; ++j)
2981       ;
2982   }
2983 #pragma omp parallel for simd
2984   for (int i = 0; i < 10; ++i) {
2985 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2986     for (int j = 0; j < 10; ++j)
2987       ;
2988   }
2989 #pragma omp parallel for simd
2990   for (int i = 0; i < 10; ++i) {
2991 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2992     for (int j = 0; j < 10; ++j)
2993       ;
2994   }
2995 #pragma omp parallel for simd
2996   for (int i = 0; i < 10; ++i) {
2997 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2998     for (int j = 0; j < 10; ++j)
2999       ;
3000   }
3001 #pragma omp parallel for simd
3002   for (int i = 0; i < 10; ++i) {
3003 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3004     for (int j = 0; j < 10; ++j)
3005       ;
3006   }
3007 #pragma omp parallel for simd
3008   for (int i = 0; i < 10; ++i) {
3009 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3010     for (int j = 0; j < 10; ++j)
3011       ;
3012   }
3013 #pragma omp parallel for simd
3014   for (int i = 0; i < 10; ++i) {
3015 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3016     for (int j = 0; j < 10; ++j)
3017       ;
3018   }
3019 #pragma omp parallel for simd
3020   for (int i = 0; i < 10; ++i) {
3021 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3022     a++;
3023   }
3024 #pragma omp parallel for simd
3025   for (int i = 0; i < 10; ++i) {
3026 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3027     for (int j = 0; j < 10; ++j)
3028       ;
3029   }
3030 #pragma omp parallel for simd
3031   for (int i = 0; i < 10; ++i) {
3032 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3033     for (int j = 0; j < 10; ++j)
3034       ;
3035   }
3036 #pragma omp parallel for simd
3037   for (int i = 0; i < 10; ++i) {
3038 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3039     for (int j = 0; j < 10; ++j)
3040       ;
3041   }
3042 #pragma omp parallel for simd
3043   for (int i = 0; i < 10; ++i) {
3044 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3045     for (int j = 0; j < 10; ++j)
3046       ;
3047   }
3048 
3049 // PARALLEL MASTER DIRECTIVE
3050 #pragma omp parallel master
3051   {
3052 #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?}}
3053     for (int i = 0; i < 10; ++i)
3054       ;
3055   }
3056 #pragma omp parallel master
3057   {
3058 #pragma omp simd
3059     for (int i = 0; i < 10; ++i)
3060       ;
3061   }
3062 #pragma omp parallel master
3063   {
3064 #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?}}
3065     for (int i = 0; i < 10; ++i)
3066       ;
3067   }
3068 #pragma omp parallel master
3069   {
3070 #pragma omp parallel
3071     for (int i = 0; i < 10; ++i)
3072       ;
3073   }
3074 #pragma omp parallel master
3075   {
3076 #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?}}
3077     {
3078       bar();
3079     }
3080   }
3081 #pragma omp parallel master
3082   {
3083 #pragma omp master // OK, though second 'master' is redundant
3084     {
3085       bar();
3086     }
3087   }
3088 #pragma omp parallel master
3089   {
3090 #pragma omp critical
3091     {
3092       bar();
3093     }
3094   }
3095 #pragma omp parallel master
3096   {
3097 #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?}}
3098     {
3099       bar();
3100     }
3101   }
3102 #pragma omp parallel master
3103   {
3104 #pragma omp parallel
3105     {
3106 #pragma omp parallel master // OK
3107       {
3108         bar();
3109       }
3110 #pragma omp for // OK
3111       for (int i = 0; i < 10; ++i)
3112         ;
3113 #pragma omp for simd // OK
3114       for (int i = 0; i < 10; ++i)
3115         ;
3116 #pragma omp sections // OK
3117       {
3118         bar();
3119       }
3120     }
3121   }
3122 #pragma omp parallel master
3123   {
3124 #pragma omp parallel master // OK
3125       {
3126         bar();
3127       }
3128 #pragma omp parallel
3129     {
3130 #pragma omp for // OK
3131       for (int i = 0; i < 10; ++i)
3132         ;
3133 #pragma omp for simd // OK
3134       for (int i = 0; i < 10; ++i)
3135         ;
3136 #pragma omp sections // OK
3137       {
3138         bar();
3139       }
3140     }
3141   }
3142 #pragma omp parallel master
3143   {
3144 #pragma omp parallel for
3145     for (int i = 0; i < 10; ++i)
3146       ;
3147   }
3148 #pragma omp parallel master
3149   {
3150 #pragma omp parallel for simd
3151     for (int i = 0; i < 10; ++i)
3152       ;
3153   }
3154 #pragma omp parallel master
3155   {
3156 #pragma omp parallel sections
3157     {
3158       bar();
3159     }
3160   }
3161 #pragma omp parallel master
3162   {
3163 #pragma omp task
3164     {
3165       bar();
3166     }
3167   }
3168 #pragma omp parallel master
3169   {
3170 #pragma omp taskyield
3171     bar();
3172   }
3173 #pragma omp parallel master
3174   {
3175 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3176     bar();
3177   }
3178 #pragma omp parallel master
3179   {
3180 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3181     bar();
3182   }
3183 #pragma omp parallel master
3184   {
3185 #pragma omp taskwait
3186     bar();
3187   }
3188 #pragma omp parallel master
3189   {
3190 #pragma omp flush
3191     bar();
3192   }
3193 #pragma omp parallel master
3194   {
3195 #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?}}
3196     bar();
3197   }
3198 #pragma omp parallel master
3199   {
3200 #pragma omp atomic
3201     ++a;
3202   }
3203 #pragma omp parallel master
3204   {
3205 #pragma omp target
3206     ++a;
3207   }
3208 #pragma omp parallel master
3209   {
3210 #pragma omp target parallel
3211     ++a;
3212   }
3213 #pragma omp parallel master
3214   {
3215 #pragma omp target parallel for
3216     for (int i = 0; i < 10; ++i)
3217       ;
3218   }
3219 #pragma omp parallel master
3220   {
3221 #pragma omp target enter data map(to: a)
3222     ++a;
3223   }
3224 #pragma omp parallel master
3225   {
3226 #pragma omp target exit data map(from: a)
3227     ++a;
3228   }
3229 #pragma omp parallel master
3230   {
3231 #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?}}
3232     ++a;
3233   }
3234 #pragma omp parallel master
3235   {
3236 #pragma omp taskloop
3237   for (int i = 0; i < 10; ++i)
3238     ++a;
3239   }
3240 #pragma omp parallel master
3241   {
3242 #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?}}
3243     for (int i = 0; i < 10; ++i)
3244       ;
3245   }
3246 #pragma omp parallel master
3247   {
3248 #pragma omp target update to(a)
3249     bar();
3250   }
3251 #pragma omp parallel master
3252   {
3253 #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?}}
3254     for (int i = 0; i < 10; ++i)
3255       ;
3256   }
3257 #pragma omp parallel master
3258   {
3259 #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?}}
3260     for (int i = 0; i < 10; ++i)
3261       ;
3262   }
3263 #pragma omp parallel master
3264   {
3265 #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?}}
3266     for (int i = 0; i < 10; ++i)
3267       ;
3268   }
3269 #pragma omp parallel master
3270   {
3271 #pragma omp target simd // OK
3272     for (int i = 0; i < 10; ++i)
3273       ;
3274   }
3275 #pragma omp parallel master
3276   {
3277 #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?}}
3278     for (int i = 0; i < 10; ++i)
3279       ;
3280   }
3281 #pragma omp parallel master
3282   {
3283 #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?}}
3284     for (int i = 0; i < 10; ++i)
3285       ;
3286   }
3287 #pragma omp parallel master
3288   {
3289 #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?}}
3290     for (int i = 0; i < 10; ++i)
3291       ;
3292   }
3293 #pragma omp parallel master
3294   {
3295 #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?}}
3296     for (int i = 0; i < 10; ++i)
3297       ;
3298   }
3299 #pragma omp parallel master
3300   {
3301 #pragma omp target teams // OK
3302     a++;
3303   }
3304 #pragma omp parallel master
3305   {
3306 #pragma omp target teams distribute // OK
3307     for (int i = 0; i < 10; ++i)
3308       ;
3309   }
3310 #pragma omp parallel master
3311   {
3312 #pragma omp target teams distribute parallel for // OK
3313     for (int i = 0; i < 10; ++i)
3314       ;
3315   }
3316 #pragma omp parallel master
3317   {
3318 #pragma omp target teams distribute parallel for simd // OK
3319     for (int i = 0; i < 10; ++i)
3320       ;
3321   }
3322 #pragma omp parallel master
3323   {
3324 #pragma omp target teams distribute simd // OK
3325     for (int i = 0; i < 10; ++i)
3326       ;
3327   }
3328 
3329 // PARALLEL SECTIONS DIRECTIVE
3330 #pragma omp parallel sections
3331   {
3332 #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?}}
3333     for (int i = 0; i < 10; ++i)
3334       ;
3335   }
3336 #pragma omp parallel sections
3337   {
3338 #pragma omp simd
3339     for (int i = 0; i < 10; ++i)
3340       ;
3341   }
3342 #pragma omp parallel sections
3343   {
3344 #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?}}
3345     for (int i = 0; i < 10; ++i)
3346       ;
3347   }
3348 #pragma omp parallel sections
3349   {
3350 #pragma omp parallel
3351     for (int i = 0; i < 10; ++i)
3352       ;
3353   }
3354 #pragma omp parallel sections
3355   {
3356 #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?}}
3357     {
3358       bar();
3359     }
3360   }
3361 #pragma omp parallel sections
3362   {
3363 #pragma omp section
3364     {
3365       bar();
3366     }
3367   }
3368 #pragma omp parallel sections
3369   {
3370 #pragma omp section
3371     {
3372 #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?}}
3373       bar();
3374     }
3375   }
3376 #pragma omp parallel sections
3377   {
3378 #pragma omp section
3379     {
3380 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
3381       bar();
3382     }
3383   }
3384 #pragma omp parallel sections
3385   {
3386 #pragma omp section
3387     {
3388 #pragma omp critical
3389       bar();
3390     }
3391   }
3392 #pragma omp parallel sections
3393   {
3394 #pragma omp parallel
3395     {
3396 #pragma omp single // OK
3397       {
3398         bar();
3399       }
3400 #pragma omp for // OK
3401       for (int i = 0; i < 10; ++i)
3402         ;
3403 #pragma omp for simd // OK
3404       for (int i = 0; i < 10; ++i)
3405         ;
3406 #pragma omp sections // OK
3407       {
3408         bar();
3409       }
3410     }
3411   }
3412 #pragma omp parallel sections
3413   {
3414 #pragma omp parallel for
3415     for (int i = 0; i < 10; ++i)
3416       ;
3417   }
3418 #pragma omp parallel sections
3419   {
3420 #pragma omp parallel for simd
3421     for (int i = 0; i < 10; ++i)
3422       ;
3423   }
3424 #pragma omp parallel sections
3425   {
3426 #pragma omp parallel sections
3427     {
3428       bar();
3429     }
3430   }
3431 #pragma omp parallel sections
3432   {
3433 #pragma omp task
3434     {
3435       bar();
3436     }
3437   }
3438 #pragma omp parallel sections
3439   {
3440 #pragma omp taskyield
3441   }
3442 #pragma omp parallel sections
3443   {
3444 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3445   }
3446 #pragma omp parallel sections
3447   {
3448 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3449   }
3450 #pragma omp parallel sections
3451   {
3452 #pragma omp taskwait
3453   }
3454 #pragma omp parallel sections
3455   {
3456 #pragma omp flush
3457   }
3458 #pragma omp parallel sections
3459   {
3460 #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?}}
3461     bar();
3462   }
3463 #pragma omp parallel sections
3464   {
3465 #pragma omp atomic
3466     ++a;
3467   }
3468 #pragma omp parallel sections
3469   {
3470 #pragma omp target
3471     ++a;
3472   }
3473 #pragma omp parallel sections
3474   {
3475 #pragma omp target parallel
3476     ++a;
3477   }
3478 #pragma omp parallel sections
3479   {
3480 #pragma omp target parallel for
3481     for (int i = 0; i < 10; ++i)
3482       ;
3483   }
3484 #pragma omp parallel sections
3485   {
3486 #pragma omp target enter data map(to: a)
3487   }
3488 #pragma omp parallel sections
3489   {
3490 #pragma omp target exit data map(from: a)
3491   }
3492 #pragma omp parallel sections
3493   {
3494 #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?}}
3495     ++a;
3496   }
3497 #pragma omp parallel sections
3498   {
3499 #pragma omp taskloop
3500   for (int i = 0; i < 10; ++i)
3501     ++a;
3502   }
3503 #pragma omp parallel sections
3504   {
3505 #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?}}
3506     for (int i = 0; i < 10; ++i)
3507       ;
3508   }
3509 #pragma omp parallel sections
3510   {
3511 #pragma omp target update to(a)
3512   }
3513 #pragma omp parallel sections
3514   {
3515 #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?}}
3516     for (int i = 0; i < 10; ++i)
3517       ;
3518   }
3519 #pragma omp parallel sections
3520   {
3521 #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?}}
3522     for (int i = 0; i < 10; ++i)
3523       ;
3524   }
3525 #pragma omp parallel sections
3526   {
3527 #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?}}
3528     for (int i = 0; i < 10; ++i)
3529       ;
3530   }
3531 #pragma omp parallel sections
3532   {
3533 #pragma omp target simd // OK
3534     for (int i = 0; i < 10; ++i)
3535       ;
3536   }
3537 #pragma omp parallel sections
3538   {
3539 #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?}}
3540     for (int i = 0; i < 10; ++i)
3541       ;
3542   }
3543 #pragma omp parallel sections
3544   {
3545 #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?}}
3546     for (int i = 0; i < 10; ++i)
3547       ;
3548   }
3549 #pragma omp parallel sections
3550   {
3551 #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?}}
3552     for (int i = 0; i < 10; ++i)
3553       ;
3554   }
3555 #pragma omp parallel sections
3556   {
3557 #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?}}
3558     for (int i = 0; i < 10; ++i)
3559       ;
3560   }
3561 #pragma omp parallel sections
3562   {
3563 #pragma omp target teams // OK
3564     a++;
3565   }
3566 #pragma omp parallel sections
3567   {
3568 #pragma omp target teams distribute // OK
3569     for (int i = 0; i < 10; ++i)
3570       ;
3571   }
3572 #pragma omp parallel sections
3573   {
3574 #pragma omp target teams distribute parallel for // OK
3575     for (int i = 0; i < 10; ++i)
3576       ;
3577   }
3578 #pragma omp parallel sections
3579   {
3580 #pragma omp target teams distribute parallel for simd // OK
3581     for (int i = 0; i < 10; ++i)
3582       ;
3583   }
3584 #pragma omp parallel sections
3585   {
3586 #pragma omp target teams distribute simd // OK
3587     for (int i = 0; i < 10; ++i)
3588       ;
3589   }
3590 
3591 // TASK DIRECTIVE
3592 #pragma omp task
3593 #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?}}
3594   for (int i = 0; i < 10; ++i)
3595     ;
3596 #pragma omp task
3597 #pragma omp simd
3598   for (int i = 0; i < 10; ++i)
3599     ;
3600 #pragma omp task
3601 #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?}}
3602   for (int i = 0; i < 10; ++i)
3603     ;
3604 #pragma omp task
3605 #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?}}
3606   {
3607     bar();
3608   }
3609 #pragma omp task
3610 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
3611   {
3612     bar();
3613   }
3614 #pragma omp task
3615 #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?}}
3616   bar();
3617 #pragma omp task
3618 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
3619   bar();
3620 #pragma omp task
3621 #pragma omp critical
3622   bar();
3623 
3624 #pragma omp task
3625 #pragma omp parallel for
3626   for (int i = 0; i < 10; ++i)
3627     ;
3628 #pragma omp task
3629 #pragma omp parallel for simd
3630   for (int i = 0; i < 10; ++i)
3631     ;
3632 #pragma omp task
3633 #pragma omp parallel sections
3634   {
3635     bar();
3636   }
3637 #pragma omp task
3638 #pragma omp task
3639   {
3640     bar();
3641   }
3642 #pragma omp task
3643   {
3644 #pragma omp taskyield
3645     bar();
3646   }
3647 #pragma omp task
3648   {
3649 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
3650     bar();
3651   }
3652 #pragma omp task
3653   {
3654 #pragma omp scan // expected-error {{region cannot be closely nested inside 'task' region}}
3655     bar();
3656   }
3657 #pragma omp task
3658   {
3659 #pragma omp taskwait
3660     bar();
3661   }
3662 #pragma omp task
3663   {
3664 #pragma omp flush
3665     bar();
3666   }
3667 #pragma omp task
3668   {
3669 #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?}}
3670     bar();
3671   }
3672 #pragma omp task
3673   {
3674 #pragma omp atomic
3675     ++a;
3676   }
3677 #pragma omp task
3678   {
3679 #pragma omp target
3680     ++a;
3681   }
3682 #pragma omp task
3683   {
3684 #pragma omp target parallel
3685     ++a;
3686   }
3687 #pragma omp task
3688 #pragma omp target parallel for
3689   for (int i = 0; i < 10; ++i)
3690     ;
3691 #pragma omp task
3692   {
3693 #pragma omp target enter data map(to: a)
3694     ++a;
3695   }
3696 #pragma omp task
3697   {
3698 #pragma omp target exit data map(from: a)
3699     ++a;
3700   }
3701 #pragma omp task
3702   {
3703 #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?}}
3704     ++a;
3705   }
3706 #pragma omp task
3707   {
3708 #pragma omp taskloop
3709   for (int i = 0; i < 10; ++i)
3710     ++a;
3711   }
3712 #pragma omp task
3713   {
3714 #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?}}
3715     for (int i = 0; i < 10; ++i)
3716       ;
3717   }
3718 #pragma omp task
3719   {
3720 #pragma omp target update to(a)
3721     bar();
3722   }
3723 #pragma omp task
3724   {
3725 #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?}}
3726     for (int i = 0; i < 10; ++i)
3727       ;
3728   }
3729 #pragma omp task
3730   {
3731 #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?}}
3732     for (int i = 0; i < 10; ++i)
3733       ;
3734   }
3735 #pragma omp task
3736   {
3737 #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?}}
3738     for (int i = 0; i < 10; ++i)
3739       ;
3740   }
3741 #pragma omp task
3742   {
3743 #pragma omp target simd // OK
3744     for (int i = 0; i < 10; ++i)
3745       ;
3746   }
3747 #pragma omp task
3748   {
3749 #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?}}
3750     for (int i = 0; i < 10; ++i)
3751       ;
3752   }
3753 #pragma omp task
3754   {
3755 #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?}}
3756     for (int i = 0; i < 10; ++i)
3757       ;
3758   }
3759 #pragma omp task
3760   {
3761 #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?}}
3762     for (int i = 0; i < 10; ++i)
3763       ;
3764   }
3765 #pragma omp task
3766   {
3767 #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?}}
3768     for (int i = 0; i < 10; ++i)
3769       ;
3770   }
3771 #pragma omp task
3772   {
3773 #pragma omp target teams // OK
3774     a++;
3775   }
3776 #pragma omp task
3777   {
3778 #pragma omp target teams distribute // OK
3779     for (int i = 0; i < 10; ++i)
3780       ;
3781   }
3782 #pragma omp task
3783   {
3784 #pragma omp target teams distribute parallel for // OK
3785     for (int i = 0; i < 10; ++i)
3786       ;
3787   }
3788 #pragma omp task
3789   {
3790 #pragma omp target teams distribute parallel for simd // OK
3791     for (int i = 0; i < 10; ++i)
3792       ;
3793   }
3794 #pragma omp task
3795   {
3796 #pragma omp target teams distribute simd // OK
3797     for (int i = 0; i < 10; ++i)
3798       ;
3799   }
3800 
3801 // ORDERED DIRECTIVE
3802 #pragma omp ordered
3803   {
3804 #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?}}
3805     for (int i = 0; i < 10; ++i)
3806       ;
3807   }
3808 #pragma omp ordered
3809   {
3810 #pragma omp simd
3811     for (int i = 0; i < 10; ++i)
3812       ;
3813   }
3814 #pragma omp ordered
3815   {
3816 #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?}}
3817     for (int i = 0; i < 10; ++i)
3818       ;
3819   }
3820 #pragma omp ordered
3821   {
3822 #pragma omp parallel
3823     for (int i = 0; i < 10; ++i)
3824       ;
3825   }
3826 #pragma omp ordered
3827   {
3828 #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?}}
3829     {
3830       bar();
3831     }
3832   }
3833 #pragma omp ordered
3834   {
3835 #pragma omp master // OK, though second 'ordered' is redundant
3836     {
3837       bar();
3838     }
3839   }
3840 #pragma omp ordered
3841   {
3842 #pragma omp critical
3843     {
3844       bar();
3845     }
3846   }
3847 #pragma omp ordered
3848   {
3849 #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?}}
3850     {
3851       bar();
3852     }
3853   }
3854 #pragma omp ordered
3855   {
3856 #pragma omp parallel for ordered
3857     for (int j = 0; j < 10; ++j) {
3858 #pragma omp ordered // OK
3859       {
3860         bar();
3861       }
3862     }
3863   }
3864 #pragma omp ordered
3865   {
3866 #pragma omp parallel for simd ordered
3867     for (int j = 0; j < 10; ++j) {
3868 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3869       {
3870         bar();
3871       }
3872     }
3873   }
3874 #pragma omp ordered
3875   {
3876 #pragma omp parallel for simd ordered
3877     for (int j = 0; j < 10; ++j) {
3878 #pragma omp ordered simd
3879       {
3880         bar();
3881       }
3882     }
3883   }
3884 #pragma omp ordered
3885   {
3886 #pragma omp parallel for
3887     for (int i = 0; i < 10; ++i)
3888       ;
3889   }
3890 #pragma omp ordered
3891   {
3892 #pragma omp parallel for simd
3893     for (int i = 0; i < 10; ++i)
3894       ;
3895   }
3896 #pragma omp ordered
3897   {
3898 #pragma omp parallel sections
3899     {
3900       bar();
3901     }
3902   }
3903 #pragma omp ordered
3904   {
3905 #pragma omp task
3906     {
3907       bar();
3908     }
3909   }
3910 #pragma omp ordered
3911   {
3912 #pragma omp taskyield
3913     bar();
3914   }
3915 #pragma omp ordered
3916   {
3917 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3918     bar();
3919   }
3920 #pragma omp ordered
3921   {
3922 #pragma omp scan // expected-error {{region cannot be closely nested inside 'ordered' region}}
3923     bar();
3924   }
3925 #pragma omp ordered
3926   {
3927 #pragma omp taskwait
3928     bar();
3929   }
3930 #pragma omp ordered
3931   {
3932 #pragma omp flush
3933     bar();
3934   }
3935 #pragma omp ordered
3936   {
3937 #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?}}
3938     bar();
3939   }
3940 #pragma omp ordered
3941   {
3942 #pragma omp atomic
3943     ++a;
3944   }
3945 #pragma omp ordered
3946   {
3947 #pragma omp target
3948     ++a;
3949   }
3950 #pragma omp ordered
3951   {
3952 #pragma omp target parallel
3953     ++a;
3954   }
3955 #pragma omp ordered
3956   {
3957 #pragma omp target parallel for ordered
3958     for (int j = 0; j < 10; ++j) {
3959 #pragma omp ordered // OK
3960       {
3961         bar();
3962       }
3963     }
3964   }
3965 #pragma omp ordered
3966   {
3967 #pragma omp target parallel for
3968     for (int i = 0; i < 10; ++i)
3969       ;
3970   }
3971 #pragma omp ordered
3972   {
3973 #pragma omp target enter data map(to: a)
3974     ++a;
3975   }
3976 #pragma omp ordered
3977   {
3978 #pragma omp target exit data map(from: a)
3979     ++a;
3980   }
3981 #pragma omp ordered
3982   {
3983 #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?}}
3984     ++a;
3985   }
3986 #pragma omp ordered
3987   {
3988 #pragma omp taskloop
3989   for (int i = 0; i < 10; ++i)
3990     ++a;
3991   }
3992 #pragma omp ordered
3993   {
3994 #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?}}
3995     for (int i = 0; i < 10; ++i)
3996       ;
3997   }
3998 #pragma omp ordered
3999   {
4000     bar();
4001 #pragma omp target update to(a)
4002     bar();
4003   }
4004 #pragma omp ordered
4005   {
4006 #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?}}
4007     for (int i = 0; i < 10; ++i)
4008       ;
4009   }
4010 #pragma omp ordered
4011   {
4012 #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?}}
4013     for (int i = 0; i < 10; ++i)
4014       ;
4015   }
4016 #pragma omp ordered
4017   {
4018 #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?}}
4019     for (int i = 0; i < 10; ++i)
4020       ;
4021   }
4022 #pragma omp ordered
4023   {
4024 #pragma omp target simd // OK
4025     for (int i = 0; i < 10; ++i)
4026       ;
4027   }
4028 #pragma omp ordered
4029   {
4030 #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?}}
4031     for (int i = 0; i < 10; ++i)
4032       ;
4033   }
4034 #pragma omp ordered
4035   {
4036 #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?}}
4037     for (int i = 0; i < 10; ++i)
4038       ;
4039   }
4040 #pragma omp ordered
4041   {
4042 #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?}}
4043     for (int i = 0; i < 10; ++i)
4044       ;
4045   }
4046 #pragma omp ordered
4047   {
4048 #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?}}
4049     for (int i = 0; i < 10; ++i)
4050       ;
4051   }
4052 #pragma omp ordered
4053   {
4054 #pragma omp target teams // OK
4055     a++;
4056   }
4057 #pragma omp ordered
4058   {
4059 #pragma omp target teams distribute // OK
4060     for (int i = 0; i < 10; ++i)
4061       ;
4062   }
4063 #pragma omp ordered
4064   {
4065 #pragma omp target teams distribute parallel for // OK
4066     for (int i = 0; i < 10; ++i)
4067       ;
4068   }
4069 #pragma omp ordered
4070   {
4071 #pragma omp target teams distribute parallel for simd // OK
4072     for (int i = 0; i < 10; ++i)
4073       ;
4074   }
4075 #pragma omp ordered
4076   {
4077 #pragma omp target teams distribute simd // OK
4078     for (int i = 0; i < 10; ++i)
4079       ;
4080   }
4081 
4082 // ATOMIC DIRECTIVE
4083 #pragma omp atomic
4084   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4085   // expected-note@+1 {{expected an expression statement}}
4086   {
4087 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4088     for (int i = 0; i < 10; ++i)
4089       ;
4090   }
4091 #pragma omp atomic
4092   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4093   // expected-note@+1 {{expected an expression statement}}
4094   {
4095 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4096     for (int i = 0; i < 10; ++i)
4097       ;
4098   }
4099 #pragma omp atomic
4100   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4101   // expected-note@+1 {{expected an expression statement}}
4102   {
4103 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4104     for (int i = 0; i < 10; ++i)
4105       ;
4106   }
4107 #pragma omp atomic
4108   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4109   // expected-note@+1 {{expected an expression statement}}
4110   {
4111 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4112     for (int i = 0; i < 10; ++i)
4113       ;
4114   }
4115 #pragma omp atomic
4116   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4117   // expected-note@+1 {{expected an expression statement}}
4118   {
4119 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4120     {
4121       bar();
4122     }
4123   }
4124 #pragma omp atomic
4125   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4126   // expected-note@+1 {{expected an expression statement}}
4127   {
4128 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4129     {
4130       bar();
4131     }
4132   }
4133 #pragma omp atomic
4134   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4135   // expected-note@+1 {{expected an expression statement}}
4136   {
4137 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4138     {
4139       bar();
4140     }
4141   }
4142 #pragma omp atomic
4143   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4144   // expected-note@+1 {{expected an expression statement}}
4145   {
4146 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4147     {
4148       bar();
4149     }
4150   }
4151 #pragma omp atomic
4152   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4153   // expected-note@+1 {{expected an expression statement}}
4154   {
4155 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4156     {
4157       bar();
4158     }
4159   }
4160 #pragma omp atomic
4161   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4162   // expected-note@+1 {{expected an expression statement}}
4163   {
4164 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4165     {
4166       bar();
4167     }
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 lvalue expression with scalar type}}
4171   // expected-note@+1 {{expected an expression statement}}
4172   {
4173 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4174     for (int i = 0; i < 10; ++i)
4175       ;
4176   }
4177 #pragma omp atomic
4178   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4179   // expected-note@+1 {{expected an expression statement}}
4180   {
4181 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4182     for (int i = 0; i < 10; ++i)
4183       ;
4184   }
4185 #pragma omp atomic
4186   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4187   // expected-note@+1 {{expected an expression statement}}
4188   {
4189 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4190     {
4191       bar();
4192     }
4193   }
4194 #pragma omp atomic
4195   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4196   // expected-note@+1 {{expected an expression statement}}
4197   {
4198 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4199     {
4200       bar();
4201     }
4202   }
4203 #pragma omp atomic
4204   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4205   // expected-note@+1 {{expected an expression statement}}
4206   {
4207 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4208     bar();
4209   }
4210 #pragma omp atomic
4211   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4212   // expected-note@+1 {{expected an expression statement}}
4213   {
4214 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4215     bar();
4216   }
4217 #pragma omp atomic
4218   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4219   // expected-note@+1 {{expected an expression statement}}
4220   {
4221 #pragma omp scan // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4222     bar();
4223   }
4224 #pragma omp atomic
4225   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4226   // expected-note@+1 {{expected an expression statement}}
4227   {
4228 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4229     bar();
4230   }
4231 #pragma omp atomic
4232   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4233   // expected-note@+1 {{expected an expression statement}}
4234   {
4235 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4236     bar();
4237   }
4238 #pragma omp atomic
4239   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4240   // expected-note@+1 {{expected an expression statement}}
4241   {
4242 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4243     bar();
4244   }
4245 #pragma omp atomic
4246   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4247   // expected-note@+1 {{expected an expression statement}}
4248   {
4249 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4250     ++a;
4251   }
4252 #pragma omp atomic
4253   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4254   // expected-note@+1 {{expected an expression statement}}
4255   {
4256 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4257     ++a;
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 lvalue expression with scalar type}}
4261   // expected-note@+1 {{expected an expression statement}}
4262   {
4263 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4264     ++a;
4265   }
4266 #pragma omp atomic
4267   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4268   // expected-note@+1 {{expected an expression statement}}
4269   {
4270 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4271     for (int i = 0; i < 10; ++i)
4272       ;
4273   }
4274 #pragma omp atomic
4275   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4276   // expected-note@+1 {{expected an expression statement}}
4277   {
4278 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4279     ++a;
4280   }
4281 #pragma omp atomic
4282   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4283   // expected-note@+1 {{expected an expression statement}}
4284   {
4285 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4286     ++a;
4287   }
4288 #pragma omp atomic
4289   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4290   // expected-note@+1 {{expected an expression statement}}
4291   {
4292 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4293     ++a;
4294   }
4295 #pragma omp atomic
4296   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4297   // expected-note@+1 {{expected an expression statement}}
4298   {
4299 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4300   for (int i = 0; i < 10; ++i)
4301     ++a;
4302   }
4303 #pragma omp atomic
4304   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4305   // expected-note@+1 {{expected an expression statement}}
4306   {
4307 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4308     for (int i = 0; i < 10; ++i)
4309       ;
4310   }
4311 #pragma omp atomic
4312   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4313   // expected-note@+1 {{expected an expression statement}}
4314   {
4315 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4316     bar();
4317   }
4318 #pragma omp atomic
4319   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4320   // expected-note@+1 {{expected an expression statement}}
4321   {
4322 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4323     for (int i = 0; i < 10; ++i)
4324       ;
4325   }
4326 #pragma omp atomic
4327   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4328   // expected-note@+1 {{expected an expression statement}}
4329   {
4330 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4331     for (int i = 0; i < 10; ++i)
4332       ;
4333   }
4334 #pragma omp atomic
4335   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4336   // expected-note@+1 {{expected an expression statement}}
4337   {
4338 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4339     for (int i = 0; i < 10; ++i)
4340       ;
4341   }
4342 #pragma omp atomic
4343   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4344   // expected-note@+1 {{expected an expression statement}}
4345   {
4346 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4347     for (int i = 0; i < 10; ++i)
4348       ;
4349   }
4350 #pragma omp atomic
4351   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4352   // expected-note@+1 {{expected an expression statement}}
4353   {
4354 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4355     for (int i = 0; i < 10; ++i)
4356       ;
4357   }
4358 #pragma omp atomic
4359   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4360   // expected-note@+1 {{expected an expression statement}}
4361   {
4362 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4363     for (int i = 0; i < 10; ++i)
4364       ;
4365   }
4366 #pragma omp atomic
4367   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4368   // expected-note@+1 {{expected an expression statement}}
4369   {
4370 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4371     for (int i = 0; i < 10; ++i)
4372       ;
4373   }
4374 #pragma omp atomic
4375   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4376   // expected-note@+1 {{expected an expression statement}}
4377   {
4378 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4379     for (int i = 0; i < 10; ++i)
4380       ;
4381   }
4382 #pragma omp atomic
4383   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4384   // expected-note@+1 {{expected an expression statement}}
4385   {
4386 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4387     a++;
4388   }
4389 #pragma omp atomic
4390   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4391   // expected-note@+1 {{expected an expression statement}}
4392   {
4393 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4394     for (int i = 0; i < 10; ++i)
4395       ;
4396   }
4397 #pragma omp atomic
4398   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4399   // expected-note@+1 {{expected an expression statement}}
4400   {
4401 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4402     for (int i = 0; i < 10; ++i)
4403       ;
4404   }
4405 #pragma omp atomic
4406   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4407   // expected-note@+1 {{expected an expression statement}}
4408   {
4409 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4410     for (int i = 0; i < 10; ++i)
4411       ;
4412   }
4413 #pragma omp atomic
4414   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
4415   // expected-note@+1 {{expected an expression statement}}
4416   {
4417 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4418     for (int i = 0; i < 10; ++i)
4419       ;
4420   }
4421 
4422 // TARGET DIRECTIVE
4423 #pragma omp target
4424 #pragma omp parallel
4425   bar();
4426 #pragma omp target
4427 #pragma omp for
4428   for (int i = 0; i < 10; ++i)
4429     ;
4430 #pragma omp target
4431 #pragma omp simd
4432   for (int i = 0; i < 10; ++i)
4433     ;
4434 #pragma omp target
4435 #pragma omp for simd
4436   for (int i = 0; i < 10; ++i)
4437     ;
4438 #pragma omp target
4439 #pragma omp sections
4440   {
4441     bar();
4442   }
4443 #pragma omp target
4444 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
4445   {
4446     bar();
4447   }
4448 #pragma omp target
4449 #pragma omp single
4450   bar();
4451 
4452 #pragma omp target
4453 #pragma omp master
4454   {
4455     bar();
4456   }
4457 #pragma omp target
4458 #pragma omp critical
4459   {
4460     bar();
4461   }
4462 #pragma omp target
4463 #pragma omp parallel for
4464   for (int i = 0; i < 10; ++i)
4465     ;
4466 #pragma omp target
4467 #pragma omp parallel for simd
4468   for (int i = 0; i < 10; ++i)
4469     ;
4470 #pragma omp target
4471 #pragma omp parallel sections
4472   {
4473     bar();
4474   }
4475 #pragma omp target
4476 #pragma omp task
4477   {
4478     bar();
4479   }
4480 #pragma omp target
4481   {
4482 #pragma omp taskyield
4483     bar();
4484   }
4485 #pragma omp target
4486   {
4487 #pragma omp barrier
4488     bar();
4489   }
4490 #pragma omp target
4491   {
4492 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
4493     bar();
4494   }
4495 #pragma omp target
4496   {
4497 #pragma omp taskwait
4498     bar();
4499   }
4500 #pragma omp target
4501   {
4502 #pragma omp flush
4503     bar();
4504   }
4505 #pragma omp target
4506   {
4507 #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?}}
4508     bar();
4509   }
4510 #pragma omp target
4511   {
4512 #pragma omp atomic
4513     ++a;
4514   }
4515 #pragma omp target
4516   {
4517 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4518     ++a;
4519   }
4520 #pragma omp target
4521   {
4522 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4523     ++a;
4524   }
4525 #pragma omp target
4526 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4527   for (int i = 0; i < 10; ++i)
4528     ;
4529 #pragma omp target
4530   {
4531 #pragma omp teams
4532     ++a;
4533   }
4534 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4535   {
4536 #pragma omp teams // expected-note {{directive outside teams construct here}}
4537     ++a;
4538 #pragma omp teams // expected-note {{nested teams construct here}}
4539     ++a;
4540   }
4541 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4542   {
4543     ++a;           // expected-note {{statement outside teams construct here}}
4544 #pragma omp teams  // expected-note {{nested teams construct here}}
4545     ++a;
4546   }
4547 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4548   {
4549     while (0)      // expected-note {{statement outside teams construct here}}
4550 #pragma omp teams  // expected-note {{nested teams construct here}}
4551     ++a;
4552   }
4553 #pragma omp target
4554   {
4555 #pragma omp taskloop
4556   for (int i = 0; i < 10; ++i)
4557     ++a;
4558   }
4559 #pragma omp target
4560   {
4561 #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?}}
4562     for (int i = 0; i < 10; ++i)
4563       ;
4564   }
4565 #pragma omp target
4566   {
4567 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4568   }
4569 #pragma omp target
4570   {
4571 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4572   }
4573 #pragma omp target
4574   {
4575 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4576   }
4577 #pragma omp target
4578   {
4579 #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?}}
4580     for (int i = 0; i < 10; ++i)
4581       ;
4582   }
4583 #pragma omp target
4584   {
4585 #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?}}
4586     for (int i = 0; i < 10; ++i)
4587       ;
4588   }
4589 #pragma omp target
4590   {
4591 #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?}}
4592     for (int i = 0; i < 10; ++i)
4593       ;
4594   }
4595 #pragma omp target
4596   {
4597 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4598     for (int i = 0; i < 10; ++i)
4599       ;
4600   }
4601 #pragma omp target
4602   {
4603 #pragma omp teams distribute // OK
4604     for (int i = 0; i < 10; ++i)
4605       ;
4606   }
4607 #pragma omp target
4608   {
4609 #pragma omp teams distribute simd // OK
4610     for (int i = 0; i < 10; ++i)
4611       ;
4612   }
4613 #pragma omp target
4614   {
4615 #pragma omp teams distribute parallel for simd // OK
4616     for (int i = 0; i < 10; ++i)
4617       ;
4618   }
4619 #pragma omp target
4620   {
4621 #pragma omp teams distribute parallel for // OK
4622     for (int i = 0; i < 10; ++i)
4623       ;
4624   }
4625 #pragma omp target
4626   {
4627 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4628     for (int i = 0; i < 10; ++i)
4629       ;
4630   }
4631 #pragma omp target
4632   {
4633 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4634     for (int i = 0; i < 10; ++i)
4635       ;
4636   }
4637 #pragma omp target
4638   {
4639 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4640     for (int i = 0; i < 10; ++i)
4641       ;
4642   }
4643 #pragma omp target
4644   {
4645 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4646     for (int i = 0; i < 10; ++i)
4647       ;
4648   }
4649 #pragma omp target
4650   {
4651 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4652     for (int i = 0; i < 10; ++i)
4653       ;
4654   }
4655 
4656 // TARGET PARALLEL DIRECTIVE
4657 #pragma omp target parallel
4658 #pragma omp parallel
4659   bar();
4660 #pragma omp target parallel
4661 #pragma omp for
4662   for (int i = 0; i < 10; ++i)
4663     ;
4664 #pragma omp target parallel
4665 #pragma omp simd
4666   for (int i = 0; i < 10; ++i)
4667     ;
4668 #pragma omp target parallel
4669 #pragma omp for simd
4670   for (int i = 0; i < 10; ++i)
4671     ;
4672 #pragma omp target parallel
4673 #pragma omp sections
4674   {
4675     bar();
4676   }
4677 #pragma omp target parallel
4678 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
4679   {
4680     bar();
4681   }
4682 #pragma omp target parallel
4683 #pragma omp single
4684   bar();
4685 
4686 #pragma omp target parallel
4687 #pragma omp master
4688   {
4689     bar();
4690   }
4691 #pragma omp target
4692 #pragma omp parallel master
4693   {
4694     bar();
4695   }
4696 #pragma omp target parallel
4697 #pragma omp critical
4698   {
4699     bar();
4700   }
4701 #pragma omp target parallel
4702 #pragma omp parallel for
4703   for (int i = 0; i < 10; ++i)
4704     ;
4705 #pragma omp target parallel
4706 #pragma omp parallel for simd
4707   for (int i = 0; i < 10; ++i)
4708     ;
4709 #pragma omp target parallel
4710 #pragma omp parallel sections
4711   {
4712     bar();
4713   }
4714 #pragma omp target parallel
4715 #pragma omp task
4716   {
4717     bar();
4718   }
4719 #pragma omp target parallel
4720   {
4721 #pragma omp taskyield
4722     bar();
4723   }
4724 #pragma omp target parallel
4725   {
4726 #pragma omp barrier
4727     bar();
4728   }
4729 #pragma omp target parallel
4730   {
4731 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
4732     bar();
4733   }
4734 #pragma omp target parallel
4735   {
4736 #pragma omp taskwait
4737     bar();
4738   }
4739 #pragma omp target parallel
4740   {
4741 #pragma omp flush
4742     bar();
4743   }
4744 #pragma omp target parallel
4745   {
4746 #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?}}
4747     bar();
4748   }
4749 #pragma omp target parallel
4750   {
4751 #pragma omp atomic
4752     ++a;
4753   }
4754 #pragma omp target parallel
4755   {
4756 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
4757     ++a;
4758   }
4759 #pragma omp target parallel
4760   {
4761 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
4762     ++a;
4763   }
4764 #pragma omp target parallel
4765 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4766   for (int i = 0; i < 10; ++i)
4767     ;
4768 #pragma omp target parallel
4769   {
4770 #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?}}
4771     ++a;
4772   }
4773 #pragma omp target parallel
4774   {
4775     ++a;
4776 #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?}}
4777     ++a;
4778   }
4779 #pragma omp target parallel
4780   {
4781 #pragma omp taskloop
4782   for (int i = 0; i < 10; ++i)
4783     ++a;
4784   }
4785 #pragma omp target parallel
4786   {
4787 #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?}}
4788     for (int i = 0; i < 10; ++i)
4789       ;
4790   }
4791 #pragma omp target parallel
4792   {
4793 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4794   }
4795 #pragma omp target parallel
4796   {
4797 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4798   }
4799 #pragma omp target parallel
4800   {
4801 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4802   }
4803 #pragma omp target parallel
4804   {
4805 #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?}}
4806     for (int i = 0; i < 10; ++i)
4807       ;
4808   }
4809 #pragma omp target parallel
4810   {
4811 #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?}}
4812     for (int i = 0; i < 10; ++i)
4813       ;
4814   }
4815 #pragma omp target parallel
4816   {
4817 #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?}}
4818     for (int i = 0; i < 10; ++i)
4819       ;
4820   }
4821 #pragma omp target parallel
4822   {
4823 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4824     for (int i = 0; i < 10; ++i)
4825       ;
4826   }
4827 #pragma omp target parallel
4828   {
4829 #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?}}
4830     for (int i = 0; i < 10; ++i)
4831       ;
4832   }
4833 #pragma omp target parallel
4834   {
4835 #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?}}
4836     for (int i = 0; i < 10; ++i)
4837       ;
4838   }
4839 #pragma omp target parallel
4840   {
4841 #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?}}
4842     for (int i = 0; i < 10; ++i)
4843       ;
4844   }
4845 #pragma omp target parallel
4846   {
4847 #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?}}
4848     for (int i = 0; i < 10; ++i)
4849       ;
4850   }
4851 #pragma omp target parallel
4852   {
4853 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
4854     a++;
4855   }
4856 #pragma omp target parallel
4857   {
4858 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
4859     for (int i = 0; i < 10; ++i)
4860       ;
4861   }
4862 #pragma omp target parallel
4863   {
4864 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4865     for (int i = 0; i < 10; ++i)
4866       ;
4867   }
4868 #pragma omp target parallel
4869   {
4870 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4871     for (int i = 0; i < 10; ++i)
4872       ;
4873   }
4874 #pragma omp target parallel
4875   {
4876 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4877     for (int i = 0; i < 10; ++i)
4878       ;
4879   }
4880 
4881 // TARGET PARALLEL FOR DIRECTIVE
4882 #pragma omp target parallel for
4883   for (int i = 0; i < 10; ++i) {
4884 #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?}}
4885     for (int i = 0; i < 10; ++i)
4886       ;
4887   }
4888 #pragma omp target parallel for
4889   for (int i = 0; i < 10; ++i) {
4890 #pragma omp simd
4891     for (int i = 0; i < 10; ++i)
4892       ;
4893   }
4894 #pragma omp target parallel for
4895   for (int i = 0; i < 10; ++i) {
4896 #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?}}
4897     for (int i = 0; i < 10; ++i)
4898       ;
4899   }
4900 #pragma omp target parallel for
4901   for (int i = 0; i < 10; ++i) {
4902 #pragma omp parallel
4903     for (int i = 0; i < 10; ++i)
4904       ;
4905   }
4906 #pragma omp target parallel for
4907   for (int i = 0; i < 10; ++i) {
4908 #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?}}
4909     {
4910       bar();
4911     }
4912   }
4913 #pragma omp target parallel for
4914   for (int i = 0; i < 10; ++i) {
4915 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
4916     {
4917       bar();
4918     }
4919   }
4920 #pragma omp target parallel for
4921   for (int i = 0; i < 10; ++i) {
4922 #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?}}
4923     {
4924       bar();
4925     }
4926   }
4927 
4928 #pragma omp target parallel for
4929   for (int i = 0; i < 10; ++i) {
4930 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4931     {
4932       bar();
4933     }
4934   }
4935 
4936 #pragma omp target parallel for
4937   for (int i = 0; i < 10; ++i) {
4938 #pragma omp critical
4939     {
4940       bar();
4941     }
4942   }
4943 
4944 #pragma omp target parallel for
4945   for (int i = 0; i < 10; ++i) {
4946 #pragma omp parallel
4947     {
4948 #pragma omp single // OK
4949       {
4950         bar();
4951       }
4952 #pragma omp for // OK
4953       for (int i = 0; i < 10; ++i)
4954         ;
4955 #pragma omp for simd // OK
4956       for (int i = 0; i < 10; ++i)
4957         ;
4958 #pragma omp sections // OK
4959       {
4960         bar();
4961       }
4962     }
4963   }
4964 #pragma omp target parallel for
4965   for (int i = 0; i < 10; ++i) {
4966 #pragma omp parallel for
4967     for (int i = 0; i < 10; ++i)
4968       ;
4969   }
4970 #pragma omp target parallel for
4971   for (int i = 0; i < 10; ++i) {
4972 #pragma omp parallel for simd
4973     for (int i = 0; i < 10; ++i)
4974       ;
4975   }
4976 #pragma omp target parallel for
4977   for (int i = 0; i < 10; ++i) {
4978 #pragma omp parallel sections
4979     {
4980       bar();
4981     }
4982   }
4983 #pragma omp target parallel for
4984   for (int i = 0; i < 10; ++i) {
4985 #pragma omp task
4986     {
4987       bar();
4988     }
4989   }
4990 #pragma omp target parallel for
4991   for (int i = 0; i < 10; ++i) {
4992 #pragma omp taskyield
4993     bar();
4994   }
4995 #pragma omp target parallel for
4996   for (int i = 0; i < 10; ++i) {
4997 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4998     bar();
4999   }
5000 #pragma omp target parallel for
5001   for (int i = 0; i < 10; ++i) {
5002 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
5003     bar();
5004   }
5005 #pragma omp target parallel for
5006   for (int i = 0; i < 10; ++i) {
5007 #pragma omp taskwait
5008     bar();
5009   }
5010 #pragma omp target parallel for
5011   for (int i = 0; i < 10; ++i) {
5012 #pragma omp flush
5013     bar();
5014   }
5015 #pragma omp target parallel for
5016   for (int i = 0; i < 10; ++i) {
5017 #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?}}
5018     bar();
5019   }
5020 #pragma omp target parallel for ordered
5021   for (int i = 0; i < 10; ++i) {
5022 #pragma omp ordered // OK
5023     bar();
5024   }
5025 #pragma omp target parallel for
5026   for (int i = 0; i < 10; ++i) {
5027 #pragma omp atomic
5028     ++a;
5029   }
5030 #pragma omp target parallel for
5031   for (int i = 0; i < 10; ++i) {
5032 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
5033     ++a;
5034   }
5035 #pragma omp target parallel for
5036   for (int i = 0; i < 10; ++i) {
5037 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
5038     ++a;
5039   }
5040 #pragma omp target parallel for
5041   for (int i = 0; i < 10; ++i) {
5042 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
5043     for (int i = 0; i < 10; ++i)
5044       ;
5045   }
5046 #pragma omp target parallel for
5047   for (int i = 0; i < 10; ++i) {
5048 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5049     ++a;
5050   }
5051 #pragma omp target parallel for
5052   for (int i = 0; i < 10; ++i) {
5053 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5054     ++a;
5055   }
5056 #pragma omp target parallel for
5057   for (int i = 0; i < 10; ++i) {
5058 #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?}}
5059     ++a;
5060   }
5061 #pragma omp target parallel for
5062   for (int i = 0; i < 10; ++i) {
5063 #pragma omp taskloop
5064   for (int i = 0; i < 10; ++i)
5065     ++a;
5066   }
5067 #pragma omp target parallel for
5068   for (int i = 0; i < 10; ++i) {
5069 #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?}}
5070     for (int j = 0; j < 10; ++j)
5071       ;
5072   }
5073 #pragma omp target parallel for
5074   for (int i = 0; i < 10; ++i) {
5075 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5076   }
5077 #pragma omp target parallel for
5078   for (int i = 0; i < 10; ++i) {
5079 #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?}}
5080     for (int j = 0; j < 10; ++j)
5081       ;
5082   }
5083 #pragma omp target parallel for
5084   for (int i = 0; i < 10; ++i) {
5085 #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?}}
5086     for (int j = 0; j < 10; ++j)
5087       ;
5088   }
5089 #pragma omp target parallel for
5090   for (int i = 0; i < 10; ++i) {
5091 #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?}}
5092     for (int j = 0; j < 10; ++j)
5093       ;
5094   }
5095 #pragma omp target parallel for
5096   for (int i = 0; i < 10; ++i) {
5097 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5098     for (int j = 0; j < 10; ++j)
5099       ;
5100   }
5101 #pragma omp target parallel for
5102   for (int i = 0; i < 10; ++i) {
5103 #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?}}
5104     for (int j = 0; j < 10; ++j)
5105       ;
5106   }
5107 #pragma omp target parallel for
5108   for (int i = 0; i < 10; ++i) {
5109 #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?}}
5110     for (int j = 0; j < 10; ++j)
5111       ;
5112   }
5113 #pragma omp target parallel for
5114   for (int i = 0; i < 10; ++i) {
5115 #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?}}
5116     for (int j = 0; j < 10; ++j)
5117       ;
5118   }
5119 #pragma omp target parallel for
5120   for (int i = 0; i < 10; ++i) {
5121 #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?}}
5122     for (int j = 0; j < 10; ++j)
5123       ;
5124   }
5125 #pragma omp target parallel for
5126   for (int i = 0; i < 10; ++i) {
5127 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
5128     a++;
5129   }
5130 #pragma omp target parallel for
5131   for (int i = 0; i < 10; ++i) {
5132 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
5133     for (int j = 0; j < 10; ++j)
5134       ;
5135   }
5136 #pragma omp target parallel for
5137   for (int i = 0; i < 10; ++i) {
5138 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
5139     for (int j = 0; j < 10; ++j)
5140       ;
5141   }
5142 #pragma omp target parallel for
5143   for (int i = 0; i < 10; ++i) {
5144 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5145     for (int j = 0; j < 10; ++j)
5146       ;
5147   }
5148 #pragma omp target parallel for
5149   for (int i = 0; i < 10; ++i) {
5150 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5151     for (int j = 0; j < 10; ++j)
5152       ;
5153   }
5154 
5155 // TEAMS DIRECTIVE
5156 #pragma omp teams // omp45-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5157   bar();
5158 #pragma omp target
5159 #pragma omp teams
5160 #pragma omp parallel
5161   bar();
5162 #pragma omp target
5163 #pragma omp teams
5164 #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?}}
5165   for (int i = 0; i < 10; ++i)
5166     ;
5167 #pragma omp target
5168 #pragma omp teams
5169 #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?}}
5170   for (int i = 0; i < 10; ++i)
5171     ;
5172 #pragma omp target
5173 #pragma omp teams
5174 #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?}}
5175   for (int i = 0; i < 10; ++i)
5176     ;
5177 #pragma omp target
5178 #pragma omp teams
5179 #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?}}
5180   {
5181     bar();
5182   }
5183 #pragma omp target
5184 #pragma omp teams
5185 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
5186   {
5187     bar();
5188   }
5189 #pragma omp target
5190 #pragma omp teams
5191 #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?}}
5192   bar();
5193 
5194 #pragma omp target
5195 #pragma omp teams
5196 #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?}}
5197   {
5198     bar();
5199   }
5200 #pragma omp target
5201 #pragma omp teams
5202 #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?}}
5203   {
5204     bar();
5205   }
5206 #pragma omp target
5207 #pragma omp teams
5208 #pragma omp parallel for
5209   for (int i = 0; i < 10; ++i)
5210     ;
5211 #pragma omp target
5212 #pragma omp teams
5213 #pragma omp parallel for simd
5214   for (int i = 0; i < 10; ++i)
5215     ;
5216 #pragma omp target
5217 #pragma omp teams
5218 #pragma omp parallel sections
5219   {
5220     bar();
5221   }
5222 #pragma omp target
5223 #pragma omp teams
5224 #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?}}
5225   {
5226     bar();
5227   }
5228 #pragma omp target
5229 #pragma omp teams
5230   {
5231 #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?}}
5232     bar();
5233   }
5234 #pragma omp target
5235 #pragma omp teams
5236   {
5237 #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?}}
5238     bar();
5239   }
5240 #pragma omp target
5241 #pragma omp teams
5242   {
5243 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
5244     bar();
5245   }
5246 #pragma omp target
5247 #pragma omp teams
5248   {
5249 #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?}}
5250     bar();
5251   }
5252 #pragma omp target
5253 #pragma omp teams
5254   {
5255 #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?}}
5256     bar();
5257   }
5258 #pragma omp target
5259 #pragma omp teams
5260   {
5261 #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?}}
5262     bar();
5263   }
5264 #pragma omp target
5265 #pragma omp teams
5266   {
5267 #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?}}
5268     ++a;
5269   }
5270 #pragma omp target
5271 #pragma omp teams
5272   {
5273 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5274     ++a;
5275   }
5276 #pragma omp target
5277 #pragma omp teams
5278   {
5279 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5280     ++a;
5281   }
5282 #pragma omp target
5283 #pragma omp teams
5284 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5285   for (int i = 0; i < 10; ++i)
5286     ;
5287 #pragma omp target
5288 #pragma omp teams
5289   {
5290 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5291     ++a;
5292   }
5293 #pragma omp target
5294 #pragma omp teams
5295   {
5296 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5297     ++a;
5298   }
5299 #pragma omp target
5300 #pragma omp teams
5301   {
5302 #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?}}
5303     ++a;
5304   }
5305 #pragma omp target
5306 #pragma omp teams
5307   {
5308 #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?}}
5309   for (int i = 0; i < 10; ++i)
5310     ++a;
5311   }
5312 #pragma omp target
5313 #pragma omp teams
5314 #pragma omp distribute
5315   for (int i = 0; i < 10; ++i)
5316     ;
5317 #pragma omp target
5318 #pragma omp teams
5319 #pragma omp distribute
5320   for (int i = 0; i < 10; ++i)
5321     ;
5322 #pragma omp distribute
5323   for (int j = 0; j < 10; ++j)
5324     ;
5325 #pragma omp target
5326 #pragma omp teams
5327   {
5328 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5329   }
5330 #pragma omp target
5331 #pragma omp teams
5332   {
5333 #pragma omp distribute parallel for
5334   for (int i = 0; i < 10; ++i)
5335     ;
5336 #pragma omp distribute parallel for
5337   for (int j = 0; j < 10; ++j)
5338     ;
5339   }
5340 #pragma omp target
5341 #pragma omp teams
5342   {
5343 #pragma omp distribute parallel for simd
5344   for (int i = 0; i < 10; ++i)
5345     ;
5346 #pragma omp distribute parallel for simd
5347   for (int j = 0; j < 10; ++j)
5348     ;
5349   }
5350 #pragma omp target
5351 #pragma omp teams
5352   {
5353 #pragma omp distribute simd
5354   for (int i = 0; i < 10; ++i)
5355     ;
5356 #pragma omp distribute simd
5357   for (int j = 0; j < 10; ++j)
5358     ;
5359   }
5360 #pragma omp target
5361 #pragma omp teams
5362   {
5363 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5364   for (int i = 0; i < 10; ++i)
5365     ;
5366   }
5367 #pragma omp target
5368 #pragma omp teams
5369   {
5370 #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?}}
5371   for (int i = 0; i < 10; ++i)
5372     ;
5373   }
5374 #pragma omp target
5375 #pragma omp teams
5376   {
5377 #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?}}
5378   for (int i = 0; i < 10; ++i)
5379     ;
5380   }
5381 #pragma omp target
5382 #pragma omp teams
5383   {
5384 #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?}}
5385   for (int i = 0; i < 10; ++i)
5386     ;
5387   }
5388 #pragma omp target
5389 #pragma omp teams
5390   {
5391 #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?}}
5392   for (int i = 0; i < 10; ++i)
5393     ;
5394   }
5395 #pragma omp target
5396 #pragma omp teams
5397   {
5398 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5399     a++;
5400   }
5401 #pragma omp target
5402 #pragma omp teams
5403   {
5404 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5405   for (int i = 0; i < 10; ++i)
5406     ;
5407   }
5408 #pragma omp target
5409 #pragma omp teams
5410   {
5411 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5412   for (int i = 0; i < 10; ++i)
5413     ;
5414   }
5415 #pragma omp target
5416 #pragma omp teams
5417   {
5418 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5419   for (int i = 0; i < 10; ++i)
5420     ;
5421   }
5422 #pragma omp target
5423 #pragma omp teams
5424   {
5425 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5426   for (int i = 0; i < 10; ++i)
5427     ;
5428   }
5429 
5430 // TASKLOOP DIRECTIVE
5431 #pragma omp taskloop
5432   for (int i = 0; i < 10; ++i) {
5433 #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?}}
5434     for (int i = 0; i < 10; ++i)
5435       ;
5436   }
5437 #pragma omp taskloop
5438   for (int i = 0; i < 10; ++i) {
5439 #pragma omp simd
5440     for (int i = 0; i < 10; ++i)
5441       ;
5442   }
5443 #pragma omp taskloop
5444   for (int i = 0; i < 10; ++i) {
5445 #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?}}
5446     for (int i = 0; i < 10; ++i)
5447       ;
5448   }
5449 #pragma omp taskloop
5450   for (int i = 0; i < 10; ++i) {
5451 #pragma omp parallel
5452     for (int i = 0; i < 10; ++i)
5453       ;
5454   }
5455 #pragma omp taskloop
5456   for (int i = 0; i < 10; ++i) {
5457 #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?}}
5458     {
5459       bar();
5460     }
5461   }
5462 #pragma omp taskloop
5463   for (int i = 0; i < 10; ++i) {
5464 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
5465     {
5466       bar();
5467     }
5468   }
5469 #pragma omp taskloop
5470   for (int i = 0; i < 10; ++i) {
5471 #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?}}
5472     {
5473       bar();
5474     }
5475   }
5476 
5477 #pragma omp taskloop
5478   for (int i = 0; i < 10; ++i) {
5479 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5480     {
5481       bar();
5482     }
5483   }
5484 #pragma omp taskloop
5485   for (int i = 0; i < 10; ++i) {
5486 #pragma omp critical
5487     {
5488       bar();
5489     }
5490   }
5491 #pragma omp taskloop
5492   for (int i = 0; i < 10; ++i) {
5493 #pragma omp parallel
5494     {
5495 #pragma omp single // OK
5496       {
5497         bar();
5498       }
5499 #pragma omp for // OK
5500       for (int i = 0; i < 10; ++i)
5501         ;
5502 #pragma omp sections // OK
5503       {
5504         bar();
5505       }
5506     }
5507   }
5508 #pragma omp taskloop
5509   for (int i = 0; i < 10; ++i) {
5510 #pragma omp parallel for
5511     for (int i = 0; i < 10; ++i)
5512       ;
5513   }
5514 #pragma omp taskloop
5515   for (int i = 0; i < 10; ++i) {
5516 #pragma omp parallel for simd
5517     for (int i = 0; i < 10; ++i)
5518       ;
5519   }
5520 #pragma omp taskloop
5521   for (int i = 0; i < 10; ++i) {
5522 #pragma omp parallel sections
5523     {
5524       bar();
5525     }
5526   }
5527 #pragma omp taskloop
5528   for (int i = 0; i < 10; ++i) {
5529 #pragma omp task
5530     {
5531       bar();
5532     }
5533   }
5534 #pragma omp taskloop
5535   for (int i = 0; i < 10; ++i) {
5536 #pragma omp taskyield
5537     bar();
5538   }
5539 #pragma omp taskloop
5540   for (int i = 0; i < 10; ++i) {
5541 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5542     bar();
5543   }
5544 #pragma omp taskloop
5545   for (int i = 0; i < 10; ++i) {
5546 #pragma omp scan // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5547     bar();
5548   }
5549 #pragma omp taskloop
5550   for (int i = 0; i < 10; ++i) {
5551 #pragma omp taskwait
5552     bar();
5553   }
5554 #pragma omp taskloop
5555   for (int i = 0; i < 10; ++i) {
5556 #pragma omp flush
5557     bar();
5558   }
5559 #pragma omp taskloop
5560   for (int i = 0; i < 10; ++i) {
5561 #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?}}
5562     bar();
5563   }
5564 #pragma omp taskloop
5565   for (int i = 0; i < 10; ++i) {
5566 #pragma omp atomic
5567     ++a;
5568   }
5569 #pragma omp taskloop
5570   for (int i = 0; i < 10; ++i) {
5571 #pragma omp target
5572     ++a;
5573   }
5574 #pragma omp taskloop
5575   for (int i = 0; i < 10; ++i) {
5576 #pragma omp target parallel
5577     ++a;
5578   }
5579 #pragma omp taskloop
5580   for (int i = 0; i < 10; ++i) {
5581 #pragma omp target parallel for
5582     for (int i = 0; i < 10; ++i)
5583       ;
5584   }
5585 #pragma omp taskloop
5586   for (int i = 0; i < 10; ++i) {
5587 #pragma omp target enter data map(to: a)
5588     ++a;
5589   }
5590 #pragma omp taskloop
5591   for (int i = 0; i < 10; ++i) {
5592 #pragma omp target exit data map(from: a)
5593     ++a;
5594   }
5595 #pragma omp taskloop
5596   for (int i = 0; i < 10; ++i) {
5597 #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?}}
5598     ++a;
5599   }
5600 #pragma omp taskloop
5601   for (int i = 0; i < 10; ++i) {
5602 #pragma omp taskloop
5603   for (int i = 0; i < 10; ++i)
5604     ++a;
5605   }
5606 #pragma omp taskloop
5607   for (int i = 0; i < 10; ++i) {
5608 #pragma omp target update to(a)
5609     bar();
5610   }
5611 #pragma omp taskloop
5612   for (int i = 0; i < 10; ++i) {
5613 #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?}}
5614   for (int j = 0; j < 10; ++j)
5615     ++a;
5616   }
5617 #pragma omp taskloop
5618   for (int i = 0; i < 10; ++i) {
5619 #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?}}
5620   for (int j = 0; j < 10; ++j)
5621     ++a;
5622   }
5623 #pragma omp taskloop
5624   for (int i = 0; i < 10; ++i) {
5625 #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?}}
5626   for (int j = 0; j < 10; ++j)
5627     ++a;
5628   }
5629 #pragma omp taskloop
5630   for (int i = 0; i < 10; ++i) {
5631 #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?}}
5632   for (int j = 0; j < 10; ++j)
5633     ++a;
5634   }
5635 #pragma omp taskloop
5636   for (int i = 0; i < 10; ++i) {
5637 #pragma omp target simd // OK
5638   for (int j = 0; j < 10; ++j)
5639     ++a;
5640   }
5641 #pragma omp taskloop
5642   for (int i = 0; i < 10; ++i) {
5643 #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?}}
5644   for (int j = 0; j < 10; ++j)
5645     ++a;
5646   }
5647 #pragma omp taskloop
5648   for (int i = 0; i < 10; ++i) {
5649 #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?}}
5650   for (int j = 0; j < 10; ++j)
5651     ++a;
5652   }
5653 #pragma omp taskloop
5654   for (int i = 0; i < 10; ++i) {
5655 #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?}}
5656   for (int j = 0; j < 10; ++j)
5657     ++a;
5658   }
5659 #pragma omp taskloop
5660   for (int i = 0; i < 10; ++i) {
5661 #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?}}
5662   for (int j = 0; j < 10; ++j)
5663     ++a;
5664   }
5665 #pragma omp taskloop
5666   for (int i = 0; i < 10; ++i) {
5667 #pragma omp target teams // OK
5668     ++a;
5669   }
5670 #pragma omp taskloop
5671   for (int i = 0; i < 10; ++i) {
5672 #pragma omp target teams distribute // OK
5673   for (int j = 0; j < 10; ++j)
5674     ++a;
5675   }
5676 #pragma omp taskloop
5677   for (int i = 0; i < 10; ++i) {
5678 #pragma omp target teams distribute parallel for // OK
5679   for (int j = 0; j < 10; ++j)
5680     ++a;
5681   }
5682 #pragma omp taskloop
5683   for (int i = 0; i < 10; ++i) {
5684 #pragma omp target teams distribute parallel for simd // OK
5685   for (int j = 0; j < 10; ++j)
5686     ++a;
5687   }
5688 #pragma omp taskloop
5689   for (int i = 0; i < 10; ++i) {
5690 #pragma omp target teams distribute simd // OK
5691   for (int j = 0; j < 10; ++j)
5692     ++a;
5693   }
5694 #pragma omp taskloop
5695   for (int i = 0; i < 10; ++i) {
5696 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
5697 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
5698   }
5699 #pragma omp taskloop
5700   for (int i = 0; i < 10; ++i) {
5701 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5702 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5703   }
5704 #pragma omp master taskloop
5705   for (int i = 0; i < 10; ++i) {
5706 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
5707 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
5708   }
5709 #pragma omp master taskloop
5710   for (int i = 0; i < 10; ++i) {
5711 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
5712 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
5713   }
5714 #pragma omp parallel master taskloop
5715   for (int i = 0; i < 10; ++i) {
5716 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5717 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5718   }
5719 #pragma omp parallel master taskloop
5720   for (int i = 0; i < 10; ++i) {
5721 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5722 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
5723   }
5724 
5725 // DISTRIBUTE DIRECTIVE
5726 #pragma omp target
5727 #pragma omp teams
5728 #pragma omp distribute
5729   for (int i = 0; i < 10; ++i) {
5730 #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?}}
5731     for (int i = 0; i < 10; ++i)
5732       ;
5733   }
5734 #pragma omp target
5735 #pragma omp teams
5736 #pragma omp distribute
5737   for (int i = 0; i < 10; ++i) {
5738 #pragma omp for
5739     for (int i = 0; i < 10; ++i)
5740       ;
5741   }
5742 #pragma omp target
5743 #pragma omp teams
5744 #pragma omp distribute
5745   for (int i = 0; i < 10; ++i) {
5746 #pragma omp simd
5747     for (int i = 0; i < 10; ++i)
5748       ;
5749   }
5750 #pragma omp target
5751 #pragma omp teams
5752 #pragma omp distribute
5753   for (int i = 0; i < 10; ++i) {
5754 #pragma omp for simd
5755     for (int i = 0; i < 10; ++i)
5756       ;
5757   }
5758 #pragma omp target
5759 #pragma omp teams
5760 #pragma omp distribute
5761   for (int i = 0; i < 10; ++i) {
5762 #pragma omp parallel
5763     for (int i = 0; i < 10; ++i)
5764       ;
5765   }
5766 #pragma omp target
5767 #pragma omp teams
5768 #pragma omp distribute
5769   for (int i = 0; i < 10; ++i) {
5770 #pragma omp sections
5771     {
5772       bar();
5773     }
5774   }
5775 #pragma omp target
5776 #pragma omp teams
5777 #pragma omp distribute
5778   for (int i = 0; i < 10; ++i) {
5779 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
5780     {
5781       bar();
5782     }
5783   }
5784 #pragma omp target
5785 #pragma omp teams
5786 #pragma omp distribute
5787   for (int i = 0; i < 10; ++i) {
5788 #pragma omp single
5789     {
5790       bar();
5791     }
5792   }
5793 #pragma omp target
5794 #pragma omp teams
5795 #pragma omp distribute
5796   for (int i = 0; i < 10; ++i) {
5797 #pragma omp master
5798     {
5799       bar();
5800     }
5801   }
5802 #pragma omp target
5803 #pragma omp teams
5804 #pragma omp distribute
5805   for (int i = 0; i < 10; ++i) {
5806 #pragma omp critical
5807     {
5808       bar();
5809     }
5810   }
5811 #pragma omp target
5812 #pragma omp teams
5813 #pragma omp distribute
5814   for (int i = 0; i < 10; ++i) {
5815 #pragma omp parallel
5816     {
5817 #pragma omp single
5818       {
5819         bar();
5820       }
5821     }
5822   }
5823 #pragma omp target
5824 #pragma omp teams
5825 #pragma omp distribute
5826   for (int i = 0; i < 10; ++i) {
5827 #pragma omp parallel for
5828     for (int i = 0; i < 10; ++i)
5829       ;
5830   }
5831 #pragma omp target
5832 #pragma omp teams
5833 #pragma omp distribute
5834   for (int i = 0; i < 10; ++i) {
5835 #pragma omp parallel for simd
5836     for (int i = 0; i < 10; ++i)
5837       ;
5838   }
5839 #pragma omp target
5840 #pragma omp teams
5841 #pragma omp distribute
5842   for (int i = 0; i < 10; ++i) {
5843 #pragma omp parallel sections
5844     {
5845       bar();
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 task
5853     {
5854       bar();
5855     }
5856   }
5857 #pragma omp target
5858 #pragma omp teams
5859 #pragma omp distribute
5860   for (int i = 0; i < 10; ++i) {
5861 #pragma omp taskyield
5862     bar();
5863   }
5864 #pragma omp target
5865 #pragma omp teams
5866 #pragma omp distribute
5867   for (int i = 0; i < 10; ++i) {
5868 #pragma omp barrier
5869     bar();
5870   }
5871 #pragma omp target
5872 #pragma omp teams
5873 #pragma omp distribute
5874   for (int i = 0; i < 10; ++i) {
5875 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
5876     bar();
5877   }
5878 #pragma omp target
5879 #pragma omp teams
5880 #pragma omp distribute
5881   for (int i = 0; i < 10; ++i) {
5882 #pragma omp taskwait
5883     bar();
5884   }
5885 #pragma omp target
5886 #pragma omp teams
5887 #pragma omp distribute
5888   for (int i = 0; i < 10; ++i) {
5889 #pragma omp flush
5890     bar();
5891   }
5892 #pragma omp target
5893 #pragma omp teams
5894 #pragma omp distribute
5895   for (int i = 0; i < 10; ++i) {
5896 #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?}}
5897     bar();
5898   }
5899 #pragma omp target
5900 #pragma omp teams
5901 #pragma omp distribute
5902   for (int i = 0; i < 10; ++i) {
5903 #pragma omp atomic
5904     ++a;
5905   }
5906 #pragma omp target
5907 #pragma omp teams
5908 #pragma omp distribute
5909   for (int i = 0; i < 10; ++i) {
5910 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5911     ++a;
5912   }
5913 #pragma omp target
5914 #pragma omp teams
5915 #pragma omp distribute
5916   for (int i = 0; i < 10; ++i) {
5917 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5918     ++a;
5919   }
5920 #pragma omp target
5921 #pragma omp teams
5922 #pragma omp distribute
5923   for (int i = 0; i < 10; ++i) {
5924 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5925     for (int i = 0; i < 10; ++i)
5926       ;
5927   }
5928 #pragma omp target
5929 #pragma omp teams
5930 #pragma omp distribute
5931   for (int i = 0; i < 10; ++i) {
5932 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5933     ++a;
5934   }
5935 #pragma omp target
5936 #pragma omp teams
5937 #pragma omp distribute
5938   for (int i = 0; i < 10; ++i) {
5939 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5940     ++a;
5941   }
5942 #pragma omp target
5943 #pragma omp teams
5944 #pragma omp distribute
5945   for (int i = 0; i < 10; ++i) {
5946 #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?}}
5947     ++a;
5948   }
5949 #pragma omp target
5950 #pragma omp teams
5951 #pragma omp distribute
5952   for (int i = 0; i < 10; ++i) {
5953 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5954     ++a;
5955   }
5956 #pragma omp target
5957 #pragma omp teams
5958 #pragma omp distribute
5959   for (int i = 0; i < 10; ++i) {
5960 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5961     for (int j = 0; j < 10; ++j)
5962       ;
5963   }
5964 #pragma omp target
5965 #pragma omp teams
5966 #pragma omp distribute
5967   for (int i = 0; i < 10; ++i) {
5968 #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?}}
5969     for (int j = 0; j < 10; ++j)
5970       ;
5971   }
5972 #pragma omp target
5973 #pragma omp teams
5974 #pragma omp distribute
5975   for (int i = 0; i < 10; ++i) {
5976 #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?}}
5977     for (int j = 0; j < 10; ++j)
5978       ;
5979   }
5980 #pragma omp target
5981 #pragma omp teams
5982 #pragma omp distribute
5983   for (int i = 0; i < 10; ++i) {
5984 #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?}}
5985     for (int j = 0; j < 10; ++j)
5986       ;
5987   }
5988 #pragma omp target
5989 #pragma omp teams
5990 #pragma omp distribute
5991   for (int i = 0; i < 10; ++i) {
5992 #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?}}
5993     for (int j = 0; j < 10; ++j)
5994       ;
5995   }
5996 #pragma omp target
5997 #pragma omp teams
5998 #pragma omp distribute
5999   for (int i = 0; i < 10; ++i) {
6000 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6001     a++;
6002   }
6003 #pragma omp target
6004 #pragma omp teams
6005 #pragma omp distribute
6006   for (int i = 0; i < 10; ++i) {
6007 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6008     for (int j = 0; j < 10; ++j)
6009       ;
6010   }
6011 #pragma omp target
6012 #pragma omp teams
6013 #pragma omp distribute
6014   for (int i = 0; i < 10; ++i) {
6015 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6016     for (int j = 0; j < 10; ++j)
6017       ;
6018   }
6019 #pragma omp target
6020 #pragma omp teams
6021 #pragma omp distribute
6022   for (int i = 0; i < 10; ++i) {
6023 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6024     for (int j = 0; j < 10; ++j)
6025       ;
6026   }
6027 #pragma omp target
6028 #pragma omp teams
6029 #pragma omp distribute
6030   for (int i = 0; i < 10; ++i) {
6031 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6032     for (int j = 0; j < 10; ++j)
6033       ;
6034   }
6035 
6036 // DISTRIBUTE PARALLEL FOR DIRECTIVE
6037 #pragma omp target
6038 #pragma omp teams
6039 #pragma omp distribute parallel for
6040   for (int i = 0; i < 10; ++i) {
6041 #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?}}
6042     for (int i = 0; i < 10; ++i)
6043       ;
6044   }
6045 #pragma omp target
6046 #pragma omp teams
6047 #pragma omp distribute parallel for
6048   for (int i = 0; i < 10; ++i) {
6049 #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?}}
6050     for (int i = 0; i < 10; ++i)
6051       ;
6052   }
6053 #pragma omp target
6054 #pragma omp teams
6055 #pragma omp distribute parallel for
6056   for (int i = 0; i < 10; ++i) {
6057 #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?}}
6058     for (int i = 0; i < 10; ++i)
6059       ;
6060   }
6061 #pragma omp target
6062 #pragma omp teams
6063 #pragma omp distribute parallel for
6064   for (int i = 0; i < 10; ++i) {
6065 #pragma omp simd
6066     for (int i = 0; i < 10; ++i)
6067       ;
6068   }
6069 #pragma omp target
6070 #pragma omp teams
6071 #pragma omp distribute parallel for
6072   for (int i = 0; i < 10; ++i) {
6073 #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?}}
6074     for (int i = 0; i < 10; ++i)
6075       ;
6076   }
6077 #pragma omp target
6078 #pragma omp teams
6079 #pragma omp distribute parallel for
6080   for (int i = 0; i < 10; ++i) {
6081 #pragma omp parallel
6082     for (int i = 0; i < 10; ++i)
6083       ;
6084   }
6085 #pragma omp target
6086 #pragma omp teams
6087 #pragma omp distribute parallel for
6088   for (int i = 0; i < 10; ++i) {
6089 #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?}}
6090     {
6091       bar();
6092     }
6093   }
6094 #pragma omp target
6095 #pragma omp teams
6096 #pragma omp distribute parallel for
6097   for (int i = 0; i < 10; ++i) {
6098 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
6099     {
6100       bar();
6101     }
6102   }
6103 #pragma omp target
6104 #pragma omp teams
6105 #pragma omp distribute parallel for
6106   for (int i = 0; i < 10; ++i) {
6107 #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?}}
6108     {
6109       bar();
6110     }
6111   }
6112 #pragma omp target
6113 #pragma omp teams
6114 #pragma omp distribute parallel for
6115   for (int i = 0; i < 10; ++i) {
6116 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6117     {
6118       bar();
6119     }
6120   }
6121 #pragma omp target
6122 #pragma omp teams
6123 #pragma omp distribute parallel for
6124   for (int i = 0; i < 10; ++i) {
6125 #pragma omp critical
6126     {
6127       bar();
6128     }
6129   }
6130 #pragma omp target
6131 #pragma omp teams
6132 #pragma omp distribute parallel for
6133   for (int i = 0; i < 10; ++i) {
6134 #pragma omp parallel
6135     {
6136 #pragma omp single
6137       {
6138         bar();
6139       }
6140     }
6141   }
6142 #pragma omp target
6143 #pragma omp teams
6144 #pragma omp distribute parallel for
6145   for (int i = 0; i < 10; ++i) {
6146 #pragma omp parallel for
6147     for (int i = 0; i < 10; ++i)
6148       ;
6149   }
6150 #pragma omp target
6151 #pragma omp teams
6152 #pragma omp distribute parallel for
6153   for (int i = 0; i < 10; ++i) {
6154 #pragma omp parallel for simd
6155     for (int i = 0; i < 10; ++i)
6156       ;
6157   }
6158 #pragma omp target
6159 #pragma omp teams
6160 #pragma omp distribute parallel for
6161   for (int i = 0; i < 10; ++i) {
6162 #pragma omp parallel sections
6163     {
6164       bar();
6165     }
6166   }
6167 #pragma omp target
6168 #pragma omp teams
6169 #pragma omp distribute parallel for
6170   for (int i = 0; i < 10; ++i) {
6171 #pragma omp task
6172     {
6173       bar();
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 taskyield
6181     bar();
6182   }
6183 #pragma omp target
6184 #pragma omp teams
6185 #pragma omp distribute parallel for
6186   for (int i = 0; i < 10; ++i) {
6187 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6188     bar();
6189   }
6190 #pragma omp target
6191 #pragma omp teams
6192 #pragma omp distribute parallel for
6193   for (int i = 0; i < 10; ++i) {
6194 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6195     bar();
6196   }
6197 #pragma omp target
6198 #pragma omp teams
6199 #pragma omp distribute parallel for
6200   for (int i = 0; i < 10; ++i) {
6201 #pragma omp taskwait
6202     bar();
6203   }
6204 #pragma omp target
6205 #pragma omp teams
6206 #pragma omp distribute parallel for
6207   for (int i = 0; i < 10; ++i) {
6208 #pragma omp flush
6209     bar();
6210   }
6211 #pragma omp target
6212 #pragma omp teams
6213 #pragma omp distribute parallel for
6214   for (int i = 0; i < 10; ++i) {
6215 #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?}}
6216     bar();
6217   }
6218 #pragma omp target
6219 #pragma omp teams
6220 #pragma omp distribute parallel for
6221   for (int i = 0; i < 10; ++i) {
6222 #pragma omp atomic
6223     ++a;
6224   }
6225 #pragma omp target
6226 #pragma omp teams
6227 #pragma omp distribute parallel for
6228   for (int i = 0; i < 10; ++i) {
6229 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6230     ++a;
6231   }
6232 #pragma omp target
6233 #pragma omp teams
6234 #pragma omp distribute parallel for
6235   for (int i = 0; i < 10; ++i) {
6236 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
6237     ++a;
6238   }
6239 #pragma omp target
6240 #pragma omp teams
6241 #pragma omp distribute parallel for
6242   for (int i = 0; i < 10; ++i) {
6243 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6244     for (int i = 0; i < 10; ++i)
6245       ;
6246   }
6247 #pragma omp target
6248 #pragma omp teams
6249 #pragma omp distribute parallel for
6250   for (int i = 0; i < 10; ++i) {
6251 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6252     ++a;
6253   }
6254 #pragma omp target
6255 #pragma omp teams
6256 #pragma omp distribute parallel for
6257   for (int i = 0; i < 10; ++i) {
6258 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6259     ++a;
6260   }
6261 #pragma omp target
6262 #pragma omp teams
6263 #pragma omp distribute parallel for
6264   for (int i = 0; i < 10; ++i) {
6265 #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?}}
6266     ++a;
6267   }
6268 #pragma omp target
6269 #pragma omp teams
6270 #pragma omp distribute parallel for
6271   for (int i = 0; i < 10; ++i) {
6272 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6273     ++a;
6274   }
6275 #pragma omp target
6276 #pragma omp teams
6277 #pragma omp distribute parallel for
6278   for (int i = 0; i < 10; ++i) {
6279 #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?}}
6280     for (int i = 0; i < 10; ++i)
6281       ;
6282   }
6283 #pragma omp target
6284 #pragma omp teams
6285 #pragma omp distribute parallel for
6286   for (int i = 0; i < 10; ++i) {
6287 #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?}}
6288     for (int i = 0; i < 10; ++i)
6289       ;
6290   }
6291 #pragma omp target
6292 #pragma omp teams
6293 #pragma omp distribute parallel for
6294   for (int i = 0; i < 10; ++i) {
6295 #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?}}
6296     for (int i = 0; i < 10; ++i)
6297       ;
6298   }
6299 #pragma omp target
6300 #pragma omp teams
6301 #pragma omp distribute parallel for
6302   for (int i = 0; i < 10; ++i) {
6303 #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?}}
6304     for (int i = 0; i < 10; ++i)
6305       ;
6306   }
6307 #pragma omp target
6308 #pragma omp teams
6309 #pragma omp distribute parallel for
6310   for (int i = 0; i < 10; ++i) {
6311 #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?}}
6312     for (int i = 0; i < 10; ++i)
6313       ;
6314   }
6315 #pragma omp target
6316 #pragma omp teams
6317 #pragma omp distribute parallel for
6318   for (int i = 0; i < 10; ++i) {
6319 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6320     a++;
6321   }
6322 #pragma omp target
6323 #pragma omp teams
6324 #pragma omp distribute parallel for
6325   for (int i = 0; i < 10; ++i) {
6326 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6327     for (int i = 0; i < 10; ++i)
6328       ;
6329   }
6330 #pragma omp target
6331 #pragma omp teams
6332 #pragma omp distribute parallel for
6333   for (int i = 0; i < 10; ++i) {
6334 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6335     for (int i = 0; i < 10; ++i)
6336       ;
6337   }
6338 #pragma omp target
6339 #pragma omp teams
6340 #pragma omp distribute parallel for
6341   for (int i = 0; i < 10; ++i) {
6342 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' 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
6349   for (int i = 0; i < 10; ++i) {
6350 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6351     for (int i = 0; i < 10; ++i)
6352       ;
6353   }
6354 
6355 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
6356 #pragma omp target
6357 #pragma omp teams
6358 #pragma omp distribute parallel for simd
6359   for (int i = 0; i < 10; ++i) {
6360 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6361     for (int i = 0; i < 10; ++i)
6362       ;
6363   }
6364 #pragma omp target
6365 #pragma omp teams
6366 #pragma omp distribute parallel for simd
6367   for (int i = 0; i < 10; ++i) {
6368 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6369     for (int i = 0; i < 10; ++i)
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 for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6377     for (int i = 0; i < 10; ++i)
6378       ;
6379   }
6380 #pragma omp target
6381 #pragma omp teams
6382 #pragma omp distribute parallel for simd
6383   for (int i = 0; i < 10; ++i) {
6384 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6385     for (int i = 0; i < 10; ++i)
6386       ;
6387   }
6388 #pragma omp target
6389 #pragma omp teams
6390 #pragma omp distribute parallel for simd
6391   for (int i = 0; i < 10; ++i) {
6392 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6393     for (int i = 0; i < 10; ++i)
6394       ;
6395   }
6396 #pragma omp target
6397 #pragma omp teams
6398 #pragma omp distribute parallel for simd
6399   for (int i = 0; i < 10; ++i) {
6400 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6401     for (int i = 0; i < 10; ++i)
6402       ;
6403   }
6404 #pragma omp target
6405 #pragma omp teams
6406 #pragma omp distribute parallel for simd
6407   for (int i = 0; i < 10; ++i) {
6408 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6409     {
6410       bar();
6411     }
6412   }
6413 #pragma omp target
6414 #pragma omp teams
6415 #pragma omp distribute parallel for simd
6416   for (int i = 0; i < 10; ++i) {
6417 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6418     {
6419       bar();
6420     }
6421   }
6422 #pragma omp target
6423 #pragma omp teams
6424 #pragma omp distribute parallel for simd
6425   for (int i = 0; i < 10; ++i) {
6426 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6427     {
6428       bar();
6429     }
6430   }
6431 #pragma omp target
6432 #pragma omp teams
6433 #pragma omp distribute parallel for simd
6434   for (int i = 0; i < 10; ++i) {
6435 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6436     {
6437       bar();
6438     }
6439   }
6440 #pragma omp target
6441 #pragma omp teams
6442 #pragma omp distribute parallel for simd
6443   for (int i = 0; i < 10; ++i) {
6444 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6445     {
6446       bar();
6447     }
6448   }
6449 #pragma omp target
6450 #pragma omp teams
6451 #pragma omp distribute parallel for simd
6452   for (int i = 0; i < 10; ++i) {
6453 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6454     {
6455 #pragma omp single
6456       {
6457         bar();
6458       }
6459     }
6460   }
6461 #pragma omp target
6462 #pragma omp teams
6463 #pragma omp distribute parallel for simd
6464   for (int i = 0; i < 10; ++i) {
6465 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6466     for (int i = 0; i < 10; ++i)
6467       ;
6468   }
6469 #pragma omp target
6470 #pragma omp teams
6471 #pragma omp distribute parallel for simd
6472   for (int i = 0; i < 10; ++i) {
6473 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6474     for (int i = 0; i < 10; ++i)
6475       ;
6476   }
6477 #pragma omp target
6478 #pragma omp teams
6479 #pragma omp distribute parallel for simd
6480   for (int i = 0; i < 10; ++i) {
6481 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6482     {
6483       bar();
6484     }
6485   }
6486 #pragma omp target
6487 #pragma omp teams
6488 #pragma omp distribute parallel for simd
6489   for (int i = 0; i < 10; ++i) {
6490 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6491     {
6492       bar();
6493     }
6494   }
6495 #pragma omp target
6496 #pragma omp teams
6497 #pragma omp distribute parallel for simd
6498   for (int i = 0; i < 10; ++i) {
6499 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6500     bar();
6501   }
6502 #pragma omp target
6503 #pragma omp teams
6504 #pragma omp distribute parallel for simd
6505   for (int i = 0; i < 10; ++i) {
6506 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6507     bar();
6508   }
6509 #pragma omp target
6510 #pragma omp teams
6511 #pragma omp distribute parallel for simd
6512   for (int i = 0; i < 10; ++i) {
6513 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
6514     bar();
6515   }
6516 #pragma omp target
6517 #pragma omp teams
6518 #pragma omp distribute parallel for simd
6519   for (int i = 0; i < 10; ++i) {
6520 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6521     bar();
6522   }
6523 #pragma omp target
6524 #pragma omp teams
6525 #pragma omp distribute parallel for simd
6526   for (int i = 0; i < 10; ++i) {
6527 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6528     bar();
6529   }
6530 #pragma omp target
6531 #pragma omp teams
6532 #pragma omp distribute parallel for simd
6533   for (int i = 0; i < 10; ++i) {
6534 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6535     bar();
6536   }
6537 #pragma omp target
6538 #pragma omp teams
6539 #pragma omp distribute parallel for simd
6540   for (int i = 0; i < 10; ++i) {
6541 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
6542     ++a;
6543   }
6544 #pragma omp target
6545 #pragma omp teams
6546 #pragma omp distribute parallel for simd
6547   for (int i = 0; i < 10; ++i) {
6548 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6549     ++a;
6550   }
6551 #pragma omp target
6552 #pragma omp teams
6553 #pragma omp distribute parallel for simd
6554   for (int i = 0; i < 10; ++i) {
6555 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6556     ++a;
6557   }
6558 #pragma omp target
6559 #pragma omp teams
6560 #pragma omp distribute parallel for simd
6561   for (int i = 0; i < 10; ++i) {
6562 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6563     for (int i = 0; i < 10; ++i)
6564       ;
6565   }
6566 #pragma omp target
6567 #pragma omp teams
6568 #pragma omp distribute parallel for simd
6569   for (int i = 0; i < 10; ++i) {
6570 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6571     ++a;
6572   }
6573 #pragma omp target
6574 #pragma omp teams
6575 #pragma omp distribute parallel for simd
6576   for (int i = 0; i < 10; ++i) {
6577 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6578     ++a;
6579   }
6580 #pragma omp target
6581 #pragma omp teams
6582 #pragma omp distribute parallel for simd
6583   for (int i = 0; i < 10; ++i) {
6584 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6585     ++a;
6586   }
6587 #pragma omp target
6588 #pragma omp teams
6589 #pragma omp distribute parallel for simd
6590   for (int i = 0; i < 10; ++i) {
6591 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6592     ++a;
6593   }
6594 #pragma omp target
6595 #pragma omp teams
6596 #pragma omp distribute parallel for simd
6597   for (int i = 0; i < 10; ++i) {
6598 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6599     for (int i = 0; i < 10; ++i)
6600       ++a;
6601   }
6602 #pragma omp target
6603 #pragma omp teams
6604 #pragma omp distribute parallel for simd
6605   for (int i = 0; i < 10; ++i) {
6606 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6607     for (int i = 0; i < 10; ++i)
6608       ++a;
6609   }
6610 #pragma omp target
6611 #pragma omp teams
6612 #pragma omp distribute parallel for simd
6613   for (int i = 0; i < 10; ++i) {
6614 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6615     for (int i = 0; i < 10; ++i)
6616       ++a;
6617   }
6618 #pragma omp target
6619 #pragma omp teams
6620 #pragma omp distribute parallel for simd
6621   for (int i = 0; i < 10; ++i) {
6622 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6623     for (int i = 0; i < 10; ++i)
6624       ++a;
6625   }
6626 #pragma omp target
6627 #pragma omp teams
6628 #pragma omp distribute parallel for simd
6629   for (int i = 0; i < 10; ++i) {
6630 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6631     for (int i = 0; i < 10; ++i)
6632       ++a;
6633   }
6634 #pragma omp target
6635 #pragma omp teams
6636 #pragma omp distribute parallel for simd
6637   for (int i = 0; i < 10; ++i) {
6638 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6639     for (int i = 0; i < 10; ++i)
6640       ++a;
6641   }
6642 #pragma omp target
6643 #pragma omp teams
6644 #pragma omp distribute parallel for simd
6645   for (int i = 0; i < 10; ++i) {
6646 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6647     ++a;
6648   }
6649 #pragma omp target
6650 #pragma omp teams
6651 #pragma omp distribute parallel for simd
6652   for (int i = 0; i < 10; ++i) {
6653 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6654     for (int i = 0; i < 10; ++i)
6655       ++a;
6656   }
6657 #pragma omp target
6658 #pragma omp teams
6659 #pragma omp distribute parallel for simd
6660   for (int i = 0; i < 10; ++i) {
6661 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6662     for (int i = 0; i < 10; ++i)
6663       ++a;
6664   }
6665 #pragma omp target
6666 #pragma omp teams
6667 #pragma omp distribute parallel for simd
6668   for (int i = 0; i < 10; ++i) {
6669 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6670     for (int i = 0; i < 10; ++i)
6671       ++a;
6672   }
6673 #pragma omp target
6674 #pragma omp teams
6675 #pragma omp distribute parallel for simd
6676   for (int i = 0; i < 10; ++i) {
6677 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6678     for (int i = 0; i < 10; ++i)
6679       ++a;
6680   }
6681 
6682 // TARGET SIMD DIRECTIVE
6683 #pragma omp target simd
6684   for (int i = 0; i < 10; ++i) {
6685 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6686     for (int i = 0; i < 10; ++i)
6687       ;
6688   }
6689 #pragma omp target simd
6690   for (int i = 0; i < 10; ++i) {
6691 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6692     for (int i = 0; i < 10; ++i)
6693       ;
6694   }
6695 #pragma omp target simd
6696   for (int i = 0; i < 10; ++i) {
6697 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6698     for (int i = 0; i < 10; ++i)
6699       ;
6700   }
6701 #pragma omp target simd
6702   for (int i = 0; i < 10; ++i) {
6703 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6704     for (int i = 0; i < 10; ++i)
6705       ;
6706   }
6707 #pragma omp target simd
6708   for (int i = 0; i < 10; ++i) {
6709 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6710     for (int i = 0; i < 10; ++i)
6711       ;
6712   }
6713 #pragma omp target simd
6714   for (int i = 0; i < 10; ++i) {
6715 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6716     for (int i = 0; i < 10; ++i)
6717       ;
6718   }
6719 #pragma omp target simd
6720   for (int i = 0; i < 10; ++i) {
6721 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6722     {
6723       bar();
6724     }
6725   }
6726 #pragma omp target simd
6727   for (int i = 0; i < 10; ++i) {
6728 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6729     {
6730       bar();
6731     }
6732   }
6733 #pragma omp target simd
6734   for (int i = 0; i < 10; ++i) {
6735 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6736     {
6737       bar();
6738     }
6739   }
6740 #pragma omp target simd
6741   for (int i = 0; i < 10; ++i) {
6742 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6743     {
6744       bar();
6745     }
6746   }
6747 #pragma omp target simd
6748   for (int i = 0; i < 10; ++i) {
6749 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6750     {
6751       bar();
6752     }
6753   }
6754 #pragma omp target simd
6755   for (int i = 0; i < 10; ++i) {
6756 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6757     {
6758 #pragma omp single
6759       {
6760         bar();
6761       }
6762     }
6763   }
6764 #pragma omp target simd
6765   for (int i = 0; i < 10; ++i) {
6766 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6767     for (int i = 0; i < 10; ++i)
6768       ;
6769   }
6770 #pragma omp target simd
6771   for (int i = 0; i < 10; ++i) {
6772 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6773     for (int i = 0; i < 10; ++i)
6774       ;
6775   }
6776 #pragma omp target simd
6777   for (int i = 0; i < 10; ++i) {
6778 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6779     {
6780       bar();
6781     }
6782   }
6783 #pragma omp target simd
6784   for (int i = 0; i < 10; ++i) {
6785 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6786     {
6787       bar();
6788     }
6789   }
6790 #pragma omp target simd
6791   for (int i = 0; i < 10; ++i) {
6792 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6793     bar();
6794   }
6795 #pragma omp target simd
6796   for (int i = 0; i < 10; ++i) {
6797 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6798     bar();
6799   }
6800 #pragma omp target simd
6801   for (int i = 0; i < 10; ++i) {
6802 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
6803     bar();
6804   }
6805 #pragma omp target simd
6806   for (int i = 0; i < 10; ++i) {
6807 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6808     bar();
6809   }
6810 #pragma omp target simd
6811   for (int i = 0; i < 10; ++i) {
6812 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6813     bar();
6814   }
6815 #pragma omp target simd
6816   for (int i = 0; i < 10; ++i) {
6817 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6818     bar();
6819   }
6820 #pragma omp target simd
6821   for (int i = 0; i < 10; ++i) {
6822 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
6823     ++a;
6824   }
6825 #pragma omp target simd
6826   for (int i = 0; i < 10; ++i) {
6827 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6828     ++a;
6829   }
6830 #pragma omp target simd
6831   for (int i = 0; i < 10; ++i) {
6832 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6833     ++a;
6834   }
6835 #pragma omp target simd
6836   for (int i = 0; i < 10; ++i) {
6837 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6838     for (int i = 0; i < 10; ++i)
6839       ;
6840   }
6841 #pragma omp target simd
6842   for (int i = 0; i < 10; ++i) {
6843 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6844     ++a;
6845   }
6846 #pragma omp target simd
6847   for (int i = 0; i < 10; ++i) {
6848 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6849     ++a;
6850   }
6851 #pragma omp target simd
6852   for (int i = 0; i < 10; ++i) {
6853 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6854     ++a;
6855   }
6856 #pragma omp target simd
6857   for (int i = 0; i < 10; ++i) {
6858 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6859     ++a;
6860   }
6861 #pragma omp target simd
6862   for (int i = 0; i < 10; ++i) {
6863 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6864     for (int i = 0; i < 10; ++i)
6865       ++a;
6866   }
6867 #pragma omp target simd
6868   for (int i = 0; i < 10; ++i) {
6869 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6870     for (int i = 0; i < 10; ++i)
6871       ++a;
6872   }
6873 #pragma omp target simd
6874   for (int i = 0; i < 10; ++i) {
6875 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6876     for (int i = 0; i < 10; ++i)
6877       ++a;
6878   }
6879 #pragma omp target simd
6880   for (int i = 0; i < 10; ++i) {
6881 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6882     for (int i = 0; i < 10; ++i)
6883       ++a;
6884   }
6885 #pragma omp target simd
6886   for (int i = 0; i < 10; ++i) {
6887 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6888     for (int i = 0; i < 10; ++i)
6889       ++a;
6890   }
6891 #pragma omp target simd
6892   for (int i = 0; i < 10; ++i) {
6893 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6894     for (int i = 0; i < 10; ++i)
6895       ++a;
6896   }
6897 #pragma omp target simd
6898   for (int i = 0; i < 10; ++i) {
6899 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6900     for (int i = 0; i < 10; ++i)
6901       ++a;
6902   }
6903 #pragma omp target simd
6904   for (int i = 0; i < 10; ++i) {
6905 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6906     for (int i = 0; i < 10; ++i)
6907       ++a;
6908   }
6909 
6910 // TEAMS DISTRIBUTE DIRECTIVE
6911 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6912   for (int i = 0; i < 10; ++i)
6913     ;
6914 #pragma omp target
6915 #pragma omp teams distribute
6916   for (int i = 0; i < 10; ++i) {
6917 #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?}}
6918     for (int i = 0; i < 10; ++i)
6919       ;
6920   }
6921 #pragma omp target
6922 #pragma omp teams distribute
6923   for (int i = 0; i < 10; ++i) {
6924 #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?}}
6925     for (int i = 0; i < 10; ++i)
6926       ;
6927   }
6928 #pragma omp target
6929 #pragma omp teams distribute
6930   for (int i = 0; i < 10; ++i) {
6931 #pragma omp for // OK
6932     for (int i = 0; i < 10; ++i)
6933       ;
6934   }
6935 #pragma omp target
6936 #pragma omp teams distribute
6937   for (int i = 0; i < 10; ++i) {
6938 #pragma omp simd // OK
6939     for (int i = 0; i < 10; ++i)
6940       ;
6941   }
6942 #pragma omp target
6943 #pragma omp teams distribute
6944   for (int i = 0; i < 10; ++i) {
6945 #pragma omp for simd // OK
6946     for (int i = 0; i < 10; ++i)
6947       ;
6948   }
6949 #pragma omp target
6950 #pragma omp teams distribute
6951   for (int i = 0; i < 10; ++i) {
6952 #pragma omp parallel // OK
6953     for (int i = 0; i < 10; ++i)
6954       ;
6955   }
6956 #pragma omp target
6957 #pragma omp teams distribute
6958   for (int i = 0; i < 10; ++i) {
6959 #pragma omp sections // OK
6960     {
6961       bar();
6962     }
6963   }
6964 #pragma omp target
6965 #pragma omp teams distribute
6966   for (int i = 0; i < 10; ++i) {
6967 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6968     {
6969       bar();
6970     }
6971   }
6972 #pragma omp target
6973 #pragma omp teams distribute
6974   for (int i = 0; i < 10; ++i) {
6975 #pragma omp single // OK
6976     {
6977       bar();
6978     }
6979   }
6980 #pragma omp target
6981 #pragma omp teams distribute
6982   for (int i = 0; i < 10; ++i) {
6983 #pragma omp master // OK
6984     {
6985       bar();
6986     }
6987   }
6988 #pragma omp target
6989 #pragma omp teams distribute
6990   for (int i = 0; i < 10; ++i) {
6991 #pragma omp critical // OK
6992     {
6993       bar();
6994     }
6995   }
6996 #pragma omp target
6997 #pragma omp teams distribute
6998   for (int i = 0; i < 10; ++i) {
6999 #pragma omp parallel // OK
7000     {
7001 #pragma omp single
7002       {
7003         bar();
7004       }
7005     }
7006   }
7007 #pragma omp target
7008 #pragma omp teams distribute
7009   for (int i = 0; i < 10; ++i) {
7010 #pragma omp parallel for // OK
7011     for (int i = 0; i < 10; ++i)
7012       ;
7013   }
7014 #pragma omp target
7015 #pragma omp teams distribute
7016   for (int i = 0; i < 10; ++i) {
7017 #pragma omp parallel for simd // OK
7018     for (int i = 0; i < 10; ++i)
7019       ;
7020   }
7021 #pragma omp target
7022 #pragma omp teams distribute
7023   for (int i = 0; i < 10; ++i) {
7024 #pragma omp parallel sections // OK
7025     {
7026       bar();
7027     }
7028   }
7029 #pragma omp target
7030 #pragma omp teams distribute
7031   for (int i = 0; i < 10; ++i) {
7032 #pragma omp task // OK
7033     {
7034       bar();
7035     }
7036   }
7037 #pragma omp target
7038 #pragma omp teams distribute
7039   for (int i = 0; i < 10; ++i) {
7040 #pragma omp taskyield // OK
7041     bar();
7042   }
7043 #pragma omp target
7044 #pragma omp teams distribute
7045   for (int i = 0; i < 10; ++i) {
7046 #pragma omp barrier // OK
7047     bar();
7048   }
7049 #pragma omp target
7050 #pragma omp teams distribute
7051   for (int i = 0; i < 10; ++i) {
7052 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7053     bar();
7054   }
7055 #pragma omp target
7056 #pragma omp teams distribute
7057   for (int i = 0; i < 10; ++i) {
7058 #pragma omp taskwait // OK
7059     bar();
7060   }
7061 #pragma omp target
7062 #pragma omp teams distribute
7063   for (int i = 0; i < 10; ++i) {
7064 #pragma omp flush // OK
7065     bar();
7066   }
7067 #pragma omp target
7068 #pragma omp teams distribute
7069   for (int i = 0; i < 10; ++i) {
7070 #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?}}
7071     bar();
7072   }
7073 #pragma omp target
7074 #pragma omp teams distribute
7075   for (int i = 0; i < 10; ++i) {
7076 #pragma omp atomic // OK
7077     ++a;
7078   }
7079 #pragma omp target
7080 #pragma omp teams distribute
7081   for (int i = 0; i < 10; ++i) {
7082 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7083     ++a;
7084   }
7085 #pragma omp target
7086 #pragma omp teams distribute
7087   for (int i = 0; i < 10; ++i) {
7088 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7089     ++a;
7090   }
7091 #pragma omp target
7092 #pragma omp teams distribute
7093   for (int i = 0; i < 10; ++i) {
7094 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7095     for (int i = 0; i < 10; ++i)
7096       ;
7097   }
7098 #pragma omp target
7099 #pragma omp teams distribute
7100   for (int i = 0; i < 10; ++i) {
7101 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7102     ++a;
7103   }
7104 #pragma omp target
7105 #pragma omp teams distribute
7106   for (int i = 0; i < 10; ++i) {
7107 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7108     ++a;
7109   }
7110 #pragma omp target
7111 #pragma omp teams distribute
7112   for (int i = 0; i < 10; ++i) {
7113 #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?}}
7114     ++a;
7115   }
7116 #pragma omp target
7117 #pragma omp teams distribute
7118   for (int i = 0; i < 10; ++i) {
7119 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7120     ++a;
7121   }
7122 #pragma omp target
7123 #pragma omp teams distribute
7124   for (int i = 0; i < 10; ++i) {
7125 #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?}}
7126     for (int i = 0; i < 10; ++i)
7127       ++a;
7128   }
7129 #pragma omp target
7130 #pragma omp teams distribute
7131   for (int i = 0; i < 10; ++i) {
7132 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7133     for (int i = 0; i < 10; ++i)
7134       ++a;
7135   }
7136 #pragma omp target
7137 #pragma omp teams distribute
7138   for (int i = 0; i < 10; ++i) {
7139 #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?}}
7140     for (int i = 0; i < 10; ++i)
7141       ++a;
7142   }
7143 #pragma omp target
7144 #pragma omp teams distribute
7145   for (int i = 0; i < 10; ++i) {
7146 #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?}}
7147     for (int i = 0; i < 10; ++i)
7148       ++a;
7149   }
7150 #pragma omp target
7151 #pragma omp teams distribute
7152   for (int i = 0; i < 10; ++i) {
7153 #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?}}
7154     for (int i = 0; i < 10; ++i)
7155       ++a;
7156   }
7157 #pragma omp target
7158 #pragma omp teams distribute
7159   for (int i = 0; i < 10; ++i) {
7160 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7161     for (int i = 0; i < 10; ++i)
7162       ++a;
7163   }
7164 #pragma omp target
7165 #pragma omp teams distribute
7166   for (int i = 0; i < 10; ++i) {
7167 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7168     for (int i = 0; i < 10; ++i)
7169       ++a;
7170   }
7171 #pragma omp target
7172 #pragma omp teams distribute
7173   for (int i = 0; i < 10; ++i) {
7174 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7175     for (int i = 0; i < 10; ++i)
7176       ++a;
7177   }
7178 
7179 // TEAMS DISTRIBUTE DIRECTIVE
7180 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7181   for (int i = 0; i < 10; ++i)
7182     ;
7183 #pragma omp target
7184 #pragma omp teams distribute
7185   for (int i = 0; i < 10; ++i) {
7186 #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?}}
7187     for (int i = 0; i < 10; ++i)
7188       ;
7189   }
7190 #pragma omp target
7191 #pragma omp teams distribute
7192   for (int i = 0; i < 10; ++i) {
7193 #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?}}
7194     for (int i = 0; i < 10; ++i)
7195       ;
7196   }
7197 #pragma omp target
7198 #pragma omp teams distribute
7199   for (int i = 0; i < 10; ++i) {
7200 #pragma omp for // OK
7201     for (int i = 0; i < 10; ++i)
7202       ;
7203   }
7204 #pragma omp target
7205 #pragma omp teams distribute
7206   for (int i = 0; i < 10; ++i) {
7207 #pragma omp simd // OK
7208     for (int i = 0; i < 10; ++i)
7209       ;
7210   }
7211 #pragma omp target
7212 #pragma omp teams distribute
7213   for (int i = 0; i < 10; ++i) {
7214 #pragma omp for simd // OK
7215     for (int i = 0; i < 10; ++i)
7216       ;
7217   }
7218 #pragma omp target
7219 #pragma omp teams distribute
7220   for (int i = 0; i < 10; ++i) {
7221 #pragma omp parallel // OK
7222     for (int i = 0; i < 10; ++i)
7223       ;
7224   }
7225 #pragma omp target
7226 #pragma omp teams distribute
7227   for (int i = 0; i < 10; ++i) {
7228 #pragma omp sections // OK
7229     {
7230       bar();
7231     }
7232   }
7233 #pragma omp target
7234 #pragma omp teams distribute
7235   for (int i = 0; i < 10; ++i) {
7236 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
7237     {
7238       bar();
7239     }
7240   }
7241 #pragma omp target
7242 #pragma omp teams distribute
7243   for (int i = 0; i < 10; ++i) {
7244 #pragma omp single // OK
7245     {
7246       bar();
7247     }
7248   }
7249 #pragma omp target
7250 #pragma omp teams distribute
7251   for (int i = 0; i < 10; ++i) {
7252 #pragma omp master // OK
7253     {
7254       bar();
7255     }
7256   }
7257 #pragma omp target
7258 #pragma omp teams distribute
7259   for (int i = 0; i < 10; ++i) {
7260 #pragma omp critical // OK
7261     {
7262       bar();
7263     }
7264   }
7265 #pragma omp target
7266 #pragma omp teams distribute
7267   for (int i = 0; i < 10; ++i) {
7268 #pragma omp parallel // OK
7269     {
7270 #pragma omp single
7271       {
7272         bar();
7273       }
7274     }
7275   }
7276 #pragma omp target
7277 #pragma omp teams distribute
7278   for (int i = 0; i < 10; ++i) {
7279 #pragma omp parallel for // OK
7280     for (int i = 0; i < 10; ++i)
7281       ;
7282   }
7283 #pragma omp target
7284 #pragma omp teams distribute
7285   for (int i = 0; i < 10; ++i) {
7286 #pragma omp parallel for simd // OK
7287     for (int i = 0; i < 10; ++i)
7288       ;
7289   }
7290 #pragma omp target
7291 #pragma omp teams distribute
7292   for (int i = 0; i < 10; ++i) {
7293 #pragma omp parallel sections // OK
7294     {
7295       bar();
7296     }
7297   }
7298 #pragma omp target
7299 #pragma omp teams distribute
7300   for (int i = 0; i < 10; ++i) {
7301 #pragma omp task // OK
7302     {
7303       bar();
7304     }
7305   }
7306 #pragma omp target
7307 #pragma omp teams distribute
7308   for (int i = 0; i < 10; ++i) {
7309 #pragma omp taskyield // OK
7310     bar();
7311   }
7312 #pragma omp target
7313 #pragma omp teams distribute
7314   for (int i = 0; i < 10; ++i) {
7315 #pragma omp barrier // OK
7316     bar();
7317   }
7318 #pragma omp target
7319 #pragma omp teams distribute
7320   for (int i = 0; i < 10; ++i) {
7321 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7322     bar();
7323   }
7324 #pragma omp target
7325 #pragma omp teams distribute
7326   for (int i = 0; i < 10; ++i) {
7327 #pragma omp taskwait // OK
7328     bar();
7329   }
7330 #pragma omp target
7331 #pragma omp teams distribute
7332   for (int i = 0; i < 10; ++i) {
7333 #pragma omp flush // OK
7334     bar();
7335   }
7336 #pragma omp target
7337 #pragma omp teams distribute
7338   for (int i = 0; i < 10; ++i) {
7339 #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?}}
7340     bar();
7341   }
7342 #pragma omp target
7343 #pragma omp teams distribute
7344   for (int i = 0; i < 10; ++i) {
7345 #pragma omp atomic // OK
7346     ++a;
7347   }
7348 #pragma omp target
7349 #pragma omp teams distribute
7350   for (int i = 0; i < 10; ++i) {
7351 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7352     ++a;
7353   }
7354 #pragma omp target
7355 #pragma omp teams distribute
7356   for (int i = 0; i < 10; ++i) {
7357 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7358     ++a;
7359   }
7360 #pragma omp target
7361 #pragma omp teams distribute
7362   for (int i = 0; i < 10; ++i) {
7363 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7364     for (int i = 0; i < 10; ++i)
7365       ;
7366   }
7367 #pragma omp target
7368 #pragma omp teams distribute
7369   for (int i = 0; i < 10; ++i) {
7370 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7371     ++a;
7372   }
7373 #pragma omp target
7374 #pragma omp teams distribute
7375   for (int i = 0; i < 10; ++i) {
7376 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7377     ++a;
7378   }
7379 #pragma omp target
7380 #pragma omp teams distribute
7381   for (int i = 0; i < 10; ++i) {
7382 #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?}}
7383     ++a;
7384   }
7385 #pragma omp target
7386 #pragma omp teams distribute
7387   for (int i = 0; i < 10; ++i) {
7388 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7389     ++a;
7390   }
7391 #pragma omp target
7392 #pragma omp teams distribute
7393   for (int i = 0; i < 10; ++i) {
7394 #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?}}
7395     for (int i = 0; i < 10; ++i)
7396       ++a;
7397   }
7398 #pragma omp target
7399 #pragma omp teams distribute
7400   for (int i = 0; i < 10; ++i) {
7401 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7402     for (int i = 0; i < 10; ++i)
7403       ++a;
7404   }
7405 #pragma omp target
7406 #pragma omp teams distribute
7407   for (int i = 0; i < 10; ++i) {
7408 #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?}}
7409     for (int i = 0; i < 10; ++i)
7410       ++a;
7411   }
7412 #pragma omp target
7413 #pragma omp teams distribute
7414   for (int i = 0; i < 10; ++i) {
7415 #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?}}
7416     for (int i = 0; i < 10; ++i)
7417       ++a;
7418   }
7419 #pragma omp target
7420 #pragma omp teams distribute
7421   for (int i = 0; i < 10; ++i) {
7422 #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?}}
7423     for (int i = 0; i < 10; ++i)
7424       ++a;
7425   }
7426 #pragma omp target
7427 #pragma omp teams distribute
7428   for (int i = 0; i < 10; ++i) {
7429 #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?}}
7430     for (int i = 0; i < 10; ++i)
7431       ++a;
7432   }
7433 #pragma omp target
7434 #pragma omp teams distribute
7435   for (int i = 0; i < 10; ++i) {
7436 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7437     ++a;
7438   }
7439 #pragma omp target
7440 #pragma omp teams distribute
7441   for (int i = 0; i < 10; ++i) {
7442 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
7443     for (int i = 0; i < 10; ++i)
7444       ++a;
7445   }
7446 #pragma omp target
7447 #pragma omp teams distribute
7448   for (int i = 0; i < 10; ++i) {
7449 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7450     for (int i = 0; i < 10; ++i)
7451       ++a;
7452   }
7453 #pragma omp target
7454 #pragma omp teams distribute
7455   for (int i = 0; i < 10; ++i) {
7456 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7457     for (int i = 0; i < 10; ++i)
7458       ++a;
7459   }
7460 #pragma omp target
7461 #pragma omp teams distribute
7462   for (int i = 0; i < 10; ++i) {
7463 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7464     for (int i = 0; i < 10; ++i)
7465       ++a;
7466   }
7467 
7468 // TEAMS DISTRIBUTE SIMD DIRECTIVE
7469 #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?}}
7470   for (int i = 0; i < 10; ++i)
7471     ;
7472 #pragma omp target
7473 #pragma omp teams distribute simd
7474   for (int i = 0; i < 10; ++i) {
7475 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7476     for (int i = 0; i < 10; ++i)
7477       ;
7478   }
7479 #pragma omp target
7480 #pragma omp teams distribute simd
7481   for (int i = 0; i < 10; ++i) {
7482 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7483     for (int i = 0; i < 10; ++i)
7484       ;
7485   }
7486 #pragma omp target
7487 #pragma omp teams distribute simd
7488   for (int i = 0; i < 10; ++i) {
7489 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7490     for (int i = 0; i < 10; ++i)
7491       ;
7492   }
7493 #pragma omp target
7494 #pragma omp teams distribute simd
7495   for (int i = 0; i < 10; ++i) {
7496 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7497     for (int i = 0; i < 10; ++i)
7498       ;
7499   }
7500 #pragma omp target
7501 #pragma omp teams distribute simd
7502   for (int i = 0; i < 10; ++i) {
7503 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7504     for (int i = 0; i < 10; ++i)
7505       ;
7506   }
7507 #pragma omp target
7508 #pragma omp teams distribute simd
7509   for (int i = 0; i < 10; ++i) {
7510 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7511     for (int i = 0; i < 10; ++i)
7512       ;
7513   }
7514 #pragma omp target
7515 #pragma omp teams distribute simd
7516   for (int i = 0; i < 10; ++i) {
7517 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7518     {
7519       bar();
7520     }
7521   }
7522 #pragma omp target
7523 #pragma omp teams distribute simd
7524   for (int i = 0; i < 10; ++i) {
7525 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7526     {
7527       bar();
7528     }
7529   }
7530 #pragma omp target
7531 #pragma omp teams distribute simd
7532   for (int i = 0; i < 10; ++i) {
7533 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7534     {
7535       bar();
7536     }
7537   }
7538 #pragma omp target
7539 #pragma omp teams distribute simd
7540   for (int i = 0; i < 10; ++i) {
7541 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7542     {
7543       bar();
7544     }
7545   }
7546 #pragma omp target
7547 #pragma omp teams distribute simd
7548   for (int i = 0; i < 10; ++i) {
7549 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7550     {
7551       bar();
7552     }
7553   }
7554 #pragma omp target
7555 #pragma omp teams distribute simd
7556   for (int i = 0; i < 10; ++i) {
7557 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7558     {
7559 #pragma omp single
7560       {
7561         bar();
7562       }
7563     }
7564   }
7565 #pragma omp target
7566 #pragma omp teams distribute simd
7567   for (int i = 0; i < 10; ++i) {
7568 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7569     for (int i = 0; i < 10; ++i)
7570       ;
7571   }
7572 #pragma omp target
7573 #pragma omp teams distribute simd
7574   for (int i = 0; i < 10; ++i) {
7575 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7576     for (int i = 0; i < 10; ++i)
7577       ;
7578   }
7579 #pragma omp target
7580 #pragma omp teams distribute simd
7581   for (int i = 0; i < 10; ++i) {
7582 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7583     {
7584       bar();
7585     }
7586   }
7587 #pragma omp target
7588 #pragma omp teams distribute simd
7589   for (int i = 0; i < 10; ++i) {
7590 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7591     {
7592       bar();
7593     }
7594   }
7595 #pragma omp target
7596 #pragma omp teams distribute simd
7597   for (int i = 0; i < 10; ++i) {
7598 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7599     bar();
7600   }
7601 #pragma omp target
7602 #pragma omp teams distribute simd
7603   for (int i = 0; i < 10; ++i) {
7604 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7605     bar();
7606   }
7607 #pragma omp target
7608 #pragma omp teams distribute simd
7609   for (int i = 0; i < 10; ++i) {
7610 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7611     bar();
7612   }
7613 #pragma omp target
7614 #pragma omp teams distribute simd
7615   for (int i = 0; i < 10; ++i) {
7616 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7617     bar();
7618   }
7619 #pragma omp target
7620 #pragma omp teams distribute simd
7621   for (int i = 0; i < 10; ++i) {
7622 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7623     bar();
7624   }
7625 #pragma omp target
7626 #pragma omp teams distribute simd
7627   for (int i = 0; i < 10; ++i) {
7628 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7629     bar();
7630   }
7631 #pragma omp target
7632 #pragma omp teams distribute simd
7633   for (int i = 0; i < 10; ++i) {
7634 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7635     ++a;
7636   }
7637 #pragma omp target
7638 #pragma omp teams distribute simd
7639   for (int i = 0; i < 10; ++i) {
7640 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7641     ++a;
7642   }
7643 #pragma omp target
7644 #pragma omp teams distribute simd
7645   for (int i = 0; i < 10; ++i) {
7646 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7647     ++a;
7648   }
7649 #pragma omp target
7650 #pragma omp teams distribute simd
7651   for (int i = 0; i < 10; ++i) {
7652 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7653     for (int i = 0; i < 10; ++i)
7654       ;
7655   }
7656 #pragma omp target
7657 #pragma omp teams distribute simd
7658   for (int i = 0; i < 10; ++i) {
7659 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7660     ++a;
7661   }
7662 #pragma omp target
7663 #pragma omp teams distribute simd
7664   for (int i = 0; i < 10; ++i) {
7665 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7666     ++a;
7667   }
7668 #pragma omp target
7669 #pragma omp teams distribute simd
7670   for (int i = 0; i < 10; ++i) {
7671 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7672     ++a;
7673   }
7674 #pragma omp target
7675 #pragma omp teams distribute simd
7676   for (int i = 0; i < 10; ++i) {
7677 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7678     ++a;
7679   }
7680 #pragma omp target
7681 #pragma omp teams distribute simd
7682   for (int i = 0; i < 10; ++i) {
7683 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7684     for (int i = 0; i < 10; ++i)
7685       ++a;
7686   }
7687 #pragma omp target
7688 #pragma omp teams distribute simd
7689   for (int i = 0; i < 10; ++i) {
7690 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7691     for (int i = 0; i < 10; ++i)
7692       ++a;
7693   }
7694 #pragma omp target
7695 #pragma omp teams distribute simd
7696   for (int i = 0; i < 10; ++i) {
7697 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7698     for (int i = 0; i < 10; ++i)
7699       ++a;
7700   }
7701 #pragma omp target
7702 #pragma omp teams distribute simd
7703   for (int i = 0; i < 10; ++i) {
7704 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7705     for (int i = 0; i < 10; ++i)
7706       ++a;
7707   }
7708 #pragma omp target
7709 #pragma omp teams distribute simd
7710   for (int i = 0; i < 10; ++i) {
7711 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7712     for (int i = 0; i < 10; ++i)
7713       ++a;
7714   }
7715 #pragma omp target
7716 #pragma omp teams distribute simd
7717   for (int i = 0; i < 10; ++i) {
7718 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7719     for (int i = 0; i < 10; ++i)
7720       ++a;
7721   }
7722 #pragma omp target
7723 #pragma omp teams distribute simd
7724   for (int i = 0; i < 10; ++i) {
7725 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7726     ++a;
7727   }
7728 #pragma omp target
7729 #pragma omp teams distribute simd
7730   for (int i = 0; i < 10; ++i) {
7731 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7732     for (int i = 0; i < 10; ++i)
7733       ++a;
7734   }
7735 #pragma omp target
7736 #pragma omp teams distribute simd
7737   for (int i = 0; i < 10; ++i) {
7738 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7739     for (int i = 0; i < 10; ++i)
7740       ++a;
7741   }
7742 #pragma omp target
7743 #pragma omp teams distribute simd
7744   for (int i = 0; i < 10; ++i) {
7745 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7746     for (int i = 0; i < 10; ++i)
7747       ++a;
7748   }
7749 #pragma omp target
7750 #pragma omp teams distribute simd
7751   for (int i = 0; i < 10; ++i) {
7752 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7753     for (int i = 0; i < 10; ++i)
7754       ++a;
7755   }
7756 
7757 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
7758 #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?}}
7759   for (int i = 0; i < 10; ++i)
7760     ;
7761 #pragma omp target
7762 #pragma omp teams distribute parallel for simd
7763   for (int i = 0; i < 10; ++i) {
7764 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7765     for (int i = 0; i < 10; ++i)
7766       ;
7767   }
7768 #pragma omp target
7769 #pragma omp teams distribute parallel for simd
7770   for (int i = 0; i < 10; ++i) {
7771 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7772     for (int i = 0; i < 10; ++i)
7773       ;
7774   }
7775 #pragma omp target
7776 #pragma omp teams distribute parallel for simd
7777   for (int i = 0; i < 10; ++i) {
7778 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7779     for (int i = 0; i < 10; ++i)
7780       ;
7781   }
7782 #pragma omp target
7783 #pragma omp teams distribute parallel for simd
7784   for (int i = 0; i < 10; ++i) {
7785 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7786     for (int i = 0; i < 10; ++i)
7787       ;
7788   }
7789 #pragma omp target
7790 #pragma omp teams distribute parallel for simd
7791   for (int i = 0; i < 10; ++i) {
7792 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7793     for (int i = 0; i < 10; ++i)
7794       ;
7795   }
7796 #pragma omp target
7797 #pragma omp teams distribute parallel for simd
7798   for (int i = 0; i < 10; ++i) {
7799 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7800     for (int i = 0; i < 10; ++i)
7801       ;
7802   }
7803 #pragma omp target
7804 #pragma omp teams distribute parallel for simd
7805   for (int i = 0; i < 10; ++i) {
7806 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7807     {
7808       bar();
7809     }
7810   }
7811 #pragma omp target
7812 #pragma omp teams distribute parallel for simd
7813   for (int i = 0; i < 10; ++i) {
7814 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7815     {
7816       bar();
7817     }
7818   }
7819 #pragma omp target
7820 #pragma omp teams distribute parallel for simd
7821   for (int i = 0; i < 10; ++i) {
7822 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7823     {
7824       bar();
7825     }
7826   }
7827 #pragma omp target
7828 #pragma omp teams distribute parallel for simd
7829   for (int i = 0; i < 10; ++i) {
7830 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7831     {
7832       bar();
7833     }
7834   }
7835 #pragma omp target
7836 #pragma omp teams distribute parallel for simd
7837   for (int i = 0; i < 10; ++i) {
7838 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7839     {
7840       bar();
7841     }
7842   }
7843 #pragma omp target
7844 #pragma omp teams distribute parallel for simd
7845   for (int i = 0; i < 10; ++i) {
7846 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7847     {
7848 #pragma omp single
7849       {
7850         bar();
7851       }
7852     }
7853   }
7854 #pragma omp target
7855 #pragma omp teams distribute parallel for simd
7856   for (int i = 0; i < 10; ++i) {
7857 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7858     for (int i = 0; i < 10; ++i)
7859       ;
7860   }
7861 #pragma omp target
7862 #pragma omp teams distribute parallel for simd
7863   for (int i = 0; i < 10; ++i) {
7864 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7865     for (int i = 0; i < 10; ++i)
7866       ;
7867   }
7868 #pragma omp target
7869 #pragma omp teams distribute parallel for simd
7870   for (int i = 0; i < 10; ++i) {
7871 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7872     {
7873       bar();
7874     }
7875   }
7876 #pragma omp target
7877 #pragma omp teams distribute parallel for simd
7878   for (int i = 0; i < 10; ++i) {
7879 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7880     {
7881       bar();
7882     }
7883   }
7884 #pragma omp target
7885 #pragma omp teams distribute parallel for simd
7886   for (int i = 0; i < 10; ++i) {
7887 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7888     bar();
7889   }
7890 #pragma omp target
7891 #pragma omp teams distribute parallel for simd
7892   for (int i = 0; i < 10; ++i) {
7893 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7894     bar();
7895   }
7896 #pragma omp target
7897 #pragma omp teams distribute parallel for simd
7898   for (int i = 0; i < 10; ++i) {
7899 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
7900     bar();
7901   }
7902 #pragma omp target
7903 #pragma omp teams distribute parallel for simd
7904   for (int i = 0; i < 10; ++i) {
7905 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7906     bar();
7907   }
7908 #pragma omp target
7909 #pragma omp teams distribute parallel for simd
7910   for (int i = 0; i < 10; ++i) {
7911 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7912     bar();
7913   }
7914 #pragma omp target
7915 #pragma omp teams distribute parallel for simd
7916   for (int i = 0; i < 10; ++i) {
7917 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7918     bar();
7919   }
7920 #pragma omp target
7921 #pragma omp teams distribute parallel for simd
7922   for (int i = 0; i < 10; ++i) {
7923 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7924     ++a;
7925   }
7926 #pragma omp target
7927 #pragma omp teams distribute parallel for simd
7928   for (int i = 0; i < 10; ++i) {
7929 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7930     ++a;
7931   }
7932 #pragma omp target
7933 #pragma omp teams distribute parallel for simd
7934   for (int i = 0; i < 10; ++i) {
7935 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7936     ++a;
7937   }
7938 #pragma omp target
7939 #pragma omp teams distribute parallel for simd
7940   for (int i = 0; i < 10; ++i) {
7941 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7942     for (int i = 0; i < 10; ++i)
7943       ;
7944   }
7945 #pragma omp target
7946 #pragma omp teams distribute parallel for simd
7947   for (int i = 0; i < 10; ++i) {
7948 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7949     ++a;
7950   }
7951 #pragma omp target
7952 #pragma omp teams distribute parallel for simd
7953   for (int i = 0; i < 10; ++i) {
7954 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7955     ++a;
7956   }
7957 #pragma omp target
7958 #pragma omp teams distribute parallel for simd
7959   for (int i = 0; i < 10; ++i) {
7960 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7961     ++a;
7962   }
7963 #pragma omp target
7964 #pragma omp teams distribute parallel for simd
7965   for (int i = 0; i < 10; ++i) {
7966 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7967     ++a;
7968   }
7969 #pragma omp target
7970 #pragma omp teams distribute parallel for simd
7971   for (int i = 0; i < 10; ++i) {
7972 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7973     for (int i = 0; i < 10; ++i)
7974       ++a;
7975   }
7976 #pragma omp target
7977 #pragma omp teams distribute parallel for simd
7978   for (int i = 0; i < 10; ++i) {
7979 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7980     for (int i = 0; i < 10; ++i)
7981       ++a;
7982   }
7983 #pragma omp target
7984 #pragma omp teams distribute parallel for simd
7985   for (int i = 0; i < 10; ++i) {
7986 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7987     for (int i = 0; i < 10; ++i)
7988       ++a;
7989   }
7990 #pragma omp target
7991 #pragma omp teams distribute parallel for simd
7992   for (int i = 0; i < 10; ++i) {
7993 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7994     for (int i = 0; i < 10; ++i)
7995       ++a;
7996   }
7997 #pragma omp target
7998 #pragma omp teams distribute parallel for simd
7999   for (int i = 0; i < 10; ++i) {
8000 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8001     for (int i = 0; i < 10; ++i)
8002       ++a;
8003   }
8004 #pragma omp target
8005 #pragma omp teams distribute parallel for simd
8006   for (int i = 0; i < 10; ++i) {
8007 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8008     for (int i = 0; i < 10; ++i)
8009       ++a;
8010   }
8011 #pragma omp target
8012 #pragma omp teams distribute parallel for simd
8013   for (int i = 0; i < 10; ++i) {
8014 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8015     ++a;
8016   }
8017 #pragma omp target
8018 #pragma omp teams distribute parallel for simd
8019   for (int i = 0; i < 10; ++i) {
8020 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8021     for (int i = 0; i < 10; ++i)
8022       ++a;
8023   }
8024 #pragma omp target
8025 #pragma omp teams distribute parallel for simd
8026   for (int i = 0; i < 10; ++i) {
8027 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8028     for (int i = 0; i < 10; ++i)
8029       ++a;
8030   }
8031 #pragma omp target
8032 #pragma omp teams distribute parallel for simd
8033   for (int i = 0; i < 10; ++i) {
8034 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8035     for (int i = 0; i < 10; ++i)
8036       ++a;
8037   }
8038 #pragma omp target
8039 #pragma omp teams distribute parallel for simd
8040   for (int i = 0; i < 10; ++i) {
8041 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8042     for (int i = 0; i < 10; ++i)
8043       ++a;
8044   }
8045 
8046 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8047 #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?}}
8048   for (int i = 0; i < 10; ++i)
8049     ;
8050 #pragma omp target
8051 #pragma omp teams distribute parallel for
8052   for (int i = 0; i < 10; ++i) {
8053 #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?}}
8054     for (int i = 0; i < 10; ++i)
8055       ;
8056   }
8057 #pragma omp target
8058 #pragma omp teams distribute parallel for
8059   for (int i = 0; i < 10; ++i) {
8060 #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?}}
8061     for (int i = 0; i < 10; ++i)
8062       ;
8063   }
8064 #pragma omp target
8065 #pragma omp teams distribute parallel for
8066   for (int i = 0; i < 10; ++i) {
8067 #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?}}
8068     for (int i = 0; i < 10; ++i)
8069       ;
8070   }
8071 #pragma omp target
8072 #pragma omp teams distribute parallel for
8073   for (int i = 0; i < 10; ++i) {
8074 #pragma omp simd // OK
8075     for (int i = 0; i < 10; ++i)
8076       ;
8077   }
8078 #pragma omp target
8079 #pragma omp teams distribute parallel for
8080   for (int i = 0; i < 10; ++i) {
8081 #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?}}
8082     for (int i = 0; i < 10; ++i)
8083       ;
8084   }
8085 #pragma omp target
8086 #pragma omp teams distribute parallel for
8087   for (int i = 0; i < 10; ++i) {
8088 #pragma omp parallel // OK
8089     for (int i = 0; i < 10; ++i)
8090       ;
8091   }
8092 #pragma omp target
8093 #pragma omp teams distribute parallel for
8094   for (int i = 0; i < 10; ++i) {
8095 #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?}}
8096     {
8097       bar();
8098     }
8099   }
8100 #pragma omp target
8101 #pragma omp teams distribute parallel for
8102   for (int i = 0; i < 10; ++i) {
8103 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
8104     {
8105       bar();
8106     }
8107   }
8108 #pragma omp target
8109 #pragma omp teams distribute parallel for
8110   for (int i = 0; i < 10; ++i) {
8111 #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?}}
8112     {
8113       bar();
8114     }
8115   }
8116 #pragma omp target
8117 #pragma omp teams distribute parallel for
8118   for (int i = 0; i < 10; ++i) {
8119 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8120     {
8121       bar();
8122     }
8123   }
8124 #pragma omp target
8125 #pragma omp teams distribute parallel for
8126   for (int i = 0; i < 10; ++i) {
8127 #pragma omp critical // OK
8128     {
8129       bar();
8130     }
8131   }
8132 #pragma omp target
8133 #pragma omp teams distribute parallel for
8134   for (int i = 0; i < 10; ++i) {
8135 #pragma omp parallel // OK
8136     {
8137 #pragma omp single
8138       {
8139         bar();
8140       }
8141     }
8142   }
8143 #pragma omp target
8144 #pragma omp teams distribute parallel for
8145   for (int i = 0; i < 10; ++i) {
8146 #pragma omp parallel for // OK
8147     for (int i = 0; i < 10; ++i)
8148       ;
8149   }
8150 #pragma omp target
8151 #pragma omp teams distribute parallel for
8152   for (int i = 0; i < 10; ++i) {
8153 #pragma omp parallel for simd // OK
8154     for (int i = 0; i < 10; ++i)
8155       ;
8156   }
8157 #pragma omp target
8158 #pragma omp teams distribute parallel for
8159   for (int i = 0; i < 10; ++i) {
8160 #pragma omp parallel sections // OK
8161     {
8162       bar();
8163     }
8164   }
8165 #pragma omp target
8166 #pragma omp teams distribute parallel for
8167   for (int i = 0; i < 10; ++i) {
8168 #pragma omp task // OK
8169     {
8170       bar();
8171     }
8172   }
8173 #pragma omp target
8174 #pragma omp teams distribute parallel for
8175   for (int i = 0; i < 10; ++i) {
8176 #pragma omp taskyield // OK
8177     bar();
8178   }
8179 #pragma omp target
8180 #pragma omp teams distribute parallel for
8181   for (int i = 0; i < 10; ++i) {
8182 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8183     bar();
8184   }
8185 #pragma omp target
8186 #pragma omp teams distribute parallel for
8187   for (int i = 0; i < 10; ++i) {
8188 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8189     bar();
8190   }
8191 #pragma omp target
8192 #pragma omp teams distribute parallel for
8193   for (int i = 0; i < 10; ++i) {
8194 #pragma omp taskwait // OK
8195     bar();
8196   }
8197 #pragma omp target
8198 #pragma omp teams distribute parallel for
8199   for (int i = 0; i < 10; ++i) {
8200 #pragma omp flush // OK
8201     bar();
8202   }
8203 #pragma omp target
8204 #pragma omp teams distribute parallel for
8205   for (int i = 0; i < 10; ++i) {
8206 #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?}}
8207     bar();
8208   }
8209 #pragma omp target
8210 #pragma omp teams distribute parallel for
8211   for (int i = 0; i < 10; ++i) {
8212 #pragma omp atomic // OK
8213     ++a;
8214   }
8215 #pragma omp target
8216 #pragma omp teams distribute parallel for
8217   for (int i = 0; i < 10; ++i) {
8218 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8219     ++a;
8220   }
8221 #pragma omp target
8222 #pragma omp teams distribute parallel for
8223   for (int i = 0; i < 10; ++i) {
8224 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
8225     ++a;
8226   }
8227 #pragma omp target
8228 #pragma omp teams distribute parallel for
8229   for (int i = 0; i < 10; ++i) {
8230 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8231     for (int i = 0; i < 10; ++i)
8232       ;
8233   }
8234 #pragma omp target
8235 #pragma omp teams distribute parallel for
8236   for (int i = 0; i < 10; ++i) {
8237 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8238     ++a;
8239   }
8240 #pragma omp target
8241 #pragma omp teams distribute parallel for
8242   for (int i = 0; i < 10; ++i) {
8243 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8244     ++a;
8245   }
8246 #pragma omp target
8247 #pragma omp teams distribute parallel for
8248   for (int i = 0; i < 10; ++i) {
8249 #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?}}
8250     ++a;
8251   }
8252 #pragma omp target
8253 #pragma omp teams distribute parallel for
8254   for (int i = 0; i < 10; ++i) {
8255 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8256     ++a;
8257   }
8258 #pragma omp target
8259 #pragma omp teams distribute parallel for
8260   for (int i = 0; i < 10; ++i) {
8261 #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?}}
8262     for (int i = 0; i < 10; ++i)
8263       ++a;
8264   }
8265 #pragma omp target
8266 #pragma omp teams distribute parallel for
8267   for (int i = 0; i < 10; ++i) {
8268 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
8269     for (int i = 0; i < 10; ++i)
8270       ++a;
8271   }
8272 #pragma omp target
8273 #pragma omp teams distribute parallel for
8274   for (int i = 0; i < 10; ++i) {
8275 #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?}}
8276     for (int i = 0; i < 10; ++i)
8277       ++a;
8278   }
8279 #pragma omp target
8280 #pragma omp teams distribute parallel for
8281   for (int i = 0; i < 10; ++i) {
8282 #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?}}
8283     for (int i = 0; i < 10; ++i)
8284       ++a;
8285   }
8286 #pragma omp target
8287 #pragma omp teams distribute parallel for
8288   for (int i = 0; i < 10; ++i) {
8289 #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?}}
8290     for (int i = 0; i < 10; ++i)
8291       ++a;
8292   }
8293 #pragma omp target
8294 #pragma omp teams distribute parallel for
8295   for (int i = 0; i < 10; ++i) {
8296 #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?}}
8297     for (int i = 0; i < 10; ++i)
8298       ++a;
8299   }
8300 #pragma omp target
8301 #pragma omp teams distribute parallel for
8302   for (int i = 0; i < 10; ++i) {
8303 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
8304     ++a;
8305   }
8306 #pragma omp target
8307 #pragma omp teams distribute parallel for
8308   for (int i = 0; i < 10; ++i) {
8309 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
8310     for (int i = 0; i < 10; ++i)
8311       ++a;
8312   }
8313 #pragma omp target
8314 #pragma omp teams distribute parallel for
8315   for (int i = 0; i < 10; ++i) {
8316 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
8317     for (int i = 0; i < 10; ++i)
8318       ++a;
8319   }
8320 #pragma omp target
8321 #pragma omp teams distribute parallel for
8322   for (int i = 0; i < 10; ++i) {
8323 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
8324     for (int i = 0; i < 10; ++i)
8325       ++a;
8326   }
8327 #pragma omp target
8328 #pragma omp teams distribute parallel for
8329   for (int i = 0; i < 10; ++i) {
8330 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
8331     for (int i = 0; i < 10; ++i)
8332       ++a;
8333   }
8334 
8335 // TARGET TEAMS DIRECTIVE
8336 #pragma omp target teams
8337 #pragma omp parallel
8338   bar();
8339 #pragma omp target teams
8340 #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?}}
8341   for (int i = 0; i < 10; ++i)
8342     ;
8343 #pragma omp target teams
8344 #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?}}
8345   for (int i = 0; i < 10; ++i)
8346     ;
8347 #pragma omp target teams
8348 #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?}}
8349   for (int i = 0; i < 10; ++i)
8350     ;
8351 #pragma omp target teams
8352 #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?}}
8353   {
8354     bar();
8355   }
8356 #pragma omp target teams
8357 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
8358   {
8359     bar();
8360   }
8361 #pragma omp target teams
8362 #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?}}
8363   bar();
8364 
8365 #pragma omp target teams
8366 #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?}}
8367   {
8368     bar();
8369   }
8370 #pragma omp target teams
8371 #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?}}
8372   {
8373     bar();
8374   }
8375 #pragma omp target teams
8376 #pragma omp parallel for
8377   for (int i = 0; i < 10; ++i)
8378     ;
8379 #pragma omp target teams
8380 #pragma omp parallel for simd
8381   for (int i = 0; i < 10; ++i)
8382     ;
8383 #pragma omp target teams
8384 #pragma omp parallel sections
8385   {
8386     bar();
8387   }
8388 #pragma omp target teams
8389 #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?}}
8390   {
8391     bar();
8392   }
8393 #pragma omp target teams
8394   {
8395 #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?}}
8396     bar();
8397   }
8398 #pragma omp target teams
8399   {
8400 #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?}}
8401     bar();
8402   }
8403 #pragma omp target teams
8404   {
8405 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
8406     bar();
8407   }
8408 #pragma omp target teams
8409   {
8410 #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?}}
8411     bar();
8412   }
8413 #pragma omp target teams
8414   {
8415 #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?}}
8416     bar();
8417   }
8418 #pragma omp target teams
8419   {
8420 #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?}}
8421     bar();
8422   }
8423 #pragma omp target teams
8424   {
8425 #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?}}
8426     ++a;
8427   }
8428 #pragma omp target teams
8429   {
8430 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
8431     ++a;
8432   }
8433 #pragma omp target teams
8434   {
8435 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
8436     ++a;
8437   }
8438 #pragma omp target teams
8439 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8440   for (int i = 0; i < 10; ++i)
8441     ;
8442 #pragma omp target teams
8443   {
8444 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8445   }
8446 #pragma omp target teams
8447   {
8448 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8449   }
8450 #pragma omp target teams
8451   {
8452 #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?}}
8453     ++a;
8454   }
8455 #pragma omp target teams
8456   {
8457 #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?}}
8458   for (int i = 0; i < 10; ++i)
8459     ++a;
8460   }
8461 #pragma omp target teams
8462 #pragma omp distribute
8463   for (int i = 0; i < 10; ++i)
8464     ;
8465 #pragma omp target teams
8466   {
8467 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
8468     ++a;
8469   }
8470 #pragma omp target teams
8471 #pragma omp distribute parallel for
8472   for (int i = 0; i < 10; ++i)
8473     ;
8474 #pragma omp target teams
8475   {
8476 #pragma omp distribute parallel for
8477   for (int i = 0; i < 10; ++i)
8478     ;
8479 #pragma omp distribute parallel for
8480   for (int j = 0; j < 10; ++j)
8481     ;
8482   }
8483 #pragma omp target teams
8484   {
8485 #pragma omp distribute parallel for simd
8486   for (int i = 0; i < 10; ++i)
8487     ;
8488 #pragma omp distribute parallel for simd
8489   for (int j = 0; j < 10; ++j)
8490     ;
8491   }
8492 #pragma omp target teams
8493   {
8494 #pragma omp distribute simd
8495   for (int i = 0; i < 10; ++i)
8496     ;
8497 #pragma omp distribute simd
8498   for (int j = 0; j < 10; ++j)
8499     ;
8500   }
8501 #pragma omp target teams
8502   {
8503 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
8504   for (int i = 0; i < 10; ++i)
8505     ;
8506   }
8507 #pragma omp target teams
8508   {
8509 #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?}}
8510   for (int i = 0; i < 10; ++i)
8511     ;
8512   }
8513 #pragma omp target teams
8514   {
8515 #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?}}
8516   for (int i = 0; i < 10; ++i)
8517     ;
8518   }
8519 #pragma omp target teams
8520   {
8521 #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?}}
8522   for (int i = 0; i < 10; ++i)
8523     ;
8524   }
8525 #pragma omp target teams
8526   {
8527 #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?}}
8528   for (int i = 0; i < 10; ++i)
8529     ;
8530   }
8531 #pragma omp target teams
8532   {
8533 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
8534     a++;
8535   }
8536 #pragma omp target teams
8537   {
8538 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
8539   for (int i = 0; i < 10; ++i)
8540     ;
8541   }
8542 #pragma omp target teams
8543   {
8544 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8545   for (int i = 0; i < 10; ++i)
8546     ;
8547   }
8548 #pragma omp target teams
8549   {
8550 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
8551   for (int i = 0; i < 10; ++i)
8552     ;
8553   }
8554 #pragma omp target teams
8555   {
8556 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
8557   for (int i = 0; i < 10; ++i)
8558     ;
8559   }
8560 
8561 // TARGET TEAMS DISTRIBUTE DIRECTIVE
8562 #pragma omp target teams distribute // OK
8563   for (int i = 0; i < 10; ++i)
8564     ;
8565 #pragma omp target teams distribute
8566   for (int i = 0; i < 10; ++i) {
8567 #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?}}
8568     for (int i = 0; i < 10; ++i)
8569       ;
8570   }
8571 #pragma omp target teams distribute
8572   for (int i = 0; i < 10; ++i) {
8573 #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?}}
8574     for (int i = 0; i < 10; ++i)
8575       ;
8576   }
8577 #pragma omp target teams distribute
8578   for (int i = 0; i < 10; ++i) {
8579 #pragma omp for // OK
8580     for (int i = 0; i < 10; ++i)
8581       ;
8582   }
8583 #pragma omp target teams distribute
8584   for (int i = 0; i < 10; ++i) {
8585 #pragma omp simd // OK
8586     for (int i = 0; i < 10; ++i)
8587       ;
8588   }
8589 #pragma omp target teams distribute
8590   for (int i = 0; i < 10; ++i) {
8591 #pragma omp for simd // OK
8592     for (int i = 0; i < 10; ++i)
8593       ;
8594   }
8595 #pragma omp target teams distribute
8596   for (int i = 0; i < 10; ++i) {
8597 #pragma omp parallel // OK
8598     for (int i = 0; i < 10; ++i)
8599       ;
8600   }
8601 #pragma omp target teams distribute
8602   for (int i = 0; i < 10; ++i) {
8603 #pragma omp sections // OK
8604     {
8605       bar();
8606     }
8607   }
8608 #pragma omp target teams distribute
8609   for (int i = 0; i < 10; ++i) {
8610 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
8611     {
8612       bar();
8613     }
8614   }
8615 #pragma omp target teams distribute
8616   for (int i = 0; i < 10; ++i) {
8617 #pragma omp single // OK
8618     {
8619       bar();
8620     }
8621   }
8622 #pragma omp target teams distribute
8623   for (int i = 0; i < 10; ++i) {
8624 #pragma omp master // OK
8625     {
8626       bar();
8627     }
8628   }
8629 #pragma omp target teams distribute
8630   for (int i = 0; i < 10; ++i) {
8631 #pragma omp critical // OK
8632     {
8633       bar();
8634     }
8635   }
8636 #pragma omp target teams distribute
8637   for (int i = 0; i < 10; ++i) {
8638 #pragma omp parallel // OK
8639     {
8640 #pragma omp single
8641       {
8642         bar();
8643       }
8644     }
8645   }
8646 #pragma omp target teams distribute
8647   for (int i = 0; i < 10; ++i) {
8648 #pragma omp parallel for // OK
8649     for (int i = 0; i < 10; ++i)
8650       ;
8651   }
8652 #pragma omp target teams distribute
8653   for (int i = 0; i < 10; ++i) {
8654 #pragma omp parallel for simd // OK
8655     for (int i = 0; i < 10; ++i)
8656       ;
8657   }
8658 #pragma omp target teams distribute
8659   for (int i = 0; i < 10; ++i) {
8660 #pragma omp parallel sections // OK
8661     {
8662       bar();
8663     }
8664   }
8665 #pragma omp target teams distribute
8666   for (int i = 0; i < 10; ++i) {
8667 #pragma omp task // OK
8668     {
8669       bar();
8670     }
8671   }
8672 #pragma omp target teams distribute
8673   for (int i = 0; i < 10; ++i) {
8674 #pragma omp taskyield // OK
8675     bar();
8676   }
8677 #pragma omp target teams distribute
8678   for (int i = 0; i < 10; ++i) {
8679 #pragma omp barrier // OK
8680     bar();
8681   }
8682 #pragma omp target teams distribute
8683   for (int i = 0; i < 10; ++i) {
8684 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
8685     bar();
8686   }
8687 #pragma omp target teams distribute
8688   for (int i = 0; i < 10; ++i) {
8689 #pragma omp taskwait // OK
8690     bar();
8691   }
8692 #pragma omp target teams distribute
8693   for (int i = 0; i < 10; ++i) {
8694 #pragma omp flush // OK
8695     bar();
8696   }
8697 #pragma omp target teams distribute
8698   for (int i = 0; i < 10; ++i) {
8699 #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?}}
8700     bar();
8701   }
8702 #pragma omp target teams distribute
8703   for (int i = 0; i < 10; ++i) {
8704 #pragma omp atomic // OK
8705     ++a;
8706   }
8707 #pragma omp target teams distribute
8708   for (int i = 0; i < 10; ++i) {
8709 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8710     ++a;
8711   }
8712 #pragma omp target teams distribute
8713   for (int i = 0; i < 10; ++i) {
8714 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8715     ++a;
8716   }
8717 #pragma omp target teams distribute
8718   for (int i = 0; i < 10; ++i) {
8719 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8720     for (int i = 0; i < 10; ++i)
8721       ;
8722   }
8723 #pragma omp target teams distribute
8724   for (int i = 0; i < 10; ++i) {
8725 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8726     ++a;
8727   }
8728 #pragma omp target teams distribute
8729   for (int i = 0; i < 10; ++i) {
8730 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8731     ++a;
8732   }
8733 #pragma omp target teams distribute
8734   for (int i = 0; i < 10; ++i) {
8735 #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?}}
8736     ++a;
8737   }
8738 #pragma omp target teams distribute
8739   for (int i = 0; i < 10; ++i) {
8740 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8741     ++a;
8742   }
8743 #pragma omp target teams distribute
8744   for (int i = 0; i < 10; ++i) {
8745 #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?}}
8746     for (int i = 0; i < 10; ++i)
8747       ++a;
8748   }
8749 #pragma omp target teams distribute
8750   for (int i = 0; i < 10; ++i) {
8751 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8752     for (int i = 0; i < 10; ++i)
8753       ++a;
8754   }
8755 #pragma omp target teams distribute
8756   for (int i = 0; i < 10; ++i) {
8757 #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?}}
8758     for (int i = 0; i < 10; ++i)
8759       ++a;
8760   }
8761 #pragma omp target teams distribute
8762   for (int i = 0; i < 10; ++i) {
8763 #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?}}
8764     for (int i = 0; i < 10; ++i)
8765       ++a;
8766   }
8767 #pragma omp target teams distribute
8768   for (int i = 0; i < 10; ++i) {
8769 #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?}}
8770     for (int i = 0; i < 10; ++i)
8771       ++a;
8772   }
8773 #pragma omp target teams distribute
8774   for (int i = 0; i < 10; ++i) {
8775 #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?}}
8776     for (int i = 0; i < 10; ++i)
8777       ;
8778   }
8779 #pragma omp target teams distribute
8780   for (int i = 0; i < 10; ++i) {
8781 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8782     a++;
8783   }
8784 #pragma omp target teams distribute
8785   for (int i = 0; i < 10; ++i) {
8786 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8787     for (int i = 0; i < 10; ++i)
8788       ;
8789   }
8790 #pragma omp target teams distribute
8791   for (int i = 0; i < 10; ++i) {
8792 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8793     for (int i = 0; i < 10; ++i)
8794       ;
8795   }
8796 #pragma omp target teams distribute
8797   for (int i = 0; i < 10; ++i) {
8798 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8799     for (int i = 0; i < 10; ++i)
8800       ;
8801   }
8802 #pragma omp target teams distribute
8803   for (int i = 0; i < 10; ++i) {
8804 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8805     for (int i = 0; i < 10; ++i)
8806       ;
8807   }
8808 
8809 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8810 #pragma omp target teams distribute parallel for // OK
8811   for (int i = 0; i < 10; ++i)
8812     ;
8813 #pragma omp target teams distribute parallel for
8814   for (int i = 0; i < 10; ++i) {
8815 #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?}}
8816     for (int i = 0; i < 10; ++i)
8817       ;
8818   }
8819 #pragma omp target teams distribute parallel for
8820   for (int i = 0; i < 10; ++i) {
8821 #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?}}
8822     for (int i = 0; i < 10; ++i)
8823       ;
8824   }
8825 #pragma omp target teams distribute parallel for
8826   for (int i = 0; i < 10; ++i) {
8827 #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?}}
8828     for (int i = 0; i < 10; ++i)
8829       ;
8830   }
8831 #pragma omp target teams distribute parallel for
8832   for (int i = 0; i < 10; ++i) {
8833 #pragma omp simd // OK
8834     for (int i = 0; i < 10; ++i)
8835       ;
8836   }
8837 #pragma omp target teams distribute parallel for
8838   for (int i = 0; i < 10; ++i) {
8839 #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?}}
8840     for (int i = 0; i < 10; ++i)
8841       ;
8842   }
8843 #pragma omp target teams distribute parallel for
8844   for (int i = 0; i < 10; ++i) {
8845 #pragma omp parallel // OK
8846     for (int i = 0; i < 10; ++i)
8847       ;
8848   }
8849 #pragma omp target teams distribute parallel for
8850   for (int i = 0; i < 10; ++i) {
8851 #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?}}
8852     {
8853       bar();
8854     }
8855   }
8856 #pragma omp target teams distribute parallel for
8857   for (int i = 0; i < 10; ++i) {
8858 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
8859     {
8860       bar();
8861     }
8862   }
8863 #pragma omp target teams distribute parallel for
8864   for (int i = 0; i < 10; ++i) {
8865 #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?}}
8866     {
8867       bar();
8868     }
8869   }
8870 #pragma omp target teams distribute parallel for
8871   for (int i = 0; i < 10; ++i) {
8872 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8873     {
8874       bar();
8875     }
8876   }
8877 #pragma omp target teams distribute parallel for
8878   for (int i = 0; i < 10; ++i) {
8879 #pragma omp critical // OK
8880     {
8881       bar();
8882     }
8883   }
8884 #pragma omp target teams distribute parallel for
8885   for (int i = 0; i < 10; ++i) {
8886 #pragma omp parallel // OK
8887     {
8888 #pragma omp single
8889       {
8890         bar();
8891       }
8892     }
8893   }
8894 #pragma omp target teams distribute parallel for
8895   for (int i = 0; i < 10; ++i) {
8896 #pragma omp parallel for // OK
8897     for (int i = 0; i < 10; ++i)
8898       ;
8899   }
8900 #pragma omp target teams distribute parallel for
8901   for (int i = 0; i < 10; ++i) {
8902 #pragma omp parallel for simd // OK
8903     for (int i = 0; i < 10; ++i)
8904       ;
8905   }
8906 #pragma omp target teams distribute parallel for
8907   for (int i = 0; i < 10; ++i) {
8908 #pragma omp parallel sections // OK
8909     {
8910       bar();
8911     }
8912   }
8913 #pragma omp target teams distribute parallel for
8914   for (int i = 0; i < 10; ++i) {
8915 #pragma omp task // OK
8916     {
8917       bar();
8918     }
8919   }
8920 #pragma omp target teams distribute parallel for
8921   for (int i = 0; i < 10; ++i) {
8922 #pragma omp taskyield // OK
8923     bar();
8924   }
8925 #pragma omp target teams distribute parallel for
8926   for (int i = 0; i < 10; ++i) {
8927 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8928     bar();
8929   }
8930 #pragma omp target teams distribute parallel for
8931   for (int i = 0; i < 10; ++i) {
8932 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8933     bar();
8934   }
8935 #pragma omp target teams distribute parallel for
8936   for (int i = 0; i < 10; ++i) {
8937 #pragma omp taskwait // OK
8938     bar();
8939   }
8940 #pragma omp target teams distribute parallel for
8941   for (int i = 0; i < 10; ++i) {
8942 #pragma omp flush // OK
8943     bar();
8944   }
8945 #pragma omp target teams distribute parallel for
8946   for (int i = 0; i < 10; ++i) {
8947 #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?}}
8948     bar();
8949   }
8950 #pragma omp target teams distribute parallel for
8951   for (int i = 0; i < 10; ++i) {
8952 #pragma omp atomic // OK
8953     ++a;
8954   }
8955 #pragma omp target teams distribute parallel for
8956   for (int i = 0; i < 10; ++i) {
8957 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8958     ++a;
8959   }
8960 #pragma omp target teams distribute parallel for
8961   for (int i = 0; i < 10; ++i) {
8962 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8963     ++a;
8964   }
8965 #pragma omp target teams distribute parallel for
8966   for (int i = 0; i < 10; ++i) {
8967 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8968     for (int i = 0; i < 10; ++i)
8969       ;
8970   }
8971 #pragma omp target teams distribute parallel for
8972   for (int i = 0; i < 10; ++i) {
8973 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8974     ++a;
8975   }
8976 #pragma omp target teams distribute parallel for
8977   for (int i = 0; i < 10; ++i) {
8978 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8979     ++a;
8980   }
8981 #pragma omp target teams distribute parallel for
8982   for (int i = 0; i < 10; ++i) {
8983 #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?}}
8984     ++a;
8985   }
8986 #pragma omp target teams distribute parallel for
8987   for (int i = 0; i < 10; ++i) {
8988 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8989     ++a;
8990   }
8991 #pragma omp target teams distribute parallel for
8992   for (int i = 0; i < 10; ++i) {
8993 #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?}}
8994     for (int i = 0; i < 10; ++i)
8995       ++a;
8996   }
8997 #pragma omp target teams distribute parallel for
8998   for (int i = 0; i < 10; ++i) {
8999 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9000     for (int i = 0; i < 10; ++i)
9001       ++a;
9002   }
9003 #pragma omp target teams distribute parallel for
9004   for (int i = 0; i < 10; ++i) {
9005 #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?}}
9006     for (int i = 0; i < 10; ++i)
9007       ++a;
9008   }
9009 #pragma omp target teams distribute parallel for
9010   for (int i = 0; i < 10; ++i) {
9011 #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?}}
9012     for (int i = 0; i < 10; ++i)
9013       ++a;
9014   }
9015 #pragma omp target teams distribute parallel for
9016   for (int i = 0; i < 10; ++i) {
9017 #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?}}
9018     for (int i = 0; i < 10; ++i)
9019       ++a;
9020   }
9021 #pragma omp target teams distribute parallel for
9022   for (int i = 0; i < 10; ++i) {
9023 #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?}}
9024     for (int i = 0; i < 10; ++i)
9025       ;
9026   }
9027 #pragma omp target teams distribute parallel for
9028   for (int i = 0; i < 10; ++i) {
9029 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9030     a++;
9031   }
9032 #pragma omp target teams distribute parallel for
9033   for (int i = 0; i < 10; ++i) {
9034 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9035     for (int i = 0; i < 10; ++i)
9036       ;
9037   }
9038 #pragma omp target teams distribute parallel for
9039   for (int i = 0; i < 10; ++i) {
9040 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9041     for (int i = 0; i < 10; ++i)
9042       ;
9043   }
9044 #pragma omp target teams distribute parallel for
9045   for (int i = 0; i < 10; ++i) {
9046 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9047     for (int i = 0; i < 10; ++i)
9048       ;
9049   }
9050 #pragma omp target teams distribute parallel for
9051   for (int i = 0; i < 10; ++i) {
9052 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9053     for (int i = 0; i < 10; ++i)
9054       ;
9055   }
9056 
9057 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
9058 #pragma omp target teams distribute parallel for simd // OK
9059   for (int i = 0; i < 10; ++i)
9060     ;
9061 #pragma omp target teams distribute parallel for simd
9062   for (int i = 0; i < 10; ++i) {
9063 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9064     for (int i = 0; i < 10; ++i)
9065       ;
9066   }
9067 #pragma omp target teams distribute parallel for simd
9068   for (int i = 0; i < 10; ++i) {
9069 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9070     for (int i = 0; i < 10; ++i)
9071       ;
9072   }
9073 #pragma omp target teams distribute parallel for simd
9074   for (int i = 0; i < 10; ++i) {
9075 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9076     for (int i = 0; i < 10; ++i)
9077       ;
9078   }
9079 #pragma omp target teams distribute parallel for simd
9080   for (int i = 0; i < 10; ++i) {
9081 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9082     for (int i = 0; i < 10; ++i)
9083       ;
9084   }
9085 #pragma omp target teams distribute parallel for simd
9086   for (int i = 0; i < 10; ++i) {
9087 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9088     for (int i = 0; i < 10; ++i)
9089       ;
9090   }
9091 #pragma omp target teams distribute parallel for simd
9092   for (int i = 0; i < 10; ++i) {
9093 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9094     for (int i = 0; i < 10; ++i)
9095       ;
9096   }
9097 #pragma omp target teams distribute parallel for simd
9098   for (int i = 0; i < 10; ++i) {
9099 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9100     {
9101       bar();
9102     }
9103   }
9104 #pragma omp target teams distribute parallel for simd
9105   for (int i = 0; i < 10; ++i) {
9106 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9107     {
9108       bar();
9109     }
9110   }
9111 #pragma omp target teams distribute parallel for simd
9112   for (int i = 0; i < 10; ++i) {
9113 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9114     {
9115       bar();
9116     }
9117   }
9118 #pragma omp target teams distribute parallel for simd
9119   for (int i = 0; i < 10; ++i) {
9120 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9121     {
9122       bar();
9123     }
9124   }
9125 #pragma omp target teams distribute parallel for simd
9126   for (int i = 0; i < 10; ++i) {
9127 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9128     {
9129       bar();
9130     }
9131   }
9132 #pragma omp target teams distribute parallel for simd
9133   for (int i = 0; i < 10; ++i) {
9134 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9135     {
9136 #pragma omp single
9137       {
9138         bar();
9139       }
9140     }
9141   }
9142 #pragma omp target teams distribute parallel for simd
9143   for (int i = 0; i < 10; ++i) {
9144 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9145     for (int i = 0; i < 10; ++i)
9146       ;
9147   }
9148 #pragma omp target teams distribute parallel for simd
9149   for (int i = 0; i < 10; ++i) {
9150 #pragma omp parallel 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 parallel for simd
9155   for (int i = 0; i < 10; ++i) {
9156 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9157     {
9158       bar();
9159     }
9160   }
9161 #pragma omp target teams distribute parallel for simd
9162   for (int i = 0; i < 10; ++i) {
9163 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9164     {
9165       bar();
9166     }
9167   }
9168 #pragma omp target teams distribute parallel for simd
9169   for (int i = 0; i < 10; ++i) {
9170 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9171     bar();
9172   }
9173 #pragma omp target teams distribute parallel for simd
9174   for (int i = 0; i < 10; ++i) {
9175 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9176     bar();
9177   }
9178 #pragma omp target teams distribute parallel for simd
9179   for (int i = 0; i < 10; ++i) {
9180 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
9181     bar();
9182   }
9183 #pragma omp target teams distribute parallel for simd
9184   for (int i = 0; i < 10; ++i) {
9185 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9186     bar();
9187   }
9188 #pragma omp target teams distribute parallel for simd
9189   for (int i = 0; i < 10; ++i) {
9190 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9191     bar();
9192   }
9193 #pragma omp target teams distribute parallel for simd
9194   for (int i = 0; i < 10; ++i) {
9195 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9196     bar();
9197   }
9198 #pragma omp target teams distribute parallel for simd
9199   for (int i = 0; i < 10; ++i) {
9200 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9201     ++a;
9202   }
9203 #pragma omp target teams distribute parallel for simd
9204   for (int i = 0; i < 10; ++i) {
9205 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9206     ++a;
9207   }
9208 #pragma omp target teams distribute parallel for simd
9209   for (int i = 0; i < 10; ++i) {
9210 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9211     ++a;
9212   }
9213 #pragma omp target teams distribute parallel for simd
9214   for (int i = 0; i < 10; ++i) {
9215 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9216     for (int i = 0; i < 10; ++i)
9217       ;
9218   }
9219 #pragma omp target teams distribute parallel for simd
9220   for (int i = 0; i < 10; ++i) {
9221 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9222     ++a;
9223   }
9224 #pragma omp target teams distribute parallel for simd
9225   for (int i = 0; i < 10; ++i) {
9226 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9227     ++a;
9228   }
9229 #pragma omp target teams distribute parallel for simd
9230   for (int i = 0; i < 10; ++i) {
9231 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9232     ++a;
9233   }
9234 #pragma omp target teams distribute parallel for simd
9235   for (int i = 0; i < 10; ++i) {
9236 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9237     ++a;
9238   }
9239 #pragma omp target teams distribute parallel for simd
9240   for (int i = 0; i < 10; ++i) {
9241 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9242     for (int i = 0; i < 10; ++i)
9243       ++a;
9244   }
9245 #pragma omp target teams distribute parallel for simd
9246   for (int i = 0; i < 10; ++i) {
9247 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9248     for (int i = 0; i < 10; ++i)
9249       ++a;
9250   }
9251 #pragma omp target teams distribute parallel for simd
9252   for (int i = 0; i < 10; ++i) {
9253 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9254     for (int i = 0; i < 10; ++i)
9255       ++a;
9256   }
9257 #pragma omp target teams distribute parallel for simd
9258   for (int i = 0; i < 10; ++i) {
9259 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9260     for (int i = 0; i < 10; ++i)
9261       ++a;
9262   }
9263 #pragma omp target teams distribute parallel for simd
9264   for (int i = 0; i < 10; ++i) {
9265 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9266     for (int i = 0; i < 10; ++i)
9267       ++a;
9268   }
9269 #pragma omp target teams distribute parallel for simd
9270   for (int i = 0; i < 10; ++i) {
9271 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9272     for (int i = 0; i < 10; ++i)
9273       ;
9274   }
9275 #pragma omp target teams distribute parallel for simd
9276   for (int i = 0; i < 10; ++i) {
9277 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9278     a++;
9279   }
9280 #pragma omp target teams distribute parallel for simd
9281   for (int i = 0; i < 10; ++i) {
9282 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9283     for (int i = 0; i < 10; ++i)
9284       ;
9285   }
9286 #pragma omp target teams distribute parallel for simd
9287   for (int i = 0; i < 10; ++i) {
9288 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9289     for (int i = 0; i < 10; ++i)
9290       ;
9291   }
9292 #pragma omp target teams distribute parallel for simd
9293   for (int i = 0; i < 10; ++i) {
9294 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9295     for (int i = 0; i < 10; ++i)
9296       ;
9297   }
9298 #pragma omp target teams distribute parallel for simd
9299   for (int i = 0; i < 10; ++i) {
9300 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9301     for (int i = 0; i < 10; ++i)
9302       ;
9303   }
9304 
9305 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
9306 #pragma omp target teams distribute simd // OK
9307   for (int i = 0; i < 10; ++i)
9308     ;
9309 #pragma omp target teams distribute simd
9310   for (int i = 0; i < 10; ++i) {
9311 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9312     for (int i = 0; i < 10; ++i)
9313       ;
9314   }
9315 #pragma omp target teams distribute simd
9316   for (int i = 0; i < 10; ++i) {
9317 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9318     for (int i = 0; i < 10; ++i)
9319       ;
9320   }
9321 #pragma omp target teams distribute simd
9322   for (int i = 0; i < 10; ++i) {
9323 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9324     for (int i = 0; i < 10; ++i)
9325       ;
9326   }
9327 #pragma omp target teams distribute simd
9328   for (int i = 0; i < 10; ++i) {
9329 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
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 for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9336     for (int i = 0; i < 10; ++i)
9337       ;
9338   }
9339 #pragma omp target teams distribute simd
9340   for (int i = 0; i < 10; ++i) {
9341 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9342     for (int i = 0; i < 10; ++i)
9343       ;
9344   }
9345 #pragma omp target teams distribute simd
9346   for (int i = 0; i < 10; ++i) {
9347 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9348     {
9349       bar();
9350     }
9351   }
9352 #pragma omp target teams distribute simd
9353   for (int i = 0; i < 10; ++i) {
9354 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9355     {
9356       bar();
9357     }
9358   }
9359 #pragma omp target teams distribute simd
9360   for (int i = 0; i < 10; ++i) {
9361 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9362     {
9363       bar();
9364     }
9365   }
9366 #pragma omp target teams distribute simd
9367   for (int i = 0; i < 10; ++i) {
9368 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9369     {
9370       bar();
9371     }
9372   }
9373 #pragma omp target teams distribute simd
9374   for (int i = 0; i < 10; ++i) {
9375 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9376     {
9377       bar();
9378     }
9379   }
9380 #pragma omp target teams distribute simd
9381   for (int i = 0; i < 10; ++i) {
9382 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9383     {
9384 #pragma omp single
9385       {
9386         bar();
9387       }
9388     }
9389   }
9390 #pragma omp target teams distribute simd
9391   for (int i = 0; i < 10; ++i) {
9392 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9393     for (int i = 0; i < 10; ++i)
9394       ;
9395   }
9396 #pragma omp target teams distribute simd
9397   for (int i = 0; i < 10; ++i) {
9398 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9399     for (int i = 0; i < 10; ++i)
9400       ;
9401   }
9402 #pragma omp target teams distribute simd
9403   for (int i = 0; i < 10; ++i) {
9404 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9405     {
9406       bar();
9407     }
9408   }
9409 #pragma omp target teams distribute simd
9410   for (int i = 0; i < 10; ++i) {
9411 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9412     {
9413       bar();
9414     }
9415   }
9416 #pragma omp target teams distribute simd
9417   for (int i = 0; i < 10; ++i) {
9418 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9419     bar();
9420   }
9421 #pragma omp target teams distribute simd
9422   for (int i = 0; i < 10; ++i) {
9423 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9424     bar();
9425   }
9426 #pragma omp target teams distribute simd
9427   for (int i = 0; i < 10; ++i) {
9428 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
9429     bar();
9430   }
9431 #pragma omp target teams distribute simd
9432   for (int i = 0; i < 10; ++i) {
9433 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9434     bar();
9435   }
9436 #pragma omp target teams distribute simd
9437   for (int i = 0; i < 10; ++i) {
9438 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9439     bar();
9440   }
9441 #pragma omp target teams distribute simd
9442   for (int i = 0; i < 10; ++i) {
9443 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9444     bar();
9445   }
9446 #pragma omp target teams distribute simd
9447   for (int i = 0; i < 10; ++i) {
9448 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9449     ++a;
9450   }
9451 #pragma omp target teams distribute simd
9452   for (int i = 0; i < 10; ++i) {
9453 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9454     ++a;
9455   }
9456 #pragma omp target teams distribute simd
9457   for (int i = 0; i < 10; ++i) {
9458 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9459     ++a;
9460   }
9461 #pragma omp target teams distribute simd
9462   for (int i = 0; i < 10; ++i) {
9463 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9464     for (int i = 0; i < 10; ++i)
9465       ;
9466   }
9467 #pragma omp target teams distribute simd
9468   for (int i = 0; i < 10; ++i) {
9469 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9470     ++a;
9471   }
9472 #pragma omp target teams distribute simd
9473   for (int i = 0; i < 10; ++i) {
9474 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9475     ++a;
9476   }
9477 #pragma omp target teams distribute simd
9478   for (int i = 0; i < 10; ++i) {
9479 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9480     ++a;
9481   }
9482 #pragma omp target teams distribute simd
9483   for (int i = 0; i < 10; ++i) {
9484 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9485     ++a;
9486   }
9487 #pragma omp target teams distribute simd
9488   for (int i = 0; i < 10; ++i) {
9489 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9490     for (int i = 0; i < 10; ++i)
9491       ++a;
9492   }
9493 #pragma omp target teams distribute simd
9494   for (int i = 0; i < 10; ++i) {
9495 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9496     for (int i = 0; i < 10; ++i)
9497       ++a;
9498   }
9499 #pragma omp target teams distribute simd
9500   for (int i = 0; i < 10; ++i) {
9501 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9502     for (int i = 0; i < 10; ++i)
9503       ++a;
9504   }
9505 #pragma omp target teams distribute simd
9506   for (int i = 0; i < 10; ++i) {
9507 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9508     for (int i = 0; i < 10; ++i)
9509       ++a;
9510   }
9511 #pragma omp target teams distribute simd
9512   for (int i = 0; i < 10; ++i) {
9513 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9514     for (int i = 0; i < 10; ++i)
9515       ++a;
9516   }
9517 #pragma omp target teams distribute simd
9518   for (int i = 0; i < 10; ++i) {
9519 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9520     for (int i = 0; i < 10; ++i)
9521       ;
9522   }
9523 #pragma omp target teams distribute simd
9524   for (int i = 0; i < 10; ++i) {
9525 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9526     a++;
9527   }
9528 #pragma omp target teams distribute simd
9529   for (int i = 0; i < 10; ++i) {
9530 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9531     for (int i = 0; i < 10; ++i)
9532       ;
9533   }
9534 #pragma omp target teams distribute simd
9535   for (int i = 0; i < 10; ++i) {
9536 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9537     for (int i = 0; i < 10; ++i)
9538       ;
9539   }
9540 #pragma omp target teams distribute simd
9541   for (int i = 0; i < 10; ++i) {
9542 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9543     for (int i = 0; i < 10; ++i)
9544       ;
9545   }
9546 #pragma omp target teams distribute simd
9547   for (int i = 0; i < 10; ++i) {
9548 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9549     for (int i = 0; i < 10; ++i)
9550       ;
9551   }
9552 
9553 }
9554 
foo()9555 void foo() {
9556   int a = 0;
9557 // PARALLEL DIRECTIVE
9558 #pragma omp parallel
9559 #pragma omp for
9560   for (int i = 0; i < 10; ++i)
9561     ;
9562 #pragma omp parallel
9563 #pragma omp simd
9564   for (int i = 0; i < 10; ++i)
9565     ;
9566 #pragma omp parallel
9567 #pragma omp for simd
9568   for (int i = 0; i < 10; ++i)
9569     ;
9570 #pragma omp parallel
9571 #pragma omp sections
9572   {
9573     bar();
9574   }
9575 #pragma omp parallel
9576 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
9577   {
9578     bar();
9579   }
9580 #pragma omp parallel
9581 #pragma omp sections
9582   {
9583     bar();
9584   }
9585 #pragma omp parallel
9586 #pragma omp single
9587   bar();
9588 #pragma omp parallel
9589 #pragma omp master
9590   bar();
9591 #pragma omp parallel master
9592   bar();
9593 #pragma omp parallel
9594 #pragma omp critical
9595   bar();
9596 #pragma omp parallel
9597 #pragma omp parallel for
9598   for (int i = 0; i < 10; ++i)
9599     ;
9600 #pragma omp parallel
9601 #pragma omp parallel for simd
9602   for (int i = 0; i < 10; ++i)
9603     ;
9604 #pragma omp parallel
9605 #pragma omp parallel sections
9606   {
9607     bar();
9608   }
9609 #pragma omp parallel
9610 #pragma omp task
9611   {
9612     bar();
9613   }
9614 #pragma omp parallel
9615   {
9616 #pragma omp taskyield
9617     bar();
9618   }
9619 #pragma omp parallel
9620   {
9621 #pragma omp barrier
9622     bar();
9623   }
9624 #pragma omp parallel
9625   {
9626 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
9627     bar();
9628   }
9629 #pragma omp parallel
9630   {
9631 #pragma omp taskwait
9632     bar();
9633   }
9634 #pragma omp parallel
9635   {
9636 #pragma omp flush
9637     bar();
9638   }
9639 #pragma omp parallel
9640   {
9641 #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?}}
9642     bar();
9643   }
9644 #pragma omp parallel
9645   {
9646 #pragma omp atomic
9647     ++a;
9648   }
9649 #pragma omp parallel
9650   {
9651 #pragma omp target
9652     ++a;
9653   }
9654 #pragma omp parallel
9655   {
9656 #pragma omp target parallel
9657     ++a;
9658   }
9659 #pragma omp parallel
9660 #pragma omp target parallel for
9661   for (int i = 0; i < 10; ++i)
9662     ;
9663 #pragma omp parallel
9664   {
9665 #pragma omp target enter data map(to: a)
9666     ++a;
9667   }
9668 #pragma omp parallel
9669   {
9670 #pragma omp target exit data map(from: a)
9671     ++a;
9672   }
9673 #pragma omp parallel
9674   {
9675 #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?}}
9676     ++a;
9677   }
9678 #pragma omp parallel
9679   {
9680 #pragma omp taskloop
9681   for (int i = 0; i < 10; ++i)
9682     ++a;
9683   }
9684 #pragma omp parallel
9685   {
9686 #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?}}
9687     for (int i = 0; i < 10; ++i)
9688       ;
9689   }
9690 #pragma omp parallel
9691   {
9692 #pragma omp target update to(a)
9693     a++;
9694   }
9695 #pragma omp parallel
9696   {
9697 #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?}}
9698     for (int i = 0; i < 10; ++i)
9699       ;
9700   }
9701 #pragma omp parallel
9702   {
9703 #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?}}
9704     for (int i = 0; i < 10; ++i)
9705       ;
9706   }
9707 #pragma omp parallel
9708   {
9709 #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?}}
9710     for (int i = 0; i < 10; ++i)
9711       ;
9712   }
9713 #pragma omp parallel
9714   {
9715 #pragma omp target simd // OK
9716     for (int i = 0; i < 10; ++i)
9717       ;
9718   }
9719 #pragma omp parallel
9720   {
9721 #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?}}
9722     for (int i = 0; i < 10; ++i)
9723       ;
9724   }
9725 #pragma omp parallel
9726   {
9727 #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?}}
9728     for (int i = 0; i < 10; ++i)
9729       ;
9730   }
9731 #pragma omp parallel
9732   {
9733 #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?}}
9734     for (int i = 0; i < 10; ++i)
9735       ;
9736   }
9737 #pragma omp parallel
9738   {
9739 #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?}}
9740     for (int i = 0; i < 10; ++i)
9741       ;
9742   }
9743 #pragma omp parallel
9744   {
9745 #pragma omp target teams // OK
9746     a++;
9747   }
9748 #pragma omp parallel
9749   {
9750 #pragma omp target teams distribute // OK
9751     for (int i = 0; i < 10; ++i)
9752       ;
9753   }
9754 #pragma omp parallel
9755   {
9756 #pragma omp target teams distribute parallel for // OK
9757     for (int i = 0; i < 10; ++i)
9758       ;
9759   }
9760 #pragma omp parallel
9761   {
9762 #pragma omp target teams distribute parallel for simd // OK
9763     for (int i = 0; i < 10; ++i)
9764       ;
9765   }
9766 #pragma omp parallel
9767   {
9768 #pragma omp target teams distribute simd // OK
9769     for (int i = 0; i < 10; ++i)
9770       ;
9771   }
9772 
9773 // SIMD DIRECTIVE
9774 #pragma omp simd
9775   for (int i = 0; i < 10; ++i) {
9776 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9777     for (int i = 0; i < 10; ++i)
9778       ;
9779   }
9780 #pragma omp simd
9781   for (int i = 0; i < 10; ++i) {
9782 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9783     for (int i = 0; i < 10; ++i)
9784       ;
9785   }
9786 #pragma omp simd
9787   for (int i = 0; i < 10; ++i) {
9788 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9789     for (int i = 0; i < 10; ++i)
9790       ;
9791   }
9792 #pragma omp simd
9793   for (int i = 0; i < 10; ++i) {
9794 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9795     for (int i = 0; i < 10; ++i)
9796       ;
9797   }
9798 #pragma omp simd
9799   for (int i = 0; i < 10; ++i) {
9800 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9801     {
9802       bar();
9803     }
9804   }
9805 #pragma omp simd
9806   for (int i = 0; i < 10; ++i) {
9807 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9808     {
9809       bar();
9810     }
9811   }
9812 #pragma omp simd
9813   for (int i = 0; i < 10; ++i) {
9814 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9815     bar();
9816 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9817     bar();
9818   }
9819 #pragma omp simd
9820   for (int i = 0; i < 10; ++i) {
9821 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9822     bar();
9823 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9824     bar();
9825   }
9826 #pragma omp simd
9827   for (int i = 0; i < 10; ++i) {
9828 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9829     for (int i = 0; i < 10; ++i)
9830       ;
9831   }
9832 #pragma omp simd
9833   for (int i = 0; i < 10; ++i) {
9834 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9835     for (int i = 0; i < 10; ++i)
9836       ;
9837   }
9838 #pragma omp simd
9839   for (int i = 0; i < 10; ++i) {
9840 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9841     {
9842       bar();
9843     }
9844   }
9845 #pragma omp simd
9846   for (int i = 0; i < 10; ++i) {
9847 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9848     {
9849       bar();
9850     }
9851   }
9852 #pragma omp simd
9853   for (int i = 0; i < 10; ++i) {
9854 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9855     bar();
9856   }
9857 #pragma omp simd
9858   for (int i = 0; i < 10; ++i) {
9859 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9860     bar();
9861   }
9862 #pragma omp simd
9863   for (int i = 0; i < 10; ++i) {
9864 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
9865     bar();
9866   }
9867 #pragma omp simd
9868   for (int i = 0; i < 10; ++i) {
9869 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9870     bar();
9871   }
9872 #pragma omp simd
9873   for (int i = 0; i < 10; ++i) {
9874 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9875     bar();
9876   }
9877 #pragma omp simd
9878   for (int i = 0; i < 10; ++i) {
9879 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9880     bar();
9881   }
9882 #pragma omp simd
9883   for (int i = 0; i < 10; ++i) {
9884 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9885     ++a;
9886   }
9887 #pragma omp simd
9888   for (int i = 0; i < 10; ++i) {
9889 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9890     ++a;
9891   }
9892 #pragma omp simd
9893   for (int i = 0; i < 10; ++i) {
9894 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9895     ++a;
9896   }
9897 #pragma omp simd
9898   for (int i = 0; i < 10; ++i) {
9899 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9900     for (int i = 0; i < 10; ++i)
9901       ;
9902   }
9903 #pragma omp simd
9904   for (int i = 0; i < 10; ++i) {
9905 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9906     ++a;
9907   }
9908 #pragma omp simd
9909   for (int i = 0; i < 10; ++i) {
9910 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9911     ++a;
9912   }
9913 #pragma omp simd
9914   for (int i = 0; i < 10; ++i) {
9915 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9916     ++a;
9917   }
9918 #pragma omp simd
9919   for (int i = 0; i < 10; ++i) {
9920 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9921   for (int i = 0; i < 10; ++i)
9922     ++a;
9923   }
9924 #pragma omp simd
9925   for (int i = 0; i < 10; ++i) {
9926 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9927     for (int j = 0; j < 10; ++j)
9928       ;
9929   }
9930 #pragma omp simd
9931   for (int i = 0; i < 10; ++i) {
9932 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9933     a++;
9934   }
9935 #pragma omp simd
9936   for (int i = 0; i < 10; ++i) {
9937 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9938     for (int j = 0; j < 10; ++j)
9939       ;
9940   }
9941 #pragma omp simd
9942   for (int i = 0; i < 10; ++i) {
9943 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9944     for (int j = 0; j < 10; ++j)
9945       ;
9946   }
9947 #pragma omp simd
9948   for (int i = 0; i < 10; ++i) {
9949 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9950     for (int j = 0; j < 10; ++j)
9951       ;
9952   }
9953 #pragma omp simd
9954   for (int i = 0; i < 10; ++i) {
9955 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9956     for (int j = 0; j < 10; ++j)
9957       ;
9958   }
9959 #pragma omp simd
9960   for (int i = 0; i < 10; ++i) {
9961 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9962     for (int j = 0; j < 10; ++j)
9963       ;
9964   }
9965 #pragma omp simd
9966   for (int i = 0; i < 10; ++i) {
9967 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9968     for (int j = 0; j < 10; ++j)
9969       ;
9970   }
9971 #pragma omp simd
9972   for (int i = 0; i < 10; ++i) {
9973 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9974     for (int j = 0; j < 10; ++j)
9975       ;
9976   }
9977 #pragma omp simd
9978   for (int i = 0; i < 10; ++i) {
9979 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9980     for (int j = 0; j < 10; ++j)
9981       ;
9982   }
9983 #pragma omp simd
9984   for (int i = 0; i < 10; ++i) {
9985 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9986     a++;
9987   }
9988 #pragma omp simd
9989   for (int i = 0; i < 10; ++i) {
9990 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9991     for (int j = 0; j < 10; ++j)
9992       ;
9993   }
9994 #pragma omp simd
9995   for (int i = 0; i < 10; ++i) {
9996 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9997     for (int j = 0; j < 10; ++j)
9998       ;
9999   }
10000 #pragma omp simd
10001   for (int i = 0; i < 10; ++i) {
10002 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10003     for (int j = 0; j < 10; ++j)
10004       ;
10005   }
10006 #pragma omp simd
10007   for (int i = 0; i < 10; ++i) {
10008 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10009     for (int j = 0; j < 10; ++j)
10010       ;
10011   }
10012 
10013 // FOR DIRECTIVE
10014 #pragma omp for
10015   for (int i = 0; i < 10; ++i) {
10016 #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?}}
10017     for (int i = 0; i < 10; ++i)
10018       ;
10019   }
10020 #pragma omp for
10021   for (int i = 0; i < 10; ++i) {
10022 #pragma omp simd
10023     for (int i = 0; i < 10; ++i)
10024       ;
10025   }
10026 #pragma omp for
10027   for (int i = 0; i < 10; ++i) {
10028 #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?}}
10029     for (int i = 0; i < 10; ++i)
10030       ;
10031   }
10032 #pragma omp for
10033   for (int i = 0; i < 10; ++i) {
10034 #pragma omp parallel
10035     for (int i = 0; i < 10; ++i)
10036       ;
10037   }
10038 #pragma omp for
10039   for (int i = 0; i < 10; ++i) {
10040 #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?}}
10041     {
10042       bar();
10043     }
10044   }
10045 #pragma omp for
10046   for (int i = 0; i < 10; ++i) {
10047 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
10048     {
10049       bar();
10050     }
10051   }
10052 #pragma omp for
10053   for (int i = 0; i < 10; ++i) {
10054 #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?}}
10055     bar();
10056 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
10057     bar();
10058 #pragma omp critical
10059     bar();
10060   }
10061 #pragma omp for
10062   for (int i = 0; i < 10; ++i) {
10063 #pragma omp parallel
10064     {
10065 #pragma omp single // OK
10066       {
10067         bar();
10068       }
10069 #pragma omp for // OK
10070       for (int i = 0; i < 10; ++i)
10071         ;
10072 #pragma omp for simd // OK
10073       for (int i = 0; i < 10; ++i)
10074         ;
10075 #pragma omp sections // OK
10076       {
10077         bar();
10078       }
10079     }
10080   }
10081 #pragma omp for
10082   for (int i = 0; i < 10; ++i) {
10083 #pragma omp parallel for
10084     for (int i = 0; i < 10; ++i)
10085       ;
10086   }
10087 #pragma omp for
10088   for (int i = 0; i < 10; ++i) {
10089 #pragma omp parallel for simd
10090     for (int i = 0; i < 10; ++i)
10091       ;
10092   }
10093 #pragma omp for
10094   for (int i = 0; i < 10; ++i) {
10095 #pragma omp parallel sections
10096     {
10097       bar();
10098     }
10099   }
10100 #pragma omp for
10101   for (int i = 0; i < 10; ++i) {
10102 #pragma omp task
10103     {
10104       bar();
10105     }
10106   }
10107 #pragma omp for
10108   for (int i = 0; i < 10; ++i) {
10109 #pragma omp taskyield
10110     bar();
10111   }
10112 #pragma omp for
10113   for (int i = 0; i < 10; ++i) {
10114 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
10115     bar();
10116   }
10117 #pragma omp for
10118   for (int i = 0; i < 10; ++i) {
10119 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'for' region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
10120     bar();
10121   }
10122 #pragma omp for
10123   for (int i = 0; i < 10; ++i) {
10124 #pragma omp taskwait
10125     bar();
10126   }
10127 #pragma omp for
10128   for (int i = 0; i < 10; ++i) {
10129 #pragma omp flush
10130     bar();
10131   }
10132 #pragma omp for
10133   for (int i = 0; i < 10; ++i) {
10134 #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?}}
10135     bar();
10136   }
10137 #pragma omp for ordered
10138   for (int i = 0; i < 10; ++i) {
10139 #pragma omp ordered // OK
10140     bar();
10141   }
10142 #pragma omp for
10143   for (int i = 0; i < 10; ++i) {
10144 #pragma omp atomic
10145     ++a;
10146   }
10147 #pragma omp for
10148   for (int i = 0; i < 10; ++i) {
10149 #pragma omp target
10150     ++a;
10151   }
10152 #pragma omp for
10153   for (int i = 0; i < 10; ++i) {
10154 #pragma omp target parallel
10155     ++a;
10156   }
10157 #pragma omp for
10158   for (int i = 0; i < 10; ++i) {
10159 #pragma omp target parallel for
10160     for (int i = 0; i < 10; ++i)
10161       ;
10162   }
10163 #pragma omp for
10164   for (int i = 0; i < 10; ++i) {
10165 #pragma omp target enter data map(to: a)
10166     ++a;
10167   }
10168 #pragma omp for
10169   for (int i = 0; i < 10; ++i) {
10170 #pragma omp target exit data map(from: a)
10171     ++a;
10172   }
10173 #pragma omp for
10174   for (int i = 0; i < 10; ++i) {
10175 #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?}}
10176     ++a;
10177   }
10178 #pragma omp for
10179   for (int i = 0; i < 10; ++i) {
10180 #pragma omp taskloop
10181   for (int i = 0; i < 10; ++i)
10182     ++a;
10183   }
10184 #pragma omp for
10185   for (int i = 0; i < 10; ++i) {
10186 #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?}}
10187     for (int j = 0; j < 10; ++j)
10188       ;
10189   }
10190 #pragma omp for
10191   for (int i = 0; i < 10; ++i) {
10192 #pragma omp target update to(a)
10193     ++a;
10194   }
10195 #pragma omp for
10196   for (int i = 0; i < 10; ++i) {
10197 #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?}}
10198     for (int j = 0; j < 10; ++j)
10199       ;
10200   }
10201 #pragma omp for
10202   for (int i = 0; i < 10; ++i) {
10203 #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?}}
10204     for (int j = 0; j < 10; ++j)
10205       ;
10206   }
10207 #pragma omp for
10208   for (int i = 0; i < 10; ++i) {
10209 #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?}}
10210     for (int j = 0; j < 10; ++j)
10211       ;
10212   }
10213 #pragma omp for
10214   for (int i = 0; i < 10; ++i) {
10215 #pragma omp target simd // OK
10216     for (int j = 0; j < 10; ++j)
10217       ;
10218   }
10219 #pragma omp for
10220   for (int i = 0; i < 10; ++i) {
10221 #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?}}
10222     for (int j = 0; j < 10; ++j)
10223       ;
10224   }
10225 #pragma omp for
10226   for (int i = 0; i < 10; ++i) {
10227 #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?}}
10228     for (int j = 0; j < 10; ++j)
10229       ;
10230   }
10231 #pragma omp for
10232   for (int i = 0; i < 10; ++i) {
10233 #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?}}
10234     for (int j = 0; j < 10; ++j)
10235       ;
10236   }
10237 #pragma omp for
10238   for (int i = 0; i < 10; ++i) {
10239 #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?}}
10240     for (int j = 0; j < 10; ++j)
10241       ;
10242   }
10243 #pragma omp for
10244   for (int i = 0; i < 10; ++i) {
10245 #pragma omp target teams // OK
10246     a++;
10247   }
10248 #pragma omp for
10249   for (int i = 0; i < 10; ++i) {
10250 #pragma omp target teams distribute // OK
10251     for (int j = 0; j < 10; ++j)
10252       ;
10253   }
10254 #pragma omp for
10255   for (int i = 0; i < 10; ++i) {
10256 #pragma omp target teams distribute parallel for // OK
10257     for (int j = 0; j < 10; ++j)
10258       ;
10259   }
10260 #pragma omp for
10261   for (int i = 0; i < 10; ++i) {
10262 #pragma omp target teams distribute parallel for simd // OK
10263     for (int j = 0; j < 10; ++j)
10264       ;
10265   }
10266 #pragma omp for
10267   for (int i = 0; i < 10; ++i) {
10268 #pragma omp target teams distribute simd // OK
10269     for (int j = 0; j < 10; ++j)
10270       ;
10271   }
10272 
10273 // FOR SIMD DIRECTIVE
10274 #pragma omp for simd
10275   for (int i = 0; i < 10; ++i) {
10276 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10277     for (int i = 0; i < 10; ++i)
10278       ;
10279   }
10280 #pragma omp for simd
10281   for (int i = 0; i < 10; ++i) {
10282 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
10283     for (int i = 0; i < 10; ++i)
10284       ;
10285   }
10286 #pragma omp for simd
10287   for (int i = 0; i < 10; ++i) {
10288 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10289     for (int i = 0; i < 10; ++i)
10290       ;
10291   }
10292 #pragma omp for simd
10293   for (int i = 0; i < 10; ++i) {
10294 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10295     for (int i = 0; i < 10; ++i)
10296       ;
10297   }
10298 #pragma omp for simd
10299   for (int i = 0; i < 10; ++i) {
10300 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10301     {
10302       bar();
10303     }
10304   }
10305 #pragma omp for simd
10306   for (int i = 0; i < 10; ++i) {
10307 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10308     {
10309       bar();
10310     }
10311   }
10312 #pragma omp for simd
10313   for (int i = 0; i < 10; ++i) {
10314 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10315     bar();
10316 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10317     bar();
10318   }
10319 #pragma omp for simd
10320   for (int i = 0; i < 10; ++i) {
10321 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10322     bar();
10323 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10324     bar();
10325   }
10326 #pragma omp for simd
10327   for (int i = 0; i < 10; ++i) {
10328 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10329     for (int i = 0; i < 10; ++i)
10330       ;
10331   }
10332 #pragma omp for simd
10333   for (int i = 0; i < 10; ++i) {
10334 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10335     for (int i = 0; i < 10; ++i)
10336       ;
10337   }
10338 #pragma omp for simd
10339   for (int i = 0; i < 10; ++i) {
10340 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10341     {
10342       bar();
10343     }
10344   }
10345 #pragma omp for simd
10346   for (int i = 0; i < 10; ++i) {
10347 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10348     {
10349       bar();
10350     }
10351   }
10352 #pragma omp for simd
10353   for (int i = 0; i < 10; ++i) {
10354 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10355     bar();
10356   }
10357 #pragma omp for simd
10358   for (int i = 0; i < 10; ++i) {
10359 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10360     bar();
10361   }
10362 #pragma omp for simd
10363   for (int i = 0; i < 10; ++i) {
10364 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
10365     bar();
10366   }
10367 #pragma omp for simd
10368   for (int i = 0; i < 10; ++i) {
10369 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10370     bar();
10371   }
10372 #pragma omp for simd
10373   for (int i = 0; i < 10; ++i) {
10374 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10375     bar();
10376   }
10377 #pragma omp for simd
10378   for (int i = 0; i < 10; ++i) {
10379 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10380     bar();
10381   }
10382 #pragma omp for simd
10383   for (int i = 0; i < 10; ++i) {
10384 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
10385     ++a;
10386   }
10387 #pragma omp for simd
10388   for (int i = 0; i < 10; ++i) {
10389 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10390     ++a;
10391   }
10392 #pragma omp for simd
10393   for (int i = 0; i < 10; ++i) {
10394 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10395     ++a;
10396   }
10397 #pragma omp for simd
10398   for (int i = 0; i < 10; ++i) {
10399 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10400     for (int i = 0; i < 10; ++i)
10401       ;
10402   }
10403 #pragma omp for simd
10404   for (int i = 0; i < 10; ++i) {
10405 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10406     ++a;
10407   }
10408 #pragma omp for simd
10409   for (int i = 0; i < 10; ++i) {
10410 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10411     ++a;
10412   }
10413 #pragma omp for simd
10414   for (int i = 0; i < 10; ++i) {
10415 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10416     ++a;
10417   }
10418 #pragma omp for simd
10419   for (int i = 0; i < 10; ++i) {
10420 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10421   for (int i = 0; i < 10; ++i)
10422     ++a;
10423   }
10424 #pragma omp for simd
10425   for (int i = 0; i < 10; ++i) {
10426 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10427     for (int j = 0; j < 10; ++j)
10428       ;
10429   }
10430 #pragma omp for simd
10431   for (int i = 0; i < 10; ++i) {
10432 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10433     ++a;
10434   }
10435 #pragma omp for simd
10436   for (int i = 0; i < 10; ++i) {
10437 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10438     for (int j = 0; j < 10; ++j)
10439       ;
10440   }
10441 #pragma omp for simd
10442   for (int i = 0; i < 10; ++i) {
10443 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10444     for (int j = 0; j < 10; ++j)
10445       ;
10446   }
10447 #pragma omp for simd
10448   for (int i = 0; i < 10; ++i) {
10449 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10450     for (int j = 0; j < 10; ++j)
10451       ;
10452   }
10453 #pragma omp for simd
10454   for (int i = 0; i < 10; ++i) {
10455 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10456     for (int j = 0; j < 10; ++j)
10457       ;
10458   }
10459 #pragma omp for simd
10460   for (int i = 0; i < 10; ++i) {
10461 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10462     for (int j = 0; j < 10; ++j)
10463       ;
10464   }
10465 #pragma omp for simd
10466   for (int i = 0; i < 10; ++i) {
10467 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10468     for (int j = 0; j < 10; ++j)
10469       ;
10470   }
10471 #pragma omp for simd
10472   for (int i = 0; i < 10; ++i) {
10473 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10474     for (int j = 0; j < 10; ++j)
10475       ;
10476   }
10477 #pragma omp for simd
10478   for (int i = 0; i < 10; ++i) {
10479 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10480     for (int j = 0; j < 10; ++j)
10481       ;
10482   }
10483 #pragma omp for simd
10484   for (int i = 0; i < 10; ++i) {
10485 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10486     a++;
10487   }
10488 #pragma omp for simd
10489   for (int i = 0; i < 10; ++i) {
10490 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10491     for (int j = 0; j < 10; ++j)
10492       ;
10493   }
10494 #pragma omp for simd
10495   for (int i = 0; i < 10; ++i) {
10496 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10497     for (int j = 0; j < 10; ++j)
10498       ;
10499   }
10500 #pragma omp for simd
10501   for (int i = 0; i < 10; ++i) {
10502 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10503     for (int j = 0; j < 10; ++j)
10504       ;
10505   }
10506 #pragma omp for simd
10507   for (int i = 0; i < 10; ++i) {
10508 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10509     for (int j = 0; j < 10; ++j)
10510       ;
10511   }
10512 
10513 // SECTIONS DIRECTIVE
10514 #pragma omp sections
10515   {
10516 #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?}}
10517     for (int i = 0; i < 10; ++i)
10518       ;
10519   }
10520 #pragma omp sections
10521   {
10522 #pragma omp simd
10523     for (int i = 0; i < 10; ++i)
10524       ;
10525   }
10526 #pragma omp sections
10527   {
10528 #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?}}
10529     for (int i = 0; i < 10; ++i)
10530       ;
10531   }
10532 #pragma omp sections
10533   {
10534 #pragma omp parallel
10535     for (int i = 0; i < 10; ++i)
10536       ;
10537   }
10538 #pragma omp sections
10539   {
10540 #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?}}
10541     {
10542       bar();
10543     }
10544   }
10545 #pragma omp sections
10546   {
10547 #pragma omp section
10548     {
10549       bar();
10550     }
10551   }
10552 #pragma omp sections
10553   {
10554 #pragma omp critical
10555     bar();
10556 #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?}}
10557     bar();
10558 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
10559     bar();
10560   }
10561 #pragma omp sections
10562   {
10563 #pragma omp parallel
10564     {
10565 #pragma omp single // OK
10566       {
10567         bar();
10568       }
10569 #pragma omp for // OK
10570       for (int i = 0; i < 10; ++i)
10571         ;
10572 #pragma omp for simd // OK
10573       for (int i = 0; i < 10; ++i)
10574         ;
10575 #pragma omp sections // OK
10576       {
10577         bar();
10578       }
10579     }
10580   }
10581 #pragma omp sections
10582   {
10583 #pragma omp parallel for
10584     for (int i = 0; i < 10; ++i)
10585       ;
10586   }
10587 #pragma omp sections
10588   {
10589 #pragma omp parallel for simd
10590     for (int i = 0; i < 10; ++i)
10591       ;
10592   }
10593 #pragma omp sections
10594   {
10595 #pragma omp parallel sections
10596     {
10597       bar();
10598     }
10599   }
10600 #pragma omp sections
10601   {
10602 #pragma omp task
10603     {
10604       bar();
10605     }
10606   }
10607 #pragma omp sections
10608   {
10609 #pragma omp taskyield
10610   }
10611 #pragma omp sections
10612   {
10613 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
10614     bar();
10615   }
10616 #pragma omp sections
10617   {
10618 #pragma omp scan // expected-error {{region cannot be closely nested inside 'sections' region}}
10619     bar();
10620   }
10621 #pragma omp sections
10622   {
10623 #pragma omp taskwait
10624   }
10625 #pragma omp sections
10626   {
10627 #pragma omp flush
10628   }
10629 #pragma omp sections
10630   {
10631 #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?}}
10632     bar();
10633   }
10634 #pragma omp sections
10635   {
10636 #pragma omp atomic
10637     ++a;
10638   }
10639 #pragma omp sections
10640   {
10641 #pragma omp target
10642     ++a;
10643   }
10644 #pragma omp sections
10645   {
10646 #pragma omp target parallel
10647     ++a;
10648   }
10649 #pragma omp sections
10650   {
10651 #pragma omp target parallel for
10652     for (int i = 0; i < 10; ++i)
10653       ;
10654   }
10655 #pragma omp sections
10656   {
10657 #pragma omp target enter data map(to: a)
10658   }
10659 #pragma omp sections
10660   {
10661 #pragma omp target exit data map(from: a)
10662   }
10663 #pragma omp sections
10664   {
10665 #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?}}
10666     ++a;
10667   }
10668 #pragma omp sections
10669   {
10670 #pragma omp taskloop
10671   for (int i = 0; i < 10; ++i)
10672     ++a;
10673   }
10674 #pragma omp sections
10675   {
10676 #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?}}
10677     for (int i = 0; i < 10; ++i)
10678       ;
10679   }
10680 #pragma omp sections
10681   {
10682 #pragma omp target update to(a)
10683   }
10684 #pragma omp sections
10685   {
10686 #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?}}
10687     for (int i = 0; i < 10; ++i)
10688       ;
10689   }
10690 #pragma omp sections
10691   {
10692 #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?}}
10693     for (int i = 0; i < 10; ++i)
10694       ;
10695   }
10696 #pragma omp sections
10697   {
10698 #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?}}
10699     for (int i = 0; i < 10; ++i)
10700       ;
10701   }
10702 #pragma omp sections
10703   {
10704 #pragma omp target simd // OK
10705     for (int i = 0; i < 10; ++i)
10706       ;
10707   }
10708 #pragma omp sections
10709   {
10710 #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?}}
10711     for (int i = 0; i < 10; ++i)
10712       ;
10713   }
10714 #pragma omp sections
10715   {
10716 #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?}}
10717     for (int i = 0; i < 10; ++i)
10718       ;
10719   }
10720 #pragma omp sections
10721   {
10722 #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?}}
10723     for (int i = 0; i < 10; ++i)
10724       ;
10725   }
10726 #pragma omp sections
10727   {
10728 #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?}}
10729     for (int i = 0; i < 10; ++i)
10730       ;
10731   }
10732 #pragma omp sections
10733   {
10734 #pragma omp target teams // OK
10735     a++;
10736   }
10737 #pragma omp sections
10738   {
10739 #pragma omp target teams distribute // OK
10740     for (int i = 0; i < 10; ++i)
10741       ;
10742   }
10743 #pragma omp sections
10744   {
10745 #pragma omp target teams distribute parallel for // OK
10746     for (int i = 0; i < 10; ++i)
10747       ;
10748   }
10749 #pragma omp sections
10750   {
10751 #pragma omp target teams distribute parallel for simd // OK
10752     for (int i = 0; i < 10; ++i)
10753       ;
10754   }
10755 #pragma omp sections
10756   {
10757 #pragma omp target teams distribute simd // OK
10758     for (int i = 0; i < 10; ++i)
10759       ;
10760   }
10761 
10762 // SECTION DIRECTIVE
10763 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
10764   {
10765     bar();
10766   }
10767 #pragma omp sections
10768   {
10769 #pragma omp section
10770     {
10771 #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?}}
10772       for (int i = 0; i < 10; ++i)
10773         ;
10774     }
10775   }
10776 #pragma omp sections
10777   {
10778 #pragma omp section
10779     {
10780 #pragma omp simd
10781       for (int i = 0; i < 10; ++i)
10782         ;
10783     }
10784   }
10785 #pragma omp sections
10786   {
10787 #pragma omp section
10788     {
10789 #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?}}
10790       for (int i = 0; i < 10; ++i)
10791         ;
10792     }
10793   }
10794 #pragma omp sections
10795   {
10796 #pragma omp section
10797     {
10798 #pragma omp parallel
10799       for (int i = 0; i < 10; ++i)
10800         ;
10801     }
10802   }
10803 #pragma omp sections
10804   {
10805 #pragma omp section
10806     {
10807 #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?}}
10808       {
10809         bar();
10810       }
10811     }
10812   }
10813 #pragma omp sections
10814   {
10815 #pragma omp section
10816     {
10817 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
10818       {
10819         bar();
10820       }
10821     }
10822   }
10823 #pragma omp sections
10824   {
10825 #pragma omp section
10826     {
10827 #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?}}
10828       bar();
10829 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
10830       bar();
10831 #pragma omp critical
10832       bar();
10833     }
10834   }
10835 #pragma omp sections
10836   {
10837 #pragma omp section
10838     {
10839 #pragma omp parallel
10840       {
10841 #pragma omp single // OK
10842         {
10843           bar();
10844         }
10845 #pragma omp for // OK
10846         for (int i = 0; i < 10; ++i)
10847           ;
10848 #pragma omp for simd // OK
10849         for (int i = 0; i < 10; ++i)
10850           ;
10851 #pragma omp sections // OK
10852         {
10853           bar();
10854         }
10855       }
10856     }
10857   }
10858 #pragma omp sections
10859   {
10860 #pragma omp section
10861     {
10862 #pragma omp parallel for
10863       for (int i = 0; i < 10; ++i)
10864         ;
10865     }
10866   }
10867 #pragma omp sections
10868   {
10869 #pragma omp section
10870     {
10871 #pragma omp parallel for simd
10872       for (int i = 0; i < 10; ++i)
10873         ;
10874     }
10875   }
10876 #pragma omp sections
10877   {
10878 #pragma omp section
10879     {
10880 #pragma omp parallel sections
10881       {
10882         bar();
10883       }
10884     }
10885   }
10886 #pragma omp sections
10887   {
10888 #pragma omp section
10889     {
10890 #pragma omp task
10891       {
10892         bar();
10893       }
10894     }
10895   }
10896 #pragma omp sections
10897   {
10898 #pragma omp section
10899     {
10900 #pragma omp taskyield
10901       bar();
10902     }
10903   }
10904 #pragma omp sections
10905   {
10906 #pragma omp section
10907     {
10908 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
10909       bar();
10910     }
10911   }
10912 #pragma omp sections
10913   {
10914 #pragma omp section
10915     {
10916 #pragma omp scan // expected-error {{region cannot be closely nested inside 'section' region}}
10917       bar();
10918     }
10919   }
10920 #pragma omp sections
10921   {
10922 #pragma omp section
10923     {
10924 #pragma omp taskwait
10925       bar();
10926     }
10927   }
10928 #pragma omp sections
10929   {
10930 #pragma omp section
10931     {
10932 #pragma omp flush
10933       bar();
10934     }
10935   }
10936 #pragma omp sections
10937   {
10938 #pragma omp section
10939     {
10940 #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?}}
10941       bar();
10942     }
10943   }
10944 #pragma omp sections
10945   {
10946 #pragma omp section
10947     {
10948 #pragma omp atomic
10949       ++a;
10950     }
10951   }
10952 #pragma omp sections
10953   {
10954 #pragma omp section
10955     {
10956 #pragma omp target
10957       ++a;
10958     }
10959   }
10960 #pragma omp sections
10961   {
10962 #pragma omp section
10963     {
10964 #pragma omp target parallel
10965       ++a;
10966     }
10967   }
10968 #pragma omp sections
10969   {
10970 #pragma omp section
10971     {
10972 #pragma omp target parallel for
10973       for (int i = 0; i < 10; ++i)
10974         ;
10975     }
10976   }
10977 #pragma omp sections
10978   {
10979 #pragma omp section
10980     {
10981 #pragma omp target enter data map(to: a)
10982       ++a;
10983     }
10984   }
10985 #pragma omp sections
10986   {
10987 #pragma omp section
10988     {
10989 #pragma omp target exit data map(from: a)
10990       ++a;
10991     }
10992   }
10993 #pragma omp sections
10994   {
10995 #pragma omp section
10996     {
10997 #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?}}
10998       ++a;
10999     }
11000   }
11001 #pragma omp sections
11002   {
11003 #pragma omp section
11004     {
11005 #pragma omp taskloop
11006   for (int i = 0; i < 10; ++i)
11007       ++a;
11008     }
11009   }
11010 #pragma omp sections
11011   {
11012 #pragma omp section
11013 #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?}}
11014     for (int i = 0; i < 10; ++i)
11015       ;
11016   }
11017 #pragma omp sections
11018   {
11019 #pragma omp section
11020     {
11021 #pragma omp target update to(a)
11022       a++;
11023     }
11024   }
11025 #pragma omp sections
11026   {
11027 #pragma omp section
11028 #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?}}
11029     for (int i = 0; i < 10; ++i)
11030       ;
11031   }
11032 #pragma omp sections
11033   {
11034 #pragma omp section
11035 #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?}}
11036     for (int i = 0; i < 10; ++i)
11037       ;
11038   }
11039 #pragma omp sections
11040   {
11041 #pragma omp section
11042 #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?}}
11043     for (int i = 0; i < 10; ++i)
11044       ;
11045   }
11046 #pragma omp sections
11047   {
11048 #pragma omp section
11049 #pragma omp target simd // OK
11050     for (int i = 0; i < 10; ++i)
11051       ;
11052   }
11053 #pragma omp sections
11054   {
11055 #pragma omp section
11056 #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?}}
11057     for (int i = 0; i < 10; ++i)
11058       ;
11059   }
11060 #pragma omp sections
11061   {
11062 #pragma omp section
11063 #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?}}
11064     for (int i = 0; i < 10; ++i)
11065       ;
11066   }
11067 #pragma omp sections
11068   {
11069 #pragma omp section
11070 #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?}}
11071     for (int i = 0; i < 10; ++i)
11072       ;
11073   }
11074 #pragma omp sections
11075   {
11076 #pragma omp section
11077 #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?}}
11078     for (int i = 0; i < 10; ++i)
11079       ;
11080   }
11081 #pragma omp sections
11082   {
11083 #pragma omp section
11084 #pragma omp target teams // OK
11085     a++;
11086   }
11087 #pragma omp sections
11088   {
11089 #pragma omp section
11090 #pragma omp target teams distribute // OK
11091     for (int i = 0; i < 10; ++i)
11092       ;
11093   }
11094 #pragma omp sections
11095   {
11096 #pragma omp section
11097 #pragma omp target teams distribute parallel for // OK
11098     for (int i = 0; i < 10; ++i)
11099       ;
11100   }
11101 #pragma omp sections
11102   {
11103 #pragma omp section
11104 #pragma omp target teams distribute parallel for simd // OK
11105     for (int i = 0; i < 10; ++i)
11106       ;
11107   }
11108 #pragma omp sections
11109   {
11110 #pragma omp section
11111 #pragma omp target teams distribute simd // OK
11112     for (int i = 0; i < 10; ++i)
11113       ;
11114   }
11115 
11116 // SINGLE DIRECTIVE
11117 #pragma omp single
11118   {
11119 #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?}}
11120     for (int i = 0; i < 10; ++i)
11121       ;
11122   }
11123 #pragma omp single
11124   {
11125 #pragma omp simd
11126     for (int i = 0; i < 10; ++i)
11127       ;
11128   }
11129 #pragma omp single
11130   {
11131 #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?}}
11132     for (int i = 0; i < 10; ++i)
11133       ;
11134   }
11135 #pragma omp single
11136   {
11137 #pragma omp parallel
11138     for (int i = 0; i < 10; ++i)
11139       ;
11140   }
11141 #pragma omp single
11142   {
11143 #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?}}
11144     {
11145       bar();
11146     }
11147 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
11148     bar();
11149 #pragma omp critical
11150     bar();
11151   }
11152 #pragma omp single
11153   {
11154 #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?}}
11155     {
11156       bar();
11157     }
11158   }
11159 #pragma omp single
11160   {
11161 #pragma omp parallel
11162     {
11163 #pragma omp single // OK
11164       {
11165         bar();
11166       }
11167 #pragma omp for // OK
11168       for (int i = 0; i < 10; ++i)
11169         ;
11170 #pragma omp for simd // OK
11171       for (int i = 0; i < 10; ++i)
11172         ;
11173 #pragma omp sections // OK
11174       {
11175         bar();
11176       }
11177     }
11178   }
11179 #pragma omp single
11180   {
11181 #pragma omp parallel for
11182     for (int i = 0; i < 10; ++i)
11183       ;
11184   }
11185 #pragma omp single
11186   {
11187 #pragma omp parallel for simd
11188     for (int i = 0; i < 10; ++i)
11189       ;
11190   }
11191 #pragma omp single
11192   {
11193 #pragma omp parallel sections
11194     {
11195       bar();
11196     }
11197   }
11198 #pragma omp single
11199   {
11200 #pragma omp task
11201     {
11202       bar();
11203     }
11204   }
11205 #pragma omp single
11206   {
11207 #pragma omp taskyield
11208     bar();
11209   }
11210 #pragma omp single
11211   {
11212 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
11213     bar();
11214   }
11215 #pragma omp single
11216   {
11217 #pragma omp scan // expected-error {{region cannot be closely nested inside 'single' region}}
11218     bar();
11219   }
11220 #pragma omp single
11221   {
11222 #pragma omp taskwait
11223     bar();
11224   }
11225 #pragma omp single
11226   {
11227 #pragma omp flush
11228     bar();
11229   }
11230 #pragma omp single
11231   {
11232 #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?}}
11233     bar();
11234   }
11235 #pragma omp single
11236   {
11237 #pragma omp atomic
11238     ++a;
11239   }
11240 #pragma omp single
11241   {
11242 #pragma omp target
11243     ++a;
11244   }
11245 #pragma omp single
11246   {
11247 #pragma omp target parallel
11248     ++a;
11249   }
11250 #pragma omp single
11251   {
11252 #pragma omp target parallel for
11253     for (int i = 0; i < 10; ++i)
11254       ;
11255   }
11256 #pragma omp single
11257   {
11258 #pragma omp target enter data map(to: a)
11259     ++a;
11260   }
11261 #pragma omp single
11262   {
11263 #pragma omp target exit data map(from: a)
11264     ++a;
11265   }
11266 #pragma omp single
11267   {
11268 #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?}}
11269     ++a;
11270   }
11271 #pragma omp single
11272   {
11273 #pragma omp taskloop
11274   for (int i = 0; i < 10; ++i)
11275     ++a;
11276   }
11277 #pragma omp single
11278   {
11279 #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?}}
11280     for (int i = 0; i < 10; ++i)
11281       ;
11282   }
11283 #pragma omp single
11284   {
11285 #pragma omp target update to(a)
11286     a++;
11287   }
11288 #pragma omp single
11289   {
11290 #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?}}
11291     for (int i = 0; i < 10; ++i)
11292       ;
11293   }
11294 #pragma omp single
11295   {
11296 #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?}}
11297     for (int i = 0; i < 10; ++i)
11298       ;
11299   }
11300 #pragma omp single
11301   {
11302 #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?}}
11303     for (int i = 0; i < 10; ++i)
11304       ;
11305   }
11306 #pragma omp single
11307   {
11308 #pragma omp target simd // OK
11309     for (int i = 0; i < 10; ++i)
11310       ;
11311   }
11312 #pragma omp single
11313   {
11314 #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?}}
11315     for (int i = 0; i < 10; ++i)
11316       ;
11317   }
11318 #pragma omp single
11319   {
11320 #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?}}
11321     for (int i = 0; i < 10; ++i)
11322       ;
11323   }
11324 #pragma omp single
11325   {
11326 #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?}}
11327     for (int i = 0; i < 10; ++i)
11328       ;
11329   }
11330 #pragma omp single
11331   {
11332 #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?}}
11333     for (int i = 0; i < 10; ++i)
11334       ;
11335   }
11336 #pragma omp single
11337   {
11338 #pragma omp target teams // oK
11339     a++;
11340   }
11341 #pragma omp single
11342   {
11343 #pragma omp target teams distribute // OK
11344     for (int i = 0; i < 10; ++i)
11345       ;
11346   }
11347 #pragma omp single
11348   {
11349 #pragma omp target teams distribute parallel for // OK
11350     for (int i = 0; i < 10; ++i)
11351       ;
11352   }
11353 #pragma omp single
11354   {
11355 #pragma omp target teams distribute parallel for simd // OK
11356     for (int i = 0; i < 10; ++i)
11357       ;
11358   }
11359 #pragma omp single
11360   {
11361 #pragma omp target teams distribute simd // OK
11362     for (int i = 0; i < 10; ++i)
11363       ;
11364   }
11365 
11366 // MASTER DIRECTIVE
11367 #pragma omp master
11368   {
11369 #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?}}
11370     for (int i = 0; i < 10; ++i)
11371       ;
11372   }
11373 #pragma omp master
11374   {
11375 #pragma omp simd
11376     for (int i = 0; i < 10; ++i)
11377       ;
11378   }
11379 #pragma omp master
11380   {
11381 #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?}}
11382     for (int i = 0; i < 10; ++i)
11383       ;
11384   }
11385 #pragma omp master
11386   {
11387 #pragma omp parallel
11388     for (int i = 0; i < 10; ++i)
11389       ;
11390   }
11391 #pragma omp parallel master
11392   {
11393     for (int i = 0; i < 10; ++i)
11394       ;
11395   }
11396 #pragma omp master
11397   {
11398 #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?}}
11399     {
11400       bar();
11401     }
11402   }
11403 #pragma omp master
11404   {
11405 #pragma omp master // OK, though second 'master' is redundant
11406     {
11407       bar();
11408     }
11409   }
11410 #pragma omp master
11411   {
11412 #pragma omp critical
11413     {
11414       bar();
11415     }
11416   }
11417 #pragma omp master
11418   {
11419 #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?}}
11420     {
11421       bar();
11422     }
11423   }
11424 #pragma omp master
11425   {
11426 #pragma omp parallel
11427     {
11428 #pragma omp master // OK
11429       {
11430         bar();
11431       }
11432 #pragma omp for // OK
11433       for (int i = 0; i < 10; ++i)
11434         ;
11435 #pragma omp for simd // OK
11436       for (int i = 0; i < 10; ++i)
11437         ;
11438 #pragma omp sections // OK
11439       {
11440         bar();
11441       }
11442     }
11443   }
11444 #pragma omp master
11445   {
11446 #pragma omp parallel master
11447     {
11448       bar();
11449     }
11450   }
11451 #pragma omp master
11452   {
11453 #pragma omp parallel for
11454     for (int i = 0; i < 10; ++i)
11455       ;
11456   }
11457 #pragma omp master
11458   {
11459 #pragma omp parallel for simd
11460     for (int i = 0; i < 10; ++i)
11461       ;
11462   }
11463 #pragma omp master
11464   {
11465 #pragma omp parallel sections
11466     {
11467       bar();
11468     }
11469   }
11470 #pragma omp master
11471   {
11472 #pragma omp task
11473     {
11474       bar();
11475     }
11476   }
11477 #pragma omp master
11478   {
11479 #pragma omp taskyield
11480     bar();
11481   }
11482 #pragma omp master
11483   {
11484 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
11485     bar();
11486   }
11487 #pragma omp master
11488   {
11489 #pragma omp scan // expected-error {{region cannot be closely nested inside 'master' region}}
11490     bar();
11491   }
11492 #pragma omp master
11493   {
11494 #pragma omp taskwait
11495     bar();
11496   }
11497 #pragma omp master
11498   {
11499 #pragma omp flush
11500     bar();
11501   }
11502 #pragma omp master
11503   {
11504 #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?}}
11505     bar();
11506   }
11507 #pragma omp master
11508   {
11509 #pragma omp atomic
11510     ++a;
11511   }
11512 #pragma omp master
11513   {
11514 #pragma omp target
11515     ++a;
11516   }
11517 #pragma omp master
11518   {
11519 #pragma omp target parallel
11520     ++a;
11521   }
11522 #pragma omp master
11523   {
11524 #pragma omp target parallel for
11525     for (int i = 0; i < 10; ++i)
11526       ;
11527   }
11528 #pragma omp master
11529   {
11530 #pragma omp target enter data map(to: a)
11531     ++a;
11532   }
11533 #pragma omp master
11534   {
11535 #pragma omp target exit data map(from: a)
11536     ++a;
11537   }
11538 #pragma omp master
11539   {
11540 #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?}}
11541     ++a;
11542   }
11543 #pragma omp master
11544   {
11545 #pragma omp taskloop
11546   for (int i = 0; i < 10; ++i)
11547     ++a;
11548   }
11549 #pragma omp master
11550   {
11551 #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?}}
11552     for (int i = 0; i < 10; ++i)
11553       ;
11554   }
11555 #pragma omp master
11556   {
11557 #pragma omp target update to(a)
11558     ++a;
11559   }
11560 #pragma omp master
11561   {
11562 #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?}}
11563     for (int i = 0; i < 10; ++i)
11564       ;
11565   }
11566 #pragma omp master
11567   {
11568 #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?}}
11569     for (int i = 0; i < 10; ++i)
11570       ;
11571   }
11572 #pragma omp master
11573   {
11574 #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?}}
11575     for (int i = 0; i < 10; ++i)
11576       ;
11577   }
11578 #pragma omp master
11579   {
11580 #pragma omp target simd // OK
11581     for (int i = 0; i < 10; ++i)
11582       ;
11583   }
11584 #pragma omp master
11585   {
11586 #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?}}
11587     for (int i = 0; i < 10; ++i)
11588       ;
11589   }
11590 #pragma omp master
11591   {
11592 #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?}}
11593     for (int i = 0; i < 10; ++i)
11594       ;
11595   }
11596 #pragma omp master
11597   {
11598 #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?}}
11599     for (int i = 0; i < 10; ++i)
11600       ;
11601   }
11602 #pragma omp master
11603   {
11604 #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?}}
11605     for (int i = 0; i < 10; ++i)
11606       ;
11607   }
11608 #pragma omp master
11609   {
11610 #pragma omp target teams // OK
11611     a++;
11612   }
11613 #pragma omp master
11614   {
11615 #pragma omp target teams distribute // OK
11616     for (int i = 0; i < 10; ++i)
11617       ;
11618   }
11619 #pragma omp master
11620   {
11621 #pragma omp target teams distribute parallel for // OK
11622     for (int i = 0; i < 10; ++i)
11623       ;
11624   }
11625 #pragma omp master
11626   {
11627 #pragma omp target teams distribute parallel for simd // OK
11628     for (int i = 0; i < 10; ++i)
11629       ;
11630   }
11631 #pragma omp master
11632   {
11633 #pragma omp target teams distribute simd // OK
11634     for (int i = 0; i < 10; ++i)
11635       ;
11636   }
11637 
11638 // CRITICAL DIRECTIVE
11639 #pragma omp critical
11640   {
11641 #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?}}
11642     for (int i = 0; i < 10; ++i)
11643       ;
11644   }
11645 #pragma omp critical
11646   {
11647 #pragma omp simd
11648     for (int i = 0; i < 10; ++i)
11649       ;
11650   }
11651 #pragma omp critical
11652   {
11653 #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?}}
11654     for (int i = 0; i < 10; ++i)
11655       ;
11656   }
11657 #pragma omp critical
11658   {
11659 #pragma omp parallel
11660     for (int i = 0; i < 10; ++i)
11661       ;
11662   }
11663 #pragma omp critical
11664   {
11665 #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?}}
11666     {
11667       bar();
11668     }
11669   }
11670 #pragma omp critical
11671   {
11672 #pragma omp master // OK, though second 'master' is redundant
11673     {
11674       bar();
11675     }
11676   }
11677 #pragma omp critical
11678   {
11679 #pragma omp critical
11680     {
11681       bar();
11682     }
11683   }
11684 #pragma omp critical
11685   {
11686 #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?}}
11687     {
11688       bar();
11689     }
11690   }
11691 #pragma omp critical
11692   {
11693 #pragma omp parallel
11694     {
11695 #pragma omp master // OK
11696       {
11697         bar();
11698       }
11699 #pragma omp for // OK
11700       for (int i = 0; i < 10; ++i)
11701         ;
11702 #pragma omp for simd // OK
11703       for (int i = 0; i < 10; ++i)
11704         ;
11705 #pragma omp sections // OK
11706       {
11707         bar();
11708       }
11709     }
11710   }
11711 #pragma omp critical
11712   {
11713 #pragma omp parallel for
11714     for (int i = 0; i < 10; ++i)
11715       ;
11716   }
11717 #pragma omp critical
11718   {
11719 #pragma omp parallel for simd
11720     for (int i = 0; i < 10; ++i)
11721       ;
11722   }
11723 #pragma omp critical
11724   {
11725 #pragma omp parallel sections
11726     {
11727       bar();
11728     }
11729   }
11730 #pragma omp critical
11731   {
11732 #pragma omp task
11733     {
11734       bar();
11735     }
11736   }
11737 #pragma omp critical
11738   {
11739 #pragma omp taskyield
11740     bar();
11741   }
11742 #pragma omp critical
11743   {
11744 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
11745     bar();
11746   }
11747 #pragma omp critical
11748   {
11749 #pragma omp scan // expected-error {{region cannot be closely nested inside 'critical' region}}
11750     bar();
11751   }
11752 #pragma omp critical
11753   {
11754 #pragma omp taskwait
11755     bar();
11756   }
11757 #pragma omp critical(Belka)
11758   {
11759 #pragma omp critical(Strelka)
11760     bar();
11761   }
11762 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
11763   {
11764 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
11765     {
11766 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
11767       {
11768 #pragma omp parallel
11769 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
11770         {
11771           bar();
11772         }
11773       }
11774     }
11775   }
11776 #pragma omp critical
11777   {
11778 #pragma omp flush
11779     bar();
11780   }
11781 #pragma omp critical
11782   {
11783 #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?}}
11784     bar();
11785   }
11786 #pragma omp critical
11787   {
11788 #pragma omp atomic
11789     ++a;
11790   }
11791 #pragma omp critical
11792   {
11793 #pragma omp target
11794     ++a;
11795   }
11796 #pragma omp critical
11797   {
11798 #pragma omp target parallel
11799     ++a;
11800   }
11801 #pragma omp critical
11802   {
11803 #pragma omp target parallel for
11804     for (int i = 0; i < 10; ++i)
11805       ;
11806   }
11807 #pragma omp critical
11808   {
11809 #pragma omp target enter data map(to: a)
11810     ++a;
11811   }
11812 #pragma omp critical
11813   {
11814 #pragma omp target exit data map(from: a)
11815     ++a;
11816   }
11817 #pragma omp critical
11818   {
11819 #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?}}
11820     ++a;
11821   }
11822 #pragma omp critical
11823   {
11824 #pragma omp taskloop
11825   for (int i = 0; i < 10; ++i)
11826     ++a;
11827   }
11828 #pragma omp critical
11829   {
11830 #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?}}
11831     for (int i = 0; i < 10; ++i)
11832       ;
11833   }
11834 #pragma omp critical
11835   {
11836 #pragma omp target update to(a)
11837     a++;
11838   }
11839 #pragma omp critical
11840   {
11841 #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?}}
11842     for (int i = 0; i < 10; ++i)
11843       ;
11844   }
11845 #pragma omp critical
11846   {
11847 #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?}}
11848     for (int i = 0; i < 10; ++i)
11849       ;
11850   }
11851 #pragma omp critical
11852   {
11853 #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?}}
11854     for (int i = 0; i < 10; ++i)
11855       ;
11856   }
11857 #pragma omp critical
11858   {
11859 #pragma omp target simd // OK
11860     for (int i = 0; i < 10; ++i)
11861       ;
11862   }
11863 #pragma omp critical
11864   {
11865 #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?}}
11866     for (int i = 0; i < 10; ++i)
11867       ;
11868   }
11869 #pragma omp critical
11870   {
11871 #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?}}
11872     for (int i = 0; i < 10; ++i)
11873       ;
11874   }
11875 #pragma omp critical
11876   {
11877 #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?}}
11878     for (int i = 0; i < 10; ++i)
11879       ;
11880   }
11881 #pragma omp critical
11882   {
11883 #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?}}
11884     for (int i = 0; i < 10; ++i)
11885       ;
11886   }
11887 #pragma omp critical
11888   {
11889 #pragma omp target teams // OK
11890     a++;
11891   }
11892 #pragma omp critical
11893   {
11894 #pragma omp target teams distribute // OK
11895     for (int i = 0; i < 10; ++i)
11896       ;
11897   }
11898 #pragma omp critical
11899   {
11900 #pragma omp target teams distribute parallel for // OK
11901     for (int i = 0; i < 10; ++i)
11902       ;
11903   }
11904 #pragma omp critical
11905   {
11906 #pragma omp target teams distribute parallel for simd // OK
11907     for (int i = 0; i < 10; ++i)
11908       ;
11909   }
11910 #pragma omp critical
11911   {
11912 #pragma omp target teams distribute simd // OK
11913     for (int i = 0; i < 10; ++i)
11914       ;
11915   }
11916 
11917 // PARALLEL FOR DIRECTIVE
11918 #pragma omp parallel for
11919   for (int i = 0; i < 10; ++i) {
11920 #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?}}
11921     for (int i = 0; i < 10; ++i)
11922       ;
11923   }
11924 #pragma omp parallel for
11925   for (int i = 0; i < 10; ++i) {
11926 #pragma omp simd
11927     for (int i = 0; i < 10; ++i)
11928       ;
11929   }
11930 #pragma omp parallel for
11931   for (int i = 0; i < 10; ++i) {
11932 #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?}}
11933     for (int i = 0; i < 10; ++i)
11934       ;
11935   }
11936 
11937 #pragma omp parallel for
11938   for (int i = 0; i < 10; ++i) {
11939 #pragma omp parallel
11940     for (int i = 0; i < 10; ++i)
11941       ;
11942   }
11943 #pragma omp parallel for
11944   for (int i = 0; i < 10; ++i) {
11945 #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?}}
11946     {
11947       bar();
11948     }
11949   }
11950 #pragma omp parallel for
11951   for (int i = 0; i < 10; ++i) {
11952 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
11953     {
11954       bar();
11955     }
11956   }
11957 #pragma omp parallel for
11958   for (int i = 0; i < 10; ++i) {
11959 #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?}}
11960     {
11961       bar();
11962     }
11963 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11964     {
11965       bar();
11966     }
11967 #pragma omp critical
11968     {
11969       bar();
11970     }
11971   }
11972 #pragma omp parallel for
11973   for (int i = 0; i < 10; ++i) {
11974 #pragma omp parallel
11975     {
11976 #pragma omp single // OK
11977       {
11978         bar();
11979       }
11980 #pragma omp master // OK
11981       {
11982         bar();
11983       }
11984 #pragma omp critical // OK
11985       {
11986         bar();
11987       }
11988 #pragma omp for // OK
11989       for (int i = 0; i < 10; ++i)
11990         ;
11991 #pragma omp for simd // OK
11992       for (int i = 0; i < 10; ++i)
11993         ;
11994 #pragma omp sections // OK
11995       {
11996         bar();
11997       }
11998     }
11999   }
12000 #pragma omp parallel for
12001   for (int i = 0; i < 10; ++i) {
12002 #pragma omp parallel for
12003     for (int i = 0; i < 10; ++i)
12004       ;
12005   }
12006 #pragma omp parallel for
12007   for (int i = 0; i < 10; ++i) {
12008 #pragma omp parallel for simd
12009     for (int i = 0; i < 10; ++i)
12010       ;
12011   }
12012 #pragma omp parallel for
12013   for (int i = 0; i < 10; ++i) {
12014 #pragma omp parallel sections
12015     {
12016       bar();
12017     }
12018   }
12019 #pragma omp parallel for
12020   for (int i = 0; i < 10; ++i) {
12021 #pragma omp task
12022     {
12023       bar();
12024     }
12025   }
12026 #pragma omp parallel for
12027   for (int i = 0; i < 10; ++i) {
12028 #pragma omp taskyield
12029     bar();
12030   }
12031 #pragma omp parallel for
12032   for (int i = 0; i < 10; ++i) {
12033 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
12034     bar();
12035   }
12036 #pragma omp parallel for
12037   for (int i = 0; i < 10; ++i) {
12038 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'parallel for' region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
12039     bar();
12040   }
12041 #pragma omp parallel for
12042   for (int i = 0; i < 10; ++i) {
12043 #pragma omp taskwait
12044     bar();
12045   }
12046 #pragma omp parallel for
12047   for (int i = 0; i < 10; ++i) {
12048 #pragma omp flush
12049     bar();
12050   }
12051 #pragma omp parallel for
12052   for (int i = 0; i < 10; ++i) {
12053 #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?}}
12054     bar();
12055   }
12056 #pragma omp parallel for ordered
12057   for (int i = 0; i < 10; ++i) {
12058 #pragma omp ordered // OK
12059     bar();
12060   }
12061 #pragma omp parallel for
12062   for (int i = 0; i < 10; ++i) {
12063 #pragma omp atomic
12064     ++a;
12065   }
12066 #pragma omp parallel for
12067   for (int i = 0; i < 10; ++i) {
12068 #pragma omp target
12069     ++a;
12070   }
12071 #pragma omp parallel for
12072   for (int i = 0; i < 10; ++i) {
12073 #pragma omp target parallel
12074     ++a;
12075   }
12076 #pragma omp parallel for
12077   for (int i = 0; i < 10; ++i) {
12078 #pragma omp target parallel for
12079     for (int i = 0; i < 10; ++i)
12080       ;
12081   }
12082 #pragma omp parallel for
12083   for (int i = 0; i < 10; ++i) {
12084 #pragma omp target enter data map(to: a)
12085     ++a;
12086   }
12087 #pragma omp parallel for
12088   for (int i = 0; i < 10; ++i) {
12089 #pragma omp target exit data map(from: a)
12090     ++a;
12091   }
12092 #pragma omp parallel for
12093   for (int i = 0; i < 10; ++i) {
12094 #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?}}
12095     ++a;
12096   }
12097 #pragma omp parallel for
12098   for (int i = 0; i < 10; ++i) {
12099 #pragma omp taskloop
12100   for (int i = 0; i < 10; ++i)
12101     ++a;
12102   }
12103 #pragma omp parallel for
12104   for (int i = 0; i < 10; ++i) {
12105 #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?}}
12106     for (int j = 0; j < 10; ++j)
12107       ;
12108   }
12109 #pragma omp parallel for
12110   for (int i = 0; i < 10; ++i) {
12111 #pragma omp target update to(a)
12112     a++;
12113   }
12114 #pragma omp parallel for
12115   for (int i = 0; i < 10; ++i) {
12116 #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?}}
12117     for (int j = 0; j < 10; ++j)
12118       ;
12119   }
12120 #pragma omp parallel for
12121   for (int i = 0; i < 10; ++i) {
12122 #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?}}
12123     for (int j = 0; j < 10; ++j)
12124       ;
12125   }
12126 #pragma omp parallel for
12127   for (int i = 0; i < 10; ++i) {
12128 #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?}}
12129     for (int j = 0; j < 10; ++j)
12130       ;
12131   }
12132 #pragma omp parallel for
12133   for (int i = 0; i < 10; ++i) {
12134 #pragma omp target simd // OK
12135     for (int j = 0; j < 10; ++j)
12136       ;
12137   }
12138 #pragma omp parallel for
12139   for (int i = 0; i < 10; ++i) {
12140 #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?}}
12141     for (int j = 0; j < 10; ++j)
12142       ;
12143   }
12144 #pragma omp parallel for
12145   for (int i = 0; i < 10; ++i) {
12146 #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?}}
12147     for (int j = 0; j < 10; ++j)
12148       ;
12149   }
12150 #pragma omp parallel for
12151   for (int i = 0; i < 10; ++i) {
12152 #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?}}
12153     for (int j = 0; j < 10; ++j)
12154       ;
12155   }
12156 #pragma omp parallel for
12157   for (int i = 0; i < 10; ++i) {
12158 #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?}}
12159     for (int j = 0; j < 10; ++j)
12160       ;
12161   }
12162 #pragma omp parallel for
12163   for (int i = 0; i < 10; ++i) {
12164 #pragma omp target teams // OK
12165     a++;
12166   }
12167 #pragma omp parallel for
12168   for (int i = 0; i < 10; ++i) {
12169 #pragma omp target teams distribute // OK
12170     for (int j = 0; j < 10; ++j)
12171       ;
12172   }
12173 #pragma omp parallel for
12174   for (int i = 0; i < 10; ++i) {
12175 #pragma omp target teams distribute parallel for // OK
12176     for (int j = 0; j < 10; ++j)
12177       ;
12178   }
12179 #pragma omp parallel for
12180   for (int i = 0; i < 10; ++i) {
12181 #pragma omp target teams distribute parallel for simd // OK
12182     for (int j = 0; j < 10; ++j)
12183       ;
12184   }
12185 #pragma omp parallel for
12186   for (int i = 0; i < 10; ++i) {
12187 #pragma omp target teams distribute simd // OK
12188     for (int j = 0; j < 10; ++j)
12189       ;
12190   }
12191 
12192 // PARALLEL FOR SIMD DIRECTIVE
12193 #pragma omp parallel for simd
12194   for (int i = 0; i < 10; ++i) {
12195 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12196     for (int i = 0; i < 10; ++i)
12197       ;
12198   }
12199 #pragma omp parallel for simd
12200   for (int i = 0; i < 10; ++i) {
12201 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12202     for (int i = 0; i < 10; ++i)
12203       ;
12204   }
12205 #pragma omp parallel for simd
12206   for (int i = 0; i < 10; ++i) {
12207 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12208     for (int i = 0; i < 10; ++i)
12209       ;
12210   }
12211 #pragma omp parallel for simd
12212   for (int i = 0; i < 10; ++i) {
12213 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12214     for (int i = 0; i < 10; ++i)
12215       ;
12216   }
12217 #pragma omp parallel for simd
12218   for (int i = 0; i < 10; ++i) {
12219 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12220     {
12221       bar();
12222     }
12223   }
12224 #pragma omp parallel for simd
12225   for (int i = 0; i < 10; ++i) {
12226 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12227     {
12228       bar();
12229     }
12230   }
12231 #pragma omp parallel for simd
12232   for (int i = 0; i < 10; ++i) {
12233 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12234     {
12235       bar();
12236     }
12237   }
12238 
12239 #pragma omp parallel for simd
12240   for (int i = 0; i < 10; ++i) {
12241 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12242     {
12243       bar();
12244     }
12245   }
12246 
12247 #pragma omp parallel for simd
12248   for (int i = 0; i < 10; ++i) {
12249 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12250     {
12251       bar();
12252     }
12253   }
12254 
12255 #pragma omp parallel for simd
12256   for (int i = 0; i < 10; ++i) {
12257 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12258     {
12259 #pragma omp single
12260       {
12261         bar();
12262       }
12263 #pragma omp for
12264       for (int i = 0; i < 10; ++i)
12265         ;
12266 #pragma omp for simd
12267       for (int i = 0; i < 10; ++i)
12268         ;
12269 #pragma omp sections
12270       {
12271         bar();
12272       }
12273     }
12274   }
12275 #pragma omp parallel for simd
12276   for (int i = 0; i < 10; ++i) {
12277 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12278     for (int i = 0; i < 10; ++i)
12279       ;
12280   }
12281 #pragma omp parallel for simd
12282   for (int i = 0; i < 10; ++i) {
12283 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
12284     for (int i = 0; i < 10; ++i)
12285       ;
12286   }
12287 #pragma omp parallel for simd
12288   for (int i = 0; i < 10; ++i) {
12289 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12290     {
12291       bar();
12292     }
12293   }
12294 #pragma omp parallel for simd
12295   for (int i = 0; i < 10; ++i) {
12296 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12297     {
12298       bar();
12299     }
12300   }
12301 #pragma omp parallel for simd
12302   for (int i = 0; i < 10; ++i) {
12303 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12304     bar();
12305   }
12306 #pragma omp parallel for simd
12307   for (int i = 0; i < 10; ++i) {
12308 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12309     bar();
12310   }
12311 #pragma omp parallel for simd
12312   for (int i = 0; i < 10; ++i) {
12313 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
12314     bar();
12315   }
12316 #pragma omp parallel for simd
12317   for (int i = 0; i < 10; ++i) {
12318 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12319     bar();
12320   }
12321 #pragma omp parallel for simd
12322   for (int i = 0; i < 10; ++i) {
12323 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12324     bar();
12325   }
12326 #pragma omp parallel for simd
12327   for (int i = 0; i < 10; ++i) {
12328 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12329     bar();
12330   }
12331 #pragma omp parallel for simd
12332   for (int i = 0; i < 10; ++i) {
12333 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12334     bar();
12335   }
12336 #pragma omp parallel for simd
12337   for (int i = 0; i < 10; ++i) {
12338 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
12339     ++a;
12340   }
12341 #pragma omp parallel for simd
12342   for (int i = 0; i < 10; ++i) {
12343 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12344     ++a;
12345   }
12346 #pragma omp parallel for simd
12347   for (int i = 0; i < 10; ++i) {
12348 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12349     ++a;
12350   }
12351 #pragma omp parallel for simd
12352   for (int i = 0; i < 10; ++i) {
12353 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12354     for (int i = 0; i < 10; ++i)
12355       ;
12356   }
12357 #pragma omp parallel for simd
12358   for (int i = 0; i < 10; ++i) {
12359 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12360     ++a;
12361   }
12362 #pragma omp parallel for simd
12363   for (int i = 0; i < 10; ++i) {
12364 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12365     ++a;
12366   }
12367 #pragma omp parallel for simd
12368   for (int i = 0; i < 10; ++i) {
12369 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12370     ++a;
12371   }
12372 #pragma omp parallel for simd
12373   for (int i = 0; i < 10; ++i) {
12374 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12375   for (int i = 0; i < 10; ++i)
12376     ++a;
12377   }
12378 #pragma omp parallel for simd
12379   for (int i = 0; i < 10; ++i) {
12380 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12381     for (int j = 0; j < 10; ++j)
12382       ;
12383   }
12384 #pragma omp parallel for simd
12385   for (int i = 0; i < 10; ++i) {
12386 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12387     a++;
12388   }
12389 #pragma omp parallel for simd
12390   for (int i = 0; i < 10; ++i) {
12391 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12392     for (int j = 0; j < 10; ++j)
12393       ;
12394   }
12395 #pragma omp parallel for simd
12396   for (int i = 0; i < 10; ++i) {
12397 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12398     for (int j = 0; j < 10; ++j)
12399       ;
12400   }
12401 #pragma omp parallel for simd
12402   for (int i = 0; i < 10; ++i) {
12403 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12404     for (int j = 0; j < 10; ++j)
12405       ;
12406   }
12407 #pragma omp parallel for simd
12408   for (int i = 0; i < 10; ++i) {
12409 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12410     for (int j = 0; j < 10; ++j)
12411       ;
12412   }
12413 #pragma omp parallel for simd
12414   for (int i = 0; i < 10; ++i) {
12415 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12416     for (int j = 0; j < 10; ++j)
12417       ;
12418   }
12419 #pragma omp parallel for simd
12420   for (int i = 0; i < 10; ++i) {
12421 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12422     for (int j = 0; j < 10; ++j)
12423       ;
12424   }
12425 #pragma omp parallel for simd
12426   for (int i = 0; i < 10; ++i) {
12427 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12428     for (int j = 0; j < 10; ++j)
12429       ;
12430   }
12431 #pragma omp parallel for simd
12432   for (int i = 0; i < 10; ++i) {
12433 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12434     for (int j = 0; j < 10; ++j)
12435       ;
12436   }
12437 #pragma omp parallel for simd
12438   for (int i = 0; i < 10; ++i) {
12439 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12440     a++;
12441   }
12442 #pragma omp parallel for simd
12443   for (int i = 0; i < 10; ++i) {
12444 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12445     for (int j = 0; j < 10; ++j)
12446       ;
12447   }
12448 #pragma omp parallel for simd
12449   for (int i = 0; i < 10; ++i) {
12450 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12451     for (int j = 0; j < 10; ++j)
12452       ;
12453   }
12454 #pragma omp parallel for simd
12455   for (int i = 0; i < 10; ++i) {
12456 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12457     for (int j = 0; j < 10; ++j)
12458       ;
12459   }
12460 #pragma omp parallel for simd
12461   for (int i = 0; i < 10; ++i) {
12462 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12463     for (int j = 0; j < 10; ++j)
12464       ;
12465   }
12466 
12467 // PARALLEL SECTIONS DIRECTIVE
12468 #pragma omp parallel sections
12469   {
12470 #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?}}
12471     for (int i = 0; i < 10; ++i)
12472       ;
12473   }
12474 #pragma omp parallel sections
12475   {
12476 #pragma omp simd
12477     for (int i = 0; i < 10; ++i)
12478       ;
12479   }
12480 #pragma omp parallel sections
12481   {
12482 #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?}}
12483     for (int i = 0; i < 10; ++i)
12484       ;
12485   }
12486 #pragma omp parallel sections
12487   {
12488 #pragma omp parallel
12489     for (int i = 0; i < 10; ++i)
12490       ;
12491   }
12492 #pragma omp parallel sections
12493   {
12494 #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?}}
12495     {
12496       bar();
12497     }
12498   }
12499 #pragma omp parallel sections
12500   {
12501 #pragma omp section
12502     {
12503       bar();
12504     }
12505   }
12506 #pragma omp parallel sections
12507   {
12508 #pragma omp section
12509     {
12510 #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?}}
12511       bar();
12512 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
12513       bar();
12514 #pragma omp critical
12515       bar();
12516     }
12517   }
12518 #pragma omp parallel sections
12519   {
12520 #pragma omp parallel
12521     {
12522 #pragma omp single // OK
12523       {
12524         bar();
12525       }
12526 #pragma omp master // OK
12527       {
12528         bar();
12529       }
12530 #pragma omp critical // OK
12531       {
12532         bar();
12533       }
12534 #pragma omp for // OK
12535       for (int i = 0; i < 10; ++i)
12536         ;
12537 #pragma omp for simd // OK
12538       for (int i = 0; i < 10; ++i)
12539         ;
12540 #pragma omp sections // OK
12541       {
12542         bar();
12543       }
12544     }
12545   }
12546 #pragma omp parallel sections
12547   {
12548 #pragma omp parallel for
12549     for (int i = 0; i < 10; ++i)
12550       ;
12551   }
12552 #pragma omp parallel sections
12553   {
12554 #pragma omp parallel for simd
12555     for (int i = 0; i < 10; ++i)
12556       ;
12557   }
12558 #pragma omp parallel sections
12559   {
12560 #pragma omp parallel sections
12561     {
12562       bar();
12563     }
12564   }
12565 #pragma omp parallel sections
12566   {
12567 #pragma omp task
12568     {
12569       bar();
12570     }
12571   }
12572 #pragma omp parallel sections
12573   {
12574 #pragma omp taskyield
12575   }
12576 #pragma omp parallel sections
12577   {
12578 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
12579   }
12580 #pragma omp parallel sections
12581   {
12582 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
12583   }
12584 #pragma omp parallel sections
12585   {
12586 #pragma omp taskwait
12587   }
12588 #pragma omp parallel sections
12589   {
12590 #pragma omp flush
12591   }
12592 #pragma omp parallel sections
12593   {
12594 #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?}}
12595     bar();
12596   }
12597 #pragma omp parallel sections
12598   {
12599 #pragma omp atomic
12600     ++a;
12601   }
12602 #pragma omp parallel sections
12603   {
12604 #pragma omp target
12605     ++a;
12606   }
12607 #pragma omp parallel sections
12608   {
12609 #pragma omp target parallel
12610     ++a;
12611   }
12612 #pragma omp parallel sections
12613   {
12614 #pragma omp target parallel for
12615     for (int i = 0; i < 10; ++i)
12616       ;
12617   }
12618 #pragma omp parallel sections
12619   {
12620 #pragma omp target enter data map(to: a)
12621   }
12622 #pragma omp parallel sections
12623   {
12624 #pragma omp target exit data map(from: a)
12625   }
12626 #pragma omp parallel sections
12627   {
12628 #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?}}
12629     ++a;
12630   }
12631 #pragma omp parallel sections
12632   {
12633 #pragma omp taskloop
12634   for (int i = 0; i < 10; ++i)
12635     ++a;
12636   }
12637 #pragma omp parallel sections
12638   {
12639 #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?}}
12640     for (int i = 0; i < 10; ++i)
12641       ;
12642   }
12643 #pragma omp parallel sections
12644   {
12645 #pragma omp target update to(a)
12646   }
12647 #pragma omp parallel sections
12648   {
12649 #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?}}
12650     for (int i = 0; i < 10; ++i)
12651       ;
12652   }
12653 #pragma omp parallel sections
12654   {
12655 #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?}}
12656     for (int i = 0; i < 10; ++i)
12657       ;
12658   }
12659 #pragma omp parallel sections
12660   {
12661 #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?}}
12662     for (int i = 0; i < 10; ++i)
12663       ;
12664   }
12665 #pragma omp parallel sections
12666   {
12667 #pragma omp target simd // OK
12668     for (int i = 0; i < 10; ++i)
12669       ;
12670   }
12671 #pragma omp parallel sections
12672   {
12673 #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?}}
12674     for (int i = 0; i < 10; ++i)
12675       ;
12676   }
12677 #pragma omp parallel sections
12678   {
12679 #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?}}
12680     for (int i = 0; i < 10; ++i)
12681       ;
12682   }
12683 #pragma omp parallel sections
12684   {
12685 #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?}}
12686     for (int i = 0; i < 10; ++i)
12687       ;
12688   }
12689 #pragma omp parallel sections
12690   {
12691 #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?}}
12692     for (int i = 0; i < 10; ++i)
12693       ;
12694   }
12695 #pragma omp parallel sections
12696   {
12697 #pragma omp target teams // OK
12698     a++;
12699   }
12700 #pragma omp parallel sections
12701   {
12702 #pragma omp target teams distribute // OK
12703     for (int i = 0; i < 10; ++i)
12704       ;
12705   }
12706 #pragma omp parallel sections
12707   {
12708 #pragma omp target teams distribute parallel for // OK
12709     for (int i = 0; i < 10; ++i)
12710       ;
12711   }
12712 #pragma omp parallel sections
12713   {
12714 #pragma omp target teams distribute parallel for simd // OK
12715     for (int i = 0; i < 10; ++i)
12716       ;
12717   }
12718 #pragma omp parallel sections
12719   {
12720 #pragma omp target teams distribute simd // OK
12721     for (int i = 0; i < 10; ++i)
12722       ;
12723   }
12724 
12725 // TASK DIRECTIVE
12726 #pragma omp task
12727 #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?}}
12728   for (int i = 0; i < 10; ++i)
12729     ;
12730 #pragma omp task
12731 #pragma omp simd
12732   for (int i = 0; i < 10; ++i)
12733     ;
12734 #pragma omp task
12735 #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?}}
12736   for (int i = 0; i < 10; ++i)
12737     ;
12738 #pragma omp task
12739 #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?}}
12740   {
12741     bar();
12742   }
12743 #pragma omp task
12744 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
12745   {
12746     bar();
12747   }
12748 #pragma omp task
12749 #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?}}
12750   bar();
12751 #pragma omp task
12752 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
12753   bar();
12754 #pragma omp task
12755 #pragma omp critical
12756   bar();
12757 #pragma omp task
12758 #pragma omp parallel for
12759   for (int i = 0; i < 10; ++i)
12760     ;
12761 #pragma omp task
12762 #pragma omp parallel for simd
12763   for (int i = 0; i < 10; ++i)
12764     ;
12765 #pragma omp task
12766 #pragma omp parallel sections
12767   {
12768     bar();
12769   }
12770 #pragma omp task
12771 #pragma omp task
12772   {
12773     bar();
12774   }
12775 #pragma omp task
12776   {
12777 #pragma omp taskyield
12778     bar();
12779   }
12780 #pragma omp task
12781   {
12782 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
12783     bar();
12784   }
12785 #pragma omp task
12786   {
12787 #pragma omp scan // expected-error {{region cannot be closely nested inside 'task' region}}
12788     bar();
12789   }
12790 #pragma omp task
12791   {
12792 #pragma omp taskwait
12793     bar();
12794   }
12795 #pragma omp task
12796   {
12797 #pragma omp flush
12798     bar();
12799   }
12800 #pragma omp task
12801   {
12802 #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?}}
12803     bar();
12804   }
12805 #pragma omp task
12806   {
12807 #pragma omp atomic
12808     ++a;
12809   }
12810 #pragma omp task
12811   {
12812 #pragma omp target
12813     ++a;
12814   }
12815 #pragma omp task
12816   {
12817 #pragma omp target parallel
12818     ++a;
12819   }
12820 #pragma omp task
12821 #pragma omp target parallel for
12822   for (int i = 0; i < 10; ++i)
12823     ;
12824 #pragma omp task
12825   {
12826 #pragma omp target enter data map(to: a)
12827     ++a;
12828   }
12829 #pragma omp task
12830   {
12831 #pragma omp target exit data map(from: a)
12832     ++a;
12833   }
12834 #pragma omp task
12835   {
12836 #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?}}
12837     ++a;
12838   }
12839 #pragma omp task
12840   {
12841 #pragma omp taskloop
12842   for (int i = 0; i < 10; ++i)
12843     ++a;
12844   }
12845 #pragma omp task
12846   {
12847 #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?}}
12848     for (int i = 0; i < 10; ++i)
12849       ;
12850   }
12851 #pragma omp task
12852   {
12853 #pragma omp target update to(a)
12854     a++;
12855   }
12856 #pragma omp task
12857   {
12858 #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?}}
12859     for (int i = 0; i < 10; ++i)
12860       ;
12861   }
12862 #pragma omp task
12863   {
12864 #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?}}
12865     for (int i = 0; i < 10; ++i)
12866       ;
12867   }
12868 #pragma omp task
12869   {
12870 #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?}}
12871     for (int i = 0; i < 10; ++i)
12872       ;
12873   }
12874 #pragma omp task
12875   {
12876 #pragma omp target simd // OK
12877     for (int i = 0; i < 10; ++i)
12878       ;
12879   }
12880 #pragma omp task
12881   {
12882 #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?}}
12883     for (int i = 0; i < 10; ++i)
12884       ;
12885   }
12886 #pragma omp task
12887   {
12888 #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?}}
12889     for (int i = 0; i < 10; ++i)
12890       ;
12891   }
12892 #pragma omp task
12893   {
12894 #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?}}
12895     for (int i = 0; i < 10; ++i)
12896       ;
12897   }
12898 #pragma omp task
12899   {
12900 #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?}}
12901     for (int i = 0; i < 10; ++i)
12902       ;
12903   }
12904 #pragma omp task
12905   {
12906 #pragma omp target teams // OK
12907     a++;
12908   }
12909 #pragma omp task
12910   {
12911 #pragma omp target teams distribute // OK
12912     for (int i = 0; i < 10; ++i)
12913       ;
12914   }
12915 #pragma omp task
12916   {
12917 #pragma omp target teams distribute parallel for // OK
12918     for (int i = 0; i < 10; ++i)
12919       ;
12920   }
12921 #pragma omp task
12922   {
12923 #pragma omp target teams distribute parallel for simd // OK
12924     for (int i = 0; i < 10; ++i)
12925       ;
12926   }
12927 #pragma omp task
12928   {
12929 #pragma omp target teams distribute simd // OK
12930     for (int i = 0; i < 10; ++i)
12931       ;
12932   }
12933 
12934 // ATOMIC DIRECTIVE
12935 #pragma omp atomic
12936   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12937   // expected-note@+1 {{expected an expression statement}}
12938   {
12939 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12940     for (int i = 0; i < 10; ++i)
12941       ;
12942   }
12943 #pragma omp atomic
12944   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12945   // expected-note@+1 {{expected an expression statement}}
12946   {
12947 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12948     for (int i = 0; i < 10; ++i)
12949       ;
12950   }
12951 #pragma omp atomic
12952   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12953   // expected-note@+1 {{expected an expression statement}}
12954   {
12955 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12956     for (int i = 0; i < 10; ++i)
12957       ;
12958   }
12959 #pragma omp atomic
12960   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12961   // expected-note@+1 {{expected an expression statement}}
12962   {
12963 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12964     for (int i = 0; i < 10; ++i)
12965       ;
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 lvalue expression with scalar type}}
12969   // expected-note@+1 {{expected an expression statement}}
12970   {
12971 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12972     {
12973       bar();
12974     }
12975   }
12976 #pragma omp atomic
12977   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12978   // expected-note@+1 {{expected an expression statement}}
12979   {
12980 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12981     {
12982       bar();
12983     }
12984   }
12985 #pragma omp atomic
12986   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12987   // expected-note@+1 {{expected an expression statement}}
12988   {
12989 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12990     {
12991       bar();
12992     }
12993   }
12994 #pragma omp atomic
12995   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
12996   // expected-note@+1 {{expected an expression statement}}
12997   {
12998 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12999     {
13000       bar();
13001     }
13002   }
13003 #pragma omp atomic
13004   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13005   // expected-note@+1 {{expected an expression statement}}
13006   {
13007 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13008     {
13009       bar();
13010     }
13011   }
13012 #pragma omp atomic
13013   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13014   // expected-note@+1 {{expected an expression statement}}
13015   {
13016 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13017     for (int i = 0; i < 10; ++i)
13018       ;
13019   }
13020 #pragma omp atomic
13021   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13022   // expected-note@+1 {{expected an expression statement}}
13023   {
13024 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13025     for (int i = 0; i < 10; ++i)
13026       ;
13027   }
13028 #pragma omp atomic
13029   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13030   // expected-note@+1 {{expected an expression statement}}
13031   {
13032 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13033     {
13034       bar();
13035     }
13036   }
13037 #pragma omp atomic
13038   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13039   // expected-note@+1 {{expected an expression statement}}
13040   {
13041 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13042     {
13043       bar();
13044     }
13045   }
13046 #pragma omp atomic
13047   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13048   // expected-note@+1 {{expected an expression statement}}
13049   {
13050 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13051     bar();
13052   }
13053 #pragma omp atomic
13054   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13055   // expected-note@+1 {{expected an expression statement}}
13056   {
13057 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13058     bar();
13059   }
13060 #pragma omp atomic
13061   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13062   // expected-note@+1 {{expected an expression statement}}
13063   {
13064 #pragma omp scan // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13065     bar();
13066   }
13067 #pragma omp atomic
13068   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13069   // expected-note@+1 {{expected an expression statement}}
13070   {
13071 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13072     bar();
13073   }
13074 #pragma omp atomic
13075   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13076   // expected-note@+1 {{expected an expression statement}}
13077   {
13078 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13079     bar();
13080   }
13081 #pragma omp atomic
13082   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13083   // expected-note@+1 {{expected an expression statement}}
13084   {
13085 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13086     bar();
13087   }
13088 #pragma omp atomic
13089   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13090   // expected-note@+1 {{expected an expression statement}}
13091   {
13092 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13093     ++a;
13094   }
13095 #pragma omp atomic
13096   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13097   // expected-note@+1 {{expected an expression statement}}
13098   {
13099 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13100     ++a;
13101   }
13102 #pragma omp atomic
13103   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13104   // expected-note@+1 {{expected an expression statement}}
13105   {
13106 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13107     ++a;
13108   }
13109 #pragma omp atomic
13110   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13111   // expected-note@+1 {{expected an expression statement}}
13112   {
13113 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13114     for (int i = 0; i < 10; ++i)
13115       ;
13116   }
13117 #pragma omp atomic
13118   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13119   // expected-note@+1 {{expected an expression statement}}
13120   {
13121 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13122     ++a;
13123   }
13124 #pragma omp atomic
13125   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13126   // expected-note@+1 {{expected an expression statement}}
13127   {
13128 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13129     ++a;
13130   }
13131 #pragma omp atomic
13132   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13133   // expected-note@+1 {{expected an expression statement}}
13134   {
13135 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13136     ++a;
13137   }
13138 #pragma omp atomic
13139   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13140   // expected-note@+1 {{expected an expression statement}}
13141   {
13142 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13143   for (int i = 0; i < 10; ++i)
13144     ++a;
13145   }
13146 #pragma omp atomic
13147   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13148   // expected-note@+1 {{expected an expression statement}}
13149   {
13150 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13151     for (int i = 0; i < 10; ++i)
13152       ;
13153   }
13154 #pragma omp atomic
13155   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13156   // expected-note@+1 {{expected an expression statement}}
13157   {
13158 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13159   }
13160 #pragma omp atomic
13161   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13162   // expected-note@+1 {{expected an expression statement}}
13163   {
13164 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13165     for (int i = 0; i < 10; ++i)
13166       ;
13167   }
13168 #pragma omp atomic
13169   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13170   // expected-note@+1 {{expected an expression statement}}
13171   {
13172 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13173     for (int i = 0; i < 10; ++i)
13174       ;
13175   }
13176 #pragma omp atomic
13177   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13178   // expected-note@+1 {{expected an expression statement}}
13179   {
13180 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13181     for (int i = 0; i < 10; ++i)
13182       ;
13183   }
13184 #pragma omp atomic
13185   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13186   // expected-note@+1 {{expected an expression statement}}
13187   {
13188 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13189     for (int i = 0; i < 10; ++i)
13190       ;
13191   }
13192 #pragma omp atomic
13193   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13194   // expected-note@+1 {{expected an expression statement}}
13195   {
13196 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13197     for (int i = 0; i < 10; ++i)
13198       ;
13199   }
13200 #pragma omp atomic
13201   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13202   // expected-note@+1 {{expected an expression statement}}
13203   {
13204 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13205     for (int i = 0; i < 10; ++i)
13206       ;
13207   }
13208 #pragma omp atomic
13209   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13210   // expected-note@+1 {{expected an expression statement}}
13211   {
13212 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13213     for (int i = 0; i < 10; ++i)
13214       ;
13215   }
13216 #pragma omp atomic
13217   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13218   // expected-note@+1 {{expected an expression statement}}
13219   {
13220 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13221     for (int i = 0; i < 10; ++i)
13222       ;
13223   }
13224 #pragma omp atomic
13225   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13226   // expected-note@+1 {{expected an expression statement}}
13227   {
13228 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13229     a++;
13230   }
13231 #pragma omp atomic
13232   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13233   // expected-note@+1 {{expected an expression statement}}
13234   {
13235 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13236     for (int i = 0; i < 10; ++i)
13237       ;
13238   }
13239 #pragma omp atomic
13240   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13241   // expected-note@+1 {{expected an expression statement}}
13242   {
13243 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13244     for (int i = 0; i < 10; ++i)
13245       ;
13246   }
13247 #pragma omp atomic
13248   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13249   // expected-note@+1 {{expected an expression statement}}
13250   {
13251 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13252     for (int i = 0; i < 10; ++i)
13253       ;
13254   }
13255 #pragma omp atomic
13256   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13257   // expected-note@+1 {{expected an expression statement}}
13258   {
13259 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13260     for (int i = 0; i < 10; ++i)
13261       ;
13262   }
13263 
13264 // TARGET DIRECTIVE
13265 #pragma omp target
13266 #pragma omp parallel
13267   bar();
13268 #pragma omp target
13269 #pragma omp for
13270   for (int i = 0; i < 10; ++i)
13271     ;
13272 #pragma omp target
13273 #pragma omp simd
13274   for (int i = 0; i < 10; ++i)
13275     ;
13276 #pragma omp target
13277 #pragma omp for simd
13278   for (int i = 0; i < 10; ++i)
13279     ;
13280 #pragma omp target
13281 #pragma omp sections
13282   {
13283     bar();
13284   }
13285 #pragma omp target
13286 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
13287   {
13288     bar();
13289   }
13290 #pragma omp target
13291 #pragma omp single
13292   bar();
13293 
13294 #pragma omp target
13295 #pragma omp master
13296   {
13297     bar();
13298   }
13299 #pragma omp target
13300 #pragma omp critical
13301   {
13302     bar();
13303   }
13304 #pragma omp target
13305 #pragma omp parallel for
13306   for (int i = 0; i < 10; ++i)
13307     ;
13308 #pragma omp target
13309 #pragma omp parallel for simd
13310   for (int i = 0; i < 10; ++i)
13311     ;
13312 #pragma omp target
13313 #pragma omp parallel sections
13314   {
13315     bar();
13316   }
13317 #pragma omp target
13318 #pragma omp task
13319   {
13320     bar();
13321   }
13322 #pragma omp target
13323   {
13324 #pragma omp taskyield
13325     bar();
13326   }
13327 #pragma omp target
13328   {
13329 #pragma omp barrier
13330     bar();
13331   }
13332 #pragma omp target
13333   {
13334 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
13335     bar();
13336   }
13337 #pragma omp target
13338   {
13339 #pragma omp taskwait
13340     bar();
13341   }
13342 #pragma omp target
13343   {
13344 #pragma omp flush
13345     bar();
13346   }
13347 #pragma omp target
13348   {
13349 #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?}}
13350     bar();
13351   }
13352 #pragma omp target
13353   {
13354 #pragma omp atomic
13355     ++a;
13356   }
13357 #pragma omp target
13358   {
13359 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13360     ++a;
13361   }
13362 #pragma omp target
13363   {
13364 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13365     ++a;
13366   }
13367 #pragma omp target
13368 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13369   for (int i = 0; i < 10; ++i)
13370     ;
13371 #pragma omp target
13372   {
13373 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13374   }
13375 #pragma omp target
13376   {
13377 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13378   }
13379 #pragma omp target
13380   {
13381 #pragma omp teams
13382     ++a;
13383   }
13384 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13385   {
13386 #pragma omp teams // expected-note {{directive outside teams construct here}}
13387     ++a;
13388 #pragma omp teams // expected-note {{nested teams construct here}}
13389     ++a;
13390   }
13391 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13392   {
13393     ++a;          // expected-note {{statement outside teams construct here}}
13394 #pragma omp teams // expected-note {{nested teams construct here}}
13395     ++a;
13396   }
13397 #pragma omp target
13398   {
13399 #pragma omp taskloop
13400   for (int i = 0; i < 10; ++i)
13401     ++a;
13402   }
13403 #pragma omp target
13404   {
13405 #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?}}
13406     for (int i = 0; i < 10; ++i)
13407       ;
13408   }
13409 #pragma omp atomic
13410   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an lvalue expression with scalar type}}
13411   // expected-note@+1 {{expected an expression statement}}
13412   {
13413 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13414     a++;
13415   }
13416 #pragma omp target
13417   {
13418 #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?}}
13419     for (int i = 0; i < 10; ++i)
13420       ;
13421   }
13422 #pragma omp target
13423   {
13424 #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?}}
13425     for (int i = 0; i < 10; ++i)
13426       ;
13427   }
13428 #pragma omp target
13429   {
13430 #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?}}
13431     for (int i = 0; i < 10; ++i)
13432       ;
13433   }
13434 #pragma omp target
13435   {
13436 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13437     for (int i = 0; i < 10; ++i)
13438       ;
13439   }
13440 #pragma omp target
13441   {
13442 #pragma omp teams distribute // OK
13443     for (int i = 0; i < 10; ++i)
13444       ;
13445   }
13446 #pragma omp target
13447   {
13448 #pragma omp teams distribute simd // OK
13449     for (int i = 0; i < 10; ++i)
13450       ;
13451   }
13452 #pragma omp target
13453   {
13454 #pragma omp teams distribute parallel for simd // OK
13455     for (int i = 0; i < 10; ++i)
13456       ;
13457   }
13458 #pragma omp target
13459   {
13460 #pragma omp teams distribute parallel for // OK
13461     for (int i = 0; i < 10; ++i)
13462       ;
13463   }
13464 #pragma omp target
13465   {
13466 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13467     a++;
13468   }
13469 #pragma omp target
13470   {
13471 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13472     for (int i = 0; i < 10; ++i)
13473       ;
13474   }
13475 #pragma omp target
13476   {
13477 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13478     for (int i = 0; i < 10; ++i)
13479       ;
13480   }
13481 #pragma omp target
13482   {
13483 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13484     for (int i = 0; i < 10; ++i)
13485       ;
13486   }
13487 #pragma omp target
13488   {
13489 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13490     for (int i = 0; i < 10; ++i)
13491       ;
13492   }
13493 
13494 // TARGET PARALLEL DIRECTIVE
13495 #pragma omp target parallel
13496 #pragma omp parallel
13497   bar();
13498 #pragma omp target parallel
13499 #pragma omp for
13500   for (int i = 0; i < 10; ++i)
13501     ;
13502 #pragma omp target parallel
13503 #pragma omp simd
13504   for (int i = 0; i < 10; ++i)
13505     ;
13506 #pragma omp target parallel
13507 #pragma omp for simd
13508   for (int i = 0; i < 10; ++i)
13509     ;
13510 #pragma omp target parallel
13511 #pragma omp sections
13512   {
13513     bar();
13514   }
13515 #pragma omp target parallel
13516 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
13517   {
13518     bar();
13519   }
13520 #pragma omp target parallel
13521 #pragma omp single
13522   bar();
13523 
13524 #pragma omp target parallel
13525 #pragma omp master
13526   {
13527     bar();
13528   }
13529 #pragma omp target parallel
13530 #pragma omp critical
13531   {
13532     bar();
13533   }
13534 #pragma omp target parallel
13535 #pragma omp parallel for
13536   for (int i = 0; i < 10; ++i)
13537     ;
13538 #pragma omp target parallel
13539 #pragma omp parallel for simd
13540   for (int i = 0; i < 10; ++i)
13541     ;
13542 #pragma omp target parallel
13543 #pragma omp parallel sections
13544   {
13545     bar();
13546   }
13547 #pragma omp target parallel
13548 #pragma omp task
13549   {
13550     bar();
13551   }
13552 #pragma omp target parallel
13553   {
13554 #pragma omp taskyield
13555     bar();
13556   }
13557 #pragma omp target parallel
13558   {
13559 #pragma omp barrier
13560     bar();
13561   }
13562 #pragma omp target parallel
13563   {
13564 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
13565     bar();
13566   }
13567 #pragma omp target parallel
13568   {
13569 #pragma omp taskwait
13570     bar();
13571   }
13572 #pragma omp target parallel
13573   {
13574 #pragma omp flush
13575     bar();
13576   }
13577 #pragma omp target parallel
13578   {
13579 #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?}}
13580     bar();
13581   }
13582 #pragma omp target parallel
13583   {
13584 #pragma omp atomic
13585     ++a;
13586   }
13587 #pragma omp target parallel
13588   {
13589 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
13590     ++a;
13591   }
13592 #pragma omp target parallel
13593   {
13594 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
13595     ++a;
13596   }
13597 #pragma omp target parallel
13598 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13599   for (int i = 0; i < 10; ++i)
13600     ;
13601 #pragma omp target parallel
13602   {
13603 #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?}}
13604     ++a;
13605   }
13606 #pragma omp target parallel
13607   {
13608     ++a;
13609 #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?}}
13610     ++a;
13611   }
13612 #pragma omp target parallel
13613   {
13614 #pragma omp taskloop
13615   for (int i = 0; i < 10; ++i)
13616     ++a;
13617   }
13618 #pragma omp target parallel
13619   {
13620 #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?}}
13621     for (int i = 0; i < 10; ++i)
13622       ;
13623   }
13624 #pragma omp target parallel
13625   {
13626 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13627   }
13628 #pragma omp target parallel
13629   {
13630 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13631   }
13632 #pragma omp target parallel
13633   {
13634 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13635   }
13636 #pragma omp target parallel
13637   {
13638 #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?}}
13639     for (int i = 0; i < 10; ++i)
13640       ;
13641   }
13642 #pragma omp target parallel
13643   {
13644 #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?}}
13645     for (int i = 0; i < 10; ++i)
13646       ;
13647   }
13648 #pragma omp target parallel
13649   {
13650 #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?}}
13651     for (int i = 0; i < 10; ++i)
13652       ;
13653   }
13654 #pragma omp target parallel
13655   {
13656 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
13657     for (int i = 0; i < 10; ++i)
13658       ;
13659   }
13660 #pragma omp target parallel
13661   {
13662 #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?}}
13663     for (int i = 0; i < 10; ++i)
13664       ;
13665   }
13666 #pragma omp target parallel
13667   {
13668 #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?}}
13669     for (int i = 0; i < 10; ++i)
13670       ;
13671   }
13672 #pragma omp target parallel
13673   {
13674 #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?}}
13675     for (int i = 0; i < 10; ++i)
13676       ;
13677   }
13678 #pragma omp target parallel
13679   {
13680 #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?}}
13681     for (int i = 0; i < 10; ++i)
13682       ;
13683   }
13684 #pragma omp target parallel
13685   {
13686 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
13687     a++;
13688   }
13689 #pragma omp target parallel
13690   {
13691 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
13692     for (int i = 0; i < 10; ++i)
13693       ;
13694   }
13695 #pragma omp target parallel
13696   {
13697 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13698     for (int i = 0; i < 10; ++i)
13699       ;
13700   }
13701 #pragma omp target parallel
13702   {
13703 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13704     for (int i = 0; i < 10; ++i)
13705       ;
13706   }
13707 #pragma omp target parallel
13708   {
13709 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13710     for (int i = 0; i < 10; ++i)
13711       ;
13712   }
13713 
13714 // TARGET PARALLEL FOR DIRECTIVE
13715 #pragma omp target parallel for
13716   for (int i = 0; i < 10; ++i) {
13717 #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?}}
13718     for (int i = 0; i < 10; ++i)
13719       ;
13720   }
13721 #pragma omp target parallel for
13722   for (int i = 0; i < 10; ++i) {
13723 #pragma omp simd
13724     for (int i = 0; i < 10; ++i)
13725       ;
13726   }
13727 #pragma omp target parallel for
13728   for (int i = 0; i < 10; ++i) {
13729 #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?}}
13730     for (int i = 0; i < 10; ++i)
13731       ;
13732   }
13733 #pragma omp target parallel for
13734   for (int i = 0; i < 10; ++i) {
13735 #pragma omp parallel
13736     for (int i = 0; i < 10; ++i)
13737       ;
13738   }
13739 #pragma omp target parallel for
13740   for (int i = 0; i < 10; ++i) {
13741 #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?}}
13742     {
13743       bar();
13744     }
13745   }
13746 #pragma omp target parallel for
13747   for (int i = 0; i < 10; ++i) {
13748 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
13749     {
13750       bar();
13751     }
13752   }
13753 #pragma omp target parallel for
13754   for (int i = 0; i < 10; ++i) {
13755 #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?}}
13756     {
13757       bar();
13758     }
13759   }
13760 
13761 #pragma omp target parallel for
13762   for (int i = 0; i < 10; ++i) {
13763 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13764     {
13765       bar();
13766     }
13767   }
13768 
13769 #pragma omp target parallel for
13770   for (int i = 0; i < 10; ++i) {
13771 #pragma omp critical
13772     {
13773       bar();
13774     }
13775   }
13776 
13777 #pragma omp target parallel for
13778   for (int i = 0; i < 10; ++i) {
13779 #pragma omp parallel
13780     {
13781 #pragma omp single // OK
13782       {
13783         bar();
13784       }
13785 #pragma omp for // OK
13786       for (int i = 0; i < 10; ++i)
13787         ;
13788 #pragma omp for simd // OK
13789       for (int i = 0; i < 10; ++i)
13790         ;
13791 #pragma omp sections // OK
13792       {
13793         bar();
13794       }
13795     }
13796   }
13797 #pragma omp target parallel for
13798   for (int i = 0; i < 10; ++i) {
13799 #pragma omp parallel for
13800     for (int i = 0; i < 10; ++i)
13801       ;
13802   }
13803 #pragma omp target parallel for
13804   for (int i = 0; i < 10; ++i) {
13805 #pragma omp parallel for simd
13806     for (int i = 0; i < 10; ++i)
13807       ;
13808   }
13809 #pragma omp target parallel for
13810   for (int i = 0; i < 10; ++i) {
13811 #pragma omp parallel sections
13812     {
13813       bar();
13814     }
13815   }
13816 #pragma omp target parallel for
13817   for (int i = 0; i < 10; ++i) {
13818 #pragma omp task
13819     {
13820       bar();
13821     }
13822   }
13823 #pragma omp target parallel for
13824   for (int i = 0; i < 10; ++i) {
13825 #pragma omp taskyield
13826     bar();
13827   }
13828 #pragma omp target parallel for
13829   for (int i = 0; i < 10; ++i) {
13830 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13831     bar();
13832   }
13833 #pragma omp target parallel for
13834   for (int i = 0; i < 10; ++i) {
13835 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13836     bar();
13837   }
13838 #pragma omp target parallel for
13839   for (int i = 0; i < 10; ++i) {
13840 #pragma omp taskwait
13841     bar();
13842   }
13843 #pragma omp target parallel for
13844   for (int i = 0; i < 10; ++i) {
13845 #pragma omp flush
13846     bar();
13847   }
13848 #pragma omp target parallel for
13849   for (int i = 0; i < 10; ++i) {
13850 #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?}}
13851     bar();
13852   }
13853 #pragma omp target parallel for ordered
13854   for (int i = 0; i < 10; ++i) {
13855 #pragma omp ordered // OK
13856     bar();
13857   }
13858 #pragma omp target parallel for
13859   for (int i = 0; i < 10; ++i) {
13860 #pragma omp atomic
13861     ++a;
13862   }
13863 #pragma omp target parallel for
13864   for (int i = 0; i < 10; ++i) {
13865 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
13866     ++a;
13867   }
13868 #pragma omp target parallel for
13869   for (int i = 0; i < 10; ++i) {
13870 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
13871     ++a;
13872   }
13873 #pragma omp target parallel for
13874   for (int i = 0; i < 10; ++i) {
13875 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13876     for (int i = 0; i < 10; ++i)
13877       ;
13878   }
13879 #pragma omp target parallel for
13880   for (int i = 0; i < 10; ++i) {
13881 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13882     ++a;
13883   }
13884 #pragma omp target parallel for
13885   for (int i = 0; i < 10; ++i) {
13886 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13887     ++a;
13888   }
13889 #pragma omp target parallel for
13890   for (int i = 0; i < 10; ++i) {
13891 #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?}}
13892     ++a;
13893   }
13894 #pragma omp target parallel for
13895   for (int i = 0; i < 10; ++i) {
13896 #pragma omp taskloop
13897   for (int i = 0; i < 10; ++i)
13898     ++a;
13899   }
13900 #pragma omp target parallel for
13901   for (int i = 0; i < 10; ++i) {
13902 #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?}}
13903     for (int j = 0; j < 10; ++j)
13904       ;
13905   }
13906 #pragma omp target parallel for
13907   for (int i = 0; i < 10; ++i) {
13908 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13909     a++;
13910   }
13911 #pragma omp target parallel for
13912   for (int i = 0; i < 10; ++i) {
13913 #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?}}
13914     for (int j = 0; j < 10; ++j)
13915       ;
13916   }
13917 #pragma omp target parallel for
13918   for (int i = 0; i < 10; ++i) {
13919 #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?}}
13920     for (int j = 0; j < 10; ++j)
13921       ;
13922   }
13923 #pragma omp target parallel for
13924   for (int i = 0; i < 10; ++i) {
13925 #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?}}
13926     for (int j = 0; j < 10; ++j)
13927       ;
13928   }
13929 #pragma omp target parallel for
13930   for (int i = 0; i < 10; ++i) {
13931 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13932     for (int j = 0; j < 10; ++j)
13933       ;
13934   }
13935 #pragma omp target parallel for
13936   for (int i = 0; i < 10; ++i) {
13937 #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?}}
13938     for (int j = 0; j < 10; ++j)
13939       ;
13940   }
13941 #pragma omp target parallel for
13942   for (int i = 0; i < 10; ++i) {
13943 #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?}}
13944     for (int j = 0; j < 10; ++j)
13945       ;
13946   }
13947 #pragma omp target parallel for
13948   for (int i = 0; i < 10; ++i) {
13949 #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?}}
13950     for (int j = 0; j < 10; ++j)
13951       ;
13952   }
13953 #pragma omp target parallel for
13954   for (int i = 0; i < 10; ++i) {
13955 #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?}}
13956     for (int j = 0; j < 10; ++j)
13957       ;
13958   }
13959 #pragma omp target parallel for
13960   for (int i = 0; i < 10; ++i) {
13961 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
13962     a++;
13963   }
13964 #pragma omp target parallel for
13965   for (int i = 0; i < 10; ++i) {
13966 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
13967     for (int j = 0; j < 10; ++j)
13968       ;
13969   }
13970 #pragma omp target parallel for
13971   for (int i = 0; i < 10; ++i) {
13972 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13973     for (int j = 0; j < 10; ++j)
13974       ;
13975   }
13976 #pragma omp target parallel for
13977   for (int i = 0; i < 10; ++i) {
13978 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13979     for (int j = 0; j < 10; ++j)
13980       ;
13981   }
13982 #pragma omp target parallel for
13983   for (int i = 0; i < 10; ++i) {
13984 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13985     for (int j = 0; j < 10; ++j)
13986       ;
13987   }
13988 
13989 // TEAMS DIRECTIVE
13990 #pragma omp target
13991 #pragma omp teams
13992 #pragma omp parallel
13993   bar();
13994 #pragma omp target
13995 #pragma omp teams
13996 #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?}}
13997   for (int i = 0; i < 10; ++i)
13998     ;
13999 #pragma omp target
14000 #pragma omp teams
14001 #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?}}
14002   for (int i = 0; i < 10; ++i)
14003     ;
14004 #pragma omp target
14005 #pragma omp teams
14006 #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?}}
14007   for (int i = 0; i < 10; ++i)
14008     ;
14009 #pragma omp target
14010 #pragma omp teams
14011 #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?}}
14012   {
14013     bar();
14014   }
14015 #pragma omp target
14016 #pragma omp teams
14017 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
14018   {
14019     bar();
14020   }
14021 #pragma omp target
14022 #pragma omp teams
14023 #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?}}
14024   bar();
14025 
14026 #pragma omp target
14027 #pragma omp teams
14028 #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?}}
14029   {
14030     bar();
14031   }
14032 #pragma omp target
14033 #pragma omp teams
14034 #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?}}
14035   {
14036     bar();
14037   }
14038 #pragma omp target
14039 #pragma omp teams
14040 #pragma omp parallel for
14041   for (int i = 0; i < 10; ++i)
14042     ;
14043 #pragma omp target
14044 #pragma omp teams
14045 #pragma omp parallel for simd
14046   for (int i = 0; i < 10; ++i)
14047     ;
14048 #pragma omp target
14049 #pragma omp teams
14050 #pragma omp parallel sections
14051   {
14052     bar();
14053   }
14054 #pragma omp target
14055 #pragma omp teams
14056 #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?}}
14057   {
14058     bar();
14059   }
14060 #pragma omp target
14061 #pragma omp teams
14062   {
14063 #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?}}
14064     bar();
14065   }
14066 #pragma omp target
14067 #pragma omp teams
14068   {
14069 #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?}}
14070     bar();
14071   }
14072 #pragma omp target
14073 #pragma omp teams
14074   {
14075 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
14076     bar();
14077   }
14078 #pragma omp target
14079 #pragma omp teams
14080   {
14081 #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?}}
14082     bar();
14083   }
14084 #pragma omp target
14085 #pragma omp teams
14086   {
14087 #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?}}
14088     bar();
14089   }
14090 #pragma omp target
14091 #pragma omp teams
14092   {
14093 #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?}}
14094     bar();
14095   }
14096 #pragma omp target
14097 #pragma omp teams
14098   {
14099 #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?}}
14100     ++a;
14101   }
14102 #pragma omp target
14103 #pragma omp teams
14104   {
14105 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14106     ++a;
14107   }
14108 #pragma omp target
14109 #pragma omp teams
14110   {
14111 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14112     ++a;
14113   }
14114 #pragma omp target
14115 #pragma omp teams
14116 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14117   for (int i = 0; i < 10; ++i)
14118     ;
14119 #pragma omp target
14120 #pragma omp teams
14121   {
14122 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14123   }
14124 #pragma omp target
14125 #pragma omp teams
14126   {
14127 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14128   }
14129 #pragma omp target
14130 #pragma omp teams
14131   {
14132 #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?}}
14133     ++a;
14134   }
14135 #pragma omp target
14136 #pragma omp teams
14137   {
14138 #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?}}
14139   for (int i = 0; i < 10; ++i)
14140     ++a;
14141   }
14142 #pragma omp target
14143 #pragma omp teams
14144 #pragma omp distribute
14145   for (int i = 0; i < 10; ++i)
14146     ;
14147 #pragma omp target
14148 #pragma omp teams
14149 #pragma omp distribute
14150   for (int i = 0; i < 10; ++i)
14151     ;
14152 #pragma omp distribute
14153   for (int j = 0; j < 10; ++j)
14154     ;
14155 #pragma omp target
14156 #pragma omp teams
14157   {
14158 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14159     ++a;
14160   }
14161 #pragma omp target
14162 #pragma omp teams
14163 #pragma omp distribute parallel for
14164   for (int i = 0; i < 10; ++i)
14165     ;
14166 #pragma omp target
14167 #pragma omp teams
14168   {
14169 #pragma omp distribute parallel for
14170   for (int i = 0; i < 10; ++i)
14171     ;
14172 #pragma omp distribute parallel for
14173   for (int j = 0; j < 10; ++j)
14174     ;
14175   }
14176 #pragma omp target
14177 #pragma omp teams
14178   {
14179 #pragma omp distribute parallel for simd
14180   for (int i = 0; i < 10; ++i)
14181     ;
14182 #pragma omp distribute parallel for simd
14183   for (int j = 0; j < 10; ++j)
14184     ;
14185   }
14186 #pragma omp target
14187 #pragma omp teams
14188   {
14189 #pragma omp distribute simd
14190   for (int i = 0; i < 10; ++i)
14191     ;
14192 #pragma omp distribute simd
14193   for (int j = 0; j < 10; ++j)
14194     ;
14195   }
14196 #pragma omp target
14197 #pragma omp teams
14198   {
14199 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14200   for (int i = 0; i < 10; ++i)
14201     ;
14202   }
14203 #pragma omp target
14204 #pragma omp teams
14205   {
14206 #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?}}
14207   for (int i = 0; i < 10; ++i)
14208     ;
14209   }
14210 #pragma omp target
14211 #pragma omp teams
14212   {
14213 #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?}}
14214   for (int i = 0; i < 10; ++i)
14215     ;
14216   }
14217 #pragma omp target
14218 #pragma omp teams
14219   {
14220 #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?}}
14221   for (int i = 0; i < 10; ++i)
14222     ;
14223   }
14224 #pragma omp target
14225 #pragma omp teams
14226   {
14227 #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?}}
14228   for (int i = 0; i < 10; ++i)
14229     ;
14230   }
14231 #pragma omp target
14232 #pragma omp teams
14233   {
14234 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14235     a++;
14236   }
14237 #pragma omp target
14238 #pragma omp teams
14239   {
14240 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14241   for (int i = 0; i < 10; ++i)
14242     ;
14243   }
14244 #pragma omp target
14245 #pragma omp teams
14246   {
14247 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14248   for (int i = 0; i < 10; ++i)
14249     ;
14250   }
14251 #pragma omp target
14252 #pragma omp teams
14253   {
14254 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14255   for (int i = 0; i < 10; ++i)
14256     ;
14257   }
14258 #pragma omp target
14259 #pragma omp teams
14260   {
14261 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14262   for (int i = 0; i < 10; ++i)
14263     ;
14264   }
14265 
14266 // TASKLOOP DIRECTIVE
14267 #pragma omp taskloop
14268   for (int i = 0; i < 10; ++i) {
14269 #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?}}
14270     for (int i = 0; i < 10; ++i)
14271       ;
14272   }
14273 #pragma omp taskloop
14274   for (int i = 0; i < 10; ++i) {
14275 #pragma omp simd
14276     for (int i = 0; i < 10; ++i)
14277       ;
14278   }
14279 #pragma omp taskloop
14280   for (int i = 0; i < 10; ++i) {
14281 #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?}}
14282     for (int i = 0; i < 10; ++i)
14283       ;
14284   }
14285 #pragma omp taskloop
14286   for (int i = 0; i < 10; ++i) {
14287 #pragma omp parallel
14288     for (int i = 0; i < 10; ++i)
14289       ;
14290   }
14291 #pragma omp taskloop
14292   for (int i = 0; i < 10; ++i) {
14293 #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?}}
14294     {
14295       bar();
14296     }
14297   }
14298 #pragma omp taskloop
14299   for (int i = 0; i < 10; ++i) {
14300 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
14301     {
14302       bar();
14303     }
14304   }
14305 #pragma omp taskloop
14306   for (int i = 0; i < 10; ++i) {
14307 #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?}}
14308     {
14309       bar();
14310     }
14311   }
14312 
14313 #pragma omp taskloop
14314   for (int i = 0; i < 10; ++i) {
14315 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14316     {
14317       bar();
14318     }
14319   }
14320 #pragma omp taskloop
14321   for (int i = 0; i < 10; ++i) {
14322 #pragma omp critical
14323     {
14324       bar();
14325     }
14326   }
14327 #pragma omp taskloop
14328   for (int i = 0; i < 10; ++i) {
14329 #pragma omp parallel
14330     {
14331 #pragma omp single // OK
14332       {
14333         bar();
14334       }
14335 #pragma omp for // OK
14336       for (int i = 0; i < 10; ++i)
14337         ;
14338 #pragma omp sections // OK
14339       {
14340         bar();
14341       }
14342     }
14343   }
14344 #pragma omp taskloop
14345   for (int i = 0; i < 10; ++i) {
14346 #pragma omp parallel for
14347     for (int i = 0; i < 10; ++i)
14348       ;
14349   }
14350 #pragma omp taskloop
14351   for (int i = 0; i < 10; ++i) {
14352 #pragma omp parallel for simd
14353     for (int i = 0; i < 10; ++i)
14354       ;
14355   }
14356 #pragma omp taskloop
14357   for (int i = 0; i < 10; ++i) {
14358 #pragma omp parallel sections
14359     {
14360       bar();
14361     }
14362   }
14363 #pragma omp taskloop
14364   for (int i = 0; i < 10; ++i) {
14365 #pragma omp task
14366     {
14367       bar();
14368     }
14369   }
14370 #pragma omp taskloop
14371   for (int i = 0; i < 10; ++i) {
14372 #pragma omp taskyield
14373     bar();
14374   }
14375 #pragma omp taskloop
14376   for (int i = 0; i < 10; ++i) {
14377 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14378     bar();
14379   }
14380 #pragma omp taskloop
14381   for (int i = 0; i < 10; ++i) {
14382 #pragma omp scan // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14383     bar();
14384   }
14385 #pragma omp taskloop
14386   for (int i = 0; i < 10; ++i) {
14387 #pragma omp taskwait
14388     bar();
14389   }
14390 #pragma omp taskloop
14391   for (int i = 0; i < 10; ++i) {
14392 #pragma omp flush
14393     bar();
14394   }
14395 #pragma omp taskloop
14396   for (int i = 0; i < 10; ++i) {
14397 #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?}}
14398     bar();
14399   }
14400 #pragma omp taskloop
14401   for (int i = 0; i < 10; ++i) {
14402 #pragma omp atomic
14403     ++a;
14404   }
14405 #pragma omp taskloop
14406   for (int i = 0; i < 10; ++i) {
14407 #pragma omp target
14408     ++a;
14409   }
14410 #pragma omp taskloop
14411   for (int i = 0; i < 10; ++i) {
14412 #pragma omp target parallel
14413     ++a;
14414   }
14415 #pragma omp taskloop
14416   for (int i = 0; i < 10; ++i) {
14417 #pragma omp target parallel for
14418     for (int i = 0; i < 10; ++i)
14419       ;
14420   }
14421 #pragma omp taskloop
14422   for (int i = 0; i < 10; ++i) {
14423 #pragma omp target enter data map(to: a)
14424     ++a;
14425   }
14426 #pragma omp taskloop
14427   for (int i = 0; i < 10; ++i) {
14428 #pragma omp target exit data map(from: a)
14429     ++a;
14430   }
14431 #pragma omp taskloop
14432   for (int i = 0; i < 10; ++i) {
14433 #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?}}
14434     ++a;
14435   }
14436 #pragma omp taskloop
14437   for (int i = 0; i < 10; ++i) {
14438 #pragma omp taskloop
14439   for (int i = 0; i < 10; ++i)
14440     ++a;
14441   }
14442 #pragma omp taskloop
14443   for (int i = 0; i < 10; ++i) {
14444 #pragma omp target update to(a)
14445     ++a;
14446   }
14447 #pragma omp taskloop
14448   for (int i = 0; i < 10; ++i) {
14449 #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?}}
14450     for (int i = 0; i < 10; ++i)
14451       ;
14452   }
14453 #pragma omp taskloop
14454   for (int i = 0; i < 10; ++i) {
14455 #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?}}
14456     for (int i = 0; i < 10; ++i)
14457       ;
14458   }
14459 #pragma omp taskloop
14460   for (int i = 0; i < 10; ++i) {
14461 #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?}}
14462     for (int i = 0; i < 10; ++i)
14463       ;
14464   }
14465 #pragma omp taskloop
14466   for (int i = 0; i < 10; ++i) {
14467 #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?}}
14468     for (int i = 0; i < 10; ++i)
14469       ;
14470   }
14471 #pragma omp taskloop
14472   for (int i = 0; i < 10; ++i) {
14473 #pragma omp target simd // OK
14474     for (int i = 0; i < 10; ++i)
14475       ;
14476   }
14477 #pragma omp taskloop
14478   for (int i = 0; i < 10; ++i) {
14479 #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?}}
14480     for (int i = 0; i < 10; ++i)
14481       ;
14482   }
14483 #pragma omp taskloop
14484   for (int i = 0; i < 10; ++i) {
14485 #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?}}
14486     for (int i = 0; i < 10; ++i)
14487       ;
14488   }
14489 #pragma omp taskloop
14490   for (int i = 0; i < 10; ++i) {
14491 #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?}}
14492     for (int i = 0; i < 10; ++i)
14493       ;
14494   }
14495 #pragma omp taskloop
14496   for (int i = 0; i < 10; ++i) {
14497 #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?}}
14498     for (int i = 0; i < 10; ++i)
14499       ;
14500   }
14501 #pragma omp taskloop
14502   for (int i = 0; i < 10; ++i) {
14503 #pragma omp target teams // OK
14504     a++;
14505   }
14506 #pragma omp taskloop
14507   for (int i = 0; i < 10; ++i) {
14508 #pragma omp target teams distribute // OK
14509     for (int i = 0; i < 10; ++i)
14510       ;
14511   }
14512 #pragma omp taskloop
14513   for (int i = 0; i < 10; ++i) {
14514 #pragma omp target teams distribute parallel for // OK
14515     for (int i = 0; i < 10; ++i)
14516       ;
14517   }
14518 #pragma omp taskloop
14519   for (int i = 0; i < 10; ++i) {
14520 #pragma omp target teams distribute parallel for simd // OK
14521     for (int i = 0; i < 10; ++i)
14522       ;
14523   }
14524 #pragma omp taskloop
14525   for (int i = 0; i < 10; ++i) {
14526 #pragma omp target teams distribute simd // OK
14527     for (int i = 0; i < 10; ++i)
14528       ;
14529   }
14530 
14531 // DISTRIBUTE DIRECTIVE
14532 #pragma omp target
14533 #pragma omp teams
14534 #pragma omp distribute
14535   for (int i = 0; i < 10; ++i) {
14536 #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?}}
14537     for (int i = 0; i < 10; ++i)
14538       ;
14539   }
14540 #pragma omp target
14541 #pragma omp teams
14542 #pragma omp distribute
14543   for (int i = 0; i < 10; ++i) {
14544 #pragma omp for
14545     for (int i = 0; i < 10; ++i)
14546       ;
14547   }
14548 #pragma omp target
14549 #pragma omp teams
14550 #pragma omp distribute
14551   for (int i = 0; i < 10; ++i) {
14552 #pragma omp simd
14553     for (int i = 0; i < 10; ++i)
14554       ;
14555   }
14556 #pragma omp target
14557 #pragma omp teams
14558 #pragma omp distribute
14559   for (int i = 0; i < 10; ++i) {
14560 #pragma omp for simd
14561     for (int i = 0; i < 10; ++i)
14562       ;
14563   }
14564 #pragma omp target
14565 #pragma omp teams
14566 #pragma omp distribute
14567   for (int i = 0; i < 10; ++i) {
14568 #pragma omp parallel
14569     for (int i = 0; i < 10; ++i)
14570       ;
14571   }
14572 #pragma omp target
14573 #pragma omp teams
14574 #pragma omp distribute
14575   for (int i = 0; i < 10; ++i) {
14576 #pragma omp sections
14577     {
14578       bar();
14579     }
14580   }
14581 #pragma omp target
14582 #pragma omp teams
14583 #pragma omp distribute
14584   for (int i = 0; i < 10; ++i) {
14585 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
14586     {
14587       bar();
14588     }
14589   }
14590 #pragma omp target
14591 #pragma omp teams
14592 #pragma omp distribute
14593   for (int i = 0; i < 10; ++i) {
14594 #pragma omp single
14595     {
14596       bar();
14597     }
14598   }
14599 #pragma omp target
14600 #pragma omp teams
14601 #pragma omp distribute
14602   for (int i = 0; i < 10; ++i) {
14603 #pragma omp master
14604     {
14605       bar();
14606     }
14607   }
14608 #pragma omp target
14609 #pragma omp teams
14610 #pragma omp distribute
14611   for (int i = 0; i < 10; ++i) {
14612 #pragma omp critical
14613     {
14614       bar();
14615     }
14616   }
14617 #pragma omp target
14618 #pragma omp teams
14619 #pragma omp distribute
14620   for (int i = 0; i < 10; ++i) {
14621 #pragma omp parallel
14622     {
14623 #pragma omp single
14624       {
14625         bar();
14626       }
14627     }
14628   }
14629 #pragma omp target
14630 #pragma omp teams
14631 #pragma omp distribute
14632   for (int i = 0; i < 10; ++i) {
14633 #pragma omp parallel for
14634     for (int i = 0; i < 10; ++i)
14635       ;
14636   }
14637 #pragma omp target
14638 #pragma omp teams
14639 #pragma omp distribute
14640   for (int i = 0; i < 10; ++i) {
14641 #pragma omp parallel for simd
14642     for (int i = 0; i < 10; ++i)
14643       ;
14644   }
14645 #pragma omp target
14646 #pragma omp teams
14647 #pragma omp distribute
14648   for (int i = 0; i < 10; ++i) {
14649 #pragma omp parallel sections
14650     {
14651       bar();
14652     }
14653   }
14654 #pragma omp target
14655 #pragma omp teams
14656 #pragma omp distribute
14657   for (int i = 0; i < 10; ++i) {
14658 #pragma omp task
14659     {
14660       bar();
14661     }
14662   }
14663 #pragma omp target
14664 #pragma omp teams
14665 #pragma omp distribute
14666   for (int i = 0; i < 10; ++i) {
14667 #pragma omp taskyield
14668     bar();
14669   }
14670 #pragma omp target
14671 #pragma omp teams
14672 #pragma omp distribute
14673   for (int i = 0; i < 10; ++i) {
14674 #pragma omp barrier
14675     bar();
14676   }
14677 #pragma omp target
14678 #pragma omp teams
14679 #pragma omp distribute
14680   for (int i = 0; i < 10; ++i) {
14681 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
14682     bar();
14683   }
14684 #pragma omp target
14685 #pragma omp teams
14686 #pragma omp distribute
14687   for (int i = 0; i < 10; ++i) {
14688 #pragma omp taskwait
14689     bar();
14690   }
14691 #pragma omp target
14692 #pragma omp teams
14693 #pragma omp distribute
14694   for (int i = 0; i < 10; ++i) {
14695 #pragma omp flush
14696     bar();
14697   }
14698 #pragma omp target
14699 #pragma omp teams
14700 #pragma omp distribute
14701   for (int i = 0; i < 10; ++i) {
14702 #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?}}
14703     bar();
14704   }
14705 #pragma omp target
14706 #pragma omp teams
14707 #pragma omp distribute
14708   for (int i = 0; i < 10; ++i) {
14709 #pragma omp atomic
14710     ++a;
14711   }
14712 #pragma omp target
14713 #pragma omp teams
14714 #pragma omp distribute
14715   for (int i = 0; i < 10; ++i) {
14716 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14717     ++a;
14718   }
14719 #pragma omp target
14720 #pragma omp teams
14721 #pragma omp distribute
14722   for (int i = 0; i < 10; ++i) {
14723 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14724     ++a;
14725   }
14726 #pragma omp target
14727 #pragma omp teams
14728 #pragma omp distribute
14729   for (int i = 0; i < 10; ++i) {
14730 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14731     for (int i = 0; i < 10; ++i)
14732       ;
14733   }
14734 #pragma omp target
14735 #pragma omp teams
14736 #pragma omp distribute
14737   for (int i = 0; i < 10; ++i) {
14738 #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?}}
14739     ++a;
14740   }
14741 #pragma omp target
14742 #pragma omp teams
14743 #pragma omp distribute
14744   for (int i = 0; i < 10; ++i) {
14745 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14746     ++a;
14747   }
14748 #pragma omp target
14749 #pragma omp teams
14750 #pragma omp distribute
14751   for (int i = 0; i < 10; ++i) {
14752 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14753     ++a;
14754   }
14755 #pragma omp target
14756 #pragma omp teams
14757 #pragma omp distribute
14758   for (int i = 0; i < 10; ++i) {
14759 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14760     ++a;
14761   }
14762 #pragma omp target
14763 #pragma omp teams
14764 #pragma omp distribute
14765   for (int i = 0; i < 10; ++i) {
14766 #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?}}
14767   for (int i = 0; i < 10; ++i)
14768     ++a;
14769   }
14770 #pragma omp target
14771 #pragma omp teams
14772 #pragma omp distribute
14773   for (int i = 0; i < 10; ++i) {
14774 #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?}}
14775   for (int i = 0; i < 10; ++i)
14776     ++a;
14777   }
14778 #pragma omp target
14779 #pragma omp teams
14780 #pragma omp distribute
14781   for (int i = 0; i < 10; ++i) {
14782 #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?}}
14783   for (int i = 0; i < 10; ++i)
14784     ++a;
14785   }
14786 #pragma omp target
14787 #pragma omp teams
14788 #pragma omp distribute
14789   for (int i = 0; i < 10; ++i) {
14790 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14791   for (int i = 0; i < 10; ++i)
14792     ++a;
14793   }
14794 #pragma omp target
14795 #pragma omp teams
14796 #pragma omp distribute
14797   for (int i = 0; i < 10; ++i) {
14798 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14799   for (int i = 0; i < 10; ++i)
14800     ++a;
14801   }
14802 #pragma omp target
14803 #pragma omp teams
14804 #pragma omp distribute
14805   for (int i = 0; i < 10; ++i) {
14806 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14807   for (int i = 0; i < 10; ++i)
14808     ++a;
14809   }
14810 #pragma omp target
14811 #pragma omp teams
14812 #pragma omp distribute
14813   for (int i = 0; i < 10; ++i) {
14814 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14815   for (int i = 0; i < 10; ++i)
14816     ++a;
14817   }
14818 #pragma omp target
14819 #pragma omp teams
14820 #pragma omp distribute
14821   for (int i = 0; i < 10; ++i) {
14822 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14823   for (int i = 0; i < 10; ++i)
14824     ++a;
14825   }
14826 #pragma omp target
14827 #pragma omp teams
14828 #pragma omp distribute
14829   for (int i = 0; i < 10; ++i) {
14830 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14831   for (int i = 0; i < 10; ++i)
14832     ++a;
14833   }
14834 #pragma omp target
14835 #pragma omp teams
14836 #pragma omp distribute
14837   for (int i = 0; i < 10; ++i) {
14838 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14839   for (int i = 0; i < 10; ++i)
14840     ++a;
14841   }
14842 #pragma omp target
14843 #pragma omp teams
14844 #pragma omp distribute
14845   for (int i = 0; i < 10; ++i) {
14846 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14847   for (int i = 0; i < 10; ++i)
14848     ++a;
14849   }
14850 
14851 // DISTRIBUTE PARALLEL FOR DIRECTIVE
14852 #pragma omp target
14853 #pragma omp teams
14854 #pragma omp distribute parallel for
14855   for (int i = 0; i < 10; ++i) {
14856 #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?}}
14857     for (int i = 0; i < 10; ++i)
14858       ;
14859   }
14860 
14861 #pragma omp target
14862 #pragma omp teams
14863 #pragma omp distribute parallel for
14864   for (int i = 0; i < 10; ++i) {
14865 #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?}}
14866     for (int i = 0; i < 10; ++i)
14867       ;
14868   }
14869 #pragma omp target
14870 #pragma omp teams
14871 #pragma omp distribute parallel for
14872   for (int i = 0; i < 10; ++i) {
14873 #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?}}
14874     for (int i = 0; i < 10; ++i)
14875       ;
14876   }
14877 #pragma omp target
14878 #pragma omp teams
14879 #pragma omp distribute parallel for
14880   for (int i = 0; i < 10; ++i) {
14881 #pragma omp simd
14882     for (int i = 0; i < 10; ++i)
14883       ;
14884   }
14885 #pragma omp target
14886 #pragma omp teams
14887 #pragma omp distribute parallel for
14888   for (int i = 0; i < 10; ++i) {
14889 #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?}}
14890     for (int i = 0; i < 10; ++i)
14891       ;
14892   }
14893 #pragma omp target
14894 #pragma omp teams
14895 #pragma omp distribute parallel for
14896   for (int i = 0; i < 10; ++i) {
14897 #pragma omp parallel
14898     for (int i = 0; i < 10; ++i)
14899       ;
14900   }
14901 #pragma omp target
14902 #pragma omp teams
14903 #pragma omp distribute parallel for
14904   for (int i = 0; i < 10; ++i) {
14905 #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?}}
14906     {
14907       bar();
14908     }
14909   }
14910 #pragma omp target
14911 #pragma omp teams
14912 #pragma omp distribute parallel for
14913   for (int i = 0; i < 10; ++i) {
14914 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
14915     {
14916       bar();
14917     }
14918   }
14919 #pragma omp target
14920 #pragma omp teams
14921 #pragma omp distribute parallel for
14922   for (int i = 0; i < 10; ++i) {
14923 #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?}}
14924     {
14925       bar();
14926     }
14927   }
14928 #pragma omp target
14929 #pragma omp teams
14930 #pragma omp distribute parallel for
14931   for (int i = 0; i < 10; ++i) {
14932 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14933     {
14934       bar();
14935     }
14936   }
14937 #pragma omp target
14938 #pragma omp teams
14939 #pragma omp distribute parallel for
14940   for (int i = 0; i < 10; ++i) {
14941 #pragma omp critical
14942     {
14943       bar();
14944     }
14945   }
14946 #pragma omp target
14947 #pragma omp teams
14948 #pragma omp distribute parallel for
14949   for (int i = 0; i < 10; ++i) {
14950 #pragma omp parallel
14951     {
14952 #pragma omp single
14953       {
14954         bar();
14955       }
14956     }
14957   }
14958 #pragma omp target
14959 #pragma omp teams
14960 #pragma omp distribute parallel for
14961   for (int i = 0; i < 10; ++i) {
14962 #pragma omp parallel for
14963     for (int i = 0; i < 10; ++i)
14964       ;
14965   }
14966 #pragma omp target
14967 #pragma omp teams
14968 #pragma omp distribute parallel for
14969   for (int i = 0; i < 10; ++i) {
14970 #pragma omp parallel for simd
14971     for (int i = 0; i < 10; ++i)
14972       ;
14973   }
14974 #pragma omp target
14975 #pragma omp teams
14976 #pragma omp distribute parallel for
14977   for (int i = 0; i < 10; ++i) {
14978 #pragma omp parallel sections
14979     {
14980       bar();
14981     }
14982   }
14983 #pragma omp target
14984 #pragma omp teams
14985 #pragma omp distribute parallel for
14986   for (int i = 0; i < 10; ++i) {
14987 #pragma omp task
14988     {
14989       bar();
14990     }
14991   }
14992 #pragma omp target
14993 #pragma omp teams
14994 #pragma omp distribute parallel for
14995   for (int i = 0; i < 10; ++i) {
14996 #pragma omp taskyield
14997     bar();
14998   }
14999 #pragma omp target
15000 #pragma omp teams
15001 #pragma omp distribute parallel for
15002   for (int i = 0; i < 10; ++i) {
15003 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
15004     bar();
15005   }
15006 #pragma omp target
15007 #pragma omp teams
15008 #pragma omp distribute parallel for
15009   for (int i = 0; i < 10; ++i) {
15010 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
15011     bar();
15012   }
15013 #pragma omp target
15014 #pragma omp teams
15015 #pragma omp distribute parallel for
15016   for (int i = 0; i < 10; ++i) {
15017 #pragma omp taskwait
15018     bar();
15019   }
15020 #pragma omp target
15021 #pragma omp teams
15022 #pragma omp distribute parallel for
15023   for (int i = 0; i < 10; ++i) {
15024 #pragma omp flush
15025     bar();
15026   }
15027 #pragma omp target
15028 #pragma omp teams
15029 #pragma omp distribute parallel for
15030   for (int i = 0; i < 10; ++i) {
15031 #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?}}
15032     bar();
15033   }
15034 #pragma omp target
15035 #pragma omp teams
15036 #pragma omp distribute parallel for
15037   for (int i = 0; i < 10; ++i) {
15038 #pragma omp atomic
15039     ++a;
15040   }
15041 #pragma omp target
15042 #pragma omp teams
15043 #pragma omp distribute parallel for
15044   for (int i = 0; i < 10; ++i) {
15045 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15046     ++a;
15047   }
15048 #pragma omp target
15049 #pragma omp teams
15050 #pragma omp distribute parallel for
15051   for (int i = 0; i < 10; ++i) {
15052 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
15053     ++a;
15054   }
15055 #pragma omp target
15056 #pragma omp teams
15057 #pragma omp distribute parallel for
15058   for (int i = 0; i < 10; ++i) {
15059 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15060     for (int i = 0; i < 10; ++i)
15061       ;
15062   }
15063 #pragma omp target
15064 #pragma omp teams
15065 #pragma omp distribute parallel for
15066   for (int i = 0; i < 10; ++i) {
15067 #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?}}
15068     ++a;
15069   }
15070 #pragma omp target
15071 #pragma omp teams
15072 #pragma omp distribute parallel for
15073   for (int i = 0; i < 10; ++i) {
15074 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15075     ++a;
15076   }
15077 #pragma omp target
15078 #pragma omp teams
15079 #pragma omp distribute parallel for
15080   for (int i = 0; i < 10; ++i) {
15081 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15082     ++a;
15083   }
15084 #pragma omp target
15085 #pragma omp teams
15086 #pragma omp distribute parallel for
15087   for (int i = 0; i < 10; ++i) {
15088 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15089     ++a;
15090   }
15091 #pragma omp target
15092 #pragma omp teams
15093 #pragma omp distribute parallel for
15094   for (int i = 0; i < 10; ++i) {
15095 #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?}}
15096   for (int i = 0; i < 10; ++i)
15097     ++a;
15098   }
15099 #pragma omp target
15100 #pragma omp teams
15101 #pragma omp distribute parallel for
15102   for (int i = 0; i < 10; ++i) {
15103 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15104   for (int i = 0; i < 10; ++i)
15105     ++a;
15106   }
15107 #pragma omp target
15108 #pragma omp teams
15109 #pragma omp distribute parallel for
15110   for (int i = 0; i < 10; ++i) {
15111 #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?}}
15112   for (int i = 0; i < 10; ++i)
15113     ++a;
15114   }
15115 #pragma omp target
15116 #pragma omp teams
15117 #pragma omp distribute parallel for
15118   for (int i = 0; i < 10; ++i) {
15119 #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?}}
15120   for (int i = 0; i < 10; ++i)
15121     ++a;
15122   }
15123 #pragma omp target
15124 #pragma omp teams
15125 #pragma omp distribute parallel for
15126   for (int i = 0; i < 10; ++i) {
15127 #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?}}
15128   for (int i = 0; i < 10; ++i)
15129     ++a;
15130   }
15131 #pragma omp target
15132 #pragma omp teams
15133 #pragma omp distribute parallel for
15134   for (int i = 0; i < 10; ++i) {
15135 #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?}}
15136   for (int i = 0; i < 10; ++i)
15137     ++a;
15138   }
15139 #pragma omp target
15140 #pragma omp teams
15141 #pragma omp distribute parallel for
15142   for (int i = 0; i < 10; ++i) {
15143 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15144     ++a;
15145   }
15146 #pragma omp target
15147 #pragma omp teams
15148 #pragma omp distribute parallel for
15149   for (int i = 0; i < 10; ++i) {
15150 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15151   for (int i = 0; i < 10; ++i)
15152     ++a;
15153   }
15154 #pragma omp target
15155 #pragma omp teams
15156 #pragma omp distribute parallel for
15157   for (int i = 0; i < 10; ++i) {
15158 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15159   for (int i = 0; i < 10; ++i)
15160     ++a;
15161   }
15162 #pragma omp target
15163 #pragma omp teams
15164 #pragma omp distribute parallel for
15165   for (int i = 0; i < 10; ++i) {
15166 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15167   for (int i = 0; i < 10; ++i)
15168     ++a;
15169   }
15170 #pragma omp target
15171 #pragma omp teams
15172 #pragma omp distribute parallel for
15173   for (int i = 0; i < 10; ++i) {
15174 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
15175   for (int i = 0; i < 10; ++i)
15176     ++a;
15177   }
15178 
15179 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
15180 #pragma omp target
15181 #pragma omp teams
15182 #pragma omp distribute parallel for simd
15183   for (int i = 0; i < 10; ++i) {
15184 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15185     for (int i = 0; i < 10; ++i)
15186       ;
15187   }
15188 #pragma omp target
15189 #pragma omp teams
15190 #pragma omp distribute parallel for simd
15191   for (int i = 0; i < 10; ++i) {
15192 #pragma omp distribute // 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 parallel for simd
15199   for (int i = 0; i < 10; ++i) {
15200 #pragma omp for // 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 parallel for simd
15207   for (int i = 0; i < 10; ++i) {
15208 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15209     for (int i = 0; i < 10; ++i)
15210       ;
15211   }
15212 #pragma omp target
15213 #pragma omp teams
15214 #pragma omp distribute parallel for simd
15215   for (int i = 0; i < 10; ++i) {
15216 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15217     for (int i = 0; i < 10; ++i)
15218       ;
15219   }
15220 #pragma omp target
15221 #pragma omp teams
15222 #pragma omp distribute parallel for simd
15223   for (int i = 0; i < 10; ++i) {
15224 #pragma omp parallel // 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 parallel for simd
15231   for (int i = 0; i < 10; ++i) {
15232 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15233     {
15234       bar();
15235     }
15236   }
15237 #pragma omp target
15238 #pragma omp teams
15239 #pragma omp distribute parallel for simd
15240   for (int i = 0; i < 10; ++i) {
15241 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15242     {
15243       bar();
15244     }
15245   }
15246 #pragma omp target
15247 #pragma omp teams
15248 #pragma omp distribute parallel for simd
15249   for (int i = 0; i < 10; ++i) {
15250 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15251     {
15252       bar();
15253     }
15254   }
15255 #pragma omp target
15256 #pragma omp teams
15257 #pragma omp distribute parallel for simd
15258   for (int i = 0; i < 10; ++i) {
15259 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15260     {
15261       bar();
15262     }
15263   }
15264 #pragma omp target
15265 #pragma omp teams
15266 #pragma omp distribute parallel for simd
15267   for (int i = 0; i < 10; ++i) {
15268 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15269     {
15270       bar();
15271     }
15272   }
15273 #pragma omp target
15274 #pragma omp teams
15275 #pragma omp distribute parallel for simd
15276   for (int i = 0; i < 10; ++i) {
15277 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15278     {
15279 #pragma omp single
15280       {
15281         bar();
15282       }
15283     }
15284   }
15285 #pragma omp target
15286 #pragma omp teams
15287 #pragma omp distribute parallel for simd
15288   for (int i = 0; i < 10; ++i) {
15289 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15290     for (int i = 0; i < 10; ++i)
15291       ;
15292   }
15293 #pragma omp target
15294 #pragma omp teams
15295 #pragma omp distribute parallel for simd
15296   for (int i = 0; i < 10; ++i) {
15297 #pragma omp parallel for simd // 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 parallel for simd
15304   for (int i = 0; i < 10; ++i) {
15305 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15306     {
15307       bar();
15308     }
15309   }
15310 #pragma omp target
15311 #pragma omp teams
15312 #pragma omp distribute parallel for simd
15313   for (int i = 0; i < 10; ++i) {
15314 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15315     {
15316       bar();
15317     }
15318   }
15319 #pragma omp target
15320 #pragma omp teams
15321 #pragma omp distribute parallel for simd
15322   for (int i = 0; i < 10; ++i) {
15323 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15324     bar();
15325   }
15326 #pragma omp target
15327 #pragma omp teams
15328 #pragma omp distribute parallel for simd
15329   for (int i = 0; i < 10; ++i) {
15330 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15331     bar();
15332   }
15333 #pragma omp target
15334 #pragma omp teams
15335 #pragma omp distribute parallel for simd
15336   for (int i = 0; i < 10; ++i) {
15337 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
15338     bar();
15339   }
15340 #pragma omp target
15341 #pragma omp teams
15342 #pragma omp distribute parallel for simd
15343   for (int i = 0; i < 10; ++i) {
15344 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15345     bar();
15346   }
15347 #pragma omp target
15348 #pragma omp teams
15349 #pragma omp distribute parallel for simd
15350   for (int i = 0; i < 10; ++i) {
15351 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15352     bar();
15353   }
15354 #pragma omp target
15355 #pragma omp teams
15356 #pragma omp distribute parallel for simd
15357   for (int i = 0; i < 10; ++i) {
15358 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15359     bar();
15360   }
15361 #pragma omp target
15362 #pragma omp teams
15363 #pragma omp distribute parallel for simd
15364   for (int i = 0; i < 10; ++i) {
15365 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15366     ++a;
15367   }
15368 #pragma omp target
15369 #pragma omp teams
15370 #pragma omp distribute parallel for simd
15371   for (int i = 0; i < 10; ++i) {
15372 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15373     ++a;
15374   }
15375 #pragma omp target
15376 #pragma omp teams
15377 #pragma omp distribute parallel for simd
15378   for (int i = 0; i < 10; ++i) {
15379 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15380     ++a;
15381   }
15382 #pragma omp target
15383 #pragma omp teams
15384 #pragma omp distribute parallel for simd
15385   for (int i = 0; i < 10; ++i) {
15386 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15387     ++a;
15388   }
15389 #pragma omp target
15390 #pragma omp teams
15391 #pragma omp distribute parallel for simd
15392   for (int i = 0; i < 10; ++i) {
15393 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15394     ++a;
15395   }
15396 #pragma omp target
15397 #pragma omp teams
15398 #pragma omp distribute parallel for simd
15399   for (int i = 0; i < 10; ++i) {
15400 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15401     ++a;
15402   }
15403 #pragma omp target
15404 #pragma omp teams
15405 #pragma omp distribute parallel for simd
15406   for (int i = 0; i < 10; ++i) {
15407 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15408     ++a;
15409   }
15410 #pragma omp target
15411 #pragma omp teams
15412 #pragma omp distribute parallel for simd
15413   for (int i = 0; i < 10; ++i) {
15414 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15415     for (int i = 0; i < 10; ++i)
15416       ;
15417   }
15418 #pragma omp target
15419 #pragma omp teams
15420 #pragma omp distribute parallel for simd
15421   for (int i = 0; i < 10; ++i) {
15422 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15423     for (int i = 0; i < 10; ++i)
15424       ;
15425   }
15426 #pragma omp target
15427 #pragma omp teams
15428 #pragma omp distribute parallel for simd
15429   for (int i = 0; i < 10; ++i) {
15430 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15431     for (int i = 0; i < 10; ++i)
15432       ;
15433   }
15434 #pragma omp target
15435 #pragma omp teams
15436 #pragma omp distribute parallel for simd
15437   for (int i = 0; i < 10; ++i) {
15438 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15439     for (int i = 0; i < 10; ++i)
15440       ;
15441   }
15442 #pragma omp target
15443 #pragma omp teams
15444 #pragma omp distribute parallel for simd
15445   for (int i = 0; i < 10; ++i) {
15446 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15447     for (int i = 0; i < 10; ++i)
15448       ;
15449   }
15450 #pragma omp target
15451 #pragma omp teams
15452 #pragma omp distribute parallel for simd
15453   for (int i = 0; i < 10; ++i) {
15454 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15455     for (int i = 0; i < 10; ++i)
15456       ;
15457   }
15458 #pragma omp target
15459 #pragma omp teams
15460 #pragma omp distribute parallel for simd
15461   for (int i = 0; i < 10; ++i) {
15462 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15463     a++;
15464   }
15465 #pragma omp target
15466 #pragma omp teams
15467 #pragma omp distribute parallel for simd
15468   for (int i = 0; i < 10; ++i) {
15469 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15470     for (int i = 0; i < 10; ++i)
15471       ;
15472   }
15473 #pragma omp target
15474 #pragma omp teams
15475 #pragma omp distribute parallel for simd
15476   for (int i = 0; i < 10; ++i) {
15477 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15478     for (int i = 0; i < 10; ++i)
15479       ;
15480   }
15481 #pragma omp target
15482 #pragma omp teams
15483 #pragma omp distribute parallel for simd
15484   for (int i = 0; i < 10; ++i) {
15485 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15486     for (int i = 0; i < 10; ++i)
15487       ;
15488   }
15489 #pragma omp target
15490 #pragma omp teams
15491 #pragma omp distribute parallel for simd
15492   for (int i = 0; i < 10; ++i) {
15493 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15494     for (int i = 0; i < 10; ++i)
15495       ;
15496   }
15497 
15498 // DISTRIBUTE SIMD DIRECTIVE
15499 #pragma omp target
15500 #pragma omp teams
15501 #pragma omp distribute simd
15502   for (int i = 0; i < 10; ++i) {
15503 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15504     for (int i = 0; i < 10; ++i)
15505       ;
15506   }
15507 #pragma omp target
15508 #pragma omp teams
15509 #pragma omp distribute simd
15510   for (int i = 0; i < 10; ++i) {
15511 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15512     for (int i = 0; i < 10; ++i)
15513       ;
15514   }
15515 #pragma omp target
15516 #pragma omp teams
15517 #pragma omp distribute simd
15518   for (int i = 0; i < 10; ++i) {
15519 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15520     for (int i = 0; i < 10; ++i)
15521       ;
15522   }
15523 #pragma omp target
15524 #pragma omp teams
15525 #pragma omp distribute simd
15526   for (int i = 0; i < 10; ++i) {
15527 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15528     for (int i = 0; i < 10; ++i)
15529       ;
15530   }
15531 #pragma omp target
15532 #pragma omp teams
15533 #pragma omp distribute simd
15534   for (int i = 0; i < 10; ++i) {
15535 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15536     for (int i = 0; i < 10; ++i)
15537       ;
15538   }
15539 #pragma omp target
15540 #pragma omp teams
15541 #pragma omp distribute simd
15542   for (int i = 0; i < 10; ++i) {
15543 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15544     for (int i = 0; i < 10; ++i)
15545       ;
15546   }
15547 #pragma omp target
15548 #pragma omp teams
15549 #pragma omp distribute simd
15550   for (int i = 0; i < 10; ++i) {
15551 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15552     {
15553       bar();
15554     }
15555   }
15556 #pragma omp target
15557 #pragma omp teams
15558 #pragma omp distribute simd
15559   for (int i = 0; i < 10; ++i) {
15560 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15561     {
15562       bar();
15563     }
15564   }
15565 #pragma omp target
15566 #pragma omp teams
15567 #pragma omp distribute simd
15568   for (int i = 0; i < 10; ++i) {
15569 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15570     {
15571       bar();
15572     }
15573   }
15574 #pragma omp target
15575 #pragma omp teams
15576 #pragma omp distribute simd
15577   for (int i = 0; i < 10; ++i) {
15578 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15579     {
15580       bar();
15581     }
15582   }
15583 #pragma omp target
15584 #pragma omp teams
15585 #pragma omp distribute simd
15586   for (int i = 0; i < 10; ++i) {
15587 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15588     {
15589       bar();
15590     }
15591   }
15592 #pragma omp target
15593 #pragma omp teams
15594 #pragma omp distribute simd
15595   for (int i = 0; i < 10; ++i) {
15596 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15597     {
15598 #pragma omp single
15599       {
15600         bar();
15601       }
15602     }
15603   }
15604 #pragma omp target
15605 #pragma omp teams
15606 #pragma omp distribute simd
15607   for (int i = 0; i < 10; ++i) {
15608 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15609     for (int i = 0; i < 10; ++i)
15610       ;
15611   }
15612 #pragma omp target
15613 #pragma omp teams
15614 #pragma omp distribute simd
15615   for (int i = 0; i < 10; ++i) {
15616 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15617     for (int i = 0; i < 10; ++i)
15618       ;
15619   }
15620 #pragma omp target
15621 #pragma omp teams
15622 #pragma omp distribute simd
15623   for (int i = 0; i < 10; ++i) {
15624 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15625     {
15626       bar();
15627     }
15628   }
15629 #pragma omp target
15630 #pragma omp teams
15631 #pragma omp distribute simd
15632   for (int i = 0; i < 10; ++i) {
15633 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15634     {
15635       bar();
15636     }
15637   }
15638 #pragma omp target
15639 #pragma omp teams
15640 #pragma omp distribute simd
15641   for (int i = 0; i < 10; ++i) {
15642 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15643     bar();
15644   }
15645 #pragma omp target
15646 #pragma omp teams
15647 #pragma omp distribute simd
15648   for (int i = 0; i < 10; ++i) {
15649 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15650     bar();
15651   }
15652 #pragma omp target
15653 #pragma omp teams
15654 #pragma omp distribute simd
15655   for (int i = 0; i < 10; ++i) {
15656 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
15657     bar();
15658   }
15659 #pragma omp target
15660 #pragma omp teams
15661 #pragma omp distribute simd
15662   for (int i = 0; i < 10; ++i) {
15663 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15664     bar();
15665   }
15666 #pragma omp target
15667 #pragma omp teams
15668 #pragma omp distribute simd
15669   for (int i = 0; i < 10; ++i) {
15670 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15671     bar();
15672   }
15673 #pragma omp target
15674 #pragma omp teams
15675 #pragma omp distribute simd
15676   for (int i = 0; i < 10; ++i) {
15677 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15678     bar();
15679   }
15680 #pragma omp target
15681 #pragma omp teams
15682 #pragma omp distribute simd
15683   for (int i = 0; i < 10; ++i) {
15684 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15685     ++a;
15686   }
15687 #pragma omp target
15688 #pragma omp teams
15689 #pragma omp distribute simd
15690   for (int i = 0; i < 10; ++i) {
15691 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15692     ++a;
15693   }
15694 #pragma omp target
15695 #pragma omp teams
15696 #pragma omp distribute simd
15697   for (int i = 0; i < 10; ++i) {
15698 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15699     ++a;
15700   }
15701 #pragma omp target
15702 #pragma omp teams
15703 #pragma omp distribute simd
15704   for (int i = 0; i < 10; ++i) {
15705 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15706     ++a;
15707   }
15708 #pragma omp target
15709 #pragma omp teams
15710 #pragma omp distribute simd
15711   for (int i = 0; i < 10; ++i) {
15712 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15713     ++a;
15714   }
15715 #pragma omp target
15716 #pragma omp teams
15717 #pragma omp distribute simd
15718   for (int i = 0; i < 10; ++i) {
15719 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15720     ++a;
15721   }
15722 #pragma omp target
15723 #pragma omp teams
15724 #pragma omp distribute simd
15725   for (int i = 0; i < 10; ++i) {
15726 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15727     ++a;
15728   }
15729 #pragma omp target
15730 #pragma omp teams
15731 #pragma omp distribute simd
15732   for (int i = 0; i < 10; ++i) {
15733 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15734     for (int i = 0; i < 10; ++i)
15735       ;
15736   }
15737 #pragma omp target
15738 #pragma omp teams
15739 #pragma omp distribute simd
15740   for (int i = 0; i < 10; ++i) {
15741 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15742     for (int i = 0; i < 10; ++i)
15743       ;
15744   }
15745 #pragma omp target
15746 #pragma omp teams
15747 #pragma omp distribute simd
15748   for (int i = 0; i < 10; ++i) {
15749 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15750     for (int i = 0; i < 10; ++i)
15751       ;
15752   }
15753 #pragma omp target
15754 #pragma omp teams
15755 #pragma omp distribute simd
15756   for (int i = 0; i < 10; ++i) {
15757 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15758     for (int i = 0; i < 10; ++i)
15759       ;
15760   }
15761 #pragma omp target
15762 #pragma omp teams
15763 #pragma omp distribute simd
15764   for (int i = 0; i < 10; ++i) {
15765 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15766     for (int i = 0; i < 10; ++i)
15767       ;
15768   }
15769 #pragma omp target
15770 #pragma omp teams
15771 #pragma omp distribute simd
15772   for (int i = 0; i < 10; ++i) {
15773 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15774     for (int i = 0; i < 10; ++i)
15775       ;
15776   }
15777 #pragma omp target
15778 #pragma omp teams
15779 #pragma omp distribute simd
15780   for (int i = 0; i < 10; ++i) {
15781 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15782     a++;
15783   }
15784 #pragma omp target
15785 #pragma omp teams
15786 #pragma omp distribute simd
15787   for (int i = 0; i < 10; ++i) {
15788 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15789     for (int i = 0; i < 10; ++i)
15790       ;
15791   }
15792 #pragma omp target
15793 #pragma omp teams
15794 #pragma omp distribute simd
15795   for (int i = 0; i < 10; ++i) {
15796 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15797     for (int i = 0; i < 10; ++i)
15798       ;
15799   }
15800 #pragma omp target
15801 #pragma omp teams
15802 #pragma omp distribute simd
15803   for (int i = 0; i < 10; ++i) {
15804 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15805     for (int i = 0; i < 10; ++i)
15806       ;
15807   }
15808 #pragma omp target
15809 #pragma omp teams
15810 #pragma omp distribute simd
15811   for (int i = 0; i < 10; ++i) {
15812 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15813     for (int i = 0; i < 10; ++i)
15814       ;
15815   }
15816 
15817 // TARGET SIMD DIRECTIVE
15818 #pragma omp target simd
15819   for (int i = 0; i < 10; ++i) {
15820 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15821     for (int i = 0; i < 10; ++i)
15822       ;
15823   }
15824 #pragma omp target simd
15825   for (int i = 0; i < 10; ++i) {
15826 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15827     for (int i = 0; i < 10; ++i)
15828       ;
15829   }
15830 #pragma omp target simd
15831   for (int i = 0; i < 10; ++i) {
15832 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15833     for (int i = 0; i < 10; ++i)
15834       ;
15835   }
15836 #pragma omp target simd
15837   for (int i = 0; i < 10; ++i) {
15838 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15839     for (int i = 0; i < 10; ++i)
15840       ;
15841   }
15842 #pragma omp target simd
15843   for (int i = 0; i < 10; ++i) {
15844 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15845     for (int i = 0; i < 10; ++i)
15846       ;
15847   }
15848 #pragma omp target simd
15849   for (int i = 0; i < 10; ++i) {
15850 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15851     for (int i = 0; i < 10; ++i)
15852       ;
15853   }
15854 #pragma omp target simd
15855   for (int i = 0; i < 10; ++i) {
15856 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15857     {
15858       bar();
15859     }
15860   }
15861 #pragma omp target simd
15862   for (int i = 0; i < 10; ++i) {
15863 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15864     {
15865       bar();
15866     }
15867   }
15868 #pragma omp target simd
15869   for (int i = 0; i < 10; ++i) {
15870 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15871     {
15872       bar();
15873     }
15874   }
15875 #pragma omp target simd
15876   for (int i = 0; i < 10; ++i) {
15877 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15878     {
15879       bar();
15880     }
15881   }
15882 #pragma omp target simd
15883   for (int i = 0; i < 10; ++i) {
15884 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15885     {
15886       bar();
15887     }
15888   }
15889 #pragma omp target simd
15890   for (int i = 0; i < 10; ++i) {
15891 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15892     {
15893 #pragma omp single
15894       {
15895         bar();
15896       }
15897     }
15898   }
15899 #pragma omp target simd
15900   for (int i = 0; i < 10; ++i) {
15901 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15902     for (int i = 0; i < 10; ++i)
15903       ;
15904   }
15905 #pragma omp target simd
15906   for (int i = 0; i < 10; ++i) {
15907 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15908     for (int i = 0; i < 10; ++i)
15909       ;
15910   }
15911 #pragma omp target simd
15912   for (int i = 0; i < 10; ++i) {
15913 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15914     {
15915       bar();
15916     }
15917   }
15918 #pragma omp target simd
15919   for (int i = 0; i < 10; ++i) {
15920 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15921     {
15922       bar();
15923     }
15924   }
15925 #pragma omp target simd
15926   for (int i = 0; i < 10; ++i) {
15927 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15928     bar();
15929   }
15930 #pragma omp target simd
15931   for (int i = 0; i < 10; ++i) {
15932 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15933     bar();
15934   }
15935 #pragma omp target simd
15936   for (int i = 0; i < 10; ++i) {
15937 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
15938     bar();
15939   }
15940 #pragma omp target simd
15941   for (int i = 0; i < 10; ++i) {
15942 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15943     bar();
15944   }
15945 #pragma omp target simd
15946   for (int i = 0; i < 10; ++i) {
15947 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15948     bar();
15949   }
15950 #pragma omp target simd
15951   for (int i = 0; i < 10; ++i) {
15952 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15953     bar();
15954   }
15955 #pragma omp target simd
15956   for (int i = 0; i < 10; ++i) {
15957 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15958     ++a;
15959   }
15960 #pragma omp target simd
15961   for (int i = 0; i < 10; ++i) {
15962 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15963     ++a;
15964   }
15965 #pragma omp target simd
15966   for (int i = 0; i < 10; ++i) {
15967 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15968     ++a;
15969   }
15970 #pragma omp target simd
15971   for (int i = 0; i < 10; ++i) {
15972 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15973     ++a;
15974   }
15975 #pragma omp target simd
15976   for (int i = 0; i < 10; ++i) {
15977 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15978     ++a;
15979   }
15980 #pragma omp target simd
15981   for (int i = 0; i < 10; ++i) {
15982 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15983     ++a;
15984   }
15985 #pragma omp target simd
15986   for (int i = 0; i < 10; ++i) {
15987 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15988     ++a;
15989   }
15990 #pragma omp target simd
15991   for (int i = 0; i < 10; ++i) {
15992 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15993     for (int i = 0; i < 10; ++i)
15994       ;
15995   }
15996 #pragma omp target simd
15997   for (int i = 0; i < 10; ++i) {
15998 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15999     for (int i = 0; i < 10; ++i)
16000       ;
16001   }
16002 #pragma omp target simd
16003   for (int i = 0; i < 10; ++i) {
16004 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16005     for (int i = 0; i < 10; ++i)
16006       ;
16007   }
16008 #pragma omp target simd
16009   for (int i = 0; i < 10; ++i) {
16010 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16011     for (int i = 0; i < 10; ++i)
16012       ;
16013   }
16014 #pragma omp target simd
16015   for (int i = 0; i < 10; ++i) {
16016 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16017     for (int i = 0; i < 10; ++i)
16018       ;
16019   }
16020 #pragma omp target simd
16021   for (int i = 0; i < 10; ++i) {
16022 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16023     for (int i = 0; i < 10; ++i)
16024       ;
16025   }
16026 #pragma omp target simd
16027   for (int i = 0; i < 10; ++i) {
16028 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16029     a++;
16030   }
16031 #pragma omp target simd
16032   for (int i = 0; i < 10; ++i) {
16033 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16034     for (int i = 0; i < 10; ++i)
16035       ;
16036   }
16037 #pragma omp target simd
16038   for (int i = 0; i < 10; ++i) {
16039 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16040     for (int i = 0; i < 10; ++i)
16041       ;
16042   }
16043 #pragma omp target simd
16044   for (int i = 0; i < 10; ++i) {
16045 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16046     for (int i = 0; i < 10; ++i)
16047       ;
16048   }
16049 #pragma omp target simd
16050   for (int i = 0; i < 10; ++i) {
16051 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16052     for (int i = 0; i < 10; ++i)
16053       ;
16054   }
16055 
16056 // TEAMS DISTRIBUTE DIRECTIVE
16057 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16058   for (int i = 0; i < 10; ++i)
16059     ;
16060 #pragma omp target
16061 #pragma omp teams distribute
16062   for (int i = 0; i < 10; ++i) {
16063 #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?}}
16064     for (int i = 0; i < 10; ++i)
16065       ;
16066   }
16067 #pragma omp target
16068 #pragma omp teams distribute
16069   for (int i = 0; i < 10; ++i) {
16070 #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?}}
16071     for (int i = 0; i < 10; ++i)
16072       ;
16073   }
16074 #pragma omp target
16075 #pragma omp teams distribute
16076   for (int i = 0; i < 10; ++i) {
16077 #pragma omp for // OK
16078     for (int i = 0; i < 10; ++i)
16079       ;
16080   }
16081 #pragma omp target
16082 #pragma omp teams distribute
16083   for (int i = 0; i < 10; ++i) {
16084 #pragma omp simd // OK
16085     for (int i = 0; i < 10; ++i)
16086       ;
16087   }
16088 #pragma omp target
16089 #pragma omp teams distribute
16090   for (int i = 0; i < 10; ++i) {
16091 #pragma omp for simd // OK
16092     for (int i = 0; i < 10; ++i)
16093       ;
16094   }
16095 #pragma omp target
16096 #pragma omp teams distribute
16097   for (int i = 0; i < 10; ++i) {
16098 #pragma omp parallel // OK
16099     for (int i = 0; i < 10; ++i)
16100       ;
16101   }
16102 #pragma omp target
16103 #pragma omp teams distribute
16104   for (int i = 0; i < 10; ++i) {
16105 #pragma omp sections // OK
16106     {
16107       bar();
16108     }
16109   }
16110 #pragma omp target
16111 #pragma omp teams distribute
16112   for (int i = 0; i < 10; ++i) {
16113 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
16114     {
16115       bar();
16116     }
16117   }
16118 #pragma omp target
16119 #pragma omp teams distribute
16120   for (int i = 0; i < 10; ++i) {
16121 #pragma omp single // OK
16122     {
16123       bar();
16124     }
16125   }
16126 #pragma omp target
16127 #pragma omp teams distribute
16128   for (int i = 0; i < 10; ++i) {
16129 #pragma omp master // OK
16130     {
16131       bar();
16132     }
16133   }
16134 #pragma omp target
16135 #pragma omp teams distribute
16136   for (int i = 0; i < 10; ++i) {
16137 #pragma omp critical // OK
16138     {
16139       bar();
16140     }
16141   }
16142 #pragma omp target
16143 #pragma omp teams distribute
16144   for (int i = 0; i < 10; ++i) {
16145 #pragma omp parallel // OK
16146     {
16147 #pragma omp single
16148       {
16149         bar();
16150       }
16151     }
16152   }
16153 #pragma omp target
16154 #pragma omp teams distribute
16155   for (int i = 0; i < 10; ++i) {
16156 #pragma omp parallel for // OK
16157     for (int i = 0; i < 10; ++i)
16158       ;
16159   }
16160 #pragma omp target
16161 #pragma omp teams distribute
16162   for (int i = 0; i < 10; ++i) {
16163 #pragma omp parallel for simd // OK
16164     for (int i = 0; i < 10; ++i)
16165       ;
16166   }
16167 #pragma omp target
16168 #pragma omp teams distribute
16169   for (int i = 0; i < 10; ++i) {
16170 #pragma omp parallel sections // OK
16171     {
16172       bar();
16173     }
16174   }
16175 #pragma omp target
16176 #pragma omp teams distribute
16177   for (int i = 0; i < 10; ++i) {
16178 #pragma omp task // OK
16179     {
16180       bar();
16181     }
16182   }
16183 #pragma omp target
16184 #pragma omp teams distribute
16185   for (int i = 0; i < 10; ++i) {
16186 #pragma omp taskyield // OK
16187     bar();
16188   }
16189 #pragma omp target
16190 #pragma omp teams distribute
16191   for (int i = 0; i < 10; ++i) {
16192 #pragma omp barrier // OK
16193     bar();
16194   }
16195 #pragma omp target
16196 #pragma omp teams distribute
16197   for (int i = 0; i < 10; ++i) {
16198 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
16199     bar();
16200   }
16201 #pragma omp target
16202 #pragma omp teams distribute
16203   for (int i = 0; i < 10; ++i) {
16204 #pragma omp taskwait // OK
16205     bar();
16206   }
16207 #pragma omp target
16208 #pragma omp teams distribute
16209   for (int i = 0; i < 10; ++i) {
16210 #pragma omp flush // OK
16211     bar();
16212   }
16213 #pragma omp target
16214 #pragma omp teams distribute
16215   for (int i = 0; i < 10; ++i) {
16216 #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?}}
16217     bar();
16218   }
16219 #pragma omp target
16220 #pragma omp teams distribute
16221   for (int i = 0; i < 10; ++i) {
16222 #pragma omp atomic // OK
16223     ++a;
16224   }
16225 #pragma omp target
16226 #pragma omp teams distribute
16227   for (int i = 0; i < 10; ++i) {
16228 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
16229     ++a;
16230   }
16231 #pragma omp target
16232 #pragma omp teams distribute
16233   for (int i = 0; i < 10; ++i) {
16234 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
16235     ++a;
16236   }
16237 #pragma omp target
16238 #pragma omp teams distribute
16239   for (int i = 0; i < 10; ++i) {
16240 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
16241     for (int i = 0; i < 10; ++i)
16242       ;
16243   }
16244 #pragma omp target
16245 #pragma omp teams distribute
16246   for (int i = 0; i < 10; ++i) {
16247 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
16248     ++a;
16249   }
16250 #pragma omp target
16251 #pragma omp teams distribute
16252   for (int i = 0; i < 10; ++i) {
16253 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
16254     ++a;
16255   }
16256 #pragma omp target
16257 #pragma omp teams distribute
16258   for (int i = 0; i < 10; ++i) {
16259 #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?}}
16260     ++a;
16261   }
16262 #pragma omp target
16263 #pragma omp teams distribute
16264   for (int i = 0; i < 10; ++i) {
16265 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
16266     ++a;
16267   }
16268 #pragma omp target
16269 #pragma omp teams distribute
16270   for (int i = 0; i < 10; ++i) {
16271 #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?}}
16272     for (int i = 0; i < 10; ++i)
16273       ++a;
16274   }
16275 #pragma omp target
16276 #pragma omp teams distribute
16277   for (int i = 0; i < 10; ++i) {
16278 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
16279     for (int i = 0; i < 10; ++i)
16280       ++a;
16281   }
16282 #pragma omp target
16283 #pragma omp teams distribute
16284   for (int i = 0; i < 10; ++i) {
16285 #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?}}
16286     for (int i = 0; i < 10; ++i)
16287       ++a;
16288   }
16289 #pragma omp target
16290 #pragma omp teams distribute
16291   for (int i = 0; i < 10; ++i) {
16292 #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?}}
16293     for (int i = 0; i < 10; ++i)
16294       ++a;
16295   }
16296 #pragma omp target
16297 #pragma omp teams distribute
16298   for (int i = 0; i < 10; ++i) {
16299 #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?}}
16300     for (int i = 0; i < 10; ++i)
16301       ++a;
16302   }
16303 #pragma omp target
16304 #pragma omp teams distribute
16305   for (int i = 0; i < 10; ++i) {
16306 #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?}}
16307     for (int i = 0; i < 10; ++i)
16308       ++a;
16309   }
16310 #pragma omp target
16311 #pragma omp teams distribute
16312   for (int i = 0; i < 10; ++i) {
16313 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
16314     ++a;
16315   }
16316 #pragma omp target
16317 #pragma omp teams distribute
16318   for (int i = 0; i < 10; ++i) {
16319 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
16320     for (int i = 0; i < 10; ++i)
16321       ++a;
16322   }
16323 #pragma omp target
16324 #pragma omp teams distribute
16325   for (int i = 0; i < 10; ++i) {
16326 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
16327     for (int i = 0; i < 10; ++i)
16328       ++a;
16329   }
16330 #pragma omp target
16331 #pragma omp teams distribute
16332   for (int i = 0; i < 10; ++i) {
16333 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16334     for (int i = 0; i < 10; ++i)
16335       ++a;
16336   }
16337 #pragma omp target
16338 #pragma omp teams distribute
16339   for (int i = 0; i < 10; ++i) {
16340 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16341     for (int i = 0; i < 10; ++i)
16342       ++a;
16343   }
16344 
16345 // TEAMS DISTRIBUTE SIMD DIRECTIVE
16346 #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?}}
16347   for (int i = 0; i < 10; ++i)
16348     ;
16349 #pragma omp target
16350 #pragma omp teams distribute simd
16351   for (int i = 0; i < 10; ++i) {
16352 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16353     for (int i = 0; i < 10; ++i)
16354       ;
16355   }
16356 #pragma omp target
16357 #pragma omp teams distribute simd
16358   for (int i = 0; i < 10; ++i) {
16359 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16360     for (int i = 0; i < 10; ++i)
16361       ;
16362   }
16363 #pragma omp target
16364 #pragma omp teams distribute simd
16365   for (int i = 0; i < 10; ++i) {
16366 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16367     for (int i = 0; i < 10; ++i)
16368       ;
16369   }
16370 #pragma omp target
16371 #pragma omp teams distribute simd
16372   for (int i = 0; i < 10; ++i) {
16373 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16374     for (int i = 0; i < 10; ++i)
16375       ;
16376   }
16377 #pragma omp target
16378 #pragma omp teams distribute simd
16379   for (int i = 0; i < 10; ++i) {
16380 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16381     for (int i = 0; i < 10; ++i)
16382       ;
16383   }
16384 #pragma omp target
16385 #pragma omp teams distribute simd
16386   for (int i = 0; i < 10; ++i) {
16387 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16388     for (int i = 0; i < 10; ++i)
16389       ;
16390   }
16391 #pragma omp target
16392 #pragma omp teams distribute simd
16393   for (int i = 0; i < 10; ++i) {
16394 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16395     {
16396       bar();
16397     }
16398   }
16399 #pragma omp target
16400 #pragma omp teams distribute simd
16401   for (int i = 0; i < 10; ++i) {
16402 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16403     {
16404       bar();
16405     }
16406   }
16407 #pragma omp target
16408 #pragma omp teams distribute simd
16409   for (int i = 0; i < 10; ++i) {
16410 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16411     {
16412       bar();
16413     }
16414   }
16415 #pragma omp target
16416 #pragma omp teams distribute simd
16417   for (int i = 0; i < 10; ++i) {
16418 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16419     {
16420       bar();
16421     }
16422   }
16423 #pragma omp target
16424 #pragma omp teams distribute simd
16425   for (int i = 0; i < 10; ++i) {
16426 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16427     {
16428       bar();
16429     }
16430   }
16431 #pragma omp target
16432 #pragma omp teams distribute simd
16433   for (int i = 0; i < 10; ++i) {
16434 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16435     {
16436 #pragma omp single
16437       {
16438         bar();
16439       }
16440     }
16441   }
16442 #pragma omp target
16443 #pragma omp teams distribute simd
16444   for (int i = 0; i < 10; ++i) {
16445 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16446     for (int i = 0; i < 10; ++i)
16447       ;
16448   }
16449 #pragma omp target
16450 #pragma omp teams distribute simd
16451   for (int i = 0; i < 10; ++i) {
16452 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16453     for (int i = 0; i < 10; ++i)
16454       ;
16455   }
16456 #pragma omp target
16457 #pragma omp teams distribute simd
16458   for (int i = 0; i < 10; ++i) {
16459 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16460     {
16461       bar();
16462     }
16463   }
16464 #pragma omp target
16465 #pragma omp teams distribute simd
16466   for (int i = 0; i < 10; ++i) {
16467 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16468     {
16469       bar();
16470     }
16471   }
16472 #pragma omp target
16473 #pragma omp teams distribute simd
16474   for (int i = 0; i < 10; ++i) {
16475 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16476     bar();
16477   }
16478 #pragma omp target
16479 #pragma omp teams distribute simd
16480   for (int i = 0; i < 10; ++i) {
16481 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16482     bar();
16483   }
16484 #pragma omp target
16485 #pragma omp teams distribute simd
16486   for (int i = 0; i < 10; ++i) {
16487 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
16488     bar();
16489   }
16490 #pragma omp target
16491 #pragma omp teams distribute simd
16492   for (int i = 0; i < 10; ++i) {
16493 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16494     bar();
16495   }
16496 #pragma omp target
16497 #pragma omp teams distribute simd
16498   for (int i = 0; i < 10; ++i) {
16499 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16500     bar();
16501   }
16502 #pragma omp target
16503 #pragma omp teams distribute simd
16504   for (int i = 0; i < 10; ++i) {
16505 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16506     bar();
16507   }
16508 #pragma omp target
16509 #pragma omp teams distribute simd
16510   for (int i = 0; i < 10; ++i) {
16511 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16512     ++a;
16513   }
16514 #pragma omp target
16515 #pragma omp teams distribute simd
16516   for (int i = 0; i < 10; ++i) {
16517 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16518     ++a;
16519   }
16520 #pragma omp target
16521 #pragma omp teams distribute simd
16522   for (int i = 0; i < 10; ++i) {
16523 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16524     ++a;
16525   }
16526 #pragma omp target
16527 #pragma omp teams distribute simd
16528   for (int i = 0; i < 10; ++i) {
16529 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16530     for (int i = 0; i < 10; ++i)
16531       ;
16532   }
16533 #pragma omp target
16534 #pragma omp teams distribute simd
16535   for (int i = 0; i < 10; ++i) {
16536 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16537     ++a;
16538   }
16539 #pragma omp target
16540 #pragma omp teams distribute simd
16541   for (int i = 0; i < 10; ++i) {
16542 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16543     ++a;
16544   }
16545 #pragma omp target
16546 #pragma omp teams distribute simd
16547   for (int i = 0; i < 10; ++i) {
16548 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16549     ++a;
16550   }
16551 #pragma omp target
16552 #pragma omp teams distribute simd
16553   for (int i = 0; i < 10; ++i) {
16554 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16555     ++a;
16556   }
16557 #pragma omp target
16558 #pragma omp teams distribute simd
16559   for (int i = 0; i < 10; ++i) {
16560 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16561     for (int i = 0; i < 10; ++i)
16562       ++a;
16563   }
16564 #pragma omp target
16565 #pragma omp teams distribute simd
16566   for (int i = 0; i < 10; ++i) {
16567 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16568     for (int i = 0; i < 10; ++i)
16569       ++a;
16570   }
16571 #pragma omp target
16572 #pragma omp teams distribute simd
16573   for (int i = 0; i < 10; ++i) {
16574 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16575     for (int i = 0; i < 10; ++i)
16576       ++a;
16577   }
16578 #pragma omp target
16579 #pragma omp teams distribute simd
16580   for (int i = 0; i < 10; ++i) {
16581 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16582     for (int i = 0; i < 10; ++i)
16583       ++a;
16584   }
16585 #pragma omp target
16586 #pragma omp teams distribute simd
16587   for (int i = 0; i < 10; ++i) {
16588 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16589     for (int i = 0; i < 10; ++i)
16590       ++a;
16591   }
16592 #pragma omp target
16593 #pragma omp teams distribute simd
16594   for (int i = 0; i < 10; ++i) {
16595 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16596     for (int i = 0; i < 10; ++i)
16597       ++a;
16598   }
16599 #pragma omp target
16600 #pragma omp teams distribute simd
16601   for (int i = 0; i < 10; ++i) {
16602 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16603     ++a;
16604   }
16605 #pragma omp target
16606 #pragma omp teams distribute simd
16607   for (int i = 0; i < 10; ++i) {
16608 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16609     for (int i = 0; i < 10; ++i)
16610       ++a;
16611   }
16612 #pragma omp target
16613 #pragma omp teams distribute simd
16614   for (int i = 0; i < 10; ++i) {
16615 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16616     for (int i = 0; i < 10; ++i)
16617       ++a;
16618   }
16619 #pragma omp target
16620 #pragma omp teams distribute simd
16621   for (int i = 0; i < 10; ++i) {
16622 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16623     for (int i = 0; i < 10; ++i)
16624       ++a;
16625   }
16626 #pragma omp target
16627 #pragma omp teams distribute simd
16628   for (int i = 0; i < 10; ++i) {
16629 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16630     for (int i = 0; i < 10; ++i)
16631       ++a;
16632   }
16633 
16634 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
16635 #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?}}
16636   for (int i = 0; i < 10; ++i)
16637     ;
16638 #pragma omp target
16639 #pragma omp teams distribute parallel for simd
16640   for (int i = 0; i < 10; ++i) {
16641 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16642     for (int i = 0; i < 10; ++i)
16643       ;
16644   }
16645 #pragma omp target
16646 #pragma omp teams distribute parallel for simd
16647   for (int i = 0; i < 10; ++i) {
16648 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16649     for (int i = 0; i < 10; ++i)
16650       ;
16651   }
16652 #pragma omp target
16653 #pragma omp teams distribute parallel for simd
16654   for (int i = 0; i < 10; ++i) {
16655 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16656     for (int i = 0; i < 10; ++i)
16657       ;
16658   }
16659 #pragma omp target
16660 #pragma omp teams distribute parallel for simd
16661   for (int i = 0; i < 10; ++i) {
16662 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16663     for (int i = 0; i < 10; ++i)
16664       ;
16665   }
16666 #pragma omp target
16667 #pragma omp teams distribute parallel for simd
16668   for (int i = 0; i < 10; ++i) {
16669 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16670     for (int i = 0; i < 10; ++i)
16671       ;
16672   }
16673 #pragma omp target
16674 #pragma omp teams distribute parallel for simd
16675   for (int i = 0; i < 10; ++i) {
16676 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16677     for (int i = 0; i < 10; ++i)
16678       ;
16679   }
16680 #pragma omp target
16681 #pragma omp teams distribute parallel for simd
16682   for (int i = 0; i < 10; ++i) {
16683 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16684     {
16685       bar();
16686     }
16687   }
16688 #pragma omp target
16689 #pragma omp teams distribute parallel for simd
16690   for (int i = 0; i < 10; ++i) {
16691 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16692     {
16693       bar();
16694     }
16695   }
16696 #pragma omp target
16697 #pragma omp teams distribute parallel for simd
16698   for (int i = 0; i < 10; ++i) {
16699 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16700     {
16701       bar();
16702     }
16703   }
16704 #pragma omp target
16705 #pragma omp teams distribute parallel for simd
16706   for (int i = 0; i < 10; ++i) {
16707 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16708     {
16709       bar();
16710     }
16711   }
16712 #pragma omp target
16713 #pragma omp teams distribute parallel for simd
16714   for (int i = 0; i < 10; ++i) {
16715 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16716     {
16717       bar();
16718     }
16719   }
16720 #pragma omp target
16721 #pragma omp teams distribute parallel for simd
16722   for (int i = 0; i < 10; ++i) {
16723 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16724     {
16725 #pragma omp single
16726       {
16727         bar();
16728       }
16729     }
16730   }
16731 #pragma omp target
16732 #pragma omp teams distribute parallel for simd
16733   for (int i = 0; i < 10; ++i) {
16734 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16735     for (int i = 0; i < 10; ++i)
16736       ;
16737   }
16738 #pragma omp target
16739 #pragma omp teams distribute parallel for simd
16740   for (int i = 0; i < 10; ++i) {
16741 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16742     for (int i = 0; i < 10; ++i)
16743       ;
16744   }
16745 #pragma omp target
16746 #pragma omp teams distribute parallel for simd
16747   for (int i = 0; i < 10; ++i) {
16748 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16749     {
16750       bar();
16751     }
16752   }
16753 #pragma omp target
16754 #pragma omp teams distribute parallel for simd
16755   for (int i = 0; i < 10; ++i) {
16756 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16757     {
16758       bar();
16759     }
16760   }
16761 #pragma omp target
16762 #pragma omp teams distribute parallel for simd
16763   for (int i = 0; i < 10; ++i) {
16764 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16765     bar();
16766   }
16767 #pragma omp target
16768 #pragma omp teams distribute parallel for simd
16769   for (int i = 0; i < 10; ++i) {
16770 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16771     bar();
16772   }
16773 #pragma omp target
16774 #pragma omp teams distribute parallel for simd
16775   for (int i = 0; i < 10; ++i) {
16776 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
16777     bar();
16778   }
16779 #pragma omp target
16780 #pragma omp teams distribute parallel for simd
16781   for (int i = 0; i < 10; ++i) {
16782 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16783     bar();
16784   }
16785 #pragma omp target
16786 #pragma omp teams distribute parallel for simd
16787   for (int i = 0; i < 10; ++i) {
16788 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16789     bar();
16790   }
16791 #pragma omp target
16792 #pragma omp teams distribute parallel for simd
16793   for (int i = 0; i < 10; ++i) {
16794 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16795     bar();
16796   }
16797 #pragma omp target
16798 #pragma omp teams distribute parallel for simd
16799   for (int i = 0; i < 10; ++i) {
16800 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16801     ++a;
16802   }
16803 #pragma omp target
16804 #pragma omp teams distribute parallel for simd
16805   for (int i = 0; i < 10; ++i) {
16806 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16807     ++a;
16808   }
16809 #pragma omp target
16810 #pragma omp teams distribute parallel for simd
16811   for (int i = 0; i < 10; ++i) {
16812 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16813     ++a;
16814   }
16815 #pragma omp target
16816 #pragma omp teams distribute parallel for simd
16817   for (int i = 0; i < 10; ++i) {
16818 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16819     for (int i = 0; i < 10; ++i)
16820       ;
16821   }
16822 #pragma omp target
16823 #pragma omp teams distribute parallel for simd
16824   for (int i = 0; i < 10; ++i) {
16825 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16826     ++a;
16827   }
16828 #pragma omp target
16829 #pragma omp teams distribute parallel for simd
16830   for (int i = 0; i < 10; ++i) {
16831 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16832     ++a;
16833   }
16834 #pragma omp target
16835 #pragma omp teams distribute parallel for simd
16836   for (int i = 0; i < 10; ++i) {
16837 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16838     ++a;
16839   }
16840 #pragma omp target
16841 #pragma omp teams distribute parallel for simd
16842   for (int i = 0; i < 10; ++i) {
16843 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16844     ++a;
16845   }
16846 #pragma omp target
16847 #pragma omp teams distribute parallel for simd
16848   for (int i = 0; i < 10; ++i) {
16849 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16850     for (int i = 0; i < 10; ++i)
16851       ++a;
16852   }
16853 #pragma omp target
16854 #pragma omp teams distribute parallel for simd
16855   for (int i = 0; i < 10; ++i) {
16856 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16857     for (int i = 0; i < 10; ++i)
16858       ++a;
16859   }
16860 #pragma omp target
16861 #pragma omp teams distribute parallel for simd
16862   for (int i = 0; i < 10; ++i) {
16863 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16864     for (int i = 0; i < 10; ++i)
16865       ++a;
16866   }
16867 #pragma omp target
16868 #pragma omp teams distribute parallel for simd
16869   for (int i = 0; i < 10; ++i) {
16870 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16871     for (int i = 0; i < 10; ++i)
16872       ++a;
16873   }
16874 #pragma omp target
16875 #pragma omp teams distribute parallel for simd
16876   for (int i = 0; i < 10; ++i) {
16877 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16878     for (int i = 0; i < 10; ++i)
16879       ++a;
16880   }
16881 #pragma omp target
16882 #pragma omp teams distribute parallel for simd
16883   for (int i = 0; i < 10; ++i) {
16884 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16885     for (int i = 0; i < 10; ++i)
16886       ++a;
16887   }
16888 #pragma omp target
16889 #pragma omp teams distribute parallel for simd
16890   for (int i = 0; i < 10; ++i) {
16891 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16892     ++a;
16893   }
16894 #pragma omp target
16895 #pragma omp teams distribute parallel for simd
16896   for (int i = 0; i < 10; ++i) {
16897 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16898     for (int i = 0; i < 10; ++i)
16899       ++a;
16900   }
16901 #pragma omp target
16902 #pragma omp teams distribute parallel for simd
16903   for (int i = 0; i < 10; ++i) {
16904 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16905     for (int i = 0; i < 10; ++i)
16906       ++a;
16907   }
16908 #pragma omp target
16909 #pragma omp teams distribute parallel for simd
16910   for (int i = 0; i < 10; ++i) {
16911 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16912     for (int i = 0; i < 10; ++i)
16913       ++a;
16914   }
16915 #pragma omp target
16916 #pragma omp teams distribute parallel for simd
16917   for (int i = 0; i < 10; ++i) {
16918 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16919     for (int i = 0; i < 10; ++i)
16920       ++a;
16921   }
16922 
16923 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16924 #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?}}
16925   for (int i = 0; i < 10; ++i)
16926     ;
16927 #pragma omp target
16928 #pragma omp teams distribute parallel for
16929   for (int i = 0; i < 10; ++i) {
16930 #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?}}
16931     for (int i = 0; i < 10; ++i)
16932       ;
16933   }
16934 #pragma omp target
16935 #pragma omp teams distribute parallel for
16936   for (int i = 0; i < 10; ++i) {
16937 #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?}}
16938     for (int i = 0; i < 10; ++i)
16939       ;
16940   }
16941 #pragma omp target
16942 #pragma omp teams distribute parallel for
16943   for (int i = 0; i < 10; ++i) {
16944 #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?}}
16945     for (int i = 0; i < 10; ++i)
16946       ;
16947   }
16948 #pragma omp target
16949 #pragma omp teams distribute parallel for
16950   for (int i = 0; i < 10; ++i) {
16951 #pragma omp simd // OK
16952     for (int i = 0; i < 10; ++i)
16953       ;
16954   }
16955 #pragma omp target
16956 #pragma omp teams distribute parallel for
16957   for (int i = 0; i < 10; ++i) {
16958 #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?}}
16959     for (int i = 0; i < 10; ++i)
16960       ;
16961   }
16962 #pragma omp target
16963 #pragma omp teams distribute parallel for
16964   for (int i = 0; i < 10; ++i) {
16965 #pragma omp parallel // OK
16966     for (int i = 0; i < 10; ++i)
16967       ;
16968   }
16969 #pragma omp target
16970 #pragma omp teams distribute parallel for
16971   for (int i = 0; i < 10; ++i) {
16972 #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?}}
16973     {
16974       bar();
16975     }
16976   }
16977 #pragma omp target
16978 #pragma omp teams distribute parallel for
16979   for (int i = 0; i < 10; ++i) {
16980 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
16981     {
16982       bar();
16983     }
16984   }
16985 #pragma omp target
16986 #pragma omp teams distribute parallel for
16987   for (int i = 0; i < 10; ++i) {
16988 #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?}}
16989     {
16990       bar();
16991     }
16992   }
16993 #pragma omp target
16994 #pragma omp teams distribute parallel for
16995   for (int i = 0; i < 10; ++i) {
16996 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16997     {
16998       bar();
16999     }
17000   }
17001 #pragma omp target
17002 #pragma omp teams distribute parallel for
17003   for (int i = 0; i < 10; ++i) {
17004 #pragma omp critical // OK
17005     {
17006       bar();
17007     }
17008   }
17009 #pragma omp target
17010 #pragma omp teams distribute parallel for
17011   for (int i = 0; i < 10; ++i) {
17012 #pragma omp parallel // OK
17013     {
17014 #pragma omp single
17015       {
17016         bar();
17017       }
17018     }
17019   }
17020 #pragma omp target
17021 #pragma omp teams distribute parallel for
17022   for (int i = 0; i < 10; ++i) {
17023 #pragma omp parallel for // OK
17024     for (int i = 0; i < 10; ++i)
17025       ;
17026   }
17027 #pragma omp target
17028 #pragma omp teams distribute parallel for
17029   for (int i = 0; i < 10; ++i) {
17030 #pragma omp parallel for simd // OK
17031     for (int i = 0; i < 10; ++i)
17032       ;
17033   }
17034 #pragma omp target
17035 #pragma omp teams distribute parallel for
17036   for (int i = 0; i < 10; ++i) {
17037 #pragma omp parallel sections // OK
17038     {
17039       bar();
17040     }
17041   }
17042 #pragma omp target
17043 #pragma omp teams distribute parallel for
17044   for (int i = 0; i < 10; ++i) {
17045 #pragma omp task // OK
17046     {
17047       bar();
17048     }
17049   }
17050 #pragma omp target
17051 #pragma omp teams distribute parallel for
17052   for (int i = 0; i < 10; ++i) {
17053 #pragma omp taskyield // OK
17054     bar();
17055   }
17056 #pragma omp target
17057 #pragma omp teams distribute parallel for
17058   for (int i = 0; i < 10; ++i) {
17059 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
17060     bar();
17061   }
17062 #pragma omp target
17063 #pragma omp teams distribute parallel for
17064   for (int i = 0; i < 10; ++i) {
17065 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
17066     bar();
17067   }
17068 #pragma omp target
17069 #pragma omp teams distribute parallel for
17070   for (int i = 0; i < 10; ++i) {
17071 #pragma omp taskwait // OK
17072     bar();
17073   }
17074 #pragma omp target
17075 #pragma omp teams distribute parallel for
17076   for (int i = 0; i < 10; ++i) {
17077 #pragma omp flush // OK
17078     bar();
17079   }
17080 #pragma omp target
17081 #pragma omp teams distribute parallel for
17082   for (int i = 0; i < 10; ++i) {
17083 #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?}}
17084     bar();
17085   }
17086 #pragma omp target
17087 #pragma omp teams distribute parallel for
17088   for (int i = 0; i < 10; ++i) {
17089 #pragma omp atomic // OK
17090     ++a;
17091   }
17092 #pragma omp target
17093 #pragma omp teams distribute parallel for
17094   for (int i = 0; i < 10; ++i) {
17095 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
17096     ++a;
17097   }
17098 #pragma omp target
17099 #pragma omp teams distribute parallel for
17100   for (int i = 0; i < 10; ++i) {
17101 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
17102     ++a;
17103   }
17104 #pragma omp target
17105 #pragma omp teams distribute parallel for
17106   for (int i = 0; i < 10; ++i) {
17107 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
17108     for (int i = 0; i < 10; ++i)
17109       ;
17110   }
17111 #pragma omp target
17112 #pragma omp teams distribute parallel for
17113   for (int i = 0; i < 10; ++i) {
17114 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
17115     ++a;
17116   }
17117 #pragma omp target
17118 #pragma omp teams distribute parallel for
17119   for (int i = 0; i < 10; ++i) {
17120 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
17121     ++a;
17122   }
17123 #pragma omp target
17124 #pragma omp teams distribute parallel for
17125   for (int i = 0; i < 10; ++i) {
17126 #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?}}
17127     ++a;
17128   }
17129 #pragma omp target
17130 #pragma omp teams distribute parallel for
17131   for (int i = 0; i < 10; ++i) {
17132 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
17133     ++a;
17134   }
17135 #pragma omp target
17136 #pragma omp teams distribute parallel for
17137   for (int i = 0; i < 10; ++i) {
17138 #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?}}
17139     for (int i = 0; i < 10; ++i)
17140       ++a;
17141   }
17142 #pragma omp target
17143 #pragma omp teams distribute parallel for
17144   for (int i = 0; i < 10; ++i) {
17145 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
17146     for (int i = 0; i < 10; ++i)
17147       ++a;
17148   }
17149 #pragma omp target
17150 #pragma omp teams distribute parallel for
17151   for (int i = 0; i < 10; ++i) {
17152 #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?}}
17153     for (int i = 0; i < 10; ++i)
17154       ++a;
17155   }
17156 #pragma omp target
17157 #pragma omp teams distribute parallel for
17158   for (int i = 0; i < 10; ++i) {
17159 #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?}}
17160     for (int i = 0; i < 10; ++i)
17161       ++a;
17162   }
17163 #pragma omp target
17164 #pragma omp teams distribute parallel for
17165   for (int i = 0; i < 10; ++i) {
17166 #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?}}
17167     for (int i = 0; i < 10; ++i)
17168       ++a;
17169   }
17170 #pragma omp target
17171 #pragma omp teams distribute parallel for
17172   for (int i = 0; i < 10; ++i) {
17173 #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?}}
17174     for (int i = 0; i < 10; ++i)
17175       ++a;
17176   }
17177 #pragma omp target
17178 #pragma omp teams distribute parallel for
17179   for (int i = 0; i < 10; ++i) {
17180 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
17181     ++a;
17182   }
17183 #pragma omp target
17184 #pragma omp teams distribute parallel for
17185   for (int i = 0; i < 10; ++i) {
17186 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
17187     for (int i = 0; i < 10; ++i)
17188       ++a;
17189   }
17190 #pragma omp target
17191 #pragma omp teams distribute parallel for
17192   for (int i = 0; i < 10; ++i) {
17193 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
17194     for (int i = 0; i < 10; ++i)
17195       ++a;
17196   }
17197 #pragma omp target
17198 #pragma omp teams distribute parallel for
17199   for (int i = 0; i < 10; ++i) {
17200 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
17201     for (int i = 0; i < 10; ++i)
17202       ++a;
17203   }
17204 #pragma omp target
17205 #pragma omp teams distribute parallel for
17206   for (int i = 0; i < 10; ++i) {
17207 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
17208     for (int i = 0; i < 10; ++i)
17209       ++a;
17210   }
17211 
17212 // TARGET TEAMS DIRECTIVE
17213 #pragma omp target teams
17214 #pragma omp parallel
17215   bar();
17216 #pragma omp target teams
17217 #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?}}
17218   for (int i = 0; i < 10; ++i)
17219     ;
17220 #pragma omp target teams
17221 #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?}}
17222   for (int i = 0; i < 10; ++i)
17223     ;
17224 #pragma omp target teams
17225 #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?}}
17226   for (int i = 0; i < 10; ++i)
17227     ;
17228 #pragma omp target teams
17229 #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?}}
17230   {
17231     bar();
17232   }
17233 #pragma omp target teams
17234 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
17235   {
17236     bar();
17237   }
17238 #pragma omp target teams
17239 #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?}}
17240   bar();
17241 
17242 #pragma omp target teams
17243 #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?}}
17244   {
17245     bar();
17246   }
17247 #pragma omp target teams
17248 #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?}}
17249   {
17250     bar();
17251   }
17252 #pragma omp target teams
17253 #pragma omp parallel for
17254   for (int i = 0; i < 10; ++i)
17255     ;
17256 #pragma omp target teams
17257 #pragma omp parallel for simd
17258   for (int i = 0; i < 10; ++i)
17259     ;
17260 #pragma omp target teams
17261 #pragma omp parallel sections
17262   {
17263     bar();
17264   }
17265 #pragma omp target teams
17266 #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?}}
17267   {
17268     bar();
17269   }
17270 #pragma omp target teams
17271   {
17272 #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?}}
17273     bar();
17274   }
17275 #pragma omp target teams
17276   {
17277 #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?}}
17278     bar();
17279   }
17280 #pragma omp target teams
17281   {
17282 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
17283     bar();
17284   }
17285 #pragma omp target teams
17286   {
17287 #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?}}
17288     bar();
17289   }
17290 #pragma omp target teams
17291   {
17292 #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?}}
17293     bar();
17294   }
17295 #pragma omp target teams
17296   {
17297 #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?}}
17298     bar();
17299   }
17300 #pragma omp target teams
17301   {
17302 #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?}}
17303     ++a;
17304   }
17305 #pragma omp target teams
17306   {
17307 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
17308     ++a;
17309   }
17310 #pragma omp target teams
17311   {
17312 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
17313     ++a;
17314   }
17315 #pragma omp target teams
17316 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
17317   for (int i = 0; i < 10; ++i)
17318     ;
17319 #pragma omp target teams
17320   {
17321 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
17322   }
17323 #pragma omp target teams
17324   {
17325 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
17326   }
17327 #pragma omp target teams
17328   {
17329 #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?}}
17330     ++a;
17331   }
17332 #pragma omp target teams
17333   {
17334 #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?}}
17335   for (int i = 0; i < 10; ++i)
17336     ++a;
17337   }
17338 #pragma omp target teams
17339 #pragma omp distribute
17340   for (int i = 0; i < 10; ++i)
17341     ;
17342 #pragma omp target teams
17343   {
17344 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
17345     ++a;
17346   }
17347 #pragma omp target teams
17348 #pragma omp distribute parallel for
17349   for (int i = 0; i < 10; ++i)
17350     ;
17351 #pragma omp target teams
17352   {
17353 #pragma omp distribute parallel for
17354   for (int i = 0; i < 10; ++i)
17355     ;
17356 #pragma omp distribute parallel for
17357   for (int j = 0; j < 10; ++j)
17358     ;
17359   }
17360 #pragma omp target teams
17361   {
17362 #pragma omp distribute parallel for simd
17363   for (int i = 0; i < 10; ++i)
17364     ;
17365 #pragma omp distribute parallel for simd
17366   for (int j = 0; j < 10; ++j)
17367     ;
17368   }
17369 #pragma omp target teams
17370   {
17371 #pragma omp distribute simd
17372   for (int i = 0; i < 10; ++i)
17373     ;
17374 #pragma omp distribute simd
17375   for (int j = 0; j < 10; ++j)
17376     ;
17377   }
17378 #pragma omp target teams
17379   {
17380 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
17381   for (int i = 0; i < 10; ++i)
17382     ;
17383   }
17384 #pragma omp target teams
17385   {
17386 #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?}}
17387   for (int i = 0; i < 10; ++i)
17388     ;
17389   }
17390 #pragma omp target teams
17391   {
17392 #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?}}
17393   for (int i = 0; i < 10; ++i)
17394     ;
17395   }
17396 #pragma omp target teams
17397   {
17398 #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?}}
17399   for (int i = 0; i < 10; ++i)
17400     ;
17401   }
17402 #pragma omp target teams
17403   {
17404 #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?}}
17405   for (int i = 0; i < 10; ++i)
17406     ;
17407   }
17408 #pragma omp target teams
17409   {
17410 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
17411     a++;
17412   }
17413 #pragma omp target teams
17414   {
17415 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
17416   for (int i = 0; i < 10; ++i)
17417     ;
17418   }
17419 #pragma omp target teams
17420   {
17421 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
17422   for (int i = 0; i < 10; ++i)
17423     ;
17424   }
17425 #pragma omp target teams
17426   {
17427 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
17428   for (int i = 0; i < 10; ++i)
17429     ;
17430   }
17431 #pragma omp target teams
17432   {
17433 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
17434   for (int i = 0; i < 10; ++i)
17435     ;
17436   }
17437 
17438 // TARGET TEAMS DISTRIBUTE DIRECTIVE
17439 #pragma omp target teams distribute // OK
17440   for (int i = 0; i < 10; ++i)
17441     ;
17442 #pragma omp target teams distribute
17443   for (int i = 0; i < 10; ++i) {
17444 #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?}}
17445     for (int i = 0; i < 10; ++i)
17446       ;
17447   }
17448 #pragma omp target teams distribute
17449   for (int i = 0; i < 10; ++i) {
17450 #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?}}
17451     for (int i = 0; i < 10; ++i)
17452       ;
17453   }
17454 #pragma omp target teams distribute
17455   for (int i = 0; i < 10; ++i) {
17456 #pragma omp for // OK
17457     for (int i = 0; i < 10; ++i)
17458       ;
17459   }
17460 #pragma omp target teams distribute
17461   for (int i = 0; i < 10; ++i) {
17462 #pragma omp simd // OK
17463     for (int i = 0; i < 10; ++i)
17464       ;
17465   }
17466 #pragma omp target teams distribute
17467   for (int i = 0; i < 10; ++i) {
17468 #pragma omp for simd // OK
17469     for (int i = 0; i < 10; ++i)
17470       ;
17471   }
17472 #pragma omp target teams distribute
17473   for (int i = 0; i < 10; ++i) {
17474 #pragma omp parallel // OK
17475     for (int i = 0; i < 10; ++i)
17476       ;
17477   }
17478 #pragma omp target teams distribute
17479   for (int i = 0; i < 10; ++i) {
17480 #pragma omp sections // OK
17481     {
17482       bar();
17483     }
17484   }
17485 #pragma omp target teams distribute
17486   for (int i = 0; i < 10; ++i) {
17487 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
17488     {
17489       bar();
17490     }
17491   }
17492 #pragma omp target teams distribute
17493   for (int i = 0; i < 10; ++i) {
17494 #pragma omp single // OK
17495     {
17496       bar();
17497     }
17498   }
17499 #pragma omp target teams distribute
17500   for (int i = 0; i < 10; ++i) {
17501 #pragma omp master // OK
17502     {
17503       bar();
17504     }
17505   }
17506 #pragma omp target teams distribute
17507   for (int i = 0; i < 10; ++i) {
17508 #pragma omp critical // OK
17509     {
17510       bar();
17511     }
17512   }
17513 #pragma omp target teams distribute
17514   for (int i = 0; i < 10; ++i) {
17515 #pragma omp parallel // OK
17516     {
17517 #pragma omp single
17518       {
17519         bar();
17520       }
17521     }
17522   }
17523 #pragma omp target teams distribute
17524   for (int i = 0; i < 10; ++i) {
17525 #pragma omp parallel for // OK
17526     for (int i = 0; i < 10; ++i)
17527       ;
17528   }
17529 #pragma omp target teams distribute
17530   for (int i = 0; i < 10; ++i) {
17531 #pragma omp parallel for simd // OK
17532     for (int i = 0; i < 10; ++i)
17533       ;
17534   }
17535 #pragma omp target teams distribute
17536   for (int i = 0; i < 10; ++i) {
17537 #pragma omp parallel sections // OK
17538     {
17539       bar();
17540     }
17541   }
17542 #pragma omp target teams distribute
17543   for (int i = 0; i < 10; ++i) {
17544 #pragma omp task // OK
17545     {
17546       bar();
17547     }
17548   }
17549 #pragma omp target teams distribute
17550   for (int i = 0; i < 10; ++i) {
17551 #pragma omp taskyield // OK
17552     bar();
17553   }
17554 #pragma omp target teams distribute
17555   for (int i = 0; i < 10; ++i) {
17556 #pragma omp barrier // OK
17557     bar();
17558   }
17559 #pragma omp target teams distribute
17560   for (int i = 0; i < 10; ++i) {
17561 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
17562     bar();
17563   }
17564 #pragma omp target teams distribute
17565   for (int i = 0; i < 10; ++i) {
17566 #pragma omp taskwait // OK
17567     bar();
17568   }
17569 #pragma omp target teams distribute
17570   for (int i = 0; i < 10; ++i) {
17571 #pragma omp flush // OK
17572     bar();
17573   }
17574 #pragma omp target teams distribute
17575   for (int i = 0; i < 10; ++i) {
17576 #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?}}
17577     bar();
17578   }
17579 #pragma omp target teams distribute
17580   for (int i = 0; i < 10; ++i) {
17581 #pragma omp atomic // OK
17582     ++a;
17583   }
17584 #pragma omp target teams distribute
17585   for (int i = 0; i < 10; ++i) {
17586 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17587     ++a;
17588   }
17589 #pragma omp target teams distribute
17590   for (int i = 0; i < 10; ++i) {
17591 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17592     ++a;
17593   }
17594 #pragma omp target teams distribute
17595   for (int i = 0; i < 10; ++i) {
17596 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17597     for (int i = 0; i < 10; ++i)
17598       ;
17599   }
17600 #pragma omp target teams distribute
17601   for (int i = 0; i < 10; ++i) {
17602 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17603     ++a;
17604   }
17605 #pragma omp target teams distribute
17606   for (int i = 0; i < 10; ++i) {
17607 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17608     ++a;
17609   }
17610 #pragma omp target teams distribute
17611   for (int i = 0; i < 10; ++i) {
17612 #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?}}
17613     ++a;
17614   }
17615 #pragma omp target teams distribute
17616   for (int i = 0; i < 10; ++i) {
17617 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17618     ++a;
17619   }
17620 #pragma omp target teams distribute
17621   for (int i = 0; i < 10; ++i) {
17622 #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?}}
17623     for (int i = 0; i < 10; ++i)
17624       ++a;
17625   }
17626 #pragma omp target teams distribute
17627   for (int i = 0; i < 10; ++i) {
17628 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17629     for (int i = 0; i < 10; ++i)
17630       ++a;
17631   }
17632 #pragma omp target teams distribute
17633   for (int i = 0; i < 10; ++i) {
17634 #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?}}
17635     for (int i = 0; i < 10; ++i)
17636       ++a;
17637   }
17638 #pragma omp target teams distribute
17639   for (int i = 0; i < 10; ++i) {
17640 #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?}}
17641     for (int i = 0; i < 10; ++i)
17642       ++a;
17643   }
17644 #pragma omp target teams distribute
17645   for (int i = 0; i < 10; ++i) {
17646 #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?}}
17647     for (int i = 0; i < 10; ++i)
17648       ++a;
17649   }
17650 #pragma omp target teams distribute
17651   for (int i = 0; i < 10; ++i) {
17652 #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?}}
17653     for (int i = 0; i < 10; ++i)
17654       ++a;
17655   }
17656 #pragma omp target teams distribute
17657   for (int i = 0; i < 10; ++i) {
17658 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17659     ++a;
17660   }
17661 #pragma omp target teams distribute
17662   for (int i = 0; i < 10; ++i) {
17663 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17664     for (int i = 0; i < 10; ++i)
17665       ++a;
17666   }
17667 #pragma omp target teams distribute
17668   for (int i = 0; i < 10; ++i) {
17669 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17670     for (int i = 0; i < 10; ++i)
17671       ++a;
17672   }
17673 #pragma omp target teams distribute
17674   for (int i = 0; i < 10; ++i) {
17675 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17676     for (int i = 0; i < 10; ++i)
17677       ++a;
17678   }
17679 #pragma omp target teams distribute
17680   for (int i = 0; i < 10; ++i) {
17681 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17682     for (int i = 0; i < 10; ++i)
17683       ++a;
17684   }
17685 
17686 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
17687 #pragma omp target teams distribute parallel for // OK
17688   for (int i = 0; i < 10; ++i)
17689     ;
17690 #pragma omp target teams distribute parallel for
17691   for (int i = 0; i < 10; ++i) {
17692 #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?}}
17693     for (int i = 0; i < 10; ++i)
17694       ;
17695   }
17696 #pragma omp target teams distribute parallel for
17697   for (int i = 0; i < 10; ++i) {
17698 #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?}}
17699     for (int i = 0; i < 10; ++i)
17700       ;
17701   }
17702 #pragma omp target teams distribute parallel for
17703   for (int i = 0; i < 10; ++i) {
17704 #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?}}
17705     for (int i = 0; i < 10; ++i)
17706       ;
17707   }
17708 #pragma omp target teams distribute parallel for
17709   for (int i = 0; i < 10; ++i) {
17710 #pragma omp simd // OK
17711     for (int i = 0; i < 10; ++i)
17712       ;
17713   }
17714 #pragma omp target teams distribute parallel for
17715   for (int i = 0; i < 10; ++i) {
17716 #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?}}
17717     for (int i = 0; i < 10; ++i)
17718       ;
17719   }
17720 #pragma omp target teams distribute parallel for
17721   for (int i = 0; i < 10; ++i) {
17722 #pragma omp parallel // OK
17723     for (int i = 0; i < 10; ++i)
17724       ;
17725   }
17726 #pragma omp target teams distribute parallel for
17727   for (int i = 0; i < 10; ++i) {
17728 #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?}}
17729     {
17730       bar();
17731     }
17732   }
17733 #pragma omp target teams distribute parallel for
17734   for (int i = 0; i < 10; ++i) {
17735 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
17736     {
17737       bar();
17738     }
17739   }
17740 #pragma omp target teams distribute parallel for
17741   for (int i = 0; i < 10; ++i) {
17742 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17743     {
17744       bar();
17745     }
17746   }
17747 #pragma omp target teams distribute parallel for
17748   for (int i = 0; i < 10; ++i) {
17749 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17750     {
17751       bar();
17752     }
17753   }
17754 #pragma omp target teams distribute parallel for
17755   for (int i = 0; i < 10; ++i) {
17756 #pragma omp critical // OK
17757     {
17758       bar();
17759     }
17760   }
17761 #pragma omp target teams distribute parallel for
17762   for (int i = 0; i < 10; ++i) {
17763 #pragma omp parallel // OK
17764     {
17765 #pragma omp single
17766       {
17767         bar();
17768       }
17769     }
17770   }
17771 #pragma omp target teams distribute parallel for
17772   for (int i = 0; i < 10; ++i) {
17773 #pragma omp parallel for // OK
17774     for (int i = 0; i < 10; ++i)
17775       ;
17776   }
17777 #pragma omp target teams distribute parallel for
17778   for (int i = 0; i < 10; ++i) {
17779 #pragma omp parallel for simd // OK
17780     for (int i = 0; i < 10; ++i)
17781       ;
17782   }
17783 #pragma omp target teams distribute parallel for
17784   for (int i = 0; i < 10; ++i) {
17785 #pragma omp parallel sections // OK
17786     {
17787       bar();
17788     }
17789   }
17790 #pragma omp target teams distribute parallel for
17791   for (int i = 0; i < 10; ++i) {
17792 #pragma omp task // OK
17793     {
17794       bar();
17795     }
17796   }
17797 #pragma omp target teams distribute parallel for
17798   for (int i = 0; i < 10; ++i) {
17799 #pragma omp taskyield // OK
17800     bar();
17801   }
17802 #pragma omp target teams distribute parallel for
17803   for (int i = 0; i < 10; ++i) {
17804 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17805     bar();
17806   }
17807 #pragma omp target teams distribute parallel for
17808   for (int i = 0; i < 10; ++i) {
17809 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17810     bar();
17811   }
17812 #pragma omp target teams distribute parallel for
17813   for (int i = 0; i < 10; ++i) {
17814 #pragma omp taskwait // OK
17815     bar();
17816   }
17817 #pragma omp target teams distribute parallel for
17818   for (int i = 0; i < 10; ++i) {
17819 #pragma omp flush // OK
17820     bar();
17821   }
17822 #pragma omp target teams distribute parallel for
17823   for (int i = 0; i < 10; ++i) {
17824 #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?}}
17825     bar();
17826   }
17827 #pragma omp target teams distribute parallel for
17828   for (int i = 0; i < 10; ++i) {
17829 #pragma omp atomic // OK
17830     ++a;
17831   }
17832 #pragma omp target teams distribute parallel for
17833   for (int i = 0; i < 10; ++i) {
17834 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17835     ++a;
17836   }
17837 #pragma omp target teams distribute parallel for
17838   for (int i = 0; i < 10; ++i) {
17839 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17840     ++a;
17841   }
17842 #pragma omp target teams distribute parallel for
17843   for (int i = 0; i < 10; ++i) {
17844 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17845     for (int i = 0; i < 10; ++i)
17846       ;
17847   }
17848 #pragma omp target teams distribute parallel for
17849   for (int i = 0; i < 10; ++i) {
17850 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17851     ++a;
17852   }
17853 #pragma omp target teams distribute parallel for
17854   for (int i = 0; i < 10; ++i) {
17855 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17856     ++a;
17857   }
17858 #pragma omp target teams distribute parallel for
17859   for (int i = 0; i < 10; ++i) {
17860 #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?}}
17861     ++a;
17862   }
17863 #pragma omp target teams distribute parallel for
17864   for (int i = 0; i < 10; ++i) {
17865 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17866     ++a;
17867   }
17868 #pragma omp target teams distribute parallel for
17869   for (int i = 0; i < 10; ++i) {
17870 #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?}}
17871     for (int i = 0; i < 10; ++i)
17872       ++a;
17873   }
17874 #pragma omp target teams distribute parallel for
17875   for (int i = 0; i < 10; ++i) {
17876 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17877     for (int i = 0; i < 10; ++i)
17878       ++a;
17879   }
17880 #pragma omp target teams distribute parallel for
17881   for (int i = 0; i < 10; ++i) {
17882 #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?}}
17883     for (int i = 0; i < 10; ++i)
17884       ++a;
17885   }
17886 #pragma omp target teams distribute parallel for
17887   for (int i = 0; i < 10; ++i) {
17888 #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?}}
17889     for (int i = 0; i < 10; ++i)
17890       ++a;
17891   }
17892 #pragma omp target teams distribute parallel for
17893   for (int i = 0; i < 10; ++i) {
17894 #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?}}
17895     for (int i = 0; i < 10; ++i)
17896       ++a;
17897   }
17898 #pragma omp target teams distribute parallel for
17899   for (int i = 0; i < 10; ++i) {
17900 #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?}}
17901     for (int i = 0; i < 10; ++i)
17902       ++a;
17903   }
17904 #pragma omp target teams distribute parallel for
17905   for (int i = 0; i < 10; ++i) {
17906 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17907     ++a;
17908   }
17909 #pragma omp target teams distribute parallel for
17910   for (int i = 0; i < 10; ++i) {
17911 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17912     for (int i = 0; i < 10; ++i)
17913       ++a;
17914   }
17915 #pragma omp target teams distribute parallel for
17916   for (int i = 0; i < 10; ++i) {
17917 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17918     for (int i = 0; i < 10; ++i)
17919       ++a;
17920   }
17921 #pragma omp target teams distribute parallel for
17922   for (int i = 0; i < 10; ++i) {
17923 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17924     for (int i = 0; i < 10; ++i)
17925       ++a;
17926   }
17927 #pragma omp target teams distribute parallel for
17928   for (int i = 0; i < 10; ++i) {
17929 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17930     for (int i = 0; i < 10; ++i)
17931       ++a;
17932   }
17933 
17934 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
17935 #pragma omp target teams distribute parallel for simd // OK
17936   for (int i = 0; i < 10; ++i)
17937     ;
17938 #pragma omp target teams distribute parallel for simd
17939   for (int i = 0; i < 10; ++i) {
17940 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17941     for (int i = 0; i < 10; ++i)
17942       ;
17943   }
17944 #pragma omp target teams distribute parallel for simd
17945   for (int i = 0; i < 10; ++i) {
17946 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17947     for (int i = 0; i < 10; ++i)
17948       ;
17949   }
17950 #pragma omp target teams distribute parallel for simd
17951   for (int i = 0; i < 10; ++i) {
17952 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17953     for (int i = 0; i < 10; ++i)
17954       ;
17955   }
17956 #pragma omp target teams distribute parallel for simd
17957   for (int i = 0; i < 10; ++i) {
17958 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17959     for (int i = 0; i < 10; ++i)
17960       ;
17961   }
17962 #pragma omp target teams distribute parallel for simd
17963   for (int i = 0; i < 10; ++i) {
17964 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17965     for (int i = 0; i < 10; ++i)
17966       ;
17967   }
17968 #pragma omp target teams distribute parallel for simd
17969   for (int i = 0; i < 10; ++i) {
17970 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17971     for (int i = 0; i < 10; ++i)
17972       ;
17973   }
17974 #pragma omp target teams distribute parallel for simd
17975   for (int i = 0; i < 10; ++i) {
17976 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17977     {
17978       bar();
17979     }
17980   }
17981 #pragma omp target teams distribute parallel for simd
17982   for (int i = 0; i < 10; ++i) {
17983 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17984     {
17985       bar();
17986     }
17987   }
17988 #pragma omp target teams distribute parallel for simd
17989   for (int i = 0; i < 10; ++i) {
17990 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17991     {
17992       bar();
17993     }
17994   }
17995 #pragma omp target teams distribute parallel for simd
17996   for (int i = 0; i < 10; ++i) {
17997 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17998     {
17999       bar();
18000     }
18001   }
18002 #pragma omp target teams distribute parallel for simd
18003   for (int i = 0; i < 10; ++i) {
18004 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18005     {
18006       bar();
18007     }
18008   }
18009 #pragma omp target teams distribute parallel for simd
18010   for (int i = 0; i < 10; ++i) {
18011 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18012     {
18013 #pragma omp single
18014       {
18015         bar();
18016       }
18017     }
18018   }
18019 #pragma omp target teams distribute parallel for simd
18020   for (int i = 0; i < 10; ++i) {
18021 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18022     for (int i = 0; i < 10; ++i)
18023       ;
18024   }
18025 #pragma omp target teams distribute parallel for simd
18026   for (int i = 0; i < 10; ++i) {
18027 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18028     for (int i = 0; i < 10; ++i)
18029       ;
18030   }
18031 #pragma omp target teams distribute parallel for simd
18032   for (int i = 0; i < 10; ++i) {
18033 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18034     {
18035       bar();
18036     }
18037   }
18038 #pragma omp target teams distribute parallel for simd
18039   for (int i = 0; i < 10; ++i) {
18040 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18041     {
18042       bar();
18043     }
18044   }
18045 #pragma omp target teams distribute parallel for simd
18046   for (int i = 0; i < 10; ++i) {
18047 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18048     bar();
18049   }
18050 #pragma omp target teams distribute parallel for simd
18051   for (int i = 0; i < 10; ++i) {
18052 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18053     bar();
18054   }
18055 #pragma omp target teams distribute parallel for simd
18056   for (int i = 0; i < 10; ++i) {
18057 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute parallel for simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
18058     bar();
18059   }
18060 #pragma omp target teams distribute parallel for simd
18061   for (int i = 0; i < 10; ++i) {
18062 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18063     bar();
18064   }
18065 #pragma omp target teams distribute parallel for simd
18066   for (int i = 0; i < 10; ++i) {
18067 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18068     bar();
18069   }
18070 #pragma omp target teams distribute parallel for simd
18071   for (int i = 0; i < 10; ++i) {
18072 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18073     bar();
18074   }
18075 #pragma omp target teams distribute parallel for simd
18076   for (int i = 0; i < 10; ++i) {
18077 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
18078     ++a;
18079   }
18080 #pragma omp target teams distribute parallel for simd
18081   for (int i = 0; i < 10; ++i) {
18082 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18083     ++a;
18084   }
18085 #pragma omp target teams distribute parallel for simd
18086   for (int i = 0; i < 10; ++i) {
18087 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18088     ++a;
18089   }
18090 #pragma omp target teams distribute parallel for simd
18091   for (int i = 0; i < 10; ++i) {
18092 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18093     for (int i = 0; i < 10; ++i)
18094       ;
18095   }
18096 #pragma omp target teams distribute parallel for simd
18097   for (int i = 0; i < 10; ++i) {
18098 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18099     ++a;
18100   }
18101 #pragma omp target teams distribute parallel for simd
18102   for (int i = 0; i < 10; ++i) {
18103 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18104     ++a;
18105   }
18106 #pragma omp target teams distribute parallel for simd
18107   for (int i = 0; i < 10; ++i) {
18108 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18109     ++a;
18110   }
18111 #pragma omp target teams distribute parallel for simd
18112   for (int i = 0; i < 10; ++i) {
18113 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18114     ++a;
18115   }
18116 #pragma omp target teams distribute parallel for simd
18117   for (int i = 0; i < 10; ++i) {
18118 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18119     for (int i = 0; i < 10; ++i)
18120       ++a;
18121   }
18122 #pragma omp target teams distribute parallel for simd
18123   for (int i = 0; i < 10; ++i) {
18124 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18125     for (int i = 0; i < 10; ++i)
18126       ++a;
18127   }
18128 #pragma omp target teams distribute parallel for simd
18129   for (int i = 0; i < 10; ++i) {
18130 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18131     for (int i = 0; i < 10; ++i)
18132       ++a;
18133   }
18134 #pragma omp target teams distribute parallel for simd
18135   for (int i = 0; i < 10; ++i) {
18136 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18137     for (int i = 0; i < 10; ++i)
18138       ++a;
18139   }
18140 #pragma omp target teams distribute parallel for simd
18141   for (int i = 0; i < 10; ++i) {
18142 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18143     for (int i = 0; i < 10; ++i)
18144       ++a;
18145   }
18146 #pragma omp target teams distribute parallel for simd
18147   for (int i = 0; i < 10; ++i) {
18148 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18149     for (int i = 0; i < 10; ++i)
18150       ;
18151   }
18152 #pragma omp target teams distribute parallel for simd
18153   for (int i = 0; i < 10; ++i) {
18154 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18155     a++;
18156   }
18157 #pragma omp target teams distribute parallel for simd
18158   for (int i = 0; i < 10; ++i) {
18159 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18160     for (int i = 0; i < 10; ++i)
18161       ;
18162   }
18163 #pragma omp target teams distribute parallel for simd
18164   for (int i = 0; i < 10; ++i) {
18165 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18166     for (int i = 0; i < 10; ++i)
18167       ;
18168   }
18169 #pragma omp target teams distribute parallel for simd
18170   for (int i = 0; i < 10; ++i) {
18171 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18172     for (int i = 0; i < 10; ++i)
18173       ;
18174   }
18175 #pragma omp target teams distribute parallel for simd
18176   for (int i = 0; i < 10; ++i) {
18177 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18178     for (int i = 0; i < 10; ++i)
18179       ;
18180   }
18181 
18182 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
18183 #pragma omp target teams distribute simd // OK
18184   for (int i = 0; i < 10; ++i)
18185     ;
18186 #pragma omp target teams distribute simd
18187   for (int i = 0; i < 10; ++i) {
18188 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18189     for (int i = 0; i < 10; ++i)
18190       ;
18191   }
18192 #pragma omp target teams distribute simd
18193   for (int i = 0; i < 10; ++i) {
18194 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18195     for (int i = 0; i < 10; ++i)
18196       ;
18197   }
18198 #pragma omp target teams distribute simd
18199   for (int i = 0; i < 10; ++i) {
18200 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18201     for (int i = 0; i < 10; ++i)
18202       ;
18203   }
18204 #pragma omp target teams distribute simd
18205   for (int i = 0; i < 10; ++i) {
18206 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
18207     for (int i = 0; i < 10; ++i)
18208       ;
18209   }
18210 #pragma omp target teams distribute simd
18211   for (int i = 0; i < 10; ++i) {
18212 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18213     for (int i = 0; i < 10; ++i)
18214       ;
18215   }
18216 #pragma omp target teams distribute simd
18217   for (int i = 0; i < 10; ++i) {
18218 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18219     for (int i = 0; i < 10; ++i)
18220       ;
18221   }
18222 #pragma omp target teams distribute simd
18223   for (int i = 0; i < 10; ++i) {
18224 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18225     {
18226       bar();
18227     }
18228   }
18229 #pragma omp target teams distribute simd
18230   for (int i = 0; i < 10; ++i) {
18231 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18232     {
18233       bar();
18234     }
18235   }
18236 #pragma omp target teams distribute simd
18237   for (int i = 0; i < 10; ++i) {
18238 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18239     {
18240       bar();
18241     }
18242   }
18243 #pragma omp target teams distribute simd
18244   for (int i = 0; i < 10; ++i) {
18245 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18246     {
18247       bar();
18248     }
18249   }
18250 #pragma omp target teams distribute simd
18251   for (int i = 0; i < 10; ++i) {
18252 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18253     {
18254       bar();
18255     }
18256   }
18257 #pragma omp target teams distribute simd
18258   for (int i = 0; i < 10; ++i) {
18259 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18260     {
18261 #pragma omp single
18262       {
18263         bar();
18264       }
18265     }
18266   }
18267 #pragma omp target teams distribute simd
18268   for (int i = 0; i < 10; ++i) {
18269 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18270     for (int i = 0; i < 10; ++i)
18271       ;
18272   }
18273 #pragma omp target teams distribute simd
18274   for (int i = 0; i < 10; ++i) {
18275 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18276     for (int i = 0; i < 10; ++i)
18277       ;
18278   }
18279 #pragma omp target teams distribute simd
18280   for (int i = 0; i < 10; ++i) {
18281 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18282     {
18283       bar();
18284     }
18285   }
18286 #pragma omp target teams distribute simd
18287   for (int i = 0; i < 10; ++i) {
18288 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18289     {
18290       bar();
18291     }
18292   }
18293 #pragma omp target teams distribute simd
18294   for (int i = 0; i < 10; ++i) {
18295 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18296     bar();
18297   }
18298 #pragma omp target teams distribute simd
18299   for (int i = 0; i < 10; ++i) {
18300 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18301     bar();
18302   }
18303 #pragma omp target teams distribute simd
18304   for (int i = 0; i < 10; ++i) {
18305 #pragma omp scan // omp45-error {{OpenMP constructs may not be nested inside a simd region}} omp50-error {{region cannot be closely nested inside 'target teams distribute simd' region; perhaps you forget to enclose 'omp scan' directive into a for, simd, for simd, parallel for, or parallel for simd region?}}
18306     bar();
18307   }
18308 #pragma omp target teams distribute simd
18309   for (int i = 0; i < 10; ++i) {
18310 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18311     bar();
18312   }
18313 #pragma omp target teams distribute simd
18314   for (int i = 0; i < 10; ++i) {
18315 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18316     bar();
18317   }
18318 #pragma omp target teams distribute simd
18319   for (int i = 0; i < 10; ++i) {
18320 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18321     bar();
18322   }
18323 #pragma omp target teams distribute simd
18324   for (int i = 0; i < 10; ++i) {
18325 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
18326     ++a;
18327   }
18328 #pragma omp target teams distribute simd
18329   for (int i = 0; i < 10; ++i) {
18330 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18331     ++a;
18332   }
18333 #pragma omp target teams distribute simd
18334   for (int i = 0; i < 10; ++i) {
18335 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18336     ++a;
18337   }
18338 #pragma omp target teams distribute simd
18339   for (int i = 0; i < 10; ++i) {
18340 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18341     for (int i = 0; i < 10; ++i)
18342       ;
18343   }
18344 #pragma omp target teams distribute simd
18345   for (int i = 0; i < 10; ++i) {
18346 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18347     ++a;
18348   }
18349 #pragma omp target teams distribute simd
18350   for (int i = 0; i < 10; ++i) {
18351 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18352     ++a;
18353   }
18354 #pragma omp target teams distribute simd
18355   for (int i = 0; i < 10; ++i) {
18356 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18357     ++a;
18358   }
18359 #pragma omp target teams distribute simd
18360   for (int i = 0; i < 10; ++i) {
18361 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18362     ++a;
18363   }
18364 #pragma omp target teams distribute simd
18365   for (int i = 0; i < 10; ++i) {
18366 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18367     for (int i = 0; i < 10; ++i)
18368       ++a;
18369   }
18370 #pragma omp target teams distribute simd
18371   for (int i = 0; i < 10; ++i) {
18372 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18373     for (int i = 0; i < 10; ++i)
18374       ++a;
18375   }
18376 #pragma omp target teams distribute simd
18377   for (int i = 0; i < 10; ++i) {
18378 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18379     for (int i = 0; i < 10; ++i)
18380       ++a;
18381   }
18382 #pragma omp target teams distribute simd
18383   for (int i = 0; i < 10; ++i) {
18384 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18385     for (int i = 0; i < 10; ++i)
18386       ++a;
18387   }
18388 #pragma omp target teams distribute simd
18389   for (int i = 0; i < 10; ++i) {
18390 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18391     for (int i = 0; i < 10; ++i)
18392       ++a;
18393   }
18394 #pragma omp target teams distribute simd
18395   for (int i = 0; i < 10; ++i) {
18396 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18397     for (int i = 0; i < 10; ++i)
18398       ;
18399   }
18400 #pragma omp target teams distribute simd
18401   for (int i = 0; i < 10; ++i) {
18402 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18403     a++;
18404   }
18405 #pragma omp target teams distribute simd
18406   for (int i = 0; i < 10; ++i) {
18407 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18408     for (int i = 0; i < 10; ++i)
18409       ;
18410   }
18411 #pragma omp target teams distribute simd
18412   for (int i = 0; i < 10; ++i) {
18413 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18414     for (int i = 0; i < 10; ++i)
18415       ;
18416   }
18417 #pragma omp target teams distribute simd
18418   for (int i = 0; i < 10; ++i) {
18419 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18420     for (int i = 0; i < 10; ++i)
18421       ;
18422   }
18423 #pragma omp target teams distribute simd
18424   for (int i = 0; i < 10; ++i) {
18425 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18426     for (int i = 0; i < 10; ++i)
18427       ;
18428   }
18429 
18430   return foo<int>();
18431 }
18432 
18433