1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -fno-openmp-extensions -verify=expected,omp45,omp45warn,omp %s
2 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fno-openmp-extensions -verify=expected,omp50,omp %s
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-extensions -verify=expected,omp50 %s
4 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45,omp -fno-openmp-extensions -Wno-openmp %s
5 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45,omp -fno-openmp-extensions -Wno-source-uses-openmp %s
6 
7 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -fno-openmp-extensions -verify=expected,omp45,omp45warn,omp %s
8 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp50,omp -fno-openmp-extensions %s
9 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
10 
11 void bar();
12 
13 template <class T>
14 void foo() {
15   T a = T();
16 // PARALLEL DIRECTIVE
17 #pragma omp parallel
18 #pragma omp for
19   for (int i = 0; i < 10; ++i)
20     ;
21 #pragma omp parallel
22 #pragma omp simd
23   for (int i = 0; i < 10; ++i)
24     ;
25 #pragma omp parallel
26 #pragma omp for simd
27   for (int i = 0; i < 10; ++i)
28     ;
29 #pragma omp parallel
30 #pragma omp sections
31   {
32     bar();
33   }
34 #pragma omp parallel
35 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
36   {
37     bar();
38   }
39 #pragma omp parallel
40 #pragma omp single
41   bar();
42 
43 #pragma omp parallel
44 #pragma omp master
45   {
46     bar();
47   }
48 #pragma omp parallel
49 #pragma omp critical
50   {
51     bar();
52   }
53 #pragma omp parallel
54 #pragma omp parallel for
55   for (int i = 0; i < 10; ++i)
56     ;
57 #pragma omp parallel
58 #pragma omp parallel for simd
59   for (int i = 0; i < 10; ++i)
60     ;
61 #pragma omp parallel
62 #pragma omp parallel sections
63   {
64     bar();
65   }
66 #pragma omp parallel
67 #pragma omp parallel master
68   {
69     bar();
70   }
71 #pragma omp parallel
72 #pragma omp parallel masked
73   {
74     bar();
75   }
76 #pragma omp parallel
77 #pragma omp task
78   {
79     bar();
80   }
81 #pragma omp parallel
82   {
83 #pragma omp taskyield
84     bar();
85   }
86 #pragma omp parallel
87   {
88 #pragma omp barrier
89     bar();
90   }
91 #pragma omp parallel
92   {
93 #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?}}
94     bar();
95   }
96 #pragma omp parallel
97   {
98 #pragma omp taskwait
99     bar();
100   }
101 #pragma omp parallel
102   {
103 #pragma omp flush
104     bar();
105   }
106 #pragma omp parallel
107   {
108 #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?}}
109     bar();
110   }
111 #pragma omp parallel
112   {
113 #pragma omp atomic
114     ++a;
115   }
116 #pragma omp parallel
117   {
118 #pragma omp target
119     ++a;
120   }
121 #pragma omp parallel
122   {
123 #pragma omp target parallel
124     ++a;
125   }
126 #pragma omp parallel
127   {
128 #pragma omp target parallel for
129   for (int i = 0; i < 10; ++i)
130     ;
131   }
132 #pragma omp parallel
133   {
134 #pragma omp target enter data map(to: a)
135     ++a;
136   }
137 #pragma omp parallel
138   {
139 #pragma omp target exit data map(from: a)
140     ++a;
141   }
142 #pragma omp parallel
143   {
144 #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?}}
145     ++a;
146   }
147 #pragma omp parallel
148   {
149 #pragma omp taskloop
150   for (int i = 0; i < 10; ++i)
151     ++a;
152   }
153 #pragma omp parallel
154   {
155 #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?}}
156     for (int i = 0; i < 10; ++i)
157       ;
158   }
159 #pragma omp parallel
160   {
161 #pragma omp target update to(a)
162   }
163 #pragma omp parallel
164   {
165 #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?}}
166     for (int i = 0; i < 10; ++i)
167       ;
168   }
169 #pragma omp parallel
170   {
171 #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?}}
172     for (int i = 0; i < 10; ++i)
173       ;
174   }
175 #pragma omp parallel
176   {
177 #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?}}
178     for (int i = 0; i < 10; ++i)
179       ;
180   }
181 #pragma omp parallel
182   {
183 #pragma omp target simd // OK
184     for (int i = 0; i < 10; ++i)
185       ;
186   }
187 #pragma omp parallel
188   {
189 #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?}}
190     for (int i = 0; i < 10; ++i)
191       ;
192   }
193 #pragma omp parallel
194   {
195 #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?}}
196     for (int i = 0; i < 10; ++i)
197       ;
198   }
199 #pragma omp parallel
200   {
201 #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?}}
202     for (int i = 0; i < 10; ++i)
203       ;
204   }
205 #pragma omp parallel
206   {
207 #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?}}
208     for (int i = 0; i < 10; ++i)
209       ;
210   }
211 #pragma omp parallel
212   {
213 #pragma omp target teams // OK
214     ++a;
215   }
216 #pragma omp parallel
217   {
218 #pragma omp target teams distribute // OK
219     for (int i = 0; i < 10; ++i)
220       ;
221   }
222 #pragma omp parallel
223   {
224 #pragma omp target teams distribute parallel for // OK
225     for (int i = 0; i < 10; ++i)
226       ;
227   }
228 #pragma omp parallel
229   {
230 #pragma omp target teams distribute parallel for simd // OK
231     for (int i = 0; i < 10; ++i)
232       ;
233   }
234 #pragma omp parallel
235   {
236 #pragma omp target teams distribute simd // OK
237     for (int i = 0; i < 10; ++i)
238       ;
239   }
240 
241 // SIMD DIRECTIVE
242 #pragma omp simd
243   for (int i = 0; i < 10; ++i) {
244 #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}}
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 simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
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 for simd // 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 parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
263     for (int i = 0; i < 10; ++i)
264       ;
265   }
266 #pragma omp simd
267   for (int i = 0; i < 10; ++i) {
268 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
269     {
270       bar();
271     }
272   }
273 #pragma omp simd
274   for (int i = 0; i < 10; ++i) {
275 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
276     {
277       bar();
278     }
279   }
280 #pragma omp simd
281   for (int i = 0; i < 10; ++i) {
282 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
283     {
284       bar();
285     }
286   }
287 #pragma omp simd
288   for (int i = 0; i < 10; ++i) {
289 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
290     {
291       bar();
292     }
293   }
294 #pragma omp simd
295   for (int i = 0; i < 10; ++i) {
296 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
297     {
298       bar();
299     }
300   }
301 #pragma omp simd
302   for (int i = 0; i < 10; ++i) {
303 #pragma omp parallel for // 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 for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
310     for (int i = 0; i < 10; ++i)
311       ;
312   }
313 #pragma omp simd
314   for (int i = 0; i < 10; ++i) {
315 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
316     {
317       bar();
318     }
319   }
320 #pragma omp simd
321   for (int i = 0; i < 10; ++i) {
322 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
323     {
324       bar();
325     }
326   }
327 #pragma omp simd
328   for (int i = 0; i < 10; ++i) {
329 #pragma omp parallel masked // expected-error {{OpenMP constructs may not be nested inside a simd region}}
330     {
331       bar();
332     }
333   }
334 #pragma omp simd
335   for (int i = 0; i < 10; ++i) {
336 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
337     {
338       bar();
339     }
340   }
341 #pragma omp simd
342   for (int i = 0; i < 10; ++i) {
343 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
344     bar();
345   }
346 #pragma omp simd
347   for (int i = 0; i < 10; ++i) {
348 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
349     bar();
350   }
351 #pragma omp simd
352   for (int i = 0; i < 10; ++i) {
353 #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}}
354     bar();
355   }
356 #pragma omp simd
357   for (int i = 0; i < 10; ++i) {
358 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
359     bar();
360   }
361 #pragma omp simd
362   for (int i = 0; i < 10; ++i) {
363 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
364     bar();
365   }
366 #pragma omp simd
367   for (int i = 0; i < 10; ++i) {
368 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
369     bar();
370   }
371 #pragma omp simd
372   for (int i = 0; i < 10; ++i) {
373 #pragma omp ordered simd // OK
374     bar();
375   }
376 #pragma omp simd
377   for (int i = 0; i < 10; ++i) {
378 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
379     bar();
380   }
381 #pragma omp simd
382   for (int i = 0; i < 10; ++i) {
383 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
384     ++a;
385   }
386 #pragma omp simd
387   for (int i = 0; i < 10; ++i) {
388 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
389     ++a;
390   }
391 #pragma omp simd
392   for (int i = 0; i < 10; ++i) {
393 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
394     ++a;
395   }
396 #pragma omp simd
397   for (int i = 0; i < 10; ++i) {
398 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
399     for (int i = 0; i < 10; ++i)
400       ;
401   }
402 #pragma omp simd
403   for (int i = 0; i < 10; ++i) {
404 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
405     ++a;
406   }
407 #pragma omp simd
408   for (int i = 0; i < 10; ++i) {
409 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
410     ++a;
411   }
412 #pragma omp simd
413   for (int i = 0; i < 10; ++i) {
414 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
415     ++a;
416   }
417 #pragma omp simd
418   for (int i = 0; i < 10; ++i) {
419 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
420   for (int i = 0; i < 10; ++i)
421     ++a;
422   }
423 #pragma omp simd
424   for (int i = 0; i < 10; ++i) {
425 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
426     for (int j = 0; j < 10; ++j)
427       ;
428   }
429 #pragma omp simd
430   for (int i = 0; i < 10; ++i) {
431 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
432   }
433 #pragma omp simd
434   for (int i = 0; i < 10; ++i) {
435 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
436     for (int j = 0; j < 10; ++j)
437       ;
438   }
439 #pragma omp simd
440   for (int i = 0; i < 10; ++i) {
441 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
442     for (int j = 0; j < 10; ++j)
443       ;
444   }
445 #pragma omp simd
446   for (int i = 0; i < 10; ++i) {
447 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
448     for (int j = 0; j < 10; ++j)
449       ;
450   }
451 #pragma omp simd
452   for (int i = 0; i < 10; ++i) {
453 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
454     for (int j = 0; j < 10; ++j)
455       ;
456   }
457 #pragma omp simd
458   for (int i = 0; i < 10; ++i) {
459 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
460     for (int j = 0; j < 10; ++j)
461       ;
462   }
463 #pragma omp simd
464   for (int i = 0; i < 10; ++i) {
465 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
466     for (int j = 0; j < 10; ++j)
467       ;
468   }
469 #pragma omp simd
470   for (int i = 0; i < 10; ++i) {
471 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
472     for (int j = 0; j < 10; ++j)
473       ;
474   }
475 #pragma omp simd
476   for (int i = 0; i < 10; ++i) {
477 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
478     for (int j = 0; j < 10; ++j)
479       ;
480   }
481 #pragma omp simd
482   for (int i = 0; i < 10; ++i) {
483 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
484     ++a;
485   }
486 #pragma omp simd
487   for (int i = 0; i < 10; ++i) {
488 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
489     for (int j = 0; j < 10; ++j)
490       ;
491   }
492 #pragma omp simd
493   for (int i = 0; i < 10; ++i) {
494 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
495     for (int j = 0; j < 10; ++j)
496       ;
497   }
498 #pragma omp simd
499   for (int i = 0; i < 10; ++i) {
500 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
501     for (int j = 0; j < 10; ++j)
502       ;
503   }
504 #pragma omp simd
505   for (int i = 0; i < 10; ++i) {
506 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
507     for (int j = 0; j < 10; ++j)
508       ;
509   }
510 
511 // FOR DIRECTIVE
512 #pragma omp for
513   for (int i = 0; i < 10; ++i) {
514 #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?}}
515     for (int i = 0; i < 10; ++i)
516       ;
517   }
518 #pragma omp for
519   for (int i = 0; i < 10; ++i) {
520 #pragma omp simd
521     for (int i = 0; i < 10; ++i)
522       ;
523   }
524 #pragma omp for
525   for (int i = 0; i < 10; ++i) {
526 #pragma omp 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?}}
527     for (int i = 0; i < 10; ++i)
528       ;
529   }
530 #pragma omp for
531   for (int i = 0; i < 10; ++i) {
532 #pragma omp parallel
533     for (int i = 0; i < 10; ++i)
534       ;
535   }
536 #pragma omp for
537   for (int i = 0; i < 10; ++i) {
538 #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?}}
539     {
540       bar();
541     }
542   }
543 #pragma omp for
544   for (int i = 0; i < 10; ++i) {
545 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
546     {
547       bar();
548     }
549   }
550 #pragma omp for
551   for (int i = 0; i < 10; ++i) {
552 #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?}}
553     {
554       bar();
555     }
556   }
557 
558 #pragma omp for
559   for (int i = 0; i < 10; ++i) {
560 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
561     {
562       bar();
563     }
564   }
565 #pragma omp for
566   for (int i = 0; i < 10; ++i) {
567 #pragma omp critical
568     {
569       bar();
570     }
571   }
572 #pragma omp for
573   for (int i = 0; i < 10; ++i) {
574 #pragma omp parallel
575     {
576 #pragma omp single // OK
577       {
578         bar();
579       }
580 #pragma omp for // OK
581       for (int i = 0; i < 10; ++i)
582         ;
583 #pragma omp sections // OK
584       {
585         bar();
586       }
587     }
588   }
589 #pragma omp for
590   for (int i = 0; i < 10; ++i) {
591 #pragma omp parallel for
592     for (int i = 0; i < 10; ++i)
593       ;
594   }
595 #pragma omp for
596   for (int i = 0; i < 10; ++i) {
597 #pragma omp parallel for simd
598     for (int i = 0; i < 10; ++i)
599       ;
600   }
601 #pragma omp for
602   for (int i = 0; i < 10; ++i) {
603 #pragma omp parallel master
604     {
605       bar();
606     }
607   }
608 #pragma omp for
609   for (int i = 0; i < 10; ++i) {
610 #pragma omp parallel masked
611     {
612       bar();
613     }
614   }
615 #pragma omp for
616   for (int i = 0; i < 10; ++i) {
617 #pragma omp parallel sections
618     {
619       bar();
620     }
621   }
622 #pragma omp for
623   for (int i = 0; i < 10; ++i) {
624 #pragma omp task
625     {
626       bar();
627     }
628   }
629 #pragma omp for
630   for (int i = 0; i < 10; ++i) {
631 #pragma omp taskyield
632     bar();
633   }
634 #pragma omp for
635   for (int i = 0; i < 10; ++i) {
636 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
637     bar();
638   }
639 #pragma omp for
640   for (int i = 0; i < 10; ++i) {
641 #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}}
642     bar();
643   }
644 #pragma omp for
645   for (int i = 0; i < 10; ++i) {
646 #pragma omp taskwait
647     bar();
648   }
649 #pragma omp for
650   for (int i = 0; i < 10; ++i) {
651 #pragma omp flush
652     bar();
653   }
654 #pragma omp for
655   for (int i = 0; i < 10; ++i) {
656 #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?}}
657     bar();
658   }
659 #pragma omp for ordered
660   for (int i = 0; i < 10; ++i) {
661 #pragma omp ordered // OK
662     bar();
663   }
664 #pragma omp for
665   for (int i = 0; i < 10; ++i) {
666 #pragma omp atomic
667     ++a;
668   }
669 #pragma omp for
670   for (int i = 0; i < 10; ++i) {
671 #pragma omp target
672     ++a;
673   }
674 #pragma omp for
675   for (int i = 0; i < 10; ++i) {
676 #pragma omp target parallel
677     ++a;
678   }
679 #pragma omp for
680   for (int i = 0; i < 10; ++i) {
681 #pragma omp target parallel for
682     for (int i = 0; i < 10; ++i)
683       ;
684   }
685 #pragma omp for
686   for (int i = 0; i < 10; ++i) {
687 #pragma omp target enter data map(to: a)
688     ++a;
689   }
690 #pragma omp for
691   for (int i = 0; i < 10; ++i) {
692 #pragma omp target exit data map(from: a)
693     ++a;
694   }
695 #pragma omp for
696   for (int i = 0; i < 10; ++i) {
697 #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?}}
698     ++a;
699   }
700 #pragma omp for
701   for (int i = 0; i < 10; ++i) {
702 #pragma omp taskloop
703   for (int i = 0; i < 10; ++i)
704     ++a;
705   }
706 #pragma omp for
707   for (int i = 0; i < 10; ++i) {
708 #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?}}
709     for (int j = 0; j < 10; ++j)
710       ;
711   }
712 #pragma omp for
713   for (int i = 0; i < 10; ++i) {
714 #pragma omp target update to(a)
715   }
716 #pragma omp for
717   for (int i = 0; i < 10; ++i) {
718 #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?}}
719     for (int j = 0; j < 10; ++j)
720       ;
721   }
722 #pragma omp for
723   for (int i = 0; i < 10; ++i) {
724 #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?}}
725     for (int j = 0; j < 10; ++j)
726       ;
727   }
728 #pragma omp for
729   for (int i = 0; i < 10; ++i) {
730 #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?}}
731     for (int j = 0; j < 10; ++j)
732       ;
733   }
734 #pragma omp for
735   for (int i = 0; i < 10; ++i) {
736 #pragma omp target simd // OK
737     for (int j = 0; j < 10; ++j)
738       ;
739   }
740 #pragma omp for
741   for (int i = 0; i < 10; ++i) {
742 #pragma omp 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?}}
743     for (int j = 0; j < 10; ++j)
744       ;
745   }
746 #pragma omp for
747   for (int i = 0; i < 10; ++i) {
748 #pragma omp 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?}}
749     for (int j = 0; j < 10; ++j)
750       ;
751   }
752 #pragma omp for
753   for (int i = 0; i < 10; ++i) {
754 #pragma omp 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?}}
755     for (int j = 0; j < 10; ++j)
756       ;
757   }
758 #pragma omp for
759   for (int i = 0; i < 10; ++i) {
760 #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?}}
761     for (int j = 0; j < 10; ++j)
762       ;
763   }
764 #pragma omp for
765   for (int i = 0; i < 10; ++i) {
766 #pragma omp target teams // OK
767     ++a;
768   }
769 #pragma omp for
770   for (int i = 0; i < 10; ++i) {
771 #pragma omp target teams distribute // OK
772     for (int j = 0; j < 10; ++j)
773       ;
774   }
775 #pragma omp for
776   for (int i = 0; i < 10; ++i) {
777 #pragma omp target teams distribute parallel for // OK
778     for (int j = 0; j < 10; ++j)
779       ;
780   }
781 #pragma omp for
782   for (int i = 0; i < 10; ++i) {
783 #pragma omp target teams distribute parallel for simd // OK
784     for (int j = 0; j < 10; ++j)
785       ;
786   }
787 #pragma omp for
788   for (int i = 0; i < 10; ++i) {
789 #pragma omp target teams distribute simd // OK
790     for (int j = 0; j < 10; ++j)
791       ;
792   }
793 
794 // FOR SIMD DIRECTIVE
795 #pragma omp for simd
796   for (int i = 0; i < 10; ++i) {
797 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
798     for (int i = 0; i < 10; ++i)
799       ;
800   }
801 #pragma omp for simd
802   for (int i = 0; i < 10; ++i) {
803 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
804     for (int i = 0; i < 10; ++i)
805       ;
806   }
807 #pragma omp for simd
808   for (int i = 0; i < 10; ++i) {
809 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
810     for (int i = 0; i < 10; ++i)
811       ;
812   }
813 #pragma omp for simd
814   for (int i = 0; i < 10; ++i) {
815 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
816     for (int i = 0; i < 10; ++i)
817       ;
818   }
819 #pragma omp for simd
820   for (int i = 0; i < 10; ++i) {
821 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
822     {
823       bar();
824     }
825   }
826 #pragma omp for simd
827   for (int i = 0; i < 10; ++i) {
828 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
829     {
830       bar();
831     }
832   }
833 #pragma omp for simd
834   for (int i = 0; i < 10; ++i) {
835 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
836     {
837       bar();
838     }
839   }
840 #pragma omp for simd
841   for (int i = 0; i < 10; ++i) {
842 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
843     {
844       bar();
845     }
846   }
847 #pragma omp for simd
848   for (int i = 0; i < 10; ++i) {
849 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
850     {
851       bar();
852     }
853   }
854 #pragma omp for simd
855   for (int i = 0; i < 10; ++i) {
856 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
857     for (int i = 0; i < 10; ++i)
858       ;
859   }
860 #pragma omp for simd
861   for (int i = 0; i < 10; ++i) {
862 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
863     for (int i = 0; i < 10; ++i)
864       ;
865   }
866 #pragma omp for simd
867   for (int i = 0; i < 10; ++i) {
868 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
869     {
870       bar();
871     }
872   }
873 #pragma omp for simd
874   for (int i = 0; i < 10; ++i) {
875 #pragma omp parallel masked // expected-error {{OpenMP constructs may not be nested inside a simd region}}
876     {
877       bar();
878     }
879   }
880 #pragma omp for simd
881   for (int i = 0; i < 10; ++i) {
882 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
883     {
884       bar();
885     }
886   }
887 #pragma omp for simd
888   for (int i = 0; i < 10; ++i) {
889 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
890     {
891       bar();
892     }
893   }
894 #pragma omp for simd
895   for (int i = 0; i < 10; ++i) {
896 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
897     bar();
898   }
899 #pragma omp for simd
900   for (int i = 0; i < 10; ++i) {
901 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
902     bar();
903   }
904 #pragma omp for simd
905   for (int i = 0; i < 10; ++i) {
906 #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}}
907     bar();
908   }
909 #pragma omp for simd
910   for (int i = 0; i < 10; ++i) {
911 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
912     bar();
913   }
914 #pragma omp for simd
915   for (int i = 0; i < 10; ++i) {
916 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
917     bar();
918   }
919 #pragma omp for simd
920   for (int i = 0; i < 10; ++i) {
921 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
922     bar();
923   }
924 #pragma omp for simd
925   for (int i = 0; i < 10; ++i) {
926 #pragma omp ordered simd // OK
927     bar();
928   }
929 #pragma omp for simd
930   for (int i = 0; i < 10; ++i) {
931 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
932     bar();
933   }
934 #pragma omp for simd
935   for (int i = 0; i < 10; ++i) {
936 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
937     ++a;
938   }
939 #pragma omp for simd
940   for (int i = 0; i < 10; ++i) {
941 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
942     ++a;
943   }
944 #pragma omp for simd
945   for (int i = 0; i < 10; ++i) {
946 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
947     ++a;
948   }
949 #pragma omp for simd
950   for (int i = 0; i < 10; ++i) {
951 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
952     for (int i = 0; i < 10; ++i)
953       ;
954   }
955 #pragma omp for simd
956   for (int i = 0; i < 10; ++i) {
957 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
958     ++a;
959   }
960 #pragma omp for simd
961   for (int i = 0; i < 10; ++i) {
962 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
963     ++a;
964   }
965 #pragma omp for simd
966   for (int i = 0; i < 10; ++i) {
967 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
968     ++a;
969   }
970 #pragma omp for simd
971   for (int i = 0; i < 10; ++i) {
972 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
973   for (int i = 0; i < 10; ++i)
974     ++a;
975   }
976 #pragma omp for simd
977   for (int i = 0; i < 10; ++i) {
978 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
979     for (int j = 0; j < 10; ++j)
980       ;
981   }
982 #pragma omp for simd
983   for (int i = 0; i < 10; ++i) {
984 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
985     bar();
986   }
987 #pragma omp for simd
988   for (int i = 0; i < 10; ++i) {
989 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
990     for (int j = 0; j < 10; ++j)
991       ;
992   }
993 #pragma omp for simd
994   for (int i = 0; i < 10; ++i) {
995 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
996     for (int j = 0; j < 10; ++j)
997       ;
998   }
999 #pragma omp for simd
1000   for (int i = 0; i < 10; ++i) {
1001 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1002     for (int j = 0; j < 10; ++j)
1003       ;
1004   }
1005 #pragma omp for simd
1006   for (int i = 0; i < 10; ++i) {
1007 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1008     for (int j = 0; j < 10; ++j)
1009       ;
1010   }
1011 #pragma omp for simd
1012   for (int i = 0; i < 10; ++i) {
1013 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1014     for (int j = 0; j < 10; ++j)
1015       ;
1016   }
1017 #pragma omp for simd
1018   for (int i = 0; i < 10; ++i) {
1019 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1020     for (int j = 0; j < 10; ++j)
1021       ;
1022   }
1023 #pragma omp for simd
1024   for (int i = 0; i < 10; ++i) {
1025 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1026     for (int j = 0; j < 10; ++j)
1027       ;
1028   }
1029 #pragma omp for simd
1030   for (int i = 0; i < 10; ++i) {
1031 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1032     for (int j = 0; j < 10; ++j)
1033       ;
1034   }
1035 #pragma omp for simd
1036   for (int i = 0; i < 10; ++i) {
1037 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1038     a++;
1039   }
1040 #pragma omp for simd
1041   for (int i = 0; i < 10; ++i) {
1042 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1043     for (int j = 0; j < 10; ++j)
1044       ;
1045   }
1046 #pragma omp for simd
1047   for (int i = 0; i < 10; ++i) {
1048 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1049     for (int j = 0; j < 10; ++j)
1050       ;
1051   }
1052 #pragma omp for simd
1053   for (int i = 0; i < 10; ++i) {
1054 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1055     for (int j = 0; j < 10; ++j)
1056       ;
1057   }
1058 #pragma omp for simd
1059   for (int i = 0; i < 10; ++i) {
1060 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
1061     for (int j = 0; j < 10; ++j)
1062       ;
1063   }
1064 
1065 // SECTIONS DIRECTIVE
1066 #pragma omp sections
1067   {
1068 #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?}}
1069     for (int i = 0; i < 10; ++i)
1070       ;
1071   }
1072 #pragma omp sections
1073   {
1074 #pragma omp simd
1075     for (int i = 0; i < 10; ++i)
1076       ;
1077   }
1078 #pragma omp sections
1079   {
1080 #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?}}
1081     for (int i = 0; i < 10; ++i)
1082       ;
1083   }
1084 #pragma omp sections
1085   {
1086 #pragma omp parallel
1087     for (int i = 0; i < 10; ++i)
1088       ;
1089   }
1090 #pragma omp sections
1091   {
1092 #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?}}
1093     {
1094       bar();
1095     }
1096   }
1097 #pragma omp sections
1098   {
1099 #pragma omp section
1100     {
1101       bar();
1102     }
1103   }
1104 #pragma omp sections
1105   {
1106 #pragma omp parallel
1107     {
1108 #pragma omp single // OK
1109       {
1110         bar();
1111       }
1112 #pragma omp for // OK
1113       for (int i = 0; i < 10; ++i)
1114         ;
1115 #pragma omp sections // OK
1116       {
1117         bar();
1118       }
1119     }
1120   }
1121 #pragma omp sections
1122   {
1123 #pragma omp parallel master
1124     {
1125       bar();
1126     }
1127   }
1128 #pragma omp sections
1129   {
1130 #pragma omp parallel masked
1131     {
1132       bar();
1133     }
1134   }
1135 #pragma omp sections
1136   {
1137 #pragma omp parallel
1138     {
1139 #pragma omp master // OK
1140       {
1141         bar();
1142       }
1143 #pragma omp for // OK
1144       for (int i = 0; i < 10; ++i)
1145         ;
1146 #pragma omp master // OK
1147       {
1148         bar();
1149       }
1150     }
1151 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
1152     bar();
1153   }
1154 #pragma omp sections
1155   {
1156 #pragma omp parallel
1157     {
1158 #pragma omp critical(A) // OK
1159       {
1160         bar();
1161       }
1162 #pragma omp for // OK
1163       for (int i = 0; i < 10; ++i)
1164         ;
1165 #pragma omp critical // OK
1166       {
1167         bar();
1168       }
1169     }
1170 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
1171     bar();
1172   }
1173 #pragma omp sections
1174   {
1175 #pragma omp parallel for
1176     for (int i = 0; i < 10; ++i)
1177       ;
1178   }
1179 #pragma omp sections
1180   {
1181 #pragma omp parallel for simd
1182     for (int i = 0; i < 10; ++i)
1183       ;
1184   }
1185 #pragma omp sections
1186   {
1187 #pragma omp parallel sections
1188     {
1189       bar();
1190     }
1191   }
1192 #pragma omp sections
1193   {
1194 #pragma omp task
1195     {
1196       bar();
1197     }
1198   }
1199 #pragma omp sections
1200   {
1201 #pragma omp taskyield
1202   }
1203 #pragma omp sections
1204   {
1205 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1206   }
1207 #pragma omp sections
1208   {
1209 #pragma omp scan // expected-error {{region cannot be closely nested inside 'sections' region}}
1210   }
1211 #pragma omp sections
1212   {
1213 #pragma omp taskwait
1214   }
1215 #pragma omp sections
1216   {
1217 #pragma omp flush
1218   }
1219 #pragma omp sections
1220   {
1221 #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?}}
1222     bar();
1223   }
1224 #pragma omp sections
1225   {
1226 #pragma omp atomic
1227     ++a;
1228   }
1229 #pragma omp sections
1230   {
1231 #pragma omp target
1232     ++a;
1233   }
1234 #pragma omp sections
1235   {
1236 #pragma omp target parallel
1237     ++a;
1238   }
1239 #pragma omp sections
1240   {
1241 #pragma omp target parallel for
1242     for (int i = 0; i < 10; ++i)
1243       ;
1244   }
1245 #pragma omp sections
1246   {
1247 #pragma omp target enter data map(to: a)
1248   }
1249 #pragma omp sections
1250   {
1251 #pragma omp target exit data map(from: a)
1252   }
1253 #pragma omp sections
1254   {
1255 #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?}}
1256     ++a;
1257   }
1258 #pragma omp sections
1259   {
1260 #pragma omp taskloop
1261   for (int i = 0; i < 10; ++i)
1262     ++a;
1263   }
1264 #pragma omp sections
1265   {
1266 #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?}}
1267     for (int i = 0; i < 10; ++i)
1268       ;
1269   }
1270 #pragma omp sections
1271   {
1272 #pragma omp target update to(a)
1273   }
1274 #pragma omp sections
1275   {
1276 #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?}}
1277     for (int i = 0; i < 10; ++i)
1278       ;
1279   }
1280 #pragma omp sections
1281   {
1282 #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?}}
1283     for (int i = 0; i < 10; ++i)
1284       ;
1285   }
1286 #pragma omp sections
1287   {
1288 #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?}}
1289     for (int i = 0; i < 10; ++i)
1290       ;
1291   }
1292 #pragma omp sections
1293   {
1294 #pragma omp target simd // OK
1295     for (int i = 0; i < 10; ++i)
1296       ;
1297   }
1298 #pragma omp sections
1299   {
1300 #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?}}
1301     for (int i = 0; i < 10; ++i)
1302       ;
1303   }
1304 #pragma omp sections
1305   {
1306 #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?}}
1307     for (int i = 0; i < 10; ++i)
1308       ;
1309   }
1310 #pragma omp sections
1311   {
1312 #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?}}
1313     for (int i = 0; i < 10; ++i)
1314       ;
1315   }
1316 #pragma omp sections
1317   {
1318 #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?}}
1319     for (int i = 0; i < 10; ++i)
1320       ;
1321   }
1322 #pragma omp sections
1323   {
1324 #pragma omp target teams // OK
1325     ++a;
1326   }
1327 #pragma omp sections
1328   {
1329 #pragma omp target teams distribute // OK
1330     for (int i = 0; i < 10; ++i)
1331       ;
1332   }
1333 #pragma omp sections
1334   {
1335 #pragma omp target teams distribute parallel for // OK
1336     for (int i = 0; i < 10; ++i)
1337       ;
1338   }
1339 #pragma omp sections
1340   {
1341 #pragma omp target teams distribute parallel for simd // OK
1342     for (int i = 0; i < 10; ++i)
1343       ;
1344   }
1345 #pragma omp sections
1346   {
1347 #pragma omp target teams distribute simd // OK
1348     for (int i = 0; i < 10; ++i)
1349       ;
1350   }
1351 
1352 // SECTION DIRECTIVE
1353 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1354   {
1355     bar();
1356   }
1357 #pragma omp sections
1358   {
1359 #pragma omp section
1360     {
1361 #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?}}
1362       for (int i = 0; i < 10; ++i)
1363         ;
1364     }
1365   }
1366 #pragma omp sections
1367   {
1368 #pragma omp section
1369     {
1370 #pragma omp simd
1371       for (int i = 0; i < 10; ++i)
1372         ;
1373     }
1374   }
1375 #pragma omp sections
1376   {
1377 #pragma omp section
1378     {
1379 #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?}}
1380       for (int i = 0; i < 10; ++i)
1381         ;
1382     }
1383   }
1384 #pragma omp sections
1385   {
1386 #pragma omp section
1387     {
1388 #pragma omp parallel
1389       for (int i = 0; i < 10; ++i)
1390         ;
1391     }
1392   }
1393 #pragma omp sections
1394   {
1395 #pragma omp section
1396     {
1397 #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?}}
1398       {
1399         bar();
1400       }
1401     }
1402   }
1403 #pragma omp sections
1404   {
1405 #pragma omp section
1406     {
1407 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1408       {
1409         bar();
1410       }
1411     }
1412   }
1413 #pragma omp sections
1414   {
1415 #pragma omp section
1416     {
1417 #pragma omp parallel master
1418       bar();
1419 #pragma omp critical
1420       bar();
1421     }
1422   }
1423 #pragma omp sections
1424   {
1425 #pragma omp section
1426     {
1427 #pragma omp parallel masked
1428       bar();
1429 #pragma omp critical
1430       bar();
1431     }
1432   }
1433 #pragma omp sections
1434   {
1435 #pragma omp section
1436     {
1437 #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?}}
1438       bar();
1439 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1440       bar();
1441 #pragma omp critical
1442       bar();
1443     }
1444   }
1445 #pragma omp sections
1446   {
1447 #pragma omp section
1448     {
1449 #pragma omp parallel
1450       {
1451 #pragma omp single // OK
1452         {
1453           bar();
1454         }
1455 #pragma omp for // OK
1456         for (int i = 0; i < 10; ++i)
1457           ;
1458 #pragma omp for simd // OK
1459         for (int i = 0; i < 10; ++i)
1460           ;
1461 #pragma omp sections // OK
1462         {
1463           bar();
1464         }
1465       }
1466     }
1467   }
1468 #pragma omp sections
1469   {
1470 #pragma omp section
1471     {
1472 #pragma omp parallel for
1473       for (int i = 0; i < 10; ++i)
1474         ;
1475     }
1476   }
1477 #pragma omp sections
1478   {
1479 #pragma omp section
1480     {
1481 #pragma omp parallel for simd
1482       for (int i = 0; i < 10; ++i)
1483         ;
1484     }
1485   }
1486 #pragma omp sections
1487   {
1488 #pragma omp section
1489     {
1490 #pragma omp parallel sections
1491       {
1492         bar();
1493       }
1494     }
1495   }
1496 #pragma omp sections
1497   {
1498 #pragma omp section
1499     {
1500 #pragma omp task
1501       {
1502         bar();
1503       }
1504     }
1505   }
1506 #pragma omp sections
1507   {
1508 #pragma omp section
1509     {
1510 #pragma omp taskyield
1511       bar();
1512     }
1513   }
1514 #pragma omp sections
1515   {
1516 #pragma omp section
1517     {
1518 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1519       bar();
1520     }
1521   }
1522 #pragma omp sections
1523   {
1524 #pragma omp section
1525     {
1526 #pragma omp scan // expected-error {{region cannot be closely nested inside 'section' region}}
1527       bar();
1528     }
1529   }
1530 #pragma omp sections
1531   {
1532 #pragma omp section
1533     {
1534 #pragma omp taskwait
1535       bar();
1536     }
1537   }
1538 #pragma omp sections
1539   {
1540 #pragma omp section
1541     {
1542 #pragma omp flush
1543       bar();
1544     }
1545   }
1546 #pragma omp sections
1547   {
1548 #pragma omp section
1549     {
1550 #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?}}
1551       bar();
1552     }
1553   }
1554 #pragma omp sections
1555   {
1556 #pragma omp section
1557 #pragma omp atomic
1558     ++a;
1559   }
1560 #pragma omp sections
1561   {
1562 #pragma omp section
1563 #pragma omp target
1564     ++a;
1565   }
1566 #pragma omp sections
1567   {
1568 #pragma omp section
1569 #pragma omp target parallel
1570     ++a;
1571   }
1572 #pragma omp sections
1573   {
1574 #pragma omp section
1575     {
1576 #pragma omp target parallel for
1577       for (int i = 0; i < 10; ++i)
1578         ;
1579     }
1580   }
1581 #pragma omp sections
1582   {
1583 #pragma omp section
1584     {
1585 #pragma omp target enter data map(to: a)
1586       ++a;
1587     }
1588   }
1589 #pragma omp sections
1590   {
1591 #pragma omp section
1592     {
1593 #pragma omp target exit data map(from: a)
1594       ++a;
1595     }
1596   }
1597 #pragma omp sections
1598   {
1599 #pragma omp section
1600 #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?}}
1601     ++a;
1602   }
1603 #pragma omp sections
1604   {
1605 #pragma omp section
1606 #pragma omp taskloop
1607   for (int i = 0; i < 10; ++i)
1608     ++a;
1609   }
1610 #pragma omp sections
1611   {
1612 #pragma omp section
1613 #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?}}
1614     for (int i = 0; i < 10; ++i)
1615       ;
1616   }
1617 #pragma omp sections
1618   {
1619 #pragma omp section
1620     {
1621       bar();
1622 #pragma omp target update to(a)
1623     }
1624   }
1625 #pragma omp sections
1626   {
1627 #pragma omp section
1628 #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?}}
1629     for (int i = 0; i < 10; ++i)
1630       ;
1631   }
1632 #pragma omp sections
1633   {
1634 #pragma omp section
1635 #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?}}
1636     for (int i = 0; i < 10; ++i)
1637       ;
1638   }
1639 #pragma omp sections
1640   {
1641 #pragma omp section
1642 #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?}}
1643     for (int i = 0; i < 10; ++i)
1644       ;
1645   }
1646 #pragma omp sections
1647   {
1648 #pragma omp section
1649 #pragma omp target simd // OK
1650     for (int i = 0; i < 10; ++i)
1651       ;
1652   }
1653 #pragma omp sections
1654   {
1655 #pragma omp section
1656 #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?}}
1657     for (int i = 0; i < 10; ++i)
1658       ;
1659   }
1660 #pragma omp sections
1661   {
1662 #pragma omp section
1663 #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?}}
1664     for (int i = 0; i < 10; ++i)
1665       ;
1666   }
1667 #pragma omp sections
1668   {
1669 #pragma omp section
1670 #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?}}
1671     for (int i = 0; i < 10; ++i)
1672       ;
1673   }
1674 #pragma omp sections
1675   {
1676 #pragma omp section
1677 #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?}}
1678     for (int i = 0; i < 10; ++i)
1679       ;
1680   }
1681 #pragma omp sections
1682   {
1683 #pragma omp section
1684 #pragma omp target teams // OK
1685     ++a;
1686   }
1687 #pragma omp sections
1688   {
1689 #pragma omp section
1690 #pragma omp target teams distribute // OK
1691     for (int i = 0; i < 10; ++i)
1692       ;
1693   }
1694 #pragma omp sections
1695   {
1696 #pragma omp section
1697 #pragma omp target teams distribute parallel for // OK
1698     for (int i = 0; i < 10; ++i)
1699       ;
1700   }
1701 #pragma omp sections
1702   {
1703 #pragma omp section
1704 #pragma omp target teams distribute parallel for simd // OK
1705     for (int i = 0; i < 10; ++i)
1706       ;
1707   }
1708 #pragma omp sections
1709   {
1710 #pragma omp section
1711 #pragma omp target teams distribute simd // OK
1712     for (int i = 0; i < 10; ++i)
1713       ;
1714   }
1715 
1716 // SINGLE DIRECTIVE
1717 #pragma omp single
1718   {
1719 #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?}}
1720     for (int i = 0; i < 10; ++i)
1721       ;
1722   }
1723 #pragma omp single
1724   {
1725 #pragma omp simd
1726     for (int i = 0; i < 10; ++i)
1727       ;
1728   }
1729 #pragma omp single
1730   {
1731 #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?}}
1732     for (int i = 0; i < 10; ++i)
1733       ;
1734   }
1735 #pragma omp single
1736   {
1737 #pragma omp parallel
1738     for (int i = 0; i < 10; ++i)
1739       ;
1740   }
1741 #pragma omp single
1742   {
1743 #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?}}
1744     {
1745       bar();
1746     }
1747   }
1748 #pragma omp single
1749   {
1750 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1751     {
1752       bar();
1753     }
1754   }
1755 #pragma omp single
1756   {
1757 #pragma omp parallel master
1758     {
1759       bar();
1760     }
1761   }
1762 #pragma omp single
1763   {
1764 #pragma omp parallel masked
1765     {
1766       bar();
1767     }
1768   }
1769 #pragma omp single
1770   {
1771 #pragma omp critical
1772     {
1773       bar();
1774     }
1775   }
1776 #pragma omp single
1777   {
1778 #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?}}
1779     {
1780       bar();
1781     }
1782   }
1783 #pragma omp single
1784   {
1785 #pragma omp parallel
1786     {
1787 #pragma omp single // OK
1788       {
1789         bar();
1790       }
1791 #pragma omp for // OK
1792       for (int i = 0; i < 10; ++i)
1793         ;
1794 #pragma omp for simd // OK
1795       for (int i = 0; i < 10; ++i)
1796         ;
1797 #pragma omp sections // OK
1798       {
1799         bar();
1800       }
1801     }
1802   }
1803 #pragma omp single
1804   {
1805 #pragma omp parallel for
1806     for (int i = 0; i < 10; ++i)
1807       ;
1808   }
1809 #pragma omp single
1810   {
1811 #pragma omp parallel for simd
1812     for (int i = 0; i < 10; ++i)
1813       ;
1814   }
1815 #pragma omp single
1816   {
1817 #pragma omp parallel sections
1818     {
1819       bar();
1820     }
1821   }
1822 #pragma omp single
1823   {
1824 #pragma omp task
1825     {
1826       bar();
1827     }
1828   }
1829 #pragma omp single
1830   {
1831 #pragma omp taskyield
1832     bar();
1833   }
1834 #pragma omp single
1835   {
1836 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1837     bar();
1838   }
1839 #pragma omp single
1840   {
1841 #pragma omp scan // expected-error {{region cannot be closely nested inside 'single' region}}
1842     bar();
1843   }
1844 #pragma omp single
1845   {
1846 #pragma omp taskwait
1847     bar();
1848   }
1849 #pragma omp single
1850   {
1851 #pragma omp flush
1852     bar();
1853   }
1854 #pragma omp single
1855   {
1856 #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?}}
1857     bar();
1858   }
1859 #pragma omp single
1860   {
1861 #pragma omp atomic
1862     ++a;
1863   }
1864 #pragma omp single
1865   {
1866 #pragma omp target
1867     ++a;
1868   }
1869 #pragma omp single
1870   {
1871 #pragma omp target parallel
1872     ++a;
1873   }
1874 #pragma omp single
1875   {
1876 #pragma omp target parallel for
1877     for (int i = 0; i < 10; ++i)
1878       ;
1879   }
1880 #pragma omp single
1881   {
1882 #pragma omp target enter data map(to: a)
1883     ++a;
1884   }
1885 #pragma omp single
1886   {
1887 #pragma omp target exit data map(from: a)
1888     ++a;
1889   }
1890 #pragma omp single
1891   {
1892 #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?}}
1893     ++a;
1894   }
1895 #pragma omp single
1896   {
1897 #pragma omp taskloop
1898   for (int i = 0; i < 10; ++i)
1899     ++a;
1900   }
1901 #pragma omp single
1902   {
1903 #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?}}
1904     for (int i = 0; i < 10; ++i)
1905       ;
1906   }
1907 #pragma omp single
1908   {
1909 #pragma omp target update to(a)
1910     bar();
1911   }
1912 #pragma omp single
1913   {
1914 #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?}}
1915     for (int i = 0; i < 10; ++i)
1916       ;
1917   }
1918 #pragma omp single
1919   {
1920 #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?}}
1921     for (int i = 0; i < 10; ++i)
1922       ;
1923   }
1924 #pragma omp single
1925   {
1926 #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?}}
1927     for (int i = 0; i < 10; ++i)
1928       ;
1929   }
1930 #pragma omp single
1931   {
1932 #pragma omp target simd // OK
1933     for (int i = 0; i < 10; ++i)
1934       ;
1935   }
1936 #pragma omp single
1937   {
1938 #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?}}
1939     for (int i = 0; i < 10; ++i)
1940       ;
1941   }
1942 #pragma omp single
1943   {
1944 #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?}}
1945     for (int i = 0; i < 10; ++i)
1946       ;
1947   }
1948 #pragma omp single
1949   {
1950 #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?}}
1951     for (int i = 0; i < 10; ++i)
1952       ;
1953   }
1954 #pragma omp single
1955   {
1956 #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?}}
1957     for (int i = 0; i < 10; ++i)
1958       ;
1959   }
1960 #pragma omp single
1961   {
1962 #pragma omp target teams // OK
1963     ++a;
1964   }
1965 #pragma omp single
1966   {
1967 #pragma omp target teams distribute // OK
1968     for (int i = 0; i < 10; ++i)
1969       ;
1970   }
1971 #pragma omp single
1972   {
1973 #pragma omp target teams distribute parallel for // OK
1974     for (int i = 0; i < 10; ++i)
1975       ;
1976   }
1977 #pragma omp single
1978   {
1979 #pragma omp target teams distribute parallel for simd // OK
1980     for (int i = 0; i < 10; ++i)
1981       ;
1982   }
1983 #pragma omp single
1984   {
1985 #pragma omp target teams distribute simd // OK
1986     for (int i = 0; i < 10; ++i)
1987       ;
1988   }
1989 
1990 // MASTER DIRECTIVE
1991 #pragma omp master
1992   {
1993 #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?}}
1994     for (int i = 0; i < 10; ++i)
1995       ;
1996   }
1997 #pragma omp master
1998   {
1999 #pragma omp simd
2000     for (int i = 0; i < 10; ++i)
2001       ;
2002   }
2003 #pragma omp master
2004   {
2005 #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?}}
2006     for (int i = 0; i < 10; ++i)
2007       ;
2008   }
2009 #pragma omp master
2010   {
2011 #pragma omp parallel
2012     for (int i = 0; i < 10; ++i)
2013       ;
2014   }
2015 #pragma omp master
2016   {
2017 #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?}}
2018     {
2019       bar();
2020     }
2021   }
2022 #pragma omp master
2023   {
2024 #pragma omp master // OK, though second 'master' is redundant
2025     {
2026       bar();
2027     }
2028   }
2029 #pragma omp master
2030   {
2031 #pragma omp critical
2032     {
2033       bar();
2034     }
2035   }
2036 #pragma omp master
2037   {
2038 #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?}}
2039     {
2040       bar();
2041     }
2042   }
2043 #pragma omp master
2044   {
2045 #pragma omp parallel
2046     {
2047 #pragma omp master // OK
2048       {
2049         bar();
2050       }
2051 #pragma omp for // OK
2052       for (int i = 0; i < 10; ++i)
2053         ;
2054 #pragma omp for simd // OK
2055       for (int i = 0; i < 10; ++i)
2056         ;
2057 #pragma omp sections // OK
2058       {
2059         bar();
2060       }
2061     }
2062   }
2063 #pragma omp master
2064   {
2065 #pragma omp parallel master // OK
2066       {
2067         bar();
2068       }
2069 #pragma omp parallel
2070     {
2071 #pragma omp for // OK
2072       for (int i = 0; i < 10; ++i)
2073         ;
2074 #pragma omp for simd // OK
2075       for (int i = 0; i < 10; ++i)
2076         ;
2077 #pragma omp sections // OK
2078       {
2079         bar();
2080       }
2081     }
2082   }
2083 #pragma omp master
2084   {
2085 #pragma omp parallel for
2086     for (int i = 0; i < 10; ++i)
2087       ;
2088   }
2089 #pragma omp master
2090   {
2091 #pragma omp parallel for simd
2092     for (int i = 0; i < 10; ++i)
2093       ;
2094   }
2095 #pragma omp master
2096   {
2097 #pragma omp parallel sections
2098     {
2099       bar();
2100     }
2101   }
2102 #pragma omp master
2103   {
2104 #pragma omp task
2105     {
2106       bar();
2107     }
2108   }
2109 #pragma omp master
2110   {
2111 #pragma omp taskyield
2112     bar();
2113   }
2114 #pragma omp master
2115   {
2116 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
2117     bar();
2118   }
2119 #pragma omp master
2120   {
2121 #pragma omp scan // expected-error {{region cannot be closely nested inside 'master' region}}
2122     bar();
2123   }
2124 #pragma omp master
2125   {
2126 #pragma omp taskwait
2127     bar();
2128   }
2129 #pragma omp master
2130   {
2131 #pragma omp flush
2132     bar();
2133   }
2134 #pragma omp master
2135   {
2136 #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?}}
2137     bar();
2138   }
2139 #pragma omp master
2140   {
2141 #pragma omp atomic
2142     ++a;
2143   }
2144 #pragma omp master
2145   {
2146 #pragma omp target
2147     ++a;
2148   }
2149 #pragma omp master
2150   {
2151 #pragma omp target parallel
2152     ++a;
2153   }
2154 #pragma omp master
2155   {
2156 #pragma omp target parallel for
2157     for (int i = 0; i < 10; ++i)
2158       ;
2159   }
2160 #pragma omp master
2161   {
2162 #pragma omp target enter data map(to: a)
2163     ++a;
2164   }
2165 #pragma omp master
2166   {
2167 #pragma omp target exit data map(from: a)
2168     ++a;
2169   }
2170 #pragma omp master
2171   {
2172 #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?}}
2173     ++a;
2174   }
2175 #pragma omp master
2176   {
2177 #pragma omp taskloop
2178   for (int i = 0; i < 10; ++i)
2179     ++a;
2180   }
2181 #pragma omp master
2182   {
2183 #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?}}
2184     for (int i = 0; i < 10; ++i)
2185       ;
2186   }
2187 #pragma omp master
2188   {
2189 #pragma omp target update to(a)
2190     bar();
2191   }
2192 #pragma omp master
2193   {
2194 #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?}}
2195     for (int i = 0; i < 10; ++i)
2196       ;
2197   }
2198 #pragma omp master
2199   {
2200 #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?}}
2201     for (int i = 0; i < 10; ++i)
2202       ;
2203   }
2204 #pragma omp master
2205   {
2206 #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?}}
2207     for (int i = 0; i < 10; ++i)
2208       ;
2209   }
2210 #pragma omp master
2211   {
2212 #pragma omp target simd // OK
2213     for (int i = 0; i < 10; ++i)
2214       ;
2215   }
2216 #pragma omp master
2217   {
2218 #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?}}
2219     for (int i = 0; i < 10; ++i)
2220       ;
2221   }
2222 #pragma omp master
2223   {
2224 #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?}}
2225     for (int i = 0; i < 10; ++i)
2226       ;
2227   }
2228 #pragma omp master
2229   {
2230 #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?}}
2231     for (int i = 0; i < 10; ++i)
2232       ;
2233   }
2234 #pragma omp master
2235   {
2236 #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?}}
2237     for (int i = 0; i < 10; ++i)
2238       ;
2239   }
2240 #pragma omp master
2241   {
2242 #pragma omp target teams // OK
2243     a++;
2244   }
2245 #pragma omp master
2246   {
2247 #pragma omp target teams distribute // OK
2248     for (int i = 0; i < 10; ++i)
2249       ;
2250   }
2251 #pragma omp master
2252   {
2253 #pragma omp target teams distribute parallel for // OK
2254     for (int i = 0; i < 10; ++i)
2255       ;
2256   }
2257 #pragma omp master
2258   {
2259 #pragma omp target teams distribute parallel for simd // OK
2260     for (int i = 0; i < 10; ++i)
2261       ;
2262   }
2263 #pragma omp master
2264   {
2265 #pragma omp target teams distribute simd // OK
2266     for (int i = 0; i < 10; ++i)
2267       ;
2268   }
2269 
2270 // CRITICAL DIRECTIVE
2271 #pragma omp critical
2272   {
2273 #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?}}
2274     for (int i = 0; i < 10; ++i)
2275       ;
2276   }
2277 #pragma omp critical
2278   {
2279 #pragma omp simd
2280     for (int i = 0; i < 10; ++i)
2281       ;
2282   }
2283 #pragma omp critical
2284   {
2285 #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?}}
2286     for (int i = 0; i < 10; ++i)
2287       ;
2288   }
2289 #pragma omp critical
2290   {
2291 #pragma omp parallel
2292     for (int i = 0; i < 10; ++i)
2293       ;
2294   }
2295 #pragma omp critical
2296   {
2297 #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?}}
2298     {
2299       bar();
2300     }
2301   }
2302 #pragma omp critical
2303   {
2304 #pragma omp master // OK, though second 'master' is redundant
2305     {
2306       bar();
2307     }
2308   }
2309 #pragma omp critical
2310   {
2311 #pragma omp critical
2312     {
2313       bar();
2314     }
2315   }
2316 #pragma omp critical
2317   {
2318 #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?}}
2319     {
2320       bar();
2321     }
2322   }
2323 #pragma omp critical
2324   {
2325 #pragma omp parallel
2326     {
2327 #pragma omp master // OK
2328       {
2329         bar();
2330       }
2331 #pragma omp for // OK
2332       for (int i = 0; i < 10; ++i)
2333         ;
2334 #pragma omp for simd // OK
2335       for (int i = 0; i < 10; ++i)
2336         ;
2337 #pragma omp sections // OK
2338       {
2339         bar();
2340       }
2341     }
2342   }
2343 #pragma omp critical
2344   {
2345 #pragma omp parallel master
2346     {
2347       bar();
2348     }
2349   }
2350 #pragma omp critical
2351   {
2352 #pragma omp parallel masked
2353     {
2354       bar();
2355     }
2356   }
2357 #pragma omp critical
2358   {
2359 #pragma omp parallel for
2360     for (int i = 0; i < 10; ++i)
2361       ;
2362   }
2363 #pragma omp critical
2364   {
2365 #pragma omp parallel for simd
2366     for (int i = 0; i < 10; ++i)
2367       ;
2368   }
2369 #pragma omp critical
2370   {
2371 #pragma omp parallel sections
2372     {
2373       bar();
2374     }
2375   }
2376 #pragma omp critical
2377   {
2378 #pragma omp task
2379     {
2380       bar();
2381     }
2382   }
2383 #pragma omp critical
2384   {
2385 #pragma omp taskyield
2386     bar();
2387   }
2388 #pragma omp critical
2389   {
2390 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2391     bar();
2392   }
2393 #pragma omp critical
2394   {
2395 #pragma omp scan // expected-error {{region cannot be closely nested inside 'critical' region}}
2396     bar();
2397   }
2398 #pragma omp critical
2399   {
2400 #pragma omp taskwait
2401     bar();
2402   }
2403 #pragma omp critical(Tuzik)
2404   {
2405 #pragma omp critical(grelka)
2406     bar();
2407   }
2408 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2409   {
2410 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2411     {
2412 #pragma omp critical(Tuzik)
2413       {
2414 #pragma omp parallel
2415 #pragma omp critical(grelka)
2416         {
2417           bar();
2418         }
2419       }
2420     }
2421   }
2422 #pragma omp critical
2423   {
2424 #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?}}
2425     bar();
2426   }
2427 #pragma omp critical
2428   {
2429 #pragma omp atomic
2430     ++a;
2431   }
2432 #pragma omp critical
2433   {
2434 #pragma omp target
2435     ++a;
2436   }
2437 #pragma omp critical
2438   {
2439 #pragma omp target parallel
2440     ++a;
2441   }
2442 #pragma omp critical
2443   {
2444 #pragma omp target parallel for
2445     for (int i = 0; i < 10; ++i)
2446       ;
2447   }
2448 #pragma omp critical
2449   {
2450 #pragma omp target enter data map(to: a)
2451     ++a;
2452   }
2453 #pragma omp critical
2454   {
2455 #pragma omp target exit data map(from: a)
2456     ++a;
2457   }
2458 #pragma omp critical
2459   {
2460 #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?}}
2461     ++a;
2462   }
2463 #pragma omp critical
2464   {
2465 #pragma omp taskloop
2466   for (int i = 0; i < 10; ++i)
2467     ++a;
2468   }
2469 #pragma omp critical
2470   {
2471 #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?}}
2472     for (int i = 0; i < 10; ++i)
2473       ;
2474   }
2475 #pragma omp critical
2476   {
2477 #pragma omp target update to(a)
2478     bar();
2479   }
2480 #pragma omp critical
2481   {
2482 #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?}}
2483     for (int i = 0; i < 10; ++i)
2484       ;
2485   }
2486 #pragma omp critical
2487   {
2488 #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?}}
2489     for (int i = 0; i < 10; ++i)
2490       ;
2491   }
2492 #pragma omp critical
2493   {
2494 #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?}}
2495     for (int i = 0; i < 10; ++i)
2496       ;
2497   }
2498 #pragma omp critical
2499   {
2500 #pragma omp target simd // OK
2501     for (int i = 0; i < 10; ++i)
2502       ;
2503   }
2504 #pragma omp critical
2505   {
2506 #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?}}
2507     for (int i = 0; i < 10; ++i)
2508       ;
2509   }
2510 #pragma omp critical
2511   {
2512 #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?}}
2513     for (int i = 0; i < 10; ++i)
2514       ;
2515   }
2516 #pragma omp critical
2517   {
2518 #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?}}
2519     for (int i = 0; i < 10; ++i)
2520       ;
2521   }
2522 #pragma omp critical
2523   {
2524 #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?}}
2525     for (int i = 0; i < 10; ++i)
2526       ;
2527   }
2528 #pragma omp critical
2529   {
2530 #pragma omp target teams // OK
2531     a++;
2532   }
2533 #pragma omp critical
2534   {
2535 #pragma omp target teams distribute // OK
2536     for (int i = 0; i < 10; ++i)
2537       ;
2538   }
2539 #pragma omp critical
2540   {
2541 #pragma omp target teams distribute parallel for // OK
2542     for (int i = 0; i < 10; ++i)
2543       ;
2544   }
2545 #pragma omp critical
2546   {
2547 #pragma omp target teams distribute parallel for simd // OK
2548     for (int i = 0; i < 10; ++i)
2549       ;
2550   }
2551 #pragma omp critical
2552   {
2553 #pragma omp target teams distribute simd // OK
2554     for (int i = 0; i < 10; ++i)
2555       ;
2556   }
2557 
2558 // PARALLEL FOR DIRECTIVE
2559 #pragma omp parallel for
2560   for (int i = 0; i < 10; ++i) {
2561 #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?}}
2562     for (int i = 0; i < 10; ++i)
2563       ;
2564   }
2565 #pragma omp parallel for
2566   for (int i = 0; i < 10; ++i) {
2567 #pragma omp simd
2568     for (int i = 0; i < 10; ++i)
2569       ;
2570   }
2571 #pragma omp parallel for
2572   for (int i = 0; i < 10; ++i) {
2573 #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?}}
2574     for (int i = 0; i < 10; ++i)
2575       ;
2576   }
2577 #pragma omp parallel for
2578   for (int i = 0; i < 10; ++i) {
2579 #pragma omp parallel
2580     for (int i = 0; i < 10; ++i)
2581       ;
2582   }
2583 #pragma omp parallel for
2584   for (int i = 0; i < 10; ++i) {
2585 #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?}}
2586     {
2587       bar();
2588     }
2589   }
2590 #pragma omp parallel for
2591   for (int i = 0; i < 10; ++i) {
2592 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2593     {
2594       bar();
2595     }
2596   }
2597 #pragma omp parallel for
2598   for (int i = 0; i < 10; ++i) {
2599 #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?}}
2600     {
2601       bar();
2602     }
2603   }
2604 
2605 #pragma omp parallel for
2606   for (int i = 0; i < 10; ++i) {
2607 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2608     {
2609       bar();
2610     }
2611   }
2612 
2613 #pragma omp parallel for
2614   for (int i = 0; i < 10; ++i) {
2615 #pragma omp critical
2616     {
2617       bar();
2618     }
2619   }
2620 
2621 #pragma omp parallel for
2622   for (int i = 0; i < 10; ++i) {
2623 #pragma omp parallel
2624     {
2625 #pragma omp single // OK
2626       {
2627         bar();
2628       }
2629 #pragma omp for // OK
2630       for (int i = 0; i < 10; ++i)
2631         ;
2632 #pragma omp for simd // OK
2633       for (int i = 0; i < 10; ++i)
2634         ;
2635 #pragma omp sections // OK
2636       {
2637         bar();
2638       }
2639     }
2640   }
2641 #pragma omp parallel for
2642   for (int i = 0; i < 10; ++i) {
2643 #pragma omp parallel for
2644     for (int i = 0; i < 10; ++i)
2645       ;
2646   }
2647 #pragma omp parallel for
2648   for (int i = 0; i < 10; ++i) {
2649 #pragma omp parallel for simd
2650     for (int i = 0; i < 10; ++i)
2651       ;
2652   }
2653 #pragma omp parallel for
2654   for (int i = 0; i < 10; ++i) {
2655 #pragma omp parallel sections
2656     {
2657       bar();
2658     }
2659   }
2660 #pragma omp parallel for
2661   for (int i = 0; i < 10; ++i) {
2662 #pragma omp task
2663     {
2664       bar();
2665     }
2666   }
2667 #pragma omp parallel for
2668   for (int i = 0; i < 10; ++i) {
2669 #pragma omp taskyield
2670     bar();
2671   }
2672 #pragma omp parallel for
2673   for (int i = 0; i < 10; ++i) {
2674 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2675     bar();
2676   }
2677 #pragma omp parallel for
2678   for (int i = 0; i < 10; ++i) {
2679 #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}}
2680     bar();
2681   }
2682 #pragma omp parallel for
2683   for (int i = 0; i < 10; ++i) {
2684 #pragma omp taskwait
2685     bar();
2686   }
2687 #pragma omp parallel for
2688   for (int i = 0; i < 10; ++i) {
2689 #pragma omp flush
2690     bar();
2691   }
2692 #pragma omp parallel for
2693   for (int i = 0; i < 10; ++i) {
2694 #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?}}
2695     bar();
2696   }
2697 #pragma omp parallel for ordered
2698   for (int i = 0; i < 10; ++i) {
2699 #pragma omp ordered // OK
2700     bar();
2701   }
2702 #pragma omp parallel for
2703   for (int i = 0; i < 10; ++i) {
2704 #pragma omp atomic
2705     ++a;
2706   }
2707 #pragma omp parallel for
2708   for (int i = 0; i < 10; ++i) {
2709 #pragma omp target
2710     ++a;
2711   }
2712 #pragma omp parallel for
2713   for (int i = 0; i < 10; ++i) {
2714 #pragma omp target parallel
2715     ++a;
2716   }
2717 #pragma omp parallel for
2718   for (int i = 0; i < 10; ++i) {
2719 #pragma omp target parallel for
2720     for (int i = 0; i < 10; ++i)
2721       ;
2722   }
2723 #pragma omp parallel for
2724   for (int i = 0; i < 10; ++i) {
2725 #pragma omp target enter data map(to: a)
2726     ++a;
2727   }
2728 #pragma omp parallel for
2729   for (int i = 0; i < 10; ++i) {
2730 #pragma omp target exit data map(from: a)
2731     ++a;
2732   }
2733 #pragma omp parallel for
2734   for (int i = 0; i < 10; ++i) {
2735 #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?}}
2736     ++a;
2737   }
2738 #pragma omp parallel for
2739   for (int i = 0; i < 10; ++i) {
2740 #pragma omp taskloop
2741   for (int i = 0; i < 10; ++i)
2742     ++a;
2743   }
2744 #pragma omp parallel for
2745   for (int i = 0; i < 10; ++i) {
2746 #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?}}
2747     for (int j = 0; j < 10; ++j)
2748       ;
2749   }
2750 #pragma omp parallel for
2751   for (int i = 0; i < 10; ++i) {
2752 #pragma omp target update to(a)
2753   }
2754 #pragma omp parallel for
2755   for (int i = 0; i < 10; ++i) {
2756 #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?}}
2757     for (int j = 0; j < 10; ++j)
2758       ;
2759   }
2760 #pragma omp parallel for
2761   for (int i = 0; i < 10; ++i) {
2762 #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?}}
2763     for (int j = 0; j < 10; ++j)
2764       ;
2765   }
2766 #pragma omp parallel for
2767   for (int i = 0; i < 10; ++i) {
2768 #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?}}
2769     for (int j = 0; j < 10; ++j)
2770       ;
2771   }
2772 #pragma omp parallel for
2773   for (int i = 0; i < 10; ++i) {
2774 #pragma omp target simd // OK
2775     for (int j = 0; j < 10; ++j)
2776       ;
2777   }
2778 #pragma omp parallel for
2779   for (int i = 0; i < 10; ++i) {
2780 #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?}}
2781     for (int j = 0; j < 10; ++j)
2782       ;
2783   }
2784 #pragma omp parallel for
2785   for (int i = 0; i < 10; ++i) {
2786 #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?}}
2787     for (int j = 0; j < 10; ++j)
2788       ;
2789   }
2790 #pragma omp parallel for
2791   for (int i = 0; i < 10; ++i) {
2792 #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?}}
2793     for (int j = 0; j < 10; ++j)
2794       ;
2795   }
2796 #pragma omp parallel for
2797   for (int i = 0; i < 10; ++i) {
2798 #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?}}
2799     for (int j = 0; j < 10; ++j)
2800       ;
2801   }
2802 #pragma omp parallel for
2803   for (int i = 0; i < 10; ++i) {
2804 #pragma omp target teams // OK
2805     a++;
2806   }
2807 #pragma omp parallel for
2808   for (int i = 0; i < 10; ++i) {
2809 #pragma omp target teams distribute // OK
2810     for (int j = 0; j < 10; ++j)
2811       ;
2812   }
2813 #pragma omp parallel for
2814   for (int i = 0; i < 10; ++i) {
2815 #pragma omp target teams distribute parallel for // OK
2816     for (int j = 0; j < 10; ++j)
2817       ;
2818   }
2819 #pragma omp parallel for
2820   for (int i = 0; i < 10; ++i) {
2821 #pragma omp target teams distribute parallel for simd // OK
2822     for (int j = 0; j < 10; ++j)
2823       ;
2824   }
2825 #pragma omp parallel for
2826   for (int i = 0; i < 10; ++i) {
2827 #pragma omp target teams distribute simd // OK
2828     for (int j = 0; j < 10; ++j)
2829       ;
2830   }
2831 
2832 // PARALLEL FOR SIMD DIRECTIVE
2833 #pragma omp parallel for simd
2834   for (int i = 0; i < 10; ++i) {
2835 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2836     for (int i = 0; i < 10; ++i)
2837       ;
2838   }
2839 #pragma omp parallel for simd
2840   for (int i = 0; i < 10; ++i) {
2841 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2842     for (int i = 0; i < 10; ++i)
2843       ;
2844   }
2845 #pragma omp parallel for simd
2846   for (int i = 0; i < 10; ++i) {
2847 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2848     for (int i = 0; i < 10; ++i)
2849       ;
2850   }
2851 #pragma omp parallel for simd
2852   for (int i = 0; i < 10; ++i) {
2853 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2854     for (int i = 0; i < 10; ++i)
2855       ;
2856   }
2857 #pragma omp parallel for simd
2858   for (int i = 0; i < 10; ++i) {
2859 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2860     {
2861       bar();
2862     }
2863   }
2864 #pragma omp parallel for simd
2865   for (int i = 0; i < 10; ++i) {
2866 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2867     {
2868       bar();
2869     }
2870   }
2871 #pragma omp parallel for simd
2872   for (int i = 0; i < 10; ++i) {
2873 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2874     {
2875       bar();
2876     }
2877   }
2878 
2879 #pragma omp parallel for simd
2880   for (int i = 0; i < 10; ++i) {
2881 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2882     {
2883       bar();
2884     }
2885   }
2886 
2887 #pragma omp parallel for simd
2888   for (int i = 0; i < 10; ++i) {
2889 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2890     {
2891       bar();
2892     }
2893   }
2894 
2895 #pragma omp parallel for simd
2896   for (int i = 0; i < 10; ++i) {
2897 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2898     {
2899 #pragma omp single
2900       {
2901         bar();
2902       }
2903 #pragma omp for
2904       for (int i = 0; i < 10; ++i)
2905         ;
2906 #pragma omp for simd
2907       for (int i = 0; i < 10; ++i)
2908         ;
2909 #pragma omp sections
2910       {
2911         bar();
2912       }
2913     }
2914   }
2915 #pragma omp parallel for simd
2916   for (int i = 0; i < 10; ++i) {
2917 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2918     for (int i = 0; i < 10; ++i)
2919       ;
2920   }
2921 #pragma omp parallel for simd
2922   for (int i = 0; i < 10; ++i) {
2923 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2924     for (int i = 0; i < 10; ++i)
2925       ;
2926   }
2927 #pragma omp parallel for simd
2928   for (int i = 0; i < 10; ++i) {
2929 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2930     {
2931       bar();
2932     }
2933   }
2934 #pragma omp parallel for simd
2935   for (int i = 0; i < 10; ++i) {
2936 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2937     {
2938       bar();
2939     }
2940   }
2941 #pragma omp parallel for simd
2942   for (int i = 0; i < 10; ++i) {
2943 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2944     bar();
2945   }
2946 #pragma omp parallel for simd
2947   for (int i = 0; i < 10; ++i) {
2948 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2949     bar();
2950   }
2951 #pragma omp parallel for simd
2952   for (int i = 0; i < 10; ++i) {
2953 #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}}
2954     bar();
2955   }
2956 #pragma omp parallel for simd
2957   for (int i = 0; i < 10; ++i) {
2958 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2959     bar();
2960   }
2961 #pragma omp parallel for simd
2962   for (int i = 0; i < 10; ++i) {
2963 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2964     bar();
2965   }
2966 #pragma omp parallel for simd
2967   for (int i = 0; i < 10; ++i) {
2968 #pragma omp ordered // 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 ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2974     bar();
2975   }
2976 #pragma omp parallel for simd
2977   for (int i = 0; i < 10; ++i) {
2978 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
2979     ++a;
2980   }
2981 #pragma omp parallel for simd
2982   for (int i = 0; i < 10; ++i) {
2983 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2984     ++a;
2985   }
2986 #pragma omp parallel for simd
2987   for (int i = 0; i < 10; ++i) {
2988 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2989     ++a;
2990   }
2991 #pragma omp parallel for simd
2992   for (int i = 0; i < 10; ++i) {
2993 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2994     for (int i = 0; i < 10; ++i)
2995       ;
2996   }
2997 #pragma omp parallel for simd
2998   for (int i = 0; i < 10; ++i) {
2999 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3000     ++a;
3001   }
3002 #pragma omp parallel for simd
3003   for (int i = 0; i < 10; ++i) {
3004 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3005     ++a;
3006   }
3007 #pragma omp parallel for simd
3008   for (int i = 0; i < 10; ++i) {
3009 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3010     ++a;
3011   }
3012 #pragma omp parallel for simd
3013   for (int i = 0; i < 10; ++i) {
3014 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3015   for (int i = 0; i < 10; ++i)
3016     ++a;
3017   }
3018 #pragma omp parallel for simd
3019   for (int i = 0; i < 10; ++i) {
3020 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3021     for (int j = 0; j < 10; ++j)
3022       ;
3023   }
3024 #pragma omp parallel for simd
3025   for (int i = 0; i < 10; ++i) {
3026 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3027     bar();
3028   }
3029 #pragma omp parallel for simd
3030   for (int i = 0; i < 10; ++i) {
3031 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3032     for (int j = 0; j < 10; ++j)
3033       ;
3034   }
3035 #pragma omp parallel for simd
3036   for (int i = 0; i < 10; ++i) {
3037 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3038     for (int j = 0; j < 10; ++j)
3039       ;
3040   }
3041 #pragma omp parallel for simd
3042   for (int i = 0; i < 10; ++i) {
3043 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3044     for (int j = 0; j < 10; ++j)
3045       ;
3046   }
3047 #pragma omp parallel for simd
3048   for (int i = 0; i < 10; ++i) {
3049 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3050     for (int j = 0; j < 10; ++j)
3051       ;
3052   }
3053 #pragma omp parallel for simd
3054   for (int i = 0; i < 10; ++i) {
3055 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3056     for (int j = 0; j < 10; ++j)
3057       ;
3058   }
3059 #pragma omp parallel for simd
3060   for (int i = 0; i < 10; ++i) {
3061 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3062     for (int j = 0; j < 10; ++j)
3063       ;
3064   }
3065 #pragma omp parallel for simd
3066   for (int i = 0; i < 10; ++i) {
3067 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3068     for (int j = 0; j < 10; ++j)
3069       ;
3070   }
3071 #pragma omp parallel for simd
3072   for (int i = 0; i < 10; ++i) {
3073 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3074     for (int j = 0; j < 10; ++j)
3075       ;
3076   }
3077 #pragma omp parallel for simd
3078   for (int i = 0; i < 10; ++i) {
3079 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3080     a++;
3081   }
3082 #pragma omp parallel for simd
3083   for (int i = 0; i < 10; ++i) {
3084 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3085     for (int j = 0; j < 10; ++j)
3086       ;
3087   }
3088 #pragma omp parallel for simd
3089   for (int i = 0; i < 10; ++i) {
3090 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3091     for (int j = 0; j < 10; ++j)
3092       ;
3093   }
3094 #pragma omp parallel for simd
3095   for (int i = 0; i < 10; ++i) {
3096 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3097     for (int j = 0; j < 10; ++j)
3098       ;
3099   }
3100 #pragma omp parallel for simd
3101   for (int i = 0; i < 10; ++i) {
3102 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3103     for (int j = 0; j < 10; ++j)
3104       ;
3105   }
3106 
3107 // PARALLEL MASTER DIRECTIVE
3108 #pragma omp parallel master
3109   {
3110 #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?}}
3111     for (int i = 0; i < 10; ++i)
3112       ;
3113   }
3114 #pragma omp parallel master
3115   {
3116 #pragma omp simd
3117     for (int i = 0; i < 10; ++i)
3118       ;
3119   }
3120 #pragma omp parallel master
3121   {
3122 #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?}}
3123     for (int i = 0; i < 10; ++i)
3124       ;
3125   }
3126 #pragma omp parallel master
3127   {
3128 #pragma omp parallel
3129     for (int i = 0; i < 10; ++i)
3130       ;
3131   }
3132 #pragma omp parallel master
3133   {
3134 #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?}}
3135     {
3136       bar();
3137     }
3138   }
3139 #pragma omp parallel master
3140   {
3141 #pragma omp master // OK, though second 'master' is redundant
3142     {
3143       bar();
3144     }
3145   }
3146 #pragma omp parallel master
3147   {
3148 #pragma omp critical
3149     {
3150       bar();
3151     }
3152   }
3153 #pragma omp parallel master
3154   {
3155 #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?}}
3156     {
3157       bar();
3158     }
3159   }
3160 #pragma omp parallel master
3161   {
3162 #pragma omp parallel
3163     {
3164 #pragma omp parallel master // OK
3165       {
3166         bar();
3167       }
3168 #pragma omp for // OK
3169       for (int i = 0; i < 10; ++i)
3170         ;
3171 #pragma omp for simd // OK
3172       for (int i = 0; i < 10; ++i)
3173         ;
3174 #pragma omp sections // OK
3175       {
3176         bar();
3177       }
3178     }
3179   }
3180 #pragma omp parallel master
3181   {
3182 #pragma omp parallel master // OK
3183       {
3184         bar();
3185       }
3186 #pragma omp parallel
3187     {
3188 #pragma omp for // OK
3189       for (int i = 0; i < 10; ++i)
3190         ;
3191 #pragma omp for simd // OK
3192       for (int i = 0; i < 10; ++i)
3193         ;
3194 #pragma omp sections // OK
3195       {
3196         bar();
3197       }
3198     }
3199   }
3200 #pragma omp parallel master
3201   {
3202 #pragma omp parallel for
3203     for (int i = 0; i < 10; ++i)
3204       ;
3205   }
3206 #pragma omp parallel master
3207   {
3208 #pragma omp parallel for simd
3209     for (int i = 0; i < 10; ++i)
3210       ;
3211   }
3212 #pragma omp parallel master
3213   {
3214 #pragma omp parallel sections
3215     {
3216       bar();
3217     }
3218   }
3219 #pragma omp parallel master
3220   {
3221 #pragma omp task
3222     {
3223       bar();
3224     }
3225   }
3226 #pragma omp parallel master
3227   {
3228 #pragma omp taskyield
3229     bar();
3230   }
3231 #pragma omp parallel master
3232   {
3233 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3234     bar();
3235   }
3236 #pragma omp parallel master
3237   {
3238 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3239     bar();
3240   }
3241 #pragma omp parallel master
3242   {
3243 #pragma omp taskwait
3244     bar();
3245   }
3246 #pragma omp parallel master
3247   {
3248 #pragma omp flush
3249     bar();
3250   }
3251 #pragma omp parallel master
3252   {
3253 #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?}}
3254     bar();
3255   }
3256 #pragma omp parallel master
3257   {
3258 #pragma omp atomic
3259     ++a;
3260   }
3261 #pragma omp parallel master
3262   {
3263 #pragma omp target
3264     ++a;
3265   }
3266 #pragma omp parallel master
3267   {
3268 #pragma omp target parallel
3269     ++a;
3270   }
3271 #pragma omp parallel master
3272   {
3273 #pragma omp target parallel for
3274     for (int i = 0; i < 10; ++i)
3275       ;
3276   }
3277 #pragma omp parallel master
3278   {
3279 #pragma omp target enter data map(to: a)
3280     ++a;
3281   }
3282 #pragma omp parallel master
3283   {
3284 #pragma omp target exit data map(from: a)
3285     ++a;
3286   }
3287 #pragma omp parallel master
3288   {
3289 #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?}}
3290     ++a;
3291   }
3292 #pragma omp parallel master
3293   {
3294 #pragma omp taskloop
3295   for (int i = 0; i < 10; ++i)
3296     ++a;
3297   }
3298 #pragma omp parallel master
3299   {
3300 #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?}}
3301     for (int i = 0; i < 10; ++i)
3302       ;
3303   }
3304 #pragma omp parallel master
3305   {
3306 #pragma omp target update to(a)
3307     bar();
3308   }
3309 #pragma omp parallel master
3310   {
3311 #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?}}
3312     for (int i = 0; i < 10; ++i)
3313       ;
3314   }
3315 #pragma omp parallel master
3316   {
3317 #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?}}
3318     for (int i = 0; i < 10; ++i)
3319       ;
3320   }
3321 #pragma omp parallel master
3322   {
3323 #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?}}
3324     for (int i = 0; i < 10; ++i)
3325       ;
3326   }
3327 #pragma omp parallel master
3328   {
3329 #pragma omp target simd // OK
3330     for (int i = 0; i < 10; ++i)
3331       ;
3332   }
3333 #pragma omp parallel master
3334   {
3335 #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?}}
3336     for (int i = 0; i < 10; ++i)
3337       ;
3338   }
3339 #pragma omp parallel master
3340   {
3341 #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?}}
3342     for (int i = 0; i < 10; ++i)
3343       ;
3344   }
3345 #pragma omp parallel master
3346   {
3347 #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?}}
3348     for (int i = 0; i < 10; ++i)
3349       ;
3350   }
3351 #pragma omp parallel master
3352   {
3353 #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?}}
3354     for (int i = 0; i < 10; ++i)
3355       ;
3356   }
3357 #pragma omp parallel master
3358   {
3359 #pragma omp target teams // OK
3360     a++;
3361   }
3362 #pragma omp parallel master
3363   {
3364 #pragma omp target teams distribute // OK
3365     for (int i = 0; i < 10; ++i)
3366       ;
3367   }
3368 #pragma omp parallel master
3369   {
3370 #pragma omp target teams distribute parallel for // OK
3371     for (int i = 0; i < 10; ++i)
3372       ;
3373   }
3374 #pragma omp parallel master
3375   {
3376 #pragma omp target teams distribute parallel for simd // OK
3377     for (int i = 0; i < 10; ++i)
3378       ;
3379   }
3380 #pragma omp parallel master
3381   {
3382 #pragma omp target teams distribute simd // OK
3383     for (int i = 0; i < 10; ++i)
3384       ;
3385   }
3386 
3387 // PARALLEL MASKED DIRECTIVE
3388 #pragma omp parallel masked
3389   {
3390 #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel masked' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
3391     for (int i = 0; i < 10; ++i)
3392       ;
3393   }
3394 #pragma omp parallel masked
3395   {
3396 #pragma omp simd
3397     for (int i = 0; i < 10; ++i)
3398       ;
3399   }
3400 #pragma omp parallel masked
3401   {
3402 #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel masked' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
3403     for (int i = 0; i < 10; ++i)
3404       ;
3405   }
3406 #pragma omp parallel masked
3407   {
3408 #pragma omp parallel
3409     for (int i = 0; i < 10; ++i)
3410       ;
3411   }
3412 #pragma omp parallel masked
3413   {
3414 #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel masked' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
3415     {
3416       bar();
3417     }
3418   }
3419 #pragma omp parallel masked
3420   {
3421 #pragma omp master // OK, though second 'master' is redundant
3422     {
3423       bar();
3424     }
3425   }
3426 #pragma omp parallel masked
3427   {
3428 #pragma omp critical
3429     {
3430       bar();
3431     }
3432   }
3433 #pragma omp parallel masked
3434   {
3435 #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel masked' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
3436     {
3437       bar();
3438     }
3439   }
3440 #pragma omp parallel master
3441   {
3442 #pragma omp parallel
3443     {
3444 #pragma omp parallel master // OK
3445       {
3446         bar();
3447       }
3448 #pragma omp for // OK
3449       for (int i = 0; i < 10; ++i)
3450         ;
3451 #pragma omp for simd // OK
3452       for (int i = 0; i < 10; ++i)
3453         ;
3454 #pragma omp sections // OK
3455       {
3456         bar();
3457       }
3458     }
3459   }
3460 #pragma omp parallel master
3461   {
3462 #pragma omp parallel master // OK
3463       {
3464         bar();
3465       }
3466 #pragma omp parallel
3467     {
3468 #pragma omp for // OK
3469       for (int i = 0; i < 10; ++i)
3470         ;
3471 #pragma omp for simd // OK
3472       for (int i = 0; i < 10; ++i)
3473         ;
3474 #pragma omp sections // OK
3475       {
3476         bar();
3477       }
3478     }
3479   }
3480 #pragma omp parallel master
3481   {
3482 #pragma omp parallel for
3483     for (int i = 0; i < 10; ++i)
3484       ;
3485   }
3486 #pragma omp parallel master
3487   {
3488 #pragma omp parallel for simd
3489     for (int i = 0; i < 10; ++i)
3490       ;
3491   }
3492 #pragma omp parallel master
3493   {
3494 #pragma omp parallel sections
3495     {
3496       bar();
3497     }
3498   }
3499 #pragma omp parallel master
3500   {
3501 #pragma omp task
3502     {
3503       bar();
3504     }
3505   }
3506 #pragma omp parallel master
3507   {
3508 #pragma omp taskyield
3509     bar();
3510   }
3511 #pragma omp parallel master
3512   {
3513 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3514     bar();
3515   }
3516 #pragma omp parallel master
3517   {
3518 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel master' region}}
3519     bar();
3520   }
3521 #pragma omp parallel master
3522   {
3523 #pragma omp taskwait
3524     bar();
3525   }
3526 #pragma omp parallel master
3527   {
3528 #pragma omp flush
3529     bar();
3530   }
3531 #pragma omp parallel master
3532   {
3533 #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?}}
3534     bar();
3535   }
3536 #pragma omp parallel master
3537   {
3538 #pragma omp atomic
3539     ++a;
3540   }
3541 #pragma omp parallel master
3542   {
3543 #pragma omp target
3544     ++a;
3545   }
3546 #pragma omp parallel master
3547   {
3548 #pragma omp target parallel
3549     ++a;
3550   }
3551 #pragma omp parallel master
3552   {
3553 #pragma omp target parallel for
3554     for (int i = 0; i < 10; ++i)
3555       ;
3556   }
3557 #pragma omp parallel master
3558   {
3559 #pragma omp target enter data map(to: a)
3560     ++a;
3561   }
3562 #pragma omp parallel master
3563   {
3564 #pragma omp target exit data map(from: a)
3565     ++a;
3566   }
3567 #pragma omp parallel master
3568   {
3569 #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?}}
3570     ++a;
3571   }
3572 #pragma omp parallel master
3573   {
3574 #pragma omp taskloop
3575   for (int i = 0; i < 10; ++i)
3576     ++a;
3577   }
3578 #pragma omp parallel master
3579   {
3580 #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?}}
3581     for (int i = 0; i < 10; ++i)
3582       ;
3583   }
3584 #pragma omp parallel master
3585   {
3586 #pragma omp target update to(a)
3587     bar();
3588   }
3589 #pragma omp parallel master
3590   {
3591 #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?}}
3592     for (int i = 0; i < 10; ++i)
3593       ;
3594   }
3595 #pragma omp parallel master
3596   {
3597 #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?}}
3598     for (int i = 0; i < 10; ++i)
3599       ;
3600   }
3601 #pragma omp parallel master
3602   {
3603 #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?}}
3604     for (int i = 0; i < 10; ++i)
3605       ;
3606   }
3607 #pragma omp parallel master
3608   {
3609 #pragma omp target simd // OK
3610     for (int i = 0; i < 10; ++i)
3611       ;
3612   }
3613 #pragma omp parallel master
3614   {
3615 #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?}}
3616     for (int i = 0; i < 10; ++i)
3617       ;
3618   }
3619 #pragma omp parallel master
3620   {
3621 #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?}}
3622     for (int i = 0; i < 10; ++i)
3623       ;
3624   }
3625 #pragma omp parallel master
3626   {
3627 #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?}}
3628     for (int i = 0; i < 10; ++i)
3629       ;
3630   }
3631 #pragma omp parallel master
3632   {
3633 #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?}}
3634     for (int i = 0; i < 10; ++i)
3635       ;
3636   }
3637 #pragma omp parallel master
3638   {
3639 #pragma omp target teams // OK
3640     a++;
3641   }
3642 #pragma omp parallel master
3643   {
3644 #pragma omp target teams distribute // OK
3645     for (int i = 0; i < 10; ++i)
3646       ;
3647   }
3648 #pragma omp parallel master
3649   {
3650 #pragma omp target teams distribute parallel for // OK
3651     for (int i = 0; i < 10; ++i)
3652       ;
3653   }
3654 #pragma omp parallel master
3655   {
3656 #pragma omp target teams distribute parallel for simd // OK
3657     for (int i = 0; i < 10; ++i)
3658       ;
3659   }
3660 #pragma omp parallel master
3661   {
3662 #pragma omp target teams distribute simd // OK
3663     for (int i = 0; i < 10; ++i)
3664       ;
3665   }
3666 // PARALLEL SECTIONS DIRECTIVE
3667 #pragma omp parallel sections
3668   {
3669 #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?}}
3670     for (int i = 0; i < 10; ++i)
3671       ;
3672   }
3673 #pragma omp parallel sections
3674   {
3675 #pragma omp simd
3676     for (int i = 0; i < 10; ++i)
3677       ;
3678   }
3679 #pragma omp parallel sections
3680   {
3681 #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?}}
3682     for (int i = 0; i < 10; ++i)
3683       ;
3684   }
3685 #pragma omp parallel sections
3686   {
3687 #pragma omp parallel
3688     for (int i = 0; i < 10; ++i)
3689       ;
3690   }
3691 #pragma omp parallel sections
3692   {
3693 #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?}}
3694     {
3695       bar();
3696     }
3697   }
3698 #pragma omp parallel sections
3699   {
3700 #pragma omp section
3701     {
3702       bar();
3703     }
3704   }
3705 #pragma omp parallel sections
3706   {
3707 #pragma omp section
3708     {
3709 #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?}}
3710       bar();
3711     }
3712   }
3713 #pragma omp parallel sections
3714   {
3715 #pragma omp section
3716     {
3717 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
3718       bar();
3719     }
3720   }
3721 #pragma omp parallel sections
3722   {
3723 #pragma omp section
3724     {
3725 #pragma omp critical
3726       bar();
3727     }
3728   }
3729 #pragma omp parallel sections
3730   {
3731 #pragma omp parallel
3732     {
3733 #pragma omp single // OK
3734       {
3735         bar();
3736       }
3737 #pragma omp for // OK
3738       for (int i = 0; i < 10; ++i)
3739         ;
3740 #pragma omp for simd // OK
3741       for (int i = 0; i < 10; ++i)
3742         ;
3743 #pragma omp sections // OK
3744       {
3745         bar();
3746       }
3747     }
3748   }
3749 #pragma omp parallel sections
3750   {
3751 #pragma omp parallel for
3752     for (int i = 0; i < 10; ++i)
3753       ;
3754   }
3755 #pragma omp parallel sections
3756   {
3757 #pragma omp parallel for simd
3758     for (int i = 0; i < 10; ++i)
3759       ;
3760   }
3761 #pragma omp parallel sections
3762   {
3763 #pragma omp parallel sections
3764     {
3765       bar();
3766     }
3767   }
3768 #pragma omp parallel sections
3769   {
3770 #pragma omp task
3771     {
3772       bar();
3773     }
3774   }
3775 #pragma omp parallel sections
3776   {
3777 #pragma omp taskyield
3778   }
3779 #pragma omp parallel sections
3780   {
3781 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3782   }
3783 #pragma omp parallel sections
3784   {
3785 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3786   }
3787 #pragma omp parallel sections
3788   {
3789 #pragma omp taskwait
3790   }
3791 #pragma omp parallel sections
3792   {
3793 #pragma omp flush
3794   }
3795 #pragma omp parallel sections
3796   {
3797 #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?}}
3798     bar();
3799   }
3800 #pragma omp parallel sections
3801   {
3802 #pragma omp atomic
3803     ++a;
3804   }
3805 #pragma omp parallel sections
3806   {
3807 #pragma omp target
3808     ++a;
3809   }
3810 #pragma omp parallel sections
3811   {
3812 #pragma omp target parallel
3813     ++a;
3814   }
3815 #pragma omp parallel sections
3816   {
3817 #pragma omp target parallel for
3818     for (int i = 0; i < 10; ++i)
3819       ;
3820   }
3821 #pragma omp parallel sections
3822   {
3823 #pragma omp target enter data map(to: a)
3824   }
3825 #pragma omp parallel sections
3826   {
3827 #pragma omp target exit data map(from: a)
3828   }
3829 #pragma omp parallel sections
3830   {
3831 #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?}}
3832     ++a;
3833   }
3834 #pragma omp parallel sections
3835   {
3836 #pragma omp taskloop
3837   for (int i = 0; i < 10; ++i)
3838     ++a;
3839   }
3840 #pragma omp parallel sections
3841   {
3842 #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?}}
3843     for (int i = 0; i < 10; ++i)
3844       ;
3845   }
3846 #pragma omp parallel sections
3847   {
3848 #pragma omp target update to(a)
3849   }
3850 #pragma omp parallel sections
3851   {
3852 #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?}}
3853     for (int i = 0; i < 10; ++i)
3854       ;
3855   }
3856 #pragma omp parallel sections
3857   {
3858 #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?}}
3859     for (int i = 0; i < 10; ++i)
3860       ;
3861   }
3862 #pragma omp parallel sections
3863   {
3864 #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?}}
3865     for (int i = 0; i < 10; ++i)
3866       ;
3867   }
3868 #pragma omp parallel sections
3869   {
3870 #pragma omp target simd // OK
3871     for (int i = 0; i < 10; ++i)
3872       ;
3873   }
3874 #pragma omp parallel sections
3875   {
3876 #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?}}
3877     for (int i = 0; i < 10; ++i)
3878       ;
3879   }
3880 #pragma omp parallel sections
3881   {
3882 #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?}}
3883     for (int i = 0; i < 10; ++i)
3884       ;
3885   }
3886 #pragma omp parallel sections
3887   {
3888 #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?}}
3889     for (int i = 0; i < 10; ++i)
3890       ;
3891   }
3892 #pragma omp parallel sections
3893   {
3894 #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?}}
3895     for (int i = 0; i < 10; ++i)
3896       ;
3897   }
3898 #pragma omp parallel sections
3899   {
3900 #pragma omp target teams // OK
3901     a++;
3902   }
3903 #pragma omp parallel sections
3904   {
3905 #pragma omp target teams distribute // OK
3906     for (int i = 0; i < 10; ++i)
3907       ;
3908   }
3909 #pragma omp parallel sections
3910   {
3911 #pragma omp target teams distribute parallel for // OK
3912     for (int i = 0; i < 10; ++i)
3913       ;
3914   }
3915 #pragma omp parallel sections
3916   {
3917 #pragma omp target teams distribute parallel for simd // OK
3918     for (int i = 0; i < 10; ++i)
3919       ;
3920   }
3921 #pragma omp parallel sections
3922   {
3923 #pragma omp target teams distribute simd // OK
3924     for (int i = 0; i < 10; ++i)
3925       ;
3926   }
3927 
3928 // TASK DIRECTIVE
3929 #pragma omp task
3930 #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?}}
3931   for (int i = 0; i < 10; ++i)
3932     ;
3933 #pragma omp task
3934 #pragma omp simd
3935   for (int i = 0; i < 10; ++i)
3936     ;
3937 #pragma omp task
3938 #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?}}
3939   for (int i = 0; i < 10; ++i)
3940     ;
3941 #pragma omp task
3942 #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?}}
3943   {
3944     bar();
3945   }
3946 #pragma omp task
3947 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
3948   {
3949     bar();
3950   }
3951 #pragma omp task
3952 #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?}}
3953   bar();
3954 #pragma omp task
3955 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
3956   bar();
3957 #pragma omp task
3958 #pragma omp critical
3959   bar();
3960 
3961 #pragma omp task
3962 #pragma omp parallel for
3963   for (int i = 0; i < 10; ++i)
3964     ;
3965 #pragma omp task
3966 #pragma omp parallel for simd
3967   for (int i = 0; i < 10; ++i)
3968     ;
3969 #pragma omp task
3970 #pragma omp parallel sections
3971   {
3972     bar();
3973   }
3974 #pragma omp task
3975 #pragma omp task
3976   {
3977     bar();
3978   }
3979 #pragma omp task
3980   {
3981 #pragma omp taskyield
3982     bar();
3983   }
3984 #pragma omp task
3985   {
3986 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
3987     bar();
3988   }
3989 #pragma omp task
3990   {
3991 #pragma omp scan // expected-error {{region cannot be closely nested inside 'task' region}}
3992     bar();
3993   }
3994 #pragma omp task
3995   {
3996 #pragma omp taskwait
3997     bar();
3998   }
3999 #pragma omp task
4000   {
4001 #pragma omp flush
4002     bar();
4003   }
4004 #pragma omp task
4005   {
4006 #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?}}
4007     bar();
4008   }
4009 #pragma omp task
4010   {
4011 #pragma omp atomic
4012     ++a;
4013   }
4014 #pragma omp task
4015   {
4016 #pragma omp target
4017     ++a;
4018   }
4019 #pragma omp task
4020   {
4021 #pragma omp target parallel
4022     ++a;
4023   }
4024 #pragma omp task
4025 #pragma omp target parallel for
4026   for (int i = 0; i < 10; ++i)
4027     ;
4028 #pragma omp task
4029   {
4030 #pragma omp target enter data map(to: a)
4031     ++a;
4032   }
4033 #pragma omp task
4034   {
4035 #pragma omp target exit data map(from: a)
4036     ++a;
4037   }
4038 #pragma omp task
4039   {
4040 #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?}}
4041     ++a;
4042   }
4043 #pragma omp task
4044   {
4045 #pragma omp taskloop
4046   for (int i = 0; i < 10; ++i)
4047     ++a;
4048   }
4049 #pragma omp task
4050   {
4051 #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?}}
4052     for (int i = 0; i < 10; ++i)
4053       ;
4054   }
4055 #pragma omp task
4056   {
4057 #pragma omp target update to(a)
4058     bar();
4059   }
4060 #pragma omp task
4061   {
4062 #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?}}
4063     for (int i = 0; i < 10; ++i)
4064       ;
4065   }
4066 #pragma omp task
4067   {
4068 #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?}}
4069     for (int i = 0; i < 10; ++i)
4070       ;
4071   }
4072 #pragma omp task
4073   {
4074 #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?}}
4075     for (int i = 0; i < 10; ++i)
4076       ;
4077   }
4078 #pragma omp task
4079   {
4080 #pragma omp target simd // OK
4081     for (int i = 0; i < 10; ++i)
4082       ;
4083   }
4084 #pragma omp task
4085   {
4086 #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?}}
4087     for (int i = 0; i < 10; ++i)
4088       ;
4089   }
4090 #pragma omp task
4091   {
4092 #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?}}
4093     for (int i = 0; i < 10; ++i)
4094       ;
4095   }
4096 #pragma omp task
4097   {
4098 #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?}}
4099     for (int i = 0; i < 10; ++i)
4100       ;
4101   }
4102 #pragma omp task
4103   {
4104 #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?}}
4105     for (int i = 0; i < 10; ++i)
4106       ;
4107   }
4108 #pragma omp task
4109   {
4110 #pragma omp target teams // OK
4111     a++;
4112   }
4113 #pragma omp task
4114   {
4115 #pragma omp target teams distribute // OK
4116     for (int i = 0; i < 10; ++i)
4117       ;
4118   }
4119 #pragma omp task
4120   {
4121 #pragma omp target teams distribute parallel for // OK
4122     for (int i = 0; i < 10; ++i)
4123       ;
4124   }
4125 #pragma omp task
4126   {
4127 #pragma omp target teams distribute parallel for simd // OK
4128     for (int i = 0; i < 10; ++i)
4129       ;
4130   }
4131 #pragma omp task
4132   {
4133 #pragma omp target teams distribute simd // OK
4134     for (int i = 0; i < 10; ++i)
4135       ;
4136   }
4137 
4138 // ORDERED DIRECTIVE
4139 #pragma omp ordered
4140   {
4141 #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?}}
4142     for (int i = 0; i < 10; ++i)
4143       ;
4144   }
4145 #pragma omp ordered
4146   {
4147 #pragma omp simd
4148     for (int i = 0; i < 10; ++i)
4149       ;
4150   }
4151 #pragma omp ordered
4152   {
4153 #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?}}
4154     for (int i = 0; i < 10; ++i)
4155       ;
4156   }
4157 #pragma omp ordered
4158   {
4159 #pragma omp parallel
4160     for (int i = 0; i < 10; ++i)
4161       ;
4162   }
4163 #pragma omp ordered
4164   {
4165 #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?}}
4166     {
4167       bar();
4168     }
4169   }
4170 #pragma omp ordered
4171   {
4172 #pragma omp master // OK, though second 'ordered' is redundant
4173     {
4174       bar();
4175     }
4176   }
4177 #pragma omp ordered
4178   {
4179 #pragma omp critical
4180     {
4181       bar();
4182     }
4183   }
4184 #pragma omp ordered
4185   {
4186 #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?}}
4187     {
4188       bar();
4189     }
4190   }
4191 #pragma omp ordered
4192   {
4193 #pragma omp parallel for ordered
4194     for (int j = 0; j < 10; ++j) {
4195 #pragma omp ordered // OK
4196       {
4197         bar();
4198       }
4199     }
4200   }
4201 #pragma omp ordered
4202   {
4203 #pragma omp parallel for simd ordered
4204     for (int j = 0; j < 10; ++j) {
4205 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4206       {
4207         bar();
4208       }
4209     }
4210   }
4211 #pragma omp ordered
4212   {
4213 #pragma omp parallel for simd ordered
4214     for (int j = 0; j < 10; ++j) {
4215 #pragma omp ordered simd
4216       {
4217         bar();
4218       }
4219     }
4220   }
4221 #pragma omp ordered
4222   {
4223 #pragma omp parallel for
4224     for (int i = 0; i < 10; ++i)
4225       ;
4226   }
4227 #pragma omp ordered
4228   {
4229 #pragma omp parallel for simd
4230     for (int i = 0; i < 10; ++i)
4231       ;
4232   }
4233 #pragma omp ordered
4234   {
4235 #pragma omp parallel sections
4236     {
4237       bar();
4238     }
4239   }
4240 #pragma omp ordered
4241   {
4242 #pragma omp task
4243     {
4244       bar();
4245     }
4246   }
4247 #pragma omp ordered
4248   {
4249 #pragma omp taskyield
4250     bar();
4251   }
4252 #pragma omp ordered
4253   {
4254 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
4255     bar();
4256   }
4257 #pragma omp ordered
4258   {
4259 #pragma omp scan // expected-error {{region cannot be closely nested inside 'ordered' region}}
4260     bar();
4261   }
4262 #pragma omp ordered
4263   {
4264 #pragma omp taskwait
4265     bar();
4266   }
4267 #pragma omp ordered
4268   {
4269 #pragma omp flush
4270     bar();
4271   }
4272 #pragma omp ordered
4273   {
4274 #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?}}
4275     bar();
4276   }
4277 #pragma omp ordered
4278   {
4279 #pragma omp atomic
4280     ++a;
4281   }
4282 #pragma omp ordered
4283   {
4284 #pragma omp target
4285     ++a;
4286   }
4287 #pragma omp ordered
4288   {
4289 #pragma omp target parallel
4290     ++a;
4291   }
4292 #pragma omp ordered
4293   {
4294 #pragma omp target parallel for ordered
4295     for (int j = 0; j < 10; ++j) {
4296 #pragma omp ordered // OK
4297       {
4298         bar();
4299       }
4300     }
4301   }
4302 #pragma omp ordered
4303   {
4304 #pragma omp target parallel for
4305     for (int i = 0; i < 10; ++i)
4306       ;
4307   }
4308 #pragma omp ordered
4309   {
4310 #pragma omp target enter data map(to: a)
4311     ++a;
4312   }
4313 #pragma omp ordered
4314   {
4315 #pragma omp target exit data map(from: a)
4316     ++a;
4317   }
4318 #pragma omp ordered
4319   {
4320 #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?}}
4321     ++a;
4322   }
4323 #pragma omp ordered
4324   {
4325 #pragma omp taskloop
4326   for (int i = 0; i < 10; ++i)
4327     ++a;
4328   }
4329 #pragma omp ordered
4330   {
4331 #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?}}
4332     for (int i = 0; i < 10; ++i)
4333       ;
4334   }
4335 #pragma omp ordered
4336   {
4337     bar();
4338 #pragma omp target update to(a)
4339     bar();
4340   }
4341 #pragma omp ordered
4342   {
4343 #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?}}
4344     for (int i = 0; i < 10; ++i)
4345       ;
4346   }
4347 #pragma omp ordered
4348   {
4349 #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?}}
4350     for (int i = 0; i < 10; ++i)
4351       ;
4352   }
4353 #pragma omp ordered
4354   {
4355 #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?}}
4356     for (int i = 0; i < 10; ++i)
4357       ;
4358   }
4359 #pragma omp ordered
4360   {
4361 #pragma omp target simd // OK
4362     for (int i = 0; i < 10; ++i)
4363       ;
4364   }
4365 #pragma omp ordered
4366   {
4367 #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?}}
4368     for (int i = 0; i < 10; ++i)
4369       ;
4370   }
4371 #pragma omp ordered
4372   {
4373 #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?}}
4374     for (int i = 0; i < 10; ++i)
4375       ;
4376   }
4377 #pragma omp ordered
4378   {
4379 #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?}}
4380     for (int i = 0; i < 10; ++i)
4381       ;
4382   }
4383 #pragma omp ordered
4384   {
4385 #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?}}
4386     for (int i = 0; i < 10; ++i)
4387       ;
4388   }
4389 #pragma omp ordered
4390   {
4391 #pragma omp target teams // OK
4392     a++;
4393   }
4394 #pragma omp ordered
4395   {
4396 #pragma omp target teams distribute // OK
4397     for (int i = 0; i < 10; ++i)
4398       ;
4399   }
4400 #pragma omp ordered
4401   {
4402 #pragma omp target teams distribute parallel for // OK
4403     for (int i = 0; i < 10; ++i)
4404       ;
4405   }
4406 #pragma omp ordered
4407   {
4408 #pragma omp target teams distribute parallel for simd // OK
4409     for (int i = 0; i < 10; ++i)
4410       ;
4411   }
4412 #pragma omp ordered
4413   {
4414 #pragma omp target teams distribute simd // OK
4415     for (int i = 0; i < 10; ++i)
4416       ;
4417   }
4418 
4419 // ATOMIC DIRECTIVE
4420 #pragma omp atomic
4421   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4422   // expected-note@+1 {{expected an expression statement}}
4423   {
4424 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4425     for (int i = 0; i < 10; ++i)
4426       ;
4427   }
4428 #pragma omp atomic
4429   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4430   // expected-note@+1 {{expected an expression statement}}
4431   {
4432 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4433     for (int i = 0; i < 10; ++i)
4434       ;
4435   }
4436 #pragma omp atomic
4437   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4438   // expected-note@+1 {{expected an expression statement}}
4439   {
4440 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4441     for (int i = 0; i < 10; ++i)
4442       ;
4443   }
4444 #pragma omp atomic
4445   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4446   // expected-note@+1 {{expected an expression statement}}
4447   {
4448 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4449     for (int i = 0; i < 10; ++i)
4450       ;
4451   }
4452 #pragma omp atomic
4453   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4454   // expected-note@+1 {{expected an expression statement}}
4455   {
4456 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4457     {
4458       bar();
4459     }
4460   }
4461 #pragma omp atomic
4462   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4463   // expected-note@+1 {{expected an expression statement}}
4464   {
4465 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4466     {
4467       bar();
4468     }
4469   }
4470 #pragma omp atomic
4471   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4472   // expected-note@+1 {{expected an expression statement}}
4473   {
4474 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4475     {
4476       bar();
4477     }
4478   }
4479 #pragma omp atomic
4480   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4481   // expected-note@+1 {{expected an expression statement}}
4482   {
4483 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4484     {
4485       bar();
4486     }
4487   }
4488 #pragma omp atomic
4489   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4490   // expected-note@+1 {{expected an expression statement}}
4491   {
4492 #pragma omp parallel master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4493     {
4494       bar();
4495     }
4496   }
4497 #pragma omp atomic
4498   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4499   // expected-note@+1 {{expected an expression statement}}
4500   {
4501 #pragma omp parallel masked // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4502     {
4503       bar();
4504     }
4505   }
4506 #pragma omp atomic
4507   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4508   // expected-note@+1 {{expected an expression statement}}
4509   {
4510 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4511     {
4512       bar();
4513     }
4514   }
4515 #pragma omp atomic
4516   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4517   // expected-note@+1 {{expected an expression statement}}
4518   {
4519 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4520     for (int i = 0; i < 10; ++i)
4521       ;
4522   }
4523 #pragma omp atomic
4524   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4525   // expected-note@+1 {{expected an expression statement}}
4526   {
4527 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4528     for (int i = 0; i < 10; ++i)
4529       ;
4530   }
4531 #pragma omp atomic
4532   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4533   // expected-note@+1 {{expected an expression statement}}
4534   {
4535 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4536     {
4537       bar();
4538     }
4539   }
4540 #pragma omp atomic
4541   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4542   // expected-note@+1 {{expected an expression statement}}
4543   {
4544 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4545     {
4546       bar();
4547     }
4548   }
4549 #pragma omp atomic
4550   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4551   // expected-note@+1 {{expected an expression statement}}
4552   {
4553 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4554     bar();
4555   }
4556 #pragma omp atomic
4557   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4558   // expected-note@+1 {{expected an expression statement}}
4559   {
4560 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4561     bar();
4562   }
4563 #pragma omp atomic
4564   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4565   // expected-note@+1 {{expected an expression statement}}
4566   {
4567 #pragma omp scan // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4568     bar();
4569   }
4570 #pragma omp atomic
4571   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4572   // expected-note@+1 {{expected an expression statement}}
4573   {
4574 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4575     bar();
4576   }
4577 #pragma omp atomic
4578   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4579   // expected-note@+1 {{expected an expression statement}}
4580   {
4581 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4582     bar();
4583   }
4584 #pragma omp atomic
4585   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4586   // expected-note@+1 {{expected an expression statement}}
4587   {
4588 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4589     bar();
4590   }
4591 #pragma omp atomic
4592   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4593   // expected-note@+1 {{expected an expression statement}}
4594   {
4595 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4596     ++a;
4597   }
4598 #pragma omp atomic
4599   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4600   // expected-note@+1 {{expected an expression statement}}
4601   {
4602 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4603     ++a;
4604   }
4605 #pragma omp atomic
4606   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4607   // expected-note@+1 {{expected an expression statement}}
4608   {
4609 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4610     ++a;
4611   }
4612 #pragma omp atomic
4613   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4614   // expected-note@+1 {{expected an expression statement}}
4615   {
4616 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4617     for (int i = 0; i < 10; ++i)
4618       ;
4619   }
4620 #pragma omp atomic
4621   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4622   // expected-note@+1 {{expected an expression statement}}
4623   {
4624 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4625     ++a;
4626   }
4627 #pragma omp atomic
4628   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4629   // expected-note@+1 {{expected an expression statement}}
4630   {
4631 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4632     ++a;
4633   }
4634 #pragma omp atomic
4635   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4636   // expected-note@+1 {{expected an expression statement}}
4637   {
4638 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4639     ++a;
4640   }
4641 #pragma omp atomic
4642   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4643   // expected-note@+1 {{expected an expression statement}}
4644   {
4645 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4646   for (int i = 0; i < 10; ++i)
4647     ++a;
4648   }
4649 #pragma omp atomic
4650   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4651   // expected-note@+1 {{expected an expression statement}}
4652   {
4653 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4654     for (int i = 0; i < 10; ++i)
4655       ;
4656   }
4657 #pragma omp atomic
4658   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4659   // expected-note@+1 {{expected an expression statement}}
4660   {
4661 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4662     bar();
4663   }
4664 #pragma omp atomic
4665   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4666   // expected-note@+1 {{expected an expression statement}}
4667   {
4668 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4669     for (int i = 0; i < 10; ++i)
4670       ;
4671   }
4672 #pragma omp atomic
4673   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4674   // expected-note@+1 {{expected an expression statement}}
4675   {
4676 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4677     for (int i = 0; i < 10; ++i)
4678       ;
4679   }
4680 #pragma omp atomic
4681   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4682   // expected-note@+1 {{expected an expression statement}}
4683   {
4684 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4685     for (int i = 0; i < 10; ++i)
4686       ;
4687   }
4688 #pragma omp atomic
4689   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4690   // expected-note@+1 {{expected an expression statement}}
4691   {
4692 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4693     for (int i = 0; i < 10; ++i)
4694       ;
4695   }
4696 #pragma omp atomic
4697   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4698   // expected-note@+1 {{expected an expression statement}}
4699   {
4700 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4701     for (int i = 0; i < 10; ++i)
4702       ;
4703   }
4704 #pragma omp atomic
4705   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4706   // expected-note@+1 {{expected an expression statement}}
4707   {
4708 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4709     for (int i = 0; i < 10; ++i)
4710       ;
4711   }
4712 #pragma omp atomic
4713   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4714   // expected-note@+1 {{expected an expression statement}}
4715   {
4716 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4717     for (int i = 0; i < 10; ++i)
4718       ;
4719   }
4720 #pragma omp atomic
4721   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4722   // expected-note@+1 {{expected an expression statement}}
4723   {
4724 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4725     for (int i = 0; i < 10; ++i)
4726       ;
4727   }
4728 #pragma omp atomic
4729   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4730   // expected-note@+1 {{expected an expression statement}}
4731   {
4732 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4733     a++;
4734   }
4735 #pragma omp atomic
4736   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4737   // expected-note@+1 {{expected an expression statement}}
4738   {
4739 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4740     for (int i = 0; i < 10; ++i)
4741       ;
4742   }
4743 #pragma omp atomic
4744   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4745   // expected-note@+1 {{expected an expression statement}}
4746   {
4747 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4748     for (int i = 0; i < 10; ++i)
4749       ;
4750   }
4751 #pragma omp atomic
4752   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4753   // expected-note@+1 {{expected an expression statement}}
4754   {
4755 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4756     for (int i = 0; i < 10; ++i)
4757       ;
4758   }
4759 #pragma omp atomic
4760   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
4761   // expected-note@+1 {{expected an expression statement}}
4762   {
4763 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
4764     for (int i = 0; i < 10; ++i)
4765       ;
4766   }
4767 
4768 // TARGET DIRECTIVE
4769 #pragma omp target
4770 #pragma omp parallel
4771   bar();
4772 #pragma omp target
4773 #pragma omp for
4774   for (int i = 0; i < 10; ++i)
4775     ;
4776 #pragma omp target
4777 #pragma omp simd
4778   for (int i = 0; i < 10; ++i)
4779     ;
4780 #pragma omp target
4781 #pragma omp for simd
4782   for (int i = 0; i < 10; ++i)
4783     ;
4784 #pragma omp target
4785 #pragma omp sections
4786   {
4787     bar();
4788   }
4789 #pragma omp target
4790 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
4791   {
4792     bar();
4793   }
4794 #pragma omp target
4795 #pragma omp single
4796   bar();
4797 
4798 #pragma omp target
4799 #pragma omp master
4800   {
4801     bar();
4802   }
4803 #pragma omp target
4804 #pragma omp critical
4805   {
4806     bar();
4807   }
4808 #pragma omp target
4809 #pragma omp parallel for
4810   for (int i = 0; i < 10; ++i)
4811     ;
4812 #pragma omp target
4813 #pragma omp parallel for simd
4814   for (int i = 0; i < 10; ++i)
4815     ;
4816 #pragma omp target
4817 #pragma omp parallel sections
4818   {
4819     bar();
4820   }
4821 #pragma omp target
4822 #pragma omp task
4823   {
4824     bar();
4825   }
4826 #pragma omp target
4827   {
4828 #pragma omp taskyield
4829     bar();
4830   }
4831 #pragma omp target
4832   {
4833 #pragma omp barrier
4834     bar();
4835   }
4836 #pragma omp target
4837   {
4838 #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?}}
4839     bar();
4840   }
4841 #pragma omp target
4842   {
4843 #pragma omp taskwait
4844     bar();
4845   }
4846 #pragma omp target
4847   {
4848 #pragma omp flush
4849     bar();
4850   }
4851 #pragma omp target
4852   {
4853 #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?}}
4854     bar();
4855   }
4856 #pragma omp target
4857   {
4858 #pragma omp atomic
4859     ++a;
4860   }
4861 #pragma omp target
4862   {
4863 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4864     ++a;
4865   }
4866 #pragma omp target
4867   {
4868 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4869     ++a;
4870   }
4871 #pragma omp target
4872 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4873   for (int i = 0; i < 10; ++i)
4874     ;
4875 #pragma omp target
4876   {
4877 #pragma omp teams
4878     ++a;
4879   }
4880 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4881   {
4882 #pragma omp teams // expected-note {{directive outside teams construct here}}
4883     ++a;
4884 #pragma omp teams // expected-note {{nested teams construct here}}
4885     ++a;
4886   }
4887 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4888   {
4889     ++a;           // expected-note {{statement outside teams construct here}}
4890 #pragma omp teams  // expected-note {{nested teams construct here}}
4891     ++a;
4892   }
4893 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4894   {
4895     while (0)      // expected-note {{statement outside teams construct here}}
4896 #pragma omp teams  // expected-note {{nested teams construct here}}
4897     ++a;
4898   }
4899 #pragma omp target
4900   {
4901 #pragma omp taskloop
4902   for (int i = 0; i < 10; ++i)
4903     ++a;
4904   }
4905 #pragma omp target
4906   {
4907 #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?}}
4908     for (int i = 0; i < 10; ++i)
4909       ;
4910   }
4911 #pragma omp target
4912   {
4913 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4914   }
4915 #pragma omp target
4916   {
4917 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4918   }
4919 #pragma omp target
4920   {
4921 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4922   }
4923 #pragma omp target
4924   {
4925 #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?}}
4926     for (int i = 0; i < 10; ++i)
4927       ;
4928   }
4929 #pragma omp target
4930   {
4931 #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?}}
4932     for (int i = 0; i < 10; ++i)
4933       ;
4934   }
4935 #pragma omp target
4936   {
4937 #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?}}
4938     for (int i = 0; i < 10; ++i)
4939       ;
4940   }
4941 #pragma omp target
4942   {
4943 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4944     for (int i = 0; i < 10; ++i)
4945       ;
4946   }
4947 #pragma omp target
4948   {
4949 #pragma omp teams distribute // OK
4950     for (int i = 0; i < 10; ++i)
4951       ;
4952   }
4953 #pragma omp target
4954   {
4955 #pragma omp teams distribute simd // OK
4956     for (int i = 0; i < 10; ++i)
4957       ;
4958   }
4959 #pragma omp target
4960   {
4961 #pragma omp teams distribute parallel for simd // OK
4962     for (int i = 0; i < 10; ++i)
4963       ;
4964   }
4965 #pragma omp target
4966   {
4967 #pragma omp teams distribute parallel for // OK
4968     for (int i = 0; i < 10; ++i)
4969       ;
4970   }
4971 #pragma omp target
4972   {
4973 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4974     for (int i = 0; i < 10; ++i)
4975       ;
4976   }
4977 #pragma omp target
4978   {
4979 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4980     for (int i = 0; i < 10; ++i)
4981       ;
4982   }
4983 #pragma omp target
4984   {
4985 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4986     for (int i = 0; i < 10; ++i)
4987       ;
4988   }
4989 #pragma omp target
4990   {
4991 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4992     for (int i = 0; i < 10; ++i)
4993       ;
4994   }
4995 #pragma omp target
4996   {
4997 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4998     for (int i = 0; i < 10; ++i)
4999       ;
5000   }
5001 
5002 // TARGET PARALLEL DIRECTIVE
5003 #pragma omp target parallel
5004 #pragma omp parallel
5005   bar();
5006 #pragma omp target parallel
5007 #pragma omp for
5008   for (int i = 0; i < 10; ++i)
5009     ;
5010 #pragma omp target parallel
5011 #pragma omp simd
5012   for (int i = 0; i < 10; ++i)
5013     ;
5014 #pragma omp target parallel
5015 #pragma omp for simd
5016   for (int i = 0; i < 10; ++i)
5017     ;
5018 #pragma omp target parallel
5019 #pragma omp sections
5020   {
5021     bar();
5022   }
5023 #pragma omp target parallel
5024 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
5025   {
5026     bar();
5027   }
5028 #pragma omp target parallel
5029 #pragma omp single
5030   bar();
5031 
5032 #pragma omp target parallel
5033 #pragma omp master
5034   {
5035     bar();
5036   }
5037 #pragma omp target
5038 #pragma omp parallel master
5039   {
5040     bar();
5041   }
5042 #pragma omp target
5043 #pragma omp parallel masked
5044   {
5045     bar();
5046   }
5047 #pragma omp target parallel
5048 #pragma omp critical
5049   {
5050     bar();
5051   }
5052 #pragma omp target parallel
5053 #pragma omp parallel for
5054   for (int i = 0; i < 10; ++i)
5055     ;
5056 #pragma omp target parallel
5057 #pragma omp parallel for simd
5058   for (int i = 0; i < 10; ++i)
5059     ;
5060 #pragma omp target parallel
5061 #pragma omp parallel sections
5062   {
5063     bar();
5064   }
5065 #pragma omp target parallel
5066 #pragma omp task
5067   {
5068     bar();
5069   }
5070 #pragma omp target parallel
5071   {
5072 #pragma omp taskyield
5073     bar();
5074   }
5075 #pragma omp target parallel
5076   {
5077 #pragma omp barrier
5078     bar();
5079   }
5080 #pragma omp target parallel
5081   {
5082 #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?}}
5083     bar();
5084   }
5085 #pragma omp target parallel
5086   {
5087 #pragma omp taskwait
5088     bar();
5089   }
5090 #pragma omp target parallel
5091   {
5092 #pragma omp flush
5093     bar();
5094   }
5095 #pragma omp target parallel
5096   {
5097 #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?}}
5098     bar();
5099   }
5100 #pragma omp target parallel
5101   {
5102 #pragma omp atomic
5103     ++a;
5104   }
5105 #pragma omp target parallel
5106   {
5107 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
5108     ++a;
5109   }
5110 #pragma omp target parallel
5111   {
5112 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
5113     ++a;
5114   }
5115 #pragma omp target parallel
5116 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
5117   for (int i = 0; i < 10; ++i)
5118     ;
5119 #pragma omp target parallel
5120   {
5121 #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?}}
5122     ++a;
5123   }
5124 #pragma omp target parallel
5125   {
5126     ++a;
5127 #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?}}
5128     ++a;
5129   }
5130 #pragma omp target parallel
5131   {
5132 #pragma omp taskloop
5133   for (int i = 0; i < 10; ++i)
5134     ++a;
5135   }
5136 #pragma omp target parallel
5137   {
5138 #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?}}
5139     for (int i = 0; i < 10; ++i)
5140       ;
5141   }
5142 #pragma omp target parallel
5143   {
5144 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
5145   }
5146 #pragma omp target parallel
5147   {
5148 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
5149   }
5150 #pragma omp target parallel
5151   {
5152 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
5153   }
5154 #pragma omp target parallel
5155   {
5156 #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?}}
5157     for (int i = 0; i < 10; ++i)
5158       ;
5159   }
5160 #pragma omp target parallel
5161   {
5162 #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?}}
5163     for (int i = 0; i < 10; ++i)
5164       ;
5165   }
5166 #pragma omp target parallel
5167   {
5168 #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?}}
5169     for (int i = 0; i < 10; ++i)
5170       ;
5171   }
5172 #pragma omp target parallel
5173   {
5174 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
5175     for (int i = 0; i < 10; ++i)
5176       ;
5177   }
5178 #pragma omp target parallel
5179   {
5180 #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?}}
5181     for (int i = 0; i < 10; ++i)
5182       ;
5183   }
5184 #pragma omp target parallel
5185   {
5186 #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?}}
5187     for (int i = 0; i < 10; ++i)
5188       ;
5189   }
5190 #pragma omp target parallel
5191   {
5192 #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?}}
5193     for (int i = 0; i < 10; ++i)
5194       ;
5195   }
5196 #pragma omp target parallel
5197   {
5198 #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?}}
5199     for (int i = 0; i < 10; ++i)
5200       ;
5201   }
5202 #pragma omp target parallel
5203   {
5204 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
5205     a++;
5206   }
5207 #pragma omp target parallel
5208   {
5209 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
5210     for (int i = 0; i < 10; ++i)
5211       ;
5212   }
5213 #pragma omp target parallel
5214   {
5215 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
5216     for (int i = 0; i < 10; ++i)
5217       ;
5218   }
5219 #pragma omp target parallel
5220   {
5221 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
5222     for (int i = 0; i < 10; ++i)
5223       ;
5224   }
5225 #pragma omp target parallel
5226   {
5227 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
5228     for (int i = 0; i < 10; ++i)
5229       ;
5230   }
5231 
5232 // TARGET PARALLEL FOR DIRECTIVE
5233 #pragma omp target parallel for
5234   for (int i = 0; i < 10; ++i) {
5235 #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?}}
5236     for (int i = 0; i < 10; ++i)
5237       ;
5238   }
5239 #pragma omp target parallel for
5240   for (int i = 0; i < 10; ++i) {
5241 #pragma omp simd
5242     for (int i = 0; i < 10; ++i)
5243       ;
5244   }
5245 #pragma omp target parallel for
5246   for (int i = 0; i < 10; ++i) {
5247 #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?}}
5248     for (int i = 0; i < 10; ++i)
5249       ;
5250   }
5251 #pragma omp target parallel for
5252   for (int i = 0; i < 10; ++i) {
5253 #pragma omp parallel
5254     for (int i = 0; i < 10; ++i)
5255       ;
5256   }
5257 #pragma omp target parallel for
5258   for (int i = 0; i < 10; ++i) {
5259 #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?}}
5260     {
5261       bar();
5262     }
5263   }
5264 #pragma omp target parallel for
5265   for (int i = 0; i < 10; ++i) {
5266 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
5267     {
5268       bar();
5269     }
5270   }
5271 #pragma omp target parallel for
5272   for (int i = 0; i < 10; ++i) {
5273 #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?}}
5274     {
5275       bar();
5276     }
5277   }
5278 
5279 #pragma omp target parallel for
5280   for (int i = 0; i < 10; ++i) {
5281 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
5282     {
5283       bar();
5284     }
5285   }
5286 
5287 #pragma omp target parallel for
5288   for (int i = 0; i < 10; ++i) {
5289 #pragma omp critical
5290     {
5291       bar();
5292     }
5293   }
5294 
5295 #pragma omp target parallel for
5296   for (int i = 0; i < 10; ++i) {
5297 #pragma omp parallel
5298     {
5299 #pragma omp single // OK
5300       {
5301         bar();
5302       }
5303 #pragma omp for // OK
5304       for (int i = 0; i < 10; ++i)
5305         ;
5306 #pragma omp for simd // OK
5307       for (int i = 0; i < 10; ++i)
5308         ;
5309 #pragma omp sections // OK
5310       {
5311         bar();
5312       }
5313     }
5314   }
5315 #pragma omp target parallel for
5316   for (int i = 0; i < 10; ++i) {
5317 #pragma omp parallel for
5318     for (int i = 0; i < 10; ++i)
5319       ;
5320   }
5321 #pragma omp target parallel for
5322   for (int i = 0; i < 10; ++i) {
5323 #pragma omp parallel for simd
5324     for (int i = 0; i < 10; ++i)
5325       ;
5326   }
5327 #pragma omp target parallel for
5328   for (int i = 0; i < 10; ++i) {
5329 #pragma omp parallel sections
5330     {
5331       bar();
5332     }
5333   }
5334 #pragma omp target parallel for
5335   for (int i = 0; i < 10; ++i) {
5336 #pragma omp task
5337     {
5338       bar();
5339     }
5340   }
5341 #pragma omp target parallel for
5342   for (int i = 0; i < 10; ++i) {
5343 #pragma omp taskyield
5344     bar();
5345   }
5346 #pragma omp target parallel for
5347   for (int i = 0; i < 10; ++i) {
5348 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
5349     bar();
5350   }
5351 #pragma omp target parallel for
5352   for (int i = 0; i < 10; ++i) {
5353 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
5354     bar();
5355   }
5356 #pragma omp target parallel for
5357   for (int i = 0; i < 10; ++i) {
5358 #pragma omp taskwait
5359     bar();
5360   }
5361 #pragma omp target parallel for
5362   for (int i = 0; i < 10; ++i) {
5363 #pragma omp flush
5364     bar();
5365   }
5366 #pragma omp target parallel for
5367   for (int i = 0; i < 10; ++i) {
5368 #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?}}
5369     bar();
5370   }
5371 #pragma omp target parallel for ordered
5372   for (int i = 0; i < 10; ++i) {
5373 #pragma omp ordered // OK
5374     bar();
5375   }
5376 #pragma omp target parallel for
5377   for (int i = 0; i < 10; ++i) {
5378 #pragma omp atomic
5379     ++a;
5380   }
5381 #pragma omp target parallel for
5382   for (int i = 0; i < 10; ++i) {
5383 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
5384     ++a;
5385   }
5386 #pragma omp target parallel for
5387   for (int i = 0; i < 10; ++i) {
5388 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
5389     ++a;
5390   }
5391 #pragma omp target parallel for
5392   for (int i = 0; i < 10; ++i) {
5393 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
5394     for (int i = 0; i < 10; ++i)
5395       ;
5396   }
5397 #pragma omp target parallel for
5398   for (int i = 0; i < 10; ++i) {
5399 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5400     ++a;
5401   }
5402 #pragma omp target parallel for
5403   for (int i = 0; i < 10; ++i) {
5404 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5405     ++a;
5406   }
5407 #pragma omp target parallel for
5408   for (int i = 0; i < 10; ++i) {
5409 #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?}}
5410     ++a;
5411   }
5412 #pragma omp target parallel for
5413   for (int i = 0; i < 10; ++i) {
5414 #pragma omp taskloop
5415   for (int i = 0; i < 10; ++i)
5416     ++a;
5417   }
5418 #pragma omp target parallel for
5419   for (int i = 0; i < 10; ++i) {
5420 #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?}}
5421     for (int j = 0; j < 10; ++j)
5422       ;
5423   }
5424 #pragma omp target parallel for
5425   for (int i = 0; i < 10; ++i) {
5426 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
5427   }
5428 #pragma omp target parallel for
5429   for (int i = 0; i < 10; ++i) {
5430 #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?}}
5431     for (int j = 0; j < 10; ++j)
5432       ;
5433   }
5434 #pragma omp target parallel for
5435   for (int i = 0; i < 10; ++i) {
5436 #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?}}
5437     for (int j = 0; j < 10; ++j)
5438       ;
5439   }
5440 #pragma omp target parallel for
5441   for (int i = 0; i < 10; ++i) {
5442 #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?}}
5443     for (int j = 0; j < 10; ++j)
5444       ;
5445   }
5446 #pragma omp target parallel for
5447   for (int i = 0; i < 10; ++i) {
5448 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5449     for (int j = 0; j < 10; ++j)
5450       ;
5451   }
5452 #pragma omp target parallel for
5453   for (int i = 0; i < 10; ++i) {
5454 #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?}}
5455     for (int j = 0; j < 10; ++j)
5456       ;
5457   }
5458 #pragma omp target parallel for
5459   for (int i = 0; i < 10; ++i) {
5460 #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?}}
5461     for (int j = 0; j < 10; ++j)
5462       ;
5463   }
5464 #pragma omp target parallel for
5465   for (int i = 0; i < 10; ++i) {
5466 #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?}}
5467     for (int j = 0; j < 10; ++j)
5468       ;
5469   }
5470 #pragma omp target parallel for
5471   for (int i = 0; i < 10; ++i) {
5472 #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?}}
5473     for (int j = 0; j < 10; ++j)
5474       ;
5475   }
5476 #pragma omp target parallel for
5477   for (int i = 0; i < 10; ++i) {
5478 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
5479     a++;
5480   }
5481 #pragma omp target parallel for
5482   for (int i = 0; i < 10; ++i) {
5483 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
5484     for (int j = 0; j < 10; ++j)
5485       ;
5486   }
5487 #pragma omp target parallel for
5488   for (int i = 0; i < 10; ++i) {
5489 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
5490     for (int j = 0; j < 10; ++j)
5491       ;
5492   }
5493 #pragma omp target parallel for
5494   for (int i = 0; i < 10; ++i) {
5495 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5496     for (int j = 0; j < 10; ++j)
5497       ;
5498   }
5499 #pragma omp target parallel for
5500   for (int i = 0; i < 10; ++i) {
5501 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
5502     for (int j = 0; j < 10; ++j)
5503       ;
5504   }
5505 
5506 // TEAMS DIRECTIVE
5507 #pragma omp teams // omp45-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
5508   bar();
5509 #pragma omp target
5510 #pragma omp teams
5511 #pragma omp parallel
5512   bar();
5513 #pragma omp target
5514 #pragma omp teams
5515 #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?}}
5516   for (int i = 0; i < 10; ++i)
5517     ;
5518 #pragma omp target
5519 #pragma omp teams
5520 #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?}}
5521   for (int i = 0; i < 10; ++i)
5522     ;
5523 #pragma omp target
5524 #pragma omp teams
5525 #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?}}
5526   for (int i = 0; i < 10; ++i)
5527     ;
5528 #pragma omp target
5529 #pragma omp teams
5530 #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?}}
5531   {
5532     bar();
5533   }
5534 #pragma omp target
5535 #pragma omp teams
5536 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
5537   {
5538     bar();
5539   }
5540 #pragma omp target
5541 #pragma omp teams
5542 #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?}}
5543   bar();
5544 
5545 #pragma omp target
5546 #pragma omp teams
5547 #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?}}
5548   {
5549     bar();
5550   }
5551 #pragma omp target
5552 #pragma omp teams
5553 #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?}}
5554   {
5555     bar();
5556   }
5557 #pragma omp target
5558 #pragma omp teams
5559 #pragma omp parallel for
5560   for (int i = 0; i < 10; ++i)
5561     ;
5562 #pragma omp target
5563 #pragma omp teams
5564 #pragma omp parallel for simd
5565   for (int i = 0; i < 10; ++i)
5566     ;
5567 #pragma omp target
5568 #pragma omp teams
5569 #pragma omp parallel sections
5570   {
5571     bar();
5572   }
5573 #pragma omp target
5574 #pragma omp teams
5575 #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?}}
5576   {
5577     bar();
5578   }
5579 #pragma omp target
5580 #pragma omp teams
5581   {
5582 #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?}}
5583     bar();
5584   }
5585 #pragma omp target
5586 #pragma omp teams
5587   {
5588 #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?}}
5589     bar();
5590   }
5591 #pragma omp target
5592 #pragma omp teams
5593   {
5594 #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?}}
5595     bar();
5596   }
5597 #pragma omp target
5598 #pragma omp teams
5599   {
5600 #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?}}
5601     bar();
5602   }
5603 #pragma omp target
5604 #pragma omp teams
5605   {
5606 #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?}}
5607     bar();
5608   }
5609 #pragma omp target
5610 #pragma omp teams
5611   {
5612 #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?}}
5613     bar();
5614   }
5615 #pragma omp target
5616 #pragma omp teams
5617   {
5618 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
5619     ++a;
5620   }
5621 #pragma omp target
5622 #pragma omp teams
5623   {
5624 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5625     ++a;
5626   }
5627 #pragma omp target
5628 #pragma omp teams
5629   {
5630 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5631     ++a;
5632   }
5633 #pragma omp target
5634 #pragma omp teams
5635 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5636   for (int i = 0; i < 10; ++i)
5637     ;
5638 #pragma omp target
5639 #pragma omp teams
5640   {
5641 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5642     ++a;
5643   }
5644 #pragma omp target
5645 #pragma omp teams
5646   {
5647 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5648     ++a;
5649   }
5650 #pragma omp target
5651 #pragma omp teams
5652   {
5653 #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?}}
5654     ++a;
5655   }
5656 #pragma omp target
5657 #pragma omp teams
5658   {
5659 #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?}}
5660   for (int i = 0; i < 10; ++i)
5661     ++a;
5662   }
5663 #pragma omp target
5664 #pragma omp teams
5665 #pragma omp distribute
5666   for (int i = 0; i < 10; ++i)
5667     ;
5668 #pragma omp target
5669 #pragma omp teams
5670 #pragma omp distribute
5671   for (int i = 0; i < 10; ++i)
5672     ;
5673 #pragma omp distribute
5674   for (int j = 0; j < 10; ++j)
5675     ;
5676 #pragma omp target
5677 #pragma omp teams
5678   {
5679 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5680   }
5681 #pragma omp target
5682 #pragma omp teams
5683   {
5684 #pragma omp distribute parallel for
5685   for (int i = 0; i < 10; ++i)
5686     ;
5687 #pragma omp distribute parallel for
5688   for (int j = 0; j < 10; ++j)
5689     ;
5690   }
5691 #pragma omp target
5692 #pragma omp teams
5693   {
5694 #pragma omp distribute parallel for simd
5695   for (int i = 0; i < 10; ++i)
5696     ;
5697 #pragma omp distribute parallel for simd
5698   for (int j = 0; j < 10; ++j)
5699     ;
5700   }
5701 #pragma omp target
5702 #pragma omp teams
5703   {
5704 #pragma omp distribute simd
5705   for (int i = 0; i < 10; ++i)
5706     ;
5707 #pragma omp distribute simd
5708   for (int j = 0; j < 10; ++j)
5709     ;
5710   }
5711 #pragma omp target
5712 #pragma omp teams
5713   {
5714 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5715   for (int i = 0; i < 10; ++i)
5716     ;
5717   }
5718 #pragma omp target
5719 #pragma omp teams
5720   {
5721 #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?}}
5722   for (int i = 0; i < 10; ++i)
5723     ;
5724   }
5725 #pragma omp target
5726 #pragma omp teams
5727   {
5728 #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?}}
5729   for (int i = 0; i < 10; ++i)
5730     ;
5731   }
5732 #pragma omp target
5733 #pragma omp teams
5734   {
5735 #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?}}
5736   for (int i = 0; i < 10; ++i)
5737     ;
5738   }
5739 #pragma omp target
5740 #pragma omp teams
5741   {
5742 #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?}}
5743   for (int i = 0; i < 10; ++i)
5744     ;
5745   }
5746 #pragma omp target
5747 #pragma omp teams
5748   {
5749 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5750     a++;
5751   }
5752 #pragma omp target
5753 #pragma omp teams
5754   {
5755 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5756   for (int i = 0; i < 10; ++i)
5757     ;
5758   }
5759 #pragma omp target
5760 #pragma omp teams
5761   {
5762 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5763   for (int i = 0; i < 10; ++i)
5764     ;
5765   }
5766 #pragma omp target
5767 #pragma omp teams
5768   {
5769 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5770   for (int i = 0; i < 10; ++i)
5771     ;
5772   }
5773 #pragma omp target
5774 #pragma omp teams
5775   {
5776 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5777   for (int i = 0; i < 10; ++i)
5778     ;
5779   }
5780 
5781 // TASKLOOP DIRECTIVE
5782 #pragma omp taskloop
5783   for (int i = 0; i < 10; ++i) {
5784 #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?}}
5785     for (int i = 0; i < 10; ++i)
5786       ;
5787   }
5788 #pragma omp taskloop
5789   for (int i = 0; i < 10; ++i) {
5790 #pragma omp simd
5791     for (int i = 0; i < 10; ++i)
5792       ;
5793   }
5794 #pragma omp taskloop
5795   for (int i = 0; i < 10; ++i) {
5796 #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?}}
5797     for (int i = 0; i < 10; ++i)
5798       ;
5799   }
5800 #pragma omp taskloop
5801   for (int i = 0; i < 10; ++i) {
5802 #pragma omp parallel
5803     for (int i = 0; i < 10; ++i)
5804       ;
5805   }
5806 #pragma omp taskloop
5807   for (int i = 0; i < 10; ++i) {
5808 #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?}}
5809     {
5810       bar();
5811     }
5812   }
5813 #pragma omp taskloop
5814   for (int i = 0; i < 10; ++i) {
5815 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
5816     {
5817       bar();
5818     }
5819   }
5820 #pragma omp taskloop
5821   for (int i = 0; i < 10; ++i) {
5822 #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?}}
5823     {
5824       bar();
5825     }
5826   }
5827 
5828 #pragma omp taskloop
5829   for (int i = 0; i < 10; ++i) {
5830 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5831     {
5832       bar();
5833     }
5834   }
5835 #pragma omp taskloop
5836   for (int i = 0; i < 10; ++i) {
5837 #pragma omp critical
5838     {
5839       bar();
5840     }
5841   }
5842 #pragma omp taskloop
5843   for (int i = 0; i < 10; ++i) {
5844 #pragma omp parallel
5845     {
5846 #pragma omp single // OK
5847       {
5848         bar();
5849       }
5850 #pragma omp for // OK
5851       for (int i = 0; i < 10; ++i)
5852         ;
5853 #pragma omp sections // OK
5854       {
5855         bar();
5856       }
5857     }
5858   }
5859 #pragma omp taskloop
5860   for (int i = 0; i < 10; ++i) {
5861 #pragma omp parallel for
5862     for (int i = 0; i < 10; ++i)
5863       ;
5864   }
5865 #pragma omp taskloop
5866   for (int i = 0; i < 10; ++i) {
5867 #pragma omp parallel for simd
5868     for (int i = 0; i < 10; ++i)
5869       ;
5870   }
5871 #pragma omp taskloop
5872   for (int i = 0; i < 10; ++i) {
5873 #pragma omp parallel sections
5874     {
5875       bar();
5876     }
5877   }
5878 #pragma omp taskloop
5879   for (int i = 0; i < 10; ++i) {
5880 #pragma omp task
5881     {
5882       bar();
5883     }
5884   }
5885 #pragma omp taskloop
5886   for (int i = 0; i < 10; ++i) {
5887 #pragma omp taskyield
5888     bar();
5889   }
5890 #pragma omp taskloop
5891   for (int i = 0; i < 10; ++i) {
5892 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5893     bar();
5894   }
5895 #pragma omp taskloop
5896   for (int i = 0; i < 10; ++i) {
5897 #pragma omp scan // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5898     bar();
5899   }
5900 #pragma omp taskloop
5901   for (int i = 0; i < 10; ++i) {
5902 #pragma omp taskwait
5903     bar();
5904   }
5905 #pragma omp taskloop
5906   for (int i = 0; i < 10; ++i) {
5907 #pragma omp flush
5908     bar();
5909   }
5910 #pragma omp taskloop
5911   for (int i = 0; i < 10; ++i) {
5912 #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?}}
5913     bar();
5914   }
5915 #pragma omp taskloop
5916   for (int i = 0; i < 10; ++i) {
5917 #pragma omp atomic
5918     ++a;
5919   }
5920 #pragma omp taskloop
5921   for (int i = 0; i < 10; ++i) {
5922 #pragma omp target
5923     ++a;
5924   }
5925 #pragma omp taskloop
5926   for (int i = 0; i < 10; ++i) {
5927 #pragma omp target parallel
5928     ++a;
5929   }
5930 #pragma omp taskloop
5931   for (int i = 0; i < 10; ++i) {
5932 #pragma omp target parallel for
5933     for (int i = 0; i < 10; ++i)
5934       ;
5935   }
5936 #pragma omp taskloop
5937   for (int i = 0; i < 10; ++i) {
5938 #pragma omp target enter data map(to: a)
5939     ++a;
5940   }
5941 #pragma omp taskloop
5942   for (int i = 0; i < 10; ++i) {
5943 #pragma omp target exit data map(from: a)
5944     ++a;
5945   }
5946 #pragma omp taskloop
5947   for (int i = 0; i < 10; ++i) {
5948 #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?}}
5949     ++a;
5950   }
5951 #pragma omp taskloop
5952   for (int i = 0; i < 10; ++i) {
5953 #pragma omp taskloop
5954   for (int i = 0; i < 10; ++i)
5955     ++a;
5956   }
5957 #pragma omp taskloop
5958   for (int i = 0; i < 10; ++i) {
5959 #pragma omp target update to(a)
5960     bar();
5961   }
5962 #pragma omp taskloop
5963   for (int i = 0; i < 10; ++i) {
5964 #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?}}
5965   for (int j = 0; j < 10; ++j)
5966     ++a;
5967   }
5968 #pragma omp taskloop
5969   for (int i = 0; i < 10; ++i) {
5970 #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?}}
5971   for (int j = 0; j < 10; ++j)
5972     ++a;
5973   }
5974 #pragma omp taskloop
5975   for (int i = 0; i < 10; ++i) {
5976 #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?}}
5977   for (int j = 0; j < 10; ++j)
5978     ++a;
5979   }
5980 #pragma omp taskloop
5981   for (int i = 0; i < 10; ++i) {
5982 #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?}}
5983   for (int j = 0; j < 10; ++j)
5984     ++a;
5985   }
5986 #pragma omp taskloop
5987   for (int i = 0; i < 10; ++i) {
5988 #pragma omp target simd // OK
5989   for (int j = 0; j < 10; ++j)
5990     ++a;
5991   }
5992 #pragma omp taskloop
5993   for (int i = 0; i < 10; ++i) {
5994 #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?}}
5995   for (int j = 0; j < 10; ++j)
5996     ++a;
5997   }
5998 #pragma omp taskloop
5999   for (int i = 0; i < 10; ++i) {
6000 #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?}}
6001   for (int j = 0; j < 10; ++j)
6002     ++a;
6003   }
6004 #pragma omp taskloop
6005   for (int i = 0; i < 10; ++i) {
6006 #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?}}
6007   for (int j = 0; j < 10; ++j)
6008     ++a;
6009   }
6010 #pragma omp taskloop
6011   for (int i = 0; i < 10; ++i) {
6012 #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?}}
6013   for (int j = 0; j < 10; ++j)
6014     ++a;
6015   }
6016 #pragma omp taskloop
6017   for (int i = 0; i < 10; ++i) {
6018 #pragma omp target teams // OK
6019     ++a;
6020   }
6021 #pragma omp taskloop
6022   for (int i = 0; i < 10; ++i) {
6023 #pragma omp target teams distribute // OK
6024   for (int j = 0; j < 10; ++j)
6025     ++a;
6026   }
6027 #pragma omp taskloop
6028   for (int i = 0; i < 10; ++i) {
6029 #pragma omp target teams distribute parallel for // OK
6030   for (int j = 0; j < 10; ++j)
6031     ++a;
6032   }
6033 #pragma omp taskloop
6034   for (int i = 0; i < 10; ++i) {
6035 #pragma omp target teams distribute parallel for simd // OK
6036   for (int j = 0; j < 10; ++j)
6037     ++a;
6038   }
6039 #pragma omp taskloop
6040   for (int i = 0; i < 10; ++i) {
6041 #pragma omp target teams distribute simd // OK
6042   for (int j = 0; j < 10; ++j)
6043     ++a;
6044   }
6045 #pragma omp taskloop
6046   for (int i = 0; i < 10; ++i) {
6047 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
6048 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'taskloop' region}}
6049   }
6050 #pragma omp taskloop
6051   for (int i = 0; i < 10; ++i) {
6052 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
6053 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'taskloop' region}}
6054   }
6055 #pragma omp master taskloop
6056   for (int i = 0; i < 10; ++i) {
6057 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
6058 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'master taskloop' region}}
6059   }
6060 #pragma omp master taskloop
6061   for (int i = 0; i < 10; ++i) {
6062 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
6063 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'master taskloop' region}}
6064   }
6065 #pragma omp parallel master taskloop
6066   for (int i = 0; i < 10; ++i) {
6067 #pragma omp cancel taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
6068 #pragma omp cancellation point taskgroup // omp45-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
6069   }
6070 #pragma omp parallel master taskloop
6071   for (int i = 0; i < 10; ++i) {
6072 #pragma omp cancel parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
6073 #pragma omp cancellation point parallel // expected-error {{region cannot be closely nested inside 'parallel master taskloop' region}}
6074   }
6075 
6076 // DISTRIBUTE DIRECTIVE
6077 #pragma omp target
6078 #pragma omp teams
6079 #pragma omp distribute
6080   for (int i = 0; i < 10; ++i) {
6081 #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?}}
6082     for (int i = 0; i < 10; ++i)
6083       ;
6084   }
6085 #pragma omp target
6086 #pragma omp teams
6087 #pragma omp distribute
6088   for (int i = 0; i < 10; ++i) {
6089 #pragma omp for
6090     for (int i = 0; i < 10; ++i)
6091       ;
6092   }
6093 #pragma omp target
6094 #pragma omp teams
6095 #pragma omp distribute
6096   for (int i = 0; i < 10; ++i) {
6097 #pragma omp simd
6098     for (int i = 0; i < 10; ++i)
6099       ;
6100   }
6101 #pragma omp target
6102 #pragma omp teams
6103 #pragma omp distribute
6104   for (int i = 0; i < 10; ++i) {
6105 #pragma omp for simd
6106     for (int i = 0; i < 10; ++i)
6107       ;
6108   }
6109 #pragma omp target
6110 #pragma omp teams
6111 #pragma omp distribute
6112   for (int i = 0; i < 10; ++i) {
6113 #pragma omp parallel
6114     for (int i = 0; i < 10; ++i)
6115       ;
6116   }
6117 #pragma omp target
6118 #pragma omp teams
6119 #pragma omp distribute
6120   for (int i = 0; i < 10; ++i) {
6121 #pragma omp sections
6122     {
6123       bar();
6124     }
6125   }
6126 #pragma omp target
6127 #pragma omp teams
6128 #pragma omp distribute
6129   for (int i = 0; i < 10; ++i) {
6130 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
6131     {
6132       bar();
6133     }
6134   }
6135 #pragma omp target
6136 #pragma omp teams
6137 #pragma omp distribute
6138   for (int i = 0; i < 10; ++i) {
6139 #pragma omp single
6140     {
6141       bar();
6142     }
6143   }
6144 #pragma omp target
6145 #pragma omp teams
6146 #pragma omp distribute
6147   for (int i = 0; i < 10; ++i) {
6148 #pragma omp master
6149     {
6150       bar();
6151     }
6152   }
6153 #pragma omp target
6154 #pragma omp teams
6155 #pragma omp distribute
6156   for (int i = 0; i < 10; ++i) {
6157 #pragma omp critical
6158     {
6159       bar();
6160     }
6161   }
6162 #pragma omp target
6163 #pragma omp teams
6164 #pragma omp distribute
6165   for (int i = 0; i < 10; ++i) {
6166 #pragma omp parallel
6167     {
6168 #pragma omp single
6169       {
6170         bar();
6171       }
6172     }
6173   }
6174 #pragma omp target
6175 #pragma omp teams
6176 #pragma omp distribute
6177   for (int i = 0; i < 10; ++i) {
6178 #pragma omp parallel for
6179     for (int i = 0; i < 10; ++i)
6180       ;
6181   }
6182 #pragma omp target
6183 #pragma omp teams
6184 #pragma omp distribute
6185   for (int i = 0; i < 10; ++i) {
6186 #pragma omp parallel for simd
6187     for (int i = 0; i < 10; ++i)
6188       ;
6189   }
6190 #pragma omp target
6191 #pragma omp teams
6192 #pragma omp distribute
6193   for (int i = 0; i < 10; ++i) {
6194 #pragma omp parallel sections
6195     {
6196       bar();
6197     }
6198   }
6199 #pragma omp target
6200 #pragma omp teams
6201 #pragma omp distribute
6202   for (int i = 0; i < 10; ++i) {
6203 #pragma omp task
6204     {
6205       bar();
6206     }
6207   }
6208 #pragma omp target
6209 #pragma omp teams
6210 #pragma omp distribute
6211   for (int i = 0; i < 10; ++i) {
6212 #pragma omp taskyield
6213     bar();
6214   }
6215 #pragma omp target
6216 #pragma omp teams
6217 #pragma omp distribute
6218   for (int i = 0; i < 10; ++i) {
6219 #pragma omp barrier
6220     bar();
6221   }
6222 #pragma omp target
6223 #pragma omp teams
6224 #pragma omp distribute
6225   for (int i = 0; i < 10; ++i) {
6226 #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?}}
6227     bar();
6228   }
6229 #pragma omp target
6230 #pragma omp teams
6231 #pragma omp distribute
6232   for (int i = 0; i < 10; ++i) {
6233 #pragma omp taskwait
6234     bar();
6235   }
6236 #pragma omp target
6237 #pragma omp teams
6238 #pragma omp distribute
6239   for (int i = 0; i < 10; ++i) {
6240 #pragma omp flush
6241     bar();
6242   }
6243 #pragma omp target
6244 #pragma omp teams
6245 #pragma omp distribute
6246   for (int i = 0; i < 10; ++i) {
6247 #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?}}
6248     bar();
6249   }
6250 #pragma omp target
6251 #pragma omp teams
6252 #pragma omp distribute
6253   for (int i = 0; i < 10; ++i) {
6254 #pragma omp atomic
6255     ++a;
6256   }
6257 #pragma omp target
6258 #pragma omp teams
6259 #pragma omp distribute
6260   for (int i = 0; i < 10; ++i) {
6261 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6262     ++a;
6263   }
6264 #pragma omp target
6265 #pragma omp teams
6266 #pragma omp distribute
6267   for (int i = 0; i < 10; ++i) {
6268 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
6269     ++a;
6270   }
6271 #pragma omp target
6272 #pragma omp teams
6273 #pragma omp distribute
6274   for (int i = 0; i < 10; ++i) {
6275 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6276     for (int i = 0; i < 10; ++i)
6277       ;
6278   }
6279 #pragma omp target
6280 #pragma omp teams
6281 #pragma omp distribute
6282   for (int i = 0; i < 10; ++i) {
6283 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6284     ++a;
6285   }
6286 #pragma omp target
6287 #pragma omp teams
6288 #pragma omp distribute
6289   for (int i = 0; i < 10; ++i) {
6290 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6291     ++a;
6292   }
6293 #pragma omp target
6294 #pragma omp teams
6295 #pragma omp distribute
6296   for (int i = 0; i < 10; ++i) {
6297 #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?}}
6298     ++a;
6299   }
6300 #pragma omp target
6301 #pragma omp teams
6302 #pragma omp distribute
6303   for (int i = 0; i < 10; ++i) {
6304 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6305     ++a;
6306   }
6307 #pragma omp target
6308 #pragma omp teams
6309 #pragma omp distribute
6310   for (int i = 0; i < 10; ++i) {
6311 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6312     for (int j = 0; j < 10; ++j)
6313       ;
6314   }
6315 #pragma omp target
6316 #pragma omp teams
6317 #pragma omp distribute
6318   for (int i = 0; i < 10; ++i) {
6319 #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?}}
6320     for (int j = 0; j < 10; ++j)
6321       ;
6322   }
6323 #pragma omp target
6324 #pragma omp teams
6325 #pragma omp distribute
6326   for (int i = 0; i < 10; ++i) {
6327 #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?}}
6328     for (int j = 0; j < 10; ++j)
6329       ;
6330   }
6331 #pragma omp target
6332 #pragma omp teams
6333 #pragma omp distribute
6334   for (int i = 0; i < 10; ++i) {
6335 #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?}}
6336     for (int j = 0; j < 10; ++j)
6337       ;
6338   }
6339 #pragma omp target
6340 #pragma omp teams
6341 #pragma omp distribute
6342   for (int i = 0; i < 10; ++i) {
6343 #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?}}
6344     for (int j = 0; j < 10; ++j)
6345       ;
6346   }
6347 #pragma omp target
6348 #pragma omp teams
6349 #pragma omp distribute
6350   for (int i = 0; i < 10; ++i) {
6351 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6352     a++;
6353   }
6354 #pragma omp target
6355 #pragma omp teams
6356 #pragma omp distribute
6357   for (int i = 0; i < 10; ++i) {
6358 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6359     for (int j = 0; j < 10; ++j)
6360       ;
6361   }
6362 #pragma omp target
6363 #pragma omp teams
6364 #pragma omp distribute
6365   for (int i = 0; i < 10; ++i) {
6366 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6367     for (int j = 0; j < 10; ++j)
6368       ;
6369   }
6370 #pragma omp target
6371 #pragma omp teams
6372 #pragma omp distribute
6373   for (int i = 0; i < 10; ++i) {
6374 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6375     for (int j = 0; j < 10; ++j)
6376       ;
6377   }
6378 #pragma omp target
6379 #pragma omp teams
6380 #pragma omp distribute
6381   for (int i = 0; i < 10; ++i) {
6382 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6383     for (int j = 0; j < 10; ++j)
6384       ;
6385   }
6386 
6387 // DISTRIBUTE PARALLEL FOR DIRECTIVE
6388 #pragma omp target
6389 #pragma omp teams
6390 #pragma omp distribute parallel for
6391   for (int i = 0; i < 10; ++i) {
6392 #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?}}
6393     for (int i = 0; i < 10; ++i)
6394       ;
6395   }
6396 #pragma omp target
6397 #pragma omp teams
6398 #pragma omp distribute parallel for
6399   for (int i = 0; i < 10; ++i) {
6400 #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?}}
6401     for (int i = 0; i < 10; ++i)
6402       ;
6403   }
6404 #pragma omp target
6405 #pragma omp teams
6406 #pragma omp distribute parallel for
6407   for (int i = 0; i < 10; ++i) {
6408 #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?}}
6409     for (int i = 0; i < 10; ++i)
6410       ;
6411   }
6412 #pragma omp target
6413 #pragma omp teams
6414 #pragma omp distribute parallel for
6415   for (int i = 0; i < 10; ++i) {
6416 #pragma omp simd
6417     for (int i = 0; i < 10; ++i)
6418       ;
6419   }
6420 #pragma omp target
6421 #pragma omp teams
6422 #pragma omp distribute parallel for
6423   for (int i = 0; i < 10; ++i) {
6424 #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?}}
6425     for (int i = 0; i < 10; ++i)
6426       ;
6427   }
6428 #pragma omp target
6429 #pragma omp teams
6430 #pragma omp distribute parallel for
6431   for (int i = 0; i < 10; ++i) {
6432 #pragma omp parallel
6433     for (int i = 0; i < 10; ++i)
6434       ;
6435   }
6436 #pragma omp target
6437 #pragma omp teams
6438 #pragma omp distribute parallel for
6439   for (int i = 0; i < 10; ++i) {
6440 #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?}}
6441     {
6442       bar();
6443     }
6444   }
6445 #pragma omp target
6446 #pragma omp teams
6447 #pragma omp distribute parallel for
6448   for (int i = 0; i < 10; ++i) {
6449 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
6450     {
6451       bar();
6452     }
6453   }
6454 #pragma omp target
6455 #pragma omp teams
6456 #pragma omp distribute parallel for
6457   for (int i = 0; i < 10; ++i) {
6458 #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?}}
6459     {
6460       bar();
6461     }
6462   }
6463 #pragma omp target
6464 #pragma omp teams
6465 #pragma omp distribute parallel for
6466   for (int i = 0; i < 10; ++i) {
6467 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6468     {
6469       bar();
6470     }
6471   }
6472 #pragma omp target
6473 #pragma omp teams
6474 #pragma omp distribute parallel for
6475   for (int i = 0; i < 10; ++i) {
6476 #pragma omp critical
6477     {
6478       bar();
6479     }
6480   }
6481 #pragma omp target
6482 #pragma omp teams
6483 #pragma omp distribute parallel for
6484   for (int i = 0; i < 10; ++i) {
6485 #pragma omp parallel
6486     {
6487 #pragma omp single
6488       {
6489         bar();
6490       }
6491     }
6492   }
6493 #pragma omp target
6494 #pragma omp teams
6495 #pragma omp distribute parallel for
6496   for (int i = 0; i < 10; ++i) {
6497 #pragma omp parallel for
6498     for (int i = 0; i < 10; ++i)
6499       ;
6500   }
6501 #pragma omp target
6502 #pragma omp teams
6503 #pragma omp distribute parallel for
6504   for (int i = 0; i < 10; ++i) {
6505 #pragma omp parallel for simd
6506     for (int i = 0; i < 10; ++i)
6507       ;
6508   }
6509 #pragma omp target
6510 #pragma omp teams
6511 #pragma omp distribute parallel for
6512   for (int i = 0; i < 10; ++i) {
6513 #pragma omp parallel sections
6514     {
6515       bar();
6516     }
6517   }
6518 #pragma omp target
6519 #pragma omp teams
6520 #pragma omp distribute parallel for
6521   for (int i = 0; i < 10; ++i) {
6522 #pragma omp task
6523     {
6524       bar();
6525     }
6526   }
6527 #pragma omp target
6528 #pragma omp teams
6529 #pragma omp distribute parallel for
6530   for (int i = 0; i < 10; ++i) {
6531 #pragma omp taskyield
6532     bar();
6533   }
6534 #pragma omp target
6535 #pragma omp teams
6536 #pragma omp distribute parallel for
6537   for (int i = 0; i < 10; ++i) {
6538 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6539     bar();
6540   }
6541 #pragma omp target
6542 #pragma omp teams
6543 #pragma omp distribute parallel for
6544   for (int i = 0; i < 10; ++i) {
6545 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
6546     bar();
6547   }
6548 #pragma omp target
6549 #pragma omp teams
6550 #pragma omp distribute parallel for
6551   for (int i = 0; i < 10; ++i) {
6552 #pragma omp taskwait
6553     bar();
6554   }
6555 #pragma omp target
6556 #pragma omp teams
6557 #pragma omp distribute parallel for
6558   for (int i = 0; i < 10; ++i) {
6559 #pragma omp flush
6560     bar();
6561   }
6562 #pragma omp target
6563 #pragma omp teams
6564 #pragma omp distribute parallel for
6565   for (int i = 0; i < 10; ++i) {
6566 #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?}}
6567     bar();
6568   }
6569 #pragma omp target
6570 #pragma omp teams
6571 #pragma omp distribute parallel for
6572   for (int i = 0; i < 10; ++i) {
6573 #pragma omp atomic
6574     ++a;
6575   }
6576 #pragma omp target
6577 #pragma omp teams
6578 #pragma omp distribute parallel for
6579   for (int i = 0; i < 10; ++i) {
6580 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6581     ++a;
6582   }
6583 #pragma omp target
6584 #pragma omp teams
6585 #pragma omp distribute parallel for
6586   for (int i = 0; i < 10; ++i) {
6587 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
6588     ++a;
6589   }
6590 #pragma omp target
6591 #pragma omp teams
6592 #pragma omp distribute parallel for
6593   for (int i = 0; i < 10; ++i) {
6594 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6595     for (int i = 0; i < 10; ++i)
6596       ;
6597   }
6598 #pragma omp target
6599 #pragma omp teams
6600 #pragma omp distribute parallel for
6601   for (int i = 0; i < 10; ++i) {
6602 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6603     ++a;
6604   }
6605 #pragma omp target
6606 #pragma omp teams
6607 #pragma omp distribute parallel for
6608   for (int i = 0; i < 10; ++i) {
6609 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6610     ++a;
6611   }
6612 #pragma omp target
6613 #pragma omp teams
6614 #pragma omp distribute parallel for
6615   for (int i = 0; i < 10; ++i) {
6616 #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?}}
6617     ++a;
6618   }
6619 #pragma omp target
6620 #pragma omp teams
6621 #pragma omp distribute parallel for
6622   for (int i = 0; i < 10; ++i) {
6623 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6624     ++a;
6625   }
6626 #pragma omp target
6627 #pragma omp teams
6628 #pragma omp distribute parallel for
6629   for (int i = 0; i < 10; ++i) {
6630 #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?}}
6631     for (int i = 0; i < 10; ++i)
6632       ;
6633   }
6634 #pragma omp target
6635 #pragma omp teams
6636 #pragma omp distribute parallel for
6637   for (int i = 0; i < 10; ++i) {
6638 #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?}}
6639     for (int i = 0; i < 10; ++i)
6640       ;
6641   }
6642 #pragma omp target
6643 #pragma omp teams
6644 #pragma omp distribute parallel for
6645   for (int i = 0; i < 10; ++i) {
6646 #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?}}
6647     for (int i = 0; i < 10; ++i)
6648       ;
6649   }
6650 #pragma omp target
6651 #pragma omp teams
6652 #pragma omp distribute parallel for
6653   for (int i = 0; i < 10; ++i) {
6654 #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?}}
6655     for (int i = 0; i < 10; ++i)
6656       ;
6657   }
6658 #pragma omp target
6659 #pragma omp teams
6660 #pragma omp distribute parallel for
6661   for (int i = 0; i < 10; ++i) {
6662 #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?}}
6663     for (int i = 0; i < 10; ++i)
6664       ;
6665   }
6666 #pragma omp target
6667 #pragma omp teams
6668 #pragma omp distribute parallel for
6669   for (int i = 0; i < 10; ++i) {
6670 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6671     a++;
6672   }
6673 #pragma omp target
6674 #pragma omp teams
6675 #pragma omp distribute parallel for
6676   for (int i = 0; i < 10; ++i) {
6677 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6678     for (int i = 0; i < 10; ++i)
6679       ;
6680   }
6681 #pragma omp target
6682 #pragma omp teams
6683 #pragma omp distribute parallel for
6684   for (int i = 0; i < 10; ++i) {
6685 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6686     for (int i = 0; i < 10; ++i)
6687       ;
6688   }
6689 #pragma omp target
6690 #pragma omp teams
6691 #pragma omp distribute parallel for
6692   for (int i = 0; i < 10; ++i) {
6693 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6694     for (int i = 0; i < 10; ++i)
6695       ;
6696   }
6697 #pragma omp target
6698 #pragma omp teams
6699 #pragma omp distribute parallel for
6700   for (int i = 0; i < 10; ++i) {
6701 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6702     for (int i = 0; i < 10; ++i)
6703       ;
6704   }
6705 
6706 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
6707 #pragma omp target
6708 #pragma omp teams
6709 #pragma omp distribute parallel for simd
6710   for (int i = 0; i < 10; ++i) {
6711 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6712     for (int i = 0; i < 10; ++i)
6713       ;
6714   }
6715 #pragma omp target
6716 #pragma omp teams
6717 #pragma omp distribute parallel for simd
6718   for (int i = 0; i < 10; ++i) {
6719 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6720     for (int i = 0; i < 10; ++i)
6721       ;
6722   }
6723 #pragma omp target
6724 #pragma omp teams
6725 #pragma omp distribute parallel for simd
6726   for (int i = 0; i < 10; ++i) {
6727 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6728     for (int i = 0; i < 10; ++i)
6729       ;
6730   }
6731 #pragma omp target
6732 #pragma omp teams
6733 #pragma omp distribute parallel for simd
6734   for (int i = 0; i < 10; ++i) {
6735 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6736     for (int i = 0; i < 10; ++i)
6737       ;
6738   }
6739 #pragma omp target
6740 #pragma omp teams
6741 #pragma omp distribute parallel for simd
6742   for (int i = 0; i < 10; ++i) {
6743 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6744     for (int i = 0; i < 10; ++i)
6745       ;
6746   }
6747 #pragma omp target
6748 #pragma omp teams
6749 #pragma omp distribute parallel for simd
6750   for (int i = 0; i < 10; ++i) {
6751 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6752     for (int i = 0; i < 10; ++i)
6753       ;
6754   }
6755 #pragma omp target
6756 #pragma omp teams
6757 #pragma omp distribute parallel for simd
6758   for (int i = 0; i < 10; ++i) {
6759 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6760     {
6761       bar();
6762     }
6763   }
6764 #pragma omp target
6765 #pragma omp teams
6766 #pragma omp distribute parallel for simd
6767   for (int i = 0; i < 10; ++i) {
6768 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6769     {
6770       bar();
6771     }
6772   }
6773 #pragma omp target
6774 #pragma omp teams
6775 #pragma omp distribute parallel for simd
6776   for (int i = 0; i < 10; ++i) {
6777 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6778     {
6779       bar();
6780     }
6781   }
6782 #pragma omp target
6783 #pragma omp teams
6784 #pragma omp distribute parallel for simd
6785   for (int i = 0; i < 10; ++i) {
6786 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6787     {
6788       bar();
6789     }
6790   }
6791 #pragma omp target
6792 #pragma omp teams
6793 #pragma omp distribute parallel for simd
6794   for (int i = 0; i < 10; ++i) {
6795 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6796     {
6797       bar();
6798     }
6799   }
6800 #pragma omp target
6801 #pragma omp teams
6802 #pragma omp distribute parallel for simd
6803   for (int i = 0; i < 10; ++i) {
6804 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6805     {
6806 #pragma omp single
6807       {
6808         bar();
6809       }
6810     }
6811   }
6812 #pragma omp target
6813 #pragma omp teams
6814 #pragma omp distribute parallel for simd
6815   for (int i = 0; i < 10; ++i) {
6816 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6817     for (int i = 0; i < 10; ++i)
6818       ;
6819   }
6820 #pragma omp target
6821 #pragma omp teams
6822 #pragma omp distribute parallel for simd
6823   for (int i = 0; i < 10; ++i) {
6824 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6825     for (int i = 0; i < 10; ++i)
6826       ;
6827   }
6828 #pragma omp target
6829 #pragma omp teams
6830 #pragma omp distribute parallel for simd
6831   for (int i = 0; i < 10; ++i) {
6832 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6833     {
6834       bar();
6835     }
6836   }
6837 #pragma omp target
6838 #pragma omp teams
6839 #pragma omp distribute parallel for simd
6840   for (int i = 0; i < 10; ++i) {
6841 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6842     {
6843       bar();
6844     }
6845   }
6846 #pragma omp target
6847 #pragma omp teams
6848 #pragma omp distribute parallel for simd
6849   for (int i = 0; i < 10; ++i) {
6850 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6851     bar();
6852   }
6853 #pragma omp target
6854 #pragma omp teams
6855 #pragma omp distribute parallel for simd
6856   for (int i = 0; i < 10; ++i) {
6857 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6858     bar();
6859   }
6860 #pragma omp target
6861 #pragma omp teams
6862 #pragma omp distribute parallel for simd
6863   for (int i = 0; i < 10; ++i) {
6864 #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?}}
6865     bar();
6866   }
6867 #pragma omp target
6868 #pragma omp teams
6869 #pragma omp distribute parallel for simd
6870   for (int i = 0; i < 10; ++i) {
6871 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6872     bar();
6873   }
6874 #pragma omp target
6875 #pragma omp teams
6876 #pragma omp distribute parallel for simd
6877   for (int i = 0; i < 10; ++i) {
6878 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6879     bar();
6880   }
6881 #pragma omp target
6882 #pragma omp teams
6883 #pragma omp distribute parallel for simd
6884   for (int i = 0; i < 10; ++i) {
6885 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6886     bar();
6887   }
6888 #pragma omp target
6889 #pragma omp teams
6890 #pragma omp distribute parallel for simd
6891   for (int i = 0; i < 10; ++i) {
6892 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
6893     ++a;
6894   }
6895 #pragma omp target
6896 #pragma omp teams
6897 #pragma omp distribute parallel for simd
6898   for (int i = 0; i < 10; ++i) {
6899 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6900     ++a;
6901   }
6902 #pragma omp target
6903 #pragma omp teams
6904 #pragma omp distribute parallel for simd
6905   for (int i = 0; i < 10; ++i) {
6906 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6907     ++a;
6908   }
6909 #pragma omp target
6910 #pragma omp teams
6911 #pragma omp distribute parallel for simd
6912   for (int i = 0; i < 10; ++i) {
6913 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6914     for (int i = 0; i < 10; ++i)
6915       ;
6916   }
6917 #pragma omp target
6918 #pragma omp teams
6919 #pragma omp distribute parallel for simd
6920   for (int i = 0; i < 10; ++i) {
6921 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6922     ++a;
6923   }
6924 #pragma omp target
6925 #pragma omp teams
6926 #pragma omp distribute parallel for simd
6927   for (int i = 0; i < 10; ++i) {
6928 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6929     ++a;
6930   }
6931 #pragma omp target
6932 #pragma omp teams
6933 #pragma omp distribute parallel for simd
6934   for (int i = 0; i < 10; ++i) {
6935 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6936     ++a;
6937   }
6938 #pragma omp target
6939 #pragma omp teams
6940 #pragma omp distribute parallel for simd
6941   for (int i = 0; i < 10; ++i) {
6942 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6943     ++a;
6944   }
6945 #pragma omp target
6946 #pragma omp teams
6947 #pragma omp distribute parallel for simd
6948   for (int i = 0; i < 10; ++i) {
6949 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6950     for (int i = 0; i < 10; ++i)
6951       ++a;
6952   }
6953 #pragma omp target
6954 #pragma omp teams
6955 #pragma omp distribute parallel for simd
6956   for (int i = 0; i < 10; ++i) {
6957 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6958     for (int i = 0; i < 10; ++i)
6959       ++a;
6960   }
6961 #pragma omp target
6962 #pragma omp teams
6963 #pragma omp distribute parallel for simd
6964   for (int i = 0; i < 10; ++i) {
6965 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6966     for (int i = 0; i < 10; ++i)
6967       ++a;
6968   }
6969 #pragma omp target
6970 #pragma omp teams
6971 #pragma omp distribute parallel for simd
6972   for (int i = 0; i < 10; ++i) {
6973 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6974     for (int i = 0; i < 10; ++i)
6975       ++a;
6976   }
6977 #pragma omp target
6978 #pragma omp teams
6979 #pragma omp distribute parallel for simd
6980   for (int i = 0; i < 10; ++i) {
6981 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6982     for (int i = 0; i < 10; ++i)
6983       ++a;
6984   }
6985 #pragma omp target
6986 #pragma omp teams
6987 #pragma omp distribute parallel for simd
6988   for (int i = 0; i < 10; ++i) {
6989 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6990     for (int i = 0; i < 10; ++i)
6991       ++a;
6992   }
6993 #pragma omp target
6994 #pragma omp teams
6995 #pragma omp distribute parallel for simd
6996   for (int i = 0; i < 10; ++i) {
6997 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6998     ++a;
6999   }
7000 #pragma omp target
7001 #pragma omp teams
7002 #pragma omp distribute parallel for simd
7003   for (int i = 0; i < 10; ++i) {
7004 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7005     for (int i = 0; i < 10; ++i)
7006       ++a;
7007   }
7008 #pragma omp target
7009 #pragma omp teams
7010 #pragma omp distribute parallel for simd
7011   for (int i = 0; i < 10; ++i) {
7012 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7013     for (int i = 0; i < 10; ++i)
7014       ++a;
7015   }
7016 #pragma omp target
7017 #pragma omp teams
7018 #pragma omp distribute parallel for simd
7019   for (int i = 0; i < 10; ++i) {
7020 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7021     for (int i = 0; i < 10; ++i)
7022       ++a;
7023   }
7024 #pragma omp target
7025 #pragma omp teams
7026 #pragma omp distribute parallel for simd
7027   for (int i = 0; i < 10; ++i) {
7028 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7029     for (int i = 0; i < 10; ++i)
7030       ++a;
7031   }
7032 
7033 // TARGET SIMD DIRECTIVE
7034 #pragma omp target simd
7035   for (int i = 0; i < 10; ++i) {
7036 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7037     for (int i = 0; i < 10; ++i)
7038       ;
7039   }
7040 #pragma omp target simd
7041   for (int i = 0; i < 10; ++i) {
7042 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7043     for (int i = 0; i < 10; ++i)
7044       ;
7045   }
7046 #pragma omp target simd
7047   for (int i = 0; i < 10; ++i) {
7048 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7049     for (int i = 0; i < 10; ++i)
7050       ;
7051   }
7052 #pragma omp target simd
7053   for (int i = 0; i < 10; ++i) {
7054 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7055     for (int i = 0; i < 10; ++i)
7056       ;
7057   }
7058 #pragma omp target simd
7059   for (int i = 0; i < 10; ++i) {
7060 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7061     for (int i = 0; i < 10; ++i)
7062       ;
7063   }
7064 #pragma omp target simd
7065   for (int i = 0; i < 10; ++i) {
7066 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7067     for (int i = 0; i < 10; ++i)
7068       ;
7069   }
7070 #pragma omp target simd
7071   for (int i = 0; i < 10; ++i) {
7072 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7073     {
7074       bar();
7075     }
7076   }
7077 #pragma omp target simd
7078   for (int i = 0; i < 10; ++i) {
7079 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7080     {
7081       bar();
7082     }
7083   }
7084 #pragma omp target simd
7085   for (int i = 0; i < 10; ++i) {
7086 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7087     {
7088       bar();
7089     }
7090   }
7091 #pragma omp target simd
7092   for (int i = 0; i < 10; ++i) {
7093 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7094     {
7095       bar();
7096     }
7097   }
7098 #pragma omp target simd
7099   for (int i = 0; i < 10; ++i) {
7100 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7101     {
7102       bar();
7103     }
7104   }
7105 #pragma omp target simd
7106   for (int i = 0; i < 10; ++i) {
7107 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7108     {
7109 #pragma omp single
7110       {
7111         bar();
7112       }
7113     }
7114   }
7115 #pragma omp target simd
7116   for (int i = 0; i < 10; ++i) {
7117 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7118     for (int i = 0; i < 10; ++i)
7119       ;
7120   }
7121 #pragma omp target simd
7122   for (int i = 0; i < 10; ++i) {
7123 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7124     for (int i = 0; i < 10; ++i)
7125       ;
7126   }
7127 #pragma omp target simd
7128   for (int i = 0; i < 10; ++i) {
7129 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7130     {
7131       bar();
7132     }
7133   }
7134 #pragma omp target simd
7135   for (int i = 0; i < 10; ++i) {
7136 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7137     {
7138       bar();
7139     }
7140   }
7141 #pragma omp target simd
7142   for (int i = 0; i < 10; ++i) {
7143 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7144     bar();
7145   }
7146 #pragma omp target simd
7147   for (int i = 0; i < 10; ++i) {
7148 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7149     bar();
7150   }
7151 #pragma omp target simd
7152   for (int i = 0; i < 10; ++i) {
7153 #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?}}
7154     bar();
7155   }
7156 #pragma omp target simd
7157   for (int i = 0; i < 10; ++i) {
7158 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7159     bar();
7160   }
7161 #pragma omp target simd
7162   for (int i = 0; i < 10; ++i) {
7163 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7164     bar();
7165   }
7166 #pragma omp target simd
7167   for (int i = 0; i < 10; ++i) {
7168 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7169     bar();
7170   }
7171 #pragma omp target simd
7172   for (int i = 0; i < 10; ++i) {
7173 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7174     ++a;
7175   }
7176 #pragma omp target simd
7177   for (int i = 0; i < 10; ++i) {
7178 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7179     ++a;
7180   }
7181 #pragma omp target simd
7182   for (int i = 0; i < 10; ++i) {
7183 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7184     ++a;
7185   }
7186 #pragma omp target simd
7187   for (int i = 0; i < 10; ++i) {
7188 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7189     for (int i = 0; i < 10; ++i)
7190       ;
7191   }
7192 #pragma omp target simd
7193   for (int i = 0; i < 10; ++i) {
7194 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7195     ++a;
7196   }
7197 #pragma omp target simd
7198   for (int i = 0; i < 10; ++i) {
7199 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7200     ++a;
7201   }
7202 #pragma omp target simd
7203   for (int i = 0; i < 10; ++i) {
7204 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7205     ++a;
7206   }
7207 #pragma omp target simd
7208   for (int i = 0; i < 10; ++i) {
7209 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7210     ++a;
7211   }
7212 #pragma omp target simd
7213   for (int i = 0; i < 10; ++i) {
7214 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7215     for (int i = 0; i < 10; ++i)
7216       ++a;
7217   }
7218 #pragma omp target simd
7219   for (int i = 0; i < 10; ++i) {
7220 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7221     for (int i = 0; i < 10; ++i)
7222       ++a;
7223   }
7224 #pragma omp target simd
7225   for (int i = 0; i < 10; ++i) {
7226 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7227     for (int i = 0; i < 10; ++i)
7228       ++a;
7229   }
7230 #pragma omp target simd
7231   for (int i = 0; i < 10; ++i) {
7232 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7233     for (int i = 0; i < 10; ++i)
7234       ++a;
7235   }
7236 #pragma omp target simd
7237   for (int i = 0; i < 10; ++i) {
7238 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7239     for (int i = 0; i < 10; ++i)
7240       ++a;
7241   }
7242 #pragma omp target simd
7243   for (int i = 0; i < 10; ++i) {
7244 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7245     for (int i = 0; i < 10; ++i)
7246       ++a;
7247   }
7248 #pragma omp target simd
7249   for (int i = 0; i < 10; ++i) {
7250 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7251     for (int i = 0; i < 10; ++i)
7252       ++a;
7253   }
7254 #pragma omp target simd
7255   for (int i = 0; i < 10; ++i) {
7256 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7257     for (int i = 0; i < 10; ++i)
7258       ++a;
7259   }
7260 
7261 // TEAMS DISTRIBUTE DIRECTIVE
7262 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7263   for (int i = 0; i < 10; ++i)
7264     ;
7265 #pragma omp target
7266 #pragma omp teams distribute
7267   for (int i = 0; i < 10; ++i) {
7268 #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?}}
7269     for (int i = 0; i < 10; ++i)
7270       ;
7271   }
7272 #pragma omp target
7273 #pragma omp teams distribute
7274   for (int i = 0; i < 10; ++i) {
7275 #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?}}
7276     for (int i = 0; i < 10; ++i)
7277       ;
7278   }
7279 #pragma omp target
7280 #pragma omp teams distribute
7281   for (int i = 0; i < 10; ++i) {
7282 #pragma omp for // OK
7283     for (int i = 0; i < 10; ++i)
7284       ;
7285   }
7286 #pragma omp target
7287 #pragma omp teams distribute
7288   for (int i = 0; i < 10; ++i) {
7289 #pragma omp simd // OK
7290     for (int i = 0; i < 10; ++i)
7291       ;
7292   }
7293 #pragma omp target
7294 #pragma omp teams distribute
7295   for (int i = 0; i < 10; ++i) {
7296 #pragma omp for simd // OK
7297     for (int i = 0; i < 10; ++i)
7298       ;
7299   }
7300 #pragma omp target
7301 #pragma omp teams distribute
7302   for (int i = 0; i < 10; ++i) {
7303 #pragma omp parallel // OK
7304     for (int i = 0; i < 10; ++i)
7305       ;
7306   }
7307 #pragma omp target
7308 #pragma omp teams distribute
7309   for (int i = 0; i < 10; ++i) {
7310 #pragma omp sections // OK
7311     {
7312       bar();
7313     }
7314   }
7315 #pragma omp target
7316 #pragma omp teams distribute
7317   for (int i = 0; i < 10; ++i) {
7318 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
7319     {
7320       bar();
7321     }
7322   }
7323 #pragma omp target
7324 #pragma omp teams distribute
7325   for (int i = 0; i < 10; ++i) {
7326 #pragma omp single // OK
7327     {
7328       bar();
7329     }
7330   }
7331 #pragma omp target
7332 #pragma omp teams distribute
7333   for (int i = 0; i < 10; ++i) {
7334 #pragma omp master // OK
7335     {
7336       bar();
7337     }
7338   }
7339 #pragma omp target
7340 #pragma omp teams distribute
7341   for (int i = 0; i < 10; ++i) {
7342 #pragma omp critical // OK
7343     {
7344       bar();
7345     }
7346   }
7347 #pragma omp target
7348 #pragma omp teams distribute
7349   for (int i = 0; i < 10; ++i) {
7350 #pragma omp parallel // OK
7351     {
7352 #pragma omp single
7353       {
7354         bar();
7355       }
7356     }
7357   }
7358 #pragma omp target
7359 #pragma omp teams distribute
7360   for (int i = 0; i < 10; ++i) {
7361 #pragma omp parallel for // OK
7362     for (int i = 0; i < 10; ++i)
7363       ;
7364   }
7365 #pragma omp target
7366 #pragma omp teams distribute
7367   for (int i = 0; i < 10; ++i) {
7368 #pragma omp parallel for simd // OK
7369     for (int i = 0; i < 10; ++i)
7370       ;
7371   }
7372 #pragma omp target
7373 #pragma omp teams distribute
7374   for (int i = 0; i < 10; ++i) {
7375 #pragma omp parallel sections // OK
7376     {
7377       bar();
7378     }
7379   }
7380 #pragma omp target
7381 #pragma omp teams distribute
7382   for (int i = 0; i < 10; ++i) {
7383 #pragma omp task // OK
7384     {
7385       bar();
7386     }
7387   }
7388 #pragma omp target
7389 #pragma omp teams distribute
7390   for (int i = 0; i < 10; ++i) {
7391 #pragma omp taskyield // OK
7392     bar();
7393   }
7394 #pragma omp target
7395 #pragma omp teams distribute
7396   for (int i = 0; i < 10; ++i) {
7397 #pragma omp barrier // OK
7398     bar();
7399   }
7400 #pragma omp target
7401 #pragma omp teams distribute
7402   for (int i = 0; i < 10; ++i) {
7403 #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?}}
7404     bar();
7405   }
7406 #pragma omp target
7407 #pragma omp teams distribute
7408   for (int i = 0; i < 10; ++i) {
7409 #pragma omp taskwait // OK
7410     bar();
7411   }
7412 #pragma omp target
7413 #pragma omp teams distribute
7414   for (int i = 0; i < 10; ++i) {
7415 #pragma omp flush // OK
7416     bar();
7417   }
7418 #pragma omp target
7419 #pragma omp teams distribute
7420   for (int i = 0; i < 10; ++i) {
7421 #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?}}
7422     bar();
7423   }
7424 #pragma omp target
7425 #pragma omp teams distribute
7426   for (int i = 0; i < 10; ++i) {
7427 #pragma omp atomic // OK
7428     ++a;
7429   }
7430 #pragma omp target
7431 #pragma omp teams distribute
7432   for (int i = 0; i < 10; ++i) {
7433 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7434     ++a;
7435   }
7436 #pragma omp target
7437 #pragma omp teams distribute
7438   for (int i = 0; i < 10; ++i) {
7439 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7440     ++a;
7441   }
7442 #pragma omp target
7443 #pragma omp teams distribute
7444   for (int i = 0; i < 10; ++i) {
7445 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7446     for (int i = 0; i < 10; ++i)
7447       ;
7448   }
7449 #pragma omp target
7450 #pragma omp teams distribute
7451   for (int i = 0; i < 10; ++i) {
7452 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7453     ++a;
7454   }
7455 #pragma omp target
7456 #pragma omp teams distribute
7457   for (int i = 0; i < 10; ++i) {
7458 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7459     ++a;
7460   }
7461 #pragma omp target
7462 #pragma omp teams distribute
7463   for (int i = 0; i < 10; ++i) {
7464 #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?}}
7465     ++a;
7466   }
7467 #pragma omp target
7468 #pragma omp teams distribute
7469   for (int i = 0; i < 10; ++i) {
7470 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7471     ++a;
7472   }
7473 #pragma omp target
7474 #pragma omp teams distribute
7475   for (int i = 0; i < 10; ++i) {
7476 #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?}}
7477     for (int i = 0; i < 10; ++i)
7478       ++a;
7479   }
7480 #pragma omp target
7481 #pragma omp teams distribute
7482   for (int i = 0; i < 10; ++i) {
7483 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7484     for (int i = 0; i < 10; ++i)
7485       ++a;
7486   }
7487 #pragma omp target
7488 #pragma omp teams distribute
7489   for (int i = 0; i < 10; ++i) {
7490 #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?}}
7491     for (int i = 0; i < 10; ++i)
7492       ++a;
7493   }
7494 #pragma omp target
7495 #pragma omp teams distribute
7496   for (int i = 0; i < 10; ++i) {
7497 #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?}}
7498     for (int i = 0; i < 10; ++i)
7499       ++a;
7500   }
7501 #pragma omp target
7502 #pragma omp teams distribute
7503   for (int i = 0; i < 10; ++i) {
7504 #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?}}
7505     for (int i = 0; i < 10; ++i)
7506       ++a;
7507   }
7508 #pragma omp target
7509 #pragma omp teams distribute
7510   for (int i = 0; i < 10; ++i) {
7511 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7512     for (int i = 0; i < 10; ++i)
7513       ++a;
7514   }
7515 #pragma omp target
7516 #pragma omp teams distribute
7517   for (int i = 0; i < 10; ++i) {
7518 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7519     for (int i = 0; i < 10; ++i)
7520       ++a;
7521   }
7522 #pragma omp target
7523 #pragma omp teams distribute
7524   for (int i = 0; i < 10; ++i) {
7525 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7526     for (int i = 0; i < 10; ++i)
7527       ++a;
7528   }
7529 
7530 // TEAMS DISTRIBUTE DIRECTIVE
7531 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7532   for (int i = 0; i < 10; ++i)
7533     ;
7534 #pragma omp target
7535 #pragma omp teams distribute
7536   for (int i = 0; i < 10; ++i) {
7537 #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?}}
7538     for (int i = 0; i < 10; ++i)
7539       ;
7540   }
7541 #pragma omp target
7542 #pragma omp teams distribute
7543   for (int i = 0; i < 10; ++i) {
7544 #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?}}
7545     for (int i = 0; i < 10; ++i)
7546       ;
7547   }
7548 #pragma omp target
7549 #pragma omp teams distribute
7550   for (int i = 0; i < 10; ++i) {
7551 #pragma omp for // OK
7552     for (int i = 0; i < 10; ++i)
7553       ;
7554   }
7555 #pragma omp target
7556 #pragma omp teams distribute
7557   for (int i = 0; i < 10; ++i) {
7558 #pragma omp simd // OK
7559     for (int i = 0; i < 10; ++i)
7560       ;
7561   }
7562 #pragma omp target
7563 #pragma omp teams distribute
7564   for (int i = 0; i < 10; ++i) {
7565 #pragma omp for simd // OK
7566     for (int i = 0; i < 10; ++i)
7567       ;
7568   }
7569 #pragma omp target
7570 #pragma omp teams distribute
7571   for (int i = 0; i < 10; ++i) {
7572 #pragma omp parallel // OK
7573     for (int i = 0; i < 10; ++i)
7574       ;
7575   }
7576 #pragma omp target
7577 #pragma omp teams distribute
7578   for (int i = 0; i < 10; ++i) {
7579 #pragma omp sections // OK
7580     {
7581       bar();
7582     }
7583   }
7584 #pragma omp target
7585 #pragma omp teams distribute
7586   for (int i = 0; i < 10; ++i) {
7587 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
7588     {
7589       bar();
7590     }
7591   }
7592 #pragma omp target
7593 #pragma omp teams distribute
7594   for (int i = 0; i < 10; ++i) {
7595 #pragma omp single // OK
7596     {
7597       bar();
7598     }
7599   }
7600 #pragma omp target
7601 #pragma omp teams distribute
7602   for (int i = 0; i < 10; ++i) {
7603 #pragma omp master // OK
7604     {
7605       bar();
7606     }
7607   }
7608 #pragma omp target
7609 #pragma omp teams distribute
7610   for (int i = 0; i < 10; ++i) {
7611 #pragma omp critical // OK
7612     {
7613       bar();
7614     }
7615   }
7616 #pragma omp target
7617 #pragma omp teams distribute
7618   for (int i = 0; i < 10; ++i) {
7619 #pragma omp parallel // OK
7620     {
7621 #pragma omp single
7622       {
7623         bar();
7624       }
7625     }
7626   }
7627 #pragma omp target
7628 #pragma omp teams distribute
7629   for (int i = 0; i < 10; ++i) {
7630 #pragma omp parallel for // OK
7631     for (int i = 0; i < 10; ++i)
7632       ;
7633   }
7634 #pragma omp target
7635 #pragma omp teams distribute
7636   for (int i = 0; i < 10; ++i) {
7637 #pragma omp parallel for simd // OK
7638     for (int i = 0; i < 10; ++i)
7639       ;
7640   }
7641 #pragma omp target
7642 #pragma omp teams distribute
7643   for (int i = 0; i < 10; ++i) {
7644 #pragma omp parallel sections // OK
7645     {
7646       bar();
7647     }
7648   }
7649 #pragma omp target
7650 #pragma omp teams distribute
7651   for (int i = 0; i < 10; ++i) {
7652 #pragma omp task // OK
7653     {
7654       bar();
7655     }
7656   }
7657 #pragma omp target
7658 #pragma omp teams distribute
7659   for (int i = 0; i < 10; ++i) {
7660 #pragma omp taskyield // OK
7661     bar();
7662   }
7663 #pragma omp target
7664 #pragma omp teams distribute
7665   for (int i = 0; i < 10; ++i) {
7666 #pragma omp barrier // OK
7667     bar();
7668   }
7669 #pragma omp target
7670 #pragma omp teams distribute
7671   for (int i = 0; i < 10; ++i) {
7672 #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?}}
7673     bar();
7674   }
7675 #pragma omp target
7676 #pragma omp teams distribute
7677   for (int i = 0; i < 10; ++i) {
7678 #pragma omp taskwait // OK
7679     bar();
7680   }
7681 #pragma omp target
7682 #pragma omp teams distribute
7683   for (int i = 0; i < 10; ++i) {
7684 #pragma omp flush // OK
7685     bar();
7686   }
7687 #pragma omp target
7688 #pragma omp teams distribute
7689   for (int i = 0; i < 10; ++i) {
7690 #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?}}
7691     bar();
7692   }
7693 #pragma omp target
7694 #pragma omp teams distribute
7695   for (int i = 0; i < 10; ++i) {
7696 #pragma omp atomic // OK
7697     ++a;
7698   }
7699 #pragma omp target
7700 #pragma omp teams distribute
7701   for (int i = 0; i < 10; ++i) {
7702 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7703     ++a;
7704   }
7705 #pragma omp target
7706 #pragma omp teams distribute
7707   for (int i = 0; i < 10; ++i) {
7708 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7709     ++a;
7710   }
7711 #pragma omp target
7712 #pragma omp teams distribute
7713   for (int i = 0; i < 10; ++i) {
7714 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7715     for (int i = 0; i < 10; ++i)
7716       ;
7717   }
7718 #pragma omp target
7719 #pragma omp teams distribute
7720   for (int i = 0; i < 10; ++i) {
7721 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7722     ++a;
7723   }
7724 #pragma omp target
7725 #pragma omp teams distribute
7726   for (int i = 0; i < 10; ++i) {
7727 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7728     ++a;
7729   }
7730 #pragma omp target
7731 #pragma omp teams distribute
7732   for (int i = 0; i < 10; ++i) {
7733 #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?}}
7734     ++a;
7735   }
7736 #pragma omp target
7737 #pragma omp teams distribute
7738   for (int i = 0; i < 10; ++i) {
7739 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7740     ++a;
7741   }
7742 #pragma omp target
7743 #pragma omp teams distribute
7744   for (int i = 0; i < 10; ++i) {
7745 #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?}}
7746     for (int i = 0; i < 10; ++i)
7747       ++a;
7748   }
7749 #pragma omp target
7750 #pragma omp teams distribute
7751   for (int i = 0; i < 10; ++i) {
7752 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7753     for (int i = 0; i < 10; ++i)
7754       ++a;
7755   }
7756 #pragma omp target
7757 #pragma omp teams distribute
7758   for (int i = 0; i < 10; ++i) {
7759 #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?}}
7760     for (int i = 0; i < 10; ++i)
7761       ++a;
7762   }
7763 #pragma omp target
7764 #pragma omp teams distribute
7765   for (int i = 0; i < 10; ++i) {
7766 #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?}}
7767     for (int i = 0; i < 10; ++i)
7768       ++a;
7769   }
7770 #pragma omp target
7771 #pragma omp teams distribute
7772   for (int i = 0; i < 10; ++i) {
7773 #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?}}
7774     for (int i = 0; i < 10; ++i)
7775       ++a;
7776   }
7777 #pragma omp target
7778 #pragma omp teams distribute
7779   for (int i = 0; i < 10; ++i) {
7780 #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?}}
7781     for (int i = 0; i < 10; ++i)
7782       ++a;
7783   }
7784 #pragma omp target
7785 #pragma omp teams distribute
7786   for (int i = 0; i < 10; ++i) {
7787 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7788     ++a;
7789   }
7790 #pragma omp target
7791 #pragma omp teams distribute
7792   for (int i = 0; i < 10; ++i) {
7793 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
7794     for (int i = 0; i < 10; ++i)
7795       ++a;
7796   }
7797 #pragma omp target
7798 #pragma omp teams distribute
7799   for (int i = 0; i < 10; ++i) {
7800 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7801     for (int i = 0; i < 10; ++i)
7802       ++a;
7803   }
7804 #pragma omp target
7805 #pragma omp teams distribute
7806   for (int i = 0; i < 10; ++i) {
7807 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7808     for (int i = 0; i < 10; ++i)
7809       ++a;
7810   }
7811 #pragma omp target
7812 #pragma omp teams distribute
7813   for (int i = 0; i < 10; ++i) {
7814 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7815     for (int i = 0; i < 10; ++i)
7816       ++a;
7817   }
7818 
7819 // TEAMS DISTRIBUTE SIMD DIRECTIVE
7820 #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?}}
7821   for (int i = 0; i < 10; ++i)
7822     ;
7823 #pragma omp target
7824 #pragma omp teams distribute simd
7825   for (int i = 0; i < 10; ++i) {
7826 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7827     for (int i = 0; i < 10; ++i)
7828       ;
7829   }
7830 #pragma omp target
7831 #pragma omp teams distribute simd
7832   for (int i = 0; i < 10; ++i) {
7833 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7834     for (int i = 0; i < 10; ++i)
7835       ;
7836   }
7837 #pragma omp target
7838 #pragma omp teams distribute simd
7839   for (int i = 0; i < 10; ++i) {
7840 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7841     for (int i = 0; i < 10; ++i)
7842       ;
7843   }
7844 #pragma omp target
7845 #pragma omp teams distribute simd
7846   for (int i = 0; i < 10; ++i) {
7847 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7848     for (int i = 0; i < 10; ++i)
7849       ;
7850   }
7851 #pragma omp target
7852 #pragma omp teams distribute simd
7853   for (int i = 0; i < 10; ++i) {
7854 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7855     for (int i = 0; i < 10; ++i)
7856       ;
7857   }
7858 #pragma omp target
7859 #pragma omp teams distribute simd
7860   for (int i = 0; i < 10; ++i) {
7861 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7862     for (int i = 0; i < 10; ++i)
7863       ;
7864   }
7865 #pragma omp target
7866 #pragma omp teams distribute simd
7867   for (int i = 0; i < 10; ++i) {
7868 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7869     {
7870       bar();
7871     }
7872   }
7873 #pragma omp target
7874 #pragma omp teams distribute simd
7875   for (int i = 0; i < 10; ++i) {
7876 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7877     {
7878       bar();
7879     }
7880   }
7881 #pragma omp target
7882 #pragma omp teams distribute simd
7883   for (int i = 0; i < 10; ++i) {
7884 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7885     {
7886       bar();
7887     }
7888   }
7889 #pragma omp target
7890 #pragma omp teams distribute simd
7891   for (int i = 0; i < 10; ++i) {
7892 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7893     {
7894       bar();
7895     }
7896   }
7897 #pragma omp target
7898 #pragma omp teams distribute simd
7899   for (int i = 0; i < 10; ++i) {
7900 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7901     {
7902       bar();
7903     }
7904   }
7905 #pragma omp target
7906 #pragma omp teams distribute simd
7907   for (int i = 0; i < 10; ++i) {
7908 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7909     {
7910 #pragma omp single
7911       {
7912         bar();
7913       }
7914     }
7915   }
7916 #pragma omp target
7917 #pragma omp teams distribute simd
7918   for (int i = 0; i < 10; ++i) {
7919 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7920     for (int i = 0; i < 10; ++i)
7921       ;
7922   }
7923 #pragma omp target
7924 #pragma omp teams distribute simd
7925   for (int i = 0; i < 10; ++i) {
7926 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7927     for (int i = 0; i < 10; ++i)
7928       ;
7929   }
7930 #pragma omp target
7931 #pragma omp teams distribute simd
7932   for (int i = 0; i < 10; ++i) {
7933 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7934     {
7935       bar();
7936     }
7937   }
7938 #pragma omp target
7939 #pragma omp teams distribute simd
7940   for (int i = 0; i < 10; ++i) {
7941 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7942     {
7943       bar();
7944     }
7945   }
7946 #pragma omp target
7947 #pragma omp teams distribute simd
7948   for (int i = 0; i < 10; ++i) {
7949 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7950     bar();
7951   }
7952 #pragma omp target
7953 #pragma omp teams distribute simd
7954   for (int i = 0; i < 10; ++i) {
7955 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7956     bar();
7957   }
7958 #pragma omp target
7959 #pragma omp teams distribute simd
7960   for (int i = 0; i < 10; ++i) {
7961 #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?}}
7962     bar();
7963   }
7964 #pragma omp target
7965 #pragma omp teams distribute simd
7966   for (int i = 0; i < 10; ++i) {
7967 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7968     bar();
7969   }
7970 #pragma omp target
7971 #pragma omp teams distribute simd
7972   for (int i = 0; i < 10; ++i) {
7973 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7974     bar();
7975   }
7976 #pragma omp target
7977 #pragma omp teams distribute simd
7978   for (int i = 0; i < 10; ++i) {
7979 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7980     bar();
7981   }
7982 #pragma omp target
7983 #pragma omp teams distribute simd
7984   for (int i = 0; i < 10; ++i) {
7985 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
7986     ++a;
7987   }
7988 #pragma omp target
7989 #pragma omp teams distribute simd
7990   for (int i = 0; i < 10; ++i) {
7991 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7992     ++a;
7993   }
7994 #pragma omp target
7995 #pragma omp teams distribute simd
7996   for (int i = 0; i < 10; ++i) {
7997 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7998     ++a;
7999   }
8000 #pragma omp target
8001 #pragma omp teams distribute simd
8002   for (int i = 0; i < 10; ++i) {
8003 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8004     for (int i = 0; i < 10; ++i)
8005       ;
8006   }
8007 #pragma omp target
8008 #pragma omp teams distribute simd
8009   for (int i = 0; i < 10; ++i) {
8010 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8011     ++a;
8012   }
8013 #pragma omp target
8014 #pragma omp teams distribute simd
8015   for (int i = 0; i < 10; ++i) {
8016 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8017     ++a;
8018   }
8019 #pragma omp target
8020 #pragma omp teams distribute simd
8021   for (int i = 0; i < 10; ++i) {
8022 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8023     ++a;
8024   }
8025 #pragma omp target
8026 #pragma omp teams distribute simd
8027   for (int i = 0; i < 10; ++i) {
8028 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8029     ++a;
8030   }
8031 #pragma omp target
8032 #pragma omp teams distribute simd
8033   for (int i = 0; i < 10; ++i) {
8034 #pragma omp distribute 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 simd
8040   for (int i = 0; i < 10; ++i) {
8041 #pragma omp target 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 #pragma omp target
8046 #pragma omp teams distribute simd
8047   for (int i = 0; i < 10; ++i) {
8048 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8049     for (int i = 0; i < 10; ++i)
8050       ++a;
8051   }
8052 #pragma omp target
8053 #pragma omp teams distribute simd
8054   for (int i = 0; i < 10; ++i) {
8055 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8056     for (int i = 0; i < 10; ++i)
8057       ++a;
8058   }
8059 #pragma omp target
8060 #pragma omp teams distribute simd
8061   for (int i = 0; i < 10; ++i) {
8062 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8063     for (int i = 0; i < 10; ++i)
8064       ++a;
8065   }
8066 #pragma omp target
8067 #pragma omp teams distribute simd
8068   for (int i = 0; i < 10; ++i) {
8069 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8070     for (int i = 0; i < 10; ++i)
8071       ++a;
8072   }
8073 #pragma omp target
8074 #pragma omp teams distribute simd
8075   for (int i = 0; i < 10; ++i) {
8076 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8077     ++a;
8078   }
8079 #pragma omp target
8080 #pragma omp teams distribute simd
8081   for (int i = 0; i < 10; ++i) {
8082 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8083     for (int i = 0; i < 10; ++i)
8084       ++a;
8085   }
8086 #pragma omp target
8087 #pragma omp teams distribute simd
8088   for (int i = 0; i < 10; ++i) {
8089 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8090     for (int i = 0; i < 10; ++i)
8091       ++a;
8092   }
8093 #pragma omp target
8094 #pragma omp teams distribute simd
8095   for (int i = 0; i < 10; ++i) {
8096 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8097     for (int i = 0; i < 10; ++i)
8098       ++a;
8099   }
8100 #pragma omp target
8101 #pragma omp teams distribute simd
8102   for (int i = 0; i < 10; ++i) {
8103 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8104     for (int i = 0; i < 10; ++i)
8105       ++a;
8106   }
8107 
8108 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
8109 #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?}}
8110   for (int i = 0; i < 10; ++i)
8111     ;
8112 #pragma omp target
8113 #pragma omp teams distribute parallel for simd
8114   for (int i = 0; i < 10; ++i) {
8115 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8116     for (int i = 0; i < 10; ++i)
8117       ;
8118   }
8119 #pragma omp target
8120 #pragma omp teams distribute parallel for simd
8121   for (int i = 0; i < 10; ++i) {
8122 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8123     for (int i = 0; i < 10; ++i)
8124       ;
8125   }
8126 #pragma omp target
8127 #pragma omp teams distribute parallel for simd
8128   for (int i = 0; i < 10; ++i) {
8129 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8130     for (int i = 0; i < 10; ++i)
8131       ;
8132   }
8133 #pragma omp target
8134 #pragma omp teams distribute parallel for simd
8135   for (int i = 0; i < 10; ++i) {
8136 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8137     for (int i = 0; i < 10; ++i)
8138       ;
8139   }
8140 #pragma omp target
8141 #pragma omp teams distribute parallel for simd
8142   for (int i = 0; i < 10; ++i) {
8143 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8144     for (int i = 0; i < 10; ++i)
8145       ;
8146   }
8147 #pragma omp target
8148 #pragma omp teams distribute parallel for simd
8149   for (int i = 0; i < 10; ++i) {
8150 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8151     for (int i = 0; i < 10; ++i)
8152       ;
8153   }
8154 #pragma omp target
8155 #pragma omp teams distribute parallel for simd
8156   for (int i = 0; i < 10; ++i) {
8157 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8158     {
8159       bar();
8160     }
8161   }
8162 #pragma omp target
8163 #pragma omp teams distribute parallel for simd
8164   for (int i = 0; i < 10; ++i) {
8165 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8166     {
8167       bar();
8168     }
8169   }
8170 #pragma omp target
8171 #pragma omp teams distribute parallel for simd
8172   for (int i = 0; i < 10; ++i) {
8173 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8174     {
8175       bar();
8176     }
8177   }
8178 #pragma omp target
8179 #pragma omp teams distribute parallel for simd
8180   for (int i = 0; i < 10; ++i) {
8181 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8182     {
8183       bar();
8184     }
8185   }
8186 #pragma omp target
8187 #pragma omp teams distribute parallel for simd
8188   for (int i = 0; i < 10; ++i) {
8189 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8190     {
8191       bar();
8192     }
8193   }
8194 #pragma omp target
8195 #pragma omp teams distribute parallel for simd
8196   for (int i = 0; i < 10; ++i) {
8197 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8198     {
8199 #pragma omp single
8200       {
8201         bar();
8202       }
8203     }
8204   }
8205 #pragma omp target
8206 #pragma omp teams distribute parallel for simd
8207   for (int i = 0; i < 10; ++i) {
8208 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8209     for (int i = 0; i < 10; ++i)
8210       ;
8211   }
8212 #pragma omp target
8213 #pragma omp teams distribute parallel for simd
8214   for (int i = 0; i < 10; ++i) {
8215 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8216     for (int i = 0; i < 10; ++i)
8217       ;
8218   }
8219 #pragma omp target
8220 #pragma omp teams distribute parallel for simd
8221   for (int i = 0; i < 10; ++i) {
8222 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8223     {
8224       bar();
8225     }
8226   }
8227 #pragma omp target
8228 #pragma omp teams distribute parallel for simd
8229   for (int i = 0; i < 10; ++i) {
8230 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8231     {
8232       bar();
8233     }
8234   }
8235 #pragma omp target
8236 #pragma omp teams distribute parallel for simd
8237   for (int i = 0; i < 10; ++i) {
8238 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8239     bar();
8240   }
8241 #pragma omp target
8242 #pragma omp teams distribute parallel for simd
8243   for (int i = 0; i < 10; ++i) {
8244 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8245     bar();
8246   }
8247 #pragma omp target
8248 #pragma omp teams distribute parallel for simd
8249   for (int i = 0; i < 10; ++i) {
8250 #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?}}
8251     bar();
8252   }
8253 #pragma omp target
8254 #pragma omp teams distribute parallel for simd
8255   for (int i = 0; i < 10; ++i) {
8256 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8257     bar();
8258   }
8259 #pragma omp target
8260 #pragma omp teams distribute parallel for simd
8261   for (int i = 0; i < 10; ++i) {
8262 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8263     bar();
8264   }
8265 #pragma omp target
8266 #pragma omp teams distribute parallel for simd
8267   for (int i = 0; i < 10; ++i) {
8268 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8269     bar();
8270   }
8271 #pragma omp target
8272 #pragma omp teams distribute parallel for simd
8273   for (int i = 0; i < 10; ++i) {
8274 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
8275     ++a;
8276   }
8277 #pragma omp target
8278 #pragma omp teams distribute parallel for simd
8279   for (int i = 0; i < 10; ++i) {
8280 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8281     ++a;
8282   }
8283 #pragma omp target
8284 #pragma omp teams distribute parallel for simd
8285   for (int i = 0; i < 10; ++i) {
8286 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8287     ++a;
8288   }
8289 #pragma omp target
8290 #pragma omp teams distribute parallel for simd
8291   for (int i = 0; i < 10; ++i) {
8292 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8293     for (int i = 0; i < 10; ++i)
8294       ;
8295   }
8296 #pragma omp target
8297 #pragma omp teams distribute parallel for simd
8298   for (int i = 0; i < 10; ++i) {
8299 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8300     ++a;
8301   }
8302 #pragma omp target
8303 #pragma omp teams distribute parallel for simd
8304   for (int i = 0; i < 10; ++i) {
8305 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8306     ++a;
8307   }
8308 #pragma omp target
8309 #pragma omp teams distribute parallel for simd
8310   for (int i = 0; i < 10; ++i) {
8311 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8312     ++a;
8313   }
8314 #pragma omp target
8315 #pragma omp teams distribute parallel for simd
8316   for (int i = 0; i < 10; ++i) {
8317 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8318     ++a;
8319   }
8320 #pragma omp target
8321 #pragma omp teams distribute parallel for simd
8322   for (int i = 0; i < 10; ++i) {
8323 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8324     for (int i = 0; i < 10; ++i)
8325       ++a;
8326   }
8327 #pragma omp target
8328 #pragma omp teams distribute parallel for simd
8329   for (int i = 0; i < 10; ++i) {
8330 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8331     for (int i = 0; i < 10; ++i)
8332       ++a;
8333   }
8334 #pragma omp target
8335 #pragma omp teams distribute parallel for simd
8336   for (int i = 0; i < 10; ++i) {
8337 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8338     for (int i = 0; i < 10; ++i)
8339       ++a;
8340   }
8341 #pragma omp target
8342 #pragma omp teams distribute parallel for simd
8343   for (int i = 0; i < 10; ++i) {
8344 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8345     for (int i = 0; i < 10; ++i)
8346       ++a;
8347   }
8348 #pragma omp target
8349 #pragma omp teams distribute parallel for simd
8350   for (int i = 0; i < 10; ++i) {
8351 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8352     for (int i = 0; i < 10; ++i)
8353       ++a;
8354   }
8355 #pragma omp target
8356 #pragma omp teams distribute parallel for simd
8357   for (int i = 0; i < 10; ++i) {
8358 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8359     for (int i = 0; i < 10; ++i)
8360       ++a;
8361   }
8362 #pragma omp target
8363 #pragma omp teams distribute parallel for simd
8364   for (int i = 0; i < 10; ++i) {
8365 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8366     ++a;
8367   }
8368 #pragma omp target
8369 #pragma omp teams distribute parallel for simd
8370   for (int i = 0; i < 10; ++i) {
8371 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8372     for (int i = 0; i < 10; ++i)
8373       ++a;
8374   }
8375 #pragma omp target
8376 #pragma omp teams distribute parallel for simd
8377   for (int i = 0; i < 10; ++i) {
8378 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8379     for (int i = 0; i < 10; ++i)
8380       ++a;
8381   }
8382 #pragma omp target
8383 #pragma omp teams distribute parallel for simd
8384   for (int i = 0; i < 10; ++i) {
8385 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8386     for (int i = 0; i < 10; ++i)
8387       ++a;
8388   }
8389 #pragma omp target
8390 #pragma omp teams distribute parallel for simd
8391   for (int i = 0; i < 10; ++i) {
8392 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8393     for (int i = 0; i < 10; ++i)
8394       ++a;
8395   }
8396 
8397 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8398 #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?}}
8399   for (int i = 0; i < 10; ++i)
8400     ;
8401 #pragma omp target
8402 #pragma omp teams distribute parallel for
8403   for (int i = 0; i < 10; ++i) {
8404 #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?}}
8405     for (int i = 0; i < 10; ++i)
8406       ;
8407   }
8408 #pragma omp target
8409 #pragma omp teams distribute parallel for
8410   for (int i = 0; i < 10; ++i) {
8411 #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?}}
8412     for (int i = 0; i < 10; ++i)
8413       ;
8414   }
8415 #pragma omp target
8416 #pragma omp teams distribute parallel for
8417   for (int i = 0; i < 10; ++i) {
8418 #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?}}
8419     for (int i = 0; i < 10; ++i)
8420       ;
8421   }
8422 #pragma omp target
8423 #pragma omp teams distribute parallel for
8424   for (int i = 0; i < 10; ++i) {
8425 #pragma omp simd // OK
8426     for (int i = 0; i < 10; ++i)
8427       ;
8428   }
8429 #pragma omp target
8430 #pragma omp teams distribute parallel for
8431   for (int i = 0; i < 10; ++i) {
8432 #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?}}
8433     for (int i = 0; i < 10; ++i)
8434       ;
8435   }
8436 #pragma omp target
8437 #pragma omp teams distribute parallel for
8438   for (int i = 0; i < 10; ++i) {
8439 #pragma omp parallel // OK
8440     for (int i = 0; i < 10; ++i)
8441       ;
8442   }
8443 #pragma omp target
8444 #pragma omp teams distribute parallel for
8445   for (int i = 0; i < 10; ++i) {
8446 #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?}}
8447     {
8448       bar();
8449     }
8450   }
8451 #pragma omp target
8452 #pragma omp teams distribute parallel for
8453   for (int i = 0; i < 10; ++i) {
8454 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
8455     {
8456       bar();
8457     }
8458   }
8459 #pragma omp target
8460 #pragma omp teams distribute parallel for
8461   for (int i = 0; i < 10; ++i) {
8462 #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?}}
8463     {
8464       bar();
8465     }
8466   }
8467 #pragma omp target
8468 #pragma omp teams distribute parallel for
8469   for (int i = 0; i < 10; ++i) {
8470 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8471     {
8472       bar();
8473     }
8474   }
8475 #pragma omp target
8476 #pragma omp teams distribute parallel for
8477   for (int i = 0; i < 10; ++i) {
8478 #pragma omp critical // OK
8479     {
8480       bar();
8481     }
8482   }
8483 #pragma omp target
8484 #pragma omp teams distribute parallel for
8485   for (int i = 0; i < 10; ++i) {
8486 #pragma omp parallel // OK
8487     {
8488 #pragma omp single
8489       {
8490         bar();
8491       }
8492     }
8493   }
8494 #pragma omp target
8495 #pragma omp teams distribute parallel for
8496   for (int i = 0; i < 10; ++i) {
8497 #pragma omp parallel for // OK
8498     for (int i = 0; i < 10; ++i)
8499       ;
8500   }
8501 #pragma omp target
8502 #pragma omp teams distribute parallel for
8503   for (int i = 0; i < 10; ++i) {
8504 #pragma omp parallel for simd // OK
8505     for (int i = 0; i < 10; ++i)
8506       ;
8507   }
8508 #pragma omp target
8509 #pragma omp teams distribute parallel for
8510   for (int i = 0; i < 10; ++i) {
8511 #pragma omp parallel sections // OK
8512     {
8513       bar();
8514     }
8515   }
8516 #pragma omp target
8517 #pragma omp teams distribute parallel for
8518   for (int i = 0; i < 10; ++i) {
8519 #pragma omp task // OK
8520     {
8521       bar();
8522     }
8523   }
8524 #pragma omp target
8525 #pragma omp teams distribute parallel for
8526   for (int i = 0; i < 10; ++i) {
8527 #pragma omp taskyield // OK
8528     bar();
8529   }
8530 #pragma omp target
8531 #pragma omp teams distribute parallel for
8532   for (int i = 0; i < 10; ++i) {
8533 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8534     bar();
8535   }
8536 #pragma omp target
8537 #pragma omp teams distribute parallel for
8538   for (int i = 0; i < 10; ++i) {
8539 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
8540     bar();
8541   }
8542 #pragma omp target
8543 #pragma omp teams distribute parallel for
8544   for (int i = 0; i < 10; ++i) {
8545 #pragma omp taskwait // OK
8546     bar();
8547   }
8548 #pragma omp target
8549 #pragma omp teams distribute parallel for
8550   for (int i = 0; i < 10; ++i) {
8551 #pragma omp flush // OK
8552     bar();
8553   }
8554 #pragma omp target
8555 #pragma omp teams distribute parallel for
8556   for (int i = 0; i < 10; ++i) {
8557 #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?}}
8558     bar();
8559   }
8560 #pragma omp target
8561 #pragma omp teams distribute parallel for
8562   for (int i = 0; i < 10; ++i) {
8563 #pragma omp atomic // OK
8564     ++a;
8565   }
8566 #pragma omp target
8567 #pragma omp teams distribute parallel for
8568   for (int i = 0; i < 10; ++i) {
8569 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8570     ++a;
8571   }
8572 #pragma omp target
8573 #pragma omp teams distribute parallel for
8574   for (int i = 0; i < 10; ++i) {
8575 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
8576     ++a;
8577   }
8578 #pragma omp target
8579 #pragma omp teams distribute parallel for
8580   for (int i = 0; i < 10; ++i) {
8581 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8582     for (int i = 0; i < 10; ++i)
8583       ;
8584   }
8585 #pragma omp target
8586 #pragma omp teams distribute parallel for
8587   for (int i = 0; i < 10; ++i) {
8588 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8589     ++a;
8590   }
8591 #pragma omp target
8592 #pragma omp teams distribute parallel for
8593   for (int i = 0; i < 10; ++i) {
8594 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8595     ++a;
8596   }
8597 #pragma omp target
8598 #pragma omp teams distribute parallel for
8599   for (int i = 0; i < 10; ++i) {
8600 #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?}}
8601     ++a;
8602   }
8603 #pragma omp target
8604 #pragma omp teams distribute parallel for
8605   for (int i = 0; i < 10; ++i) {
8606 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8607     ++a;
8608   }
8609 #pragma omp target
8610 #pragma omp teams distribute parallel for
8611   for (int i = 0; i < 10; ++i) {
8612 #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?}}
8613     for (int i = 0; i < 10; ++i)
8614       ++a;
8615   }
8616 #pragma omp target
8617 #pragma omp teams distribute parallel for
8618   for (int i = 0; i < 10; ++i) {
8619 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
8620     for (int i = 0; i < 10; ++i)
8621       ++a;
8622   }
8623 #pragma omp target
8624 #pragma omp teams distribute parallel for
8625   for (int i = 0; i < 10; ++i) {
8626 #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?}}
8627     for (int i = 0; i < 10; ++i)
8628       ++a;
8629   }
8630 #pragma omp target
8631 #pragma omp teams distribute parallel for
8632   for (int i = 0; i < 10; ++i) {
8633 #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?}}
8634     for (int i = 0; i < 10; ++i)
8635       ++a;
8636   }
8637 #pragma omp target
8638 #pragma omp teams distribute parallel for
8639   for (int i = 0; i < 10; ++i) {
8640 #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?}}
8641     for (int i = 0; i < 10; ++i)
8642       ++a;
8643   }
8644 #pragma omp target
8645 #pragma omp teams distribute parallel for
8646   for (int i = 0; i < 10; ++i) {
8647 #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?}}
8648     for (int i = 0; i < 10; ++i)
8649       ++a;
8650   }
8651 #pragma omp target
8652 #pragma omp teams distribute parallel for
8653   for (int i = 0; i < 10; ++i) {
8654 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
8655     ++a;
8656   }
8657 #pragma omp target
8658 #pragma omp teams distribute parallel for
8659   for (int i = 0; i < 10; ++i) {
8660 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
8661     for (int i = 0; i < 10; ++i)
8662       ++a;
8663   }
8664 #pragma omp target
8665 #pragma omp teams distribute parallel for
8666   for (int i = 0; i < 10; ++i) {
8667 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
8668     for (int i = 0; i < 10; ++i)
8669       ++a;
8670   }
8671 #pragma omp target
8672 #pragma omp teams distribute parallel for
8673   for (int i = 0; i < 10; ++i) {
8674 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
8675     for (int i = 0; i < 10; ++i)
8676       ++a;
8677   }
8678 #pragma omp target
8679 #pragma omp teams distribute parallel for
8680   for (int i = 0; i < 10; ++i) {
8681 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
8682     for (int i = 0; i < 10; ++i)
8683       ++a;
8684   }
8685 
8686 // TARGET TEAMS DIRECTIVE
8687 #pragma omp target teams
8688 #pragma omp parallel
8689   bar();
8690 #pragma omp target teams
8691 #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?}}
8692   for (int i = 0; i < 10; ++i)
8693     ;
8694 #pragma omp target teams
8695 #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?}}
8696   for (int i = 0; i < 10; ++i)
8697     ;
8698 #pragma omp target teams
8699 #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?}}
8700   for (int i = 0; i < 10; ++i)
8701     ;
8702 #pragma omp target teams
8703 #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?}}
8704   {
8705     bar();
8706   }
8707 #pragma omp target teams
8708 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
8709   {
8710     bar();
8711   }
8712 #pragma omp target teams
8713 #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?}}
8714   bar();
8715 
8716 #pragma omp target teams
8717 #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?}}
8718   {
8719     bar();
8720   }
8721 #pragma omp target teams
8722 #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?}}
8723   {
8724     bar();
8725   }
8726 #pragma omp target teams
8727 #pragma omp parallel for
8728   for (int i = 0; i < 10; ++i)
8729     ;
8730 #pragma omp target teams
8731 #pragma omp parallel for simd
8732   for (int i = 0; i < 10; ++i)
8733     ;
8734 #pragma omp target teams
8735 #pragma omp parallel sections
8736   {
8737     bar();
8738   }
8739 #pragma omp target teams
8740 #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?}}
8741   {
8742     bar();
8743   }
8744 #pragma omp target teams
8745   {
8746 #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?}}
8747     bar();
8748   }
8749 #pragma omp target teams
8750   {
8751 #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?}}
8752     bar();
8753   }
8754 #pragma omp target teams
8755   {
8756 #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?}}
8757     bar();
8758   }
8759 #pragma omp target teams
8760   {
8761 #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?}}
8762     bar();
8763   }
8764 #pragma omp target teams
8765   {
8766 #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?}}
8767     bar();
8768   }
8769 #pragma omp target teams
8770   {
8771 #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?}}
8772     bar();
8773   }
8774 #pragma omp target teams
8775   {
8776 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
8777     ++a;
8778   }
8779 #pragma omp target teams
8780   {
8781 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
8782     ++a;
8783   }
8784 #pragma omp target teams
8785   {
8786 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
8787     ++a;
8788   }
8789 #pragma omp target teams
8790 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8791   for (int i = 0; i < 10; ++i)
8792     ;
8793 #pragma omp target teams
8794   {
8795 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8796   }
8797 #pragma omp target teams
8798   {
8799 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
8800   }
8801 #pragma omp target teams
8802   {
8803 #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?}}
8804     ++a;
8805   }
8806 #pragma omp target teams
8807   {
8808 #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?}}
8809   for (int i = 0; i < 10; ++i)
8810     ++a;
8811   }
8812 #pragma omp target teams
8813 #pragma omp distribute
8814   for (int i = 0; i < 10; ++i)
8815     ;
8816 #pragma omp target teams
8817   {
8818 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
8819     ++a;
8820   }
8821 #pragma omp target teams
8822 #pragma omp distribute parallel for
8823   for (int i = 0; i < 10; ++i)
8824     ;
8825 #pragma omp target teams
8826   {
8827 #pragma omp distribute parallel for
8828   for (int i = 0; i < 10; ++i)
8829     ;
8830 #pragma omp distribute parallel for
8831   for (int j = 0; j < 10; ++j)
8832     ;
8833   }
8834 #pragma omp target teams
8835   {
8836 #pragma omp distribute parallel for simd
8837   for (int i = 0; i < 10; ++i)
8838     ;
8839 #pragma omp distribute parallel for simd
8840   for (int j = 0; j < 10; ++j)
8841     ;
8842   }
8843 #pragma omp target teams
8844   {
8845 #pragma omp distribute simd
8846   for (int i = 0; i < 10; ++i)
8847     ;
8848 #pragma omp distribute simd
8849   for (int j = 0; j < 10; ++j)
8850     ;
8851   }
8852 #pragma omp target teams
8853   {
8854 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
8855   for (int i = 0; i < 10; ++i)
8856     ;
8857   }
8858 #pragma omp target teams
8859   {
8860 #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?}}
8861   for (int i = 0; i < 10; ++i)
8862     ;
8863   }
8864 #pragma omp target teams
8865   {
8866 #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?}}
8867   for (int i = 0; i < 10; ++i)
8868     ;
8869   }
8870 #pragma omp target teams
8871   {
8872 #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?}}
8873   for (int i = 0; i < 10; ++i)
8874     ;
8875   }
8876 #pragma omp target teams
8877   {
8878 #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?}}
8879   for (int i = 0; i < 10; ++i)
8880     ;
8881   }
8882 #pragma omp target teams
8883   {
8884 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
8885     a++;
8886   }
8887 #pragma omp target teams
8888   {
8889 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
8890   for (int i = 0; i < 10; ++i)
8891     ;
8892   }
8893 #pragma omp target teams
8894   {
8895 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
8896   for (int i = 0; i < 10; ++i)
8897     ;
8898   }
8899 #pragma omp target teams
8900   {
8901 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
8902   for (int i = 0; i < 10; ++i)
8903     ;
8904   }
8905 #pragma omp target teams
8906   {
8907 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
8908   for (int i = 0; i < 10; ++i)
8909     ;
8910   }
8911 
8912 // TARGET TEAMS DISTRIBUTE DIRECTIVE
8913 #pragma omp target teams distribute // OK
8914   for (int i = 0; i < 10; ++i)
8915     ;
8916 #pragma omp target teams distribute
8917   for (int i = 0; i < 10; ++i) {
8918 #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?}}
8919     for (int i = 0; i < 10; ++i)
8920       ;
8921   }
8922 #pragma omp target teams distribute
8923   for (int i = 0; i < 10; ++i) {
8924 #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?}}
8925     for (int i = 0; i < 10; ++i)
8926       ;
8927   }
8928 #pragma omp target teams distribute
8929   for (int i = 0; i < 10; ++i) {
8930 #pragma omp for // OK
8931     for (int i = 0; i < 10; ++i)
8932       ;
8933   }
8934 #pragma omp target teams distribute
8935   for (int i = 0; i < 10; ++i) {
8936 #pragma omp simd // OK
8937     for (int i = 0; i < 10; ++i)
8938       ;
8939   }
8940 #pragma omp target teams distribute
8941   for (int i = 0; i < 10; ++i) {
8942 #pragma omp for simd // OK
8943     for (int i = 0; i < 10; ++i)
8944       ;
8945   }
8946 #pragma omp target teams distribute
8947   for (int i = 0; i < 10; ++i) {
8948 #pragma omp parallel // OK
8949     for (int i = 0; i < 10; ++i)
8950       ;
8951   }
8952 #pragma omp target teams distribute
8953   for (int i = 0; i < 10; ++i) {
8954 #pragma omp sections // OK
8955     {
8956       bar();
8957     }
8958   }
8959 #pragma omp target teams distribute
8960   for (int i = 0; i < 10; ++i) {
8961 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
8962     {
8963       bar();
8964     }
8965   }
8966 #pragma omp target teams distribute
8967   for (int i = 0; i < 10; ++i) {
8968 #pragma omp single // OK
8969     {
8970       bar();
8971     }
8972   }
8973 #pragma omp target teams distribute
8974   for (int i = 0; i < 10; ++i) {
8975 #pragma omp master // OK
8976     {
8977       bar();
8978     }
8979   }
8980 #pragma omp target teams distribute
8981   for (int i = 0; i < 10; ++i) {
8982 #pragma omp critical // OK
8983     {
8984       bar();
8985     }
8986   }
8987 #pragma omp target teams distribute
8988   for (int i = 0; i < 10; ++i) {
8989 #pragma omp parallel // OK
8990     {
8991 #pragma omp single
8992       {
8993         bar();
8994       }
8995     }
8996   }
8997 #pragma omp target teams distribute
8998   for (int i = 0; i < 10; ++i) {
8999 #pragma omp parallel for // OK
9000     for (int i = 0; i < 10; ++i)
9001       ;
9002   }
9003 #pragma omp target teams distribute
9004   for (int i = 0; i < 10; ++i) {
9005 #pragma omp parallel for simd // OK
9006     for (int i = 0; i < 10; ++i)
9007       ;
9008   }
9009 #pragma omp target teams distribute
9010   for (int i = 0; i < 10; ++i) {
9011 #pragma omp parallel sections // OK
9012     {
9013       bar();
9014     }
9015   }
9016 #pragma omp target teams distribute
9017   for (int i = 0; i < 10; ++i) {
9018 #pragma omp task // OK
9019     {
9020       bar();
9021     }
9022   }
9023 #pragma omp target teams distribute
9024   for (int i = 0; i < 10; ++i) {
9025 #pragma omp taskyield // OK
9026     bar();
9027   }
9028 #pragma omp target teams distribute
9029   for (int i = 0; i < 10; ++i) {
9030 #pragma omp barrier // OK
9031     bar();
9032   }
9033 #pragma omp target teams distribute
9034   for (int i = 0; i < 10; ++i) {
9035 #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?}}
9036     bar();
9037   }
9038 #pragma omp target teams distribute
9039   for (int i = 0; i < 10; ++i) {
9040 #pragma omp taskwait // OK
9041     bar();
9042   }
9043 #pragma omp target teams distribute
9044   for (int i = 0; i < 10; ++i) {
9045 #pragma omp flush // OK
9046     bar();
9047   }
9048 #pragma omp target teams distribute
9049   for (int i = 0; i < 10; ++i) {
9050 #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?}}
9051     bar();
9052   }
9053 #pragma omp target teams distribute
9054   for (int i = 0; i < 10; ++i) {
9055 #pragma omp atomic // OK
9056     ++a;
9057   }
9058 #pragma omp target teams distribute
9059   for (int i = 0; i < 10; ++i) {
9060 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9061     ++a;
9062   }
9063 #pragma omp target teams distribute
9064   for (int i = 0; i < 10; ++i) {
9065 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9066     ++a;
9067   }
9068 #pragma omp target teams distribute
9069   for (int i = 0; i < 10; ++i) {
9070 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9071     for (int i = 0; i < 10; ++i)
9072       ;
9073   }
9074 #pragma omp target teams distribute
9075   for (int i = 0; i < 10; ++i) {
9076 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9077     ++a;
9078   }
9079 #pragma omp target teams distribute
9080   for (int i = 0; i < 10; ++i) {
9081 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9082     ++a;
9083   }
9084 #pragma omp target teams distribute
9085   for (int i = 0; i < 10; ++i) {
9086 #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?}}
9087     ++a;
9088   }
9089 #pragma omp target teams distribute
9090   for (int i = 0; i < 10; ++i) {
9091 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9092     ++a;
9093   }
9094 #pragma omp target teams distribute
9095   for (int i = 0; i < 10; ++i) {
9096 #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?}}
9097     for (int i = 0; i < 10; ++i)
9098       ++a;
9099   }
9100 #pragma omp target teams distribute
9101   for (int i = 0; i < 10; ++i) {
9102 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9103     for (int i = 0; i < 10; ++i)
9104       ++a;
9105   }
9106 #pragma omp target teams distribute
9107   for (int i = 0; i < 10; ++i) {
9108 #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?}}
9109     for (int i = 0; i < 10; ++i)
9110       ++a;
9111   }
9112 #pragma omp target teams distribute
9113   for (int i = 0; i < 10; ++i) {
9114 #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?}}
9115     for (int i = 0; i < 10; ++i)
9116       ++a;
9117   }
9118 #pragma omp target teams distribute
9119   for (int i = 0; i < 10; ++i) {
9120 #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?}}
9121     for (int i = 0; i < 10; ++i)
9122       ++a;
9123   }
9124 #pragma omp target teams distribute
9125   for (int i = 0; i < 10; ++i) {
9126 #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?}}
9127     for (int i = 0; i < 10; ++i)
9128       ;
9129   }
9130 #pragma omp target teams distribute
9131   for (int i = 0; i < 10; ++i) {
9132 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9133     a++;
9134   }
9135 #pragma omp target teams distribute
9136   for (int i = 0; i < 10; ++i) {
9137 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9138     for (int i = 0; i < 10; ++i)
9139       ;
9140   }
9141 #pragma omp target teams distribute
9142   for (int i = 0; i < 10; ++i) {
9143 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9144     for (int i = 0; i < 10; ++i)
9145       ;
9146   }
9147 #pragma omp target teams distribute
9148   for (int i = 0; i < 10; ++i) {
9149 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9150     for (int i = 0; i < 10; ++i)
9151       ;
9152   }
9153 #pragma omp target teams distribute
9154   for (int i = 0; i < 10; ++i) {
9155 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
9156     for (int i = 0; i < 10; ++i)
9157       ;
9158   }
9159 
9160 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
9161 #pragma omp target teams distribute parallel for // OK
9162   for (int i = 0; i < 10; ++i)
9163     ;
9164 #pragma omp target teams distribute parallel for
9165   for (int i = 0; i < 10; ++i) {
9166 #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?}}
9167     for (int i = 0; i < 10; ++i)
9168       ;
9169   }
9170 #pragma omp target teams distribute parallel for
9171   for (int i = 0; i < 10; ++i) {
9172 #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?}}
9173     for (int i = 0; i < 10; ++i)
9174       ;
9175   }
9176 #pragma omp target teams distribute parallel for
9177   for (int i = 0; i < 10; ++i) {
9178 #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?}}
9179     for (int i = 0; i < 10; ++i)
9180       ;
9181   }
9182 #pragma omp target teams distribute parallel for
9183   for (int i = 0; i < 10; ++i) {
9184 #pragma omp simd // OK
9185     for (int i = 0; i < 10; ++i)
9186       ;
9187   }
9188 #pragma omp target teams distribute parallel for
9189   for (int i = 0; i < 10; ++i) {
9190 #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?}}
9191     for (int i = 0; i < 10; ++i)
9192       ;
9193   }
9194 #pragma omp target teams distribute parallel for
9195   for (int i = 0; i < 10; ++i) {
9196 #pragma omp parallel // OK
9197     for (int i = 0; i < 10; ++i)
9198       ;
9199   }
9200 #pragma omp target teams distribute parallel for
9201   for (int i = 0; i < 10; ++i) {
9202 #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?}}
9203     {
9204       bar();
9205     }
9206   }
9207 #pragma omp target teams distribute parallel for
9208   for (int i = 0; i < 10; ++i) {
9209 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
9210     {
9211       bar();
9212     }
9213   }
9214 #pragma omp target teams distribute parallel for
9215   for (int i = 0; i < 10; ++i) {
9216 #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?}}
9217     {
9218       bar();
9219     }
9220   }
9221 #pragma omp target teams distribute parallel for
9222   for (int i = 0; i < 10; ++i) {
9223 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
9224     {
9225       bar();
9226     }
9227   }
9228 #pragma omp target teams distribute parallel for
9229   for (int i = 0; i < 10; ++i) {
9230 #pragma omp critical // OK
9231     {
9232       bar();
9233     }
9234   }
9235 #pragma omp target teams distribute parallel for
9236   for (int i = 0; i < 10; ++i) {
9237 #pragma omp parallel // OK
9238     {
9239 #pragma omp single
9240       {
9241         bar();
9242       }
9243     }
9244   }
9245 #pragma omp target teams distribute parallel for
9246   for (int i = 0; i < 10; ++i) {
9247 #pragma omp parallel for // OK
9248     for (int i = 0; i < 10; ++i)
9249       ;
9250   }
9251 #pragma omp target teams distribute parallel for
9252   for (int i = 0; i < 10; ++i) {
9253 #pragma omp parallel for simd // OK
9254     for (int i = 0; i < 10; ++i)
9255       ;
9256   }
9257 #pragma omp target teams distribute parallel for
9258   for (int i = 0; i < 10; ++i) {
9259 #pragma omp parallel sections // OK
9260     {
9261       bar();
9262     }
9263   }
9264 #pragma omp target teams distribute parallel for
9265   for (int i = 0; i < 10; ++i) {
9266 #pragma omp task // OK
9267     {
9268       bar();
9269     }
9270   }
9271 #pragma omp target teams distribute parallel for
9272   for (int i = 0; i < 10; ++i) {
9273 #pragma omp taskyield // OK
9274     bar();
9275   }
9276 #pragma omp target teams distribute parallel for
9277   for (int i = 0; i < 10; ++i) {
9278 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
9279     bar();
9280   }
9281 #pragma omp target teams distribute parallel for
9282   for (int i = 0; i < 10; ++i) {
9283 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
9284     bar();
9285   }
9286 #pragma omp target teams distribute parallel for
9287   for (int i = 0; i < 10; ++i) {
9288 #pragma omp taskwait // OK
9289     bar();
9290   }
9291 #pragma omp target teams distribute parallel for
9292   for (int i = 0; i < 10; ++i) {
9293 #pragma omp flush // OK
9294     bar();
9295   }
9296 #pragma omp target teams distribute parallel for
9297   for (int i = 0; i < 10; ++i) {
9298 #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?}}
9299     bar();
9300   }
9301 #pragma omp target teams distribute parallel for
9302   for (int i = 0; i < 10; ++i) {
9303 #pragma omp atomic // OK
9304     ++a;
9305   }
9306 #pragma omp target teams distribute parallel for
9307   for (int i = 0; i < 10; ++i) {
9308 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9309     ++a;
9310   }
9311 #pragma omp target teams distribute parallel for
9312   for (int i = 0; i < 10; ++i) {
9313 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9314     ++a;
9315   }
9316 #pragma omp target teams distribute parallel for
9317   for (int i = 0; i < 10; ++i) {
9318 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9319     for (int i = 0; i < 10; ++i)
9320       ;
9321   }
9322 #pragma omp target teams distribute parallel for
9323   for (int i = 0; i < 10; ++i) {
9324 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9325     ++a;
9326   }
9327 #pragma omp target teams distribute parallel for
9328   for (int i = 0; i < 10; ++i) {
9329 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9330     ++a;
9331   }
9332 #pragma omp target teams distribute parallel for
9333   for (int i = 0; i < 10; ++i) {
9334 #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?}}
9335     ++a;
9336   }
9337 #pragma omp target teams distribute parallel for
9338   for (int i = 0; i < 10; ++i) {
9339 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9340     ++a;
9341   }
9342 #pragma omp target teams distribute parallel for
9343   for (int i = 0; i < 10; ++i) {
9344 #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?}}
9345     for (int i = 0; i < 10; ++i)
9346       ++a;
9347   }
9348 #pragma omp target teams distribute parallel for
9349   for (int i = 0; i < 10; ++i) {
9350 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9351     for (int i = 0; i < 10; ++i)
9352       ++a;
9353   }
9354 #pragma omp target teams distribute parallel for
9355   for (int i = 0; i < 10; ++i) {
9356 #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?}}
9357     for (int i = 0; i < 10; ++i)
9358       ++a;
9359   }
9360 #pragma omp target teams distribute parallel for
9361   for (int i = 0; i < 10; ++i) {
9362 #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?}}
9363     for (int i = 0; i < 10; ++i)
9364       ++a;
9365   }
9366 #pragma omp target teams distribute parallel for
9367   for (int i = 0; i < 10; ++i) {
9368 #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?}}
9369     for (int i = 0; i < 10; ++i)
9370       ++a;
9371   }
9372 #pragma omp target teams distribute parallel for
9373   for (int i = 0; i < 10; ++i) {
9374 #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?}}
9375     for (int i = 0; i < 10; ++i)
9376       ;
9377   }
9378 #pragma omp target teams distribute parallel for
9379   for (int i = 0; i < 10; ++i) {
9380 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9381     a++;
9382   }
9383 #pragma omp target teams distribute parallel for
9384   for (int i = 0; i < 10; ++i) {
9385 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9386     for (int i = 0; i < 10; ++i)
9387       ;
9388   }
9389 #pragma omp target teams distribute parallel for
9390   for (int i = 0; i < 10; ++i) {
9391 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9392     for (int i = 0; i < 10; ++i)
9393       ;
9394   }
9395 #pragma omp target teams distribute parallel for
9396   for (int i = 0; i < 10; ++i) {
9397 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9398     for (int i = 0; i < 10; ++i)
9399       ;
9400   }
9401 #pragma omp target teams distribute parallel for
9402   for (int i = 0; i < 10; ++i) {
9403 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
9404     for (int i = 0; i < 10; ++i)
9405       ;
9406   }
9407 
9408 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
9409 #pragma omp target teams distribute parallel for simd // OK
9410   for (int i = 0; i < 10; ++i)
9411     ;
9412 #pragma omp target teams distribute parallel for simd
9413   for (int i = 0; i < 10; ++i) {
9414 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9415     for (int i = 0; i < 10; ++i)
9416       ;
9417   }
9418 #pragma omp target teams distribute parallel for simd
9419   for (int i = 0; i < 10; ++i) {
9420 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9421     for (int i = 0; i < 10; ++i)
9422       ;
9423   }
9424 #pragma omp target teams distribute parallel for simd
9425   for (int i = 0; i < 10; ++i) {
9426 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9427     for (int i = 0; i < 10; ++i)
9428       ;
9429   }
9430 #pragma omp target teams distribute parallel for simd
9431   for (int i = 0; i < 10; ++i) {
9432 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9433     for (int i = 0; i < 10; ++i)
9434       ;
9435   }
9436 #pragma omp target teams distribute parallel for simd
9437   for (int i = 0; i < 10; ++i) {
9438 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9439     for (int i = 0; i < 10; ++i)
9440       ;
9441   }
9442 #pragma omp target teams distribute parallel for simd
9443   for (int i = 0; i < 10; ++i) {
9444 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9445     for (int i = 0; i < 10; ++i)
9446       ;
9447   }
9448 #pragma omp target teams distribute parallel for simd
9449   for (int i = 0; i < 10; ++i) {
9450 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9451     {
9452       bar();
9453     }
9454   }
9455 #pragma omp target teams distribute parallel for simd
9456   for (int i = 0; i < 10; ++i) {
9457 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9458     {
9459       bar();
9460     }
9461   }
9462 #pragma omp target teams distribute parallel for simd
9463   for (int i = 0; i < 10; ++i) {
9464 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9465     {
9466       bar();
9467     }
9468   }
9469 #pragma omp target teams distribute parallel for simd
9470   for (int i = 0; i < 10; ++i) {
9471 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9472     {
9473       bar();
9474     }
9475   }
9476 #pragma omp target teams distribute parallel for simd
9477   for (int i = 0; i < 10; ++i) {
9478 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9479     {
9480       bar();
9481     }
9482   }
9483 #pragma omp target teams distribute parallel for simd
9484   for (int i = 0; i < 10; ++i) {
9485 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9486     {
9487 #pragma omp single
9488       {
9489         bar();
9490       }
9491     }
9492   }
9493 #pragma omp target teams distribute parallel for simd
9494   for (int i = 0; i < 10; ++i) {
9495 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9496     for (int i = 0; i < 10; ++i)
9497       ;
9498   }
9499 #pragma omp target teams distribute parallel for simd
9500   for (int i = 0; i < 10; ++i) {
9501 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9502     for (int i = 0; i < 10; ++i)
9503       ;
9504   }
9505 #pragma omp target teams distribute parallel for simd
9506   for (int i = 0; i < 10; ++i) {
9507 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9508     {
9509       bar();
9510     }
9511   }
9512 #pragma omp target teams distribute parallel for simd
9513   for (int i = 0; i < 10; ++i) {
9514 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9515     {
9516       bar();
9517     }
9518   }
9519 #pragma omp target teams distribute parallel for simd
9520   for (int i = 0; i < 10; ++i) {
9521 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9522     bar();
9523   }
9524 #pragma omp target teams distribute parallel for simd
9525   for (int i = 0; i < 10; ++i) {
9526 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9527     bar();
9528   }
9529 #pragma omp target teams distribute parallel for simd
9530   for (int i = 0; i < 10; ++i) {
9531 #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?}}
9532     bar();
9533   }
9534 #pragma omp target teams distribute parallel for simd
9535   for (int i = 0; i < 10; ++i) {
9536 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9537     bar();
9538   }
9539 #pragma omp target teams distribute parallel for simd
9540   for (int i = 0; i < 10; ++i) {
9541 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9542     bar();
9543   }
9544 #pragma omp target teams distribute parallel for simd
9545   for (int i = 0; i < 10; ++i) {
9546 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9547     bar();
9548   }
9549 #pragma omp target teams distribute parallel for simd
9550   for (int i = 0; i < 10; ++i) {
9551 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9552     ++a;
9553   }
9554 #pragma omp target teams distribute parallel for simd
9555   for (int i = 0; i < 10; ++i) {
9556 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9557     ++a;
9558   }
9559 #pragma omp target teams distribute parallel for simd
9560   for (int i = 0; i < 10; ++i) {
9561 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9562     ++a;
9563   }
9564 #pragma omp target teams distribute parallel for simd
9565   for (int i = 0; i < 10; ++i) {
9566 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9567     for (int i = 0; i < 10; ++i)
9568       ;
9569   }
9570 #pragma omp target teams distribute parallel for simd
9571   for (int i = 0; i < 10; ++i) {
9572 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9573     ++a;
9574   }
9575 #pragma omp target teams distribute parallel for simd
9576   for (int i = 0; i < 10; ++i) {
9577 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9578     ++a;
9579   }
9580 #pragma omp target teams distribute parallel for simd
9581   for (int i = 0; i < 10; ++i) {
9582 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9583     ++a;
9584   }
9585 #pragma omp target teams distribute parallel for simd
9586   for (int i = 0; i < 10; ++i) {
9587 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9588     ++a;
9589   }
9590 #pragma omp target teams distribute parallel for simd
9591   for (int i = 0; i < 10; ++i) {
9592 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9593     for (int i = 0; i < 10; ++i)
9594       ++a;
9595   }
9596 #pragma omp target teams distribute parallel for simd
9597   for (int i = 0; i < 10; ++i) {
9598 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9599     for (int i = 0; i < 10; ++i)
9600       ++a;
9601   }
9602 #pragma omp target teams distribute parallel for simd
9603   for (int i = 0; i < 10; ++i) {
9604 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9605     for (int i = 0; i < 10; ++i)
9606       ++a;
9607   }
9608 #pragma omp target teams distribute parallel for simd
9609   for (int i = 0; i < 10; ++i) {
9610 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9611     for (int i = 0; i < 10; ++i)
9612       ++a;
9613   }
9614 #pragma omp target teams distribute parallel for simd
9615   for (int i = 0; i < 10; ++i) {
9616 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9617     for (int i = 0; i < 10; ++i)
9618       ++a;
9619   }
9620 #pragma omp target teams distribute parallel for simd
9621   for (int i = 0; i < 10; ++i) {
9622 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9623     for (int i = 0; i < 10; ++i)
9624       ;
9625   }
9626 #pragma omp target teams distribute parallel for simd
9627   for (int i = 0; i < 10; ++i) {
9628 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9629     a++;
9630   }
9631 #pragma omp target teams distribute parallel for simd
9632   for (int i = 0; i < 10; ++i) {
9633 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9634     for (int i = 0; i < 10; ++i)
9635       ;
9636   }
9637 #pragma omp target teams distribute parallel for simd
9638   for (int i = 0; i < 10; ++i) {
9639 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9640     for (int i = 0; i < 10; ++i)
9641       ;
9642   }
9643 #pragma omp target teams distribute parallel for simd
9644   for (int i = 0; i < 10; ++i) {
9645 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9646     for (int i = 0; i < 10; ++i)
9647       ;
9648   }
9649 #pragma omp target teams distribute parallel for simd
9650   for (int i = 0; i < 10; ++i) {
9651 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9652     for (int i = 0; i < 10; ++i)
9653       ;
9654   }
9655 
9656 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
9657 #pragma omp target teams distribute simd // OK
9658   for (int i = 0; i < 10; ++i)
9659     ;
9660 #pragma omp target teams distribute simd
9661   for (int i = 0; i < 10; ++i) {
9662 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9663     for (int i = 0; i < 10; ++i)
9664       ;
9665   }
9666 #pragma omp target teams distribute simd
9667   for (int i = 0; i < 10; ++i) {
9668 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9669     for (int i = 0; i < 10; ++i)
9670       ;
9671   }
9672 #pragma omp target teams distribute simd
9673   for (int i = 0; i < 10; ++i) {
9674 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9675     for (int i = 0; i < 10; ++i)
9676       ;
9677   }
9678 #pragma omp target teams distribute simd
9679   for (int i = 0; i < 10; ++i) {
9680 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9681     for (int i = 0; i < 10; ++i)
9682       ;
9683   }
9684 #pragma omp target teams distribute simd
9685   for (int i = 0; i < 10; ++i) {
9686 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9687     for (int i = 0; i < 10; ++i)
9688       ;
9689   }
9690 #pragma omp target teams distribute simd
9691   for (int i = 0; i < 10; ++i) {
9692 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9693     for (int i = 0; i < 10; ++i)
9694       ;
9695   }
9696 #pragma omp target teams distribute simd
9697   for (int i = 0; i < 10; ++i) {
9698 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9699     {
9700       bar();
9701     }
9702   }
9703 #pragma omp target teams distribute simd
9704   for (int i = 0; i < 10; ++i) {
9705 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9706     {
9707       bar();
9708     }
9709   }
9710 #pragma omp target teams distribute simd
9711   for (int i = 0; i < 10; ++i) {
9712 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9713     {
9714       bar();
9715     }
9716   }
9717 #pragma omp target teams distribute simd
9718   for (int i = 0; i < 10; ++i) {
9719 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9720     {
9721       bar();
9722     }
9723   }
9724 #pragma omp target teams distribute simd
9725   for (int i = 0; i < 10; ++i) {
9726 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9727     {
9728       bar();
9729     }
9730   }
9731 #pragma omp target teams distribute simd
9732   for (int i = 0; i < 10; ++i) {
9733 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9734     {
9735 #pragma omp single
9736       {
9737         bar();
9738       }
9739     }
9740   }
9741 #pragma omp target teams distribute simd
9742   for (int i = 0; i < 10; ++i) {
9743 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9744     for (int i = 0; i < 10; ++i)
9745       ;
9746   }
9747 #pragma omp target teams distribute simd
9748   for (int i = 0; i < 10; ++i) {
9749 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9750     for (int i = 0; i < 10; ++i)
9751       ;
9752   }
9753 #pragma omp target teams distribute simd
9754   for (int i = 0; i < 10; ++i) {
9755 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9756     {
9757       bar();
9758     }
9759   }
9760 #pragma omp target teams distribute simd
9761   for (int i = 0; i < 10; ++i) {
9762 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9763     {
9764       bar();
9765     }
9766   }
9767 #pragma omp target teams distribute simd
9768   for (int i = 0; i < 10; ++i) {
9769 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9770     bar();
9771   }
9772 #pragma omp target teams distribute simd
9773   for (int i = 0; i < 10; ++i) {
9774 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9775     bar();
9776   }
9777 #pragma omp target teams distribute simd
9778   for (int i = 0; i < 10; ++i) {
9779 #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?}}
9780     bar();
9781   }
9782 #pragma omp target teams distribute simd
9783   for (int i = 0; i < 10; ++i) {
9784 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9785     bar();
9786   }
9787 #pragma omp target teams distribute simd
9788   for (int i = 0; i < 10; ++i) {
9789 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9790     bar();
9791   }
9792 #pragma omp target teams distribute simd
9793   for (int i = 0; i < 10; ++i) {
9794 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9795     bar();
9796   }
9797 #pragma omp target teams distribute simd
9798   for (int i = 0; i < 10; ++i) {
9799 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
9800     ++a;
9801   }
9802 #pragma omp target teams distribute simd
9803   for (int i = 0; i < 10; ++i) {
9804 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9805     ++a;
9806   }
9807 #pragma omp target teams distribute simd
9808   for (int i = 0; i < 10; ++i) {
9809 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9810     ++a;
9811   }
9812 #pragma omp target teams distribute simd
9813   for (int i = 0; i < 10; ++i) {
9814 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9815     for (int i = 0; i < 10; ++i)
9816       ;
9817   }
9818 #pragma omp target teams distribute simd
9819   for (int i = 0; i < 10; ++i) {
9820 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9821     ++a;
9822   }
9823 #pragma omp target teams distribute simd
9824   for (int i = 0; i < 10; ++i) {
9825 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9826     ++a;
9827   }
9828 #pragma omp target teams distribute simd
9829   for (int i = 0; i < 10; ++i) {
9830 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9831     ++a;
9832   }
9833 #pragma omp target teams distribute simd
9834   for (int i = 0; i < 10; ++i) {
9835 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9836     ++a;
9837   }
9838 #pragma omp target teams distribute simd
9839   for (int i = 0; i < 10; ++i) {
9840 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9841     for (int i = 0; i < 10; ++i)
9842       ++a;
9843   }
9844 #pragma omp target teams distribute simd
9845   for (int i = 0; i < 10; ++i) {
9846 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9847     for (int i = 0; i < 10; ++i)
9848       ++a;
9849   }
9850 #pragma omp target teams distribute simd
9851   for (int i = 0; i < 10; ++i) {
9852 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9853     for (int i = 0; i < 10; ++i)
9854       ++a;
9855   }
9856 #pragma omp target teams distribute simd
9857   for (int i = 0; i < 10; ++i) {
9858 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9859     for (int i = 0; i < 10; ++i)
9860       ++a;
9861   }
9862 #pragma omp target teams distribute simd
9863   for (int i = 0; i < 10; ++i) {
9864 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9865     for (int i = 0; i < 10; ++i)
9866       ++a;
9867   }
9868 #pragma omp target teams distribute simd
9869   for (int i = 0; i < 10; ++i) {
9870 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9871     for (int i = 0; i < 10; ++i)
9872       ;
9873   }
9874 #pragma omp target teams distribute simd
9875   for (int i = 0; i < 10; ++i) {
9876 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9877     a++;
9878   }
9879 #pragma omp target teams distribute simd
9880   for (int i = 0; i < 10; ++i) {
9881 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9882     for (int i = 0; i < 10; ++i)
9883       ;
9884   }
9885 #pragma omp target teams distribute simd
9886   for (int i = 0; i < 10; ++i) {
9887 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9888     for (int i = 0; i < 10; ++i)
9889       ;
9890   }
9891 #pragma omp target teams distribute simd
9892   for (int i = 0; i < 10; ++i) {
9893 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9894     for (int i = 0; i < 10; ++i)
9895       ;
9896   }
9897 #pragma omp target teams distribute simd
9898   for (int i = 0; i < 10; ++i) {
9899 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9900     for (int i = 0; i < 10; ++i)
9901       ;
9902   }
9903 
9904 }
9905 
9906 void foo() {
9907   int a = 0;
9908 // PARALLEL DIRECTIVE
9909 #pragma omp parallel
9910 #pragma omp for
9911   for (int i = 0; i < 10; ++i)
9912     ;
9913 #pragma omp parallel
9914 #pragma omp simd
9915   for (int i = 0; i < 10; ++i)
9916     ;
9917 #pragma omp parallel
9918 #pragma omp for simd
9919   for (int i = 0; i < 10; ++i)
9920     ;
9921 #pragma omp parallel
9922 #pragma omp sections
9923   {
9924     bar();
9925   }
9926 #pragma omp parallel
9927 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
9928   {
9929     bar();
9930   }
9931 #pragma omp parallel
9932 #pragma omp sections
9933   {
9934     bar();
9935   }
9936 #pragma omp parallel
9937 #pragma omp single
9938   bar();
9939 #pragma omp parallel
9940 #pragma omp master
9941   bar();
9942 #pragma omp parallel master
9943   bar();
9944 #pragma omp parallel masked
9945   bar();
9946 #pragma omp parallel
9947 #pragma omp critical
9948   bar();
9949 #pragma omp parallel
9950 #pragma omp parallel for
9951   for (int i = 0; i < 10; ++i)
9952     ;
9953 #pragma omp parallel
9954 #pragma omp parallel for simd
9955   for (int i = 0; i < 10; ++i)
9956     ;
9957 #pragma omp parallel
9958 #pragma omp parallel sections
9959   {
9960     bar();
9961   }
9962 #pragma omp parallel
9963 #pragma omp task
9964   {
9965     bar();
9966   }
9967 #pragma omp parallel
9968   {
9969 #pragma omp taskyield
9970     bar();
9971   }
9972 #pragma omp parallel
9973   {
9974 #pragma omp barrier
9975     bar();
9976   }
9977 #pragma omp parallel
9978   {
9979 #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?}}
9980     bar();
9981   }
9982 #pragma omp parallel
9983   {
9984 #pragma omp taskwait
9985     bar();
9986   }
9987 #pragma omp parallel
9988   {
9989 #pragma omp flush
9990     bar();
9991   }
9992 #pragma omp parallel
9993   {
9994 #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?}}
9995     bar();
9996   }
9997 #pragma omp parallel
9998   {
9999 #pragma omp atomic
10000     ++a;
10001   }
10002 #pragma omp parallel
10003   {
10004 #pragma omp target
10005     ++a;
10006   }
10007 #pragma omp parallel
10008   {
10009 #pragma omp target parallel
10010     ++a;
10011   }
10012 #pragma omp parallel
10013 #pragma omp target parallel for
10014   for (int i = 0; i < 10; ++i)
10015     ;
10016 #pragma omp parallel
10017   {
10018 #pragma omp target enter data map(to: a)
10019     ++a;
10020   }
10021 #pragma omp parallel
10022   {
10023 #pragma omp target exit data map(from: a)
10024     ++a;
10025   }
10026 #pragma omp parallel
10027   {
10028 #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?}}
10029     ++a;
10030   }
10031 #pragma omp parallel
10032   {
10033 #pragma omp taskloop
10034   for (int i = 0; i < 10; ++i)
10035     ++a;
10036   }
10037 #pragma omp parallel
10038   {
10039 #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?}}
10040     for (int i = 0; i < 10; ++i)
10041       ;
10042   }
10043 #pragma omp parallel
10044   {
10045 #pragma omp target update to(a)
10046     a++;
10047   }
10048 #pragma omp parallel
10049   {
10050 #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?}}
10051     for (int i = 0; i < 10; ++i)
10052       ;
10053   }
10054 #pragma omp parallel
10055   {
10056 #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?}}
10057     for (int i = 0; i < 10; ++i)
10058       ;
10059   }
10060 #pragma omp parallel
10061   {
10062 #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?}}
10063     for (int i = 0; i < 10; ++i)
10064       ;
10065   }
10066 #pragma omp parallel
10067   {
10068 #pragma omp target simd // OK
10069     for (int i = 0; i < 10; ++i)
10070       ;
10071   }
10072 #pragma omp parallel
10073   {
10074 #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?}}
10075     for (int i = 0; i < 10; ++i)
10076       ;
10077   }
10078 #pragma omp parallel
10079   {
10080 #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?}}
10081     for (int i = 0; i < 10; ++i)
10082       ;
10083   }
10084 #pragma omp parallel
10085   {
10086 #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?}}
10087     for (int i = 0; i < 10; ++i)
10088       ;
10089   }
10090 #pragma omp parallel
10091   {
10092 #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?}}
10093     for (int i = 0; i < 10; ++i)
10094       ;
10095   }
10096 #pragma omp parallel
10097   {
10098 #pragma omp target teams // OK
10099     a++;
10100   }
10101 #pragma omp parallel
10102   {
10103 #pragma omp target teams distribute // OK
10104     for (int i = 0; i < 10; ++i)
10105       ;
10106   }
10107 #pragma omp parallel
10108   {
10109 #pragma omp target teams distribute parallel for // OK
10110     for (int i = 0; i < 10; ++i)
10111       ;
10112   }
10113 #pragma omp parallel
10114   {
10115 #pragma omp target teams distribute parallel for simd // OK
10116     for (int i = 0; i < 10; ++i)
10117       ;
10118   }
10119 #pragma omp parallel
10120   {
10121 #pragma omp target teams distribute simd // OK
10122     for (int i = 0; i < 10; ++i)
10123       ;
10124   }
10125 
10126 // SIMD DIRECTIVE
10127 #pragma omp simd
10128   for (int i = 0; i < 10; ++i) {
10129 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10130     for (int i = 0; i < 10; ++i)
10131       ;
10132   }
10133 #pragma omp simd
10134   for (int i = 0; i < 10; ++i) {
10135 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
10136     for (int i = 0; i < 10; ++i)
10137       ;
10138   }
10139 #pragma omp simd
10140   for (int i = 0; i < 10; ++i) {
10141 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10142     for (int i = 0; i < 10; ++i)
10143       ;
10144   }
10145 #pragma omp simd
10146   for (int i = 0; i < 10; ++i) {
10147 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10148     for (int i = 0; i < 10; ++i)
10149       ;
10150   }
10151 #pragma omp simd
10152   for (int i = 0; i < 10; ++i) {
10153 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10154     {
10155       bar();
10156     }
10157   }
10158 #pragma omp simd
10159   for (int i = 0; i < 10; ++i) {
10160 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10161     {
10162       bar();
10163     }
10164   }
10165 #pragma omp simd
10166   for (int i = 0; i < 10; ++i) {
10167 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10168     bar();
10169 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10170     bar();
10171   }
10172 #pragma omp simd
10173   for (int i = 0; i < 10; ++i) {
10174 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10175     bar();
10176 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10177     bar();
10178   }
10179 #pragma omp simd
10180   for (int i = 0; i < 10; ++i) {
10181 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10182     for (int i = 0; i < 10; ++i)
10183       ;
10184   }
10185 #pragma omp simd
10186   for (int i = 0; i < 10; ++i) {
10187 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10188     for (int i = 0; i < 10; ++i)
10189       ;
10190   }
10191 #pragma omp simd
10192   for (int i = 0; i < 10; ++i) {
10193 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10194     {
10195       bar();
10196     }
10197   }
10198 #pragma omp simd
10199   for (int i = 0; i < 10; ++i) {
10200 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10201     {
10202       bar();
10203     }
10204   }
10205 #pragma omp simd
10206   for (int i = 0; i < 10; ++i) {
10207 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10208     bar();
10209   }
10210 #pragma omp simd
10211   for (int i = 0; i < 10; ++i) {
10212 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10213     bar();
10214   }
10215 #pragma omp simd
10216   for (int i = 0; i < 10; ++i) {
10217 #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}}
10218     bar();
10219   }
10220 #pragma omp simd
10221   for (int i = 0; i < 10; ++i) {
10222 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10223     bar();
10224   }
10225 #pragma omp simd
10226   for (int i = 0; i < 10; ++i) {
10227 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10228     bar();
10229   }
10230 #pragma omp simd
10231   for (int i = 0; i < 10; ++i) {
10232 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10233     bar();
10234   }
10235 #pragma omp simd
10236   for (int i = 0; i < 10; ++i) {
10237 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
10238     ++a;
10239   }
10240 #pragma omp simd
10241   for (int i = 0; i < 10; ++i) {
10242 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10243     ++a;
10244   }
10245 #pragma omp simd
10246   for (int i = 0; i < 10; ++i) {
10247 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10248     ++a;
10249   }
10250 #pragma omp simd
10251   for (int i = 0; i < 10; ++i) {
10252 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10253     for (int i = 0; i < 10; ++i)
10254       ;
10255   }
10256 #pragma omp simd
10257   for (int i = 0; i < 10; ++i) {
10258 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10259     ++a;
10260   }
10261 #pragma omp simd
10262   for (int i = 0; i < 10; ++i) {
10263 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10264     ++a;
10265   }
10266 #pragma omp simd
10267   for (int i = 0; i < 10; ++i) {
10268 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10269     ++a;
10270   }
10271 #pragma omp simd
10272   for (int i = 0; i < 10; ++i) {
10273 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10274   for (int i = 0; i < 10; ++i)
10275     ++a;
10276   }
10277 #pragma omp simd
10278   for (int i = 0; i < 10; ++i) {
10279 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10280     for (int j = 0; j < 10; ++j)
10281       ;
10282   }
10283 #pragma omp simd
10284   for (int i = 0; i < 10; ++i) {
10285 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10286     a++;
10287   }
10288 #pragma omp simd
10289   for (int i = 0; i < 10; ++i) {
10290 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10291     for (int j = 0; j < 10; ++j)
10292       ;
10293   }
10294 #pragma omp simd
10295   for (int i = 0; i < 10; ++i) {
10296 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10297     for (int j = 0; j < 10; ++j)
10298       ;
10299   }
10300 #pragma omp simd
10301   for (int i = 0; i < 10; ++i) {
10302 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10303     for (int j = 0; j < 10; ++j)
10304       ;
10305   }
10306 #pragma omp simd
10307   for (int i = 0; i < 10; ++i) {
10308 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10309     for (int j = 0; j < 10; ++j)
10310       ;
10311   }
10312 #pragma omp simd
10313   for (int i = 0; i < 10; ++i) {
10314 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10315     for (int j = 0; j < 10; ++j)
10316       ;
10317   }
10318 #pragma omp simd
10319   for (int i = 0; i < 10; ++i) {
10320 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10321     for (int j = 0; j < 10; ++j)
10322       ;
10323   }
10324 #pragma omp simd
10325   for (int i = 0; i < 10; ++i) {
10326 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10327     for (int j = 0; j < 10; ++j)
10328       ;
10329   }
10330 #pragma omp simd
10331   for (int i = 0; i < 10; ++i) {
10332 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10333     for (int j = 0; j < 10; ++j)
10334       ;
10335   }
10336 #pragma omp simd
10337   for (int i = 0; i < 10; ++i) {
10338 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10339     a++;
10340   }
10341 #pragma omp simd
10342   for (int i = 0; i < 10; ++i) {
10343 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10344     for (int j = 0; j < 10; ++j)
10345       ;
10346   }
10347 #pragma omp simd
10348   for (int i = 0; i < 10; ++i) {
10349 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10350     for (int j = 0; j < 10; ++j)
10351       ;
10352   }
10353 #pragma omp simd
10354   for (int i = 0; i < 10; ++i) {
10355 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10356     for (int j = 0; j < 10; ++j)
10357       ;
10358   }
10359 #pragma omp simd
10360   for (int i = 0; i < 10; ++i) {
10361 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10362     for (int j = 0; j < 10; ++j)
10363       ;
10364   }
10365 
10366 // FOR DIRECTIVE
10367 #pragma omp for
10368   for (int i = 0; i < 10; ++i) {
10369 #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?}}
10370     for (int i = 0; i < 10; ++i)
10371       ;
10372   }
10373 #pragma omp for
10374   for (int i = 0; i < 10; ++i) {
10375 #pragma omp simd
10376     for (int i = 0; i < 10; ++i)
10377       ;
10378   }
10379 #pragma omp for
10380   for (int i = 0; i < 10; ++i) {
10381 #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?}}
10382     for (int i = 0; i < 10; ++i)
10383       ;
10384   }
10385 #pragma omp for
10386   for (int i = 0; i < 10; ++i) {
10387 #pragma omp parallel
10388     for (int i = 0; i < 10; ++i)
10389       ;
10390   }
10391 #pragma omp for
10392   for (int i = 0; i < 10; ++i) {
10393 #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?}}
10394     {
10395       bar();
10396     }
10397   }
10398 #pragma omp for
10399   for (int i = 0; i < 10; ++i) {
10400 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
10401     {
10402       bar();
10403     }
10404   }
10405 #pragma omp for
10406   for (int i = 0; i < 10; ++i) {
10407 #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?}}
10408     bar();
10409 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
10410     bar();
10411 #pragma omp critical
10412     bar();
10413   }
10414 #pragma omp for
10415   for (int i = 0; i < 10; ++i) {
10416 #pragma omp parallel
10417     {
10418 #pragma omp single // OK
10419       {
10420         bar();
10421       }
10422 #pragma omp for // OK
10423       for (int i = 0; i < 10; ++i)
10424         ;
10425 #pragma omp for simd // OK
10426       for (int i = 0; i < 10; ++i)
10427         ;
10428 #pragma omp sections // OK
10429       {
10430         bar();
10431       }
10432     }
10433   }
10434 #pragma omp for
10435   for (int i = 0; i < 10; ++i) {
10436 #pragma omp parallel for
10437     for (int i = 0; i < 10; ++i)
10438       ;
10439   }
10440 #pragma omp for
10441   for (int i = 0; i < 10; ++i) {
10442 #pragma omp parallel for simd
10443     for (int i = 0; i < 10; ++i)
10444       ;
10445   }
10446 #pragma omp for
10447   for (int i = 0; i < 10; ++i) {
10448 #pragma omp parallel sections
10449     {
10450       bar();
10451     }
10452   }
10453 #pragma omp for
10454   for (int i = 0; i < 10; ++i) {
10455 #pragma omp task
10456     {
10457       bar();
10458     }
10459   }
10460 #pragma omp for
10461   for (int i = 0; i < 10; ++i) {
10462 #pragma omp taskyield
10463     bar();
10464   }
10465 #pragma omp for
10466   for (int i = 0; i < 10; ++i) {
10467 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
10468     bar();
10469   }
10470 #pragma omp for
10471   for (int i = 0; i < 10; ++i) {
10472 #pragma omp scan // omp45-error {{region cannot be closely nested inside 'for' region}} omp50-error {{exactly one of 'inclusive' or 'exclusive' clauses is expected}}
10473     bar();
10474   }
10475 #pragma omp for
10476   for (int i = 0; i < 10; ++i) {
10477 #pragma omp taskwait
10478     bar();
10479   }
10480 #pragma omp for
10481   for (int i = 0; i < 10; ++i) {
10482 #pragma omp flush
10483     bar();
10484   }
10485 #pragma omp for
10486   for (int i = 0; i < 10; ++i) {
10487 #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?}}
10488     bar();
10489   }
10490 #pragma omp for ordered
10491   for (int i = 0; i < 10; ++i) {
10492 #pragma omp ordered // OK
10493     bar();
10494   }
10495 #pragma omp for
10496   for (int i = 0; i < 10; ++i) {
10497 #pragma omp atomic
10498     ++a;
10499   }
10500 #pragma omp for
10501   for (int i = 0; i < 10; ++i) {
10502 #pragma omp target
10503     ++a;
10504   }
10505 #pragma omp for
10506   for (int i = 0; i < 10; ++i) {
10507 #pragma omp target parallel
10508     ++a;
10509   }
10510 #pragma omp for
10511   for (int i = 0; i < 10; ++i) {
10512 #pragma omp target parallel for
10513     for (int i = 0; i < 10; ++i)
10514       ;
10515   }
10516 #pragma omp for
10517   for (int i = 0; i < 10; ++i) {
10518 #pragma omp target enter data map(to: a)
10519     ++a;
10520   }
10521 #pragma omp for
10522   for (int i = 0; i < 10; ++i) {
10523 #pragma omp target exit data map(from: a)
10524     ++a;
10525   }
10526 #pragma omp for
10527   for (int i = 0; i < 10; ++i) {
10528 #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?}}
10529     ++a;
10530   }
10531 #pragma omp for
10532   for (int i = 0; i < 10; ++i) {
10533 #pragma omp taskloop
10534   for (int i = 0; i < 10; ++i)
10535     ++a;
10536   }
10537 #pragma omp for
10538   for (int i = 0; i < 10; ++i) {
10539 #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?}}
10540     for (int j = 0; j < 10; ++j)
10541       ;
10542   }
10543 #pragma omp for
10544   for (int i = 0; i < 10; ++i) {
10545 #pragma omp target update to(a)
10546     ++a;
10547   }
10548 #pragma omp for
10549   for (int i = 0; i < 10; ++i) {
10550 #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?}}
10551     for (int j = 0; j < 10; ++j)
10552       ;
10553   }
10554 #pragma omp for
10555   for (int i = 0; i < 10; ++i) {
10556 #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?}}
10557     for (int j = 0; j < 10; ++j)
10558       ;
10559   }
10560 #pragma omp for
10561   for (int i = 0; i < 10; ++i) {
10562 #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?}}
10563     for (int j = 0; j < 10; ++j)
10564       ;
10565   }
10566 #pragma omp for
10567   for (int i = 0; i < 10; ++i) {
10568 #pragma omp target simd // OK
10569     for (int j = 0; j < 10; ++j)
10570       ;
10571   }
10572 #pragma omp for
10573   for (int i = 0; i < 10; ++i) {
10574 #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?}}
10575     for (int j = 0; j < 10; ++j)
10576       ;
10577   }
10578 #pragma omp for
10579   for (int i = 0; i < 10; ++i) {
10580 #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?}}
10581     for (int j = 0; j < 10; ++j)
10582       ;
10583   }
10584 #pragma omp for
10585   for (int i = 0; i < 10; ++i) {
10586 #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?}}
10587     for (int j = 0; j < 10; ++j)
10588       ;
10589   }
10590 #pragma omp for
10591   for (int i = 0; i < 10; ++i) {
10592 #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?}}
10593     for (int j = 0; j < 10; ++j)
10594       ;
10595   }
10596 #pragma omp for
10597   for (int i = 0; i < 10; ++i) {
10598 #pragma omp target teams // OK
10599     a++;
10600   }
10601 #pragma omp for
10602   for (int i = 0; i < 10; ++i) {
10603 #pragma omp target teams distribute // OK
10604     for (int j = 0; j < 10; ++j)
10605       ;
10606   }
10607 #pragma omp for
10608   for (int i = 0; i < 10; ++i) {
10609 #pragma omp target teams distribute parallel for // OK
10610     for (int j = 0; j < 10; ++j)
10611       ;
10612   }
10613 #pragma omp for
10614   for (int i = 0; i < 10; ++i) {
10615 #pragma omp target teams distribute parallel for simd // OK
10616     for (int j = 0; j < 10; ++j)
10617       ;
10618   }
10619 #pragma omp for
10620   for (int i = 0; i < 10; ++i) {
10621 #pragma omp target teams distribute simd // OK
10622     for (int j = 0; j < 10; ++j)
10623       ;
10624   }
10625 
10626 // FOR SIMD DIRECTIVE
10627 #pragma omp for simd
10628   for (int i = 0; i < 10; ++i) {
10629 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10630     for (int i = 0; i < 10; ++i)
10631       ;
10632   }
10633 #pragma omp for simd
10634   for (int i = 0; i < 10; ++i) {
10635 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
10636     for (int i = 0; i < 10; ++i)
10637       ;
10638   }
10639 #pragma omp for simd
10640   for (int i = 0; i < 10; ++i) {
10641 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10642     for (int i = 0; i < 10; ++i)
10643       ;
10644   }
10645 #pragma omp for simd
10646   for (int i = 0; i < 10; ++i) {
10647 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10648     for (int i = 0; i < 10; ++i)
10649       ;
10650   }
10651 #pragma omp for simd
10652   for (int i = 0; i < 10; ++i) {
10653 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10654     {
10655       bar();
10656     }
10657   }
10658 #pragma omp for simd
10659   for (int i = 0; i < 10; ++i) {
10660 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10661     {
10662       bar();
10663     }
10664   }
10665 #pragma omp for simd
10666   for (int i = 0; i < 10; ++i) {
10667 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10668     bar();
10669 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10670     bar();
10671   }
10672 #pragma omp for simd
10673   for (int i = 0; i < 10; ++i) {
10674 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10675     bar();
10676 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10677     bar();
10678   }
10679 #pragma omp for simd
10680   for (int i = 0; i < 10; ++i) {
10681 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10682     for (int i = 0; i < 10; ++i)
10683       ;
10684   }
10685 #pragma omp for simd
10686   for (int i = 0; i < 10; ++i) {
10687 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10688     for (int i = 0; i < 10; ++i)
10689       ;
10690   }
10691 #pragma omp for simd
10692   for (int i = 0; i < 10; ++i) {
10693 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10694     {
10695       bar();
10696     }
10697   }
10698 #pragma omp for simd
10699   for (int i = 0; i < 10; ++i) {
10700 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10701     {
10702       bar();
10703     }
10704   }
10705 #pragma omp for simd
10706   for (int i = 0; i < 10; ++i) {
10707 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10708     bar();
10709   }
10710 #pragma omp for simd
10711   for (int i = 0; i < 10; ++i) {
10712 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10713     bar();
10714   }
10715 #pragma omp for simd
10716   for (int i = 0; i < 10; ++i) {
10717 #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}}
10718     bar();
10719   }
10720 #pragma omp for simd
10721   for (int i = 0; i < 10; ++i) {
10722 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10723     bar();
10724   }
10725 #pragma omp for simd
10726   for (int i = 0; i < 10; ++i) {
10727 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10728     bar();
10729   }
10730 #pragma omp for simd
10731   for (int i = 0; i < 10; ++i) {
10732 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10733     bar();
10734   }
10735 #pragma omp for simd
10736   for (int i = 0; i < 10; ++i) {
10737 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
10738     ++a;
10739   }
10740 #pragma omp for simd
10741   for (int i = 0; i < 10; ++i) {
10742 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10743     ++a;
10744   }
10745 #pragma omp for simd
10746   for (int i = 0; i < 10; ++i) {
10747 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10748     ++a;
10749   }
10750 #pragma omp for simd
10751   for (int i = 0; i < 10; ++i) {
10752 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10753     for (int i = 0; i < 10; ++i)
10754       ;
10755   }
10756 #pragma omp for simd
10757   for (int i = 0; i < 10; ++i) {
10758 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10759     ++a;
10760   }
10761 #pragma omp for simd
10762   for (int i = 0; i < 10; ++i) {
10763 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10764     ++a;
10765   }
10766 #pragma omp for simd
10767   for (int i = 0; i < 10; ++i) {
10768 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10769     ++a;
10770   }
10771 #pragma omp for simd
10772   for (int i = 0; i < 10; ++i) {
10773 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10774   for (int i = 0; i < 10; ++i)
10775     ++a;
10776   }
10777 #pragma omp for simd
10778   for (int i = 0; i < 10; ++i) {
10779 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10780     for (int j = 0; j < 10; ++j)
10781       ;
10782   }
10783 #pragma omp for simd
10784   for (int i = 0; i < 10; ++i) {
10785 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10786     ++a;
10787   }
10788 #pragma omp for simd
10789   for (int i = 0; i < 10; ++i) {
10790 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10791     for (int j = 0; j < 10; ++j)
10792       ;
10793   }
10794 #pragma omp for simd
10795   for (int i = 0; i < 10; ++i) {
10796 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10797     for (int j = 0; j < 10; ++j)
10798       ;
10799   }
10800 #pragma omp for simd
10801   for (int i = 0; i < 10; ++i) {
10802 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10803     for (int j = 0; j < 10; ++j)
10804       ;
10805   }
10806 #pragma omp for simd
10807   for (int i = 0; i < 10; ++i) {
10808 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10809     for (int j = 0; j < 10; ++j)
10810       ;
10811   }
10812 #pragma omp for simd
10813   for (int i = 0; i < 10; ++i) {
10814 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10815     for (int j = 0; j < 10; ++j)
10816       ;
10817   }
10818 #pragma omp for simd
10819   for (int i = 0; i < 10; ++i) {
10820 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10821     for (int j = 0; j < 10; ++j)
10822       ;
10823   }
10824 #pragma omp for simd
10825   for (int i = 0; i < 10; ++i) {
10826 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10827     for (int j = 0; j < 10; ++j)
10828       ;
10829   }
10830 #pragma omp for simd
10831   for (int i = 0; i < 10; ++i) {
10832 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10833     for (int j = 0; j < 10; ++j)
10834       ;
10835   }
10836 #pragma omp for simd
10837   for (int i = 0; i < 10; ++i) {
10838 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10839     a++;
10840   }
10841 #pragma omp for simd
10842   for (int i = 0; i < 10; ++i) {
10843 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10844     for (int j = 0; j < 10; ++j)
10845       ;
10846   }
10847 #pragma omp for simd
10848   for (int i = 0; i < 10; ++i) {
10849 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10850     for (int j = 0; j < 10; ++j)
10851       ;
10852   }
10853 #pragma omp for simd
10854   for (int i = 0; i < 10; ++i) {
10855 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10856     for (int j = 0; j < 10; ++j)
10857       ;
10858   }
10859 #pragma omp for simd
10860   for (int i = 0; i < 10; ++i) {
10861 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
10862     for (int j = 0; j < 10; ++j)
10863       ;
10864   }
10865 
10866 // SECTIONS DIRECTIVE
10867 #pragma omp sections
10868   {
10869 #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?}}
10870     for (int i = 0; i < 10; ++i)
10871       ;
10872   }
10873 #pragma omp sections
10874   {
10875 #pragma omp simd
10876     for (int i = 0; i < 10; ++i)
10877       ;
10878   }
10879 #pragma omp sections
10880   {
10881 #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?}}
10882     for (int i = 0; i < 10; ++i)
10883       ;
10884   }
10885 #pragma omp sections
10886   {
10887 #pragma omp parallel
10888     for (int i = 0; i < 10; ++i)
10889       ;
10890   }
10891 #pragma omp sections
10892   {
10893 #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?}}
10894     {
10895       bar();
10896     }
10897   }
10898 #pragma omp sections
10899   {
10900 #pragma omp section
10901     {
10902       bar();
10903     }
10904   }
10905 #pragma omp sections
10906   {
10907 #pragma omp critical
10908     bar();
10909 #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?}}
10910     bar();
10911 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
10912     bar();
10913   }
10914 #pragma omp sections
10915   {
10916 #pragma omp parallel
10917     {
10918 #pragma omp single // OK
10919       {
10920         bar();
10921       }
10922 #pragma omp for // OK
10923       for (int i = 0; i < 10; ++i)
10924         ;
10925 #pragma omp for simd // OK
10926       for (int i = 0; i < 10; ++i)
10927         ;
10928 #pragma omp sections // OK
10929       {
10930         bar();
10931       }
10932     }
10933   }
10934 #pragma omp sections
10935   {
10936 #pragma omp parallel for
10937     for (int i = 0; i < 10; ++i)
10938       ;
10939   }
10940 #pragma omp sections
10941   {
10942 #pragma omp parallel for simd
10943     for (int i = 0; i < 10; ++i)
10944       ;
10945   }
10946 #pragma omp sections
10947   {
10948 #pragma omp parallel sections
10949     {
10950       bar();
10951     }
10952   }
10953 #pragma omp sections
10954   {
10955 #pragma omp task
10956     {
10957       bar();
10958     }
10959   }
10960 #pragma omp sections
10961   {
10962 #pragma omp taskyield
10963   }
10964 #pragma omp sections
10965   {
10966 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
10967     bar();
10968   }
10969 #pragma omp sections
10970   {
10971 #pragma omp scan // expected-error {{region cannot be closely nested inside 'sections' region}}
10972     bar();
10973   }
10974 #pragma omp sections
10975   {
10976 #pragma omp taskwait
10977   }
10978 #pragma omp sections
10979   {
10980 #pragma omp flush
10981   }
10982 #pragma omp sections
10983   {
10984 #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?}}
10985     bar();
10986   }
10987 #pragma omp sections
10988   {
10989 #pragma omp atomic
10990     ++a;
10991   }
10992 #pragma omp sections
10993   {
10994 #pragma omp target
10995     ++a;
10996   }
10997 #pragma omp sections
10998   {
10999 #pragma omp target parallel
11000     ++a;
11001   }
11002 #pragma omp sections
11003   {
11004 #pragma omp target parallel for
11005     for (int i = 0; i < 10; ++i)
11006       ;
11007   }
11008 #pragma omp sections
11009   {
11010 #pragma omp target enter data map(to: a)
11011   }
11012 #pragma omp sections
11013   {
11014 #pragma omp target exit data map(from: a)
11015   }
11016 #pragma omp sections
11017   {
11018 #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?}}
11019     ++a;
11020   }
11021 #pragma omp sections
11022   {
11023 #pragma omp taskloop
11024   for (int i = 0; i < 10; ++i)
11025     ++a;
11026   }
11027 #pragma omp sections
11028   {
11029 #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?}}
11030     for (int i = 0; i < 10; ++i)
11031       ;
11032   }
11033 #pragma omp sections
11034   {
11035 #pragma omp target update to(a)
11036   }
11037 #pragma omp sections
11038   {
11039 #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?}}
11040     for (int i = 0; i < 10; ++i)
11041       ;
11042   }
11043 #pragma omp sections
11044   {
11045 #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?}}
11046     for (int i = 0; i < 10; ++i)
11047       ;
11048   }
11049 #pragma omp sections
11050   {
11051 #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?}}
11052     for (int i = 0; i < 10; ++i)
11053       ;
11054   }
11055 #pragma omp sections
11056   {
11057 #pragma omp target simd // OK
11058     for (int i = 0; i < 10; ++i)
11059       ;
11060   }
11061 #pragma omp sections
11062   {
11063 #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?}}
11064     for (int i = 0; i < 10; ++i)
11065       ;
11066   }
11067 #pragma omp sections
11068   {
11069 #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?}}
11070     for (int i = 0; i < 10; ++i)
11071       ;
11072   }
11073 #pragma omp sections
11074   {
11075 #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?}}
11076     for (int i = 0; i < 10; ++i)
11077       ;
11078   }
11079 #pragma omp sections
11080   {
11081 #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?}}
11082     for (int i = 0; i < 10; ++i)
11083       ;
11084   }
11085 #pragma omp sections
11086   {
11087 #pragma omp target teams // OK
11088     a++;
11089   }
11090 #pragma omp sections
11091   {
11092 #pragma omp target teams distribute // OK
11093     for (int i = 0; i < 10; ++i)
11094       ;
11095   }
11096 #pragma omp sections
11097   {
11098 #pragma omp target teams distribute parallel for // OK
11099     for (int i = 0; i < 10; ++i)
11100       ;
11101   }
11102 #pragma omp sections
11103   {
11104 #pragma omp 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 target teams distribute simd // OK
11111     for (int i = 0; i < 10; ++i)
11112       ;
11113   }
11114 
11115 // SECTION DIRECTIVE
11116 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
11117   {
11118     bar();
11119   }
11120 #pragma omp sections
11121   {
11122 #pragma omp section
11123     {
11124 #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?}}
11125       for (int i = 0; i < 10; ++i)
11126         ;
11127     }
11128   }
11129 #pragma omp sections
11130   {
11131 #pragma omp section
11132     {
11133 #pragma omp simd
11134       for (int i = 0; i < 10; ++i)
11135         ;
11136     }
11137   }
11138 #pragma omp sections
11139   {
11140 #pragma omp section
11141     {
11142 #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?}}
11143       for (int i = 0; i < 10; ++i)
11144         ;
11145     }
11146   }
11147 #pragma omp sections
11148   {
11149 #pragma omp section
11150     {
11151 #pragma omp parallel
11152       for (int i = 0; i < 10; ++i)
11153         ;
11154     }
11155   }
11156 #pragma omp sections
11157   {
11158 #pragma omp section
11159     {
11160 #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?}}
11161       {
11162         bar();
11163       }
11164     }
11165   }
11166 #pragma omp sections
11167   {
11168 #pragma omp section
11169     {
11170 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
11171       {
11172         bar();
11173       }
11174     }
11175   }
11176 #pragma omp sections
11177   {
11178 #pragma omp section
11179     {
11180 #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?}}
11181       bar();
11182 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
11183       bar();
11184 #pragma omp critical
11185       bar();
11186     }
11187   }
11188 #pragma omp sections
11189   {
11190 #pragma omp section
11191     {
11192 #pragma omp parallel
11193       {
11194 #pragma omp single // OK
11195         {
11196           bar();
11197         }
11198 #pragma omp for // OK
11199         for (int i = 0; i < 10; ++i)
11200           ;
11201 #pragma omp for simd // OK
11202         for (int i = 0; i < 10; ++i)
11203           ;
11204 #pragma omp sections // OK
11205         {
11206           bar();
11207         }
11208       }
11209     }
11210   }
11211 #pragma omp sections
11212   {
11213 #pragma omp section
11214     {
11215 #pragma omp parallel for
11216       for (int i = 0; i < 10; ++i)
11217         ;
11218     }
11219   }
11220 #pragma omp sections
11221   {
11222 #pragma omp section
11223     {
11224 #pragma omp parallel for simd
11225       for (int i = 0; i < 10; ++i)
11226         ;
11227     }
11228   }
11229 #pragma omp sections
11230   {
11231 #pragma omp section
11232     {
11233 #pragma omp parallel sections
11234       {
11235         bar();
11236       }
11237     }
11238   }
11239 #pragma omp sections
11240   {
11241 #pragma omp section
11242     {
11243 #pragma omp task
11244       {
11245         bar();
11246       }
11247     }
11248   }
11249 #pragma omp sections
11250   {
11251 #pragma omp section
11252     {
11253 #pragma omp taskyield
11254       bar();
11255     }
11256   }
11257 #pragma omp sections
11258   {
11259 #pragma omp section
11260     {
11261 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
11262       bar();
11263     }
11264   }
11265 #pragma omp sections
11266   {
11267 #pragma omp section
11268     {
11269 #pragma omp scan // expected-error {{region cannot be closely nested inside 'section' region}}
11270       bar();
11271     }
11272   }
11273 #pragma omp sections
11274   {
11275 #pragma omp section
11276     {
11277 #pragma omp taskwait
11278       bar();
11279     }
11280   }
11281 #pragma omp sections
11282   {
11283 #pragma omp section
11284     {
11285 #pragma omp flush
11286       bar();
11287     }
11288   }
11289 #pragma omp sections
11290   {
11291 #pragma omp section
11292     {
11293 #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?}}
11294       bar();
11295     }
11296   }
11297 #pragma omp sections
11298   {
11299 #pragma omp section
11300     {
11301 #pragma omp atomic
11302       ++a;
11303     }
11304   }
11305 #pragma omp sections
11306   {
11307 #pragma omp section
11308     {
11309 #pragma omp target
11310       ++a;
11311     }
11312   }
11313 #pragma omp sections
11314   {
11315 #pragma omp section
11316     {
11317 #pragma omp target parallel
11318       ++a;
11319     }
11320   }
11321 #pragma omp sections
11322   {
11323 #pragma omp section
11324     {
11325 #pragma omp target parallel for
11326       for (int i = 0; i < 10; ++i)
11327         ;
11328     }
11329   }
11330 #pragma omp sections
11331   {
11332 #pragma omp section
11333     {
11334 #pragma omp target enter data map(to: a)
11335       ++a;
11336     }
11337   }
11338 #pragma omp sections
11339   {
11340 #pragma omp section
11341     {
11342 #pragma omp target exit data map(from: a)
11343       ++a;
11344     }
11345   }
11346 #pragma omp sections
11347   {
11348 #pragma omp section
11349     {
11350 #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?}}
11351       ++a;
11352     }
11353   }
11354 #pragma omp sections
11355   {
11356 #pragma omp section
11357     {
11358 #pragma omp taskloop
11359   for (int i = 0; i < 10; ++i)
11360       ++a;
11361     }
11362   }
11363 #pragma omp sections
11364   {
11365 #pragma omp section
11366 #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?}}
11367     for (int i = 0; i < 10; ++i)
11368       ;
11369   }
11370 #pragma omp sections
11371   {
11372 #pragma omp section
11373     {
11374 #pragma omp target update to(a)
11375       a++;
11376     }
11377   }
11378 #pragma omp sections
11379   {
11380 #pragma omp section
11381 #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?}}
11382     for (int i = 0; i < 10; ++i)
11383       ;
11384   }
11385 #pragma omp sections
11386   {
11387 #pragma omp section
11388 #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?}}
11389     for (int i = 0; i < 10; ++i)
11390       ;
11391   }
11392 #pragma omp sections
11393   {
11394 #pragma omp section
11395 #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?}}
11396     for (int i = 0; i < 10; ++i)
11397       ;
11398   }
11399 #pragma omp sections
11400   {
11401 #pragma omp section
11402 #pragma omp target simd // OK
11403     for (int i = 0; i < 10; ++i)
11404       ;
11405   }
11406 #pragma omp sections
11407   {
11408 #pragma omp section
11409 #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?}}
11410     for (int i = 0; i < 10; ++i)
11411       ;
11412   }
11413 #pragma omp sections
11414   {
11415 #pragma omp section
11416 #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?}}
11417     for (int i = 0; i < 10; ++i)
11418       ;
11419   }
11420 #pragma omp sections
11421   {
11422 #pragma omp section
11423 #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?}}
11424     for (int i = 0; i < 10; ++i)
11425       ;
11426   }
11427 #pragma omp sections
11428   {
11429 #pragma omp section
11430 #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?}}
11431     for (int i = 0; i < 10; ++i)
11432       ;
11433   }
11434 #pragma omp sections
11435   {
11436 #pragma omp section
11437 #pragma omp target teams // OK
11438     a++;
11439   }
11440 #pragma omp sections
11441   {
11442 #pragma omp section
11443 #pragma omp target teams distribute // OK
11444     for (int i = 0; i < 10; ++i)
11445       ;
11446   }
11447 #pragma omp sections
11448   {
11449 #pragma omp section
11450 #pragma omp target teams distribute parallel for // OK
11451     for (int i = 0; i < 10; ++i)
11452       ;
11453   }
11454 #pragma omp sections
11455   {
11456 #pragma omp section
11457 #pragma omp target teams distribute parallel for simd // OK
11458     for (int i = 0; i < 10; ++i)
11459       ;
11460   }
11461 #pragma omp sections
11462   {
11463 #pragma omp section
11464 #pragma omp target teams distribute simd // OK
11465     for (int i = 0; i < 10; ++i)
11466       ;
11467   }
11468 
11469 // SINGLE DIRECTIVE
11470 #pragma omp single
11471   {
11472 #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?}}
11473     for (int i = 0; i < 10; ++i)
11474       ;
11475   }
11476 #pragma omp single
11477   {
11478 #pragma omp simd
11479     for (int i = 0; i < 10; ++i)
11480       ;
11481   }
11482 #pragma omp single
11483   {
11484 #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?}}
11485     for (int i = 0; i < 10; ++i)
11486       ;
11487   }
11488 #pragma omp single
11489   {
11490 #pragma omp parallel
11491     for (int i = 0; i < 10; ++i)
11492       ;
11493   }
11494 #pragma omp single
11495   {
11496 #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?}}
11497     {
11498       bar();
11499     }
11500 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
11501     bar();
11502 #pragma omp critical
11503     bar();
11504   }
11505 #pragma omp single
11506   {
11507 #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?}}
11508     {
11509       bar();
11510     }
11511   }
11512 #pragma omp single
11513   {
11514 #pragma omp parallel
11515     {
11516 #pragma omp single // OK
11517       {
11518         bar();
11519       }
11520 #pragma omp for // OK
11521       for (int i = 0; i < 10; ++i)
11522         ;
11523 #pragma omp for simd // OK
11524       for (int i = 0; i < 10; ++i)
11525         ;
11526 #pragma omp sections // OK
11527       {
11528         bar();
11529       }
11530     }
11531   }
11532 #pragma omp single
11533   {
11534 #pragma omp parallel for
11535     for (int i = 0; i < 10; ++i)
11536       ;
11537   }
11538 #pragma omp single
11539   {
11540 #pragma omp parallel for simd
11541     for (int i = 0; i < 10; ++i)
11542       ;
11543   }
11544 #pragma omp single
11545   {
11546 #pragma omp parallel sections
11547     {
11548       bar();
11549     }
11550   }
11551 #pragma omp single
11552   {
11553 #pragma omp task
11554     {
11555       bar();
11556     }
11557   }
11558 #pragma omp single
11559   {
11560 #pragma omp taskyield
11561     bar();
11562   }
11563 #pragma omp single
11564   {
11565 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
11566     bar();
11567   }
11568 #pragma omp single
11569   {
11570 #pragma omp scan // expected-error {{region cannot be closely nested inside 'single' region}}
11571     bar();
11572   }
11573 #pragma omp single
11574   {
11575 #pragma omp taskwait
11576     bar();
11577   }
11578 #pragma omp single
11579   {
11580 #pragma omp flush
11581     bar();
11582   }
11583 #pragma omp single
11584   {
11585 #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?}}
11586     bar();
11587   }
11588 #pragma omp single
11589   {
11590 #pragma omp atomic
11591     ++a;
11592   }
11593 #pragma omp single
11594   {
11595 #pragma omp target
11596     ++a;
11597   }
11598 #pragma omp single
11599   {
11600 #pragma omp target parallel
11601     ++a;
11602   }
11603 #pragma omp single
11604   {
11605 #pragma omp target parallel for
11606     for (int i = 0; i < 10; ++i)
11607       ;
11608   }
11609 #pragma omp single
11610   {
11611 #pragma omp target enter data map(to: a)
11612     ++a;
11613   }
11614 #pragma omp single
11615   {
11616 #pragma omp target exit data map(from: a)
11617     ++a;
11618   }
11619 #pragma omp single
11620   {
11621 #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?}}
11622     ++a;
11623   }
11624 #pragma omp single
11625   {
11626 #pragma omp taskloop
11627   for (int i = 0; i < 10; ++i)
11628     ++a;
11629   }
11630 #pragma omp single
11631   {
11632 #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?}}
11633     for (int i = 0; i < 10; ++i)
11634       ;
11635   }
11636 #pragma omp single
11637   {
11638 #pragma omp target update to(a)
11639     a++;
11640   }
11641 #pragma omp single
11642   {
11643 #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?}}
11644     for (int i = 0; i < 10; ++i)
11645       ;
11646   }
11647 #pragma omp single
11648   {
11649 #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?}}
11650     for (int i = 0; i < 10; ++i)
11651       ;
11652   }
11653 #pragma omp single
11654   {
11655 #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?}}
11656     for (int i = 0; i < 10; ++i)
11657       ;
11658   }
11659 #pragma omp single
11660   {
11661 #pragma omp target simd // OK
11662     for (int i = 0; i < 10; ++i)
11663       ;
11664   }
11665 #pragma omp single
11666   {
11667 #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?}}
11668     for (int i = 0; i < 10; ++i)
11669       ;
11670   }
11671 #pragma omp single
11672   {
11673 #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?}}
11674     for (int i = 0; i < 10; ++i)
11675       ;
11676   }
11677 #pragma omp single
11678   {
11679 #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?}}
11680     for (int i = 0; i < 10; ++i)
11681       ;
11682   }
11683 #pragma omp single
11684   {
11685 #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?}}
11686     for (int i = 0; i < 10; ++i)
11687       ;
11688   }
11689 #pragma omp single
11690   {
11691 #pragma omp target teams // oK
11692     a++;
11693   }
11694 #pragma omp single
11695   {
11696 #pragma omp target teams distribute // OK
11697     for (int i = 0; i < 10; ++i)
11698       ;
11699   }
11700 #pragma omp single
11701   {
11702 #pragma omp target teams distribute parallel for // OK
11703     for (int i = 0; i < 10; ++i)
11704       ;
11705   }
11706 #pragma omp single
11707   {
11708 #pragma omp target teams distribute parallel for simd // OK
11709     for (int i = 0; i < 10; ++i)
11710       ;
11711   }
11712 #pragma omp single
11713   {
11714 #pragma omp target teams distribute simd // OK
11715     for (int i = 0; i < 10; ++i)
11716       ;
11717   }
11718 
11719 // MASTER DIRECTIVE
11720 #pragma omp master
11721   {
11722 #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?}}
11723     for (int i = 0; i < 10; ++i)
11724       ;
11725   }
11726 #pragma omp master
11727   {
11728 #pragma omp simd
11729     for (int i = 0; i < 10; ++i)
11730       ;
11731   }
11732 #pragma omp master
11733   {
11734 #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?}}
11735     for (int i = 0; i < 10; ++i)
11736       ;
11737   }
11738 #pragma omp master
11739   {
11740 #pragma omp parallel
11741     for (int i = 0; i < 10; ++i)
11742       ;
11743   }
11744 #pragma omp parallel master
11745   {
11746     for (int i = 0; i < 10; ++i)
11747       ;
11748   }
11749 #pragma omp master
11750   {
11751 #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?}}
11752     {
11753       bar();
11754     }
11755   }
11756 #pragma omp master
11757   {
11758 #pragma omp master // OK, though second 'master' is redundant
11759     {
11760       bar();
11761     }
11762   }
11763 #pragma omp master
11764   {
11765 #pragma omp critical
11766     {
11767       bar();
11768     }
11769   }
11770 #pragma omp master
11771   {
11772 #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?}}
11773     {
11774       bar();
11775     }
11776   }
11777 #pragma omp master
11778   {
11779 #pragma omp parallel
11780     {
11781 #pragma omp master // OK
11782       {
11783         bar();
11784       }
11785 #pragma omp for // OK
11786       for (int i = 0; i < 10; ++i)
11787         ;
11788 #pragma omp for simd // OK
11789       for (int i = 0; i < 10; ++i)
11790         ;
11791 #pragma omp sections // OK
11792       {
11793         bar();
11794       }
11795     }
11796   }
11797 #pragma omp master
11798   {
11799 #pragma omp parallel master
11800     {
11801       bar();
11802     }
11803   }
11804 #pragma omp master
11805   {
11806 #pragma omp parallel for
11807     for (int i = 0; i < 10; ++i)
11808       ;
11809   }
11810 #pragma omp master
11811   {
11812 #pragma omp parallel for simd
11813     for (int i = 0; i < 10; ++i)
11814       ;
11815   }
11816 #pragma omp master
11817   {
11818 #pragma omp parallel sections
11819     {
11820       bar();
11821     }
11822   }
11823 #pragma omp master
11824   {
11825 #pragma omp task
11826     {
11827       bar();
11828     }
11829   }
11830 #pragma omp master
11831   {
11832 #pragma omp taskyield
11833     bar();
11834   }
11835 #pragma omp master
11836   {
11837 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
11838     bar();
11839   }
11840 #pragma omp master
11841   {
11842 #pragma omp scan // expected-error {{region cannot be closely nested inside 'master' region}}
11843     bar();
11844   }
11845 #pragma omp master
11846   {
11847 #pragma omp taskwait
11848     bar();
11849   }
11850 #pragma omp master
11851   {
11852 #pragma omp flush
11853     bar();
11854   }
11855 #pragma omp master
11856   {
11857 #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?}}
11858     bar();
11859   }
11860 #pragma omp master
11861   {
11862 #pragma omp atomic
11863     ++a;
11864   }
11865 #pragma omp master
11866   {
11867 #pragma omp target
11868     ++a;
11869   }
11870 #pragma omp master
11871   {
11872 #pragma omp target parallel
11873     ++a;
11874   }
11875 #pragma omp master
11876   {
11877 #pragma omp target parallel for
11878     for (int i = 0; i < 10; ++i)
11879       ;
11880   }
11881 #pragma omp master
11882   {
11883 #pragma omp target enter data map(to: a)
11884     ++a;
11885   }
11886 #pragma omp master
11887   {
11888 #pragma omp target exit data map(from: a)
11889     ++a;
11890   }
11891 #pragma omp master
11892   {
11893 #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?}}
11894     ++a;
11895   }
11896 #pragma omp master
11897   {
11898 #pragma omp taskloop
11899   for (int i = 0; i < 10; ++i)
11900     ++a;
11901   }
11902 #pragma omp master
11903   {
11904 #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?}}
11905     for (int i = 0; i < 10; ++i)
11906       ;
11907   }
11908 #pragma omp master
11909   {
11910 #pragma omp target update to(a)
11911     ++a;
11912   }
11913 #pragma omp master
11914   {
11915 #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?}}
11916     for (int i = 0; i < 10; ++i)
11917       ;
11918   }
11919 #pragma omp master
11920   {
11921 #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?}}
11922     for (int i = 0; i < 10; ++i)
11923       ;
11924   }
11925 #pragma omp master
11926   {
11927 #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?}}
11928     for (int i = 0; i < 10; ++i)
11929       ;
11930   }
11931 #pragma omp master
11932   {
11933 #pragma omp target simd // OK
11934     for (int i = 0; i < 10; ++i)
11935       ;
11936   }
11937 #pragma omp master
11938   {
11939 #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?}}
11940     for (int i = 0; i < 10; ++i)
11941       ;
11942   }
11943 #pragma omp master
11944   {
11945 #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?}}
11946     for (int i = 0; i < 10; ++i)
11947       ;
11948   }
11949 #pragma omp master
11950   {
11951 #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?}}
11952     for (int i = 0; i < 10; ++i)
11953       ;
11954   }
11955 #pragma omp master
11956   {
11957 #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?}}
11958     for (int i = 0; i < 10; ++i)
11959       ;
11960   }
11961 #pragma omp master
11962   {
11963 #pragma omp target teams // OK
11964     a++;
11965   }
11966 #pragma omp master
11967   {
11968 #pragma omp target teams distribute // OK
11969     for (int i = 0; i < 10; ++i)
11970       ;
11971   }
11972 #pragma omp master
11973   {
11974 #pragma omp target teams distribute parallel for // OK
11975     for (int i = 0; i < 10; ++i)
11976       ;
11977   }
11978 #pragma omp master
11979   {
11980 #pragma omp target teams distribute parallel for simd // OK
11981     for (int i = 0; i < 10; ++i)
11982       ;
11983   }
11984 #pragma omp master
11985   {
11986 #pragma omp target teams distribute simd // OK
11987     for (int i = 0; i < 10; ++i)
11988       ;
11989   }
11990 
11991 // CRITICAL DIRECTIVE
11992 #pragma omp critical
11993   {
11994 #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?}}
11995     for (int i = 0; i < 10; ++i)
11996       ;
11997   }
11998 #pragma omp critical
11999   {
12000 #pragma omp simd
12001     for (int i = 0; i < 10; ++i)
12002       ;
12003   }
12004 #pragma omp critical
12005   {
12006 #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?}}
12007     for (int i = 0; i < 10; ++i)
12008       ;
12009   }
12010 #pragma omp critical
12011   {
12012 #pragma omp parallel
12013     for (int i = 0; i < 10; ++i)
12014       ;
12015   }
12016 #pragma omp critical
12017   {
12018 #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?}}
12019     {
12020       bar();
12021     }
12022   }
12023 #pragma omp critical
12024   {
12025 #pragma omp master // OK, though second 'master' is redundant
12026     {
12027       bar();
12028     }
12029   }
12030 #pragma omp critical
12031   {
12032 #pragma omp critical
12033     {
12034       bar();
12035     }
12036   }
12037 #pragma omp critical
12038   {
12039 #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?}}
12040     {
12041       bar();
12042     }
12043   }
12044 #pragma omp critical
12045   {
12046 #pragma omp parallel
12047     {
12048 #pragma omp master // OK
12049       {
12050         bar();
12051       }
12052 #pragma omp for // OK
12053       for (int i = 0; i < 10; ++i)
12054         ;
12055 #pragma omp for simd // OK
12056       for (int i = 0; i < 10; ++i)
12057         ;
12058 #pragma omp sections // OK
12059       {
12060         bar();
12061       }
12062     }
12063   }
12064 #pragma omp critical
12065   {
12066 #pragma omp parallel for
12067     for (int i = 0; i < 10; ++i)
12068       ;
12069   }
12070 #pragma omp critical
12071   {
12072 #pragma omp parallel for simd
12073     for (int i = 0; i < 10; ++i)
12074       ;
12075   }
12076 #pragma omp critical
12077   {
12078 #pragma omp parallel sections
12079     {
12080       bar();
12081     }
12082   }
12083 #pragma omp critical
12084   {
12085 #pragma omp task
12086     {
12087       bar();
12088     }
12089   }
12090 #pragma omp critical
12091   {
12092 #pragma omp taskyield
12093     bar();
12094   }
12095 #pragma omp critical
12096   {
12097 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
12098     bar();
12099   }
12100 #pragma omp critical
12101   {
12102 #pragma omp scan // expected-error {{region cannot be closely nested inside 'critical' region}}
12103     bar();
12104   }
12105 #pragma omp critical
12106   {
12107 #pragma omp taskwait
12108     bar();
12109   }
12110 #pragma omp critical(Belka)
12111   {
12112 #pragma omp critical(Strelka)
12113     bar();
12114   }
12115 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
12116   {
12117 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
12118     {
12119 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
12120       {
12121 #pragma omp parallel
12122 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
12123         {
12124           bar();
12125         }
12126       }
12127     }
12128   }
12129 #pragma omp critical
12130   {
12131 #pragma omp flush
12132     bar();
12133   }
12134 #pragma omp critical
12135   {
12136 #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?}}
12137     bar();
12138   }
12139 #pragma omp critical
12140   {
12141 #pragma omp atomic
12142     ++a;
12143   }
12144 #pragma omp critical
12145   {
12146 #pragma omp target
12147     ++a;
12148   }
12149 #pragma omp critical
12150   {
12151 #pragma omp target parallel
12152     ++a;
12153   }
12154 #pragma omp critical
12155   {
12156 #pragma omp target parallel for
12157     for (int i = 0; i < 10; ++i)
12158       ;
12159   }
12160 #pragma omp critical
12161   {
12162 #pragma omp target enter data map(to: a)
12163     ++a;
12164   }
12165 #pragma omp critical
12166   {
12167 #pragma omp target exit data map(from: a)
12168     ++a;
12169   }
12170 #pragma omp critical
12171   {
12172 #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?}}
12173     ++a;
12174   }
12175 #pragma omp critical
12176   {
12177 #pragma omp taskloop
12178   for (int i = 0; i < 10; ++i)
12179     ++a;
12180   }
12181 #pragma omp critical
12182   {
12183 #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?}}
12184     for (int i = 0; i < 10; ++i)
12185       ;
12186   }
12187 #pragma omp critical
12188   {
12189 #pragma omp target update to(a)
12190     a++;
12191   }
12192 #pragma omp critical
12193   {
12194 #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?}}
12195     for (int i = 0; i < 10; ++i)
12196       ;
12197   }
12198 #pragma omp critical
12199   {
12200 #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?}}
12201     for (int i = 0; i < 10; ++i)
12202       ;
12203   }
12204 #pragma omp critical
12205   {
12206 #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?}}
12207     for (int i = 0; i < 10; ++i)
12208       ;
12209   }
12210 #pragma omp critical
12211   {
12212 #pragma omp target simd // OK
12213     for (int i = 0; i < 10; ++i)
12214       ;
12215   }
12216 #pragma omp critical
12217   {
12218 #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?}}
12219     for (int i = 0; i < 10; ++i)
12220       ;
12221   }
12222 #pragma omp critical
12223   {
12224 #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?}}
12225     for (int i = 0; i < 10; ++i)
12226       ;
12227   }
12228 #pragma omp critical
12229   {
12230 #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?}}
12231     for (int i = 0; i < 10; ++i)
12232       ;
12233   }
12234 #pragma omp critical
12235   {
12236 #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?}}
12237     for (int i = 0; i < 10; ++i)
12238       ;
12239   }
12240 #pragma omp critical
12241   {
12242 #pragma omp target teams // OK
12243     a++;
12244   }
12245 #pragma omp critical
12246   {
12247 #pragma omp target teams distribute // OK
12248     for (int i = 0; i < 10; ++i)
12249       ;
12250   }
12251 #pragma omp critical
12252   {
12253 #pragma omp target teams distribute parallel for // OK
12254     for (int i = 0; i < 10; ++i)
12255       ;
12256   }
12257 #pragma omp critical
12258   {
12259 #pragma omp target teams distribute parallel for simd // OK
12260     for (int i = 0; i < 10; ++i)
12261       ;
12262   }
12263 #pragma omp critical
12264   {
12265 #pragma omp target teams distribute simd // OK
12266     for (int i = 0; i < 10; ++i)
12267       ;
12268   }
12269 
12270 // PARALLEL FOR DIRECTIVE
12271 #pragma omp parallel for
12272   for (int i = 0; i < 10; ++i) {
12273 #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?}}
12274     for (int i = 0; i < 10; ++i)
12275       ;
12276   }
12277 #pragma omp parallel for
12278   for (int i = 0; i < 10; ++i) {
12279 #pragma omp simd
12280     for (int i = 0; i < 10; ++i)
12281       ;
12282   }
12283 #pragma omp parallel for
12284   for (int i = 0; i < 10; ++i) {
12285 #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?}}
12286     for (int i = 0; i < 10; ++i)
12287       ;
12288   }
12289 
12290 #pragma omp parallel for
12291   for (int i = 0; i < 10; ++i) {
12292 #pragma omp parallel
12293     for (int i = 0; i < 10; ++i)
12294       ;
12295   }
12296 #pragma omp parallel for
12297   for (int i = 0; i < 10; ++i) {
12298 #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?}}
12299     {
12300       bar();
12301     }
12302   }
12303 #pragma omp parallel for
12304   for (int i = 0; i < 10; ++i) {
12305 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
12306     {
12307       bar();
12308     }
12309   }
12310 #pragma omp parallel for
12311   for (int i = 0; i < 10; ++i) {
12312 #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?}}
12313     {
12314       bar();
12315     }
12316 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
12317     {
12318       bar();
12319     }
12320 #pragma omp critical
12321     {
12322       bar();
12323     }
12324   }
12325 #pragma omp parallel for
12326   for (int i = 0; i < 10; ++i) {
12327 #pragma omp parallel
12328     {
12329 #pragma omp single // OK
12330       {
12331         bar();
12332       }
12333 #pragma omp master // OK
12334       {
12335         bar();
12336       }
12337 #pragma omp critical // OK
12338       {
12339         bar();
12340       }
12341 #pragma omp for // OK
12342       for (int i = 0; i < 10; ++i)
12343         ;
12344 #pragma omp for simd // OK
12345       for (int i = 0; i < 10; ++i)
12346         ;
12347 #pragma omp sections // OK
12348       {
12349         bar();
12350       }
12351     }
12352   }
12353 #pragma omp parallel for
12354   for (int i = 0; i < 10; ++i) {
12355 #pragma omp parallel for
12356     for (int i = 0; i < 10; ++i)
12357       ;
12358   }
12359 #pragma omp parallel for
12360   for (int i = 0; i < 10; ++i) {
12361 #pragma omp parallel for simd
12362     for (int i = 0; i < 10; ++i)
12363       ;
12364   }
12365 #pragma omp parallel for
12366   for (int i = 0; i < 10; ++i) {
12367 #pragma omp parallel sections
12368     {
12369       bar();
12370     }
12371   }
12372 #pragma omp parallel for
12373   for (int i = 0; i < 10; ++i) {
12374 #pragma omp task
12375     {
12376       bar();
12377     }
12378   }
12379 #pragma omp parallel for
12380   for (int i = 0; i < 10; ++i) {
12381 #pragma omp taskyield
12382     bar();
12383   }
12384 #pragma omp parallel for
12385   for (int i = 0; i < 10; ++i) {
12386 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
12387     bar();
12388   }
12389 #pragma omp parallel for
12390   for (int i = 0; i < 10; ++i) {
12391 #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}}
12392     bar();
12393   }
12394 #pragma omp parallel for
12395   for (int i = 0; i < 10; ++i) {
12396 #pragma omp taskwait
12397     bar();
12398   }
12399 #pragma omp parallel for
12400   for (int i = 0; i < 10; ++i) {
12401 #pragma omp flush
12402     bar();
12403   }
12404 #pragma omp parallel for
12405   for (int i = 0; i < 10; ++i) {
12406 #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?}}
12407     bar();
12408   }
12409 #pragma omp parallel for ordered
12410   for (int i = 0; i < 10; ++i) {
12411 #pragma omp ordered // OK
12412     bar();
12413   }
12414 #pragma omp parallel for
12415   for (int i = 0; i < 10; ++i) {
12416 #pragma omp atomic
12417     ++a;
12418   }
12419 #pragma omp parallel for
12420   for (int i = 0; i < 10; ++i) {
12421 #pragma omp target
12422     ++a;
12423   }
12424 #pragma omp parallel for
12425   for (int i = 0; i < 10; ++i) {
12426 #pragma omp target parallel
12427     ++a;
12428   }
12429 #pragma omp parallel for
12430   for (int i = 0; i < 10; ++i) {
12431 #pragma omp target parallel for
12432     for (int i = 0; i < 10; ++i)
12433       ;
12434   }
12435 #pragma omp parallel for
12436   for (int i = 0; i < 10; ++i) {
12437 #pragma omp target enter data map(to: a)
12438     ++a;
12439   }
12440 #pragma omp parallel for
12441   for (int i = 0; i < 10; ++i) {
12442 #pragma omp target exit data map(from: a)
12443     ++a;
12444   }
12445 #pragma omp parallel for
12446   for (int i = 0; i < 10; ++i) {
12447 #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?}}
12448     ++a;
12449   }
12450 #pragma omp parallel for
12451   for (int i = 0; i < 10; ++i) {
12452 #pragma omp taskloop
12453   for (int i = 0; i < 10; ++i)
12454     ++a;
12455   }
12456 #pragma omp parallel for
12457   for (int i = 0; i < 10; ++i) {
12458 #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?}}
12459     for (int j = 0; j < 10; ++j)
12460       ;
12461   }
12462 #pragma omp parallel for
12463   for (int i = 0; i < 10; ++i) {
12464 #pragma omp target update to(a)
12465     a++;
12466   }
12467 #pragma omp parallel for
12468   for (int i = 0; i < 10; ++i) {
12469 #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?}}
12470     for (int j = 0; j < 10; ++j)
12471       ;
12472   }
12473 #pragma omp parallel for
12474   for (int i = 0; i < 10; ++i) {
12475 #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?}}
12476     for (int j = 0; j < 10; ++j)
12477       ;
12478   }
12479 #pragma omp parallel for
12480   for (int i = 0; i < 10; ++i) {
12481 #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?}}
12482     for (int j = 0; j < 10; ++j)
12483       ;
12484   }
12485 #pragma omp parallel for
12486   for (int i = 0; i < 10; ++i) {
12487 #pragma omp target simd // OK
12488     for (int j = 0; j < 10; ++j)
12489       ;
12490   }
12491 #pragma omp parallel for
12492   for (int i = 0; i < 10; ++i) {
12493 #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?}}
12494     for (int j = 0; j < 10; ++j)
12495       ;
12496   }
12497 #pragma omp parallel for
12498   for (int i = 0; i < 10; ++i) {
12499 #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?}}
12500     for (int j = 0; j < 10; ++j)
12501       ;
12502   }
12503 #pragma omp parallel for
12504   for (int i = 0; i < 10; ++i) {
12505 #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?}}
12506     for (int j = 0; j < 10; ++j)
12507       ;
12508   }
12509 #pragma omp parallel for
12510   for (int i = 0; i < 10; ++i) {
12511 #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?}}
12512     for (int j = 0; j < 10; ++j)
12513       ;
12514   }
12515 #pragma omp parallel for
12516   for (int i = 0; i < 10; ++i) {
12517 #pragma omp target teams // OK
12518     a++;
12519   }
12520 #pragma omp parallel for
12521   for (int i = 0; i < 10; ++i) {
12522 #pragma omp target teams distribute // OK
12523     for (int j = 0; j < 10; ++j)
12524       ;
12525   }
12526 #pragma omp parallel for
12527   for (int i = 0; i < 10; ++i) {
12528 #pragma omp target teams distribute parallel for // OK
12529     for (int j = 0; j < 10; ++j)
12530       ;
12531   }
12532 #pragma omp parallel for
12533   for (int i = 0; i < 10; ++i) {
12534 #pragma omp target teams distribute parallel for simd // OK
12535     for (int j = 0; j < 10; ++j)
12536       ;
12537   }
12538 #pragma omp parallel for
12539   for (int i = 0; i < 10; ++i) {
12540 #pragma omp target teams distribute simd // OK
12541     for (int j = 0; j < 10; ++j)
12542       ;
12543   }
12544 
12545 // PARALLEL FOR SIMD DIRECTIVE
12546 #pragma omp parallel for simd
12547   for (int i = 0; i < 10; ++i) {
12548 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12549     for (int i = 0; i < 10; ++i)
12550       ;
12551   }
12552 #pragma omp parallel for simd
12553   for (int i = 0; i < 10; ++i) {
12554 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
12555     for (int i = 0; i < 10; ++i)
12556       ;
12557   }
12558 #pragma omp parallel for simd
12559   for (int i = 0; i < 10; ++i) {
12560 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12561     for (int i = 0; i < 10; ++i)
12562       ;
12563   }
12564 #pragma omp parallel for simd
12565   for (int i = 0; i < 10; ++i) {
12566 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12567     for (int i = 0; i < 10; ++i)
12568       ;
12569   }
12570 #pragma omp parallel for simd
12571   for (int i = 0; i < 10; ++i) {
12572 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12573     {
12574       bar();
12575     }
12576   }
12577 #pragma omp parallel for simd
12578   for (int i = 0; i < 10; ++i) {
12579 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12580     {
12581       bar();
12582     }
12583   }
12584 #pragma omp parallel for simd
12585   for (int i = 0; i < 10; ++i) {
12586 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12587     {
12588       bar();
12589     }
12590   }
12591 
12592 #pragma omp parallel for simd
12593   for (int i = 0; i < 10; ++i) {
12594 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12595     {
12596       bar();
12597     }
12598   }
12599 
12600 #pragma omp parallel for simd
12601   for (int i = 0; i < 10; ++i) {
12602 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12603     {
12604       bar();
12605     }
12606   }
12607 
12608 #pragma omp parallel for simd
12609   for (int i = 0; i < 10; ++i) {
12610 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12611     {
12612 #pragma omp single
12613       {
12614         bar();
12615       }
12616 #pragma omp for
12617       for (int i = 0; i < 10; ++i)
12618         ;
12619 #pragma omp for simd
12620       for (int i = 0; i < 10; ++i)
12621         ;
12622 #pragma omp sections
12623       {
12624         bar();
12625       }
12626     }
12627   }
12628 #pragma omp parallel for simd
12629   for (int i = 0; i < 10; ++i) {
12630 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12631     for (int i = 0; i < 10; ++i)
12632       ;
12633   }
12634 #pragma omp parallel for simd
12635   for (int i = 0; i < 10; ++i) {
12636 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
12637     for (int i = 0; i < 10; ++i)
12638       ;
12639   }
12640 #pragma omp parallel for simd
12641   for (int i = 0; i < 10; ++i) {
12642 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12643     {
12644       bar();
12645     }
12646   }
12647 #pragma omp parallel for simd
12648   for (int i = 0; i < 10; ++i) {
12649 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12650     {
12651       bar();
12652     }
12653   }
12654 #pragma omp parallel for simd
12655   for (int i = 0; i < 10; ++i) {
12656 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12657     bar();
12658   }
12659 #pragma omp parallel for simd
12660   for (int i = 0; i < 10; ++i) {
12661 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12662     bar();
12663   }
12664 #pragma omp parallel for simd
12665   for (int i = 0; i < 10; ++i) {
12666 #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}}
12667     bar();
12668   }
12669 #pragma omp parallel for simd
12670   for (int i = 0; i < 10; ++i) {
12671 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12672     bar();
12673   }
12674 #pragma omp parallel for simd
12675   for (int i = 0; i < 10; ++i) {
12676 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12677     bar();
12678   }
12679 #pragma omp parallel for simd
12680   for (int i = 0; i < 10; ++i) {
12681 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12682     bar();
12683   }
12684 #pragma omp parallel for simd
12685   for (int i = 0; i < 10; ++i) {
12686 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12687     bar();
12688   }
12689 #pragma omp parallel for simd
12690   for (int i = 0; i < 10; ++i) {
12691 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
12692     ++a;
12693   }
12694 #pragma omp parallel for simd
12695   for (int i = 0; i < 10; ++i) {
12696 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12697     ++a;
12698   }
12699 #pragma omp parallel for simd
12700   for (int i = 0; i < 10; ++i) {
12701 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12702     ++a;
12703   }
12704 #pragma omp parallel for simd
12705   for (int i = 0; i < 10; ++i) {
12706 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12707     for (int i = 0; i < 10; ++i)
12708       ;
12709   }
12710 #pragma omp parallel for simd
12711   for (int i = 0; i < 10; ++i) {
12712 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12713     ++a;
12714   }
12715 #pragma omp parallel for simd
12716   for (int i = 0; i < 10; ++i) {
12717 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12718     ++a;
12719   }
12720 #pragma omp parallel for simd
12721   for (int i = 0; i < 10; ++i) {
12722 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12723     ++a;
12724   }
12725 #pragma omp parallel for simd
12726   for (int i = 0; i < 10; ++i) {
12727 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12728   for (int i = 0; i < 10; ++i)
12729     ++a;
12730   }
12731 #pragma omp parallel for simd
12732   for (int i = 0; i < 10; ++i) {
12733 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12734     for (int j = 0; j < 10; ++j)
12735       ;
12736   }
12737 #pragma omp parallel for simd
12738   for (int i = 0; i < 10; ++i) {
12739 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12740     a++;
12741   }
12742 #pragma omp parallel for simd
12743   for (int i = 0; i < 10; ++i) {
12744 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12745     for (int j = 0; j < 10; ++j)
12746       ;
12747   }
12748 #pragma omp parallel for simd
12749   for (int i = 0; i < 10; ++i) {
12750 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12751     for (int j = 0; j < 10; ++j)
12752       ;
12753   }
12754 #pragma omp parallel for simd
12755   for (int i = 0; i < 10; ++i) {
12756 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12757     for (int j = 0; j < 10; ++j)
12758       ;
12759   }
12760 #pragma omp parallel for simd
12761   for (int i = 0; i < 10; ++i) {
12762 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12763     for (int j = 0; j < 10; ++j)
12764       ;
12765   }
12766 #pragma omp parallel for simd
12767   for (int i = 0; i < 10; ++i) {
12768 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12769     for (int j = 0; j < 10; ++j)
12770       ;
12771   }
12772 #pragma omp parallel for simd
12773   for (int i = 0; i < 10; ++i) {
12774 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12775     for (int j = 0; j < 10; ++j)
12776       ;
12777   }
12778 #pragma omp parallel for simd
12779   for (int i = 0; i < 10; ++i) {
12780 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12781     for (int j = 0; j < 10; ++j)
12782       ;
12783   }
12784 #pragma omp parallel for simd
12785   for (int i = 0; i < 10; ++i) {
12786 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12787     for (int j = 0; j < 10; ++j)
12788       ;
12789   }
12790 #pragma omp parallel for simd
12791   for (int i = 0; i < 10; ++i) {
12792 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12793     a++;
12794   }
12795 #pragma omp parallel for simd
12796   for (int i = 0; i < 10; ++i) {
12797 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12798     for (int j = 0; j < 10; ++j)
12799       ;
12800   }
12801 #pragma omp parallel for simd
12802   for (int i = 0; i < 10; ++i) {
12803 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12804     for (int j = 0; j < 10; ++j)
12805       ;
12806   }
12807 #pragma omp parallel for simd
12808   for (int i = 0; i < 10; ++i) {
12809 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12810     for (int j = 0; j < 10; ++j)
12811       ;
12812   }
12813 #pragma omp parallel for simd
12814   for (int i = 0; i < 10; ++i) {
12815 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
12816     for (int j = 0; j < 10; ++j)
12817       ;
12818   }
12819 
12820 // PARALLEL SECTIONS DIRECTIVE
12821 #pragma omp parallel sections
12822   {
12823 #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?}}
12824     for (int i = 0; i < 10; ++i)
12825       ;
12826   }
12827 #pragma omp parallel sections
12828   {
12829 #pragma omp simd
12830     for (int i = 0; i < 10; ++i)
12831       ;
12832   }
12833 #pragma omp parallel sections
12834   {
12835 #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?}}
12836     for (int i = 0; i < 10; ++i)
12837       ;
12838   }
12839 #pragma omp parallel sections
12840   {
12841 #pragma omp parallel
12842     for (int i = 0; i < 10; ++i)
12843       ;
12844   }
12845 #pragma omp parallel sections
12846   {
12847 #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?}}
12848     {
12849       bar();
12850     }
12851   }
12852 #pragma omp parallel sections
12853   {
12854 #pragma omp section
12855     {
12856       bar();
12857     }
12858   }
12859 #pragma omp parallel sections
12860   {
12861 #pragma omp section
12862     {
12863 #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?}}
12864       bar();
12865 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
12866       bar();
12867 #pragma omp critical
12868       bar();
12869     }
12870   }
12871 #pragma omp parallel sections
12872   {
12873 #pragma omp parallel
12874     {
12875 #pragma omp single // OK
12876       {
12877         bar();
12878       }
12879 #pragma omp master // OK
12880       {
12881         bar();
12882       }
12883 #pragma omp critical // OK
12884       {
12885         bar();
12886       }
12887 #pragma omp for // OK
12888       for (int i = 0; i < 10; ++i)
12889         ;
12890 #pragma omp for simd // OK
12891       for (int i = 0; i < 10; ++i)
12892         ;
12893 #pragma omp sections // OK
12894       {
12895         bar();
12896       }
12897     }
12898   }
12899 #pragma omp parallel sections
12900   {
12901 #pragma omp parallel for
12902     for (int i = 0; i < 10; ++i)
12903       ;
12904   }
12905 #pragma omp parallel sections
12906   {
12907 #pragma omp parallel for simd
12908     for (int i = 0; i < 10; ++i)
12909       ;
12910   }
12911 #pragma omp parallel sections
12912   {
12913 #pragma omp parallel sections
12914     {
12915       bar();
12916     }
12917   }
12918 #pragma omp parallel sections
12919   {
12920 #pragma omp task
12921     {
12922       bar();
12923     }
12924   }
12925 #pragma omp parallel sections
12926   {
12927 #pragma omp taskyield
12928   }
12929 #pragma omp parallel sections
12930   {
12931 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
12932   }
12933 #pragma omp parallel sections
12934   {
12935 #pragma omp scan // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
12936   }
12937 #pragma omp parallel sections
12938   {
12939 #pragma omp taskwait
12940   }
12941 #pragma omp parallel sections
12942   {
12943 #pragma omp flush
12944   }
12945 #pragma omp parallel sections
12946   {
12947 #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?}}
12948     bar();
12949   }
12950 #pragma omp parallel sections
12951   {
12952 #pragma omp atomic
12953     ++a;
12954   }
12955 #pragma omp parallel sections
12956   {
12957 #pragma omp target
12958     ++a;
12959   }
12960 #pragma omp parallel sections
12961   {
12962 #pragma omp target parallel
12963     ++a;
12964   }
12965 #pragma omp parallel sections
12966   {
12967 #pragma omp target parallel for
12968     for (int i = 0; i < 10; ++i)
12969       ;
12970   }
12971 #pragma omp parallel sections
12972   {
12973 #pragma omp target enter data map(to: a)
12974   }
12975 #pragma omp parallel sections
12976   {
12977 #pragma omp target exit data map(from: a)
12978   }
12979 #pragma omp parallel sections
12980   {
12981 #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?}}
12982     ++a;
12983   }
12984 #pragma omp parallel sections
12985   {
12986 #pragma omp taskloop
12987   for (int i = 0; i < 10; ++i)
12988     ++a;
12989   }
12990 #pragma omp parallel sections
12991   {
12992 #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?}}
12993     for (int i = 0; i < 10; ++i)
12994       ;
12995   }
12996 #pragma omp parallel sections
12997   {
12998 #pragma omp target update to(a)
12999   }
13000 #pragma omp parallel sections
13001   {
13002 #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?}}
13003     for (int i = 0; i < 10; ++i)
13004       ;
13005   }
13006 #pragma omp parallel sections
13007   {
13008 #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?}}
13009     for (int i = 0; i < 10; ++i)
13010       ;
13011   }
13012 #pragma omp parallel sections
13013   {
13014 #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?}}
13015     for (int i = 0; i < 10; ++i)
13016       ;
13017   }
13018 #pragma omp parallel sections
13019   {
13020 #pragma omp target simd // OK
13021     for (int i = 0; i < 10; ++i)
13022       ;
13023   }
13024 #pragma omp parallel sections
13025   {
13026 #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?}}
13027     for (int i = 0; i < 10; ++i)
13028       ;
13029   }
13030 #pragma omp parallel sections
13031   {
13032 #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?}}
13033     for (int i = 0; i < 10; ++i)
13034       ;
13035   }
13036 #pragma omp parallel sections
13037   {
13038 #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?}}
13039     for (int i = 0; i < 10; ++i)
13040       ;
13041   }
13042 #pragma omp parallel sections
13043   {
13044 #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?}}
13045     for (int i = 0; i < 10; ++i)
13046       ;
13047   }
13048 #pragma omp parallel sections
13049   {
13050 #pragma omp target teams // OK
13051     a++;
13052   }
13053 #pragma omp parallel sections
13054   {
13055 #pragma omp target teams distribute // OK
13056     for (int i = 0; i < 10; ++i)
13057       ;
13058   }
13059 #pragma omp parallel sections
13060   {
13061 #pragma omp target teams distribute parallel for // OK
13062     for (int i = 0; i < 10; ++i)
13063       ;
13064   }
13065 #pragma omp parallel sections
13066   {
13067 #pragma omp target teams distribute parallel for simd // OK
13068     for (int i = 0; i < 10; ++i)
13069       ;
13070   }
13071 #pragma omp parallel sections
13072   {
13073 #pragma omp target teams distribute simd // OK
13074     for (int i = 0; i < 10; ++i)
13075       ;
13076   }
13077 
13078 // TASK DIRECTIVE
13079 #pragma omp task
13080 #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?}}
13081   for (int i = 0; i < 10; ++i)
13082     ;
13083 #pragma omp task
13084 #pragma omp simd
13085   for (int i = 0; i < 10; ++i)
13086     ;
13087 #pragma omp task
13088 #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?}}
13089   for (int i = 0; i < 10; ++i)
13090     ;
13091 #pragma omp task
13092 #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?}}
13093   {
13094     bar();
13095   }
13096 #pragma omp task
13097 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
13098   {
13099     bar();
13100   }
13101 #pragma omp task
13102 #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?}}
13103   bar();
13104 #pragma omp task
13105 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
13106   bar();
13107 #pragma omp task
13108 #pragma omp critical
13109   bar();
13110 #pragma omp task
13111 #pragma omp parallel for
13112   for (int i = 0; i < 10; ++i)
13113     ;
13114 #pragma omp task
13115 #pragma omp parallel for simd
13116   for (int i = 0; i < 10; ++i)
13117     ;
13118 #pragma omp task
13119 #pragma omp parallel sections
13120   {
13121     bar();
13122   }
13123 #pragma omp task
13124 #pragma omp task
13125   {
13126     bar();
13127   }
13128 #pragma omp task
13129   {
13130 #pragma omp taskyield
13131     bar();
13132   }
13133 #pragma omp task
13134   {
13135 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
13136     bar();
13137   }
13138 #pragma omp task
13139   {
13140 #pragma omp scan // expected-error {{region cannot be closely nested inside 'task' region}}
13141     bar();
13142   }
13143 #pragma omp task
13144   {
13145 #pragma omp taskwait
13146     bar();
13147   }
13148 #pragma omp task
13149   {
13150 #pragma omp flush
13151     bar();
13152   }
13153 #pragma omp task
13154   {
13155 #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?}}
13156     bar();
13157   }
13158 #pragma omp task
13159   {
13160 #pragma omp atomic
13161     ++a;
13162   }
13163 #pragma omp task
13164   {
13165 #pragma omp target
13166     ++a;
13167   }
13168 #pragma omp task
13169   {
13170 #pragma omp target parallel
13171     ++a;
13172   }
13173 #pragma omp task
13174 #pragma omp target parallel for
13175   for (int i = 0; i < 10; ++i)
13176     ;
13177 #pragma omp task
13178   {
13179 #pragma omp target enter data map(to: a)
13180     ++a;
13181   }
13182 #pragma omp task
13183   {
13184 #pragma omp target exit data map(from: a)
13185     ++a;
13186   }
13187 #pragma omp task
13188   {
13189 #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?}}
13190     ++a;
13191   }
13192 #pragma omp task
13193   {
13194 #pragma omp taskloop
13195   for (int i = 0; i < 10; ++i)
13196     ++a;
13197   }
13198 #pragma omp task
13199   {
13200 #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?}}
13201     for (int i = 0; i < 10; ++i)
13202       ;
13203   }
13204 #pragma omp task
13205   {
13206 #pragma omp target update to(a)
13207     a++;
13208   }
13209 #pragma omp task
13210   {
13211 #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?}}
13212     for (int i = 0; i < 10; ++i)
13213       ;
13214   }
13215 #pragma omp task
13216   {
13217 #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?}}
13218     for (int i = 0; i < 10; ++i)
13219       ;
13220   }
13221 #pragma omp task
13222   {
13223 #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?}}
13224     for (int i = 0; i < 10; ++i)
13225       ;
13226   }
13227 #pragma omp task
13228   {
13229 #pragma omp target simd // OK
13230     for (int i = 0; i < 10; ++i)
13231       ;
13232   }
13233 #pragma omp task
13234   {
13235 #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?}}
13236     for (int i = 0; i < 10; ++i)
13237       ;
13238   }
13239 #pragma omp task
13240   {
13241 #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?}}
13242     for (int i = 0; i < 10; ++i)
13243       ;
13244   }
13245 #pragma omp task
13246   {
13247 #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?}}
13248     for (int i = 0; i < 10; ++i)
13249       ;
13250   }
13251 #pragma omp task
13252   {
13253 #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?}}
13254     for (int i = 0; i < 10; ++i)
13255       ;
13256   }
13257 #pragma omp task
13258   {
13259 #pragma omp target teams // OK
13260     a++;
13261   }
13262 #pragma omp task
13263   {
13264 #pragma omp target teams distribute // OK
13265     for (int i = 0; i < 10; ++i)
13266       ;
13267   }
13268 #pragma omp task
13269   {
13270 #pragma omp target teams distribute parallel for // OK
13271     for (int i = 0; i < 10; ++i)
13272       ;
13273   }
13274 #pragma omp task
13275   {
13276 #pragma omp target teams distribute parallel for simd // OK
13277     for (int i = 0; i < 10; ++i)
13278       ;
13279   }
13280 #pragma omp task
13281   {
13282 #pragma omp target teams distribute simd // OK
13283     for (int i = 0; i < 10; ++i)
13284       ;
13285   }
13286 
13287 // ATOMIC DIRECTIVE
13288 #pragma omp atomic
13289   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13290   // expected-note@+1 {{expected an expression statement}}
13291   {
13292 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13293     for (int i = 0; i < 10; ++i)
13294       ;
13295   }
13296 #pragma omp atomic
13297   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13298   // expected-note@+1 {{expected an expression statement}}
13299   {
13300 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13301     for (int i = 0; i < 10; ++i)
13302       ;
13303   }
13304 #pragma omp atomic
13305   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13306   // expected-note@+1 {{expected an expression statement}}
13307   {
13308 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13309     for (int i = 0; i < 10; ++i)
13310       ;
13311   }
13312 #pragma omp atomic
13313   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13314   // expected-note@+1 {{expected an expression statement}}
13315   {
13316 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13317     for (int i = 0; i < 10; ++i)
13318       ;
13319   }
13320 #pragma omp atomic
13321   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13322   // expected-note@+1 {{expected an expression statement}}
13323   {
13324 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13325     {
13326       bar();
13327     }
13328   }
13329 #pragma omp atomic
13330   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13331   // expected-note@+1 {{expected an expression statement}}
13332   {
13333 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13334     {
13335       bar();
13336     }
13337   }
13338 #pragma omp atomic
13339   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13340   // expected-note@+1 {{expected an expression statement}}
13341   {
13342 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13343     {
13344       bar();
13345     }
13346   }
13347 #pragma omp atomic
13348   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13349   // expected-note@+1 {{expected an expression statement}}
13350   {
13351 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13352     {
13353       bar();
13354     }
13355   }
13356 #pragma omp atomic
13357   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13358   // expected-note@+1 {{expected an expression statement}}
13359   {
13360 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13361     {
13362       bar();
13363     }
13364   }
13365 #pragma omp atomic
13366   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13367   // expected-note@+1 {{expected an expression statement}}
13368   {
13369 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13370     for (int i = 0; i < 10; ++i)
13371       ;
13372   }
13373 #pragma omp atomic
13374   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13375   // expected-note@+1 {{expected an expression statement}}
13376   {
13377 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13378     for (int i = 0; i < 10; ++i)
13379       ;
13380   }
13381 #pragma omp atomic
13382   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13383   // expected-note@+1 {{expected an expression statement}}
13384   {
13385 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13386     {
13387       bar();
13388     }
13389   }
13390 #pragma omp atomic
13391   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13392   // expected-note@+1 {{expected an expression statement}}
13393   {
13394 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13395     {
13396       bar();
13397     }
13398   }
13399 #pragma omp atomic
13400   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13401   // expected-note@+1 {{expected an expression statement}}
13402   {
13403 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13404     bar();
13405   }
13406 #pragma omp atomic
13407   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13408   // expected-note@+1 {{expected an expression statement}}
13409   {
13410 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13411     bar();
13412   }
13413 #pragma omp atomic
13414   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13415   // expected-note@+1 {{expected an expression statement}}
13416   {
13417 #pragma omp scan // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13418     bar();
13419   }
13420 #pragma omp atomic
13421   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13422   // expected-note@+1 {{expected an expression statement}}
13423   {
13424 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13425     bar();
13426   }
13427 #pragma omp atomic
13428   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13429   // expected-note@+1 {{expected an expression statement}}
13430   {
13431 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13432     bar();
13433   }
13434 #pragma omp atomic
13435   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13436   // expected-note@+1 {{expected an expression statement}}
13437   {
13438 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13439     bar();
13440   }
13441 #pragma omp atomic
13442   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13443   // expected-note@+1 {{expected an expression statement}}
13444   {
13445 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13446     ++a;
13447   }
13448 #pragma omp atomic
13449   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13450   // expected-note@+1 {{expected an expression statement}}
13451   {
13452 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13453     ++a;
13454   }
13455 #pragma omp atomic
13456   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13457   // expected-note@+1 {{expected an expression statement}}
13458   {
13459 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13460     ++a;
13461   }
13462 #pragma omp atomic
13463   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13464   // expected-note@+1 {{expected an expression statement}}
13465   {
13466 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13467     for (int i = 0; i < 10; ++i)
13468       ;
13469   }
13470 #pragma omp atomic
13471   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13472   // expected-note@+1 {{expected an expression statement}}
13473   {
13474 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13475     ++a;
13476   }
13477 #pragma omp atomic
13478   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13479   // expected-note@+1 {{expected an expression statement}}
13480   {
13481 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13482     ++a;
13483   }
13484 #pragma omp atomic
13485   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13486   // expected-note@+1 {{expected an expression statement}}
13487   {
13488 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13489     ++a;
13490   }
13491 #pragma omp atomic
13492   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13493   // expected-note@+1 {{expected an expression statement}}
13494   {
13495 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13496   for (int i = 0; i < 10; ++i)
13497     ++a;
13498   }
13499 #pragma omp atomic
13500   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13501   // expected-note@+1 {{expected an expression statement}}
13502   {
13503 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13504     for (int i = 0; i < 10; ++i)
13505       ;
13506   }
13507 #pragma omp atomic
13508   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13509   // expected-note@+1 {{expected an expression statement}}
13510   {
13511 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13512   }
13513 #pragma omp atomic
13514   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13515   // expected-note@+1 {{expected an expression statement}}
13516   {
13517 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13518     for (int i = 0; i < 10; ++i)
13519       ;
13520   }
13521 #pragma omp atomic
13522   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13523   // expected-note@+1 {{expected an expression statement}}
13524   {
13525 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13526     for (int i = 0; i < 10; ++i)
13527       ;
13528   }
13529 #pragma omp atomic
13530   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13531   // expected-note@+1 {{expected an expression statement}}
13532   {
13533 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13534     for (int i = 0; i < 10; ++i)
13535       ;
13536   }
13537 #pragma omp atomic
13538   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13539   // expected-note@+1 {{expected an expression statement}}
13540   {
13541 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13542     for (int i = 0; i < 10; ++i)
13543       ;
13544   }
13545 #pragma omp atomic
13546   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13547   // expected-note@+1 {{expected an expression statement}}
13548   {
13549 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13550     for (int i = 0; i < 10; ++i)
13551       ;
13552   }
13553 #pragma omp atomic
13554   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13555   // expected-note@+1 {{expected an expression statement}}
13556   {
13557 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13558     for (int i = 0; i < 10; ++i)
13559       ;
13560   }
13561 #pragma omp atomic
13562   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13563   // expected-note@+1 {{expected an expression statement}}
13564   {
13565 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13566     for (int i = 0; i < 10; ++i)
13567       ;
13568   }
13569 #pragma omp atomic
13570   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13571   // expected-note@+1 {{expected an expression statement}}
13572   {
13573 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13574     for (int i = 0; i < 10; ++i)
13575       ;
13576   }
13577 #pragma omp atomic
13578   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13579   // expected-note@+1 {{expected an expression statement}}
13580   {
13581 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13582     a++;
13583   }
13584 #pragma omp atomic
13585   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13586   // expected-note@+1 {{expected an expression statement}}
13587   {
13588 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13589     for (int i = 0; i < 10; ++i)
13590       ;
13591   }
13592 #pragma omp atomic
13593   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13594   // expected-note@+1 {{expected an expression statement}}
13595   {
13596 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13597     for (int i = 0; i < 10; ++i)
13598       ;
13599   }
13600 #pragma omp atomic
13601   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13602   // expected-note@+1 {{expected an expression statement}}
13603   {
13604 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13605     for (int i = 0; i < 10; ++i)
13606       ;
13607   }
13608 #pragma omp atomic
13609   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13610   // expected-note@+1 {{expected an expression statement}}
13611   {
13612 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13613     for (int i = 0; i < 10; ++i)
13614       ;
13615   }
13616 
13617 // TARGET DIRECTIVE
13618 #pragma omp target
13619 #pragma omp parallel
13620   bar();
13621 #pragma omp target
13622 #pragma omp for
13623   for (int i = 0; i < 10; ++i)
13624     ;
13625 #pragma omp target
13626 #pragma omp simd
13627   for (int i = 0; i < 10; ++i)
13628     ;
13629 #pragma omp target
13630 #pragma omp for simd
13631   for (int i = 0; i < 10; ++i)
13632     ;
13633 #pragma omp target
13634 #pragma omp sections
13635   {
13636     bar();
13637   }
13638 #pragma omp target
13639 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
13640   {
13641     bar();
13642   }
13643 #pragma omp target
13644 #pragma omp single
13645   bar();
13646 
13647 #pragma omp target
13648 #pragma omp master
13649   {
13650     bar();
13651   }
13652 #pragma omp target
13653 #pragma omp critical
13654   {
13655     bar();
13656   }
13657 #pragma omp target
13658 #pragma omp parallel for
13659   for (int i = 0; i < 10; ++i)
13660     ;
13661 #pragma omp target
13662 #pragma omp parallel for simd
13663   for (int i = 0; i < 10; ++i)
13664     ;
13665 #pragma omp target
13666 #pragma omp parallel sections
13667   {
13668     bar();
13669   }
13670 #pragma omp target
13671 #pragma omp task
13672   {
13673     bar();
13674   }
13675 #pragma omp target
13676   {
13677 #pragma omp taskyield
13678     bar();
13679   }
13680 #pragma omp target
13681   {
13682 #pragma omp barrier
13683     bar();
13684   }
13685 #pragma omp target
13686   {
13687 #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?}}
13688     bar();
13689   }
13690 #pragma omp target
13691   {
13692 #pragma omp taskwait
13693     bar();
13694   }
13695 #pragma omp target
13696   {
13697 #pragma omp flush
13698     bar();
13699   }
13700 #pragma omp target
13701   {
13702 #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?}}
13703     bar();
13704   }
13705 #pragma omp target
13706   {
13707 #pragma omp atomic
13708     ++a;
13709   }
13710 #pragma omp target
13711   {
13712 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13713     ++a;
13714   }
13715 #pragma omp target
13716   {
13717 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13718     ++a;
13719   }
13720 #pragma omp target
13721 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13722   for (int i = 0; i < 10; ++i)
13723     ;
13724 #pragma omp target
13725   {
13726 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13727   }
13728 #pragma omp target
13729   {
13730 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13731   }
13732 #pragma omp target
13733   {
13734 #pragma omp teams
13735     ++a;
13736   }
13737 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13738   {
13739 #pragma omp teams // expected-note {{directive outside teams construct here}}
13740     ++a;
13741 #pragma omp teams // expected-note {{nested teams construct here}}
13742     ++a;
13743   }
13744 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
13745   {
13746     ++a;          // expected-note {{statement outside teams construct here}}
13747 #pragma omp teams // expected-note {{nested teams construct here}}
13748     ++a;
13749   }
13750 #pragma omp target
13751   {
13752 #pragma omp taskloop
13753   for (int i = 0; i < 10; ++i)
13754     ++a;
13755   }
13756 #pragma omp target
13757   {
13758 #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?}}
13759     for (int i = 0; i < 10; ++i)
13760       ;
13761   }
13762 #pragma omp atomic
13763   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
13764   // expected-note@+1 {{expected an expression statement}}
13765   {
13766 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
13767     a++;
13768   }
13769 #pragma omp target
13770   {
13771 #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?}}
13772     for (int i = 0; i < 10; ++i)
13773       ;
13774   }
13775 #pragma omp target
13776   {
13777 #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?}}
13778     for (int i = 0; i < 10; ++i)
13779       ;
13780   }
13781 #pragma omp target
13782   {
13783 #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?}}
13784     for (int i = 0; i < 10; ++i)
13785       ;
13786   }
13787 #pragma omp target
13788   {
13789 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13790     for (int i = 0; i < 10; ++i)
13791       ;
13792   }
13793 #pragma omp target
13794   {
13795 #pragma omp teams distribute // OK
13796     for (int i = 0; i < 10; ++i)
13797       ;
13798   }
13799 #pragma omp target
13800   {
13801 #pragma omp teams distribute simd // OK
13802     for (int i = 0; i < 10; ++i)
13803       ;
13804   }
13805 #pragma omp target
13806   {
13807 #pragma omp teams distribute parallel for simd // OK
13808     for (int i = 0; i < 10; ++i)
13809       ;
13810   }
13811 #pragma omp target
13812   {
13813 #pragma omp teams distribute parallel for // OK
13814     for (int i = 0; i < 10; ++i)
13815       ;
13816   }
13817 #pragma omp target
13818   {
13819 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13820     a++;
13821   }
13822 #pragma omp target
13823   {
13824 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13825     for (int i = 0; i < 10; ++i)
13826       ;
13827   }
13828 #pragma omp target
13829   {
13830 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13831     for (int i = 0; i < 10; ++i)
13832       ;
13833   }
13834 #pragma omp target
13835   {
13836 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13837     for (int i = 0; i < 10; ++i)
13838       ;
13839   }
13840 #pragma omp target
13841   {
13842 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13843     for (int i = 0; i < 10; ++i)
13844       ;
13845   }
13846 
13847 // TARGET PARALLEL DIRECTIVE
13848 #pragma omp target parallel
13849 #pragma omp parallel
13850   bar();
13851 #pragma omp target parallel
13852 #pragma omp for
13853   for (int i = 0; i < 10; ++i)
13854     ;
13855 #pragma omp target parallel
13856 #pragma omp simd
13857   for (int i = 0; i < 10; ++i)
13858     ;
13859 #pragma omp target parallel
13860 #pragma omp for simd
13861   for (int i = 0; i < 10; ++i)
13862     ;
13863 #pragma omp target parallel
13864 #pragma omp sections
13865   {
13866     bar();
13867   }
13868 #pragma omp target parallel
13869 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
13870   {
13871     bar();
13872   }
13873 #pragma omp target parallel
13874 #pragma omp single
13875   bar();
13876 
13877 #pragma omp target parallel
13878 #pragma omp master
13879   {
13880     bar();
13881   }
13882 #pragma omp target parallel
13883 #pragma omp critical
13884   {
13885     bar();
13886   }
13887 #pragma omp target parallel
13888 #pragma omp parallel for
13889   for (int i = 0; i < 10; ++i)
13890     ;
13891 #pragma omp target parallel
13892 #pragma omp parallel for simd
13893   for (int i = 0; i < 10; ++i)
13894     ;
13895 #pragma omp target parallel
13896 #pragma omp parallel sections
13897   {
13898     bar();
13899   }
13900 #pragma omp target parallel
13901 #pragma omp task
13902   {
13903     bar();
13904   }
13905 #pragma omp target parallel
13906   {
13907 #pragma omp taskyield
13908     bar();
13909   }
13910 #pragma omp target parallel
13911   {
13912 #pragma omp barrier
13913     bar();
13914   }
13915 #pragma omp target parallel
13916   {
13917 #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?}}
13918     bar();
13919   }
13920 #pragma omp target parallel
13921   {
13922 #pragma omp taskwait
13923     bar();
13924   }
13925 #pragma omp target parallel
13926   {
13927 #pragma omp flush
13928     bar();
13929   }
13930 #pragma omp target parallel
13931   {
13932 #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?}}
13933     bar();
13934   }
13935 #pragma omp target parallel
13936   {
13937 #pragma omp atomic
13938     ++a;
13939   }
13940 #pragma omp target parallel
13941   {
13942 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
13943     ++a;
13944   }
13945 #pragma omp target parallel
13946   {
13947 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
13948     ++a;
13949   }
13950 #pragma omp target parallel
13951 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13952   for (int i = 0; i < 10; ++i)
13953     ;
13954 #pragma omp target parallel
13955   {
13956 #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?}}
13957     ++a;
13958   }
13959 #pragma omp target parallel
13960   {
13961     ++a;
13962 #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?}}
13963     ++a;
13964   }
13965 #pragma omp target parallel
13966   {
13967 #pragma omp taskloop
13968   for (int i = 0; i < 10; ++i)
13969     ++a;
13970   }
13971 #pragma omp target parallel
13972   {
13973 #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?}}
13974     for (int i = 0; i < 10; ++i)
13975       ;
13976   }
13977 #pragma omp target parallel
13978   {
13979 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13980   }
13981 #pragma omp target parallel
13982   {
13983 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13984   }
13985 #pragma omp target parallel
13986   {
13987 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
13988   }
13989 #pragma omp target parallel
13990   {
13991 #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?}}
13992     for (int i = 0; i < 10; ++i)
13993       ;
13994   }
13995 #pragma omp target parallel
13996   {
13997 #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?}}
13998     for (int i = 0; i < 10; ++i)
13999       ;
14000   }
14001 #pragma omp target parallel
14002   {
14003 #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?}}
14004     for (int i = 0; i < 10; ++i)
14005       ;
14006   }
14007 #pragma omp target parallel
14008   {
14009 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
14010     for (int i = 0; i < 10; ++i)
14011       ;
14012   }
14013 #pragma omp target parallel
14014   {
14015 #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?}}
14016     for (int i = 0; i < 10; ++i)
14017       ;
14018   }
14019 #pragma omp target parallel
14020   {
14021 #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?}}
14022     for (int i = 0; i < 10; ++i)
14023       ;
14024   }
14025 #pragma omp target parallel
14026   {
14027 #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?}}
14028     for (int i = 0; i < 10; ++i)
14029       ;
14030   }
14031 #pragma omp target parallel
14032   {
14033 #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?}}
14034     for (int i = 0; i < 10; ++i)
14035       ;
14036   }
14037 #pragma omp target parallel
14038   {
14039 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
14040     a++;
14041   }
14042 #pragma omp target parallel
14043   {
14044 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
14045     for (int i = 0; i < 10; ++i)
14046       ;
14047   }
14048 #pragma omp target parallel
14049   {
14050 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
14051     for (int i = 0; i < 10; ++i)
14052       ;
14053   }
14054 #pragma omp target parallel
14055   {
14056 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
14057     for (int i = 0; i < 10; ++i)
14058       ;
14059   }
14060 #pragma omp target parallel
14061   {
14062 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
14063     for (int i = 0; i < 10; ++i)
14064       ;
14065   }
14066 
14067 // TARGET PARALLEL FOR DIRECTIVE
14068 #pragma omp target parallel for
14069   for (int i = 0; i < 10; ++i) {
14070 #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?}}
14071     for (int i = 0; i < 10; ++i)
14072       ;
14073   }
14074 #pragma omp target parallel for
14075   for (int i = 0; i < 10; ++i) {
14076 #pragma omp simd
14077     for (int i = 0; i < 10; ++i)
14078       ;
14079   }
14080 #pragma omp target parallel for
14081   for (int i = 0; i < 10; ++i) {
14082 #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?}}
14083     for (int i = 0; i < 10; ++i)
14084       ;
14085   }
14086 #pragma omp target parallel for
14087   for (int i = 0; i < 10; ++i) {
14088 #pragma omp parallel
14089     for (int i = 0; i < 10; ++i)
14090       ;
14091   }
14092 #pragma omp target parallel for
14093   for (int i = 0; i < 10; ++i) {
14094 #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?}}
14095     {
14096       bar();
14097     }
14098   }
14099 #pragma omp target parallel for
14100   for (int i = 0; i < 10; ++i) {
14101 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
14102     {
14103       bar();
14104     }
14105   }
14106 #pragma omp target parallel for
14107   for (int i = 0; i < 10; ++i) {
14108 #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?}}
14109     {
14110       bar();
14111     }
14112   }
14113 
14114 #pragma omp target parallel for
14115   for (int i = 0; i < 10; ++i) {
14116 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
14117     {
14118       bar();
14119     }
14120   }
14121 
14122 #pragma omp target parallel for
14123   for (int i = 0; i < 10; ++i) {
14124 #pragma omp critical
14125     {
14126       bar();
14127     }
14128   }
14129 
14130 #pragma omp target parallel for
14131   for (int i = 0; i < 10; ++i) {
14132 #pragma omp parallel
14133     {
14134 #pragma omp single // OK
14135       {
14136         bar();
14137       }
14138 #pragma omp for // OK
14139       for (int i = 0; i < 10; ++i)
14140         ;
14141 #pragma omp for simd // OK
14142       for (int i = 0; i < 10; ++i)
14143         ;
14144 #pragma omp sections // OK
14145       {
14146         bar();
14147       }
14148     }
14149   }
14150 #pragma omp target parallel for
14151   for (int i = 0; i < 10; ++i) {
14152 #pragma omp parallel for
14153     for (int i = 0; i < 10; ++i)
14154       ;
14155   }
14156 #pragma omp target parallel for
14157   for (int i = 0; i < 10; ++i) {
14158 #pragma omp parallel for simd
14159     for (int i = 0; i < 10; ++i)
14160       ;
14161   }
14162 #pragma omp target parallel for
14163   for (int i = 0; i < 10; ++i) {
14164 #pragma omp parallel sections
14165     {
14166       bar();
14167     }
14168   }
14169 #pragma omp target parallel for
14170   for (int i = 0; i < 10; ++i) {
14171 #pragma omp task
14172     {
14173       bar();
14174     }
14175   }
14176 #pragma omp target parallel for
14177   for (int i = 0; i < 10; ++i) {
14178 #pragma omp taskyield
14179     bar();
14180   }
14181 #pragma omp target parallel for
14182   for (int i = 0; i < 10; ++i) {
14183 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
14184     bar();
14185   }
14186 #pragma omp target parallel for
14187   for (int i = 0; i < 10; ++i) {
14188 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
14189     bar();
14190   }
14191 #pragma omp target parallel for
14192   for (int i = 0; i < 10; ++i) {
14193 #pragma omp taskwait
14194     bar();
14195   }
14196 #pragma omp target parallel for
14197   for (int i = 0; i < 10; ++i) {
14198 #pragma omp flush
14199     bar();
14200   }
14201 #pragma omp target parallel for
14202   for (int i = 0; i < 10; ++i) {
14203 #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?}}
14204     bar();
14205   }
14206 #pragma omp target parallel for ordered
14207   for (int i = 0; i < 10; ++i) {
14208 #pragma omp ordered // OK
14209     bar();
14210   }
14211 #pragma omp target parallel for
14212   for (int i = 0; i < 10; ++i) {
14213 #pragma omp atomic
14214     ++a;
14215   }
14216 #pragma omp target parallel for
14217   for (int i = 0; i < 10; ++i) {
14218 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
14219     ++a;
14220   }
14221 #pragma omp target parallel for
14222   for (int i = 0; i < 10; ++i) {
14223 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
14224     ++a;
14225   }
14226 #pragma omp target parallel for
14227   for (int i = 0; i < 10; ++i) {
14228 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
14229     for (int i = 0; i < 10; ++i)
14230       ;
14231   }
14232 #pragma omp target parallel for
14233   for (int i = 0; i < 10; ++i) {
14234 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
14235     ++a;
14236   }
14237 #pragma omp target parallel for
14238   for (int i = 0; i < 10; ++i) {
14239 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
14240     ++a;
14241   }
14242 #pragma omp target parallel for
14243   for (int i = 0; i < 10; ++i) {
14244 #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?}}
14245     ++a;
14246   }
14247 #pragma omp target parallel for
14248   for (int i = 0; i < 10; ++i) {
14249 #pragma omp taskloop
14250   for (int i = 0; i < 10; ++i)
14251     ++a;
14252   }
14253 #pragma omp target parallel for
14254   for (int i = 0; i < 10; ++i) {
14255 #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?}}
14256     for (int j = 0; j < 10; ++j)
14257       ;
14258   }
14259 #pragma omp target parallel for
14260   for (int i = 0; i < 10; ++i) {
14261 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
14262     a++;
14263   }
14264 #pragma omp target parallel for
14265   for (int i = 0; i < 10; ++i) {
14266 #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?}}
14267     for (int j = 0; j < 10; ++j)
14268       ;
14269   }
14270 #pragma omp target parallel for
14271   for (int i = 0; i < 10; ++i) {
14272 #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?}}
14273     for (int j = 0; j < 10; ++j)
14274       ;
14275   }
14276 #pragma omp target parallel for
14277   for (int i = 0; i < 10; ++i) {
14278 #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?}}
14279     for (int j = 0; j < 10; ++j)
14280       ;
14281   }
14282 #pragma omp target parallel for
14283   for (int i = 0; i < 10; ++i) {
14284 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
14285     for (int j = 0; j < 10; ++j)
14286       ;
14287   }
14288 #pragma omp target parallel for
14289   for (int i = 0; i < 10; ++i) {
14290 #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?}}
14291     for (int j = 0; j < 10; ++j)
14292       ;
14293   }
14294 #pragma omp target parallel for
14295   for (int i = 0; i < 10; ++i) {
14296 #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?}}
14297     for (int j = 0; j < 10; ++j)
14298       ;
14299   }
14300 #pragma omp target parallel for
14301   for (int i = 0; i < 10; ++i) {
14302 #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?}}
14303     for (int j = 0; j < 10; ++j)
14304       ;
14305   }
14306 #pragma omp target parallel for
14307   for (int i = 0; i < 10; ++i) {
14308 #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?}}
14309     for (int j = 0; j < 10; ++j)
14310       ;
14311   }
14312 #pragma omp target parallel for
14313   for (int i = 0; i < 10; ++i) {
14314 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
14315     a++;
14316   }
14317 #pragma omp target parallel for
14318   for (int i = 0; i < 10; ++i) {
14319 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
14320     for (int j = 0; j < 10; ++j)
14321       ;
14322   }
14323 #pragma omp target parallel for
14324   for (int i = 0; i < 10; ++i) {
14325 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
14326     for (int j = 0; j < 10; ++j)
14327       ;
14328   }
14329 #pragma omp target parallel for
14330   for (int i = 0; i < 10; ++i) {
14331 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
14332     for (int j = 0; j < 10; ++j)
14333       ;
14334   }
14335 #pragma omp target parallel for
14336   for (int i = 0; i < 10; ++i) {
14337 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
14338     for (int j = 0; j < 10; ++j)
14339       ;
14340   }
14341 
14342 // TEAMS DIRECTIVE
14343 #pragma omp target
14344 #pragma omp teams
14345 #pragma omp parallel
14346   bar();
14347 #pragma omp target
14348 #pragma omp teams
14349 #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?}}
14350   for (int i = 0; i < 10; ++i)
14351     ;
14352 #pragma omp target
14353 #pragma omp teams
14354 #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?}}
14355   for (int i = 0; i < 10; ++i)
14356     ;
14357 #pragma omp target
14358 #pragma omp teams
14359 #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?}}
14360   for (int i = 0; i < 10; ++i)
14361     ;
14362 #pragma omp target
14363 #pragma omp teams
14364 #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?}}
14365   {
14366     bar();
14367   }
14368 #pragma omp target
14369 #pragma omp teams
14370 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
14371   {
14372     bar();
14373   }
14374 #pragma omp target
14375 #pragma omp teams
14376 #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?}}
14377   bar();
14378 
14379 #pragma omp target
14380 #pragma omp teams
14381 #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?}}
14382   {
14383     bar();
14384   }
14385 #pragma omp target
14386 #pragma omp teams
14387 #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?}}
14388   {
14389     bar();
14390   }
14391 #pragma omp target
14392 #pragma omp teams
14393 #pragma omp parallel for
14394   for (int i = 0; i < 10; ++i)
14395     ;
14396 #pragma omp target
14397 #pragma omp teams
14398 #pragma omp parallel for simd
14399   for (int i = 0; i < 10; ++i)
14400     ;
14401 #pragma omp target
14402 #pragma omp teams
14403 #pragma omp parallel sections
14404   {
14405     bar();
14406   }
14407 #pragma omp target
14408 #pragma omp teams
14409 #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?}}
14410   {
14411     bar();
14412   }
14413 #pragma omp target
14414 #pragma omp teams
14415   {
14416 #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?}}
14417     bar();
14418   }
14419 #pragma omp target
14420 #pragma omp teams
14421   {
14422 #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?}}
14423     bar();
14424   }
14425 #pragma omp target
14426 #pragma omp teams
14427   {
14428 #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?}}
14429     bar();
14430   }
14431 #pragma omp target
14432 #pragma omp teams
14433   {
14434 #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?}}
14435     bar();
14436   }
14437 #pragma omp target
14438 #pragma omp teams
14439   {
14440 #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?}}
14441     bar();
14442   }
14443 #pragma omp target
14444 #pragma omp teams
14445   {
14446 #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?}}
14447     bar();
14448   }
14449 #pragma omp target
14450 #pragma omp teams
14451   {
14452 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
14453     ++a;
14454   }
14455 #pragma omp target
14456 #pragma omp teams
14457   {
14458 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14459     ++a;
14460   }
14461 #pragma omp target
14462 #pragma omp teams
14463   {
14464 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14465     ++a;
14466   }
14467 #pragma omp target
14468 #pragma omp teams
14469 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14470   for (int i = 0; i < 10; ++i)
14471     ;
14472 #pragma omp target
14473 #pragma omp teams
14474   {
14475 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14476   }
14477 #pragma omp target
14478 #pragma omp teams
14479   {
14480 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14481   }
14482 #pragma omp target
14483 #pragma omp teams
14484   {
14485 #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?}}
14486     ++a;
14487   }
14488 #pragma omp target
14489 #pragma omp teams
14490   {
14491 #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?}}
14492   for (int i = 0; i < 10; ++i)
14493     ++a;
14494   }
14495 #pragma omp target
14496 #pragma omp teams
14497 #pragma omp distribute
14498   for (int i = 0; i < 10; ++i)
14499     ;
14500 #pragma omp target
14501 #pragma omp teams
14502 #pragma omp distribute
14503   for (int i = 0; i < 10; ++i)
14504     ;
14505 #pragma omp distribute
14506   for (int j = 0; j < 10; ++j)
14507     ;
14508 #pragma omp target
14509 #pragma omp teams
14510   {
14511 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14512     ++a;
14513   }
14514 #pragma omp target
14515 #pragma omp teams
14516 #pragma omp distribute parallel for
14517   for (int i = 0; i < 10; ++i)
14518     ;
14519 #pragma omp target
14520 #pragma omp teams
14521   {
14522 #pragma omp distribute parallel for
14523   for (int i = 0; i < 10; ++i)
14524     ;
14525 #pragma omp distribute parallel for
14526   for (int j = 0; j < 10; ++j)
14527     ;
14528   }
14529 #pragma omp target
14530 #pragma omp teams
14531   {
14532 #pragma omp distribute parallel for simd
14533   for (int i = 0; i < 10; ++i)
14534     ;
14535 #pragma omp distribute parallel for simd
14536   for (int j = 0; j < 10; ++j)
14537     ;
14538   }
14539 #pragma omp target
14540 #pragma omp teams
14541   {
14542 #pragma omp distribute simd
14543   for (int i = 0; i < 10; ++i)
14544     ;
14545 #pragma omp distribute simd
14546   for (int j = 0; j < 10; ++j)
14547     ;
14548   }
14549 #pragma omp target
14550 #pragma omp teams
14551   {
14552 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14553   for (int i = 0; i < 10; ++i)
14554     ;
14555   }
14556 #pragma omp target
14557 #pragma omp teams
14558   {
14559 #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?}}
14560   for (int i = 0; i < 10; ++i)
14561     ;
14562   }
14563 #pragma omp target
14564 #pragma omp teams
14565   {
14566 #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?}}
14567   for (int i = 0; i < 10; ++i)
14568     ;
14569   }
14570 #pragma omp target
14571 #pragma omp teams
14572   {
14573 #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?}}
14574   for (int i = 0; i < 10; ++i)
14575     ;
14576   }
14577 #pragma omp target
14578 #pragma omp teams
14579   {
14580 #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?}}
14581   for (int i = 0; i < 10; ++i)
14582     ;
14583   }
14584 #pragma omp target
14585 #pragma omp teams
14586   {
14587 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14588     a++;
14589   }
14590 #pragma omp target
14591 #pragma omp teams
14592   {
14593 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14594   for (int i = 0; i < 10; ++i)
14595     ;
14596   }
14597 #pragma omp target
14598 #pragma omp teams
14599   {
14600 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14601   for (int i = 0; i < 10; ++i)
14602     ;
14603   }
14604 #pragma omp target
14605 #pragma omp teams
14606   {
14607 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14608   for (int i = 0; i < 10; ++i)
14609     ;
14610   }
14611 #pragma omp target
14612 #pragma omp teams
14613   {
14614 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14615   for (int i = 0; i < 10; ++i)
14616     ;
14617   }
14618 
14619 // TASKLOOP DIRECTIVE
14620 #pragma omp taskloop
14621   for (int i = 0; i < 10; ++i) {
14622 #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?}}
14623     for (int i = 0; i < 10; ++i)
14624       ;
14625   }
14626 #pragma omp taskloop
14627   for (int i = 0; i < 10; ++i) {
14628 #pragma omp simd
14629     for (int i = 0; i < 10; ++i)
14630       ;
14631   }
14632 #pragma omp taskloop
14633   for (int i = 0; i < 10; ++i) {
14634 #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?}}
14635     for (int i = 0; i < 10; ++i)
14636       ;
14637   }
14638 #pragma omp taskloop
14639   for (int i = 0; i < 10; ++i) {
14640 #pragma omp parallel
14641     for (int i = 0; i < 10; ++i)
14642       ;
14643   }
14644 #pragma omp taskloop
14645   for (int i = 0; i < 10; ++i) {
14646 #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?}}
14647     {
14648       bar();
14649     }
14650   }
14651 #pragma omp taskloop
14652   for (int i = 0; i < 10; ++i) {
14653 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
14654     {
14655       bar();
14656     }
14657   }
14658 #pragma omp taskloop
14659   for (int i = 0; i < 10; ++i) {
14660 #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?}}
14661     {
14662       bar();
14663     }
14664   }
14665 
14666 #pragma omp taskloop
14667   for (int i = 0; i < 10; ++i) {
14668 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14669     {
14670       bar();
14671     }
14672   }
14673 #pragma omp taskloop
14674   for (int i = 0; i < 10; ++i) {
14675 #pragma omp critical
14676     {
14677       bar();
14678     }
14679   }
14680 #pragma omp taskloop
14681   for (int i = 0; i < 10; ++i) {
14682 #pragma omp parallel
14683     {
14684 #pragma omp single // OK
14685       {
14686         bar();
14687       }
14688 #pragma omp for // OK
14689       for (int i = 0; i < 10; ++i)
14690         ;
14691 #pragma omp sections // OK
14692       {
14693         bar();
14694       }
14695     }
14696   }
14697 #pragma omp taskloop
14698   for (int i = 0; i < 10; ++i) {
14699 #pragma omp parallel for
14700     for (int i = 0; i < 10; ++i)
14701       ;
14702   }
14703 #pragma omp taskloop
14704   for (int i = 0; i < 10; ++i) {
14705 #pragma omp parallel for simd
14706     for (int i = 0; i < 10; ++i)
14707       ;
14708   }
14709 #pragma omp taskloop
14710   for (int i = 0; i < 10; ++i) {
14711 #pragma omp parallel sections
14712     {
14713       bar();
14714     }
14715   }
14716 #pragma omp taskloop
14717   for (int i = 0; i < 10; ++i) {
14718 #pragma omp task
14719     {
14720       bar();
14721     }
14722   }
14723 #pragma omp taskloop
14724   for (int i = 0; i < 10; ++i) {
14725 #pragma omp taskyield
14726     bar();
14727   }
14728 #pragma omp taskloop
14729   for (int i = 0; i < 10; ++i) {
14730 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14731     bar();
14732   }
14733 #pragma omp taskloop
14734   for (int i = 0; i < 10; ++i) {
14735 #pragma omp scan // expected-error {{region cannot be closely nested inside 'taskloop' region}}
14736     bar();
14737   }
14738 #pragma omp taskloop
14739   for (int i = 0; i < 10; ++i) {
14740 #pragma omp taskwait
14741     bar();
14742   }
14743 #pragma omp taskloop
14744   for (int i = 0; i < 10; ++i) {
14745 #pragma omp flush
14746     bar();
14747   }
14748 #pragma omp taskloop
14749   for (int i = 0; i < 10; ++i) {
14750 #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?}}
14751     bar();
14752   }
14753 #pragma omp taskloop
14754   for (int i = 0; i < 10; ++i) {
14755 #pragma omp atomic
14756     ++a;
14757   }
14758 #pragma omp taskloop
14759   for (int i = 0; i < 10; ++i) {
14760 #pragma omp target
14761     ++a;
14762   }
14763 #pragma omp taskloop
14764   for (int i = 0; i < 10; ++i) {
14765 #pragma omp target parallel
14766     ++a;
14767   }
14768 #pragma omp taskloop
14769   for (int i = 0; i < 10; ++i) {
14770 #pragma omp target parallel for
14771     for (int i = 0; i < 10; ++i)
14772       ;
14773   }
14774 #pragma omp taskloop
14775   for (int i = 0; i < 10; ++i) {
14776 #pragma omp target enter data map(to: a)
14777     ++a;
14778   }
14779 #pragma omp taskloop
14780   for (int i = 0; i < 10; ++i) {
14781 #pragma omp target exit data map(from: a)
14782     ++a;
14783   }
14784 #pragma omp taskloop
14785   for (int i = 0; i < 10; ++i) {
14786 #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?}}
14787     ++a;
14788   }
14789 #pragma omp taskloop
14790   for (int i = 0; i < 10; ++i) {
14791 #pragma omp taskloop
14792   for (int i = 0; i < 10; ++i)
14793     ++a;
14794   }
14795 #pragma omp taskloop
14796   for (int i = 0; i < 10; ++i) {
14797 #pragma omp target update to(a)
14798     ++a;
14799   }
14800 #pragma omp taskloop
14801   for (int i = 0; i < 10; ++i) {
14802 #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?}}
14803     for (int i = 0; i < 10; ++i)
14804       ;
14805   }
14806 #pragma omp taskloop
14807   for (int i = 0; i < 10; ++i) {
14808 #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?}}
14809     for (int i = 0; i < 10; ++i)
14810       ;
14811   }
14812 #pragma omp taskloop
14813   for (int i = 0; i < 10; ++i) {
14814 #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?}}
14815     for (int i = 0; i < 10; ++i)
14816       ;
14817   }
14818 #pragma omp taskloop
14819   for (int i = 0; i < 10; ++i) {
14820 #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?}}
14821     for (int i = 0; i < 10; ++i)
14822       ;
14823   }
14824 #pragma omp taskloop
14825   for (int i = 0; i < 10; ++i) {
14826 #pragma omp target simd // OK
14827     for (int i = 0; i < 10; ++i)
14828       ;
14829   }
14830 #pragma omp taskloop
14831   for (int i = 0; i < 10; ++i) {
14832 #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?}}
14833     for (int i = 0; i < 10; ++i)
14834       ;
14835   }
14836 #pragma omp taskloop
14837   for (int i = 0; i < 10; ++i) {
14838 #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?}}
14839     for (int i = 0; i < 10; ++i)
14840       ;
14841   }
14842 #pragma omp taskloop
14843   for (int i = 0; i < 10; ++i) {
14844 #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?}}
14845     for (int i = 0; i < 10; ++i)
14846       ;
14847   }
14848 #pragma omp taskloop
14849   for (int i = 0; i < 10; ++i) {
14850 #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?}}
14851     for (int i = 0; i < 10; ++i)
14852       ;
14853   }
14854 #pragma omp taskloop
14855   for (int i = 0; i < 10; ++i) {
14856 #pragma omp target teams // OK
14857     a++;
14858   }
14859 #pragma omp taskloop
14860   for (int i = 0; i < 10; ++i) {
14861 #pragma omp target teams distribute // OK
14862     for (int i = 0; i < 10; ++i)
14863       ;
14864   }
14865 #pragma omp taskloop
14866   for (int i = 0; i < 10; ++i) {
14867 #pragma omp target teams distribute parallel for // OK
14868     for (int i = 0; i < 10; ++i)
14869       ;
14870   }
14871 #pragma omp taskloop
14872   for (int i = 0; i < 10; ++i) {
14873 #pragma omp target teams distribute parallel for simd // OK
14874     for (int i = 0; i < 10; ++i)
14875       ;
14876   }
14877 #pragma omp taskloop
14878   for (int i = 0; i < 10; ++i) {
14879 #pragma omp target teams distribute simd // OK
14880     for (int i = 0; i < 10; ++i)
14881       ;
14882   }
14883 
14884 // DISTRIBUTE DIRECTIVE
14885 #pragma omp target
14886 #pragma omp teams
14887 #pragma omp distribute
14888   for (int i = 0; i < 10; ++i) {
14889 #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?}}
14890     for (int i = 0; i < 10; ++i)
14891       ;
14892   }
14893 #pragma omp target
14894 #pragma omp teams
14895 #pragma omp distribute
14896   for (int i = 0; i < 10; ++i) {
14897 #pragma omp for
14898     for (int i = 0; i < 10; ++i)
14899       ;
14900   }
14901 #pragma omp target
14902 #pragma omp teams
14903 #pragma omp distribute
14904   for (int i = 0; i < 10; ++i) {
14905 #pragma omp simd
14906     for (int i = 0; i < 10; ++i)
14907       ;
14908   }
14909 #pragma omp target
14910 #pragma omp teams
14911 #pragma omp distribute
14912   for (int i = 0; i < 10; ++i) {
14913 #pragma omp for simd
14914     for (int i = 0; i < 10; ++i)
14915       ;
14916   }
14917 #pragma omp target
14918 #pragma omp teams
14919 #pragma omp distribute
14920   for (int i = 0; i < 10; ++i) {
14921 #pragma omp parallel
14922     for (int i = 0; i < 10; ++i)
14923       ;
14924   }
14925 #pragma omp target
14926 #pragma omp teams
14927 #pragma omp distribute
14928   for (int i = 0; i < 10; ++i) {
14929 #pragma omp sections
14930     {
14931       bar();
14932     }
14933   }
14934 #pragma omp target
14935 #pragma omp teams
14936 #pragma omp distribute
14937   for (int i = 0; i < 10; ++i) {
14938 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
14939     {
14940       bar();
14941     }
14942   }
14943 #pragma omp target
14944 #pragma omp teams
14945 #pragma omp distribute
14946   for (int i = 0; i < 10; ++i) {
14947 #pragma omp single
14948     {
14949       bar();
14950     }
14951   }
14952 #pragma omp target
14953 #pragma omp teams
14954 #pragma omp distribute
14955   for (int i = 0; i < 10; ++i) {
14956 #pragma omp master
14957     {
14958       bar();
14959     }
14960   }
14961 #pragma omp target
14962 #pragma omp teams
14963 #pragma omp distribute
14964   for (int i = 0; i < 10; ++i) {
14965 #pragma omp critical
14966     {
14967       bar();
14968     }
14969   }
14970 #pragma omp target
14971 #pragma omp teams
14972 #pragma omp distribute
14973   for (int i = 0; i < 10; ++i) {
14974 #pragma omp parallel
14975     {
14976 #pragma omp single
14977       {
14978         bar();
14979       }
14980     }
14981   }
14982 #pragma omp target
14983 #pragma omp teams
14984 #pragma omp distribute
14985   for (int i = 0; i < 10; ++i) {
14986 #pragma omp parallel for
14987     for (int i = 0; i < 10; ++i)
14988       ;
14989   }
14990 #pragma omp target
14991 #pragma omp teams
14992 #pragma omp distribute
14993   for (int i = 0; i < 10; ++i) {
14994 #pragma omp parallel for simd
14995     for (int i = 0; i < 10; ++i)
14996       ;
14997   }
14998 #pragma omp target
14999 #pragma omp teams
15000 #pragma omp distribute
15001   for (int i = 0; i < 10; ++i) {
15002 #pragma omp parallel sections
15003     {
15004       bar();
15005     }
15006   }
15007 #pragma omp target
15008 #pragma omp teams
15009 #pragma omp distribute
15010   for (int i = 0; i < 10; ++i) {
15011 #pragma omp task
15012     {
15013       bar();
15014     }
15015   }
15016 #pragma omp target
15017 #pragma omp teams
15018 #pragma omp distribute
15019   for (int i = 0; i < 10; ++i) {
15020 #pragma omp taskyield
15021     bar();
15022   }
15023 #pragma omp target
15024 #pragma omp teams
15025 #pragma omp distribute
15026   for (int i = 0; i < 10; ++i) {
15027 #pragma omp barrier
15028     bar();
15029   }
15030 #pragma omp target
15031 #pragma omp teams
15032 #pragma omp distribute
15033   for (int i = 0; i < 10; ++i) {
15034 #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?}}
15035     bar();
15036   }
15037 #pragma omp target
15038 #pragma omp teams
15039 #pragma omp distribute
15040   for (int i = 0; i < 10; ++i) {
15041 #pragma omp taskwait
15042     bar();
15043   }
15044 #pragma omp target
15045 #pragma omp teams
15046 #pragma omp distribute
15047   for (int i = 0; i < 10; ++i) {
15048 #pragma omp flush
15049     bar();
15050   }
15051 #pragma omp target
15052 #pragma omp teams
15053 #pragma omp distribute
15054   for (int i = 0; i < 10; ++i) {
15055 #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?}}
15056     bar();
15057   }
15058 #pragma omp target
15059 #pragma omp teams
15060 #pragma omp distribute
15061   for (int i = 0; i < 10; ++i) {
15062 #pragma omp atomic
15063     ++a;
15064   }
15065 #pragma omp target
15066 #pragma omp teams
15067 #pragma omp distribute
15068   for (int i = 0; i < 10; ++i) {
15069 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15070     ++a;
15071   }
15072 #pragma omp target
15073 #pragma omp teams
15074 #pragma omp distribute
15075   for (int i = 0; i < 10; ++i) {
15076 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
15077     ++a;
15078   }
15079 #pragma omp target
15080 #pragma omp teams
15081 #pragma omp distribute
15082   for (int i = 0; i < 10; ++i) {
15083 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15084     for (int i = 0; i < 10; ++i)
15085       ;
15086   }
15087 #pragma omp target
15088 #pragma omp teams
15089 #pragma omp distribute
15090   for (int i = 0; i < 10; ++i) {
15091 #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?}}
15092     ++a;
15093   }
15094 #pragma omp target
15095 #pragma omp teams
15096 #pragma omp distribute
15097   for (int i = 0; i < 10; ++i) {
15098 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15099     ++a;
15100   }
15101 #pragma omp target
15102 #pragma omp teams
15103 #pragma omp distribute
15104   for (int i = 0; i < 10; ++i) {
15105 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15106     ++a;
15107   }
15108 #pragma omp target
15109 #pragma omp teams
15110 #pragma omp distribute
15111   for (int i = 0; i < 10; ++i) {
15112 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15113     ++a;
15114   }
15115 #pragma omp target
15116 #pragma omp teams
15117 #pragma omp distribute
15118   for (int i = 0; i < 10; ++i) {
15119 #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?}}
15120   for (int i = 0; i < 10; ++i)
15121     ++a;
15122   }
15123 #pragma omp target
15124 #pragma omp teams
15125 #pragma omp distribute
15126   for (int i = 0; i < 10; ++i) {
15127 #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?}}
15128   for (int i = 0; i < 10; ++i)
15129     ++a;
15130   }
15131 #pragma omp target
15132 #pragma omp teams
15133 #pragma omp distribute
15134   for (int i = 0; i < 10; ++i) {
15135 #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?}}
15136   for (int i = 0; i < 10; ++i)
15137     ++a;
15138   }
15139 #pragma omp target
15140 #pragma omp teams
15141 #pragma omp distribute
15142   for (int i = 0; i < 10; ++i) {
15143 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15144   for (int i = 0; i < 10; ++i)
15145     ++a;
15146   }
15147 #pragma omp target
15148 #pragma omp teams
15149 #pragma omp distribute
15150   for (int i = 0; i < 10; ++i) {
15151 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15152   for (int i = 0; i < 10; ++i)
15153     ++a;
15154   }
15155 #pragma omp target
15156 #pragma omp teams
15157 #pragma omp distribute
15158   for (int i = 0; i < 10; ++i) {
15159 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15160   for (int i = 0; i < 10; ++i)
15161     ++a;
15162   }
15163 #pragma omp target
15164 #pragma omp teams
15165 #pragma omp distribute
15166   for (int i = 0; i < 10; ++i) {
15167 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15168   for (int i = 0; i < 10; ++i)
15169     ++a;
15170   }
15171 #pragma omp target
15172 #pragma omp teams
15173 #pragma omp distribute
15174   for (int i = 0; i < 10; ++i) {
15175 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15176   for (int i = 0; i < 10; ++i)
15177     ++a;
15178   }
15179 #pragma omp target
15180 #pragma omp teams
15181 #pragma omp distribute
15182   for (int i = 0; i < 10; ++i) {
15183 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15184   for (int i = 0; i < 10; ++i)
15185     ++a;
15186   }
15187 #pragma omp target
15188 #pragma omp teams
15189 #pragma omp distribute
15190   for (int i = 0; i < 10; ++i) {
15191 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15192   for (int i = 0; i < 10; ++i)
15193     ++a;
15194   }
15195 #pragma omp target
15196 #pragma omp teams
15197 #pragma omp distribute
15198   for (int i = 0; i < 10; ++i) {
15199 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
15200   for (int i = 0; i < 10; ++i)
15201     ++a;
15202   }
15203 
15204 // DISTRIBUTE PARALLEL FOR DIRECTIVE
15205 #pragma omp target
15206 #pragma omp teams
15207 #pragma omp distribute parallel for
15208   for (int i = 0; i < 10; ++i) {
15209 #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?}}
15210     for (int i = 0; i < 10; ++i)
15211       ;
15212   }
15213 
15214 #pragma omp target
15215 #pragma omp teams
15216 #pragma omp distribute parallel for
15217   for (int i = 0; i < 10; ++i) {
15218 #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?}}
15219     for (int i = 0; i < 10; ++i)
15220       ;
15221   }
15222 #pragma omp target
15223 #pragma omp teams
15224 #pragma omp distribute parallel for
15225   for (int i = 0; i < 10; ++i) {
15226 #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?}}
15227     for (int i = 0; i < 10; ++i)
15228       ;
15229   }
15230 #pragma omp target
15231 #pragma omp teams
15232 #pragma omp distribute parallel for
15233   for (int i = 0; i < 10; ++i) {
15234 #pragma omp simd
15235     for (int i = 0; i < 10; ++i)
15236       ;
15237   }
15238 #pragma omp target
15239 #pragma omp teams
15240 #pragma omp distribute parallel for
15241   for (int i = 0; i < 10; ++i) {
15242 #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?}}
15243     for (int i = 0; i < 10; ++i)
15244       ;
15245   }
15246 #pragma omp target
15247 #pragma omp teams
15248 #pragma omp distribute parallel for
15249   for (int i = 0; i < 10; ++i) {
15250 #pragma omp parallel
15251     for (int i = 0; i < 10; ++i)
15252       ;
15253   }
15254 #pragma omp target
15255 #pragma omp teams
15256 #pragma omp distribute parallel for
15257   for (int i = 0; i < 10; ++i) {
15258 #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?}}
15259     {
15260       bar();
15261     }
15262   }
15263 #pragma omp target
15264 #pragma omp teams
15265 #pragma omp distribute parallel for
15266   for (int i = 0; i < 10; ++i) {
15267 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
15268     {
15269       bar();
15270     }
15271   }
15272 #pragma omp target
15273 #pragma omp teams
15274 #pragma omp distribute parallel for
15275   for (int i = 0; i < 10; ++i) {
15276 #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?}}
15277     {
15278       bar();
15279     }
15280   }
15281 #pragma omp target
15282 #pragma omp teams
15283 #pragma omp distribute parallel for
15284   for (int i = 0; i < 10; ++i) {
15285 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
15286     {
15287       bar();
15288     }
15289   }
15290 #pragma omp target
15291 #pragma omp teams
15292 #pragma omp distribute parallel for
15293   for (int i = 0; i < 10; ++i) {
15294 #pragma omp critical
15295     {
15296       bar();
15297     }
15298   }
15299 #pragma omp target
15300 #pragma omp teams
15301 #pragma omp distribute parallel for
15302   for (int i = 0; i < 10; ++i) {
15303 #pragma omp parallel
15304     {
15305 #pragma omp single
15306       {
15307         bar();
15308       }
15309     }
15310   }
15311 #pragma omp target
15312 #pragma omp teams
15313 #pragma omp distribute parallel for
15314   for (int i = 0; i < 10; ++i) {
15315 #pragma omp parallel for
15316     for (int i = 0; i < 10; ++i)
15317       ;
15318   }
15319 #pragma omp target
15320 #pragma omp teams
15321 #pragma omp distribute parallel for
15322   for (int i = 0; i < 10; ++i) {
15323 #pragma omp parallel for simd
15324     for (int i = 0; i < 10; ++i)
15325       ;
15326   }
15327 #pragma omp target
15328 #pragma omp teams
15329 #pragma omp distribute parallel for
15330   for (int i = 0; i < 10; ++i) {
15331 #pragma omp parallel sections
15332     {
15333       bar();
15334     }
15335   }
15336 #pragma omp target
15337 #pragma omp teams
15338 #pragma omp distribute parallel for
15339   for (int i = 0; i < 10; ++i) {
15340 #pragma omp task
15341     {
15342       bar();
15343     }
15344   }
15345 #pragma omp target
15346 #pragma omp teams
15347 #pragma omp distribute parallel for
15348   for (int i = 0; i < 10; ++i) {
15349 #pragma omp taskyield
15350     bar();
15351   }
15352 #pragma omp target
15353 #pragma omp teams
15354 #pragma omp distribute parallel for
15355   for (int i = 0; i < 10; ++i) {
15356 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
15357     bar();
15358   }
15359 #pragma omp target
15360 #pragma omp teams
15361 #pragma omp distribute parallel for
15362   for (int i = 0; i < 10; ++i) {
15363 #pragma omp scan // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
15364     bar();
15365   }
15366 #pragma omp target
15367 #pragma omp teams
15368 #pragma omp distribute parallel for
15369   for (int i = 0; i < 10; ++i) {
15370 #pragma omp taskwait
15371     bar();
15372   }
15373 #pragma omp target
15374 #pragma omp teams
15375 #pragma omp distribute parallel for
15376   for (int i = 0; i < 10; ++i) {
15377 #pragma omp flush
15378     bar();
15379   }
15380 #pragma omp target
15381 #pragma omp teams
15382 #pragma omp distribute parallel for
15383   for (int i = 0; i < 10; ++i) {
15384 #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?}}
15385     bar();
15386   }
15387 #pragma omp target
15388 #pragma omp teams
15389 #pragma omp distribute parallel for
15390   for (int i = 0; i < 10; ++i) {
15391 #pragma omp atomic
15392     ++a;
15393   }
15394 #pragma omp target
15395 #pragma omp teams
15396 #pragma omp distribute parallel for
15397   for (int i = 0; i < 10; ++i) {
15398 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15399     ++a;
15400   }
15401 #pragma omp target
15402 #pragma omp teams
15403 #pragma omp distribute parallel for
15404   for (int i = 0; i < 10; ++i) {
15405 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
15406     ++a;
15407   }
15408 #pragma omp target
15409 #pragma omp teams
15410 #pragma omp distribute parallel for
15411   for (int i = 0; i < 10; ++i) {
15412 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15413     for (int i = 0; i < 10; ++i)
15414       ;
15415   }
15416 #pragma omp target
15417 #pragma omp teams
15418 #pragma omp distribute parallel for
15419   for (int i = 0; i < 10; ++i) {
15420 #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?}}
15421     ++a;
15422   }
15423 #pragma omp target
15424 #pragma omp teams
15425 #pragma omp distribute parallel for
15426   for (int i = 0; i < 10; ++i) {
15427 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15428     ++a;
15429   }
15430 #pragma omp target
15431 #pragma omp teams
15432 #pragma omp distribute parallel for
15433   for (int i = 0; i < 10; ++i) {
15434 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15435     ++a;
15436   }
15437 #pragma omp target
15438 #pragma omp teams
15439 #pragma omp distribute parallel for
15440   for (int i = 0; i < 10; ++i) {
15441 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15442     ++a;
15443   }
15444 #pragma omp target
15445 #pragma omp teams
15446 #pragma omp distribute parallel for
15447   for (int i = 0; i < 10; ++i) {
15448 #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?}}
15449   for (int i = 0; i < 10; ++i)
15450     ++a;
15451   }
15452 #pragma omp target
15453 #pragma omp teams
15454 #pragma omp distribute parallel for
15455   for (int i = 0; i < 10; ++i) {
15456 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15457   for (int i = 0; i < 10; ++i)
15458     ++a;
15459   }
15460 #pragma omp target
15461 #pragma omp teams
15462 #pragma omp distribute parallel for
15463   for (int i = 0; i < 10; ++i) {
15464 #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?}}
15465   for (int i = 0; i < 10; ++i)
15466     ++a;
15467   }
15468 #pragma omp target
15469 #pragma omp teams
15470 #pragma omp distribute parallel for
15471   for (int i = 0; i < 10; ++i) {
15472 #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?}}
15473   for (int i = 0; i < 10; ++i)
15474     ++a;
15475   }
15476 #pragma omp target
15477 #pragma omp teams
15478 #pragma omp distribute parallel for
15479   for (int i = 0; i < 10; ++i) {
15480 #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?}}
15481   for (int i = 0; i < 10; ++i)
15482     ++a;
15483   }
15484 #pragma omp target
15485 #pragma omp teams
15486 #pragma omp distribute parallel for
15487   for (int i = 0; i < 10; ++i) {
15488 #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?}}
15489   for (int i = 0; i < 10; ++i)
15490     ++a;
15491   }
15492 #pragma omp target
15493 #pragma omp teams
15494 #pragma omp distribute parallel for
15495   for (int i = 0; i < 10; ++i) {
15496 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15497     ++a;
15498   }
15499 #pragma omp target
15500 #pragma omp teams
15501 #pragma omp distribute parallel for
15502   for (int i = 0; i < 10; ++i) {
15503 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15504   for (int i = 0; i < 10; ++i)
15505     ++a;
15506   }
15507 #pragma omp target
15508 #pragma omp teams
15509 #pragma omp distribute parallel for
15510   for (int i = 0; i < 10; ++i) {
15511 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15512   for (int i = 0; i < 10; ++i)
15513     ++a;
15514   }
15515 #pragma omp target
15516 #pragma omp teams
15517 #pragma omp distribute parallel for
15518   for (int i = 0; i < 10; ++i) {
15519 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15520   for (int i = 0; i < 10; ++i)
15521     ++a;
15522   }
15523 #pragma omp target
15524 #pragma omp teams
15525 #pragma omp distribute parallel for
15526   for (int i = 0; i < 10; ++i) {
15527 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
15528   for (int i = 0; i < 10; ++i)
15529     ++a;
15530   }
15531 
15532 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
15533 #pragma omp target
15534 #pragma omp teams
15535 #pragma omp distribute parallel for simd
15536   for (int i = 0; i < 10; ++i) {
15537 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15538     for (int i = 0; i < 10; ++i)
15539       ;
15540   }
15541 #pragma omp target
15542 #pragma omp teams
15543 #pragma omp distribute parallel for simd
15544   for (int i = 0; i < 10; ++i) {
15545 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15546     for (int i = 0; i < 10; ++i)
15547       ;
15548   }
15549 #pragma omp target
15550 #pragma omp teams
15551 #pragma omp distribute parallel for simd
15552   for (int i = 0; i < 10; ++i) {
15553 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15554     for (int i = 0; i < 10; ++i)
15555       ;
15556   }
15557 #pragma omp target
15558 #pragma omp teams
15559 #pragma omp distribute parallel for simd
15560   for (int i = 0; i < 10; ++i) {
15561 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15562     for (int i = 0; i < 10; ++i)
15563       ;
15564   }
15565 #pragma omp target
15566 #pragma omp teams
15567 #pragma omp distribute parallel for simd
15568   for (int i = 0; i < 10; ++i) {
15569 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15570     for (int i = 0; i < 10; ++i)
15571       ;
15572   }
15573 #pragma omp target
15574 #pragma omp teams
15575 #pragma omp distribute parallel for simd
15576   for (int i = 0; i < 10; ++i) {
15577 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15578     for (int i = 0; i < 10; ++i)
15579       ;
15580   }
15581 #pragma omp target
15582 #pragma omp teams
15583 #pragma omp distribute parallel for simd
15584   for (int i = 0; i < 10; ++i) {
15585 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15586     {
15587       bar();
15588     }
15589   }
15590 #pragma omp target
15591 #pragma omp teams
15592 #pragma omp distribute parallel for simd
15593   for (int i = 0; i < 10; ++i) {
15594 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15595     {
15596       bar();
15597     }
15598   }
15599 #pragma omp target
15600 #pragma omp teams
15601 #pragma omp distribute parallel for simd
15602   for (int i = 0; i < 10; ++i) {
15603 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15604     {
15605       bar();
15606     }
15607   }
15608 #pragma omp target
15609 #pragma omp teams
15610 #pragma omp distribute parallel for simd
15611   for (int i = 0; i < 10; ++i) {
15612 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15613     {
15614       bar();
15615     }
15616   }
15617 #pragma omp target
15618 #pragma omp teams
15619 #pragma omp distribute parallel for simd
15620   for (int i = 0; i < 10; ++i) {
15621 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15622     {
15623       bar();
15624     }
15625   }
15626 #pragma omp target
15627 #pragma omp teams
15628 #pragma omp distribute parallel for simd
15629   for (int i = 0; i < 10; ++i) {
15630 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15631     {
15632 #pragma omp single
15633       {
15634         bar();
15635       }
15636     }
15637   }
15638 #pragma omp target
15639 #pragma omp teams
15640 #pragma omp distribute parallel for simd
15641   for (int i = 0; i < 10; ++i) {
15642 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15643     for (int i = 0; i < 10; ++i)
15644       ;
15645   }
15646 #pragma omp target
15647 #pragma omp teams
15648 #pragma omp distribute parallel for simd
15649   for (int i = 0; i < 10; ++i) {
15650 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15651     for (int i = 0; i < 10; ++i)
15652       ;
15653   }
15654 #pragma omp target
15655 #pragma omp teams
15656 #pragma omp distribute parallel for simd
15657   for (int i = 0; i < 10; ++i) {
15658 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15659     {
15660       bar();
15661     }
15662   }
15663 #pragma omp target
15664 #pragma omp teams
15665 #pragma omp distribute parallel for simd
15666   for (int i = 0; i < 10; ++i) {
15667 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15668     {
15669       bar();
15670     }
15671   }
15672 #pragma omp target
15673 #pragma omp teams
15674 #pragma omp distribute parallel for simd
15675   for (int i = 0; i < 10; ++i) {
15676 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15677     bar();
15678   }
15679 #pragma omp target
15680 #pragma omp teams
15681 #pragma omp distribute parallel for simd
15682   for (int i = 0; i < 10; ++i) {
15683 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15684     bar();
15685   }
15686 #pragma omp target
15687 #pragma omp teams
15688 #pragma omp distribute parallel for simd
15689   for (int i = 0; i < 10; ++i) {
15690 #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?}}
15691     bar();
15692   }
15693 #pragma omp target
15694 #pragma omp teams
15695 #pragma omp distribute parallel for simd
15696   for (int i = 0; i < 10; ++i) {
15697 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15698     bar();
15699   }
15700 #pragma omp target
15701 #pragma omp teams
15702 #pragma omp distribute parallel for simd
15703   for (int i = 0; i < 10; ++i) {
15704 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15705     bar();
15706   }
15707 #pragma omp target
15708 #pragma omp teams
15709 #pragma omp distribute parallel for simd
15710   for (int i = 0; i < 10; ++i) {
15711 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15712     bar();
15713   }
15714 #pragma omp target
15715 #pragma omp teams
15716 #pragma omp distribute parallel for simd
15717   for (int i = 0; i < 10; ++i) {
15718 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
15719     ++a;
15720   }
15721 #pragma omp target
15722 #pragma omp teams
15723 #pragma omp distribute parallel for simd
15724   for (int i = 0; i < 10; ++i) {
15725 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15726     ++a;
15727   }
15728 #pragma omp target
15729 #pragma omp teams
15730 #pragma omp distribute parallel for simd
15731   for (int i = 0; i < 10; ++i) {
15732 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15733     ++a;
15734   }
15735 #pragma omp target
15736 #pragma omp teams
15737 #pragma omp distribute parallel for simd
15738   for (int i = 0; i < 10; ++i) {
15739 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15740     ++a;
15741   }
15742 #pragma omp target
15743 #pragma omp teams
15744 #pragma omp distribute parallel for simd
15745   for (int i = 0; i < 10; ++i) {
15746 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15747     ++a;
15748   }
15749 #pragma omp target
15750 #pragma omp teams
15751 #pragma omp distribute parallel for simd
15752   for (int i = 0; i < 10; ++i) {
15753 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15754     ++a;
15755   }
15756 #pragma omp target
15757 #pragma omp teams
15758 #pragma omp distribute parallel for simd
15759   for (int i = 0; i < 10; ++i) {
15760 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15761     ++a;
15762   }
15763 #pragma omp target
15764 #pragma omp teams
15765 #pragma omp distribute parallel for simd
15766   for (int i = 0; i < 10; ++i) {
15767 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15768     for (int i = 0; i < 10; ++i)
15769       ;
15770   }
15771 #pragma omp target
15772 #pragma omp teams
15773 #pragma omp distribute parallel for simd
15774   for (int i = 0; i < 10; ++i) {
15775 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15776     for (int i = 0; i < 10; ++i)
15777       ;
15778   }
15779 #pragma omp target
15780 #pragma omp teams
15781 #pragma omp distribute parallel for simd
15782   for (int i = 0; i < 10; ++i) {
15783 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15784     for (int i = 0; i < 10; ++i)
15785       ;
15786   }
15787 #pragma omp target
15788 #pragma omp teams
15789 #pragma omp distribute parallel for simd
15790   for (int i = 0; i < 10; ++i) {
15791 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15792     for (int i = 0; i < 10; ++i)
15793       ;
15794   }
15795 #pragma omp target
15796 #pragma omp teams
15797 #pragma omp distribute parallel for simd
15798   for (int i = 0; i < 10; ++i) {
15799 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15800     for (int i = 0; i < 10; ++i)
15801       ;
15802   }
15803 #pragma omp target
15804 #pragma omp teams
15805 #pragma omp distribute parallel for simd
15806   for (int i = 0; i < 10; ++i) {
15807 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15808     for (int i = 0; i < 10; ++i)
15809       ;
15810   }
15811 #pragma omp target
15812 #pragma omp teams
15813 #pragma omp distribute parallel for simd
15814   for (int i = 0; i < 10; ++i) {
15815 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15816     a++;
15817   }
15818 #pragma omp target
15819 #pragma omp teams
15820 #pragma omp distribute parallel for simd
15821   for (int i = 0; i < 10; ++i) {
15822 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15823     for (int i = 0; i < 10; ++i)
15824       ;
15825   }
15826 #pragma omp target
15827 #pragma omp teams
15828 #pragma omp distribute parallel for simd
15829   for (int i = 0; i < 10; ++i) {
15830 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15831     for (int i = 0; i < 10; ++i)
15832       ;
15833   }
15834 #pragma omp target
15835 #pragma omp teams
15836 #pragma omp distribute parallel for simd
15837   for (int i = 0; i < 10; ++i) {
15838 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15839     for (int i = 0; i < 10; ++i)
15840       ;
15841   }
15842 #pragma omp target
15843 #pragma omp teams
15844 #pragma omp distribute parallel for simd
15845   for (int i = 0; i < 10; ++i) {
15846 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15847     for (int i = 0; i < 10; ++i)
15848       ;
15849   }
15850 
15851 // DISTRIBUTE SIMD DIRECTIVE
15852 #pragma omp target
15853 #pragma omp teams
15854 #pragma omp distribute simd
15855   for (int i = 0; i < 10; ++i) {
15856 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15857     for (int i = 0; i < 10; ++i)
15858       ;
15859   }
15860 #pragma omp target
15861 #pragma omp teams
15862 #pragma omp distribute simd
15863   for (int i = 0; i < 10; ++i) {
15864 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15865     for (int i = 0; i < 10; ++i)
15866       ;
15867   }
15868 #pragma omp target
15869 #pragma omp teams
15870 #pragma omp distribute simd
15871   for (int i = 0; i < 10; ++i) {
15872 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15873     for (int i = 0; i < 10; ++i)
15874       ;
15875   }
15876 #pragma omp target
15877 #pragma omp teams
15878 #pragma omp distribute simd
15879   for (int i = 0; i < 10; ++i) {
15880 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15881     for (int i = 0; i < 10; ++i)
15882       ;
15883   }
15884 #pragma omp target
15885 #pragma omp teams
15886 #pragma omp distribute simd
15887   for (int i = 0; i < 10; ++i) {
15888 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15889     for (int i = 0; i < 10; ++i)
15890       ;
15891   }
15892 #pragma omp target
15893 #pragma omp teams
15894 #pragma omp distribute simd
15895   for (int i = 0; i < 10; ++i) {
15896 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15897     for (int i = 0; i < 10; ++i)
15898       ;
15899   }
15900 #pragma omp target
15901 #pragma omp teams
15902 #pragma omp distribute simd
15903   for (int i = 0; i < 10; ++i) {
15904 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15905     {
15906       bar();
15907     }
15908   }
15909 #pragma omp target
15910 #pragma omp teams
15911 #pragma omp distribute simd
15912   for (int i = 0; i < 10; ++i) {
15913 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15914     {
15915       bar();
15916     }
15917   }
15918 #pragma omp target
15919 #pragma omp teams
15920 #pragma omp distribute simd
15921   for (int i = 0; i < 10; ++i) {
15922 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15923     {
15924       bar();
15925     }
15926   }
15927 #pragma omp target
15928 #pragma omp teams
15929 #pragma omp distribute simd
15930   for (int i = 0; i < 10; ++i) {
15931 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15932     {
15933       bar();
15934     }
15935   }
15936 #pragma omp target
15937 #pragma omp teams
15938 #pragma omp distribute simd
15939   for (int i = 0; i < 10; ++i) {
15940 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15941     {
15942       bar();
15943     }
15944   }
15945 #pragma omp target
15946 #pragma omp teams
15947 #pragma omp distribute simd
15948   for (int i = 0; i < 10; ++i) {
15949 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15950     {
15951 #pragma omp single
15952       {
15953         bar();
15954       }
15955     }
15956   }
15957 #pragma omp target
15958 #pragma omp teams
15959 #pragma omp distribute simd
15960   for (int i = 0; i < 10; ++i) {
15961 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15962     for (int i = 0; i < 10; ++i)
15963       ;
15964   }
15965 #pragma omp target
15966 #pragma omp teams
15967 #pragma omp distribute simd
15968   for (int i = 0; i < 10; ++i) {
15969 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15970     for (int i = 0; i < 10; ++i)
15971       ;
15972   }
15973 #pragma omp target
15974 #pragma omp teams
15975 #pragma omp distribute simd
15976   for (int i = 0; i < 10; ++i) {
15977 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15978     {
15979       bar();
15980     }
15981   }
15982 #pragma omp target
15983 #pragma omp teams
15984 #pragma omp distribute simd
15985   for (int i = 0; i < 10; ++i) {
15986 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15987     {
15988       bar();
15989     }
15990   }
15991 #pragma omp target
15992 #pragma omp teams
15993 #pragma omp distribute simd
15994   for (int i = 0; i < 10; ++i) {
15995 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15996     bar();
15997   }
15998 #pragma omp target
15999 #pragma omp teams
16000 #pragma omp distribute simd
16001   for (int i = 0; i < 10; ++i) {
16002 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16003     bar();
16004   }
16005 #pragma omp target
16006 #pragma omp teams
16007 #pragma omp distribute simd
16008   for (int i = 0; i < 10; ++i) {
16009 #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?}}
16010     bar();
16011   }
16012 #pragma omp target
16013 #pragma omp teams
16014 #pragma omp distribute simd
16015   for (int i = 0; i < 10; ++i) {
16016 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16017     bar();
16018   }
16019 #pragma omp target
16020 #pragma omp teams
16021 #pragma omp distribute simd
16022   for (int i = 0; i < 10; ++i) {
16023 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16024     bar();
16025   }
16026 #pragma omp target
16027 #pragma omp teams
16028 #pragma omp distribute simd
16029   for (int i = 0; i < 10; ++i) {
16030 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16031     bar();
16032   }
16033 #pragma omp target
16034 #pragma omp teams
16035 #pragma omp distribute simd
16036   for (int i = 0; i < 10; ++i) {
16037 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16038     ++a;
16039   }
16040 #pragma omp target
16041 #pragma omp teams
16042 #pragma omp distribute simd
16043   for (int i = 0; i < 10; ++i) {
16044 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16045     ++a;
16046   }
16047 #pragma omp target
16048 #pragma omp teams
16049 #pragma omp distribute simd
16050   for (int i = 0; i < 10; ++i) {
16051 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16052     ++a;
16053   }
16054 #pragma omp target
16055 #pragma omp teams
16056 #pragma omp distribute simd
16057   for (int i = 0; i < 10; ++i) {
16058 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16059     ++a;
16060   }
16061 #pragma omp target
16062 #pragma omp teams
16063 #pragma omp distribute simd
16064   for (int i = 0; i < 10; ++i) {
16065 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16066     ++a;
16067   }
16068 #pragma omp target
16069 #pragma omp teams
16070 #pragma omp distribute simd
16071   for (int i = 0; i < 10; ++i) {
16072 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16073     ++a;
16074   }
16075 #pragma omp target
16076 #pragma omp teams
16077 #pragma omp distribute simd
16078   for (int i = 0; i < 10; ++i) {
16079 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16080     ++a;
16081   }
16082 #pragma omp target
16083 #pragma omp teams
16084 #pragma omp distribute simd
16085   for (int i = 0; i < 10; ++i) {
16086 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16087     for (int i = 0; i < 10; ++i)
16088       ;
16089   }
16090 #pragma omp target
16091 #pragma omp teams
16092 #pragma omp distribute simd
16093   for (int i = 0; i < 10; ++i) {
16094 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16095     for (int i = 0; i < 10; ++i)
16096       ;
16097   }
16098 #pragma omp target
16099 #pragma omp teams
16100 #pragma omp distribute simd
16101   for (int i = 0; i < 10; ++i) {
16102 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16103     for (int i = 0; i < 10; ++i)
16104       ;
16105   }
16106 #pragma omp target
16107 #pragma omp teams
16108 #pragma omp distribute simd
16109   for (int i = 0; i < 10; ++i) {
16110 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16111     for (int i = 0; i < 10; ++i)
16112       ;
16113   }
16114 #pragma omp target
16115 #pragma omp teams
16116 #pragma omp distribute simd
16117   for (int i = 0; i < 10; ++i) {
16118 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16119     for (int i = 0; i < 10; ++i)
16120       ;
16121   }
16122 #pragma omp target
16123 #pragma omp teams
16124 #pragma omp distribute simd
16125   for (int i = 0; i < 10; ++i) {
16126 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16127     for (int i = 0; i < 10; ++i)
16128       ;
16129   }
16130 #pragma omp target
16131 #pragma omp teams
16132 #pragma omp distribute simd
16133   for (int i = 0; i < 10; ++i) {
16134 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16135     a++;
16136   }
16137 #pragma omp target
16138 #pragma omp teams
16139 #pragma omp distribute simd
16140   for (int i = 0; i < 10; ++i) {
16141 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16142     for (int i = 0; i < 10; ++i)
16143       ;
16144   }
16145 #pragma omp target
16146 #pragma omp teams
16147 #pragma omp distribute simd
16148   for (int i = 0; i < 10; ++i) {
16149 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16150     for (int i = 0; i < 10; ++i)
16151       ;
16152   }
16153 #pragma omp target
16154 #pragma omp teams
16155 #pragma omp distribute simd
16156   for (int i = 0; i < 10; ++i) {
16157 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16158     for (int i = 0; i < 10; ++i)
16159       ;
16160   }
16161 #pragma omp target
16162 #pragma omp teams
16163 #pragma omp distribute simd
16164   for (int i = 0; i < 10; ++i) {
16165 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16166     for (int i = 0; i < 10; ++i)
16167       ;
16168   }
16169 
16170 // TARGET SIMD DIRECTIVE
16171 #pragma omp target simd
16172   for (int i = 0; i < 10; ++i) {
16173 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16174     for (int i = 0; i < 10; ++i)
16175       ;
16176   }
16177 #pragma omp target simd
16178   for (int i = 0; i < 10; ++i) {
16179 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16180     for (int i = 0; i < 10; ++i)
16181       ;
16182   }
16183 #pragma omp target simd
16184   for (int i = 0; i < 10; ++i) {
16185 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16186     for (int i = 0; i < 10; ++i)
16187       ;
16188   }
16189 #pragma omp target simd
16190   for (int i = 0; i < 10; ++i) {
16191 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16192     for (int i = 0; i < 10; ++i)
16193       ;
16194   }
16195 #pragma omp target simd
16196   for (int i = 0; i < 10; ++i) {
16197 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16198     for (int i = 0; i < 10; ++i)
16199       ;
16200   }
16201 #pragma omp target simd
16202   for (int i = 0; i < 10; ++i) {
16203 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16204     for (int i = 0; i < 10; ++i)
16205       ;
16206   }
16207 #pragma omp target simd
16208   for (int i = 0; i < 10; ++i) {
16209 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16210     {
16211       bar();
16212     }
16213   }
16214 #pragma omp target simd
16215   for (int i = 0; i < 10; ++i) {
16216 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16217     {
16218       bar();
16219     }
16220   }
16221 #pragma omp target simd
16222   for (int i = 0; i < 10; ++i) {
16223 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16224     {
16225       bar();
16226     }
16227   }
16228 #pragma omp target simd
16229   for (int i = 0; i < 10; ++i) {
16230 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16231     {
16232       bar();
16233     }
16234   }
16235 #pragma omp target simd
16236   for (int i = 0; i < 10; ++i) {
16237 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16238     {
16239       bar();
16240     }
16241   }
16242 #pragma omp target simd
16243   for (int i = 0; i < 10; ++i) {
16244 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16245     {
16246 #pragma omp single
16247       {
16248         bar();
16249       }
16250     }
16251   }
16252 #pragma omp target simd
16253   for (int i = 0; i < 10; ++i) {
16254 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16255     for (int i = 0; i < 10; ++i)
16256       ;
16257   }
16258 #pragma omp target simd
16259   for (int i = 0; i < 10; ++i) {
16260 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16261     for (int i = 0; i < 10; ++i)
16262       ;
16263   }
16264 #pragma omp target simd
16265   for (int i = 0; i < 10; ++i) {
16266 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16267     {
16268       bar();
16269     }
16270   }
16271 #pragma omp target simd
16272   for (int i = 0; i < 10; ++i) {
16273 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16274     {
16275       bar();
16276     }
16277   }
16278 #pragma omp target simd
16279   for (int i = 0; i < 10; ++i) {
16280 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16281     bar();
16282   }
16283 #pragma omp target simd
16284   for (int i = 0; i < 10; ++i) {
16285 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16286     bar();
16287   }
16288 #pragma omp target simd
16289   for (int i = 0; i < 10; ++i) {
16290 #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?}}
16291     bar();
16292   }
16293 #pragma omp target simd
16294   for (int i = 0; i < 10; ++i) {
16295 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16296     bar();
16297   }
16298 #pragma omp target simd
16299   for (int i = 0; i < 10; ++i) {
16300 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16301     bar();
16302   }
16303 #pragma omp target simd
16304   for (int i = 0; i < 10; ++i) {
16305 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16306     bar();
16307   }
16308 #pragma omp target simd
16309   for (int i = 0; i < 10; ++i) {
16310 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16311     ++a;
16312   }
16313 #pragma omp target simd
16314   for (int i = 0; i < 10; ++i) {
16315 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16316     ++a;
16317   }
16318 #pragma omp target simd
16319   for (int i = 0; i < 10; ++i) {
16320 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16321     ++a;
16322   }
16323 #pragma omp target simd
16324   for (int i = 0; i < 10; ++i) {
16325 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16326     ++a;
16327   }
16328 #pragma omp target simd
16329   for (int i = 0; i < 10; ++i) {
16330 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16331     ++a;
16332   }
16333 #pragma omp target simd
16334   for (int i = 0; i < 10; ++i) {
16335 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16336     ++a;
16337   }
16338 #pragma omp target simd
16339   for (int i = 0; i < 10; ++i) {
16340 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16341     ++a;
16342   }
16343 #pragma omp target simd
16344   for (int i = 0; i < 10; ++i) {
16345 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16346     for (int i = 0; i < 10; ++i)
16347       ;
16348   }
16349 #pragma omp target simd
16350   for (int i = 0; i < 10; ++i) {
16351 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16352     for (int i = 0; i < 10; ++i)
16353       ;
16354   }
16355 #pragma omp target simd
16356   for (int i = 0; i < 10; ++i) {
16357 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16358     for (int i = 0; i < 10; ++i)
16359       ;
16360   }
16361 #pragma omp target simd
16362   for (int i = 0; i < 10; ++i) {
16363 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16364     for (int i = 0; i < 10; ++i)
16365       ;
16366   }
16367 #pragma omp target simd
16368   for (int i = 0; i < 10; ++i) {
16369 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16370     for (int i = 0; i < 10; ++i)
16371       ;
16372   }
16373 #pragma omp target simd
16374   for (int i = 0; i < 10; ++i) {
16375 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16376     for (int i = 0; i < 10; ++i)
16377       ;
16378   }
16379 #pragma omp target simd
16380   for (int i = 0; i < 10; ++i) {
16381 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16382     a++;
16383   }
16384 #pragma omp target simd
16385   for (int i = 0; i < 10; ++i) {
16386 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16387     for (int i = 0; i < 10; ++i)
16388       ;
16389   }
16390 #pragma omp target simd
16391   for (int i = 0; i < 10; ++i) {
16392 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16393     for (int i = 0; i < 10; ++i)
16394       ;
16395   }
16396 #pragma omp target simd
16397   for (int i = 0; i < 10; ++i) {
16398 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16399     for (int i = 0; i < 10; ++i)
16400       ;
16401   }
16402 #pragma omp target simd
16403   for (int i = 0; i < 10; ++i) {
16404 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16405     for (int i = 0; i < 10; ++i)
16406       ;
16407   }
16408 
16409 // TEAMS DISTRIBUTE DIRECTIVE
16410 #pragma omp teams distribute // omp45-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16411   for (int i = 0; i < 10; ++i)
16412     ;
16413 #pragma omp target
16414 #pragma omp teams distribute
16415   for (int i = 0; i < 10; ++i) {
16416 #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?}}
16417     for (int i = 0; i < 10; ++i)
16418       ;
16419   }
16420 #pragma omp target
16421 #pragma omp teams distribute
16422   for (int i = 0; i < 10; ++i) {
16423 #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?}}
16424     for (int i = 0; i < 10; ++i)
16425       ;
16426   }
16427 #pragma omp target
16428 #pragma omp teams distribute
16429   for (int i = 0; i < 10; ++i) {
16430 #pragma omp for // OK
16431     for (int i = 0; i < 10; ++i)
16432       ;
16433   }
16434 #pragma omp target
16435 #pragma omp teams distribute
16436   for (int i = 0; i < 10; ++i) {
16437 #pragma omp simd // OK
16438     for (int i = 0; i < 10; ++i)
16439       ;
16440   }
16441 #pragma omp target
16442 #pragma omp teams distribute
16443   for (int i = 0; i < 10; ++i) {
16444 #pragma omp for simd // OK
16445     for (int i = 0; i < 10; ++i)
16446       ;
16447   }
16448 #pragma omp target
16449 #pragma omp teams distribute
16450   for (int i = 0; i < 10; ++i) {
16451 #pragma omp parallel // OK
16452     for (int i = 0; i < 10; ++i)
16453       ;
16454   }
16455 #pragma omp target
16456 #pragma omp teams distribute
16457   for (int i = 0; i < 10; ++i) {
16458 #pragma omp sections // OK
16459     {
16460       bar();
16461     }
16462   }
16463 #pragma omp target
16464 #pragma omp teams distribute
16465   for (int i = 0; i < 10; ++i) {
16466 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
16467     {
16468       bar();
16469     }
16470   }
16471 #pragma omp target
16472 #pragma omp teams distribute
16473   for (int i = 0; i < 10; ++i) {
16474 #pragma omp single // OK
16475     {
16476       bar();
16477     }
16478   }
16479 #pragma omp target
16480 #pragma omp teams distribute
16481   for (int i = 0; i < 10; ++i) {
16482 #pragma omp master // OK
16483     {
16484       bar();
16485     }
16486   }
16487 #pragma omp target
16488 #pragma omp teams distribute
16489   for (int i = 0; i < 10; ++i) {
16490 #pragma omp critical // OK
16491     {
16492       bar();
16493     }
16494   }
16495 #pragma omp target
16496 #pragma omp teams distribute
16497   for (int i = 0; i < 10; ++i) {
16498 #pragma omp parallel // OK
16499     {
16500 #pragma omp single
16501       {
16502         bar();
16503       }
16504     }
16505   }
16506 #pragma omp target
16507 #pragma omp teams distribute
16508   for (int i = 0; i < 10; ++i) {
16509 #pragma omp parallel for // OK
16510     for (int i = 0; i < 10; ++i)
16511       ;
16512   }
16513 #pragma omp target
16514 #pragma omp teams distribute
16515   for (int i = 0; i < 10; ++i) {
16516 #pragma omp parallel for simd // OK
16517     for (int i = 0; i < 10; ++i)
16518       ;
16519   }
16520 #pragma omp target
16521 #pragma omp teams distribute
16522   for (int i = 0; i < 10; ++i) {
16523 #pragma omp parallel sections // OK
16524     {
16525       bar();
16526     }
16527   }
16528 #pragma omp target
16529 #pragma omp teams distribute
16530   for (int i = 0; i < 10; ++i) {
16531 #pragma omp task // OK
16532     {
16533       bar();
16534     }
16535   }
16536 #pragma omp target
16537 #pragma omp teams distribute
16538   for (int i = 0; i < 10; ++i) {
16539 #pragma omp taskyield // OK
16540     bar();
16541   }
16542 #pragma omp target
16543 #pragma omp teams distribute
16544   for (int i = 0; i < 10; ++i) {
16545 #pragma omp barrier // OK
16546     bar();
16547   }
16548 #pragma omp target
16549 #pragma omp teams distribute
16550   for (int i = 0; i < 10; ++i) {
16551 #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?}}
16552     bar();
16553   }
16554 #pragma omp target
16555 #pragma omp teams distribute
16556   for (int i = 0; i < 10; ++i) {
16557 #pragma omp taskwait // OK
16558     bar();
16559   }
16560 #pragma omp target
16561 #pragma omp teams distribute
16562   for (int i = 0; i < 10; ++i) {
16563 #pragma omp flush // OK
16564     bar();
16565   }
16566 #pragma omp target
16567 #pragma omp teams distribute
16568   for (int i = 0; i < 10; ++i) {
16569 #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?}}
16570     bar();
16571   }
16572 #pragma omp target
16573 #pragma omp teams distribute
16574   for (int i = 0; i < 10; ++i) {
16575 #pragma omp atomic // OK
16576     ++a;
16577   }
16578 #pragma omp target
16579 #pragma omp teams distribute
16580   for (int i = 0; i < 10; ++i) {
16581 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
16582     ++a;
16583   }
16584 #pragma omp target
16585 #pragma omp teams distribute
16586   for (int i = 0; i < 10; ++i) {
16587 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
16588     ++a;
16589   }
16590 #pragma omp target
16591 #pragma omp teams distribute
16592   for (int i = 0; i < 10; ++i) {
16593 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
16594     for (int i = 0; i < 10; ++i)
16595       ;
16596   }
16597 #pragma omp target
16598 #pragma omp teams distribute
16599   for (int i = 0; i < 10; ++i) {
16600 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
16601     ++a;
16602   }
16603 #pragma omp target
16604 #pragma omp teams distribute
16605   for (int i = 0; i < 10; ++i) {
16606 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
16607     ++a;
16608   }
16609 #pragma omp target
16610 #pragma omp teams distribute
16611   for (int i = 0; i < 10; ++i) {
16612 #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?}}
16613     ++a;
16614   }
16615 #pragma omp target
16616 #pragma omp teams distribute
16617   for (int i = 0; i < 10; ++i) {
16618 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
16619     ++a;
16620   }
16621 #pragma omp target
16622 #pragma omp teams distribute
16623   for (int i = 0; i < 10; ++i) {
16624 #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?}}
16625     for (int i = 0; i < 10; ++i)
16626       ++a;
16627   }
16628 #pragma omp target
16629 #pragma omp teams distribute
16630   for (int i = 0; i < 10; ++i) {
16631 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
16632     for (int i = 0; i < 10; ++i)
16633       ++a;
16634   }
16635 #pragma omp target
16636 #pragma omp teams distribute
16637   for (int i = 0; i < 10; ++i) {
16638 #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?}}
16639     for (int i = 0; i < 10; ++i)
16640       ++a;
16641   }
16642 #pragma omp target
16643 #pragma omp teams distribute
16644   for (int i = 0; i < 10; ++i) {
16645 #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?}}
16646     for (int i = 0; i < 10; ++i)
16647       ++a;
16648   }
16649 #pragma omp target
16650 #pragma omp teams distribute
16651   for (int i = 0; i < 10; ++i) {
16652 #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?}}
16653     for (int i = 0; i < 10; ++i)
16654       ++a;
16655   }
16656 #pragma omp target
16657 #pragma omp teams distribute
16658   for (int i = 0; i < 10; ++i) {
16659 #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?}}
16660     for (int i = 0; i < 10; ++i)
16661       ++a;
16662   }
16663 #pragma omp target
16664 #pragma omp teams distribute
16665   for (int i = 0; i < 10; ++i) {
16666 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
16667     ++a;
16668   }
16669 #pragma omp target
16670 #pragma omp teams distribute
16671   for (int i = 0; i < 10; ++i) {
16672 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
16673     for (int i = 0; i < 10; ++i)
16674       ++a;
16675   }
16676 #pragma omp target
16677 #pragma omp teams distribute
16678   for (int i = 0; i < 10; ++i) {
16679 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
16680     for (int i = 0; i < 10; ++i)
16681       ++a;
16682   }
16683 #pragma omp target
16684 #pragma omp teams distribute
16685   for (int i = 0; i < 10; ++i) {
16686 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16687     for (int i = 0; i < 10; ++i)
16688       ++a;
16689   }
16690 #pragma omp target
16691 #pragma omp teams distribute
16692   for (int i = 0; i < 10; ++i) {
16693 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16694     for (int i = 0; i < 10; ++i)
16695       ++a;
16696   }
16697 
16698 // TEAMS DISTRIBUTE SIMD DIRECTIVE
16699 #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?}}
16700   for (int i = 0; i < 10; ++i)
16701     ;
16702 #pragma omp target
16703 #pragma omp teams distribute simd
16704   for (int i = 0; i < 10; ++i) {
16705 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16706     for (int i = 0; i < 10; ++i)
16707       ;
16708   }
16709 #pragma omp target
16710 #pragma omp teams distribute simd
16711   for (int i = 0; i < 10; ++i) {
16712 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16713     for (int i = 0; i < 10; ++i)
16714       ;
16715   }
16716 #pragma omp target
16717 #pragma omp teams distribute simd
16718   for (int i = 0; i < 10; ++i) {
16719 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16720     for (int i = 0; i < 10; ++i)
16721       ;
16722   }
16723 #pragma omp target
16724 #pragma omp teams distribute simd
16725   for (int i = 0; i < 10; ++i) {
16726 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
16727     for (int i = 0; i < 10; ++i)
16728       ;
16729   }
16730 #pragma omp target
16731 #pragma omp teams distribute simd
16732   for (int i = 0; i < 10; ++i) {
16733 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16734     for (int i = 0; i < 10; ++i)
16735       ;
16736   }
16737 #pragma omp target
16738 #pragma omp teams distribute simd
16739   for (int i = 0; i < 10; ++i) {
16740 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16741     for (int i = 0; i < 10; ++i)
16742       ;
16743   }
16744 #pragma omp target
16745 #pragma omp teams distribute simd
16746   for (int i = 0; i < 10; ++i) {
16747 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16748     {
16749       bar();
16750     }
16751   }
16752 #pragma omp target
16753 #pragma omp teams distribute simd
16754   for (int i = 0; i < 10; ++i) {
16755 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16756     {
16757       bar();
16758     }
16759   }
16760 #pragma omp target
16761 #pragma omp teams distribute simd
16762   for (int i = 0; i < 10; ++i) {
16763 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16764     {
16765       bar();
16766     }
16767   }
16768 #pragma omp target
16769 #pragma omp teams distribute simd
16770   for (int i = 0; i < 10; ++i) {
16771 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16772     {
16773       bar();
16774     }
16775   }
16776 #pragma omp target
16777 #pragma omp teams distribute simd
16778   for (int i = 0; i < 10; ++i) {
16779 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16780     {
16781       bar();
16782     }
16783   }
16784 #pragma omp target
16785 #pragma omp teams distribute simd
16786   for (int i = 0; i < 10; ++i) {
16787 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16788     {
16789 #pragma omp single
16790       {
16791         bar();
16792       }
16793     }
16794   }
16795 #pragma omp target
16796 #pragma omp teams distribute simd
16797   for (int i = 0; i < 10; ++i) {
16798 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16799     for (int i = 0; i < 10; ++i)
16800       ;
16801   }
16802 #pragma omp target
16803 #pragma omp teams distribute simd
16804   for (int i = 0; i < 10; ++i) {
16805 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16806     for (int i = 0; i < 10; ++i)
16807       ;
16808   }
16809 #pragma omp target
16810 #pragma omp teams distribute simd
16811   for (int i = 0; i < 10; ++i) {
16812 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16813     {
16814       bar();
16815     }
16816   }
16817 #pragma omp target
16818 #pragma omp teams distribute simd
16819   for (int i = 0; i < 10; ++i) {
16820 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16821     {
16822       bar();
16823     }
16824   }
16825 #pragma omp target
16826 #pragma omp teams distribute simd
16827   for (int i = 0; i < 10; ++i) {
16828 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16829     bar();
16830   }
16831 #pragma omp target
16832 #pragma omp teams distribute simd
16833   for (int i = 0; i < 10; ++i) {
16834 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16835     bar();
16836   }
16837 #pragma omp target
16838 #pragma omp teams distribute simd
16839   for (int i = 0; i < 10; ++i) {
16840 #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?}}
16841     bar();
16842   }
16843 #pragma omp target
16844 #pragma omp teams distribute simd
16845   for (int i = 0; i < 10; ++i) {
16846 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16847     bar();
16848   }
16849 #pragma omp target
16850 #pragma omp teams distribute simd
16851   for (int i = 0; i < 10; ++i) {
16852 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16853     bar();
16854   }
16855 #pragma omp target
16856 #pragma omp teams distribute simd
16857   for (int i = 0; i < 10; ++i) {
16858 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16859     bar();
16860   }
16861 #pragma omp target
16862 #pragma omp teams distribute simd
16863   for (int i = 0; i < 10; ++i) {
16864 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
16865     ++a;
16866   }
16867 #pragma omp target
16868 #pragma omp teams distribute simd
16869   for (int i = 0; i < 10; ++i) {
16870 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16871     ++a;
16872   }
16873 #pragma omp target
16874 #pragma omp teams distribute simd
16875   for (int i = 0; i < 10; ++i) {
16876 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16877     ++a;
16878   }
16879 #pragma omp target
16880 #pragma omp teams distribute simd
16881   for (int i = 0; i < 10; ++i) {
16882 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16883     for (int i = 0; i < 10; ++i)
16884       ;
16885   }
16886 #pragma omp target
16887 #pragma omp teams distribute simd
16888   for (int i = 0; i < 10; ++i) {
16889 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16890     ++a;
16891   }
16892 #pragma omp target
16893 #pragma omp teams distribute simd
16894   for (int i = 0; i < 10; ++i) {
16895 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16896     ++a;
16897   }
16898 #pragma omp target
16899 #pragma omp teams distribute simd
16900   for (int i = 0; i < 10; ++i) {
16901 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16902     ++a;
16903   }
16904 #pragma omp target
16905 #pragma omp teams distribute simd
16906   for (int i = 0; i < 10; ++i) {
16907 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16908     ++a;
16909   }
16910 #pragma omp target
16911 #pragma omp teams distribute simd
16912   for (int i = 0; i < 10; ++i) {
16913 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16914     for (int i = 0; i < 10; ++i)
16915       ++a;
16916   }
16917 #pragma omp target
16918 #pragma omp teams distribute simd
16919   for (int i = 0; i < 10; ++i) {
16920 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16921     for (int i = 0; i < 10; ++i)
16922       ++a;
16923   }
16924 #pragma omp target
16925 #pragma omp teams distribute simd
16926   for (int i = 0; i < 10; ++i) {
16927 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16928     for (int i = 0; i < 10; ++i)
16929       ++a;
16930   }
16931 #pragma omp target
16932 #pragma omp teams distribute simd
16933   for (int i = 0; i < 10; ++i) {
16934 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16935     for (int i = 0; i < 10; ++i)
16936       ++a;
16937   }
16938 #pragma omp target
16939 #pragma omp teams distribute simd
16940   for (int i = 0; i < 10; ++i) {
16941 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16942     for (int i = 0; i < 10; ++i)
16943       ++a;
16944   }
16945 #pragma omp target
16946 #pragma omp teams distribute simd
16947   for (int i = 0; i < 10; ++i) {
16948 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16949     for (int i = 0; i < 10; ++i)
16950       ++a;
16951   }
16952 #pragma omp target
16953 #pragma omp teams distribute simd
16954   for (int i = 0; i < 10; ++i) {
16955 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16956     ++a;
16957   }
16958 #pragma omp target
16959 #pragma omp teams distribute simd
16960   for (int i = 0; i < 10; ++i) {
16961 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16962     for (int i = 0; i < 10; ++i)
16963       ++a;
16964   }
16965 #pragma omp target
16966 #pragma omp teams distribute simd
16967   for (int i = 0; i < 10; ++i) {
16968 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16969     for (int i = 0; i < 10; ++i)
16970       ++a;
16971   }
16972 #pragma omp target
16973 #pragma omp teams distribute simd
16974   for (int i = 0; i < 10; ++i) {
16975 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16976     for (int i = 0; i < 10; ++i)
16977       ++a;
16978   }
16979 #pragma omp target
16980 #pragma omp teams distribute simd
16981   for (int i = 0; i < 10; ++i) {
16982 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16983     for (int i = 0; i < 10; ++i)
16984       ++a;
16985   }
16986 
16987 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
16988 #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?}}
16989   for (int i = 0; i < 10; ++i)
16990     ;
16991 #pragma omp target
16992 #pragma omp teams distribute parallel for simd
16993   for (int i = 0; i < 10; ++i) {
16994 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16995     for (int i = 0; i < 10; ++i)
16996       ;
16997   }
16998 #pragma omp target
16999 #pragma omp teams distribute parallel for simd
17000   for (int i = 0; i < 10; ++i) {
17001 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17002     for (int i = 0; i < 10; ++i)
17003       ;
17004   }
17005 #pragma omp target
17006 #pragma omp teams distribute parallel for simd
17007   for (int i = 0; i < 10; ++i) {
17008 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17009     for (int i = 0; i < 10; ++i)
17010       ;
17011   }
17012 #pragma omp target
17013 #pragma omp teams distribute parallel for simd
17014   for (int i = 0; i < 10; ++i) {
17015 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17016     for (int i = 0; i < 10; ++i)
17017       ;
17018   }
17019 #pragma omp target
17020 #pragma omp teams distribute parallel for simd
17021   for (int i = 0; i < 10; ++i) {
17022 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17023     for (int i = 0; i < 10; ++i)
17024       ;
17025   }
17026 #pragma omp target
17027 #pragma omp teams distribute parallel for simd
17028   for (int i = 0; i < 10; ++i) {
17029 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17030     for (int i = 0; i < 10; ++i)
17031       ;
17032   }
17033 #pragma omp target
17034 #pragma omp teams distribute parallel for simd
17035   for (int i = 0; i < 10; ++i) {
17036 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17037     {
17038       bar();
17039     }
17040   }
17041 #pragma omp target
17042 #pragma omp teams distribute parallel for simd
17043   for (int i = 0; i < 10; ++i) {
17044 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17045     {
17046       bar();
17047     }
17048   }
17049 #pragma omp target
17050 #pragma omp teams distribute parallel for simd
17051   for (int i = 0; i < 10; ++i) {
17052 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17053     {
17054       bar();
17055     }
17056   }
17057 #pragma omp target
17058 #pragma omp teams distribute parallel for simd
17059   for (int i = 0; i < 10; ++i) {
17060 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17061     {
17062       bar();
17063     }
17064   }
17065 #pragma omp target
17066 #pragma omp teams distribute parallel for simd
17067   for (int i = 0; i < 10; ++i) {
17068 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17069     {
17070       bar();
17071     }
17072   }
17073 #pragma omp target
17074 #pragma omp teams distribute parallel for simd
17075   for (int i = 0; i < 10; ++i) {
17076 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17077     {
17078 #pragma omp single
17079       {
17080         bar();
17081       }
17082     }
17083   }
17084 #pragma omp target
17085 #pragma omp teams distribute parallel for simd
17086   for (int i = 0; i < 10; ++i) {
17087 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17088     for (int i = 0; i < 10; ++i)
17089       ;
17090   }
17091 #pragma omp target
17092 #pragma omp teams distribute parallel for simd
17093   for (int i = 0; i < 10; ++i) {
17094 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17095     for (int i = 0; i < 10; ++i)
17096       ;
17097   }
17098 #pragma omp target
17099 #pragma omp teams distribute parallel for simd
17100   for (int i = 0; i < 10; ++i) {
17101 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17102     {
17103       bar();
17104     }
17105   }
17106 #pragma omp target
17107 #pragma omp teams distribute parallel for simd
17108   for (int i = 0; i < 10; ++i) {
17109 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17110     {
17111       bar();
17112     }
17113   }
17114 #pragma omp target
17115 #pragma omp teams distribute parallel for simd
17116   for (int i = 0; i < 10; ++i) {
17117 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17118     bar();
17119   }
17120 #pragma omp target
17121 #pragma omp teams distribute parallel for simd
17122   for (int i = 0; i < 10; ++i) {
17123 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17124     bar();
17125   }
17126 #pragma omp target
17127 #pragma omp teams distribute parallel for simd
17128   for (int i = 0; i < 10; ++i) {
17129 #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?}}
17130     bar();
17131   }
17132 #pragma omp target
17133 #pragma omp teams distribute parallel for simd
17134   for (int i = 0; i < 10; ++i) {
17135 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17136     bar();
17137   }
17138 #pragma omp target
17139 #pragma omp teams distribute parallel for simd
17140   for (int i = 0; i < 10; ++i) {
17141 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17142     bar();
17143   }
17144 #pragma omp target
17145 #pragma omp teams distribute parallel for simd
17146   for (int i = 0; i < 10; ++i) {
17147 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17148     bar();
17149   }
17150 #pragma omp target
17151 #pragma omp teams distribute parallel for simd
17152   for (int i = 0; i < 10; ++i) {
17153 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
17154     ++a;
17155   }
17156 #pragma omp target
17157 #pragma omp teams distribute parallel for simd
17158   for (int i = 0; i < 10; ++i) {
17159 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17160     ++a;
17161   }
17162 #pragma omp target
17163 #pragma omp teams distribute parallel for simd
17164   for (int i = 0; i < 10; ++i) {
17165 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17166     ++a;
17167   }
17168 #pragma omp target
17169 #pragma omp teams distribute parallel for simd
17170   for (int i = 0; i < 10; ++i) {
17171 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17172     for (int i = 0; i < 10; ++i)
17173       ;
17174   }
17175 #pragma omp target
17176 #pragma omp teams distribute parallel for simd
17177   for (int i = 0; i < 10; ++i) {
17178 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17179     ++a;
17180   }
17181 #pragma omp target
17182 #pragma omp teams distribute parallel for simd
17183   for (int i = 0; i < 10; ++i) {
17184 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17185     ++a;
17186   }
17187 #pragma omp target
17188 #pragma omp teams distribute parallel for simd
17189   for (int i = 0; i < 10; ++i) {
17190 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17191     ++a;
17192   }
17193 #pragma omp target
17194 #pragma omp teams distribute parallel for simd
17195   for (int i = 0; i < 10; ++i) {
17196 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17197     ++a;
17198   }
17199 #pragma omp target
17200 #pragma omp teams distribute parallel for simd
17201   for (int i = 0; i < 10; ++i) {
17202 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17203     for (int i = 0; i < 10; ++i)
17204       ++a;
17205   }
17206 #pragma omp target
17207 #pragma omp teams distribute parallel for simd
17208   for (int i = 0; i < 10; ++i) {
17209 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17210     for (int i = 0; i < 10; ++i)
17211       ++a;
17212   }
17213 #pragma omp target
17214 #pragma omp teams distribute parallel for simd
17215   for (int i = 0; i < 10; ++i) {
17216 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17217     for (int i = 0; i < 10; ++i)
17218       ++a;
17219   }
17220 #pragma omp target
17221 #pragma omp teams distribute parallel for simd
17222   for (int i = 0; i < 10; ++i) {
17223 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17224     for (int i = 0; i < 10; ++i)
17225       ++a;
17226   }
17227 #pragma omp target
17228 #pragma omp teams distribute parallel for simd
17229   for (int i = 0; i < 10; ++i) {
17230 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17231     for (int i = 0; i < 10; ++i)
17232       ++a;
17233   }
17234 #pragma omp target
17235 #pragma omp teams distribute parallel for simd
17236   for (int i = 0; i < 10; ++i) {
17237 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17238     for (int i = 0; i < 10; ++i)
17239       ++a;
17240   }
17241 #pragma omp target
17242 #pragma omp teams distribute parallel for simd
17243   for (int i = 0; i < 10; ++i) {
17244 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17245     ++a;
17246   }
17247 #pragma omp target
17248 #pragma omp teams distribute parallel for simd
17249   for (int i = 0; i < 10; ++i) {
17250 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17251     for (int i = 0; i < 10; ++i)
17252       ++a;
17253   }
17254 #pragma omp target
17255 #pragma omp teams distribute parallel for simd
17256   for (int i = 0; i < 10; ++i) {
17257 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17258     for (int i = 0; i < 10; ++i)
17259       ++a;
17260   }
17261 #pragma omp target
17262 #pragma omp teams distribute parallel for simd
17263   for (int i = 0; i < 10; ++i) {
17264 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17265     for (int i = 0; i < 10; ++i)
17266       ++a;
17267   }
17268 #pragma omp target
17269 #pragma omp teams distribute parallel for simd
17270   for (int i = 0; i < 10; ++i) {
17271 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17272     for (int i = 0; i < 10; ++i)
17273       ++a;
17274   }
17275 
17276 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
17277 #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?}}
17278   for (int i = 0; i < 10; ++i)
17279     ;
17280 #pragma omp target
17281 #pragma omp teams distribute parallel for
17282   for (int i = 0; i < 10; ++i) {
17283 #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?}}
17284     for (int i = 0; i < 10; ++i)
17285       ;
17286   }
17287 #pragma omp target
17288 #pragma omp teams distribute parallel for
17289   for (int i = 0; i < 10; ++i) {
17290 #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?}}
17291     for (int i = 0; i < 10; ++i)
17292       ;
17293   }
17294 #pragma omp target
17295 #pragma omp teams distribute parallel for
17296   for (int i = 0; i < 10; ++i) {
17297 #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?}}
17298     for (int i = 0; i < 10; ++i)
17299       ;
17300   }
17301 #pragma omp target
17302 #pragma omp teams distribute parallel for
17303   for (int i = 0; i < 10; ++i) {
17304 #pragma omp simd // OK
17305     for (int i = 0; i < 10; ++i)
17306       ;
17307   }
17308 #pragma omp target
17309 #pragma omp teams distribute parallel for
17310   for (int i = 0; i < 10; ++i) {
17311 #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?}}
17312     for (int i = 0; i < 10; ++i)
17313       ;
17314   }
17315 #pragma omp target
17316 #pragma omp teams distribute parallel for
17317   for (int i = 0; i < 10; ++i) {
17318 #pragma omp parallel // OK
17319     for (int i = 0; i < 10; ++i)
17320       ;
17321   }
17322 #pragma omp target
17323 #pragma omp teams distribute parallel for
17324   for (int i = 0; i < 10; ++i) {
17325 #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?}}
17326     {
17327       bar();
17328     }
17329   }
17330 #pragma omp target
17331 #pragma omp teams distribute parallel for
17332   for (int i = 0; i < 10; ++i) {
17333 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
17334     {
17335       bar();
17336     }
17337   }
17338 #pragma omp target
17339 #pragma omp teams distribute parallel for
17340   for (int i = 0; i < 10; ++i) {
17341 #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?}}
17342     {
17343       bar();
17344     }
17345   }
17346 #pragma omp target
17347 #pragma omp teams distribute parallel for
17348   for (int i = 0; i < 10; ++i) {
17349 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
17350     {
17351       bar();
17352     }
17353   }
17354 #pragma omp target
17355 #pragma omp teams distribute parallel for
17356   for (int i = 0; i < 10; ++i) {
17357 #pragma omp critical // OK
17358     {
17359       bar();
17360     }
17361   }
17362 #pragma omp target
17363 #pragma omp teams distribute parallel for
17364   for (int i = 0; i < 10; ++i) {
17365 #pragma omp parallel // OK
17366     {
17367 #pragma omp single
17368       {
17369         bar();
17370       }
17371     }
17372   }
17373 #pragma omp target
17374 #pragma omp teams distribute parallel for
17375   for (int i = 0; i < 10; ++i) {
17376 #pragma omp parallel for // OK
17377     for (int i = 0; i < 10; ++i)
17378       ;
17379   }
17380 #pragma omp target
17381 #pragma omp teams distribute parallel for
17382   for (int i = 0; i < 10; ++i) {
17383 #pragma omp parallel for simd // OK
17384     for (int i = 0; i < 10; ++i)
17385       ;
17386   }
17387 #pragma omp target
17388 #pragma omp teams distribute parallel for
17389   for (int i = 0; i < 10; ++i) {
17390 #pragma omp parallel sections // OK
17391     {
17392       bar();
17393     }
17394   }
17395 #pragma omp target
17396 #pragma omp teams distribute parallel for
17397   for (int i = 0; i < 10; ++i) {
17398 #pragma omp task // OK
17399     {
17400       bar();
17401     }
17402   }
17403 #pragma omp target
17404 #pragma omp teams distribute parallel for
17405   for (int i = 0; i < 10; ++i) {
17406 #pragma omp taskyield // OK
17407     bar();
17408   }
17409 #pragma omp target
17410 #pragma omp teams distribute parallel for
17411   for (int i = 0; i < 10; ++i) {
17412 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
17413     bar();
17414   }
17415 #pragma omp target
17416 #pragma omp teams distribute parallel for
17417   for (int i = 0; i < 10; ++i) {
17418 #pragma omp scan // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
17419     bar();
17420   }
17421 #pragma omp target
17422 #pragma omp teams distribute parallel for
17423   for (int i = 0; i < 10; ++i) {
17424 #pragma omp taskwait // OK
17425     bar();
17426   }
17427 #pragma omp target
17428 #pragma omp teams distribute parallel for
17429   for (int i = 0; i < 10; ++i) {
17430 #pragma omp flush // OK
17431     bar();
17432   }
17433 #pragma omp target
17434 #pragma omp teams distribute parallel for
17435   for (int i = 0; i < 10; ++i) {
17436 #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?}}
17437     bar();
17438   }
17439 #pragma omp target
17440 #pragma omp teams distribute parallel for
17441   for (int i = 0; i < 10; ++i) {
17442 #pragma omp atomic // OK
17443     ++a;
17444   }
17445 #pragma omp target
17446 #pragma omp teams distribute parallel for
17447   for (int i = 0; i < 10; ++i) {
17448 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
17449     ++a;
17450   }
17451 #pragma omp target
17452 #pragma omp teams distribute parallel for
17453   for (int i = 0; i < 10; ++i) {
17454 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
17455     ++a;
17456   }
17457 #pragma omp target
17458 #pragma omp teams distribute parallel for
17459   for (int i = 0; i < 10; ++i) {
17460 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
17461     for (int i = 0; i < 10; ++i)
17462       ;
17463   }
17464 #pragma omp target
17465 #pragma omp teams distribute parallel for
17466   for (int i = 0; i < 10; ++i) {
17467 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
17468     ++a;
17469   }
17470 #pragma omp target
17471 #pragma omp teams distribute parallel for
17472   for (int i = 0; i < 10; ++i) {
17473 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
17474     ++a;
17475   }
17476 #pragma omp target
17477 #pragma omp teams distribute parallel for
17478   for (int i = 0; i < 10; ++i) {
17479 #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?}}
17480     ++a;
17481   }
17482 #pragma omp target
17483 #pragma omp teams distribute parallel for
17484   for (int i = 0; i < 10; ++i) {
17485 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
17486     ++a;
17487   }
17488 #pragma omp target
17489 #pragma omp teams distribute parallel for
17490   for (int i = 0; i < 10; ++i) {
17491 #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?}}
17492     for (int i = 0; i < 10; ++i)
17493       ++a;
17494   }
17495 #pragma omp target
17496 #pragma omp teams distribute parallel for
17497   for (int i = 0; i < 10; ++i) {
17498 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
17499     for (int i = 0; i < 10; ++i)
17500       ++a;
17501   }
17502 #pragma omp target
17503 #pragma omp teams distribute parallel for
17504   for (int i = 0; i < 10; ++i) {
17505 #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?}}
17506     for (int i = 0; i < 10; ++i)
17507       ++a;
17508   }
17509 #pragma omp target
17510 #pragma omp teams distribute parallel for
17511   for (int i = 0; i < 10; ++i) {
17512 #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?}}
17513     for (int i = 0; i < 10; ++i)
17514       ++a;
17515   }
17516 #pragma omp target
17517 #pragma omp teams distribute parallel for
17518   for (int i = 0; i < 10; ++i) {
17519 #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?}}
17520     for (int i = 0; i < 10; ++i)
17521       ++a;
17522   }
17523 #pragma omp target
17524 #pragma omp teams distribute parallel for
17525   for (int i = 0; i < 10; ++i) {
17526 #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?}}
17527     for (int i = 0; i < 10; ++i)
17528       ++a;
17529   }
17530 #pragma omp target
17531 #pragma omp teams distribute parallel for
17532   for (int i = 0; i < 10; ++i) {
17533 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
17534     ++a;
17535   }
17536 #pragma omp target
17537 #pragma omp teams distribute parallel for
17538   for (int i = 0; i < 10; ++i) {
17539 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
17540     for (int i = 0; i < 10; ++i)
17541       ++a;
17542   }
17543 #pragma omp target
17544 #pragma omp teams distribute parallel for
17545   for (int i = 0; i < 10; ++i) {
17546 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
17547     for (int i = 0; i < 10; ++i)
17548       ++a;
17549   }
17550 #pragma omp target
17551 #pragma omp teams distribute parallel for
17552   for (int i = 0; i < 10; ++i) {
17553 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
17554     for (int i = 0; i < 10; ++i)
17555       ++a;
17556   }
17557 #pragma omp target
17558 #pragma omp teams distribute parallel for
17559   for (int i = 0; i < 10; ++i) {
17560 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
17561     for (int i = 0; i < 10; ++i)
17562       ++a;
17563   }
17564 
17565 // TARGET TEAMS DIRECTIVE
17566 #pragma omp target teams
17567 #pragma omp parallel
17568   bar();
17569 #pragma omp target teams
17570 #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?}}
17571   for (int i = 0; i < 10; ++i)
17572     ;
17573 #pragma omp target teams
17574 #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?}}
17575   for (int i = 0; i < 10; ++i)
17576     ;
17577 #pragma omp target teams
17578 #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?}}
17579   for (int i = 0; i < 10; ++i)
17580     ;
17581 #pragma omp target teams
17582 #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?}}
17583   {
17584     bar();
17585   }
17586 #pragma omp target teams
17587 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
17588   {
17589     bar();
17590   }
17591 #pragma omp target teams
17592 #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?}}
17593   bar();
17594 
17595 #pragma omp target teams
17596 #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?}}
17597   {
17598     bar();
17599   }
17600 #pragma omp target teams
17601 #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?}}
17602   {
17603     bar();
17604   }
17605 #pragma omp target teams
17606 #pragma omp parallel for
17607   for (int i = 0; i < 10; ++i)
17608     ;
17609 #pragma omp target teams
17610 #pragma omp parallel for simd
17611   for (int i = 0; i < 10; ++i)
17612     ;
17613 #pragma omp target teams
17614 #pragma omp parallel sections
17615   {
17616     bar();
17617   }
17618 #pragma omp target teams
17619 #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?}}
17620   {
17621     bar();
17622   }
17623 #pragma omp target teams
17624   {
17625 #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?}}
17626     bar();
17627   }
17628 #pragma omp target teams
17629   {
17630 #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?}}
17631     bar();
17632   }
17633 #pragma omp target teams
17634   {
17635 #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?}}
17636     bar();
17637   }
17638 #pragma omp target teams
17639   {
17640 #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?}}
17641     bar();
17642   }
17643 #pragma omp target teams
17644   {
17645 #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?}}
17646     bar();
17647   }
17648 #pragma omp target teams
17649   {
17650 #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?}}
17651     bar();
17652   }
17653 #pragma omp target teams
17654   {
17655 #pragma omp atomic // omp-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
17656     ++a;
17657   }
17658 #pragma omp target teams
17659   {
17660 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
17661     ++a;
17662   }
17663 #pragma omp target teams
17664   {
17665 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
17666     ++a;
17667   }
17668 #pragma omp target teams
17669 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
17670   for (int i = 0; i < 10; ++i)
17671     ;
17672 #pragma omp target teams
17673   {
17674 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
17675   }
17676 #pragma omp target teams
17677   {
17678 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
17679   }
17680 #pragma omp target teams
17681   {
17682 #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?}}
17683     ++a;
17684   }
17685 #pragma omp target teams
17686   {
17687 #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?}}
17688   for (int i = 0; i < 10; ++i)
17689     ++a;
17690   }
17691 #pragma omp target teams
17692 #pragma omp distribute
17693   for (int i = 0; i < 10; ++i)
17694     ;
17695 #pragma omp target teams
17696   {
17697 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
17698     ++a;
17699   }
17700 #pragma omp target teams
17701 #pragma omp distribute parallel for
17702   for (int i = 0; i < 10; ++i)
17703     ;
17704 #pragma omp target teams
17705   {
17706 #pragma omp distribute parallel for
17707   for (int i = 0; i < 10; ++i)
17708     ;
17709 #pragma omp distribute parallel for
17710   for (int j = 0; j < 10; ++j)
17711     ;
17712   }
17713 #pragma omp target teams
17714   {
17715 #pragma omp distribute parallel for simd
17716   for (int i = 0; i < 10; ++i)
17717     ;
17718 #pragma omp distribute parallel for simd
17719   for (int j = 0; j < 10; ++j)
17720     ;
17721   }
17722 #pragma omp target teams
17723   {
17724 #pragma omp distribute simd
17725   for (int i = 0; i < 10; ++i)
17726     ;
17727 #pragma omp distribute simd
17728   for (int j = 0; j < 10; ++j)
17729     ;
17730   }
17731 #pragma omp target teams
17732   {
17733 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
17734   for (int i = 0; i < 10; ++i)
17735     ;
17736   }
17737 #pragma omp target teams
17738   {
17739 #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?}}
17740   for (int i = 0; i < 10; ++i)
17741     ;
17742   }
17743 #pragma omp target teams
17744   {
17745 #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?}}
17746   for (int i = 0; i < 10; ++i)
17747     ;
17748   }
17749 #pragma omp target teams
17750   {
17751 #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?}}
17752   for (int i = 0; i < 10; ++i)
17753     ;
17754   }
17755 #pragma omp target teams
17756   {
17757 #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?}}
17758   for (int i = 0; i < 10; ++i)
17759     ;
17760   }
17761 #pragma omp target teams
17762   {
17763 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
17764     a++;
17765   }
17766 #pragma omp target teams
17767   {
17768 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
17769   for (int i = 0; i < 10; ++i)
17770     ;
17771   }
17772 #pragma omp target teams
17773   {
17774 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
17775   for (int i = 0; i < 10; ++i)
17776     ;
17777   }
17778 #pragma omp target teams
17779   {
17780 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
17781   for (int i = 0; i < 10; ++i)
17782     ;
17783   }
17784 #pragma omp target teams
17785   {
17786 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
17787   for (int i = 0; i < 10; ++i)
17788     ;
17789   }
17790 
17791 // TARGET TEAMS DISTRIBUTE DIRECTIVE
17792 #pragma omp target teams distribute // OK
17793   for (int i = 0; i < 10; ++i)
17794     ;
17795 #pragma omp target teams distribute
17796   for (int i = 0; i < 10; ++i) {
17797 #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?}}
17798     for (int i = 0; i < 10; ++i)
17799       ;
17800   }
17801 #pragma omp target teams distribute
17802   for (int i = 0; i < 10; ++i) {
17803 #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?}}
17804     for (int i = 0; i < 10; ++i)
17805       ;
17806   }
17807 #pragma omp target teams distribute
17808   for (int i = 0; i < 10; ++i) {
17809 #pragma omp for // OK
17810     for (int i = 0; i < 10; ++i)
17811       ;
17812   }
17813 #pragma omp target teams distribute
17814   for (int i = 0; i < 10; ++i) {
17815 #pragma omp simd // OK
17816     for (int i = 0; i < 10; ++i)
17817       ;
17818   }
17819 #pragma omp target teams distribute
17820   for (int i = 0; i < 10; ++i) {
17821 #pragma omp for simd // OK
17822     for (int i = 0; i < 10; ++i)
17823       ;
17824   }
17825 #pragma omp target teams distribute
17826   for (int i = 0; i < 10; ++i) {
17827 #pragma omp parallel // OK
17828     for (int i = 0; i < 10; ++i)
17829       ;
17830   }
17831 #pragma omp target teams distribute
17832   for (int i = 0; i < 10; ++i) {
17833 #pragma omp sections // OK
17834     {
17835       bar();
17836     }
17837   }
17838 #pragma omp target teams distribute
17839   for (int i = 0; i < 10; ++i) {
17840 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
17841     {
17842       bar();
17843     }
17844   }
17845 #pragma omp target teams distribute
17846   for (int i = 0; i < 10; ++i) {
17847 #pragma omp single // OK
17848     {
17849       bar();
17850     }
17851   }
17852 #pragma omp target teams distribute
17853   for (int i = 0; i < 10; ++i) {
17854 #pragma omp master // OK
17855     {
17856       bar();
17857     }
17858   }
17859 #pragma omp target teams distribute
17860   for (int i = 0; i < 10; ++i) {
17861 #pragma omp critical // OK
17862     {
17863       bar();
17864     }
17865   }
17866 #pragma omp target teams distribute
17867   for (int i = 0; i < 10; ++i) {
17868 #pragma omp parallel // OK
17869     {
17870 #pragma omp single
17871       {
17872         bar();
17873       }
17874     }
17875   }
17876 #pragma omp target teams distribute
17877   for (int i = 0; i < 10; ++i) {
17878 #pragma omp parallel for // OK
17879     for (int i = 0; i < 10; ++i)
17880       ;
17881   }
17882 #pragma omp target teams distribute
17883   for (int i = 0; i < 10; ++i) {
17884 #pragma omp parallel for simd // OK
17885     for (int i = 0; i < 10; ++i)
17886       ;
17887   }
17888 #pragma omp target teams distribute
17889   for (int i = 0; i < 10; ++i) {
17890 #pragma omp parallel sections // OK
17891     {
17892       bar();
17893     }
17894   }
17895 #pragma omp target teams distribute
17896   for (int i = 0; i < 10; ++i) {
17897 #pragma omp task // OK
17898     {
17899       bar();
17900     }
17901   }
17902 #pragma omp target teams distribute
17903   for (int i = 0; i < 10; ++i) {
17904 #pragma omp taskyield // OK
17905     bar();
17906   }
17907 #pragma omp target teams distribute
17908   for (int i = 0; i < 10; ++i) {
17909 #pragma omp barrier // OK
17910     bar();
17911   }
17912 #pragma omp target teams distribute
17913   for (int i = 0; i < 10; ++i) {
17914 #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?}}
17915     bar();
17916   }
17917 #pragma omp target teams distribute
17918   for (int i = 0; i < 10; ++i) {
17919 #pragma omp taskwait // OK
17920     bar();
17921   }
17922 #pragma omp target teams distribute
17923   for (int i = 0; i < 10; ++i) {
17924 #pragma omp flush // OK
17925     bar();
17926   }
17927 #pragma omp target teams distribute
17928   for (int i = 0; i < 10; ++i) {
17929 #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?}}
17930     bar();
17931   }
17932 #pragma omp target teams distribute
17933   for (int i = 0; i < 10; ++i) {
17934 #pragma omp atomic // OK
17935     ++a;
17936   }
17937 #pragma omp target teams distribute
17938   for (int i = 0; i < 10; ++i) {
17939 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17940     ++a;
17941   }
17942 #pragma omp target teams distribute
17943   for (int i = 0; i < 10; ++i) {
17944 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17945     ++a;
17946   }
17947 #pragma omp target teams distribute
17948   for (int i = 0; i < 10; ++i) {
17949 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17950     for (int i = 0; i < 10; ++i)
17951       ;
17952   }
17953 #pragma omp target teams distribute
17954   for (int i = 0; i < 10; ++i) {
17955 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17956     ++a;
17957   }
17958 #pragma omp target teams distribute
17959   for (int i = 0; i < 10; ++i) {
17960 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17961     ++a;
17962   }
17963 #pragma omp target teams distribute
17964   for (int i = 0; i < 10; ++i) {
17965 #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?}}
17966     ++a;
17967   }
17968 #pragma omp target teams distribute
17969   for (int i = 0; i < 10; ++i) {
17970 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17971     ++a;
17972   }
17973 #pragma omp target teams distribute
17974   for (int i = 0; i < 10; ++i) {
17975 #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?}}
17976     for (int i = 0; i < 10; ++i)
17977       ++a;
17978   }
17979 #pragma omp target teams distribute
17980   for (int i = 0; i < 10; ++i) {
17981 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
17982     for (int i = 0; i < 10; ++i)
17983       ++a;
17984   }
17985 #pragma omp target teams distribute
17986   for (int i = 0; i < 10; ++i) {
17987 #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?}}
17988     for (int i = 0; i < 10; ++i)
17989       ++a;
17990   }
17991 #pragma omp target teams distribute
17992   for (int i = 0; i < 10; ++i) {
17993 #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?}}
17994     for (int i = 0; i < 10; ++i)
17995       ++a;
17996   }
17997 #pragma omp target teams distribute
17998   for (int i = 0; i < 10; ++i) {
17999 #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?}}
18000     for (int i = 0; i < 10; ++i)
18001       ++a;
18002   }
18003 #pragma omp target teams distribute
18004   for (int i = 0; i < 10; ++i) {
18005 #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?}}
18006     for (int i = 0; i < 10; ++i)
18007       ++a;
18008   }
18009 #pragma omp target teams distribute
18010   for (int i = 0; i < 10; ++i) {
18011 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
18012     ++a;
18013   }
18014 #pragma omp target teams distribute
18015   for (int i = 0; i < 10; ++i) {
18016 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
18017     for (int i = 0; i < 10; ++i)
18018       ++a;
18019   }
18020 #pragma omp target teams distribute
18021   for (int i = 0; i < 10; ++i) {
18022 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
18023     for (int i = 0; i < 10; ++i)
18024       ++a;
18025   }
18026 #pragma omp target teams distribute
18027   for (int i = 0; i < 10; ++i) {
18028 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
18029     for (int i = 0; i < 10; ++i)
18030       ++a;
18031   }
18032 #pragma omp target teams distribute
18033   for (int i = 0; i < 10; ++i) {
18034 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
18035     for (int i = 0; i < 10; ++i)
18036       ++a;
18037   }
18038 
18039 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
18040 #pragma omp target teams distribute parallel for // OK
18041   for (int i = 0; i < 10; ++i)
18042     ;
18043 #pragma omp target teams distribute parallel for
18044   for (int i = 0; i < 10; ++i) {
18045 #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?}}
18046     for (int i = 0; i < 10; ++i)
18047       ;
18048   }
18049 #pragma omp target teams distribute parallel for
18050   for (int i = 0; i < 10; ++i) {
18051 #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?}}
18052     for (int i = 0; i < 10; ++i)
18053       ;
18054   }
18055 #pragma omp target teams distribute parallel for
18056   for (int i = 0; i < 10; ++i) {
18057 #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?}}
18058     for (int i = 0; i < 10; ++i)
18059       ;
18060   }
18061 #pragma omp target teams distribute parallel for
18062   for (int i = 0; i < 10; ++i) {
18063 #pragma omp simd // OK
18064     for (int i = 0; i < 10; ++i)
18065       ;
18066   }
18067 #pragma omp target teams distribute parallel for
18068   for (int i = 0; i < 10; ++i) {
18069 #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?}}
18070     for (int i = 0; i < 10; ++i)
18071       ;
18072   }
18073 #pragma omp target teams distribute parallel for
18074   for (int i = 0; i < 10; ++i) {
18075 #pragma omp parallel // OK
18076     for (int i = 0; i < 10; ++i)
18077       ;
18078   }
18079 #pragma omp target teams distribute parallel for
18080   for (int i = 0; i < 10; ++i) {
18081 #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?}}
18082     {
18083       bar();
18084     }
18085   }
18086 #pragma omp target teams distribute parallel for
18087   for (int i = 0; i < 10; ++i) {
18088 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
18089     {
18090       bar();
18091     }
18092   }
18093 #pragma omp target teams distribute parallel for
18094   for (int i = 0; i < 10; ++i) {
18095 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
18096     {
18097       bar();
18098     }
18099   }
18100 #pragma omp target teams distribute parallel for
18101   for (int i = 0; i < 10; ++i) {
18102 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
18103     {
18104       bar();
18105     }
18106   }
18107 #pragma omp target teams distribute parallel for
18108   for (int i = 0; i < 10; ++i) {
18109 #pragma omp critical // OK
18110     {
18111       bar();
18112     }
18113   }
18114 #pragma omp target teams distribute parallel for
18115   for (int i = 0; i < 10; ++i) {
18116 #pragma omp parallel // OK
18117     {
18118 #pragma omp single
18119       {
18120         bar();
18121       }
18122     }
18123   }
18124 #pragma omp target teams distribute parallel for
18125   for (int i = 0; i < 10; ++i) {
18126 #pragma omp parallel for // OK
18127     for (int i = 0; i < 10; ++i)
18128       ;
18129   }
18130 #pragma omp target teams distribute parallel for
18131   for (int i = 0; i < 10; ++i) {
18132 #pragma omp parallel for simd // OK
18133     for (int i = 0; i < 10; ++i)
18134       ;
18135   }
18136 #pragma omp target teams distribute parallel for
18137   for (int i = 0; i < 10; ++i) {
18138 #pragma omp parallel sections // OK
18139     {
18140       bar();
18141     }
18142   }
18143 #pragma omp target teams distribute parallel for
18144   for (int i = 0; i < 10; ++i) {
18145 #pragma omp task // OK
18146     {
18147       bar();
18148     }
18149   }
18150 #pragma omp target teams distribute parallel for
18151   for (int i = 0; i < 10; ++i) {
18152 #pragma omp taskyield // OK
18153     bar();
18154   }
18155 #pragma omp target teams distribute parallel for
18156   for (int i = 0; i < 10; ++i) {
18157 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
18158     bar();
18159   }
18160 #pragma omp target teams distribute parallel for
18161   for (int i = 0; i < 10; ++i) {
18162 #pragma omp scan // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
18163     bar();
18164   }
18165 #pragma omp target teams distribute parallel for
18166   for (int i = 0; i < 10; ++i) {
18167 #pragma omp taskwait // OK
18168     bar();
18169   }
18170 #pragma omp target teams distribute parallel for
18171   for (int i = 0; i < 10; ++i) {
18172 #pragma omp flush // OK
18173     bar();
18174   }
18175 #pragma omp target teams distribute parallel for
18176   for (int i = 0; i < 10; ++i) {
18177 #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?}}
18178     bar();
18179   }
18180 #pragma omp target teams distribute parallel for
18181   for (int i = 0; i < 10; ++i) {
18182 #pragma omp atomic // OK
18183     ++a;
18184   }
18185 #pragma omp target teams distribute parallel for
18186   for (int i = 0; i < 10; ++i) {
18187 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18188     ++a;
18189   }
18190 #pragma omp target teams distribute parallel for
18191   for (int i = 0; i < 10; ++i) {
18192 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18193     ++a;
18194   }
18195 #pragma omp target teams distribute parallel for
18196   for (int i = 0; i < 10; ++i) {
18197 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18198     for (int i = 0; i < 10; ++i)
18199       ;
18200   }
18201 #pragma omp target teams distribute parallel for
18202   for (int i = 0; i < 10; ++i) {
18203 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18204     ++a;
18205   }
18206 #pragma omp target teams distribute parallel for
18207   for (int i = 0; i < 10; ++i) {
18208 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18209     ++a;
18210   }
18211 #pragma omp target teams distribute parallel for
18212   for (int i = 0; i < 10; ++i) {
18213 #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?}}
18214     ++a;
18215   }
18216 #pragma omp target teams distribute parallel for
18217   for (int i = 0; i < 10; ++i) {
18218 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18219     ++a;
18220   }
18221 #pragma omp target teams distribute parallel for
18222   for (int i = 0; i < 10; ++i) {
18223 #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?}}
18224     for (int i = 0; i < 10; ++i)
18225       ++a;
18226   }
18227 #pragma omp target teams distribute parallel for
18228   for (int i = 0; i < 10; ++i) {
18229 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18230     for (int i = 0; i < 10; ++i)
18231       ++a;
18232   }
18233 #pragma omp target teams distribute parallel for
18234   for (int i = 0; i < 10; ++i) {
18235 #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?}}
18236     for (int i = 0; i < 10; ++i)
18237       ++a;
18238   }
18239 #pragma omp target teams distribute parallel for
18240   for (int i = 0; i < 10; ++i) {
18241 #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?}}
18242     for (int i = 0; i < 10; ++i)
18243       ++a;
18244   }
18245 #pragma omp target teams distribute parallel for
18246   for (int i = 0; i < 10; ++i) {
18247 #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?}}
18248     for (int i = 0; i < 10; ++i)
18249       ++a;
18250   }
18251 #pragma omp target teams distribute parallel for
18252   for (int i = 0; i < 10; ++i) {
18253 #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?}}
18254     for (int i = 0; i < 10; ++i)
18255       ++a;
18256   }
18257 #pragma omp target teams distribute parallel for
18258   for (int i = 0; i < 10; ++i) {
18259 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18260     ++a;
18261   }
18262 #pragma omp target teams distribute parallel for
18263   for (int i = 0; i < 10; ++i) {
18264 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18265     for (int i = 0; i < 10; ++i)
18266       ++a;
18267   }
18268 #pragma omp target teams distribute parallel for
18269   for (int i = 0; i < 10; ++i) {
18270 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18271     for (int i = 0; i < 10; ++i)
18272       ++a;
18273   }
18274 #pragma omp target teams distribute parallel for
18275   for (int i = 0; i < 10; ++i) {
18276 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18277     for (int i = 0; i < 10; ++i)
18278       ++a;
18279   }
18280 #pragma omp target teams distribute parallel for
18281   for (int i = 0; i < 10; ++i) {
18282 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
18283     for (int i = 0; i < 10; ++i)
18284       ++a;
18285   }
18286 
18287 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
18288 #pragma omp target teams distribute parallel for simd // OK
18289   for (int i = 0; i < 10; ++i)
18290     ;
18291 #pragma omp target teams distribute parallel for simd
18292   for (int i = 0; i < 10; ++i) {
18293 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18294     for (int i = 0; i < 10; ++i)
18295       ;
18296   }
18297 #pragma omp target teams distribute parallel for simd
18298   for (int i = 0; i < 10; ++i) {
18299 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18300     for (int i = 0; i < 10; ++i)
18301       ;
18302   }
18303 #pragma omp target teams distribute parallel for simd
18304   for (int i = 0; i < 10; ++i) {
18305 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18306     for (int i = 0; i < 10; ++i)
18307       ;
18308   }
18309 #pragma omp target teams distribute parallel for simd
18310   for (int i = 0; i < 10; ++i) {
18311 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
18312     for (int i = 0; i < 10; ++i)
18313       ;
18314   }
18315 #pragma omp target teams distribute parallel for simd
18316   for (int i = 0; i < 10; ++i) {
18317 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18318     for (int i = 0; i < 10; ++i)
18319       ;
18320   }
18321 #pragma omp target teams distribute parallel for simd
18322   for (int i = 0; i < 10; ++i) {
18323 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18324     for (int i = 0; i < 10; ++i)
18325       ;
18326   }
18327 #pragma omp target teams distribute parallel for simd
18328   for (int i = 0; i < 10; ++i) {
18329 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18330     {
18331       bar();
18332     }
18333   }
18334 #pragma omp target teams distribute parallel for simd
18335   for (int i = 0; i < 10; ++i) {
18336 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18337     {
18338       bar();
18339     }
18340   }
18341 #pragma omp target teams distribute parallel for simd
18342   for (int i = 0; i < 10; ++i) {
18343 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18344     {
18345       bar();
18346     }
18347   }
18348 #pragma omp target teams distribute parallel for simd
18349   for (int i = 0; i < 10; ++i) {
18350 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18351     {
18352       bar();
18353     }
18354   }
18355 #pragma omp target teams distribute parallel for simd
18356   for (int i = 0; i < 10; ++i) {
18357 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18358     {
18359       bar();
18360     }
18361   }
18362 #pragma omp target teams distribute parallel for simd
18363   for (int i = 0; i < 10; ++i) {
18364 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18365     {
18366 #pragma omp single
18367       {
18368         bar();
18369       }
18370     }
18371   }
18372 #pragma omp target teams distribute parallel for simd
18373   for (int i = 0; i < 10; ++i) {
18374 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18375     for (int i = 0; i < 10; ++i)
18376       ;
18377   }
18378 #pragma omp target teams distribute parallel for simd
18379   for (int i = 0; i < 10; ++i) {
18380 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18381     for (int i = 0; i < 10; ++i)
18382       ;
18383   }
18384 #pragma omp target teams distribute parallel for simd
18385   for (int i = 0; i < 10; ++i) {
18386 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18387     {
18388       bar();
18389     }
18390   }
18391 #pragma omp target teams distribute parallel for simd
18392   for (int i = 0; i < 10; ++i) {
18393 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18394     {
18395       bar();
18396     }
18397   }
18398 #pragma omp target teams distribute parallel for simd
18399   for (int i = 0; i < 10; ++i) {
18400 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18401     bar();
18402   }
18403 #pragma omp target teams distribute parallel for simd
18404   for (int i = 0; i < 10; ++i) {
18405 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18406     bar();
18407   }
18408 #pragma omp target teams distribute parallel for simd
18409   for (int i = 0; i < 10; ++i) {
18410 #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?}}
18411     bar();
18412   }
18413 #pragma omp target teams distribute parallel for simd
18414   for (int i = 0; i < 10; ++i) {
18415 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18416     bar();
18417   }
18418 #pragma omp target teams distribute parallel for simd
18419   for (int i = 0; i < 10; ++i) {
18420 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18421     bar();
18422   }
18423 #pragma omp target teams distribute parallel for simd
18424   for (int i = 0; i < 10; ++i) {
18425 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18426     bar();
18427   }
18428 #pragma omp target teams distribute parallel for simd
18429   for (int i = 0; i < 10; ++i) {
18430 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
18431     ++a;
18432   }
18433 #pragma omp target teams distribute parallel for simd
18434   for (int i = 0; i < 10; ++i) {
18435 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18436     ++a;
18437   }
18438 #pragma omp target teams distribute parallel for simd
18439   for (int i = 0; i < 10; ++i) {
18440 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18441     ++a;
18442   }
18443 #pragma omp target teams distribute parallel for simd
18444   for (int i = 0; i < 10; ++i) {
18445 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18446     for (int i = 0; i < 10; ++i)
18447       ;
18448   }
18449 #pragma omp target teams distribute parallel for simd
18450   for (int i = 0; i < 10; ++i) {
18451 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18452     ++a;
18453   }
18454 #pragma omp target teams distribute parallel for simd
18455   for (int i = 0; i < 10; ++i) {
18456 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18457     ++a;
18458   }
18459 #pragma omp target teams distribute parallel for simd
18460   for (int i = 0; i < 10; ++i) {
18461 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18462     ++a;
18463   }
18464 #pragma omp target teams distribute parallel for simd
18465   for (int i = 0; i < 10; ++i) {
18466 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18467     ++a;
18468   }
18469 #pragma omp target teams distribute parallel for simd
18470   for (int i = 0; i < 10; ++i) {
18471 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18472     for (int i = 0; i < 10; ++i)
18473       ++a;
18474   }
18475 #pragma omp target teams distribute parallel for simd
18476   for (int i = 0; i < 10; ++i) {
18477 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18478     for (int i = 0; i < 10; ++i)
18479       ++a;
18480   }
18481 #pragma omp target teams distribute parallel for simd
18482   for (int i = 0; i < 10; ++i) {
18483 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18484     for (int i = 0; i < 10; ++i)
18485       ++a;
18486   }
18487 #pragma omp target teams distribute parallel for simd
18488   for (int i = 0; i < 10; ++i) {
18489 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18490     for (int i = 0; i < 10; ++i)
18491       ++a;
18492   }
18493 #pragma omp target teams distribute parallel for simd
18494   for (int i = 0; i < 10; ++i) {
18495 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18496     for (int i = 0; i < 10; ++i)
18497       ++a;
18498   }
18499 #pragma omp target teams distribute parallel for simd
18500   for (int i = 0; i < 10; ++i) {
18501 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18502     for (int i = 0; i < 10; ++i)
18503       ;
18504   }
18505 #pragma omp target teams distribute parallel for simd
18506   for (int i = 0; i < 10; ++i) {
18507 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18508     a++;
18509   }
18510 #pragma omp target teams distribute parallel for simd
18511   for (int i = 0; i < 10; ++i) {
18512 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18513     for (int i = 0; i < 10; ++i)
18514       ;
18515   }
18516 #pragma omp target teams distribute parallel for simd
18517   for (int i = 0; i < 10; ++i) {
18518 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18519     for (int i = 0; i < 10; ++i)
18520       ;
18521   }
18522 #pragma omp target teams distribute parallel for simd
18523   for (int i = 0; i < 10; ++i) {
18524 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18525     for (int i = 0; i < 10; ++i)
18526       ;
18527   }
18528 #pragma omp target teams distribute parallel for simd
18529   for (int i = 0; i < 10; ++i) {
18530 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18531     for (int i = 0; i < 10; ++i)
18532       ;
18533   }
18534 
18535 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
18536 #pragma omp target teams distribute simd // OK
18537   for (int i = 0; i < 10; ++i)
18538     ;
18539 #pragma omp target teams distribute simd
18540   for (int i = 0; i < 10; ++i) {
18541 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18542     for (int i = 0; i < 10; ++i)
18543       ;
18544   }
18545 #pragma omp target teams distribute simd
18546   for (int i = 0; i < 10; ++i) {
18547 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18548     for (int i = 0; i < 10; ++i)
18549       ;
18550   }
18551 #pragma omp target teams distribute simd
18552   for (int i = 0; i < 10; ++i) {
18553 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18554     for (int i = 0; i < 10; ++i)
18555       ;
18556   }
18557 #pragma omp target teams distribute simd
18558   for (int i = 0; i < 10; ++i) {
18559 #pragma omp simd // omp45warn-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
18560     for (int i = 0; i < 10; ++i)
18561       ;
18562   }
18563 #pragma omp target teams distribute simd
18564   for (int i = 0; i < 10; ++i) {
18565 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18566     for (int i = 0; i < 10; ++i)
18567       ;
18568   }
18569 #pragma omp target teams distribute simd
18570   for (int i = 0; i < 10; ++i) {
18571 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18572     for (int i = 0; i < 10; ++i)
18573       ;
18574   }
18575 #pragma omp target teams distribute simd
18576   for (int i = 0; i < 10; ++i) {
18577 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18578     {
18579       bar();
18580     }
18581   }
18582 #pragma omp target teams distribute simd
18583   for (int i = 0; i < 10; ++i) {
18584 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18585     {
18586       bar();
18587     }
18588   }
18589 #pragma omp target teams distribute simd
18590   for (int i = 0; i < 10; ++i) {
18591 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18592     {
18593       bar();
18594     }
18595   }
18596 #pragma omp target teams distribute simd
18597   for (int i = 0; i < 10; ++i) {
18598 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18599     {
18600       bar();
18601     }
18602   }
18603 #pragma omp target teams distribute simd
18604   for (int i = 0; i < 10; ++i) {
18605 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18606     {
18607       bar();
18608     }
18609   }
18610 #pragma omp target teams distribute simd
18611   for (int i = 0; i < 10; ++i) {
18612 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18613     {
18614 #pragma omp single
18615       {
18616         bar();
18617       }
18618     }
18619   }
18620 #pragma omp target teams distribute simd
18621   for (int i = 0; i < 10; ++i) {
18622 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18623     for (int i = 0; i < 10; ++i)
18624       ;
18625   }
18626 #pragma omp target teams distribute simd
18627   for (int i = 0; i < 10; ++i) {
18628 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18629     for (int i = 0; i < 10; ++i)
18630       ;
18631   }
18632 #pragma omp target teams distribute simd
18633   for (int i = 0; i < 10; ++i) {
18634 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18635     {
18636       bar();
18637     }
18638   }
18639 #pragma omp target teams distribute simd
18640   for (int i = 0; i < 10; ++i) {
18641 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18642     {
18643       bar();
18644     }
18645   }
18646 #pragma omp target teams distribute simd
18647   for (int i = 0; i < 10; ++i) {
18648 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18649     bar();
18650   }
18651 #pragma omp target teams distribute simd
18652   for (int i = 0; i < 10; ++i) {
18653 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18654     bar();
18655   }
18656 #pragma omp target teams distribute simd
18657   for (int i = 0; i < 10; ++i) {
18658 #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?}}
18659     bar();
18660   }
18661 #pragma omp target teams distribute simd
18662   for (int i = 0; i < 10; ++i) {
18663 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18664     bar();
18665   }
18666 #pragma omp target teams distribute simd
18667   for (int i = 0; i < 10; ++i) {
18668 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18669     bar();
18670   }
18671 #pragma omp target teams distribute simd
18672   for (int i = 0; i < 10; ++i) {
18673 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18674     bar();
18675   }
18676 #pragma omp target teams distribute simd
18677   for (int i = 0; i < 10; ++i) {
18678 #pragma omp atomic // omp45-error {{OpenMP constructs may not be nested inside a simd region}}
18679     ++a;
18680   }
18681 #pragma omp target teams distribute simd
18682   for (int i = 0; i < 10; ++i) {
18683 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18684     ++a;
18685   }
18686 #pragma omp target teams distribute simd
18687   for (int i = 0; i < 10; ++i) {
18688 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18689     ++a;
18690   }
18691 #pragma omp target teams distribute simd
18692   for (int i = 0; i < 10; ++i) {
18693 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18694     for (int i = 0; i < 10; ++i)
18695       ;
18696   }
18697 #pragma omp target teams distribute simd
18698   for (int i = 0; i < 10; ++i) {
18699 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18700     ++a;
18701   }
18702 #pragma omp target teams distribute simd
18703   for (int i = 0; i < 10; ++i) {
18704 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18705     ++a;
18706   }
18707 #pragma omp target teams distribute simd
18708   for (int i = 0; i < 10; ++i) {
18709 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18710     ++a;
18711   }
18712 #pragma omp target teams distribute simd
18713   for (int i = 0; i < 10; ++i) {
18714 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18715     ++a;
18716   }
18717 #pragma omp target teams distribute simd
18718   for (int i = 0; i < 10; ++i) {
18719 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18720     for (int i = 0; i < 10; ++i)
18721       ++a;
18722   }
18723 #pragma omp target teams distribute simd
18724   for (int i = 0; i < 10; ++i) {
18725 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18726     for (int i = 0; i < 10; ++i)
18727       ++a;
18728   }
18729 #pragma omp target teams distribute simd
18730   for (int i = 0; i < 10; ++i) {
18731 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18732     for (int i = 0; i < 10; ++i)
18733       ++a;
18734   }
18735 #pragma omp target teams distribute simd
18736   for (int i = 0; i < 10; ++i) {
18737 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18738     for (int i = 0; i < 10; ++i)
18739       ++a;
18740   }
18741 #pragma omp target teams distribute simd
18742   for (int i = 0; i < 10; ++i) {
18743 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18744     for (int i = 0; i < 10; ++i)
18745       ++a;
18746   }
18747 #pragma omp target teams distribute simd
18748   for (int i = 0; i < 10; ++i) {
18749 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18750     for (int i = 0; i < 10; ++i)
18751       ;
18752   }
18753 #pragma omp target teams distribute simd
18754   for (int i = 0; i < 10; ++i) {
18755 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18756     a++;
18757   }
18758 #pragma omp target teams distribute simd
18759   for (int i = 0; i < 10; ++i) {
18760 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18761     for (int i = 0; i < 10; ++i)
18762       ;
18763   }
18764 #pragma omp target teams distribute simd
18765   for (int i = 0; i < 10; ++i) {
18766 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18767     for (int i = 0; i < 10; ++i)
18768       ;
18769   }
18770 #pragma omp target teams distribute simd
18771   for (int i = 0; i < 10; ++i) {
18772 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18773     for (int i = 0; i < 10; ++i)
18774       ;
18775   }
18776 #pragma omp target teams distribute simd
18777   for (int i = 0; i < 10; ++i) {
18778 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
18779     for (int i = 0; i < 10; ++i)
18780       ;
18781   }
18782 
18783   return foo<int>();
18784 }
18785 
18786