1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2 
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s
4 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
5 
6 void bar();
7 
8 template <class T>
foo()9 void foo() {
10   T a = T();
11 // PARALLEL DIRECTIVE
12 #pragma omp parallel
13 #pragma omp for
14   for (int i = 0; i < 10; ++i)
15     ;
16 #pragma omp parallel
17 #pragma omp simd
18   for (int i = 0; i < 10; ++i)
19     ;
20 #pragma omp parallel
21 #pragma omp for simd
22   for (int i = 0; i < 10; ++i)
23     ;
24 #pragma omp parallel
25 #pragma omp sections
26   {
27     bar();
28   }
29 #pragma omp parallel
30 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
31   {
32     bar();
33   }
34 #pragma omp parallel
35 #pragma omp single
36   bar();
37 
38 #pragma omp parallel
39 #pragma omp master
40   {
41     bar();
42   }
43 #pragma omp parallel
44 #pragma omp critical
45   {
46     bar();
47   }
48 #pragma omp parallel
49 #pragma omp parallel for
50   for (int i = 0; i < 10; ++i)
51     ;
52 #pragma omp parallel
53 #pragma omp parallel for simd
54   for (int i = 0; i < 10; ++i)
55     ;
56 #pragma omp parallel
57 #pragma omp parallel sections
58   {
59     bar();
60   }
61 #pragma omp parallel
62 #pragma omp task
63   {
64     bar();
65   }
66 #pragma omp parallel
67   {
68 #pragma omp taskyield
69     bar();
70   }
71 #pragma omp parallel
72   {
73 #pragma omp barrier
74     bar();
75   }
76 #pragma omp parallel
77   {
78 #pragma omp taskwait
79     bar();
80   }
81 #pragma omp parallel
82   {
83 #pragma omp flush
84     bar();
85   }
86 #pragma omp parallel
87   {
88 #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?}}
89     bar();
90   }
91 #pragma omp parallel
92   {
93 #pragma omp atomic
94     ++a;
95   }
96 #pragma omp parallel
97   {
98 #pragma omp target
99     ++a;
100   }
101 #pragma omp parallel
102   {
103 #pragma omp target parallel
104     ++a;
105   }
106 #pragma omp parallel
107   {
108 #pragma omp target parallel for
109   for (int i = 0; i < 10; ++i)
110     ;
111   }
112 #pragma omp parallel
113   {
114 #pragma omp target enter data map(to: a)
115     ++a;
116   }
117 #pragma omp parallel
118   {
119 #pragma omp target exit data map(from: a)
120     ++a;
121   }
122 #pragma omp parallel
123   {
124 #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?}}
125     ++a;
126   }
127 #pragma omp parallel
128   {
129 #pragma omp taskloop
130   for (int i = 0; i < 10; ++i)
131     ++a;
132   }
133 #pragma omp parallel
134   {
135 #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?}}
136     for (int i = 0; i < 10; ++i)
137       ;
138   }
139 #pragma omp parallel
140   {
141 #pragma omp target update to(a)
142   }
143 #pragma omp parallel
144   {
145 #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?}}
146     for (int i = 0; i < 10; ++i)
147       ;
148   }
149 #pragma omp parallel
150   {
151 #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?}}
152     for (int i = 0; i < 10; ++i)
153       ;
154   }
155 #pragma omp parallel
156   {
157 #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?}}
158     for (int i = 0; i < 10; ++i)
159       ;
160   }
161 #pragma omp parallel
162   {
163 #pragma omp target simd // OK
164     for (int i = 0; i < 10; ++i)
165       ;
166   }
167 #pragma omp parallel
168   {
169 #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?}}
170     for (int i = 0; i < 10; ++i)
171       ;
172   }
173 #pragma omp parallel
174   {
175 #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?}}
176     for (int i = 0; i < 10; ++i)
177       ;
178   }
179 #pragma omp parallel
180   {
181 #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?}}
182     for (int i = 0; i < 10; ++i)
183       ;
184   }
185 #pragma omp parallel
186   {
187 #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?}}
188     for (int i = 0; i < 10; ++i)
189       ;
190   }
191 #pragma omp parallel
192   {
193 #pragma omp target teams // OK
194     ++a;
195   }
196 #pragma omp parallel
197   {
198 #pragma omp target teams distribute // OK
199     for (int i = 0; i < 10; ++i)
200       ;
201   }
202 #pragma omp parallel
203   {
204 #pragma omp target teams distribute parallel for // OK
205     for (int i = 0; i < 10; ++i)
206       ;
207   }
208 #pragma omp parallel
209   {
210 #pragma omp target teams distribute parallel for simd // OK
211     for (int i = 0; i < 10; ++i)
212       ;
213   }
214 #pragma omp parallel
215   {
216 #pragma omp target teams distribute simd // OK
217     for (int i = 0; i < 10; ++i)
218       ;
219   }
220 
221 // SIMD DIRECTIVE
222 #pragma omp simd
223   for (int i = 0; i < 10; ++i) {
224 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
225     for (int i = 0; i < 10; ++i)
226       ;
227   }
228 #pragma omp simd
229   for (int i = 0; i < 10; ++i) {
230 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
231     for (int i = 0; i < 10; ++i)
232       ;
233   }
234 #pragma omp simd
235   for (int i = 0; i < 10; ++i) {
236 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
237     for (int i = 0; i < 10; ++i)
238       ;
239   }
240 #pragma omp simd
241   for (int i = 0; i < 10; ++i) {
242 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
243     for (int i = 0; i < 10; ++i)
244       ;
245   }
246 #pragma omp simd
247   for (int i = 0; i < 10; ++i) {
248 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
249     {
250       bar();
251     }
252   }
253 #pragma omp simd
254   for (int i = 0; i < 10; ++i) {
255 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
256     {
257       bar();
258     }
259   }
260 #pragma omp simd
261   for (int i = 0; i < 10; ++i) {
262 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
263     {
264       bar();
265     }
266   }
267 #pragma omp simd
268   for (int i = 0; i < 10; ++i) {
269 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
270     {
271       bar();
272     }
273   }
274 #pragma omp simd
275   for (int i = 0; i < 10; ++i) {
276 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
277     {
278       bar();
279     }
280   }
281 #pragma omp simd
282   for (int i = 0; i < 10; ++i) {
283 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
284     for (int i = 0; i < 10; ++i)
285       ;
286   }
287 #pragma omp simd
288   for (int i = 0; i < 10; ++i) {
289 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
290     for (int i = 0; i < 10; ++i)
291       ;
292   }
293 #pragma omp simd
294   for (int i = 0; i < 10; ++i) {
295 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
296     {
297       bar();
298     }
299   }
300 #pragma omp simd
301   for (int i = 0; i < 10; ++i) {
302 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
303     {
304       bar();
305     }
306   }
307 #pragma omp simd
308   for (int i = 0; i < 10; ++i) {
309 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
310     bar();
311   }
312 #pragma omp simd
313   for (int i = 0; i < 10; ++i) {
314 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
315     bar();
316   }
317 #pragma omp simd
318   for (int i = 0; i < 10; ++i) {
319 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
320     bar();
321   }
322 #pragma omp simd
323   for (int i = 0; i < 10; ++i) {
324 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
325     bar();
326   }
327 #pragma omp simd
328   for (int i = 0; i < 10; ++i) {
329 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
330     bar();
331   }
332 #pragma omp simd
333   for (int i = 0; i < 10; ++i) {
334 #pragma omp ordered simd // OK
335     bar();
336   }
337 #pragma omp simd
338   for (int i = 0; i < 10; ++i) {
339 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
340     bar();
341   }
342 #pragma omp simd
343   for (int i = 0; i < 10; ++i) {
344 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
345     ++a;
346   }
347 #pragma omp simd
348   for (int i = 0; i < 10; ++i) {
349 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
350     ++a;
351   }
352 #pragma omp simd
353   for (int i = 0; i < 10; ++i) {
354 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
355     ++a;
356   }
357 #pragma omp simd
358   for (int i = 0; i < 10; ++i) {
359 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
360     for (int i = 0; i < 10; ++i)
361       ;
362   }
363 #pragma omp simd
364   for (int i = 0; i < 10; ++i) {
365 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
366     ++a;
367   }
368 #pragma omp simd
369   for (int i = 0; i < 10; ++i) {
370 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
371     ++a;
372   }
373 #pragma omp simd
374   for (int i = 0; i < 10; ++i) {
375 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
376     ++a;
377   }
378 #pragma omp simd
379   for (int i = 0; i < 10; ++i) {
380 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
381   for (int i = 0; i < 10; ++i)
382     ++a;
383   }
384 #pragma omp simd
385   for (int i = 0; i < 10; ++i) {
386 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
387     for (int j = 0; j < 10; ++j)
388       ;
389   }
390 #pragma omp simd
391   for (int i = 0; i < 10; ++i) {
392 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
393   }
394 #pragma omp simd
395   for (int i = 0; i < 10; ++i) {
396 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
397     for (int j = 0; j < 10; ++j)
398       ;
399   }
400 #pragma omp simd
401   for (int i = 0; i < 10; ++i) {
402 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
403     for (int j = 0; j < 10; ++j)
404       ;
405   }
406 #pragma omp simd
407   for (int i = 0; i < 10; ++i) {
408 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
409     for (int j = 0; j < 10; ++j)
410       ;
411   }
412 #pragma omp simd
413   for (int i = 0; i < 10; ++i) {
414 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
415     for (int j = 0; j < 10; ++j)
416       ;
417   }
418 #pragma omp simd
419   for (int i = 0; i < 10; ++i) {
420 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
421     for (int j = 0; j < 10; ++j)
422       ;
423   }
424 #pragma omp simd
425   for (int i = 0; i < 10; ++i) {
426 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
427     for (int j = 0; j < 10; ++j)
428       ;
429   }
430 #pragma omp simd
431   for (int i = 0; i < 10; ++i) {
432 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
433     for (int j = 0; j < 10; ++j)
434       ;
435   }
436 #pragma omp simd
437   for (int i = 0; i < 10; ++i) {
438 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
439     for (int j = 0; j < 10; ++j)
440       ;
441   }
442 #pragma omp simd
443   for (int i = 0; i < 10; ++i) {
444 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
445     ++a;
446   }
447 #pragma omp simd
448   for (int i = 0; i < 10; ++i) {
449 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
450     for (int j = 0; j < 10; ++j)
451       ;
452   }
453 #pragma omp simd
454   for (int i = 0; i < 10; ++i) {
455 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
456     for (int j = 0; j < 10; ++j)
457       ;
458   }
459 #pragma omp simd
460   for (int i = 0; i < 10; ++i) {
461 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
462     for (int j = 0; j < 10; ++j)
463       ;
464   }
465 #pragma omp simd
466   for (int i = 0; i < 10; ++i) {
467 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
468     for (int j = 0; j < 10; ++j)
469       ;
470   }
471 
472 // FOR DIRECTIVE
473 #pragma omp for
474   for (int i = 0; i < 10; ++i) {
475 #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?}}
476     for (int i = 0; i < 10; ++i)
477       ;
478   }
479 #pragma omp for
480   for (int i = 0; i < 10; ++i) {
481 #pragma omp simd
482     for (int i = 0; i < 10; ++i)
483       ;
484   }
485 #pragma omp for
486   for (int i = 0; i < 10; ++i) {
487 #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?}}
488     for (int i = 0; i < 10; ++i)
489       ;
490   }
491 #pragma omp for
492   for (int i = 0; i < 10; ++i) {
493 #pragma omp parallel
494     for (int i = 0; i < 10; ++i)
495       ;
496   }
497 #pragma omp for
498   for (int i = 0; i < 10; ++i) {
499 #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?}}
500     {
501       bar();
502     }
503   }
504 #pragma omp for
505   for (int i = 0; i < 10; ++i) {
506 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
507     {
508       bar();
509     }
510   }
511 #pragma omp for
512   for (int i = 0; i < 10; ++i) {
513 #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?}}
514     {
515       bar();
516     }
517   }
518 
519 #pragma omp for
520   for (int i = 0; i < 10; ++i) {
521 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
522     {
523       bar();
524     }
525   }
526 #pragma omp for
527   for (int i = 0; i < 10; ++i) {
528 #pragma omp critical
529     {
530       bar();
531     }
532   }
533 #pragma omp for
534   for (int i = 0; i < 10; ++i) {
535 #pragma omp parallel
536     {
537 #pragma omp single // OK
538       {
539         bar();
540       }
541 #pragma omp for // OK
542       for (int i = 0; i < 10; ++i)
543         ;
544 #pragma omp sections // OK
545       {
546         bar();
547       }
548     }
549   }
550 #pragma omp for
551   for (int i = 0; i < 10; ++i) {
552 #pragma omp parallel for
553     for (int i = 0; i < 10; ++i)
554       ;
555   }
556 #pragma omp for
557   for (int i = 0; i < 10; ++i) {
558 #pragma omp parallel for simd
559     for (int i = 0; i < 10; ++i)
560       ;
561   }
562 #pragma omp for
563   for (int i = 0; i < 10; ++i) {
564 #pragma omp parallel sections
565     {
566       bar();
567     }
568   }
569 #pragma omp for
570   for (int i = 0; i < 10; ++i) {
571 #pragma omp task
572     {
573       bar();
574     }
575   }
576 #pragma omp for
577   for (int i = 0; i < 10; ++i) {
578 #pragma omp taskyield
579     bar();
580   }
581 #pragma omp for
582   for (int i = 0; i < 10; ++i) {
583 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
584     bar();
585   }
586 #pragma omp for
587   for (int i = 0; i < 10; ++i) {
588 #pragma omp taskwait
589     bar();
590   }
591 #pragma omp for
592   for (int i = 0; i < 10; ++i) {
593 #pragma omp flush
594     bar();
595   }
596 #pragma omp for
597   for (int i = 0; i < 10; ++i) {
598 #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?}}
599     bar();
600   }
601 #pragma omp for ordered
602   for (int i = 0; i < 10; ++i) {
603 #pragma omp ordered // OK
604     bar();
605   }
606 #pragma omp for
607   for (int i = 0; i < 10; ++i) {
608 #pragma omp atomic
609     ++a;
610   }
611 #pragma omp for
612   for (int i = 0; i < 10; ++i) {
613 #pragma omp target
614     ++a;
615   }
616 #pragma omp for
617   for (int i = 0; i < 10; ++i) {
618 #pragma omp target parallel
619     ++a;
620   }
621 #pragma omp for
622   for (int i = 0; i < 10; ++i) {
623 #pragma omp target parallel for
624     for (int i = 0; i < 10; ++i)
625       ;
626   }
627 #pragma omp for
628   for (int i = 0; i < 10; ++i) {
629 #pragma omp target enter data map(to: a)
630     ++a;
631   }
632 #pragma omp for
633   for (int i = 0; i < 10; ++i) {
634 #pragma omp target exit data map(from: a)
635     ++a;
636   }
637 #pragma omp for
638   for (int i = 0; i < 10; ++i) {
639 #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?}}
640     ++a;
641   }
642 #pragma omp for
643   for (int i = 0; i < 10; ++i) {
644 #pragma omp taskloop
645   for (int i = 0; i < 10; ++i)
646     ++a;
647   }
648 #pragma omp for
649   for (int i = 0; i < 10; ++i) {
650 #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?}}
651     for (int j = 0; j < 10; ++j)
652       ;
653   }
654 #pragma omp for
655   for (int i = 0; i < 10; ++i) {
656 #pragma omp target update to(a)
657   }
658 #pragma omp for
659   for (int i = 0; i < 10; ++i) {
660 #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?}}
661     for (int j = 0; j < 10; ++j)
662       ;
663   }
664 #pragma omp for
665   for (int i = 0; i < 10; ++i) {
666 #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?}}
667     for (int j = 0; j < 10; ++j)
668       ;
669   }
670 #pragma omp for
671   for (int i = 0; i < 10; ++i) {
672 #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?}}
673     for (int j = 0; j < 10; ++j)
674       ;
675   }
676 #pragma omp for
677   for (int i = 0; i < 10; ++i) {
678 #pragma omp target simd // OK
679     for (int j = 0; j < 10; ++j)
680       ;
681   }
682 #pragma omp for
683   for (int i = 0; i < 10; ++i) {
684 #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?}}
685     for (int j = 0; j < 10; ++j)
686       ;
687   }
688 #pragma omp for
689   for (int i = 0; i < 10; ++i) {
690 #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?}}
691     for (int j = 0; j < 10; ++j)
692       ;
693   }
694 #pragma omp for
695   for (int i = 0; i < 10; ++i) {
696 #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?}}
697     for (int j = 0; j < 10; ++j)
698       ;
699   }
700 #pragma omp for
701   for (int i = 0; i < 10; ++i) {
702 #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?}}
703     for (int j = 0; j < 10; ++j)
704       ;
705   }
706 #pragma omp for
707   for (int i = 0; i < 10; ++i) {
708 #pragma omp target teams // OK
709     ++a;
710   }
711 #pragma omp for
712   for (int i = 0; i < 10; ++i) {
713 #pragma omp target teams distribute // OK
714     for (int j = 0; j < 10; ++j)
715       ;
716   }
717 #pragma omp for
718   for (int i = 0; i < 10; ++i) {
719 #pragma omp target teams distribute parallel for // OK
720     for (int j = 0; j < 10; ++j)
721       ;
722   }
723 #pragma omp for
724   for (int i = 0; i < 10; ++i) {
725 #pragma omp target teams distribute parallel for simd // OK
726     for (int j = 0; j < 10; ++j)
727       ;
728   }
729 #pragma omp for
730   for (int i = 0; i < 10; ++i) {
731 #pragma omp target teams distribute simd // OK
732     for (int j = 0; j < 10; ++j)
733       ;
734   }
735 
736 // FOR SIMD DIRECTIVE
737 #pragma omp for simd
738   for (int i = 0; i < 10; ++i) {
739 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
740     for (int i = 0; i < 10; ++i)
741       ;
742   }
743 #pragma omp for simd
744   for (int i = 0; i < 10; ++i) {
745 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
746     for (int i = 0; i < 10; ++i)
747       ;
748   }
749 #pragma omp for simd
750   for (int i = 0; i < 10; ++i) {
751 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
752     for (int i = 0; i < 10; ++i)
753       ;
754   }
755 #pragma omp for simd
756   for (int i = 0; i < 10; ++i) {
757 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
758     for (int i = 0; i < 10; ++i)
759       ;
760   }
761 #pragma omp for simd
762   for (int i = 0; i < 10; ++i) {
763 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
764     {
765       bar();
766     }
767   }
768 #pragma omp for simd
769   for (int i = 0; i < 10; ++i) {
770 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
771     {
772       bar();
773     }
774   }
775 #pragma omp for simd
776   for (int i = 0; i < 10; ++i) {
777 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
778     {
779       bar();
780     }
781   }
782 #pragma omp for simd
783   for (int i = 0; i < 10; ++i) {
784 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
785     {
786       bar();
787     }
788   }
789 #pragma omp for simd
790   for (int i = 0; i < 10; ++i) {
791 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
792     {
793       bar();
794     }
795   }
796 #pragma omp for simd
797   for (int i = 0; i < 10; ++i) {
798 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
799     for (int i = 0; i < 10; ++i)
800       ;
801   }
802 #pragma omp for simd
803   for (int i = 0; i < 10; ++i) {
804 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
805     for (int i = 0; i < 10; ++i)
806       ;
807   }
808 #pragma omp for simd
809   for (int i = 0; i < 10; ++i) {
810 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
811     {
812       bar();
813     }
814   }
815 #pragma omp for simd
816   for (int i = 0; i < 10; ++i) {
817 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
818     {
819       bar();
820     }
821   }
822 #pragma omp for simd
823   for (int i = 0; i < 10; ++i) {
824 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
825     bar();
826   }
827 #pragma omp for simd
828   for (int i = 0; i < 10; ++i) {
829 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
830     bar();
831   }
832 #pragma omp for simd
833   for (int i = 0; i < 10; ++i) {
834 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
835     bar();
836   }
837 #pragma omp for simd
838   for (int i = 0; i < 10; ++i) {
839 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
840     bar();
841   }
842 #pragma omp for simd
843   for (int i = 0; i < 10; ++i) {
844 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
845     bar();
846   }
847 #pragma omp for simd
848   for (int i = 0; i < 10; ++i) {
849 #pragma omp ordered simd // OK
850     bar();
851   }
852 #pragma omp for simd
853   for (int i = 0; i < 10; ++i) {
854 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
855     bar();
856   }
857 #pragma omp for simd
858   for (int i = 0; i < 10; ++i) {
859 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
860     ++a;
861   }
862 #pragma omp for simd
863   for (int i = 0; i < 10; ++i) {
864 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
865     ++a;
866   }
867 #pragma omp for simd
868   for (int i = 0; i < 10; ++i) {
869 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
870     ++a;
871   }
872 #pragma omp for simd
873   for (int i = 0; i < 10; ++i) {
874 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
875     for (int i = 0; i < 10; ++i)
876       ;
877   }
878 #pragma omp for simd
879   for (int i = 0; i < 10; ++i) {
880 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
881     ++a;
882   }
883 #pragma omp for simd
884   for (int i = 0; i < 10; ++i) {
885 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
886     ++a;
887   }
888 #pragma omp for simd
889   for (int i = 0; i < 10; ++i) {
890 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
891     ++a;
892   }
893 #pragma omp for simd
894   for (int i = 0; i < 10; ++i) {
895 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
896   for (int i = 0; i < 10; ++i)
897     ++a;
898   }
899 #pragma omp for simd
900   for (int i = 0; i < 10; ++i) {
901 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
902     for (int j = 0; j < 10; ++j)
903       ;
904   }
905 #pragma omp for simd
906   for (int i = 0; i < 10; ++i) {
907 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
908     bar();
909   }
910 #pragma omp for simd
911   for (int i = 0; i < 10; ++i) {
912 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
913     for (int j = 0; j < 10; ++j)
914       ;
915   }
916 #pragma omp for simd
917   for (int i = 0; i < 10; ++i) {
918 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
919     for (int j = 0; j < 10; ++j)
920       ;
921   }
922 #pragma omp for simd
923   for (int i = 0; i < 10; ++i) {
924 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
925     for (int j = 0; j < 10; ++j)
926       ;
927   }
928 #pragma omp for simd
929   for (int i = 0; i < 10; ++i) {
930 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
931     for (int j = 0; j < 10; ++j)
932       ;
933   }
934 #pragma omp for simd
935   for (int i = 0; i < 10; ++i) {
936 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
937     for (int j = 0; j < 10; ++j)
938       ;
939   }
940 #pragma omp for simd
941   for (int i = 0; i < 10; ++i) {
942 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
943     for (int j = 0; j < 10; ++j)
944       ;
945   }
946 #pragma omp for simd
947   for (int i = 0; i < 10; ++i) {
948 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
949     for (int j = 0; j < 10; ++j)
950       ;
951   }
952 #pragma omp for simd
953   for (int i = 0; i < 10; ++i) {
954 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
955     for (int j = 0; j < 10; ++j)
956       ;
957   }
958 #pragma omp for simd
959   for (int i = 0; i < 10; ++i) {
960 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
961     a++;
962   }
963 #pragma omp for simd
964   for (int i = 0; i < 10; ++i) {
965 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
966     for (int j = 0; j < 10; ++j)
967       ;
968   }
969 #pragma omp for simd
970   for (int i = 0; i < 10; ++i) {
971 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
972     for (int j = 0; j < 10; ++j)
973       ;
974   }
975 #pragma omp for simd
976   for (int i = 0; i < 10; ++i) {
977 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
978     for (int j = 0; j < 10; ++j)
979       ;
980   }
981 #pragma omp for simd
982   for (int i = 0; i < 10; ++i) {
983 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
984     for (int j = 0; j < 10; ++j)
985       ;
986   }
987 
988 // SECTIONS DIRECTIVE
989 #pragma omp sections
990   {
991 #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?}}
992     for (int i = 0; i < 10; ++i)
993       ;
994   }
995 #pragma omp sections
996   {
997 #pragma omp simd
998     for (int i = 0; i < 10; ++i)
999       ;
1000   }
1001 #pragma omp sections
1002   {
1003 #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?}}
1004     for (int i = 0; i < 10; ++i)
1005       ;
1006   }
1007 #pragma omp sections
1008   {
1009 #pragma omp parallel
1010     for (int i = 0; i < 10; ++i)
1011       ;
1012   }
1013 #pragma omp sections
1014   {
1015 #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?}}
1016     {
1017       bar();
1018     }
1019   }
1020 #pragma omp sections
1021   {
1022 #pragma omp section
1023     {
1024       bar();
1025     }
1026   }
1027 #pragma omp sections
1028   {
1029 #pragma omp parallel
1030     {
1031 #pragma omp single // OK
1032       {
1033         bar();
1034       }
1035 #pragma omp for // OK
1036       for (int i = 0; i < 10; ++i)
1037         ;
1038 #pragma omp sections // OK
1039       {
1040         bar();
1041       }
1042     }
1043   }
1044 #pragma omp sections
1045   {
1046 #pragma omp parallel
1047     {
1048 #pragma omp master // OK
1049       {
1050         bar();
1051       }
1052 #pragma omp for // OK
1053       for (int i = 0; i < 10; ++i)
1054         ;
1055 #pragma omp master // OK
1056       {
1057         bar();
1058       }
1059     }
1060 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
1061     bar();
1062   }
1063 #pragma omp sections
1064   {
1065 #pragma omp parallel
1066     {
1067 #pragma omp critical(A) // OK
1068       {
1069         bar();
1070       }
1071 #pragma omp for // OK
1072       for (int i = 0; i < 10; ++i)
1073         ;
1074 #pragma omp critical // OK
1075       {
1076         bar();
1077       }
1078     }
1079 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
1080     bar();
1081   }
1082 #pragma omp sections
1083   {
1084 #pragma omp parallel for
1085     for (int i = 0; i < 10; ++i)
1086       ;
1087   }
1088 #pragma omp sections
1089   {
1090 #pragma omp parallel for simd
1091     for (int i = 0; i < 10; ++i)
1092       ;
1093   }
1094 #pragma omp sections
1095   {
1096 #pragma omp parallel sections
1097     {
1098       bar();
1099     }
1100   }
1101 #pragma omp sections
1102   {
1103 #pragma omp task
1104     {
1105       bar();
1106     }
1107   }
1108 #pragma omp sections
1109   {
1110 #pragma omp taskyield
1111   }
1112 #pragma omp sections
1113   {
1114 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1115   }
1116 #pragma omp sections
1117   {
1118 #pragma omp taskwait
1119   }
1120 #pragma omp sections
1121   {
1122 #pragma omp flush
1123   }
1124 #pragma omp sections
1125   {
1126 #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?}}
1127     bar();
1128   }
1129 #pragma omp sections
1130   {
1131 #pragma omp atomic
1132     ++a;
1133   }
1134 #pragma omp sections
1135   {
1136 #pragma omp target
1137     ++a;
1138   }
1139 #pragma omp sections
1140   {
1141 #pragma omp target parallel
1142     ++a;
1143   }
1144 #pragma omp sections
1145   {
1146 #pragma omp target parallel for
1147     for (int i = 0; i < 10; ++i)
1148       ;
1149   }
1150 #pragma omp sections
1151   {
1152 #pragma omp target enter data map(to: a)
1153   }
1154 #pragma omp sections
1155   {
1156 #pragma omp target exit data map(from: a)
1157   }
1158 #pragma omp sections
1159   {
1160 #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?}}
1161     ++a;
1162   }
1163 #pragma omp sections
1164   {
1165 #pragma omp taskloop
1166   for (int i = 0; i < 10; ++i)
1167     ++a;
1168   }
1169 #pragma omp sections
1170   {
1171 #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?}}
1172     for (int i = 0; i < 10; ++i)
1173       ;
1174   }
1175 #pragma omp sections
1176   {
1177 #pragma omp target update to(a)
1178   }
1179 #pragma omp sections
1180   {
1181 #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?}}
1182     for (int i = 0; i < 10; ++i)
1183       ;
1184   }
1185 #pragma omp sections
1186   {
1187 #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?}}
1188     for (int i = 0; i < 10; ++i)
1189       ;
1190   }
1191 #pragma omp sections
1192   {
1193 #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?}}
1194     for (int i = 0; i < 10; ++i)
1195       ;
1196   }
1197 #pragma omp sections
1198   {
1199 #pragma omp target simd // OK
1200     for (int i = 0; i < 10; ++i)
1201       ;
1202   }
1203 #pragma omp sections
1204   {
1205 #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?}}
1206     for (int i = 0; i < 10; ++i)
1207       ;
1208   }
1209 #pragma omp sections
1210   {
1211 #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?}}
1212     for (int i = 0; i < 10; ++i)
1213       ;
1214   }
1215 #pragma omp sections
1216   {
1217 #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?}}
1218     for (int i = 0; i < 10; ++i)
1219       ;
1220   }
1221 #pragma omp sections
1222   {
1223 #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?}}
1224     for (int i = 0; i < 10; ++i)
1225       ;
1226   }
1227 #pragma omp sections
1228   {
1229 #pragma omp target teams // OK
1230     ++a;
1231   }
1232 #pragma omp sections
1233   {
1234 #pragma omp target teams distribute // OK
1235     for (int i = 0; i < 10; ++i)
1236       ;
1237   }
1238 #pragma omp sections
1239   {
1240 #pragma omp target teams distribute parallel for // OK
1241     for (int i = 0; i < 10; ++i)
1242       ;
1243   }
1244 #pragma omp sections
1245   {
1246 #pragma omp target teams distribute parallel for simd // OK
1247     for (int i = 0; i < 10; ++i)
1248       ;
1249   }
1250 #pragma omp sections
1251   {
1252 #pragma omp target teams distribute simd // OK
1253     for (int i = 0; i < 10; ++i)
1254       ;
1255   }
1256 
1257 // SECTION DIRECTIVE
1258 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1259   {
1260     bar();
1261   }
1262 #pragma omp sections
1263   {
1264 #pragma omp section
1265     {
1266 #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?}}
1267       for (int i = 0; i < 10; ++i)
1268         ;
1269     }
1270   }
1271 #pragma omp sections
1272   {
1273 #pragma omp section
1274     {
1275 #pragma omp simd
1276       for (int i = 0; i < 10; ++i)
1277         ;
1278     }
1279   }
1280 #pragma omp sections
1281   {
1282 #pragma omp section
1283     {
1284 #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?}}
1285       for (int i = 0; i < 10; ++i)
1286         ;
1287     }
1288   }
1289 #pragma omp sections
1290   {
1291 #pragma omp section
1292     {
1293 #pragma omp parallel
1294       for (int i = 0; i < 10; ++i)
1295         ;
1296     }
1297   }
1298 #pragma omp sections
1299   {
1300 #pragma omp section
1301     {
1302 #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?}}
1303       {
1304         bar();
1305       }
1306     }
1307   }
1308 #pragma omp sections
1309   {
1310 #pragma omp section
1311     {
1312 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1313       {
1314         bar();
1315       }
1316     }
1317   }
1318 #pragma omp sections
1319   {
1320 #pragma omp section
1321     {
1322 #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?}}
1323       bar();
1324 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1325       bar();
1326 #pragma omp critical
1327       bar();
1328     }
1329   }
1330 #pragma omp sections
1331   {
1332 #pragma omp section
1333     {
1334 #pragma omp parallel
1335       {
1336 #pragma omp single // OK
1337         {
1338           bar();
1339         }
1340 #pragma omp for // OK
1341         for (int i = 0; i < 10; ++i)
1342           ;
1343 #pragma omp for simd // OK
1344         for (int i = 0; i < 10; ++i)
1345           ;
1346 #pragma omp sections // OK
1347         {
1348           bar();
1349         }
1350       }
1351     }
1352   }
1353 #pragma omp sections
1354   {
1355 #pragma omp section
1356     {
1357 #pragma omp parallel for
1358       for (int i = 0; i < 10; ++i)
1359         ;
1360     }
1361   }
1362 #pragma omp sections
1363   {
1364 #pragma omp section
1365     {
1366 #pragma omp parallel for simd
1367       for (int i = 0; i < 10; ++i)
1368         ;
1369     }
1370   }
1371 #pragma omp sections
1372   {
1373 #pragma omp section
1374     {
1375 #pragma omp parallel sections
1376       {
1377         bar();
1378       }
1379     }
1380   }
1381 #pragma omp sections
1382   {
1383 #pragma omp section
1384     {
1385 #pragma omp task
1386       {
1387         bar();
1388       }
1389     }
1390   }
1391 #pragma omp sections
1392   {
1393 #pragma omp section
1394     {
1395 #pragma omp taskyield
1396       bar();
1397     }
1398   }
1399 #pragma omp sections
1400   {
1401 #pragma omp section
1402     {
1403 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1404       bar();
1405     }
1406   }
1407 #pragma omp sections
1408   {
1409 #pragma omp section
1410     {
1411 #pragma omp taskwait
1412       bar();
1413     }
1414   }
1415 #pragma omp sections
1416   {
1417 #pragma omp section
1418     {
1419 #pragma omp flush
1420       bar();
1421     }
1422   }
1423 #pragma omp sections
1424   {
1425 #pragma omp section
1426     {
1427 #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?}}
1428       bar();
1429     }
1430   }
1431 #pragma omp sections
1432   {
1433 #pragma omp section
1434 #pragma omp atomic
1435     ++a;
1436   }
1437 #pragma omp sections
1438   {
1439 #pragma omp section
1440 #pragma omp target
1441     ++a;
1442   }
1443 #pragma omp sections
1444   {
1445 #pragma omp section
1446 #pragma omp target parallel
1447     ++a;
1448   }
1449 #pragma omp sections
1450   {
1451 #pragma omp section
1452     {
1453 #pragma omp target parallel for
1454       for (int i = 0; i < 10; ++i)
1455         ;
1456     }
1457   }
1458 #pragma omp sections
1459   {
1460 #pragma omp section
1461     {
1462 #pragma omp target enter data map(to: a)
1463       ++a;
1464     }
1465   }
1466 #pragma omp sections
1467   {
1468 #pragma omp section
1469     {
1470 #pragma omp target exit data map(from: a)
1471       ++a;
1472     }
1473   }
1474 #pragma omp sections
1475   {
1476 #pragma omp section
1477 #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?}}
1478     ++a;
1479   }
1480 #pragma omp sections
1481   {
1482 #pragma omp section
1483 #pragma omp taskloop
1484   for (int i = 0; i < 10; ++i)
1485     ++a;
1486   }
1487 #pragma omp sections
1488   {
1489 #pragma omp section
1490 #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?}}
1491     for (int i = 0; i < 10; ++i)
1492       ;
1493   }
1494 #pragma omp sections
1495   {
1496 #pragma omp section
1497     {
1498       bar();
1499 #pragma omp target update to(a)
1500     }
1501   }
1502 #pragma omp sections
1503   {
1504 #pragma omp section
1505 #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?}}
1506     for (int i = 0; i < 10; ++i)
1507       ;
1508   }
1509 #pragma omp sections
1510   {
1511 #pragma omp section
1512 #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?}}
1513     for (int i = 0; i < 10; ++i)
1514       ;
1515   }
1516 #pragma omp sections
1517   {
1518 #pragma omp section
1519 #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?}}
1520     for (int i = 0; i < 10; ++i)
1521       ;
1522   }
1523 #pragma omp sections
1524   {
1525 #pragma omp section
1526 #pragma omp target simd // OK
1527     for (int i = 0; i < 10; ++i)
1528       ;
1529   }
1530 #pragma omp sections
1531   {
1532 #pragma omp section
1533 #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?}}
1534     for (int i = 0; i < 10; ++i)
1535       ;
1536   }
1537 #pragma omp sections
1538   {
1539 #pragma omp section
1540 #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?}}
1541     for (int i = 0; i < 10; ++i)
1542       ;
1543   }
1544 #pragma omp sections
1545   {
1546 #pragma omp section
1547 #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?}}
1548     for (int i = 0; i < 10; ++i)
1549       ;
1550   }
1551 #pragma omp sections
1552   {
1553 #pragma omp section
1554 #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?}}
1555     for (int i = 0; i < 10; ++i)
1556       ;
1557   }
1558 #pragma omp sections
1559   {
1560 #pragma omp section
1561 #pragma omp target teams // OK
1562     ++a;
1563   }
1564 #pragma omp sections
1565   {
1566 #pragma omp section
1567 #pragma omp target teams distribute // OK
1568     for (int i = 0; i < 10; ++i)
1569       ;
1570   }
1571 #pragma omp sections
1572   {
1573 #pragma omp section
1574 #pragma omp target teams distribute parallel for // OK
1575     for (int i = 0; i < 10; ++i)
1576       ;
1577   }
1578 #pragma omp sections
1579   {
1580 #pragma omp section
1581 #pragma omp target teams distribute parallel for simd // OK
1582     for (int i = 0; i < 10; ++i)
1583       ;
1584   }
1585 #pragma omp sections
1586   {
1587 #pragma omp section
1588 #pragma omp target teams distribute simd // OK
1589     for (int i = 0; i < 10; ++i)
1590       ;
1591   }
1592 
1593 // SINGLE DIRECTIVE
1594 #pragma omp single
1595   {
1596 #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?}}
1597     for (int i = 0; i < 10; ++i)
1598       ;
1599   }
1600 #pragma omp single
1601   {
1602 #pragma omp simd
1603     for (int i = 0; i < 10; ++i)
1604       ;
1605   }
1606 #pragma omp single
1607   {
1608 #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?}}
1609     for (int i = 0; i < 10; ++i)
1610       ;
1611   }
1612 #pragma omp single
1613   {
1614 #pragma omp parallel
1615     for (int i = 0; i < 10; ++i)
1616       ;
1617   }
1618 #pragma omp single
1619   {
1620 #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?}}
1621     {
1622       bar();
1623     }
1624   }
1625 #pragma omp single
1626   {
1627 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1628     {
1629       bar();
1630     }
1631   }
1632 #pragma omp single
1633   {
1634 #pragma omp critical
1635     {
1636       bar();
1637     }
1638   }
1639 #pragma omp single
1640   {
1641 #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?}}
1642     {
1643       bar();
1644     }
1645   }
1646 #pragma omp single
1647   {
1648 #pragma omp parallel
1649     {
1650 #pragma omp single // OK
1651       {
1652         bar();
1653       }
1654 #pragma omp for // OK
1655       for (int i = 0; i < 10; ++i)
1656         ;
1657 #pragma omp for simd // OK
1658       for (int i = 0; i < 10; ++i)
1659         ;
1660 #pragma omp sections // OK
1661       {
1662         bar();
1663       }
1664     }
1665   }
1666 #pragma omp single
1667   {
1668 #pragma omp parallel for
1669     for (int i = 0; i < 10; ++i)
1670       ;
1671   }
1672 #pragma omp single
1673   {
1674 #pragma omp parallel for simd
1675     for (int i = 0; i < 10; ++i)
1676       ;
1677   }
1678 #pragma omp single
1679   {
1680 #pragma omp parallel sections
1681     {
1682       bar();
1683     }
1684   }
1685 #pragma omp single
1686   {
1687 #pragma omp task
1688     {
1689       bar();
1690     }
1691   }
1692 #pragma omp single
1693   {
1694 #pragma omp taskyield
1695     bar();
1696   }
1697 #pragma omp single
1698   {
1699 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1700     bar();
1701   }
1702 #pragma omp single
1703   {
1704 #pragma omp taskwait
1705     bar();
1706   }
1707 #pragma omp single
1708   {
1709 #pragma omp flush
1710     bar();
1711   }
1712 #pragma omp single
1713   {
1714 #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?}}
1715     bar();
1716   }
1717 #pragma omp single
1718   {
1719 #pragma omp atomic
1720     ++a;
1721   }
1722 #pragma omp single
1723   {
1724 #pragma omp target
1725     ++a;
1726   }
1727 #pragma omp single
1728   {
1729 #pragma omp target parallel
1730     ++a;
1731   }
1732 #pragma omp single
1733   {
1734 #pragma omp target parallel for
1735     for (int i = 0; i < 10; ++i)
1736       ;
1737   }
1738 #pragma omp single
1739   {
1740 #pragma omp target enter data map(to: a)
1741     ++a;
1742   }
1743 #pragma omp single
1744   {
1745 #pragma omp target exit data map(from: a)
1746     ++a;
1747   }
1748 #pragma omp single
1749   {
1750 #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?}}
1751     ++a;
1752   }
1753 #pragma omp single
1754   {
1755 #pragma omp taskloop
1756   for (int i = 0; i < 10; ++i)
1757     ++a;
1758   }
1759 #pragma omp single
1760   {
1761 #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?}}
1762     for (int i = 0; i < 10; ++i)
1763       ;
1764   }
1765 #pragma omp single
1766   {
1767 #pragma omp target update to(a)
1768     bar();
1769   }
1770 #pragma omp single
1771   {
1772 #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?}}
1773     for (int i = 0; i < 10; ++i)
1774       ;
1775   }
1776 #pragma omp single
1777   {
1778 #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?}}
1779     for (int i = 0; i < 10; ++i)
1780       ;
1781   }
1782 #pragma omp single
1783   {
1784 #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?}}
1785     for (int i = 0; i < 10; ++i)
1786       ;
1787   }
1788 #pragma omp single
1789   {
1790 #pragma omp target simd // OK
1791     for (int i = 0; i < 10; ++i)
1792       ;
1793   }
1794 #pragma omp single
1795   {
1796 #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?}}
1797     for (int i = 0; i < 10; ++i)
1798       ;
1799   }
1800 #pragma omp single
1801   {
1802 #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?}}
1803     for (int i = 0; i < 10; ++i)
1804       ;
1805   }
1806 #pragma omp single
1807   {
1808 #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?}}
1809     for (int i = 0; i < 10; ++i)
1810       ;
1811   }
1812 #pragma omp single
1813   {
1814 #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?}}
1815     for (int i = 0; i < 10; ++i)
1816       ;
1817   }
1818 #pragma omp single
1819   {
1820 #pragma omp target teams // OK
1821     ++a;
1822   }
1823 #pragma omp single
1824   {
1825 #pragma omp target teams distribute // OK
1826     for (int i = 0; i < 10; ++i)
1827       ;
1828   }
1829 #pragma omp single
1830   {
1831 #pragma omp target teams distribute parallel for // OK
1832     for (int i = 0; i < 10; ++i)
1833       ;
1834   }
1835 #pragma omp single
1836   {
1837 #pragma omp target teams distribute parallel for simd // OK
1838     for (int i = 0; i < 10; ++i)
1839       ;
1840   }
1841 #pragma omp single
1842   {
1843 #pragma omp target teams distribute simd // OK
1844     for (int i = 0; i < 10; ++i)
1845       ;
1846   }
1847 
1848 // MASTER DIRECTIVE
1849 #pragma omp master
1850   {
1851 #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?}}
1852     for (int i = 0; i < 10; ++i)
1853       ;
1854   }
1855 #pragma omp master
1856   {
1857 #pragma omp simd
1858     for (int i = 0; i < 10; ++i)
1859       ;
1860   }
1861 #pragma omp master
1862   {
1863 #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?}}
1864     for (int i = 0; i < 10; ++i)
1865       ;
1866   }
1867 #pragma omp master
1868   {
1869 #pragma omp parallel
1870     for (int i = 0; i < 10; ++i)
1871       ;
1872   }
1873 #pragma omp master
1874   {
1875 #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?}}
1876     {
1877       bar();
1878     }
1879   }
1880 #pragma omp master
1881   {
1882 #pragma omp master // OK, though second 'master' is redundant
1883     {
1884       bar();
1885     }
1886   }
1887 #pragma omp master
1888   {
1889 #pragma omp critical
1890     {
1891       bar();
1892     }
1893   }
1894 #pragma omp master
1895   {
1896 #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?}}
1897     {
1898       bar();
1899     }
1900   }
1901 #pragma omp master
1902   {
1903 #pragma omp parallel
1904     {
1905 #pragma omp master // OK
1906       {
1907         bar();
1908       }
1909 #pragma omp for // OK
1910       for (int i = 0; i < 10; ++i)
1911         ;
1912 #pragma omp for simd // OK
1913       for (int i = 0; i < 10; ++i)
1914         ;
1915 #pragma omp sections // OK
1916       {
1917         bar();
1918       }
1919     }
1920   }
1921 #pragma omp master
1922   {
1923 #pragma omp parallel for
1924     for (int i = 0; i < 10; ++i)
1925       ;
1926   }
1927 #pragma omp master
1928   {
1929 #pragma omp parallel for simd
1930     for (int i = 0; i < 10; ++i)
1931       ;
1932   }
1933 #pragma omp master
1934   {
1935 #pragma omp parallel sections
1936     {
1937       bar();
1938     }
1939   }
1940 #pragma omp master
1941   {
1942 #pragma omp task
1943     {
1944       bar();
1945     }
1946   }
1947 #pragma omp master
1948   {
1949 #pragma omp taskyield
1950     bar();
1951   }
1952 #pragma omp master
1953   {
1954 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1955     bar();
1956   }
1957 #pragma omp master
1958   {
1959 #pragma omp taskwait
1960     bar();
1961   }
1962 #pragma omp master
1963   {
1964 #pragma omp flush
1965     bar();
1966   }
1967 #pragma omp master
1968   {
1969 #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?}}
1970     bar();
1971   }
1972 #pragma omp master
1973   {
1974 #pragma omp atomic
1975     ++a;
1976   }
1977 #pragma omp master
1978   {
1979 #pragma omp target
1980     ++a;
1981   }
1982 #pragma omp master
1983   {
1984 #pragma omp target parallel
1985     ++a;
1986   }
1987 #pragma omp master
1988   {
1989 #pragma omp target parallel for
1990     for (int i = 0; i < 10; ++i)
1991       ;
1992   }
1993 #pragma omp master
1994   {
1995 #pragma omp target enter data map(to: a)
1996     ++a;
1997   }
1998 #pragma omp master
1999   {
2000 #pragma omp target exit data map(from: a)
2001     ++a;
2002   }
2003 #pragma omp master
2004   {
2005 #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?}}
2006     ++a;
2007   }
2008 #pragma omp master
2009   {
2010 #pragma omp taskloop
2011   for (int i = 0; i < 10; ++i)
2012     ++a;
2013   }
2014 #pragma omp master
2015   {
2016 #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?}}
2017     for (int i = 0; i < 10; ++i)
2018       ;
2019   }
2020 #pragma omp master
2021   {
2022 #pragma omp target update to(a)
2023     bar();
2024   }
2025 #pragma omp master
2026   {
2027 #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?}}
2028     for (int i = 0; i < 10; ++i)
2029       ;
2030   }
2031 #pragma omp master
2032   {
2033 #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?}}
2034     for (int i = 0; i < 10; ++i)
2035       ;
2036   }
2037 #pragma omp master
2038   {
2039 #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?}}
2040     for (int i = 0; i < 10; ++i)
2041       ;
2042   }
2043 #pragma omp master
2044   {
2045 #pragma omp target simd // OK
2046     for (int i = 0; i < 10; ++i)
2047       ;
2048   }
2049 #pragma omp master
2050   {
2051 #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?}}
2052     for (int i = 0; i < 10; ++i)
2053       ;
2054   }
2055 #pragma omp master
2056   {
2057 #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?}}
2058     for (int i = 0; i < 10; ++i)
2059       ;
2060   }
2061 #pragma omp master
2062   {
2063 #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?}}
2064     for (int i = 0; i < 10; ++i)
2065       ;
2066   }
2067 #pragma omp master
2068   {
2069 #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?}}
2070     for (int i = 0; i < 10; ++i)
2071       ;
2072   }
2073 #pragma omp master
2074   {
2075 #pragma omp target teams // OK
2076     a++;
2077   }
2078 #pragma omp master
2079   {
2080 #pragma omp target teams distribute // OK
2081     for (int i = 0; i < 10; ++i)
2082       ;
2083   }
2084 #pragma omp master
2085   {
2086 #pragma omp target teams distribute parallel for // OK
2087     for (int i = 0; i < 10; ++i)
2088       ;
2089   }
2090 #pragma omp master
2091   {
2092 #pragma omp target teams distribute parallel for simd // OK
2093     for (int i = 0; i < 10; ++i)
2094       ;
2095   }
2096 #pragma omp master
2097   {
2098 #pragma omp target teams distribute simd // OK
2099     for (int i = 0; i < 10; ++i)
2100       ;
2101   }
2102 
2103 // CRITICAL DIRECTIVE
2104 #pragma omp critical
2105   {
2106 #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?}}
2107     for (int i = 0; i < 10; ++i)
2108       ;
2109   }
2110 #pragma omp critical
2111   {
2112 #pragma omp simd
2113     for (int i = 0; i < 10; ++i)
2114       ;
2115   }
2116 #pragma omp critical
2117   {
2118 #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?}}
2119     for (int i = 0; i < 10; ++i)
2120       ;
2121   }
2122 #pragma omp critical
2123   {
2124 #pragma omp parallel
2125     for (int i = 0; i < 10; ++i)
2126       ;
2127   }
2128 #pragma omp critical
2129   {
2130 #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?}}
2131     {
2132       bar();
2133     }
2134   }
2135 #pragma omp critical
2136   {
2137 #pragma omp master // OK, though second 'master' is redundant
2138     {
2139       bar();
2140     }
2141   }
2142 #pragma omp critical
2143   {
2144 #pragma omp critical
2145     {
2146       bar();
2147     }
2148   }
2149 #pragma omp critical
2150   {
2151 #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?}}
2152     {
2153       bar();
2154     }
2155   }
2156 #pragma omp critical
2157   {
2158 #pragma omp parallel
2159     {
2160 #pragma omp master // OK
2161       {
2162         bar();
2163       }
2164 #pragma omp for // OK
2165       for (int i = 0; i < 10; ++i)
2166         ;
2167 #pragma omp for simd // OK
2168       for (int i = 0; i < 10; ++i)
2169         ;
2170 #pragma omp sections // OK
2171       {
2172         bar();
2173       }
2174     }
2175   }
2176 #pragma omp critical
2177   {
2178 #pragma omp parallel for
2179     for (int i = 0; i < 10; ++i)
2180       ;
2181   }
2182 #pragma omp critical
2183   {
2184 #pragma omp parallel for simd
2185     for (int i = 0; i < 10; ++i)
2186       ;
2187   }
2188 #pragma omp critical
2189   {
2190 #pragma omp parallel sections
2191     {
2192       bar();
2193     }
2194   }
2195 #pragma omp critical
2196   {
2197 #pragma omp task
2198     {
2199       bar();
2200     }
2201   }
2202 #pragma omp critical
2203   {
2204 #pragma omp taskyield
2205     bar();
2206   }
2207 #pragma omp critical
2208   {
2209 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2210     bar();
2211   }
2212 #pragma omp critical
2213   {
2214 #pragma omp taskwait
2215     bar();
2216   }
2217 #pragma omp critical(Tuzik)
2218   {
2219 #pragma omp critical(grelka)
2220     bar();
2221   }
2222 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2223   {
2224 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2225     {
2226 #pragma omp critical(Tuzik)
2227       {
2228 #pragma omp parallel
2229 #pragma omp critical(grelka)
2230         {
2231           bar();
2232         }
2233       }
2234     }
2235   }
2236 #pragma omp critical
2237   {
2238 #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?}}
2239     bar();
2240   }
2241 #pragma omp critical
2242   {
2243 #pragma omp atomic
2244     ++a;
2245   }
2246 #pragma omp critical
2247   {
2248 #pragma omp target
2249     ++a;
2250   }
2251 #pragma omp critical
2252   {
2253 #pragma omp target parallel
2254     ++a;
2255   }
2256 #pragma omp critical
2257   {
2258 #pragma omp target parallel for
2259     for (int i = 0; i < 10; ++i)
2260       ;
2261   }
2262 #pragma omp critical
2263   {
2264 #pragma omp target enter data map(to: a)
2265     ++a;
2266   }
2267 #pragma omp critical
2268   {
2269 #pragma omp target exit data map(from: a)
2270     ++a;
2271   }
2272 #pragma omp critical
2273   {
2274 #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?}}
2275     ++a;
2276   }
2277 #pragma omp critical
2278   {
2279 #pragma omp taskloop
2280   for (int i = 0; i < 10; ++i)
2281     ++a;
2282   }
2283 #pragma omp critical
2284   {
2285 #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?}}
2286     for (int i = 0; i < 10; ++i)
2287       ;
2288   }
2289 #pragma omp critical
2290   {
2291 #pragma omp target update to(a)
2292     bar();
2293   }
2294 #pragma omp critical
2295   {
2296 #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?}}
2297     for (int i = 0; i < 10; ++i)
2298       ;
2299   }
2300 #pragma omp critical
2301   {
2302 #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?}}
2303     for (int i = 0; i < 10; ++i)
2304       ;
2305   }
2306 #pragma omp critical
2307   {
2308 #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?}}
2309     for (int i = 0; i < 10; ++i)
2310       ;
2311   }
2312 #pragma omp critical
2313   {
2314 #pragma omp target simd // OK
2315     for (int i = 0; i < 10; ++i)
2316       ;
2317   }
2318 #pragma omp critical
2319   {
2320 #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?}}
2321     for (int i = 0; i < 10; ++i)
2322       ;
2323   }
2324 #pragma omp critical
2325   {
2326 #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?}}
2327     for (int i = 0; i < 10; ++i)
2328       ;
2329   }
2330 #pragma omp critical
2331   {
2332 #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?}}
2333     for (int i = 0; i < 10; ++i)
2334       ;
2335   }
2336 #pragma omp critical
2337   {
2338 #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?}}
2339     for (int i = 0; i < 10; ++i)
2340       ;
2341   }
2342 #pragma omp critical
2343   {
2344 #pragma omp target teams // OK
2345     a++;
2346   }
2347 #pragma omp critical
2348   {
2349 #pragma omp target teams distribute // OK
2350     for (int i = 0; i < 10; ++i)
2351       ;
2352   }
2353 #pragma omp critical
2354   {
2355 #pragma omp target teams distribute parallel for // OK
2356     for (int i = 0; i < 10; ++i)
2357       ;
2358   }
2359 #pragma omp critical
2360   {
2361 #pragma omp target teams distribute parallel for simd // OK
2362     for (int i = 0; i < 10; ++i)
2363       ;
2364   }
2365 #pragma omp critical
2366   {
2367 #pragma omp target teams distribute simd // OK
2368     for (int i = 0; i < 10; ++i)
2369       ;
2370   }
2371 
2372 // PARALLEL FOR DIRECTIVE
2373 #pragma omp parallel for
2374   for (int i = 0; i < 10; ++i) {
2375 #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?}}
2376     for (int i = 0; i < 10; ++i)
2377       ;
2378   }
2379 #pragma omp parallel for
2380   for (int i = 0; i < 10; ++i) {
2381 #pragma omp simd
2382     for (int i = 0; i < 10; ++i)
2383       ;
2384   }
2385 #pragma omp parallel for
2386   for (int i = 0; i < 10; ++i) {
2387 #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?}}
2388     for (int i = 0; i < 10; ++i)
2389       ;
2390   }
2391 #pragma omp parallel for
2392   for (int i = 0; i < 10; ++i) {
2393 #pragma omp parallel
2394     for (int i = 0; i < 10; ++i)
2395       ;
2396   }
2397 #pragma omp parallel for
2398   for (int i = 0; i < 10; ++i) {
2399 #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?}}
2400     {
2401       bar();
2402     }
2403   }
2404 #pragma omp parallel for
2405   for (int i = 0; i < 10; ++i) {
2406 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2407     {
2408       bar();
2409     }
2410   }
2411 #pragma omp parallel for
2412   for (int i = 0; i < 10; ++i) {
2413 #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?}}
2414     {
2415       bar();
2416     }
2417   }
2418 
2419 #pragma omp parallel for
2420   for (int i = 0; i < 10; ++i) {
2421 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2422     {
2423       bar();
2424     }
2425   }
2426 
2427 #pragma omp parallel for
2428   for (int i = 0; i < 10; ++i) {
2429 #pragma omp critical
2430     {
2431       bar();
2432     }
2433   }
2434 
2435 #pragma omp parallel for
2436   for (int i = 0; i < 10; ++i) {
2437 #pragma omp parallel
2438     {
2439 #pragma omp single // OK
2440       {
2441         bar();
2442       }
2443 #pragma omp for // OK
2444       for (int i = 0; i < 10; ++i)
2445         ;
2446 #pragma omp for simd // OK
2447       for (int i = 0; i < 10; ++i)
2448         ;
2449 #pragma omp sections // OK
2450       {
2451         bar();
2452       }
2453     }
2454   }
2455 #pragma omp parallel for
2456   for (int i = 0; i < 10; ++i) {
2457 #pragma omp parallel for
2458     for (int i = 0; i < 10; ++i)
2459       ;
2460   }
2461 #pragma omp parallel for
2462   for (int i = 0; i < 10; ++i) {
2463 #pragma omp parallel for simd
2464     for (int i = 0; i < 10; ++i)
2465       ;
2466   }
2467 #pragma omp parallel for
2468   for (int i = 0; i < 10; ++i) {
2469 #pragma omp parallel sections
2470     {
2471       bar();
2472     }
2473   }
2474 #pragma omp parallel for
2475   for (int i = 0; i < 10; ++i) {
2476 #pragma omp task
2477     {
2478       bar();
2479     }
2480   }
2481 #pragma omp parallel for
2482   for (int i = 0; i < 10; ++i) {
2483 #pragma omp taskyield
2484     bar();
2485   }
2486 #pragma omp parallel for
2487   for (int i = 0; i < 10; ++i) {
2488 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2489     bar();
2490   }
2491 #pragma omp parallel for
2492   for (int i = 0; i < 10; ++i) {
2493 #pragma omp taskwait
2494     bar();
2495   }
2496 #pragma omp parallel for
2497   for (int i = 0; i < 10; ++i) {
2498 #pragma omp flush
2499     bar();
2500   }
2501 #pragma omp parallel for
2502   for (int i = 0; i < 10; ++i) {
2503 #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?}}
2504     bar();
2505   }
2506 #pragma omp parallel for ordered
2507   for (int i = 0; i < 10; ++i) {
2508 #pragma omp ordered // OK
2509     bar();
2510   }
2511 #pragma omp parallel for
2512   for (int i = 0; i < 10; ++i) {
2513 #pragma omp atomic
2514     ++a;
2515   }
2516 #pragma omp parallel for
2517   for (int i = 0; i < 10; ++i) {
2518 #pragma omp target
2519     ++a;
2520   }
2521 #pragma omp parallel for
2522   for (int i = 0; i < 10; ++i) {
2523 #pragma omp target parallel
2524     ++a;
2525   }
2526 #pragma omp parallel for
2527   for (int i = 0; i < 10; ++i) {
2528 #pragma omp target parallel for
2529     for (int i = 0; i < 10; ++i)
2530       ;
2531   }
2532 #pragma omp parallel for
2533   for (int i = 0; i < 10; ++i) {
2534 #pragma omp target enter data map(to: a)
2535     ++a;
2536   }
2537 #pragma omp parallel for
2538   for (int i = 0; i < 10; ++i) {
2539 #pragma omp target exit data map(from: a)
2540     ++a;
2541   }
2542 #pragma omp parallel for
2543   for (int i = 0; i < 10; ++i) {
2544 #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?}}
2545     ++a;
2546   }
2547 #pragma omp parallel for
2548   for (int i = 0; i < 10; ++i) {
2549 #pragma omp taskloop
2550   for (int i = 0; i < 10; ++i)
2551     ++a;
2552   }
2553 #pragma omp parallel for
2554   for (int i = 0; i < 10; ++i) {
2555 #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?}}
2556     for (int j = 0; j < 10; ++j)
2557       ;
2558   }
2559 #pragma omp parallel for
2560   for (int i = 0; i < 10; ++i) {
2561 #pragma omp target update to(a)
2562   }
2563 #pragma omp parallel for
2564   for (int i = 0; i < 10; ++i) {
2565 #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?}}
2566     for (int j = 0; j < 10; ++j)
2567       ;
2568   }
2569 #pragma omp parallel for
2570   for (int i = 0; i < 10; ++i) {
2571 #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?}}
2572     for (int j = 0; j < 10; ++j)
2573       ;
2574   }
2575 #pragma omp parallel for
2576   for (int i = 0; i < 10; ++i) {
2577 #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?}}
2578     for (int j = 0; j < 10; ++j)
2579       ;
2580   }
2581 #pragma omp parallel for
2582   for (int i = 0; i < 10; ++i) {
2583 #pragma omp target simd // OK
2584     for (int j = 0; j < 10; ++j)
2585       ;
2586   }
2587 #pragma omp parallel for
2588   for (int i = 0; i < 10; ++i) {
2589 #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?}}
2590     for (int j = 0; j < 10; ++j)
2591       ;
2592   }
2593 #pragma omp parallel for
2594   for (int i = 0; i < 10; ++i) {
2595 #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?}}
2596     for (int j = 0; j < 10; ++j)
2597       ;
2598   }
2599 #pragma omp parallel for
2600   for (int i = 0; i < 10; ++i) {
2601 #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?}}
2602     for (int j = 0; j < 10; ++j)
2603       ;
2604   }
2605 #pragma omp parallel for
2606   for (int i = 0; i < 10; ++i) {
2607 #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?}}
2608     for (int j = 0; j < 10; ++j)
2609       ;
2610   }
2611 #pragma omp parallel for
2612   for (int i = 0; i < 10; ++i) {
2613 #pragma omp target teams // OK
2614     a++;
2615   }
2616 #pragma omp parallel for
2617   for (int i = 0; i < 10; ++i) {
2618 #pragma omp target teams distribute // OK
2619     for (int j = 0; j < 10; ++j)
2620       ;
2621   }
2622 #pragma omp parallel for
2623   for (int i = 0; i < 10; ++i) {
2624 #pragma omp target teams distribute parallel for // OK
2625     for (int j = 0; j < 10; ++j)
2626       ;
2627   }
2628 #pragma omp parallel for
2629   for (int i = 0; i < 10; ++i) {
2630 #pragma omp target teams distribute parallel for simd // OK
2631     for (int j = 0; j < 10; ++j)
2632       ;
2633   }
2634 #pragma omp parallel for
2635   for (int i = 0; i < 10; ++i) {
2636 #pragma omp target teams distribute simd // OK
2637     for (int j = 0; j < 10; ++j)
2638       ;
2639   }
2640 
2641 // PARALLEL FOR SIMD DIRECTIVE
2642 #pragma omp parallel for simd
2643   for (int i = 0; i < 10; ++i) {
2644 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2645     for (int i = 0; i < 10; ++i)
2646       ;
2647   }
2648 #pragma omp parallel for simd
2649   for (int i = 0; i < 10; ++i) {
2650 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2651     for (int i = 0; i < 10; ++i)
2652       ;
2653   }
2654 #pragma omp parallel for simd
2655   for (int i = 0; i < 10; ++i) {
2656 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2657     for (int i = 0; i < 10; ++i)
2658       ;
2659   }
2660 #pragma omp parallel for simd
2661   for (int i = 0; i < 10; ++i) {
2662 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2663     for (int i = 0; i < 10; ++i)
2664       ;
2665   }
2666 #pragma omp parallel for simd
2667   for (int i = 0; i < 10; ++i) {
2668 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2669     {
2670       bar();
2671     }
2672   }
2673 #pragma omp parallel for simd
2674   for (int i = 0; i < 10; ++i) {
2675 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2676     {
2677       bar();
2678     }
2679   }
2680 #pragma omp parallel for simd
2681   for (int i = 0; i < 10; ++i) {
2682 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2683     {
2684       bar();
2685     }
2686   }
2687 
2688 #pragma omp parallel for simd
2689   for (int i = 0; i < 10; ++i) {
2690 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2691     {
2692       bar();
2693     }
2694   }
2695 
2696 #pragma omp parallel for simd
2697   for (int i = 0; i < 10; ++i) {
2698 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2699     {
2700       bar();
2701     }
2702   }
2703 
2704 #pragma omp parallel for simd
2705   for (int i = 0; i < 10; ++i) {
2706 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2707     {
2708 #pragma omp single
2709       {
2710         bar();
2711       }
2712 #pragma omp for
2713       for (int i = 0; i < 10; ++i)
2714         ;
2715 #pragma omp for simd
2716       for (int i = 0; i < 10; ++i)
2717         ;
2718 #pragma omp sections
2719       {
2720         bar();
2721       }
2722     }
2723   }
2724 #pragma omp parallel for simd
2725   for (int i = 0; i < 10; ++i) {
2726 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2727     for (int i = 0; i < 10; ++i)
2728       ;
2729   }
2730 #pragma omp parallel for simd
2731   for (int i = 0; i < 10; ++i) {
2732 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2733     for (int i = 0; i < 10; ++i)
2734       ;
2735   }
2736 #pragma omp parallel for simd
2737   for (int i = 0; i < 10; ++i) {
2738 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2739     {
2740       bar();
2741     }
2742   }
2743 #pragma omp parallel for simd
2744   for (int i = 0; i < 10; ++i) {
2745 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2746     {
2747       bar();
2748     }
2749   }
2750 #pragma omp parallel for simd
2751   for (int i = 0; i < 10; ++i) {
2752 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2753     bar();
2754   }
2755 #pragma omp parallel for simd
2756   for (int i = 0; i < 10; ++i) {
2757 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2758     bar();
2759   }
2760 #pragma omp parallel for simd
2761   for (int i = 0; i < 10; ++i) {
2762 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2763     bar();
2764   }
2765 #pragma omp parallel for simd
2766   for (int i = 0; i < 10; ++i) {
2767 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2768     bar();
2769   }
2770 #pragma omp parallel for simd
2771   for (int i = 0; i < 10; ++i) {
2772 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2773     bar();
2774   }
2775 #pragma omp parallel for simd
2776   for (int i = 0; i < 10; ++i) {
2777 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2778     bar();
2779   }
2780 #pragma omp parallel for simd
2781   for (int i = 0; i < 10; ++i) {
2782 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2783     ++a;
2784   }
2785 #pragma omp parallel for simd
2786   for (int i = 0; i < 10; ++i) {
2787 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2788     ++a;
2789   }
2790 #pragma omp parallel for simd
2791   for (int i = 0; i < 10; ++i) {
2792 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2793     ++a;
2794   }
2795 #pragma omp parallel for simd
2796   for (int i = 0; i < 10; ++i) {
2797 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2798     for (int i = 0; i < 10; ++i)
2799       ;
2800   }
2801 #pragma omp parallel for simd
2802   for (int i = 0; i < 10; ++i) {
2803 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2804     ++a;
2805   }
2806 #pragma omp parallel for simd
2807   for (int i = 0; i < 10; ++i) {
2808 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2809     ++a;
2810   }
2811 #pragma omp parallel for simd
2812   for (int i = 0; i < 10; ++i) {
2813 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2814     ++a;
2815   }
2816 #pragma omp parallel for simd
2817   for (int i = 0; i < 10; ++i) {
2818 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2819   for (int i = 0; i < 10; ++i)
2820     ++a;
2821   }
2822 #pragma omp parallel for simd
2823   for (int i = 0; i < 10; ++i) {
2824 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2825     for (int j = 0; j < 10; ++j)
2826       ;
2827   }
2828 #pragma omp parallel for simd
2829   for (int i = 0; i < 10; ++i) {
2830 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2831     bar();
2832   }
2833 #pragma omp parallel for simd
2834   for (int i = 0; i < 10; ++i) {
2835 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2836     for (int j = 0; j < 10; ++j)
2837       ;
2838   }
2839 #pragma omp parallel for simd
2840   for (int i = 0; i < 10; ++i) {
2841 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2842     for (int j = 0; j < 10; ++j)
2843       ;
2844   }
2845 #pragma omp parallel for simd
2846   for (int i = 0; i < 10; ++i) {
2847 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2848     for (int j = 0; j < 10; ++j)
2849       ;
2850   }
2851 #pragma omp parallel for simd
2852   for (int i = 0; i < 10; ++i) {
2853 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2854     for (int j = 0; j < 10; ++j)
2855       ;
2856   }
2857 #pragma omp parallel for simd
2858   for (int i = 0; i < 10; ++i) {
2859 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2860     for (int j = 0; j < 10; ++j)
2861       ;
2862   }
2863 #pragma omp parallel for simd
2864   for (int i = 0; i < 10; ++i) {
2865 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2866     for (int j = 0; j < 10; ++j)
2867       ;
2868   }
2869 #pragma omp parallel for simd
2870   for (int i = 0; i < 10; ++i) {
2871 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2872     for (int j = 0; j < 10; ++j)
2873       ;
2874   }
2875 #pragma omp parallel for simd
2876   for (int i = 0; i < 10; ++i) {
2877 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2878     for (int j = 0; j < 10; ++j)
2879       ;
2880   }
2881 #pragma omp parallel for simd
2882   for (int i = 0; i < 10; ++i) {
2883 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2884     a++;
2885   }
2886 #pragma omp parallel for simd
2887   for (int i = 0; i < 10; ++i) {
2888 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2889     for (int j = 0; j < 10; ++j)
2890       ;
2891   }
2892 #pragma omp parallel for simd
2893   for (int i = 0; i < 10; ++i) {
2894 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2895     for (int j = 0; j < 10; ++j)
2896       ;
2897   }
2898 #pragma omp parallel for simd
2899   for (int i = 0; i < 10; ++i) {
2900 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2901     for (int j = 0; j < 10; ++j)
2902       ;
2903   }
2904 #pragma omp parallel for simd
2905   for (int i = 0; i < 10; ++i) {
2906 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2907     for (int j = 0; j < 10; ++j)
2908       ;
2909   }
2910 
2911 // PARALLEL SECTIONS DIRECTIVE
2912 #pragma omp parallel sections
2913   {
2914 #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?}}
2915     for (int i = 0; i < 10; ++i)
2916       ;
2917   }
2918 #pragma omp parallel sections
2919   {
2920 #pragma omp simd
2921     for (int i = 0; i < 10; ++i)
2922       ;
2923   }
2924 #pragma omp parallel sections
2925   {
2926 #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?}}
2927     for (int i = 0; i < 10; ++i)
2928       ;
2929   }
2930 #pragma omp parallel sections
2931   {
2932 #pragma omp parallel
2933     for (int i = 0; i < 10; ++i)
2934       ;
2935   }
2936 #pragma omp parallel sections
2937   {
2938 #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?}}
2939     {
2940       bar();
2941     }
2942   }
2943 #pragma omp parallel sections
2944   {
2945 #pragma omp section
2946     {
2947       bar();
2948     }
2949   }
2950 #pragma omp parallel sections
2951   {
2952 #pragma omp section
2953     {
2954 #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?}}
2955       bar();
2956     }
2957   }
2958 #pragma omp parallel sections
2959   {
2960 #pragma omp section
2961     {
2962 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2963       bar();
2964     }
2965   }
2966 #pragma omp parallel sections
2967   {
2968 #pragma omp section
2969     {
2970 #pragma omp critical
2971       bar();
2972     }
2973   }
2974 #pragma omp parallel sections
2975   {
2976 #pragma omp parallel
2977     {
2978 #pragma omp single // OK
2979       {
2980         bar();
2981       }
2982 #pragma omp for // OK
2983       for (int i = 0; i < 10; ++i)
2984         ;
2985 #pragma omp for simd // OK
2986       for (int i = 0; i < 10; ++i)
2987         ;
2988 #pragma omp sections // OK
2989       {
2990         bar();
2991       }
2992     }
2993   }
2994 #pragma omp parallel sections
2995   {
2996 #pragma omp parallel for
2997     for (int i = 0; i < 10; ++i)
2998       ;
2999   }
3000 #pragma omp parallel sections
3001   {
3002 #pragma omp parallel for simd
3003     for (int i = 0; i < 10; ++i)
3004       ;
3005   }
3006 #pragma omp parallel sections
3007   {
3008 #pragma omp parallel sections
3009     {
3010       bar();
3011     }
3012   }
3013 #pragma omp parallel sections
3014   {
3015 #pragma omp task
3016     {
3017       bar();
3018     }
3019   }
3020 #pragma omp parallel sections
3021   {
3022 #pragma omp taskyield
3023   }
3024 #pragma omp parallel sections
3025   {
3026 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3027   }
3028 #pragma omp parallel sections
3029   {
3030 #pragma omp taskwait
3031   }
3032 #pragma omp parallel sections
3033   {
3034 #pragma omp flush
3035   }
3036 #pragma omp parallel sections
3037   {
3038 #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?}}
3039     bar();
3040   }
3041 #pragma omp parallel sections
3042   {
3043 #pragma omp atomic
3044     ++a;
3045   }
3046 #pragma omp parallel sections
3047   {
3048 #pragma omp target
3049     ++a;
3050   }
3051 #pragma omp parallel sections
3052   {
3053 #pragma omp target parallel
3054     ++a;
3055   }
3056 #pragma omp parallel sections
3057   {
3058 #pragma omp target parallel for
3059     for (int i = 0; i < 10; ++i)
3060       ;
3061   }
3062 #pragma omp parallel sections
3063   {
3064 #pragma omp target enter data map(to: a)
3065   }
3066 #pragma omp parallel sections
3067   {
3068 #pragma omp target exit data map(from: a)
3069   }
3070 #pragma omp parallel sections
3071   {
3072 #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?}}
3073     ++a;
3074   }
3075 #pragma omp parallel sections
3076   {
3077 #pragma omp taskloop
3078   for (int i = 0; i < 10; ++i)
3079     ++a;
3080   }
3081 #pragma omp parallel sections
3082   {
3083 #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?}}
3084     for (int i = 0; i < 10; ++i)
3085       ;
3086   }
3087 #pragma omp parallel sections
3088   {
3089 #pragma omp target update to(a)
3090   }
3091 #pragma omp parallel sections
3092   {
3093 #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?}}
3094     for (int i = 0; i < 10; ++i)
3095       ;
3096   }
3097 #pragma omp parallel sections
3098   {
3099 #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?}}
3100     for (int i = 0; i < 10; ++i)
3101       ;
3102   }
3103 #pragma omp parallel sections
3104   {
3105 #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?}}
3106     for (int i = 0; i < 10; ++i)
3107       ;
3108   }
3109 #pragma omp parallel sections
3110   {
3111 #pragma omp target simd // OK
3112     for (int i = 0; i < 10; ++i)
3113       ;
3114   }
3115 #pragma omp parallel sections
3116   {
3117 #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?}}
3118     for (int i = 0; i < 10; ++i)
3119       ;
3120   }
3121 #pragma omp parallel sections
3122   {
3123 #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?}}
3124     for (int i = 0; i < 10; ++i)
3125       ;
3126   }
3127 #pragma omp parallel sections
3128   {
3129 #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?}}
3130     for (int i = 0; i < 10; ++i)
3131       ;
3132   }
3133 #pragma omp parallel sections
3134   {
3135 #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?}}
3136     for (int i = 0; i < 10; ++i)
3137       ;
3138   }
3139 #pragma omp parallel sections
3140   {
3141 #pragma omp target teams // OK
3142     a++;
3143   }
3144 #pragma omp parallel sections
3145   {
3146 #pragma omp target teams distribute // OK
3147     for (int i = 0; i < 10; ++i)
3148       ;
3149   }
3150 #pragma omp parallel sections
3151   {
3152 #pragma omp target teams distribute parallel for // OK
3153     for (int i = 0; i < 10; ++i)
3154       ;
3155   }
3156 #pragma omp parallel sections
3157   {
3158 #pragma omp target teams distribute parallel for simd // OK
3159     for (int i = 0; i < 10; ++i)
3160       ;
3161   }
3162 #pragma omp parallel sections
3163   {
3164 #pragma omp target teams distribute simd // OK
3165     for (int i = 0; i < 10; ++i)
3166       ;
3167   }
3168 
3169 // TASK DIRECTIVE
3170 #pragma omp task
3171 #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?}}
3172   for (int i = 0; i < 10; ++i)
3173     ;
3174 #pragma omp task
3175 #pragma omp simd
3176   for (int i = 0; i < 10; ++i)
3177     ;
3178 #pragma omp task
3179 #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?}}
3180   for (int i = 0; i < 10; ++i)
3181     ;
3182 #pragma omp task
3183 #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?}}
3184   {
3185     bar();
3186   }
3187 #pragma omp task
3188 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
3189   {
3190     bar();
3191   }
3192 #pragma omp task
3193 #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?}}
3194   bar();
3195 #pragma omp task
3196 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
3197   bar();
3198 #pragma omp task
3199 #pragma omp critical
3200   bar();
3201 
3202 #pragma omp task
3203 #pragma omp parallel for
3204   for (int i = 0; i < 10; ++i)
3205     ;
3206 #pragma omp task
3207 #pragma omp parallel for simd
3208   for (int i = 0; i < 10; ++i)
3209     ;
3210 #pragma omp task
3211 #pragma omp parallel sections
3212   {
3213     bar();
3214   }
3215 #pragma omp task
3216 #pragma omp task
3217   {
3218     bar();
3219   }
3220 #pragma omp task
3221   {
3222 #pragma omp taskyield
3223     bar();
3224   }
3225 #pragma omp task
3226   {
3227 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
3228     bar();
3229   }
3230 #pragma omp task
3231   {
3232 #pragma omp taskwait
3233     bar();
3234   }
3235 #pragma omp task
3236   {
3237 #pragma omp flush
3238     bar();
3239   }
3240 #pragma omp task
3241   {
3242 #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?}}
3243     bar();
3244   }
3245 #pragma omp task
3246   {
3247 #pragma omp atomic
3248     ++a;
3249   }
3250 #pragma omp task
3251   {
3252 #pragma omp target
3253     ++a;
3254   }
3255 #pragma omp task
3256   {
3257 #pragma omp target parallel
3258     ++a;
3259   }
3260 #pragma omp task
3261 #pragma omp target parallel for
3262   for (int i = 0; i < 10; ++i)
3263     ;
3264 #pragma omp task
3265   {
3266 #pragma omp target enter data map(to: a)
3267     ++a;
3268   }
3269 #pragma omp task
3270   {
3271 #pragma omp target exit data map(from: a)
3272     ++a;
3273   }
3274 #pragma omp task
3275   {
3276 #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?}}
3277     ++a;
3278   }
3279 #pragma omp task
3280   {
3281 #pragma omp taskloop
3282   for (int i = 0; i < 10; ++i)
3283     ++a;
3284   }
3285 #pragma omp task
3286   {
3287 #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?}}
3288     for (int i = 0; i < 10; ++i)
3289       ;
3290   }
3291 #pragma omp task
3292   {
3293 #pragma omp target update to(a)
3294     bar();
3295   }
3296 #pragma omp task
3297   {
3298 #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?}}
3299     for (int i = 0; i < 10; ++i)
3300       ;
3301   }
3302 #pragma omp task
3303   {
3304 #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?}}
3305     for (int i = 0; i < 10; ++i)
3306       ;
3307   }
3308 #pragma omp task
3309   {
3310 #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?}}
3311     for (int i = 0; i < 10; ++i)
3312       ;
3313   }
3314 #pragma omp task
3315   {
3316 #pragma omp target simd // OK
3317     for (int i = 0; i < 10; ++i)
3318       ;
3319   }
3320 #pragma omp task
3321   {
3322 #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?}}
3323     for (int i = 0; i < 10; ++i)
3324       ;
3325   }
3326 #pragma omp task
3327   {
3328 #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?}}
3329     for (int i = 0; i < 10; ++i)
3330       ;
3331   }
3332 #pragma omp task
3333   {
3334 #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?}}
3335     for (int i = 0; i < 10; ++i)
3336       ;
3337   }
3338 #pragma omp task
3339   {
3340 #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?}}
3341     for (int i = 0; i < 10; ++i)
3342       ;
3343   }
3344 #pragma omp task
3345   {
3346 #pragma omp target teams // OK
3347     a++;
3348   }
3349 #pragma omp task
3350   {
3351 #pragma omp target teams distribute // OK
3352     for (int i = 0; i < 10; ++i)
3353       ;
3354   }
3355 #pragma omp task
3356   {
3357 #pragma omp target teams distribute parallel for // OK
3358     for (int i = 0; i < 10; ++i)
3359       ;
3360   }
3361 #pragma omp task
3362   {
3363 #pragma omp target teams distribute parallel for simd // OK
3364     for (int i = 0; i < 10; ++i)
3365       ;
3366   }
3367 #pragma omp task
3368   {
3369 #pragma omp target teams distribute simd // OK
3370     for (int i = 0; i < 10; ++i)
3371       ;
3372   }
3373 
3374 // ORDERED DIRECTIVE
3375 #pragma omp ordered
3376   {
3377 #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?}}
3378     for (int i = 0; i < 10; ++i)
3379       ;
3380   }
3381 #pragma omp ordered
3382   {
3383 #pragma omp simd
3384     for (int i = 0; i < 10; ++i)
3385       ;
3386   }
3387 #pragma omp ordered
3388   {
3389 #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?}}
3390     for (int i = 0; i < 10; ++i)
3391       ;
3392   }
3393 #pragma omp ordered
3394   {
3395 #pragma omp parallel
3396     for (int i = 0; i < 10; ++i)
3397       ;
3398   }
3399 #pragma omp ordered
3400   {
3401 #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?}}
3402     {
3403       bar();
3404     }
3405   }
3406 #pragma omp ordered
3407   {
3408 #pragma omp master // OK, though second 'ordered' is redundant
3409     {
3410       bar();
3411     }
3412   }
3413 #pragma omp ordered
3414   {
3415 #pragma omp critical
3416     {
3417       bar();
3418     }
3419   }
3420 #pragma omp ordered
3421   {
3422 #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?}}
3423     {
3424       bar();
3425     }
3426   }
3427 #pragma omp ordered
3428   {
3429 #pragma omp parallel for ordered
3430     for (int j = 0; j < 10; ++j) {
3431 #pragma omp ordered // OK
3432       {
3433         bar();
3434       }
3435     }
3436   }
3437 #pragma omp ordered
3438   {
3439 #pragma omp parallel for simd ordered
3440     for (int j = 0; j < 10; ++j) {
3441 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3442       {
3443         bar();
3444       }
3445     }
3446   }
3447 #pragma omp ordered
3448   {
3449 #pragma omp parallel for simd ordered
3450     for (int j = 0; j < 10; ++j) {
3451 #pragma omp ordered simd
3452       {
3453         bar();
3454       }
3455     }
3456   }
3457 #pragma omp ordered
3458   {
3459 #pragma omp parallel for
3460     for (int i = 0; i < 10; ++i)
3461       ;
3462   }
3463 #pragma omp ordered
3464   {
3465 #pragma omp parallel for simd
3466     for (int i = 0; i < 10; ++i)
3467       ;
3468   }
3469 #pragma omp ordered
3470   {
3471 #pragma omp parallel sections
3472     {
3473       bar();
3474     }
3475   }
3476 #pragma omp ordered
3477   {
3478 #pragma omp task
3479     {
3480       bar();
3481     }
3482   }
3483 #pragma omp ordered
3484   {
3485 #pragma omp taskyield
3486     bar();
3487   }
3488 #pragma omp ordered
3489   {
3490 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3491     bar();
3492   }
3493 #pragma omp ordered
3494   {
3495 #pragma omp taskwait
3496     bar();
3497   }
3498 #pragma omp ordered
3499   {
3500 #pragma omp flush
3501     bar();
3502   }
3503 #pragma omp ordered
3504   {
3505 #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?}}
3506     bar();
3507   }
3508 #pragma omp ordered
3509   {
3510 #pragma omp atomic
3511     ++a;
3512   }
3513 #pragma omp ordered
3514   {
3515 #pragma omp target
3516     ++a;
3517   }
3518 #pragma omp ordered
3519   {
3520 #pragma omp target parallel
3521     ++a;
3522   }
3523 #pragma omp ordered
3524   {
3525 #pragma omp target parallel for ordered
3526     for (int j = 0; j < 10; ++j) {
3527 #pragma omp ordered // OK
3528       {
3529         bar();
3530       }
3531     }
3532   }
3533 #pragma omp ordered
3534   {
3535 #pragma omp target parallel for
3536     for (int i = 0; i < 10; ++i)
3537       ;
3538   }
3539 #pragma omp ordered
3540   {
3541 #pragma omp target enter data map(to: a)
3542     ++a;
3543   }
3544 #pragma omp ordered
3545   {
3546 #pragma omp target exit data map(from: a)
3547     ++a;
3548   }
3549 #pragma omp ordered
3550   {
3551 #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?}}
3552     ++a;
3553   }
3554 #pragma omp ordered
3555   {
3556 #pragma omp taskloop
3557   for (int i = 0; i < 10; ++i)
3558     ++a;
3559   }
3560 #pragma omp ordered
3561   {
3562 #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?}}
3563     for (int i = 0; i < 10; ++i)
3564       ;
3565   }
3566 #pragma omp ordered
3567   {
3568     bar();
3569 #pragma omp target update to(a)
3570     bar();
3571   }
3572 #pragma omp ordered
3573   {
3574 #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?}}
3575     for (int i = 0; i < 10; ++i)
3576       ;
3577   }
3578 #pragma omp ordered
3579   {
3580 #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?}}
3581     for (int i = 0; i < 10; ++i)
3582       ;
3583   }
3584 #pragma omp ordered
3585   {
3586 #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?}}
3587     for (int i = 0; i < 10; ++i)
3588       ;
3589   }
3590 #pragma omp ordered
3591   {
3592 #pragma omp target simd // OK
3593     for (int i = 0; i < 10; ++i)
3594       ;
3595   }
3596 #pragma omp ordered
3597   {
3598 #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?}}
3599     for (int i = 0; i < 10; ++i)
3600       ;
3601   }
3602 #pragma omp ordered
3603   {
3604 #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?}}
3605     for (int i = 0; i < 10; ++i)
3606       ;
3607   }
3608 #pragma omp ordered
3609   {
3610 #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?}}
3611     for (int i = 0; i < 10; ++i)
3612       ;
3613   }
3614 #pragma omp ordered
3615   {
3616 #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?}}
3617     for (int i = 0; i < 10; ++i)
3618       ;
3619   }
3620 #pragma omp ordered
3621   {
3622 #pragma omp target teams // OK
3623     a++;
3624   }
3625 #pragma omp ordered
3626   {
3627 #pragma omp target teams distribute // OK
3628     for (int i = 0; i < 10; ++i)
3629       ;
3630   }
3631 #pragma omp ordered
3632   {
3633 #pragma omp target teams distribute parallel for // OK
3634     for (int i = 0; i < 10; ++i)
3635       ;
3636   }
3637 #pragma omp ordered
3638   {
3639 #pragma omp target teams distribute parallel for simd // OK
3640     for (int i = 0; i < 10; ++i)
3641       ;
3642   }
3643 #pragma omp ordered
3644   {
3645 #pragma omp target teams distribute simd // OK
3646     for (int i = 0; i < 10; ++i)
3647       ;
3648   }
3649 
3650 // ATOMIC DIRECTIVE
3651 #pragma omp atomic
3652   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3653   // expected-note@+1 {{expected an expression statement}}
3654   {
3655 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3656     for (int i = 0; i < 10; ++i)
3657       ;
3658   }
3659 #pragma omp atomic
3660   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3661   // expected-note@+1 {{expected an expression statement}}
3662   {
3663 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3664     for (int i = 0; i < 10; ++i)
3665       ;
3666   }
3667 #pragma omp atomic
3668   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3669   // expected-note@+1 {{expected an expression statement}}
3670   {
3671 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3672     for (int i = 0; i < 10; ++i)
3673       ;
3674   }
3675 #pragma omp atomic
3676   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3677   // expected-note@+1 {{expected an expression statement}}
3678   {
3679 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3680     for (int i = 0; i < 10; ++i)
3681       ;
3682   }
3683 #pragma omp atomic
3684   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3685   // expected-note@+1 {{expected an expression statement}}
3686   {
3687 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3688     {
3689       bar();
3690     }
3691   }
3692 #pragma omp atomic
3693   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3694   // expected-note@+1 {{expected an expression statement}}
3695   {
3696 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3697     {
3698       bar();
3699     }
3700   }
3701 #pragma omp atomic
3702   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3703   // expected-note@+1 {{expected an expression statement}}
3704   {
3705 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3706     {
3707       bar();
3708     }
3709   }
3710 #pragma omp atomic
3711   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3712   // expected-note@+1 {{expected an expression statement}}
3713   {
3714 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3715     {
3716       bar();
3717     }
3718   }
3719 #pragma omp atomic
3720   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3721   // expected-note@+1 {{expected an expression statement}}
3722   {
3723 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3724     {
3725       bar();
3726     }
3727   }
3728 #pragma omp atomic
3729   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3730   // expected-note@+1 {{expected an expression statement}}
3731   {
3732 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3733     for (int i = 0; i < 10; ++i)
3734       ;
3735   }
3736 #pragma omp atomic
3737   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3738   // expected-note@+1 {{expected an expression statement}}
3739   {
3740 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3741     for (int i = 0; i < 10; ++i)
3742       ;
3743   }
3744 #pragma omp atomic
3745   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3746   // expected-note@+1 {{expected an expression statement}}
3747   {
3748 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3749     {
3750       bar();
3751     }
3752   }
3753 #pragma omp atomic
3754   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3755   // expected-note@+1 {{expected an expression statement}}
3756   {
3757 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3758     {
3759       bar();
3760     }
3761   }
3762 #pragma omp atomic
3763   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3764   // expected-note@+1 {{expected an expression statement}}
3765   {
3766 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3767     bar();
3768   }
3769 #pragma omp atomic
3770   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3771   // expected-note@+1 {{expected an expression statement}}
3772   {
3773 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3774     bar();
3775   }
3776 #pragma omp atomic
3777   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3778   // expected-note@+1 {{expected an expression statement}}
3779   {
3780 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3781     bar();
3782   }
3783 #pragma omp atomic
3784   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3785   // expected-note@+1 {{expected an expression statement}}
3786   {
3787 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3788     bar();
3789   }
3790 #pragma omp atomic
3791   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3792   // expected-note@+1 {{expected an expression statement}}
3793   {
3794 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3795     bar();
3796   }
3797 #pragma omp atomic
3798   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3799   // expected-note@+1 {{expected an expression statement}}
3800   {
3801 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3802     ++a;
3803   }
3804 #pragma omp atomic
3805   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3806   // expected-note@+1 {{expected an expression statement}}
3807   {
3808 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3809     ++a;
3810   }
3811 #pragma omp atomic
3812   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3813   // expected-note@+1 {{expected an expression statement}}
3814   {
3815 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3816     ++a;
3817   }
3818 #pragma omp atomic
3819   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3820   // expected-note@+1 {{expected an expression statement}}
3821   {
3822 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3823     for (int i = 0; i < 10; ++i)
3824       ;
3825   }
3826 #pragma omp atomic
3827   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3828   // expected-note@+1 {{expected an expression statement}}
3829   {
3830 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3831     ++a;
3832   }
3833 #pragma omp atomic
3834   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3835   // expected-note@+1 {{expected an expression statement}}
3836   {
3837 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3838     ++a;
3839   }
3840 #pragma omp atomic
3841   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3842   // expected-note@+1 {{expected an expression statement}}
3843   {
3844 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3845     ++a;
3846   }
3847 #pragma omp atomic
3848   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3849   // expected-note@+1 {{expected an expression statement}}
3850   {
3851 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3852   for (int i = 0; i < 10; ++i)
3853     ++a;
3854   }
3855 #pragma omp atomic
3856   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3857   // expected-note@+1 {{expected an expression statement}}
3858   {
3859 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3860     for (int i = 0; i < 10; ++i)
3861       ;
3862   }
3863 #pragma omp atomic
3864   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3865   // expected-note@+1 {{expected an expression statement}}
3866   {
3867 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3868     bar();
3869   }
3870 #pragma omp atomic
3871   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3872   // expected-note@+1 {{expected an expression statement}}
3873   {
3874 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3875     for (int i = 0; i < 10; ++i)
3876       ;
3877   }
3878 #pragma omp atomic
3879   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3880   // expected-note@+1 {{expected an expression statement}}
3881   {
3882 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3883     for (int i = 0; i < 10; ++i)
3884       ;
3885   }
3886 #pragma omp atomic
3887   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3888   // expected-note@+1 {{expected an expression statement}}
3889   {
3890 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3891     for (int i = 0; i < 10; ++i)
3892       ;
3893   }
3894 #pragma omp atomic
3895   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3896   // expected-note@+1 {{expected an expression statement}}
3897   {
3898 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3899     for (int i = 0; i < 10; ++i)
3900       ;
3901   }
3902 #pragma omp atomic
3903   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3904   // expected-note@+1 {{expected an expression statement}}
3905   {
3906 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3907     for (int i = 0; i < 10; ++i)
3908       ;
3909   }
3910 #pragma omp atomic
3911   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3912   // expected-note@+1 {{expected an expression statement}}
3913   {
3914 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3915     for (int i = 0; i < 10; ++i)
3916       ;
3917   }
3918 #pragma omp atomic
3919   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3920   // expected-note@+1 {{expected an expression statement}}
3921   {
3922 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3923     for (int i = 0; i < 10; ++i)
3924       ;
3925   }
3926 #pragma omp atomic
3927   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3928   // expected-note@+1 {{expected an expression statement}}
3929   {
3930 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3931     for (int i = 0; i < 10; ++i)
3932       ;
3933   }
3934 #pragma omp atomic
3935   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3936   // expected-note@+1 {{expected an expression statement}}
3937   {
3938 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3939     a++;
3940   }
3941 #pragma omp atomic
3942   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3943   // expected-note@+1 {{expected an expression statement}}
3944   {
3945 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3946     for (int i = 0; i < 10; ++i)
3947       ;
3948   }
3949 #pragma omp atomic
3950   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3951   // expected-note@+1 {{expected an expression statement}}
3952   {
3953 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3954     for (int i = 0; i < 10; ++i)
3955       ;
3956   }
3957 #pragma omp atomic
3958   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3959   // expected-note@+1 {{expected an expression statement}}
3960   {
3961 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3962     for (int i = 0; i < 10; ++i)
3963       ;
3964   }
3965 #pragma omp atomic
3966   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3967   // expected-note@+1 {{expected an expression statement}}
3968   {
3969 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3970     for (int i = 0; i < 10; ++i)
3971       ;
3972   }
3973 
3974 // TARGET DIRECTIVE
3975 #pragma omp target
3976 #pragma omp parallel
3977   bar();
3978 #pragma omp target
3979 #pragma omp for
3980   for (int i = 0; i < 10; ++i)
3981     ;
3982 #pragma omp target
3983 #pragma omp simd
3984   for (int i = 0; i < 10; ++i)
3985     ;
3986 #pragma omp target
3987 #pragma omp for simd
3988   for (int i = 0; i < 10; ++i)
3989     ;
3990 #pragma omp target
3991 #pragma omp sections
3992   {
3993     bar();
3994   }
3995 #pragma omp target
3996 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3997   {
3998     bar();
3999   }
4000 #pragma omp target
4001 #pragma omp single
4002   bar();
4003 
4004 #pragma omp target
4005 #pragma omp master
4006   {
4007     bar();
4008   }
4009 #pragma omp target
4010 #pragma omp critical
4011   {
4012     bar();
4013   }
4014 #pragma omp target
4015 #pragma omp parallel for
4016   for (int i = 0; i < 10; ++i)
4017     ;
4018 #pragma omp target
4019 #pragma omp parallel for simd
4020   for (int i = 0; i < 10; ++i)
4021     ;
4022 #pragma omp target
4023 #pragma omp parallel sections
4024   {
4025     bar();
4026   }
4027 #pragma omp target
4028 #pragma omp task
4029   {
4030     bar();
4031   }
4032 #pragma omp target
4033   {
4034 #pragma omp taskyield
4035     bar();
4036   }
4037 #pragma omp target
4038   {
4039 #pragma omp barrier
4040     bar();
4041   }
4042 #pragma omp target
4043   {
4044 #pragma omp taskwait
4045     bar();
4046   }
4047 #pragma omp target
4048   {
4049 #pragma omp flush
4050     bar();
4051   }
4052 #pragma omp target
4053   {
4054 #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?}}
4055     bar();
4056   }
4057 #pragma omp target
4058   {
4059 #pragma omp atomic
4060     ++a;
4061   }
4062 #pragma omp target
4063   {
4064 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4065     ++a;
4066   }
4067 #pragma omp target
4068   {
4069 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4070     ++a;
4071   }
4072 #pragma omp target
4073 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4074   for (int i = 0; i < 10; ++i)
4075     ;
4076 #pragma omp target
4077   {
4078 #pragma omp teams
4079     ++a;
4080   }
4081 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4082   {
4083 #pragma omp teams // expected-note {{directive outside teams construct here}}
4084     ++a;
4085 #pragma omp teams // expected-note {{nested teams construct here}}
4086     ++a;
4087   }
4088 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4089   {
4090     ++a;           // expected-note {{statement outside teams construct here}}
4091 #pragma omp teams  // expected-note {{nested teams construct here}}
4092     ++a;
4093   }
4094 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4095   {
4096     while (0)      // expected-note {{statement outside teams construct here}}
4097 #pragma omp teams  // expected-note {{nested teams construct here}}
4098     ++a;
4099   }
4100 #pragma omp target
4101   {
4102 #pragma omp taskloop
4103   for (int i = 0; i < 10; ++i)
4104     ++a;
4105   }
4106 #pragma omp target
4107   {
4108 #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?}}
4109     for (int i = 0; i < 10; ++i)
4110       ;
4111   }
4112 #pragma omp target
4113   {
4114 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4115   }
4116 #pragma omp target
4117   {
4118 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4119   }
4120 #pragma omp target
4121   {
4122 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4123   }
4124 #pragma omp target
4125   {
4126 #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?}}
4127     for (int i = 0; i < 10; ++i)
4128       ;
4129   }
4130 #pragma omp target
4131   {
4132 #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?}}
4133     for (int i = 0; i < 10; ++i)
4134       ;
4135   }
4136 #pragma omp target
4137   {
4138 #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?}}
4139     for (int i = 0; i < 10; ++i)
4140       ;
4141   }
4142 #pragma omp target
4143   {
4144 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4145     for (int i = 0; i < 10; ++i)
4146       ;
4147   }
4148 #pragma omp target
4149   {
4150 #pragma omp teams distribute // OK
4151     for (int i = 0; i < 10; ++i)
4152       ;
4153   }
4154 #pragma omp target
4155   {
4156 #pragma omp teams distribute simd // OK
4157     for (int i = 0; i < 10; ++i)
4158       ;
4159   }
4160 #pragma omp target
4161   {
4162 #pragma omp teams distribute parallel for simd // OK
4163     for (int i = 0; i < 10; ++i)
4164       ;
4165   }
4166 #pragma omp target
4167   {
4168 #pragma omp teams distribute parallel for // OK
4169     for (int i = 0; i < 10; ++i)
4170       ;
4171   }
4172 #pragma omp target
4173   {
4174 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4175     for (int i = 0; i < 10; ++i)
4176       ;
4177   }
4178 #pragma omp target
4179   {
4180 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4181     for (int i = 0; i < 10; ++i)
4182       ;
4183   }
4184 #pragma omp target
4185   {
4186 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4187     for (int i = 0; i < 10; ++i)
4188       ;
4189   }
4190 #pragma omp target
4191   {
4192 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4193     for (int i = 0; i < 10; ++i)
4194       ;
4195   }
4196 #pragma omp target
4197   {
4198 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4199     for (int i = 0; i < 10; ++i)
4200       ;
4201   }
4202 
4203 // TARGET PARALLEL DIRECTIVE
4204 #pragma omp target parallel
4205 #pragma omp parallel
4206   bar();
4207 #pragma omp target parallel
4208 #pragma omp for
4209   for (int i = 0; i < 10; ++i)
4210     ;
4211 #pragma omp target parallel
4212 #pragma omp simd
4213   for (int i = 0; i < 10; ++i)
4214     ;
4215 #pragma omp target parallel
4216 #pragma omp for simd
4217   for (int i = 0; i < 10; ++i)
4218     ;
4219 #pragma omp target parallel
4220 #pragma omp sections
4221   {
4222     bar();
4223   }
4224 #pragma omp target parallel
4225 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
4226   {
4227     bar();
4228   }
4229 #pragma omp target parallel
4230 #pragma omp single
4231   bar();
4232 
4233 #pragma omp target parallel
4234 #pragma omp master
4235   {
4236     bar();
4237   }
4238 #pragma omp target parallel
4239 #pragma omp critical
4240   {
4241     bar();
4242   }
4243 #pragma omp target parallel
4244 #pragma omp parallel for
4245   for (int i = 0; i < 10; ++i)
4246     ;
4247 #pragma omp target parallel
4248 #pragma omp parallel for simd
4249   for (int i = 0; i < 10; ++i)
4250     ;
4251 #pragma omp target parallel
4252 #pragma omp parallel sections
4253   {
4254     bar();
4255   }
4256 #pragma omp target parallel
4257 #pragma omp task
4258   {
4259     bar();
4260   }
4261 #pragma omp target parallel
4262   {
4263 #pragma omp taskyield
4264     bar();
4265   }
4266 #pragma omp target parallel
4267   {
4268 #pragma omp barrier
4269     bar();
4270   }
4271 #pragma omp target parallel
4272   {
4273 #pragma omp taskwait
4274     bar();
4275   }
4276 #pragma omp target parallel
4277   {
4278 #pragma omp flush
4279     bar();
4280   }
4281 #pragma omp target parallel
4282   {
4283 #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?}}
4284     bar();
4285   }
4286 #pragma omp target parallel
4287   {
4288 #pragma omp atomic
4289     ++a;
4290   }
4291 #pragma omp target parallel
4292   {
4293 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
4294     ++a;
4295   }
4296 #pragma omp target parallel
4297   {
4298 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
4299     ++a;
4300   }
4301 #pragma omp target parallel
4302 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4303   for (int i = 0; i < 10; ++i)
4304     ;
4305 #pragma omp target parallel
4306   {
4307 #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?}}
4308     ++a;
4309   }
4310 #pragma omp target parallel
4311   {
4312     ++a;
4313 #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?}}
4314     ++a;
4315   }
4316 #pragma omp target parallel
4317   {
4318 #pragma omp taskloop
4319   for (int i = 0; i < 10; ++i)
4320     ++a;
4321   }
4322 #pragma omp target parallel
4323   {
4324 #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?}}
4325     for (int i = 0; i < 10; ++i)
4326       ;
4327   }
4328 #pragma omp target parallel
4329   {
4330 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4331   }
4332 #pragma omp target parallel
4333   {
4334 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4335   }
4336 #pragma omp target parallel
4337   {
4338 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4339   }
4340 #pragma omp target parallel
4341   {
4342 #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?}}
4343     for (int i = 0; i < 10; ++i)
4344       ;
4345   }
4346 #pragma omp target parallel
4347   {
4348 #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?}}
4349     for (int i = 0; i < 10; ++i)
4350       ;
4351   }
4352 #pragma omp target parallel
4353   {
4354 #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?}}
4355     for (int i = 0; i < 10; ++i)
4356       ;
4357   }
4358 #pragma omp target parallel
4359   {
4360 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4361     for (int i = 0; i < 10; ++i)
4362       ;
4363   }
4364 #pragma omp target parallel
4365   {
4366 #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?}}
4367     for (int i = 0; i < 10; ++i)
4368       ;
4369   }
4370 #pragma omp target parallel
4371   {
4372 #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?}}
4373     for (int i = 0; i < 10; ++i)
4374       ;
4375   }
4376 #pragma omp target parallel
4377   {
4378 #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?}}
4379     for (int i = 0; i < 10; ++i)
4380       ;
4381   }
4382 #pragma omp target parallel
4383   {
4384 #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?}}
4385     for (int i = 0; i < 10; ++i)
4386       ;
4387   }
4388 #pragma omp target parallel
4389   {
4390 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
4391     a++;
4392   }
4393 #pragma omp target parallel
4394   {
4395 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
4396     for (int i = 0; i < 10; ++i)
4397       ;
4398   }
4399 #pragma omp target parallel
4400   {
4401 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4402     for (int i = 0; i < 10; ++i)
4403       ;
4404   }
4405 #pragma omp target parallel
4406   {
4407 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4408     for (int i = 0; i < 10; ++i)
4409       ;
4410   }
4411 #pragma omp target parallel
4412   {
4413 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4414     for (int i = 0; i < 10; ++i)
4415       ;
4416   }
4417 
4418 // TARGET PARALLEL FOR DIRECTIVE
4419 #pragma omp target parallel for
4420   for (int i = 0; i < 10; ++i) {
4421 #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?}}
4422     for (int i = 0; i < 10; ++i)
4423       ;
4424   }
4425 #pragma omp target parallel for
4426   for (int i = 0; i < 10; ++i) {
4427 #pragma omp simd
4428     for (int i = 0; i < 10; ++i)
4429       ;
4430   }
4431 #pragma omp target parallel for
4432   for (int i = 0; i < 10; ++i) {
4433 #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?}}
4434     for (int i = 0; i < 10; ++i)
4435       ;
4436   }
4437 #pragma omp target parallel for
4438   for (int i = 0; i < 10; ++i) {
4439 #pragma omp parallel
4440     for (int i = 0; i < 10; ++i)
4441       ;
4442   }
4443 #pragma omp target parallel for
4444   for (int i = 0; i < 10; ++i) {
4445 #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?}}
4446     {
4447       bar();
4448     }
4449   }
4450 #pragma omp target parallel for
4451   for (int i = 0; i < 10; ++i) {
4452 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
4453     {
4454       bar();
4455     }
4456   }
4457 #pragma omp target parallel for
4458   for (int i = 0; i < 10; ++i) {
4459 #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?}}
4460     {
4461       bar();
4462     }
4463   }
4464 
4465 #pragma omp target parallel for
4466   for (int i = 0; i < 10; ++i) {
4467 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4468     {
4469       bar();
4470     }
4471   }
4472 
4473 #pragma omp target parallel for
4474   for (int i = 0; i < 10; ++i) {
4475 #pragma omp critical
4476     {
4477       bar();
4478     }
4479   }
4480 
4481 #pragma omp target parallel for
4482   for (int i = 0; i < 10; ++i) {
4483 #pragma omp parallel
4484     {
4485 #pragma omp single // OK
4486       {
4487         bar();
4488       }
4489 #pragma omp for // OK
4490       for (int i = 0; i < 10; ++i)
4491         ;
4492 #pragma omp for simd // OK
4493       for (int i = 0; i < 10; ++i)
4494         ;
4495 #pragma omp sections // OK
4496       {
4497         bar();
4498       }
4499     }
4500   }
4501 #pragma omp target parallel for
4502   for (int i = 0; i < 10; ++i) {
4503 #pragma omp parallel for
4504     for (int i = 0; i < 10; ++i)
4505       ;
4506   }
4507 #pragma omp target parallel for
4508   for (int i = 0; i < 10; ++i) {
4509 #pragma omp parallel for simd
4510     for (int i = 0; i < 10; ++i)
4511       ;
4512   }
4513 #pragma omp target parallel for
4514   for (int i = 0; i < 10; ++i) {
4515 #pragma omp parallel sections
4516     {
4517       bar();
4518     }
4519   }
4520 #pragma omp target parallel for
4521   for (int i = 0; i < 10; ++i) {
4522 #pragma omp task
4523     {
4524       bar();
4525     }
4526   }
4527 #pragma omp target parallel for
4528   for (int i = 0; i < 10; ++i) {
4529 #pragma omp taskyield
4530     bar();
4531   }
4532 #pragma omp target parallel for
4533   for (int i = 0; i < 10; ++i) {
4534 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4535     bar();
4536   }
4537 #pragma omp target parallel for
4538   for (int i = 0; i < 10; ++i) {
4539 #pragma omp taskwait
4540     bar();
4541   }
4542 #pragma omp target parallel for
4543   for (int i = 0; i < 10; ++i) {
4544 #pragma omp flush
4545     bar();
4546   }
4547 #pragma omp target parallel for
4548   for (int i = 0; i < 10; ++i) {
4549 #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?}}
4550     bar();
4551   }
4552 #pragma omp target parallel for ordered
4553   for (int i = 0; i < 10; ++i) {
4554 #pragma omp ordered // OK
4555     bar();
4556   }
4557 #pragma omp target parallel for
4558   for (int i = 0; i < 10; ++i) {
4559 #pragma omp atomic
4560     ++a;
4561   }
4562 #pragma omp target parallel for
4563   for (int i = 0; i < 10; ++i) {
4564 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
4565     ++a;
4566   }
4567 #pragma omp target parallel for
4568   for (int i = 0; i < 10; ++i) {
4569 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
4570     ++a;
4571   }
4572 #pragma omp target parallel for
4573   for (int i = 0; i < 10; ++i) {
4574 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4575     for (int i = 0; i < 10; ++i)
4576       ;
4577   }
4578 #pragma omp target parallel for
4579   for (int i = 0; i < 10; ++i) {
4580 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4581     ++a;
4582   }
4583 #pragma omp target parallel for
4584   for (int i = 0; i < 10; ++i) {
4585 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4586     ++a;
4587   }
4588 #pragma omp target parallel for
4589   for (int i = 0; i < 10; ++i) {
4590 #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?}}
4591     ++a;
4592   }
4593 #pragma omp target parallel for
4594   for (int i = 0; i < 10; ++i) {
4595 #pragma omp taskloop
4596   for (int i = 0; i < 10; ++i)
4597     ++a;
4598   }
4599 #pragma omp target parallel for
4600   for (int i = 0; i < 10; ++i) {
4601 #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?}}
4602     for (int j = 0; j < 10; ++j)
4603       ;
4604   }
4605 #pragma omp target parallel for
4606   for (int i = 0; i < 10; ++i) {
4607 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4608   }
4609 #pragma omp target parallel for
4610   for (int i = 0; i < 10; ++i) {
4611 #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?}}
4612     for (int j = 0; j < 10; ++j)
4613       ;
4614   }
4615 #pragma omp target parallel for
4616   for (int i = 0; i < 10; ++i) {
4617 #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?}}
4618     for (int j = 0; j < 10; ++j)
4619       ;
4620   }
4621 #pragma omp target parallel for
4622   for (int i = 0; i < 10; ++i) {
4623 #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?}}
4624     for (int j = 0; j < 10; ++j)
4625       ;
4626   }
4627 #pragma omp target parallel for
4628   for (int i = 0; i < 10; ++i) {
4629 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4630     for (int j = 0; j < 10; ++j)
4631       ;
4632   }
4633 #pragma omp target parallel for
4634   for (int i = 0; i < 10; ++i) {
4635 #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?}}
4636     for (int j = 0; j < 10; ++j)
4637       ;
4638   }
4639 #pragma omp target parallel for
4640   for (int i = 0; i < 10; ++i) {
4641 #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?}}
4642     for (int j = 0; j < 10; ++j)
4643       ;
4644   }
4645 #pragma omp target parallel for
4646   for (int i = 0; i < 10; ++i) {
4647 #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?}}
4648     for (int j = 0; j < 10; ++j)
4649       ;
4650   }
4651 #pragma omp target parallel for
4652   for (int i = 0; i < 10; ++i) {
4653 #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?}}
4654     for (int j = 0; j < 10; ++j)
4655       ;
4656   }
4657 #pragma omp target parallel for
4658   for (int i = 0; i < 10; ++i) {
4659 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
4660     a++;
4661   }
4662 #pragma omp target parallel for
4663   for (int i = 0; i < 10; ++i) {
4664 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
4665     for (int j = 0; j < 10; ++j)
4666       ;
4667   }
4668 #pragma omp target parallel for
4669   for (int i = 0; i < 10; ++i) {
4670 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4671     for (int j = 0; j < 10; ++j)
4672       ;
4673   }
4674 #pragma omp target parallel for
4675   for (int i = 0; i < 10; ++i) {
4676 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4677     for (int j = 0; j < 10; ++j)
4678       ;
4679   }
4680 #pragma omp target parallel for
4681   for (int i = 0; i < 10; ++i) {
4682 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4683     for (int j = 0; j < 10; ++j)
4684       ;
4685   }
4686 
4687 // TEAMS DIRECTIVE
4688 #pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
4689   bar();
4690 #pragma omp target
4691 #pragma omp teams
4692 #pragma omp parallel
4693   bar();
4694 #pragma omp target
4695 #pragma omp teams
4696 #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?}}
4697   for (int i = 0; i < 10; ++i)
4698     ;
4699 #pragma omp target
4700 #pragma omp teams
4701 #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?}}
4702   for (int i = 0; i < 10; ++i)
4703     ;
4704 #pragma omp target
4705 #pragma omp teams
4706 #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?}}
4707   for (int i = 0; i < 10; ++i)
4708     ;
4709 #pragma omp target
4710 #pragma omp teams
4711 #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?}}
4712   {
4713     bar();
4714   }
4715 #pragma omp target
4716 #pragma omp teams
4717 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
4718   {
4719     bar();
4720   }
4721 #pragma omp target
4722 #pragma omp teams
4723 #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?}}
4724   bar();
4725 
4726 #pragma omp target
4727 #pragma omp teams
4728 #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?}}
4729   {
4730     bar();
4731   }
4732 #pragma omp target
4733 #pragma omp teams
4734 #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?}}
4735   {
4736     bar();
4737   }
4738 #pragma omp target
4739 #pragma omp teams
4740 #pragma omp parallel for
4741   for (int i = 0; i < 10; ++i)
4742     ;
4743 #pragma omp target
4744 #pragma omp teams
4745 #pragma omp parallel for simd
4746   for (int i = 0; i < 10; ++i)
4747     ;
4748 #pragma omp target
4749 #pragma omp teams
4750 #pragma omp parallel sections
4751   {
4752     bar();
4753   }
4754 #pragma omp target
4755 #pragma omp teams
4756 #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?}}
4757   {
4758     bar();
4759   }
4760 #pragma omp target
4761 #pragma omp teams
4762   {
4763 #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?}}
4764     bar();
4765   }
4766 #pragma omp target
4767 #pragma omp teams
4768   {
4769 #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?}}
4770     bar();
4771   }
4772 #pragma omp target
4773 #pragma omp teams
4774   {
4775 #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?}}
4776     bar();
4777   }
4778 #pragma omp target
4779 #pragma omp teams
4780   {
4781 #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?}}
4782     bar();
4783   }
4784 #pragma omp target
4785 #pragma omp teams
4786   {
4787 #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?}}
4788     bar();
4789   }
4790 #pragma omp target
4791 #pragma omp teams
4792   {
4793 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
4794     ++a;
4795   }
4796 #pragma omp target
4797 #pragma omp teams
4798   {
4799 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4800     ++a;
4801   }
4802 #pragma omp target
4803 #pragma omp teams
4804   {
4805 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4806     ++a;
4807   }
4808 #pragma omp target
4809 #pragma omp teams
4810 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4811   for (int i = 0; i < 10; ++i)
4812     ;
4813 #pragma omp target
4814 #pragma omp teams
4815   {
4816 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4817     ++a;
4818   }
4819 #pragma omp target
4820 #pragma omp teams
4821   {
4822 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4823     ++a;
4824   }
4825 #pragma omp target
4826 #pragma omp teams
4827   {
4828 #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?}}
4829     ++a;
4830   }
4831 #pragma omp target
4832 #pragma omp teams
4833   {
4834 #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?}}
4835   for (int i = 0; i < 10; ++i)
4836     ++a;
4837   }
4838 #pragma omp target
4839 #pragma omp teams
4840 #pragma omp distribute
4841   for (int i = 0; i < 10; ++i)
4842     ;
4843 #pragma omp target
4844 #pragma omp teams
4845 #pragma omp distribute
4846   for (int i = 0; i < 10; ++i)
4847     ;
4848 #pragma omp distribute
4849   for (int j = 0; j < 10; ++j)
4850     ;
4851 #pragma omp target
4852 #pragma omp teams
4853   {
4854 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4855   }
4856 #pragma omp target
4857 #pragma omp teams
4858   {
4859 #pragma omp distribute parallel for
4860   for (int i = 0; i < 10; ++i)
4861     ;
4862 #pragma omp distribute parallel for
4863   for (int j = 0; j < 10; ++j)
4864     ;
4865   }
4866 #pragma omp target
4867 #pragma omp teams
4868   {
4869 #pragma omp distribute parallel for simd
4870   for (int i = 0; i < 10; ++i)
4871     ;
4872 #pragma omp distribute parallel for simd
4873   for (int j = 0; j < 10; ++j)
4874     ;
4875   }
4876 #pragma omp target
4877 #pragma omp teams
4878   {
4879 #pragma omp distribute simd
4880   for (int i = 0; i < 10; ++i)
4881     ;
4882 #pragma omp distribute simd
4883   for (int j = 0; j < 10; ++j)
4884     ;
4885   }
4886 #pragma omp target
4887 #pragma omp teams
4888   {
4889 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4890   for (int i = 0; i < 10; ++i)
4891     ;
4892   }
4893 #pragma omp target
4894 #pragma omp teams
4895   {
4896 #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?}}
4897   for (int i = 0; i < 10; ++i)
4898     ;
4899   }
4900 #pragma omp target
4901 #pragma omp teams
4902   {
4903 #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?}}
4904   for (int i = 0; i < 10; ++i)
4905     ;
4906   }
4907 #pragma omp target
4908 #pragma omp teams
4909   {
4910 #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?}}
4911   for (int i = 0; i < 10; ++i)
4912     ;
4913   }
4914 #pragma omp target
4915 #pragma omp teams
4916   {
4917 #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?}}
4918   for (int i = 0; i < 10; ++i)
4919     ;
4920   }
4921 #pragma omp target
4922 #pragma omp teams
4923   {
4924 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4925     a++;
4926   }
4927 #pragma omp target
4928 #pragma omp teams
4929   {
4930 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4931   for (int i = 0; i < 10; ++i)
4932     ;
4933   }
4934 #pragma omp target
4935 #pragma omp teams
4936   {
4937 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4938   for (int i = 0; i < 10; ++i)
4939     ;
4940   }
4941 #pragma omp target
4942 #pragma omp teams
4943   {
4944 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4945   for (int i = 0; i < 10; ++i)
4946     ;
4947   }
4948 #pragma omp target
4949 #pragma omp teams
4950   {
4951 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4952   for (int i = 0; i < 10; ++i)
4953     ;
4954   }
4955 
4956 // TASKLOOP DIRECTIVE
4957 #pragma omp taskloop
4958   for (int i = 0; i < 10; ++i) {
4959 #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?}}
4960     for (int i = 0; i < 10; ++i)
4961       ;
4962   }
4963 #pragma omp taskloop
4964   for (int i = 0; i < 10; ++i) {
4965 #pragma omp simd
4966     for (int i = 0; i < 10; ++i)
4967       ;
4968   }
4969 #pragma omp taskloop
4970   for (int i = 0; i < 10; ++i) {
4971 #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?}}
4972     for (int i = 0; i < 10; ++i)
4973       ;
4974   }
4975 #pragma omp taskloop
4976   for (int i = 0; i < 10; ++i) {
4977 #pragma omp parallel
4978     for (int i = 0; i < 10; ++i)
4979       ;
4980   }
4981 #pragma omp taskloop
4982   for (int i = 0; i < 10; ++i) {
4983 #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?}}
4984     {
4985       bar();
4986     }
4987   }
4988 #pragma omp taskloop
4989   for (int i = 0; i < 10; ++i) {
4990 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
4991     {
4992       bar();
4993     }
4994   }
4995 #pragma omp taskloop
4996   for (int i = 0; i < 10; ++i) {
4997 #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?}}
4998     {
4999       bar();
5000     }
5001   }
5002 
5003 #pragma omp taskloop
5004   for (int i = 0; i < 10; ++i) {
5005 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5006     {
5007       bar();
5008     }
5009   }
5010 #pragma omp taskloop
5011   for (int i = 0; i < 10; ++i) {
5012 #pragma omp critical
5013     {
5014       bar();
5015     }
5016   }
5017 #pragma omp taskloop
5018   for (int i = 0; i < 10; ++i) {
5019 #pragma omp parallel
5020     {
5021 #pragma omp single // OK
5022       {
5023         bar();
5024       }
5025 #pragma omp for // OK
5026       for (int i = 0; i < 10; ++i)
5027         ;
5028 #pragma omp sections // OK
5029       {
5030         bar();
5031       }
5032     }
5033   }
5034 #pragma omp taskloop
5035   for (int i = 0; i < 10; ++i) {
5036 #pragma omp parallel for
5037     for (int i = 0; i < 10; ++i)
5038       ;
5039   }
5040 #pragma omp taskloop
5041   for (int i = 0; i < 10; ++i) {
5042 #pragma omp parallel for simd
5043     for (int i = 0; i < 10; ++i)
5044       ;
5045   }
5046 #pragma omp taskloop
5047   for (int i = 0; i < 10; ++i) {
5048 #pragma omp parallel sections
5049     {
5050       bar();
5051     }
5052   }
5053 #pragma omp taskloop
5054   for (int i = 0; i < 10; ++i) {
5055 #pragma omp task
5056     {
5057       bar();
5058     }
5059   }
5060 #pragma omp taskloop
5061   for (int i = 0; i < 10; ++i) {
5062 #pragma omp taskyield
5063     bar();
5064   }
5065 #pragma omp taskloop
5066   for (int i = 0; i < 10; ++i) {
5067 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5068     bar();
5069   }
5070 #pragma omp taskloop
5071   for (int i = 0; i < 10; ++i) {
5072 #pragma omp taskwait
5073     bar();
5074   }
5075 #pragma omp taskloop
5076   for (int i = 0; i < 10; ++i) {
5077 #pragma omp flush
5078     bar();
5079   }
5080 #pragma omp taskloop
5081   for (int i = 0; i < 10; ++i) {
5082 #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?}}
5083     bar();
5084   }
5085 #pragma omp taskloop
5086   for (int i = 0; i < 10; ++i) {
5087 #pragma omp atomic
5088     ++a;
5089   }
5090 #pragma omp taskloop
5091   for (int i = 0; i < 10; ++i) {
5092 #pragma omp target
5093     ++a;
5094   }
5095 #pragma omp taskloop
5096   for (int i = 0; i < 10; ++i) {
5097 #pragma omp target parallel
5098     ++a;
5099   }
5100 #pragma omp taskloop
5101   for (int i = 0; i < 10; ++i) {
5102 #pragma omp target parallel for
5103     for (int i = 0; i < 10; ++i)
5104       ;
5105   }
5106 #pragma omp taskloop
5107   for (int i = 0; i < 10; ++i) {
5108 #pragma omp target enter data map(to: a)
5109     ++a;
5110   }
5111 #pragma omp taskloop
5112   for (int i = 0; i < 10; ++i) {
5113 #pragma omp target exit data map(from: a)
5114     ++a;
5115   }
5116 #pragma omp taskloop
5117   for (int i = 0; i < 10; ++i) {
5118 #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?}}
5119     ++a;
5120   }
5121 #pragma omp taskloop
5122   for (int i = 0; i < 10; ++i) {
5123 #pragma omp taskloop
5124   for (int i = 0; i < 10; ++i)
5125     ++a;
5126   }
5127 #pragma omp taskloop
5128   for (int i = 0; i < 10; ++i) {
5129 #pragma omp target update to(a)
5130     bar();
5131   }
5132 #pragma omp taskloop
5133   for (int i = 0; i < 10; ++i) {
5134 #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?}}
5135   for (int j = 0; j < 10; ++j)
5136     ++a;
5137   }
5138 #pragma omp taskloop
5139   for (int i = 0; i < 10; ++i) {
5140 #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?}}
5141   for (int j = 0; j < 10; ++j)
5142     ++a;
5143   }
5144 #pragma omp taskloop
5145   for (int i = 0; i < 10; ++i) {
5146 #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?}}
5147   for (int j = 0; j < 10; ++j)
5148     ++a;
5149   }
5150 #pragma omp taskloop
5151   for (int i = 0; i < 10; ++i) {
5152 #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?}}
5153   for (int j = 0; j < 10; ++j)
5154     ++a;
5155   }
5156 #pragma omp taskloop
5157   for (int i = 0; i < 10; ++i) {
5158 #pragma omp target simd // OK
5159   for (int j = 0; j < 10; ++j)
5160     ++a;
5161   }
5162 #pragma omp taskloop
5163   for (int i = 0; i < 10; ++i) {
5164 #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?}}
5165   for (int j = 0; j < 10; ++j)
5166     ++a;
5167   }
5168 #pragma omp taskloop
5169   for (int i = 0; i < 10; ++i) {
5170 #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?}}
5171   for (int j = 0; j < 10; ++j)
5172     ++a;
5173   }
5174 #pragma omp taskloop
5175   for (int i = 0; i < 10; ++i) {
5176 #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?}}
5177   for (int j = 0; j < 10; ++j)
5178     ++a;
5179   }
5180 #pragma omp taskloop
5181   for (int i = 0; i < 10; ++i) {
5182 #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?}}
5183   for (int j = 0; j < 10; ++j)
5184     ++a;
5185   }
5186 #pragma omp taskloop
5187   for (int i = 0; i < 10; ++i) {
5188 #pragma omp target teams // OK
5189     ++a;
5190   }
5191 #pragma omp taskloop
5192   for (int i = 0; i < 10; ++i) {
5193 #pragma omp target teams distribute // OK
5194   for (int j = 0; j < 10; ++j)
5195     ++a;
5196   }
5197 #pragma omp taskloop
5198   for (int i = 0; i < 10; ++i) {
5199 #pragma omp target teams distribute parallel for // OK
5200   for (int j = 0; j < 10; ++j)
5201     ++a;
5202   }
5203 #pragma omp taskloop
5204   for (int i = 0; i < 10; ++i) {
5205 #pragma omp target teams distribute parallel for simd // OK
5206   for (int j = 0; j < 10; ++j)
5207     ++a;
5208   }
5209 #pragma omp taskloop
5210   for (int i = 0; i < 10; ++i) {
5211 #pragma omp target teams distribute simd // OK
5212   for (int j = 0; j < 10; ++j)
5213     ++a;
5214   }
5215 
5216 // DISTRIBUTE DIRECTIVE
5217 #pragma omp target
5218 #pragma omp teams
5219 #pragma omp distribute
5220   for (int i = 0; i < 10; ++i) {
5221 #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?}}
5222     for (int i = 0; i < 10; ++i)
5223       ;
5224   }
5225 #pragma omp target
5226 #pragma omp teams
5227 #pragma omp distribute
5228   for (int i = 0; i < 10; ++i) {
5229 #pragma omp for
5230     for (int i = 0; i < 10; ++i)
5231       ;
5232   }
5233 #pragma omp target
5234 #pragma omp teams
5235 #pragma omp distribute
5236   for (int i = 0; i < 10; ++i) {
5237 #pragma omp simd
5238     for (int i = 0; i < 10; ++i)
5239       ;
5240   }
5241 #pragma omp target
5242 #pragma omp teams
5243 #pragma omp distribute
5244   for (int i = 0; i < 10; ++i) {
5245 #pragma omp for simd
5246     for (int i = 0; i < 10; ++i)
5247       ;
5248   }
5249 #pragma omp target
5250 #pragma omp teams
5251 #pragma omp distribute
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
5258 #pragma omp teams
5259 #pragma omp distribute
5260   for (int i = 0; i < 10; ++i) {
5261 #pragma omp sections
5262     {
5263       bar();
5264     }
5265   }
5266 #pragma omp target
5267 #pragma omp teams
5268 #pragma omp distribute
5269   for (int i = 0; i < 10; ++i) {
5270 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
5271     {
5272       bar();
5273     }
5274   }
5275 #pragma omp target
5276 #pragma omp teams
5277 #pragma omp distribute
5278   for (int i = 0; i < 10; ++i) {
5279 #pragma omp single
5280     {
5281       bar();
5282     }
5283   }
5284 #pragma omp target
5285 #pragma omp teams
5286 #pragma omp distribute
5287   for (int i = 0; i < 10; ++i) {
5288 #pragma omp master
5289     {
5290       bar();
5291     }
5292   }
5293 #pragma omp target
5294 #pragma omp teams
5295 #pragma omp distribute
5296   for (int i = 0; i < 10; ++i) {
5297 #pragma omp critical
5298     {
5299       bar();
5300     }
5301   }
5302 #pragma omp target
5303 #pragma omp teams
5304 #pragma omp distribute
5305   for (int i = 0; i < 10; ++i) {
5306 #pragma omp parallel
5307     {
5308 #pragma omp single
5309       {
5310 	bar();
5311       }
5312     }
5313   }
5314 #pragma omp target
5315 #pragma omp teams
5316 #pragma omp distribute
5317   for (int i = 0; i < 10; ++i) {
5318 #pragma omp parallel for
5319     for (int i = 0; i < 10; ++i)
5320       ;
5321   }
5322 #pragma omp target
5323 #pragma omp teams
5324 #pragma omp distribute
5325   for (int i = 0; i < 10; ++i) {
5326 #pragma omp parallel for simd
5327     for (int i = 0; i < 10; ++i)
5328       ;
5329   }
5330 #pragma omp target
5331 #pragma omp teams
5332 #pragma omp distribute
5333   for (int i = 0; i < 10; ++i) {
5334 #pragma omp parallel sections
5335     {
5336       bar();
5337     }
5338   }
5339 #pragma omp target
5340 #pragma omp teams
5341 #pragma omp distribute
5342   for (int i = 0; i < 10; ++i) {
5343 #pragma omp task
5344     {
5345       bar();
5346     }
5347   }
5348 #pragma omp target
5349 #pragma omp teams
5350 #pragma omp distribute
5351   for (int i = 0; i < 10; ++i) {
5352 #pragma omp taskyield
5353     bar();
5354   }
5355 #pragma omp target
5356 #pragma omp teams
5357 #pragma omp distribute
5358   for (int i = 0; i < 10; ++i) {
5359 #pragma omp barrier
5360     bar();
5361   }
5362 #pragma omp target
5363 #pragma omp teams
5364 #pragma omp distribute
5365   for (int i = 0; i < 10; ++i) {
5366 #pragma omp taskwait
5367     bar();
5368   }
5369 #pragma omp target
5370 #pragma omp teams
5371 #pragma omp distribute
5372   for (int i = 0; i < 10; ++i) {
5373 #pragma omp flush
5374     bar();
5375   }
5376 #pragma omp target
5377 #pragma omp teams
5378 #pragma omp distribute
5379   for (int i = 0; i < 10; ++i) {
5380 #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?}}
5381     bar();
5382   }
5383 #pragma omp target
5384 #pragma omp teams
5385 #pragma omp distribute
5386   for (int i = 0; i < 10; ++i) {
5387 #pragma omp atomic
5388     ++a;
5389   }
5390 #pragma omp target
5391 #pragma omp teams
5392 #pragma omp distribute
5393   for (int i = 0; i < 10; ++i) {
5394 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5395     ++a;
5396   }
5397 #pragma omp target
5398 #pragma omp teams
5399 #pragma omp distribute
5400   for (int i = 0; i < 10; ++i) {
5401 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5402     ++a;
5403   }
5404 #pragma omp target
5405 #pragma omp teams
5406 #pragma omp distribute
5407   for (int i = 0; i < 10; ++i) {
5408 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5409     for (int i = 0; i < 10; ++i)
5410       ;
5411   }
5412 #pragma omp target
5413 #pragma omp teams
5414 #pragma omp distribute
5415   for (int i = 0; i < 10; ++i) {
5416 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5417     ++a;
5418   }
5419 #pragma omp target
5420 #pragma omp teams
5421 #pragma omp distribute
5422   for (int i = 0; i < 10; ++i) {
5423 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5424     ++a;
5425   }
5426 #pragma omp target
5427 #pragma omp teams
5428 #pragma omp distribute
5429   for (int i = 0; i < 10; ++i) {
5430 #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?}}
5431     ++a;
5432   }
5433 #pragma omp target
5434 #pragma omp teams
5435 #pragma omp distribute
5436   for (int i = 0; i < 10; ++i) {
5437 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5438     ++a;
5439   }
5440 #pragma omp target
5441 #pragma omp teams
5442 #pragma omp distribute
5443   for (int i = 0; i < 10; ++i) {
5444 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5445     for (int j = 0; j < 10; ++j)
5446       ;
5447   }
5448 #pragma omp target
5449 #pragma omp teams
5450 #pragma omp distribute
5451   for (int i = 0; i < 10; ++i) {
5452 #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?}}
5453     for (int j = 0; j < 10; ++j)
5454       ;
5455   }
5456 #pragma omp target
5457 #pragma omp teams
5458 #pragma omp distribute
5459   for (int i = 0; i < 10; ++i) {
5460 #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?}}
5461     for (int j = 0; j < 10; ++j)
5462       ;
5463   }
5464 #pragma omp target
5465 #pragma omp teams
5466 #pragma omp distribute
5467   for (int i = 0; i < 10; ++i) {
5468 #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?}}
5469     for (int j = 0; j < 10; ++j)
5470       ;
5471   }
5472 #pragma omp target
5473 #pragma omp teams
5474 #pragma omp distribute
5475   for (int i = 0; i < 10; ++i) {
5476 #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?}}
5477     for (int j = 0; j < 10; ++j)
5478       ;
5479   }
5480 #pragma omp target
5481 #pragma omp teams
5482 #pragma omp distribute
5483   for (int i = 0; i < 10; ++i) {
5484 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5485     a++;
5486   }
5487 #pragma omp target
5488 #pragma omp teams
5489 #pragma omp distribute
5490   for (int i = 0; i < 10; ++i) {
5491 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5492     for (int j = 0; j < 10; ++j)
5493       ;
5494   }
5495 #pragma omp target
5496 #pragma omp teams
5497 #pragma omp distribute
5498   for (int i = 0; i < 10; ++i) {
5499 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5500     for (int j = 0; j < 10; ++j)
5501       ;
5502   }
5503 #pragma omp target
5504 #pragma omp teams
5505 #pragma omp distribute
5506   for (int i = 0; i < 10; ++i) {
5507 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5508     for (int j = 0; j < 10; ++j)
5509       ;
5510   }
5511 #pragma omp target
5512 #pragma omp teams
5513 #pragma omp distribute
5514   for (int i = 0; i < 10; ++i) {
5515 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5516     for (int j = 0; j < 10; ++j)
5517       ;
5518   }
5519 
5520 // DISTRIBUTE PARALLEL FOR DIRECTIVE
5521 #pragma omp target
5522 #pragma omp teams
5523 #pragma omp distribute parallel for
5524   for (int i = 0; i < 10; ++i) {
5525 #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?}}
5526     for (int i = 0; i < 10; ++i)
5527       ;
5528   }
5529 #pragma omp target
5530 #pragma omp teams
5531 #pragma omp distribute parallel for
5532   for (int i = 0; i < 10; ++i) {
5533 #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?}}
5534     for (int i = 0; i < 10; ++i)
5535       ;
5536   }
5537 #pragma omp target
5538 #pragma omp teams
5539 #pragma omp distribute parallel for
5540   for (int i = 0; i < 10; ++i) {
5541 #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?}}
5542     for (int i = 0; i < 10; ++i)
5543       ;
5544   }
5545 #pragma omp target
5546 #pragma omp teams
5547 #pragma omp distribute parallel for
5548   for (int i = 0; i < 10; ++i) {
5549 #pragma omp simd
5550     for (int i = 0; i < 10; ++i)
5551       ;
5552   }
5553 #pragma omp target
5554 #pragma omp teams
5555 #pragma omp distribute parallel for
5556   for (int i = 0; i < 10; ++i) {
5557 #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?}}
5558     for (int i = 0; i < 10; ++i)
5559       ;
5560   }
5561 #pragma omp target
5562 #pragma omp teams
5563 #pragma omp distribute parallel for
5564   for (int i = 0; i < 10; ++i) {
5565 #pragma omp parallel
5566     for (int i = 0; i < 10; ++i)
5567       ;
5568   }
5569 #pragma omp target
5570 #pragma omp teams
5571 #pragma omp distribute parallel for
5572   for (int i = 0; i < 10; ++i) {
5573 #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?}}
5574     {
5575       bar();
5576     }
5577   }
5578 #pragma omp target
5579 #pragma omp teams
5580 #pragma omp distribute parallel for
5581   for (int i = 0; i < 10; ++i) {
5582 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
5583     {
5584       bar();
5585     }
5586   }
5587 #pragma omp target
5588 #pragma omp teams
5589 #pragma omp distribute parallel for
5590   for (int i = 0; i < 10; ++i) {
5591 #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?}}
5592     {
5593       bar();
5594     }
5595   }
5596 #pragma omp target
5597 #pragma omp teams
5598 #pragma omp distribute parallel for
5599   for (int i = 0; i < 10; ++i) {
5600 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5601     {
5602       bar();
5603     }
5604   }
5605 #pragma omp target
5606 #pragma omp teams
5607 #pragma omp distribute parallel for
5608   for (int i = 0; i < 10; ++i) {
5609 #pragma omp critical
5610     {
5611       bar();
5612     }
5613   }
5614 #pragma omp target
5615 #pragma omp teams
5616 #pragma omp distribute parallel for
5617   for (int i = 0; i < 10; ++i) {
5618 #pragma omp parallel
5619     {
5620 #pragma omp single
5621       {
5622 	bar();
5623       }
5624     }
5625   }
5626 #pragma omp target
5627 #pragma omp teams
5628 #pragma omp distribute parallel for
5629   for (int i = 0; i < 10; ++i) {
5630 #pragma omp parallel for
5631     for (int i = 0; i < 10; ++i)
5632       ;
5633   }
5634 #pragma omp target
5635 #pragma omp teams
5636 #pragma omp distribute parallel for
5637   for (int i = 0; i < 10; ++i) {
5638 #pragma omp parallel for simd
5639     for (int i = 0; i < 10; ++i)
5640       ;
5641   }
5642 #pragma omp target
5643 #pragma omp teams
5644 #pragma omp distribute parallel for
5645   for (int i = 0; i < 10; ++i) {
5646 #pragma omp parallel sections
5647     {
5648       bar();
5649     }
5650   }
5651 #pragma omp target
5652 #pragma omp teams
5653 #pragma omp distribute parallel for
5654   for (int i = 0; i < 10; ++i) {
5655 #pragma omp task
5656     {
5657       bar();
5658     }
5659   }
5660 #pragma omp target
5661 #pragma omp teams
5662 #pragma omp distribute parallel for
5663   for (int i = 0; i < 10; ++i) {
5664 #pragma omp taskyield
5665     bar();
5666   }
5667 #pragma omp target
5668 #pragma omp teams
5669 #pragma omp distribute parallel for
5670   for (int i = 0; i < 10; ++i) {
5671 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5672     bar();
5673   }
5674 #pragma omp target
5675 #pragma omp teams
5676 #pragma omp distribute parallel for
5677   for (int i = 0; i < 10; ++i) {
5678 #pragma omp taskwait
5679     bar();
5680   }
5681 #pragma omp target
5682 #pragma omp teams
5683 #pragma omp distribute parallel for
5684   for (int i = 0; i < 10; ++i) {
5685 #pragma omp flush
5686     bar();
5687   }
5688 #pragma omp target
5689 #pragma omp teams
5690 #pragma omp distribute parallel for
5691   for (int i = 0; i < 10; ++i) {
5692 #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?}}
5693     bar();
5694   }
5695 #pragma omp target
5696 #pragma omp teams
5697 #pragma omp distribute parallel for
5698   for (int i = 0; i < 10; ++i) {
5699 #pragma omp atomic
5700     ++a;
5701   }
5702 #pragma omp target
5703 #pragma omp teams
5704 #pragma omp distribute parallel for
5705   for (int i = 0; i < 10; ++i) {
5706 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5707     ++a;
5708   }
5709 #pragma omp target
5710 #pragma omp teams
5711 #pragma omp distribute parallel for
5712   for (int i = 0; i < 10; ++i) {
5713 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5714     ++a;
5715   }
5716 #pragma omp target
5717 #pragma omp teams
5718 #pragma omp distribute parallel for
5719   for (int i = 0; i < 10; ++i) {
5720 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5721     for (int i = 0; i < 10; ++i)
5722       ;
5723   }
5724 #pragma omp target
5725 #pragma omp teams
5726 #pragma omp distribute parallel for
5727   for (int i = 0; i < 10; ++i) {
5728 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5729     ++a;
5730   }
5731 #pragma omp target
5732 #pragma omp teams
5733 #pragma omp distribute parallel for
5734   for (int i = 0; i < 10; ++i) {
5735 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5736     ++a;
5737   }
5738 #pragma omp target
5739 #pragma omp teams
5740 #pragma omp distribute parallel for
5741   for (int i = 0; i < 10; ++i) {
5742 #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?}}
5743     ++a;
5744   }
5745 #pragma omp target
5746 #pragma omp teams
5747 #pragma omp distribute parallel for
5748   for (int i = 0; i < 10; ++i) {
5749 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5750     ++a;
5751   }
5752 #pragma omp target
5753 #pragma omp teams
5754 #pragma omp distribute parallel for
5755   for (int i = 0; i < 10; ++i) {
5756 #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?}}
5757     for (int i = 0; i < 10; ++i)
5758       ;
5759   }
5760 #pragma omp target
5761 #pragma omp teams
5762 #pragma omp distribute parallel for
5763   for (int i = 0; i < 10; ++i) {
5764 #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?}}
5765     for (int i = 0; i < 10; ++i)
5766       ;
5767   }
5768 #pragma omp target
5769 #pragma omp teams
5770 #pragma omp distribute parallel for
5771   for (int i = 0; i < 10; ++i) {
5772 #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?}}
5773     for (int i = 0; i < 10; ++i)
5774       ;
5775   }
5776 #pragma omp target
5777 #pragma omp teams
5778 #pragma omp distribute parallel for
5779   for (int i = 0; i < 10; ++i) {
5780 #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?}}
5781     for (int i = 0; i < 10; ++i)
5782       ;
5783   }
5784 #pragma omp target
5785 #pragma omp teams
5786 #pragma omp distribute parallel for
5787   for (int i = 0; i < 10; ++i) {
5788 #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?}}
5789     for (int i = 0; i < 10; ++i)
5790       ;
5791   }
5792 #pragma omp target
5793 #pragma omp teams
5794 #pragma omp distribute parallel for
5795   for (int i = 0; i < 10; ++i) {
5796 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5797     a++;
5798   }
5799 #pragma omp target
5800 #pragma omp teams
5801 #pragma omp distribute parallel for
5802   for (int i = 0; i < 10; ++i) {
5803 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5804     for (int i = 0; i < 10; ++i)
5805       ;
5806   }
5807 #pragma omp target
5808 #pragma omp teams
5809 #pragma omp distribute parallel for
5810   for (int i = 0; i < 10; ++i) {
5811 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5812     for (int i = 0; i < 10; ++i)
5813       ;
5814   }
5815 #pragma omp target
5816 #pragma omp teams
5817 #pragma omp distribute parallel for
5818   for (int i = 0; i < 10; ++i) {
5819 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5820     for (int i = 0; i < 10; ++i)
5821       ;
5822   }
5823 #pragma omp target
5824 #pragma omp teams
5825 #pragma omp distribute parallel for
5826   for (int i = 0; i < 10; ++i) {
5827 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5828     for (int i = 0; i < 10; ++i)
5829       ;
5830   }
5831 
5832 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
5833 #pragma omp target
5834 #pragma omp teams
5835 #pragma omp distribute parallel for simd
5836   for (int i = 0; i < 10; ++i) {
5837 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5838     for (int i = 0; i < 10; ++i)
5839       ;
5840   }
5841 #pragma omp target
5842 #pragma omp teams
5843 #pragma omp distribute parallel for simd
5844   for (int i = 0; i < 10; ++i) {
5845 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5846     for (int i = 0; i < 10; ++i)
5847       ;
5848   }
5849 #pragma omp target
5850 #pragma omp teams
5851 #pragma omp distribute parallel for simd
5852   for (int i = 0; i < 10; ++i) {
5853 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5854     for (int i = 0; i < 10; ++i)
5855       ;
5856   }
5857 #pragma omp target
5858 #pragma omp teams
5859 #pragma omp distribute parallel for simd
5860   for (int i = 0; i < 10; ++i) {
5861 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5862     for (int i = 0; i < 10; ++i)
5863       ;
5864   }
5865 #pragma omp target
5866 #pragma omp teams
5867 #pragma omp distribute parallel for simd
5868   for (int i = 0; i < 10; ++i) {
5869 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5870     for (int i = 0; i < 10; ++i)
5871       ;
5872   }
5873 #pragma omp target
5874 #pragma omp teams
5875 #pragma omp distribute parallel for simd
5876   for (int i = 0; i < 10; ++i) {
5877 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5878     for (int i = 0; i < 10; ++i)
5879       ;
5880   }
5881 #pragma omp target
5882 #pragma omp teams
5883 #pragma omp distribute parallel for simd
5884   for (int i = 0; i < 10; ++i) {
5885 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5886     {
5887       bar();
5888     }
5889   }
5890 #pragma omp target
5891 #pragma omp teams
5892 #pragma omp distribute parallel for simd
5893   for (int i = 0; i < 10; ++i) {
5894 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5895     {
5896       bar();
5897     }
5898   }
5899 #pragma omp target
5900 #pragma omp teams
5901 #pragma omp distribute parallel for simd
5902   for (int i = 0; i < 10; ++i) {
5903 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5904     {
5905       bar();
5906     }
5907   }
5908 #pragma omp target
5909 #pragma omp teams
5910 #pragma omp distribute parallel for simd
5911   for (int i = 0; i < 10; ++i) {
5912 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5913     {
5914       bar();
5915     }
5916   }
5917 #pragma omp target
5918 #pragma omp teams
5919 #pragma omp distribute parallel for simd
5920   for (int i = 0; i < 10; ++i) {
5921 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5922     {
5923       bar();
5924     }
5925   }
5926 #pragma omp target
5927 #pragma omp teams
5928 #pragma omp distribute parallel for simd
5929   for (int i = 0; i < 10; ++i) {
5930 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5931     {
5932 #pragma omp single
5933       {
5934 	bar();
5935       }
5936     }
5937   }
5938 #pragma omp target
5939 #pragma omp teams
5940 #pragma omp distribute parallel for simd
5941   for (int i = 0; i < 10; ++i) {
5942 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5943     for (int i = 0; i < 10; ++i)
5944       ;
5945   }
5946 #pragma omp target
5947 #pragma omp teams
5948 #pragma omp distribute parallel for simd
5949   for (int i = 0; i < 10; ++i) {
5950 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5951     for (int i = 0; i < 10; ++i)
5952       ;
5953   }
5954 #pragma omp target
5955 #pragma omp teams
5956 #pragma omp distribute parallel for simd
5957   for (int i = 0; i < 10; ++i) {
5958 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5959     {
5960       bar();
5961     }
5962   }
5963 #pragma omp target
5964 #pragma omp teams
5965 #pragma omp distribute parallel for simd
5966   for (int i = 0; i < 10; ++i) {
5967 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5968     {
5969       bar();
5970     }
5971   }
5972 #pragma omp target
5973 #pragma omp teams
5974 #pragma omp distribute parallel for simd
5975   for (int i = 0; i < 10; ++i) {
5976 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5977     bar();
5978   }
5979 #pragma omp target
5980 #pragma omp teams
5981 #pragma omp distribute parallel for simd
5982   for (int i = 0; i < 10; ++i) {
5983 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5984     bar();
5985   }
5986 #pragma omp target
5987 #pragma omp teams
5988 #pragma omp distribute parallel for simd
5989   for (int i = 0; i < 10; ++i) {
5990 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5991     bar();
5992   }
5993 #pragma omp target
5994 #pragma omp teams
5995 #pragma omp distribute parallel for simd
5996   for (int i = 0; i < 10; ++i) {
5997 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5998     bar();
5999   }
6000 #pragma omp target
6001 #pragma omp teams
6002 #pragma omp distribute parallel for simd
6003   for (int i = 0; i < 10; ++i) {
6004 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6005     bar();
6006   }
6007 #pragma omp target
6008 #pragma omp teams
6009 #pragma omp distribute parallel for simd
6010   for (int i = 0; i < 10; ++i) {
6011 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6012     ++a;
6013   }
6014 #pragma omp target
6015 #pragma omp teams
6016 #pragma omp distribute parallel for simd
6017   for (int i = 0; i < 10; ++i) {
6018 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6019     ++a;
6020   }
6021 #pragma omp target
6022 #pragma omp teams
6023 #pragma omp distribute parallel for simd
6024   for (int i = 0; i < 10; ++i) {
6025 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6026     ++a;
6027   }
6028 #pragma omp target
6029 #pragma omp teams
6030 #pragma omp distribute parallel for simd
6031   for (int i = 0; i < 10; ++i) {
6032 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6033     for (int i = 0; i < 10; ++i)
6034       ;
6035   }
6036 #pragma omp target
6037 #pragma omp teams
6038 #pragma omp distribute parallel for simd
6039   for (int i = 0; i < 10; ++i) {
6040 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6041     ++a;
6042   }
6043 #pragma omp target
6044 #pragma omp teams
6045 #pragma omp distribute parallel for simd
6046   for (int i = 0; i < 10; ++i) {
6047 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6048     ++a;
6049   }
6050 #pragma omp target
6051 #pragma omp teams
6052 #pragma omp distribute parallel for simd
6053   for (int i = 0; i < 10; ++i) {
6054 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6055     ++a;
6056   }
6057 #pragma omp target
6058 #pragma omp teams
6059 #pragma omp distribute parallel for simd
6060   for (int i = 0; i < 10; ++i) {
6061 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6062     ++a;
6063   }
6064 #pragma omp target
6065 #pragma omp teams
6066 #pragma omp distribute parallel for simd
6067   for (int i = 0; i < 10; ++i) {
6068 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6069     for (int i = 0; i < 10; ++i)
6070       ++a;
6071   }
6072 #pragma omp target
6073 #pragma omp teams
6074 #pragma omp distribute parallel for simd
6075   for (int i = 0; i < 10; ++i) {
6076 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6077     for (int i = 0; i < 10; ++i)
6078       ++a;
6079   }
6080 #pragma omp target
6081 #pragma omp teams
6082 #pragma omp distribute parallel for simd
6083   for (int i = 0; i < 10; ++i) {
6084 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6085     for (int i = 0; i < 10; ++i)
6086       ++a;
6087   }
6088 #pragma omp target
6089 #pragma omp teams
6090 #pragma omp distribute parallel for simd
6091   for (int i = 0; i < 10; ++i) {
6092 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6093     for (int i = 0; i < 10; ++i)
6094       ++a;
6095   }
6096 #pragma omp target
6097 #pragma omp teams
6098 #pragma omp distribute parallel for simd
6099   for (int i = 0; i < 10; ++i) {
6100 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6101     for (int i = 0; i < 10; ++i)
6102       ++a;
6103   }
6104 #pragma omp target
6105 #pragma omp teams
6106 #pragma omp distribute parallel for simd
6107   for (int i = 0; i < 10; ++i) {
6108 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6109     for (int i = 0; i < 10; ++i)
6110       ++a;
6111   }
6112 #pragma omp target
6113 #pragma omp teams
6114 #pragma omp distribute parallel for simd
6115   for (int i = 0; i < 10; ++i) {
6116 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6117     ++a;
6118   }
6119 #pragma omp target
6120 #pragma omp teams
6121 #pragma omp distribute parallel for simd
6122   for (int i = 0; i < 10; ++i) {
6123 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6124     for (int i = 0; i < 10; ++i)
6125       ++a;
6126   }
6127 #pragma omp target
6128 #pragma omp teams
6129 #pragma omp distribute parallel for simd
6130   for (int i = 0; i < 10; ++i) {
6131 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6132     for (int i = 0; i < 10; ++i)
6133       ++a;
6134   }
6135 #pragma omp target
6136 #pragma omp teams
6137 #pragma omp distribute parallel for simd
6138   for (int i = 0; i < 10; ++i) {
6139 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6140     for (int i = 0; i < 10; ++i)
6141       ++a;
6142   }
6143 #pragma omp target
6144 #pragma omp teams
6145 #pragma omp distribute parallel for simd
6146   for (int i = 0; i < 10; ++i) {
6147 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6148     for (int i = 0; i < 10; ++i)
6149       ++a;
6150   }
6151 
6152 // TARGET SIMD DIRECTIVE
6153 #pragma omp target simd
6154   for (int i = 0; i < 10; ++i) {
6155 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6156     for (int i = 0; i < 10; ++i)
6157       ;
6158   }
6159 #pragma omp target simd
6160   for (int i = 0; i < 10; ++i) {
6161 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6162     for (int i = 0; i < 10; ++i)
6163       ;
6164   }
6165 #pragma omp target simd
6166   for (int i = 0; i < 10; ++i) {
6167 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6168     for (int i = 0; i < 10; ++i)
6169       ;
6170   }
6171 #pragma omp target simd
6172   for (int i = 0; i < 10; ++i) {
6173 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6174     for (int i = 0; i < 10; ++i)
6175       ;
6176   }
6177 #pragma omp target simd
6178   for (int i = 0; i < 10; ++i) {
6179 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6180     for (int i = 0; i < 10; ++i)
6181       ;
6182   }
6183 #pragma omp target simd
6184   for (int i = 0; i < 10; ++i) {
6185 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6186     for (int i = 0; i < 10; ++i)
6187       ;
6188   }
6189 #pragma omp target simd
6190   for (int i = 0; i < 10; ++i) {
6191 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6192     {
6193       bar();
6194     }
6195   }
6196 #pragma omp target simd
6197   for (int i = 0; i < 10; ++i) {
6198 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6199     {
6200       bar();
6201     }
6202   }
6203 #pragma omp target simd
6204   for (int i = 0; i < 10; ++i) {
6205 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6206     {
6207       bar();
6208     }
6209   }
6210 #pragma omp target simd
6211   for (int i = 0; i < 10; ++i) {
6212 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6213     {
6214       bar();
6215     }
6216   }
6217 #pragma omp target simd
6218   for (int i = 0; i < 10; ++i) {
6219 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6220     {
6221       bar();
6222     }
6223   }
6224 #pragma omp target simd
6225   for (int i = 0; i < 10; ++i) {
6226 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6227     {
6228 #pragma omp single
6229       {
6230 	bar();
6231       }
6232     }
6233   }
6234 #pragma omp target simd
6235   for (int i = 0; i < 10; ++i) {
6236 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6237     for (int i = 0; i < 10; ++i)
6238       ;
6239   }
6240 #pragma omp target simd
6241   for (int i = 0; i < 10; ++i) {
6242 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6243     for (int i = 0; i < 10; ++i)
6244       ;
6245   }
6246 #pragma omp target simd
6247   for (int i = 0; i < 10; ++i) {
6248 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6249     {
6250       bar();
6251     }
6252   }
6253 #pragma omp target simd
6254   for (int i = 0; i < 10; ++i) {
6255 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6256     {
6257       bar();
6258     }
6259   }
6260 #pragma omp target simd
6261   for (int i = 0; i < 10; ++i) {
6262 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6263     bar();
6264   }
6265 #pragma omp target simd
6266   for (int i = 0; i < 10; ++i) {
6267 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6268     bar();
6269   }
6270 #pragma omp target simd
6271   for (int i = 0; i < 10; ++i) {
6272 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6273     bar();
6274   }
6275 #pragma omp target simd
6276   for (int i = 0; i < 10; ++i) {
6277 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6278     bar();
6279   }
6280 #pragma omp target simd
6281   for (int i = 0; i < 10; ++i) {
6282 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6283     bar();
6284   }
6285 #pragma omp target simd
6286   for (int i = 0; i < 10; ++i) {
6287 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6288     ++a;
6289   }
6290 #pragma omp target simd
6291   for (int i = 0; i < 10; ++i) {
6292 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6293     ++a;
6294   }
6295 #pragma omp target simd
6296   for (int i = 0; i < 10; ++i) {
6297 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6298     ++a;
6299   }
6300 #pragma omp target simd
6301   for (int i = 0; i < 10; ++i) {
6302 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6303     for (int i = 0; i < 10; ++i)
6304       ;
6305   }
6306 #pragma omp target simd
6307   for (int i = 0; i < 10; ++i) {
6308 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6309     ++a;
6310   }
6311 #pragma omp target simd
6312   for (int i = 0; i < 10; ++i) {
6313 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6314     ++a;
6315   }
6316 #pragma omp target simd
6317   for (int i = 0; i < 10; ++i) {
6318 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6319     ++a;
6320   }
6321 #pragma omp target simd
6322   for (int i = 0; i < 10; ++i) {
6323 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6324     ++a;
6325   }
6326 #pragma omp target simd
6327   for (int i = 0; i < 10; ++i) {
6328 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6329     for (int i = 0; i < 10; ++i)
6330       ++a;
6331   }
6332 #pragma omp target simd
6333   for (int i = 0; i < 10; ++i) {
6334 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6335     for (int i = 0; i < 10; ++i)
6336       ++a;
6337   }
6338 #pragma omp target simd
6339   for (int i = 0; i < 10; ++i) {
6340 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6341     for (int i = 0; i < 10; ++i)
6342       ++a;
6343   }
6344 #pragma omp target simd
6345   for (int i = 0; i < 10; ++i) {
6346 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6347     for (int i = 0; i < 10; ++i)
6348       ++a;
6349   }
6350 #pragma omp target simd
6351   for (int i = 0; i < 10; ++i) {
6352 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6353     for (int i = 0; i < 10; ++i)
6354       ++a;
6355   }
6356 #pragma omp target simd
6357   for (int i = 0; i < 10; ++i) {
6358 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6359     for (int i = 0; i < 10; ++i)
6360       ++a;
6361   }
6362 #pragma omp target simd
6363   for (int i = 0; i < 10; ++i) {
6364 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6365     for (int i = 0; i < 10; ++i)
6366       ++a;
6367   }
6368 #pragma omp target simd
6369   for (int i = 0; i < 10; ++i) {
6370 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6371     for (int i = 0; i < 10; ++i)
6372       ++a;
6373   }
6374 
6375 // TEAMS DISTRIBUTE DIRECTIVE
6376 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6377   for (int i = 0; i < 10; ++i)
6378     ;
6379 #pragma omp target
6380 #pragma omp teams distribute
6381   for (int i = 0; i < 10; ++i) {
6382 #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?}}
6383     for (int i = 0; i < 10; ++i)
6384       ;
6385   }
6386 #pragma omp target
6387 #pragma omp teams distribute
6388   for (int i = 0; i < 10; ++i) {
6389 #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?}}
6390     for (int i = 0; i < 10; ++i)
6391       ;
6392   }
6393 #pragma omp target
6394 #pragma omp teams distribute
6395   for (int i = 0; i < 10; ++i) {
6396 #pragma omp for // OK
6397     for (int i = 0; i < 10; ++i)
6398       ;
6399   }
6400 #pragma omp target
6401 #pragma omp teams distribute
6402   for (int i = 0; i < 10; ++i) {
6403 #pragma omp simd // OK
6404     for (int i = 0; i < 10; ++i)
6405       ;
6406   }
6407 #pragma omp target
6408 #pragma omp teams distribute
6409   for (int i = 0; i < 10; ++i) {
6410 #pragma omp for simd // OK
6411     for (int i = 0; i < 10; ++i)
6412       ;
6413   }
6414 #pragma omp target
6415 #pragma omp teams distribute
6416   for (int i = 0; i < 10; ++i) {
6417 #pragma omp parallel // OK
6418     for (int i = 0; i < 10; ++i)
6419       ;
6420   }
6421 #pragma omp target
6422 #pragma omp teams distribute
6423   for (int i = 0; i < 10; ++i) {
6424 #pragma omp sections // OK
6425     {
6426       bar();
6427     }
6428   }
6429 #pragma omp target
6430 #pragma omp teams distribute
6431   for (int i = 0; i < 10; ++i) {
6432 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6433     {
6434       bar();
6435     }
6436   }
6437 #pragma omp target
6438 #pragma omp teams distribute
6439   for (int i = 0; i < 10; ++i) {
6440 #pragma omp single // OK
6441     {
6442       bar();
6443     }
6444   }
6445 #pragma omp target
6446 #pragma omp teams distribute
6447   for (int i = 0; i < 10; ++i) {
6448 #pragma omp master // OK
6449     {
6450       bar();
6451     }
6452   }
6453 #pragma omp target
6454 #pragma omp teams distribute
6455   for (int i = 0; i < 10; ++i) {
6456 #pragma omp critical // OK
6457     {
6458       bar();
6459     }
6460   }
6461 #pragma omp target
6462 #pragma omp teams distribute
6463   for (int i = 0; i < 10; ++i) {
6464 #pragma omp parallel // OK
6465     {
6466 #pragma omp single
6467       {
6468 	bar();
6469       }
6470     }
6471   }
6472 #pragma omp target
6473 #pragma omp teams distribute
6474   for (int i = 0; i < 10; ++i) {
6475 #pragma omp parallel for // OK
6476     for (int i = 0; i < 10; ++i)
6477       ;
6478   }
6479 #pragma omp target
6480 #pragma omp teams distribute
6481   for (int i = 0; i < 10; ++i) {
6482 #pragma omp parallel for simd // OK
6483     for (int i = 0; i < 10; ++i)
6484       ;
6485   }
6486 #pragma omp target
6487 #pragma omp teams distribute
6488   for (int i = 0; i < 10; ++i) {
6489 #pragma omp parallel sections // OK
6490     {
6491       bar();
6492     }
6493   }
6494 #pragma omp target
6495 #pragma omp teams distribute
6496   for (int i = 0; i < 10; ++i) {
6497 #pragma omp task // OK
6498     {
6499       bar();
6500     }
6501   }
6502 #pragma omp target
6503 #pragma omp teams distribute
6504   for (int i = 0; i < 10; ++i) {
6505 #pragma omp taskyield // OK
6506     bar();
6507   }
6508 #pragma omp target
6509 #pragma omp teams distribute
6510   for (int i = 0; i < 10; ++i) {
6511 #pragma omp barrier // OK
6512     bar();
6513   }
6514 #pragma omp target
6515 #pragma omp teams distribute
6516   for (int i = 0; i < 10; ++i) {
6517 #pragma omp taskwait // OK
6518     bar();
6519   }
6520 #pragma omp target
6521 #pragma omp teams distribute
6522   for (int i = 0; i < 10; ++i) {
6523 #pragma omp flush // OK
6524     bar();
6525   }
6526 #pragma omp target
6527 #pragma omp teams distribute
6528   for (int i = 0; i < 10; ++i) {
6529 #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?}}
6530     bar();
6531   }
6532 #pragma omp target
6533 #pragma omp teams distribute
6534   for (int i = 0; i < 10; ++i) {
6535 #pragma omp atomic // OK
6536     ++a;
6537   }
6538 #pragma omp target
6539 #pragma omp teams distribute
6540   for (int i = 0; i < 10; ++i) {
6541 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6542     ++a;
6543   }
6544 #pragma omp target
6545 #pragma omp teams distribute
6546   for (int i = 0; i < 10; ++i) {
6547 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6548     ++a;
6549   }
6550 #pragma omp target
6551 #pragma omp teams distribute
6552   for (int i = 0; i < 10; ++i) {
6553 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6554     for (int i = 0; i < 10; ++i)
6555       ;
6556   }
6557 #pragma omp target
6558 #pragma omp teams distribute
6559   for (int i = 0; i < 10; ++i) {
6560 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6561     ++a;
6562   }
6563 #pragma omp target
6564 #pragma omp teams distribute
6565   for (int i = 0; i < 10; ++i) {
6566 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6567     ++a;
6568   }
6569 #pragma omp target
6570 #pragma omp teams distribute
6571   for (int i = 0; i < 10; ++i) {
6572 #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?}}
6573     ++a;
6574   }
6575 #pragma omp target
6576 #pragma omp teams distribute
6577   for (int i = 0; i < 10; ++i) {
6578 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6579     ++a;
6580   }
6581 #pragma omp target
6582 #pragma omp teams distribute
6583   for (int i = 0; i < 10; ++i) {
6584 #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?}}
6585     for (int i = 0; i < 10; ++i)
6586       ++a;
6587   }
6588 #pragma omp target
6589 #pragma omp teams distribute
6590   for (int i = 0; i < 10; ++i) {
6591 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6592     for (int i = 0; i < 10; ++i)
6593       ++a;
6594   }
6595 #pragma omp target
6596 #pragma omp teams distribute
6597   for (int i = 0; i < 10; ++i) {
6598 #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?}}
6599     for (int i = 0; i < 10; ++i)
6600       ++a;
6601   }
6602 #pragma omp target
6603 #pragma omp teams distribute
6604   for (int i = 0; i < 10; ++i) {
6605 #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?}}
6606     for (int i = 0; i < 10; ++i)
6607       ++a;
6608   }
6609 #pragma omp target
6610 #pragma omp teams distribute
6611   for (int i = 0; i < 10; ++i) {
6612 #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?}}
6613     for (int i = 0; i < 10; ++i)
6614       ++a;
6615   }
6616 #pragma omp target
6617 #pragma omp teams distribute
6618   for (int i = 0; i < 10; ++i) {
6619 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6620     for (int i = 0; i < 10; ++i)
6621       ++a;
6622   }
6623 #pragma omp target
6624 #pragma omp teams distribute
6625   for (int i = 0; i < 10; ++i) {
6626 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6627     for (int i = 0; i < 10; ++i)
6628       ++a;
6629   }
6630 #pragma omp target
6631 #pragma omp teams distribute
6632   for (int i = 0; i < 10; ++i) {
6633 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6634     for (int i = 0; i < 10; ++i)
6635       ++a;
6636   }
6637 
6638 // TEAMS DISTRIBUTE DIRECTIVE
6639 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6640   for (int i = 0; i < 10; ++i)
6641     ;
6642 #pragma omp target
6643 #pragma omp teams distribute
6644   for (int i = 0; i < 10; ++i) {
6645 #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?}}
6646     for (int i = 0; i < 10; ++i)
6647       ;
6648   }
6649 #pragma omp target
6650 #pragma omp teams distribute
6651   for (int i = 0; i < 10; ++i) {
6652 #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?}}
6653     for (int i = 0; i < 10; ++i)
6654       ;
6655   }
6656 #pragma omp target
6657 #pragma omp teams distribute
6658   for (int i = 0; i < 10; ++i) {
6659 #pragma omp for // OK
6660     for (int i = 0; i < 10; ++i)
6661       ;
6662   }
6663 #pragma omp target
6664 #pragma omp teams distribute
6665   for (int i = 0; i < 10; ++i) {
6666 #pragma omp simd // OK
6667     for (int i = 0; i < 10; ++i)
6668       ;
6669   }
6670 #pragma omp target
6671 #pragma omp teams distribute
6672   for (int i = 0; i < 10; ++i) {
6673 #pragma omp for simd // OK
6674     for (int i = 0; i < 10; ++i)
6675       ;
6676   }
6677 #pragma omp target
6678 #pragma omp teams distribute
6679   for (int i = 0; i < 10; ++i) {
6680 #pragma omp parallel // OK
6681     for (int i = 0; i < 10; ++i)
6682       ;
6683   }
6684 #pragma omp target
6685 #pragma omp teams distribute
6686   for (int i = 0; i < 10; ++i) {
6687 #pragma omp sections // OK
6688     {
6689       bar();
6690     }
6691   }
6692 #pragma omp target
6693 #pragma omp teams distribute
6694   for (int i = 0; i < 10; ++i) {
6695 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6696     {
6697       bar();
6698     }
6699   }
6700 #pragma omp target
6701 #pragma omp teams distribute
6702   for (int i = 0; i < 10; ++i) {
6703 #pragma omp single // OK
6704     {
6705       bar();
6706     }
6707   }
6708 #pragma omp target
6709 #pragma omp teams distribute
6710   for (int i = 0; i < 10; ++i) {
6711 #pragma omp master // OK
6712     {
6713       bar();
6714     }
6715   }
6716 #pragma omp target
6717 #pragma omp teams distribute
6718   for (int i = 0; i < 10; ++i) {
6719 #pragma omp critical // OK
6720     {
6721       bar();
6722     }
6723   }
6724 #pragma omp target
6725 #pragma omp teams distribute
6726   for (int i = 0; i < 10; ++i) {
6727 #pragma omp parallel // OK
6728     {
6729 #pragma omp single
6730       {
6731 	bar();
6732       }
6733     }
6734   }
6735 #pragma omp target
6736 #pragma omp teams distribute
6737   for (int i = 0; i < 10; ++i) {
6738 #pragma omp parallel for // OK
6739     for (int i = 0; i < 10; ++i)
6740       ;
6741   }
6742 #pragma omp target
6743 #pragma omp teams distribute
6744   for (int i = 0; i < 10; ++i) {
6745 #pragma omp parallel for simd // OK
6746     for (int i = 0; i < 10; ++i)
6747       ;
6748   }
6749 #pragma omp target
6750 #pragma omp teams distribute
6751   for (int i = 0; i < 10; ++i) {
6752 #pragma omp parallel sections // OK
6753     {
6754       bar();
6755     }
6756   }
6757 #pragma omp target
6758 #pragma omp teams distribute
6759   for (int i = 0; i < 10; ++i) {
6760 #pragma omp task // OK
6761     {
6762       bar();
6763     }
6764   }
6765 #pragma omp target
6766 #pragma omp teams distribute
6767   for (int i = 0; i < 10; ++i) {
6768 #pragma omp taskyield // OK
6769     bar();
6770   }
6771 #pragma omp target
6772 #pragma omp teams distribute
6773   for (int i = 0; i < 10; ++i) {
6774 #pragma omp barrier // OK
6775     bar();
6776   }
6777 #pragma omp target
6778 #pragma omp teams distribute
6779   for (int i = 0; i < 10; ++i) {
6780 #pragma omp taskwait // OK
6781     bar();
6782   }
6783 #pragma omp target
6784 #pragma omp teams distribute
6785   for (int i = 0; i < 10; ++i) {
6786 #pragma omp flush // OK
6787     bar();
6788   }
6789 #pragma omp target
6790 #pragma omp teams distribute
6791   for (int i = 0; i < 10; ++i) {
6792 #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?}}
6793     bar();
6794   }
6795 #pragma omp target
6796 #pragma omp teams distribute
6797   for (int i = 0; i < 10; ++i) {
6798 #pragma omp atomic // OK
6799     ++a;
6800   }
6801 #pragma omp target
6802 #pragma omp teams distribute
6803   for (int i = 0; i < 10; ++i) {
6804 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6805     ++a;
6806   }
6807 #pragma omp target
6808 #pragma omp teams distribute
6809   for (int i = 0; i < 10; ++i) {
6810 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6811     ++a;
6812   }
6813 #pragma omp target
6814 #pragma omp teams distribute
6815   for (int i = 0; i < 10; ++i) {
6816 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6817     for (int i = 0; i < 10; ++i)
6818       ;
6819   }
6820 #pragma omp target
6821 #pragma omp teams distribute
6822   for (int i = 0; i < 10; ++i) {
6823 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6824     ++a;
6825   }
6826 #pragma omp target
6827 #pragma omp teams distribute
6828   for (int i = 0; i < 10; ++i) {
6829 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6830     ++a;
6831   }
6832 #pragma omp target
6833 #pragma omp teams distribute
6834   for (int i = 0; i < 10; ++i) {
6835 #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?}}
6836     ++a;
6837   }
6838 #pragma omp target
6839 #pragma omp teams distribute
6840   for (int i = 0; i < 10; ++i) {
6841 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6842     ++a;
6843   }
6844 #pragma omp target
6845 #pragma omp teams distribute
6846   for (int i = 0; i < 10; ++i) {
6847 #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?}}
6848     for (int i = 0; i < 10; ++i)
6849       ++a;
6850   }
6851 #pragma omp target
6852 #pragma omp teams distribute
6853   for (int i = 0; i < 10; ++i) {
6854 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6855     for (int i = 0; i < 10; ++i)
6856       ++a;
6857   }
6858 #pragma omp target
6859 #pragma omp teams distribute
6860   for (int i = 0; i < 10; ++i) {
6861 #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?}}
6862     for (int i = 0; i < 10; ++i)
6863       ++a;
6864   }
6865 #pragma omp target
6866 #pragma omp teams distribute
6867   for (int i = 0; i < 10; ++i) {
6868 #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?}}
6869     for (int i = 0; i < 10; ++i)
6870       ++a;
6871   }
6872 #pragma omp target
6873 #pragma omp teams distribute
6874   for (int i = 0; i < 10; ++i) {
6875 #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?}}
6876     for (int i = 0; i < 10; ++i)
6877       ++a;
6878   }
6879 #pragma omp target
6880 #pragma omp teams distribute
6881   for (int i = 0; i < 10; ++i) {
6882 #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?}}
6883     for (int i = 0; i < 10; ++i)
6884       ++a;
6885   }
6886 #pragma omp target
6887 #pragma omp teams distribute
6888   for (int i = 0; i < 10; ++i) {
6889 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6890     ++a;
6891   }
6892 #pragma omp target
6893 #pragma omp teams distribute
6894   for (int i = 0; i < 10; ++i) {
6895 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6896     for (int i = 0; i < 10; ++i)
6897       ++a;
6898   }
6899 #pragma omp target
6900 #pragma omp teams distribute
6901   for (int i = 0; i < 10; ++i) {
6902 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6903     for (int i = 0; i < 10; ++i)
6904       ++a;
6905   }
6906 #pragma omp target
6907 #pragma omp teams distribute
6908   for (int i = 0; i < 10; ++i) {
6909 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6910     for (int i = 0; i < 10; ++i)
6911       ++a;
6912   }
6913 #pragma omp target
6914 #pragma omp teams distribute
6915   for (int i = 0; i < 10; ++i) {
6916 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6917     for (int i = 0; i < 10; ++i)
6918       ++a;
6919   }
6920 
6921 // TEAMS DISTRIBUTE SIMD DIRECTIVE
6922 #pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6923   for (int i = 0; i < 10; ++i)
6924     ;
6925 #pragma omp target
6926 #pragma omp teams distribute simd
6927   for (int i = 0; i < 10; ++i) {
6928 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6929     for (int i = 0; i < 10; ++i)
6930       ;
6931   }
6932 #pragma omp target
6933 #pragma omp teams distribute simd
6934   for (int i = 0; i < 10; ++i) {
6935 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6936     for (int i = 0; i < 10; ++i)
6937       ;
6938   }
6939 #pragma omp target
6940 #pragma omp teams distribute simd
6941   for (int i = 0; i < 10; ++i) {
6942 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6943     for (int i = 0; i < 10; ++i)
6944       ;
6945   }
6946 #pragma omp target
6947 #pragma omp teams distribute simd
6948   for (int i = 0; i < 10; ++i) {
6949 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6950     for (int i = 0; i < 10; ++i)
6951       ;
6952   }
6953 #pragma omp target
6954 #pragma omp teams distribute simd
6955   for (int i = 0; i < 10; ++i) {
6956 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6957     for (int i = 0; i < 10; ++i)
6958       ;
6959   }
6960 #pragma omp target
6961 #pragma omp teams distribute simd
6962   for (int i = 0; i < 10; ++i) {
6963 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6964     for (int i = 0; i < 10; ++i)
6965       ;
6966   }
6967 #pragma omp target
6968 #pragma omp teams distribute simd
6969   for (int i = 0; i < 10; ++i) {
6970 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6971     {
6972       bar();
6973     }
6974   }
6975 #pragma omp target
6976 #pragma omp teams distribute simd
6977   for (int i = 0; i < 10; ++i) {
6978 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6979     {
6980       bar();
6981     }
6982   }
6983 #pragma omp target
6984 #pragma omp teams distribute simd
6985   for (int i = 0; i < 10; ++i) {
6986 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6987     {
6988       bar();
6989     }
6990   }
6991 #pragma omp target
6992 #pragma omp teams distribute simd
6993   for (int i = 0; i < 10; ++i) {
6994 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6995     {
6996       bar();
6997     }
6998   }
6999 #pragma omp target
7000 #pragma omp teams distribute simd
7001   for (int i = 0; i < 10; ++i) {
7002 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7003     {
7004       bar();
7005     }
7006   }
7007 #pragma omp target
7008 #pragma omp teams distribute simd
7009   for (int i = 0; i < 10; ++i) {
7010 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7011     {
7012 #pragma omp single
7013       {
7014 	bar();
7015       }
7016     }
7017   }
7018 #pragma omp target
7019 #pragma omp teams distribute simd
7020   for (int i = 0; i < 10; ++i) {
7021 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7022     for (int i = 0; i < 10; ++i)
7023       ;
7024   }
7025 #pragma omp target
7026 #pragma omp teams distribute simd
7027   for (int i = 0; i < 10; ++i) {
7028 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7029     for (int i = 0; i < 10; ++i)
7030       ;
7031   }
7032 #pragma omp target
7033 #pragma omp teams distribute simd
7034   for (int i = 0; i < 10; ++i) {
7035 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7036     {
7037       bar();
7038     }
7039   }
7040 #pragma omp target
7041 #pragma omp teams distribute simd
7042   for (int i = 0; i < 10; ++i) {
7043 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7044     {
7045       bar();
7046     }
7047   }
7048 #pragma omp target
7049 #pragma omp teams distribute simd
7050   for (int i = 0; i < 10; ++i) {
7051 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7052     bar();
7053   }
7054 #pragma omp target
7055 #pragma omp teams distribute simd
7056   for (int i = 0; i < 10; ++i) {
7057 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7058     bar();
7059   }
7060 #pragma omp target
7061 #pragma omp teams distribute simd
7062   for (int i = 0; i < 10; ++i) {
7063 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7064     bar();
7065   }
7066 #pragma omp target
7067 #pragma omp teams distribute simd
7068   for (int i = 0; i < 10; ++i) {
7069 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7070     bar();
7071   }
7072 #pragma omp target
7073 #pragma omp teams distribute simd
7074   for (int i = 0; i < 10; ++i) {
7075 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7076     bar();
7077   }
7078 #pragma omp target
7079 #pragma omp teams distribute simd
7080   for (int i = 0; i < 10; ++i) {
7081 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7082     ++a;
7083   }
7084 #pragma omp target
7085 #pragma omp teams distribute simd
7086   for (int i = 0; i < 10; ++i) {
7087 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7088     ++a;
7089   }
7090 #pragma omp target
7091 #pragma omp teams distribute simd
7092   for (int i = 0; i < 10; ++i) {
7093 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7094     ++a;
7095   }
7096 #pragma omp target
7097 #pragma omp teams distribute simd
7098   for (int i = 0; i < 10; ++i) {
7099 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7100     for (int i = 0; i < 10; ++i)
7101       ;
7102   }
7103 #pragma omp target
7104 #pragma omp teams distribute simd
7105   for (int i = 0; i < 10; ++i) {
7106 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7107     ++a;
7108   }
7109 #pragma omp target
7110 #pragma omp teams distribute simd
7111   for (int i = 0; i < 10; ++i) {
7112 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7113     ++a;
7114   }
7115 #pragma omp target
7116 #pragma omp teams distribute simd
7117   for (int i = 0; i < 10; ++i) {
7118 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7119     ++a;
7120   }
7121 #pragma omp target
7122 #pragma omp teams distribute simd
7123   for (int i = 0; i < 10; ++i) {
7124 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7125     ++a;
7126   }
7127 #pragma omp target
7128 #pragma omp teams distribute simd
7129   for (int i = 0; i < 10; ++i) {
7130 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7131     for (int i = 0; i < 10; ++i)
7132       ++a;
7133   }
7134 #pragma omp target
7135 #pragma omp teams distribute simd
7136   for (int i = 0; i < 10; ++i) {
7137 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7138     for (int i = 0; i < 10; ++i)
7139       ++a;
7140   }
7141 #pragma omp target
7142 #pragma omp teams distribute simd
7143   for (int i = 0; i < 10; ++i) {
7144 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7145     for (int i = 0; i < 10; ++i)
7146       ++a;
7147   }
7148 #pragma omp target
7149 #pragma omp teams distribute simd
7150   for (int i = 0; i < 10; ++i) {
7151 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7152     for (int i = 0; i < 10; ++i)
7153       ++a;
7154   }
7155 #pragma omp target
7156 #pragma omp teams distribute simd
7157   for (int i = 0; i < 10; ++i) {
7158 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7159     for (int i = 0; i < 10; ++i)
7160       ++a;
7161   }
7162 #pragma omp target
7163 #pragma omp teams distribute simd
7164   for (int i = 0; i < 10; ++i) {
7165 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7166     for (int i = 0; i < 10; ++i)
7167       ++a;
7168   }
7169 #pragma omp target
7170 #pragma omp teams distribute simd
7171   for (int i = 0; i < 10; ++i) {
7172 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7173     ++a;
7174   }
7175 #pragma omp target
7176 #pragma omp teams distribute simd
7177   for (int i = 0; i < 10; ++i) {
7178 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7179     for (int i = 0; i < 10; ++i)
7180       ++a;
7181   }
7182 #pragma omp target
7183 #pragma omp teams distribute simd
7184   for (int i = 0; i < 10; ++i) {
7185 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7186     for (int i = 0; i < 10; ++i)
7187       ++a;
7188   }
7189 #pragma omp target
7190 #pragma omp teams distribute simd
7191   for (int i = 0; i < 10; ++i) {
7192 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7193     for (int i = 0; i < 10; ++i)
7194       ++a;
7195   }
7196 #pragma omp target
7197 #pragma omp teams distribute simd
7198   for (int i = 0; i < 10; ++i) {
7199 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7200     for (int i = 0; i < 10; ++i)
7201       ++a;
7202   }
7203 
7204 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
7205 #pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7206   for (int i = 0; i < 10; ++i)
7207     ;
7208 #pragma omp target
7209 #pragma omp teams distribute parallel for simd
7210   for (int i = 0; i < 10; ++i) {
7211 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7212     for (int i = 0; i < 10; ++i)
7213       ;
7214   }
7215 #pragma omp target
7216 #pragma omp teams distribute parallel for simd
7217   for (int i = 0; i < 10; ++i) {
7218 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7219     for (int i = 0; i < 10; ++i)
7220       ;
7221   }
7222 #pragma omp target
7223 #pragma omp teams distribute parallel for simd
7224   for (int i = 0; i < 10; ++i) {
7225 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7226     for (int i = 0; i < 10; ++i)
7227       ;
7228   }
7229 #pragma omp target
7230 #pragma omp teams distribute parallel for simd
7231   for (int i = 0; i < 10; ++i) {
7232 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7233     for (int i = 0; i < 10; ++i)
7234       ;
7235   }
7236 #pragma omp target
7237 #pragma omp teams distribute parallel for simd
7238   for (int i = 0; i < 10; ++i) {
7239 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7240     for (int i = 0; i < 10; ++i)
7241       ;
7242   }
7243 #pragma omp target
7244 #pragma omp teams distribute parallel for simd
7245   for (int i = 0; i < 10; ++i) {
7246 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7247     for (int i = 0; i < 10; ++i)
7248       ;
7249   }
7250 #pragma omp target
7251 #pragma omp teams distribute parallel for simd
7252   for (int i = 0; i < 10; ++i) {
7253 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7254     {
7255       bar();
7256     }
7257   }
7258 #pragma omp target
7259 #pragma omp teams distribute parallel for simd
7260   for (int i = 0; i < 10; ++i) {
7261 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7262     {
7263       bar();
7264     }
7265   }
7266 #pragma omp target
7267 #pragma omp teams distribute parallel for simd
7268   for (int i = 0; i < 10; ++i) {
7269 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7270     {
7271       bar();
7272     }
7273   }
7274 #pragma omp target
7275 #pragma omp teams distribute parallel for simd
7276   for (int i = 0; i < 10; ++i) {
7277 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7278     {
7279       bar();
7280     }
7281   }
7282 #pragma omp target
7283 #pragma omp teams distribute parallel for simd
7284   for (int i = 0; i < 10; ++i) {
7285 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7286     {
7287       bar();
7288     }
7289   }
7290 #pragma omp target
7291 #pragma omp teams distribute parallel for simd
7292   for (int i = 0; i < 10; ++i) {
7293 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7294     {
7295 #pragma omp single
7296       {
7297 	bar();
7298       }
7299     }
7300   }
7301 #pragma omp target
7302 #pragma omp teams distribute parallel for simd
7303   for (int i = 0; i < 10; ++i) {
7304 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7305     for (int i = 0; i < 10; ++i)
7306       ;
7307   }
7308 #pragma omp target
7309 #pragma omp teams distribute parallel for simd
7310   for (int i = 0; i < 10; ++i) {
7311 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7312     for (int i = 0; i < 10; ++i)
7313       ;
7314   }
7315 #pragma omp target
7316 #pragma omp teams distribute parallel for simd
7317   for (int i = 0; i < 10; ++i) {
7318 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7319     {
7320       bar();
7321     }
7322   }
7323 #pragma omp target
7324 #pragma omp teams distribute parallel for simd
7325   for (int i = 0; i < 10; ++i) {
7326 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7327     {
7328       bar();
7329     }
7330   }
7331 #pragma omp target
7332 #pragma omp teams distribute parallel for simd
7333   for (int i = 0; i < 10; ++i) {
7334 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7335     bar();
7336   }
7337 #pragma omp target
7338 #pragma omp teams distribute parallel for simd
7339   for (int i = 0; i < 10; ++i) {
7340 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7341     bar();
7342   }
7343 #pragma omp target
7344 #pragma omp teams distribute parallel for simd
7345   for (int i = 0; i < 10; ++i) {
7346 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7347     bar();
7348   }
7349 #pragma omp target
7350 #pragma omp teams distribute parallel for simd
7351   for (int i = 0; i < 10; ++i) {
7352 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7353     bar();
7354   }
7355 #pragma omp target
7356 #pragma omp teams distribute parallel for simd
7357   for (int i = 0; i < 10; ++i) {
7358 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7359     bar();
7360   }
7361 #pragma omp target
7362 #pragma omp teams distribute parallel for simd
7363   for (int i = 0; i < 10; ++i) {
7364 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7365     ++a;
7366   }
7367 #pragma omp target
7368 #pragma omp teams distribute parallel for simd
7369   for (int i = 0; i < 10; ++i) {
7370 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7371     ++a;
7372   }
7373 #pragma omp target
7374 #pragma omp teams distribute parallel for simd
7375   for (int i = 0; i < 10; ++i) {
7376 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7377     ++a;
7378   }
7379 #pragma omp target
7380 #pragma omp teams distribute parallel for simd
7381   for (int i = 0; i < 10; ++i) {
7382 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7383     for (int i = 0; i < 10; ++i)
7384       ;
7385   }
7386 #pragma omp target
7387 #pragma omp teams distribute parallel for simd
7388   for (int i = 0; i < 10; ++i) {
7389 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7390     ++a;
7391   }
7392 #pragma omp target
7393 #pragma omp teams distribute parallel for simd
7394   for (int i = 0; i < 10; ++i) {
7395 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7396     ++a;
7397   }
7398 #pragma omp target
7399 #pragma omp teams distribute parallel for simd
7400   for (int i = 0; i < 10; ++i) {
7401 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7402     ++a;
7403   }
7404 #pragma omp target
7405 #pragma omp teams distribute parallel for simd
7406   for (int i = 0; i < 10; ++i) {
7407 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7408     ++a;
7409   }
7410 #pragma omp target
7411 #pragma omp teams distribute parallel for simd
7412   for (int i = 0; i < 10; ++i) {
7413 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7414     for (int i = 0; i < 10; ++i)
7415       ++a;
7416   }
7417 #pragma omp target
7418 #pragma omp teams distribute parallel for simd
7419   for (int i = 0; i < 10; ++i) {
7420 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7421     for (int i = 0; i < 10; ++i)
7422       ++a;
7423   }
7424 #pragma omp target
7425 #pragma omp teams distribute parallel for simd
7426   for (int i = 0; i < 10; ++i) {
7427 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7428     for (int i = 0; i < 10; ++i)
7429       ++a;
7430   }
7431 #pragma omp target
7432 #pragma omp teams distribute parallel for simd
7433   for (int i = 0; i < 10; ++i) {
7434 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7435     for (int i = 0; i < 10; ++i)
7436       ++a;
7437   }
7438 #pragma omp target
7439 #pragma omp teams distribute parallel for simd
7440   for (int i = 0; i < 10; ++i) {
7441 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7442     for (int i = 0; i < 10; ++i)
7443       ++a;
7444   }
7445 #pragma omp target
7446 #pragma omp teams distribute parallel for simd
7447   for (int i = 0; i < 10; ++i) {
7448 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7449     for (int i = 0; i < 10; ++i)
7450       ++a;
7451   }
7452 #pragma omp target
7453 #pragma omp teams distribute parallel for simd
7454   for (int i = 0; i < 10; ++i) {
7455 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7456     ++a;
7457   }
7458 #pragma omp target
7459 #pragma omp teams distribute parallel for simd
7460   for (int i = 0; i < 10; ++i) {
7461 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7462     for (int i = 0; i < 10; ++i)
7463       ++a;
7464   }
7465 #pragma omp target
7466 #pragma omp teams distribute parallel for simd
7467   for (int i = 0; i < 10; ++i) {
7468 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7469     for (int i = 0; i < 10; ++i)
7470       ++a;
7471   }
7472 #pragma omp target
7473 #pragma omp teams distribute parallel for simd
7474   for (int i = 0; i < 10; ++i) {
7475 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7476     for (int i = 0; i < 10; ++i)
7477       ++a;
7478   }
7479 #pragma omp target
7480 #pragma omp teams distribute parallel for simd
7481   for (int i = 0; i < 10; ++i) {
7482 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7483     for (int i = 0; i < 10; ++i)
7484       ++a;
7485   }
7486 
7487 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
7488 #pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7489   for (int i = 0; i < 10; ++i)
7490     ;
7491 #pragma omp target
7492 #pragma omp teams distribute parallel for
7493   for (int i = 0; i < 10; ++i) {
7494 #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?}}
7495     for (int i = 0; i < 10; ++i)
7496       ;
7497   }
7498 #pragma omp target
7499 #pragma omp teams distribute parallel for
7500   for (int i = 0; i < 10; ++i) {
7501 #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?}}
7502     for (int i = 0; i < 10; ++i)
7503       ;
7504   }
7505 #pragma omp target
7506 #pragma omp teams distribute parallel for
7507   for (int i = 0; i < 10; ++i) {
7508 #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?}}
7509     for (int i = 0; i < 10; ++i)
7510       ;
7511   }
7512 #pragma omp target
7513 #pragma omp teams distribute parallel for
7514   for (int i = 0; i < 10; ++i) {
7515 #pragma omp simd // OK
7516     for (int i = 0; i < 10; ++i)
7517       ;
7518   }
7519 #pragma omp target
7520 #pragma omp teams distribute parallel for
7521   for (int i = 0; i < 10; ++i) {
7522 #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?}}
7523     for (int i = 0; i < 10; ++i)
7524       ;
7525   }
7526 #pragma omp target
7527 #pragma omp teams distribute parallel for
7528   for (int i = 0; i < 10; ++i) {
7529 #pragma omp parallel // OK
7530     for (int i = 0; i < 10; ++i)
7531       ;
7532   }
7533 #pragma omp target
7534 #pragma omp teams distribute parallel for
7535   for (int i = 0; i < 10; ++i) {
7536 #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?}}
7537     {
7538       bar();
7539     }
7540   }
7541 #pragma omp target
7542 #pragma omp teams distribute parallel for
7543   for (int i = 0; i < 10; ++i) {
7544 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
7545     {
7546       bar();
7547     }
7548   }
7549 #pragma omp target
7550 #pragma omp teams distribute parallel for
7551   for (int i = 0; i < 10; ++i) {
7552 #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?}}
7553     {
7554       bar();
7555     }
7556   }
7557 #pragma omp target
7558 #pragma omp teams distribute parallel for
7559   for (int i = 0; i < 10; ++i) {
7560 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
7561     {
7562       bar();
7563     }
7564   }
7565 #pragma omp target
7566 #pragma omp teams distribute parallel for
7567   for (int i = 0; i < 10; ++i) {
7568 #pragma omp critical // OK
7569     {
7570       bar();
7571     }
7572   }
7573 #pragma omp target
7574 #pragma omp teams distribute parallel for
7575   for (int i = 0; i < 10; ++i) {
7576 #pragma omp parallel // OK
7577     {
7578 #pragma omp single
7579       {
7580 	bar();
7581       }
7582     }
7583   }
7584 #pragma omp target
7585 #pragma omp teams distribute parallel for
7586   for (int i = 0; i < 10; ++i) {
7587 #pragma omp parallel for // OK
7588     for (int i = 0; i < 10; ++i)
7589       ;
7590   }
7591 #pragma omp target
7592 #pragma omp teams distribute parallel for
7593   for (int i = 0; i < 10; ++i) {
7594 #pragma omp parallel for simd // OK
7595     for (int i = 0; i < 10; ++i)
7596       ;
7597   }
7598 #pragma omp target
7599 #pragma omp teams distribute parallel for
7600   for (int i = 0; i < 10; ++i) {
7601 #pragma omp parallel sections // OK
7602     {
7603       bar();
7604     }
7605   }
7606 #pragma omp target
7607 #pragma omp teams distribute parallel for
7608   for (int i = 0; i < 10; ++i) {
7609 #pragma omp task // OK
7610     {
7611       bar();
7612     }
7613   }
7614 #pragma omp target
7615 #pragma omp teams distribute parallel for
7616   for (int i = 0; i < 10; ++i) {
7617 #pragma omp taskyield // OK
7618     bar();
7619   }
7620 #pragma omp target
7621 #pragma omp teams distribute parallel for
7622   for (int i = 0; i < 10; ++i) {
7623 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
7624     bar();
7625   }
7626 #pragma omp target
7627 #pragma omp teams distribute parallel for
7628   for (int i = 0; i < 10; ++i) {
7629 #pragma omp taskwait // OK
7630     bar();
7631   }
7632 #pragma omp target
7633 #pragma omp teams distribute parallel for
7634   for (int i = 0; i < 10; ++i) {
7635 #pragma omp flush // OK
7636     bar();
7637   }
7638 #pragma omp target
7639 #pragma omp teams distribute parallel for
7640   for (int i = 0; i < 10; ++i) {
7641 #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?}}
7642     bar();
7643   }
7644 #pragma omp target
7645 #pragma omp teams distribute parallel for
7646   for (int i = 0; i < 10; ++i) {
7647 #pragma omp atomic // OK
7648     ++a;
7649   }
7650 #pragma omp target
7651 #pragma omp teams distribute parallel for
7652   for (int i = 0; i < 10; ++i) {
7653 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7654     ++a;
7655   }
7656 #pragma omp target
7657 #pragma omp teams distribute parallel for
7658   for (int i = 0; i < 10; ++i) {
7659 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7660     ++a;
7661   }
7662 #pragma omp target
7663 #pragma omp teams distribute parallel for
7664   for (int i = 0; i < 10; ++i) {
7665 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7666     for (int i = 0; i < 10; ++i)
7667       ;
7668   }
7669 #pragma omp target
7670 #pragma omp teams distribute parallel for
7671   for (int i = 0; i < 10; ++i) {
7672 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7673     ++a;
7674   }
7675 #pragma omp target
7676 #pragma omp teams distribute parallel for
7677   for (int i = 0; i < 10; ++i) {
7678 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7679     ++a;
7680   }
7681 #pragma omp target
7682 #pragma omp teams distribute parallel for
7683   for (int i = 0; i < 10; ++i) {
7684 #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?}}
7685     ++a;
7686   }
7687 #pragma omp target
7688 #pragma omp teams distribute parallel for
7689   for (int i = 0; i < 10; ++i) {
7690 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7691     ++a;
7692   }
7693 #pragma omp target
7694 #pragma omp teams distribute parallel for
7695   for (int i = 0; i < 10; ++i) {
7696 #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?}}
7697     for (int i = 0; i < 10; ++i)
7698       ++a;
7699   }
7700 #pragma omp target
7701 #pragma omp teams distribute parallel for
7702   for (int i = 0; i < 10; ++i) {
7703 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7704     for (int i = 0; i < 10; ++i)
7705       ++a;
7706   }
7707 #pragma omp target
7708 #pragma omp teams distribute parallel for
7709   for (int i = 0; i < 10; ++i) {
7710 #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?}}
7711     for (int i = 0; i < 10; ++i)
7712       ++a;
7713   }
7714 #pragma omp target
7715 #pragma omp teams distribute parallel for
7716   for (int i = 0; i < 10; ++i) {
7717 #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?}}
7718     for (int i = 0; i < 10; ++i)
7719       ++a;
7720   }
7721 #pragma omp target
7722 #pragma omp teams distribute parallel for
7723   for (int i = 0; i < 10; ++i) {
7724 #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?}}
7725     for (int i = 0; i < 10; ++i)
7726       ++a;
7727   }
7728 #pragma omp target
7729 #pragma omp teams distribute parallel for
7730   for (int i = 0; i < 10; ++i) {
7731 #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?}}
7732     for (int i = 0; i < 10; ++i)
7733       ++a;
7734   }
7735 #pragma omp target
7736 #pragma omp teams distribute parallel for
7737   for (int i = 0; i < 10; ++i) {
7738 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7739     ++a;
7740   }
7741 #pragma omp target
7742 #pragma omp teams distribute parallel for
7743   for (int i = 0; i < 10; ++i) {
7744 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
7745     for (int i = 0; i < 10; ++i)
7746       ++a;
7747   }
7748 #pragma omp target
7749 #pragma omp teams distribute parallel for
7750   for (int i = 0; i < 10; ++i) {
7751 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7752     for (int i = 0; i < 10; ++i)
7753       ++a;
7754   }
7755 #pragma omp target
7756 #pragma omp teams distribute parallel for
7757   for (int i = 0; i < 10; ++i) {
7758 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7759     for (int i = 0; i < 10; ++i)
7760       ++a;
7761   }
7762 #pragma omp target
7763 #pragma omp teams distribute parallel for
7764   for (int i = 0; i < 10; ++i) {
7765 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7766     for (int i = 0; i < 10; ++i)
7767       ++a;
7768   }
7769 
7770 // TARGET TEAMS DIRECTIVE
7771 #pragma omp target teams
7772 #pragma omp parallel
7773   bar();
7774 #pragma omp target teams
7775 #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?}}
7776   for (int i = 0; i < 10; ++i)
7777     ;
7778 #pragma omp target teams
7779 #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?}}
7780   for (int i = 0; i < 10; ++i)
7781     ;
7782 #pragma omp target teams
7783 #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?}}
7784   for (int i = 0; i < 10; ++i)
7785     ;
7786 #pragma omp target teams
7787 #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?}}
7788   {
7789     bar();
7790   }
7791 #pragma omp target teams
7792 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
7793   {
7794     bar();
7795   }
7796 #pragma omp target teams
7797 #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?}}
7798   bar();
7799 
7800 #pragma omp target teams
7801 #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?}}
7802   {
7803     bar();
7804   }
7805 #pragma omp target teams
7806 #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?}}
7807   {
7808     bar();
7809   }
7810 #pragma omp target teams
7811 #pragma omp parallel for
7812   for (int i = 0; i < 10; ++i)
7813     ;
7814 #pragma omp target teams
7815 #pragma omp parallel for simd
7816   for (int i = 0; i < 10; ++i)
7817     ;
7818 #pragma omp target teams
7819 #pragma omp parallel sections
7820   {
7821     bar();
7822   }
7823 #pragma omp target teams
7824 #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?}}
7825   {
7826     bar();
7827   }
7828 #pragma omp target teams
7829   {
7830 #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?}}
7831     bar();
7832   }
7833 #pragma omp target teams
7834   {
7835 #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?}}
7836     bar();
7837   }
7838 #pragma omp target teams
7839   {
7840 #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?}}
7841     bar();
7842   }
7843 #pragma omp target teams
7844   {
7845 #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?}}
7846     bar();
7847   }
7848 #pragma omp target teams
7849   {
7850 #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?}}
7851     bar();
7852   }
7853 #pragma omp target teams
7854   {
7855 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
7856     ++a;
7857   }
7858 #pragma omp target teams
7859   {
7860 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
7861     ++a;
7862   }
7863 #pragma omp target teams
7864   {
7865 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
7866     ++a;
7867   }
7868 #pragma omp target teams
7869 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
7870   for (int i = 0; i < 10; ++i)
7871     ;
7872 #pragma omp target teams
7873   {
7874 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7875   }
7876 #pragma omp target teams
7877   {
7878 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7879   }
7880 #pragma omp target teams
7881   {
7882 #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?}}
7883     ++a;
7884   }
7885 #pragma omp target teams
7886   {
7887 #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?}}
7888   for (int i = 0; i < 10; ++i)
7889     ++a;
7890   }
7891 #pragma omp target teams
7892 #pragma omp distribute
7893   for (int i = 0; i < 10; ++i)
7894     ;
7895 #pragma omp target teams
7896   {
7897 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
7898     ++a;
7899   }
7900 #pragma omp target teams
7901 #pragma omp distribute parallel for
7902   for (int i = 0; i < 10; ++i)
7903     ;
7904 #pragma omp target teams
7905   {
7906 #pragma omp distribute parallel for
7907   for (int i = 0; i < 10; ++i)
7908     ;
7909 #pragma omp distribute parallel for
7910   for (int j = 0; j < 10; ++j)
7911     ;
7912   }
7913 #pragma omp target teams
7914   {
7915 #pragma omp distribute parallel for simd
7916   for (int i = 0; i < 10; ++i)
7917     ;
7918 #pragma omp distribute parallel for simd
7919   for (int j = 0; j < 10; ++j)
7920     ;
7921   }
7922 #pragma omp target teams
7923   {
7924 #pragma omp distribute simd
7925   for (int i = 0; i < 10; ++i)
7926     ;
7927 #pragma omp distribute simd
7928   for (int j = 0; j < 10; ++j)
7929     ;
7930   }
7931 #pragma omp target teams
7932   {
7933 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
7934   for (int i = 0; i < 10; ++i)
7935     ;
7936   }
7937 #pragma omp target teams
7938   {
7939 #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?}}
7940   for (int i = 0; i < 10; ++i)
7941     ;
7942   }
7943 #pragma omp target teams
7944   {
7945 #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?}}
7946   for (int i = 0; i < 10; ++i)
7947     ;
7948   }
7949 #pragma omp target teams
7950   {
7951 #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?}}
7952   for (int i = 0; i < 10; ++i)
7953     ;
7954   }
7955 #pragma omp target teams
7956   {
7957 #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?}}
7958   for (int i = 0; i < 10; ++i)
7959     ;
7960   }
7961 #pragma omp target teams
7962   {
7963 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
7964     a++;
7965   }
7966 #pragma omp target teams
7967   {
7968 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
7969   for (int i = 0; i < 10; ++i)
7970     ;
7971   }
7972 #pragma omp target teams
7973   {
7974 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
7975   for (int i = 0; i < 10; ++i)
7976     ;
7977   }
7978 #pragma omp target teams
7979   {
7980 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
7981   for (int i = 0; i < 10; ++i)
7982     ;
7983   }
7984 #pragma omp target teams
7985   {
7986 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
7987   for (int i = 0; i < 10; ++i)
7988     ;
7989   }
7990 
7991 // TARGET TEAMS DISTRIBUTE DIRECTIVE
7992 #pragma omp target teams distribute // OK
7993   for (int i = 0; i < 10; ++i)
7994     ;
7995 #pragma omp target teams distribute
7996   for (int i = 0; i < 10; ++i) {
7997 #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?}}
7998     for (int i = 0; i < 10; ++i)
7999       ;
8000   }
8001 #pragma omp target teams distribute
8002   for (int i = 0; i < 10; ++i) {
8003 #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?}}
8004     for (int i = 0; i < 10; ++i)
8005       ;
8006   }
8007 #pragma omp target teams distribute
8008   for (int i = 0; i < 10; ++i) {
8009 #pragma omp for // OK
8010     for (int i = 0; i < 10; ++i)
8011       ;
8012   }
8013 #pragma omp target teams distribute
8014   for (int i = 0; i < 10; ++i) {
8015 #pragma omp simd // OK
8016     for (int i = 0; i < 10; ++i)
8017       ;
8018   }
8019 #pragma omp target teams distribute
8020   for (int i = 0; i < 10; ++i) {
8021 #pragma omp for simd // OK
8022     for (int i = 0; i < 10; ++i)
8023       ;
8024   }
8025 #pragma omp target teams distribute
8026   for (int i = 0; i < 10; ++i) {
8027 #pragma omp parallel // OK
8028     for (int i = 0; i < 10; ++i)
8029       ;
8030   }
8031 #pragma omp target teams distribute
8032   for (int i = 0; i < 10; ++i) {
8033 #pragma omp sections // OK
8034     {
8035       bar();
8036     }
8037   }
8038 #pragma omp target teams distribute
8039   for (int i = 0; i < 10; ++i) {
8040 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
8041     {
8042       bar();
8043     }
8044   }
8045 #pragma omp target teams distribute
8046   for (int i = 0; i < 10; ++i) {
8047 #pragma omp single // OK
8048     {
8049       bar();
8050     }
8051   }
8052 #pragma omp target teams distribute
8053   for (int i = 0; i < 10; ++i) {
8054 #pragma omp master // OK
8055     {
8056       bar();
8057     }
8058   }
8059 #pragma omp target teams distribute
8060   for (int i = 0; i < 10; ++i) {
8061 #pragma omp critical // OK
8062     {
8063       bar();
8064     }
8065   }
8066 #pragma omp target teams distribute
8067   for (int i = 0; i < 10; ++i) {
8068 #pragma omp parallel // OK
8069     {
8070 #pragma omp single
8071       {
8072 	bar();
8073       }
8074     }
8075   }
8076 #pragma omp target teams distribute
8077   for (int i = 0; i < 10; ++i) {
8078 #pragma omp parallel for // OK
8079     for (int i = 0; i < 10; ++i)
8080       ;
8081   }
8082 #pragma omp target teams distribute
8083   for (int i = 0; i < 10; ++i) {
8084 #pragma omp parallel for simd // OK
8085     for (int i = 0; i < 10; ++i)
8086       ;
8087   }
8088 #pragma omp target teams distribute
8089   for (int i = 0; i < 10; ++i) {
8090 #pragma omp parallel sections // OK
8091     {
8092       bar();
8093     }
8094   }
8095 #pragma omp target teams distribute
8096   for (int i = 0; i < 10; ++i) {
8097 #pragma omp task // OK
8098     {
8099       bar();
8100     }
8101   }
8102 #pragma omp target teams distribute
8103   for (int i = 0; i < 10; ++i) {
8104 #pragma omp taskyield // OK
8105     bar();
8106   }
8107 #pragma omp target teams distribute
8108   for (int i = 0; i < 10; ++i) {
8109 #pragma omp barrier // OK
8110     bar();
8111   }
8112 #pragma omp target teams distribute
8113   for (int i = 0; i < 10; ++i) {
8114 #pragma omp taskwait // OK
8115     bar();
8116   }
8117 #pragma omp target teams distribute
8118   for (int i = 0; i < 10; ++i) {
8119 #pragma omp flush // OK
8120     bar();
8121   }
8122 #pragma omp target teams distribute
8123   for (int i = 0; i < 10; ++i) {
8124 #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?}}
8125     bar();
8126   }
8127 #pragma omp target teams distribute
8128   for (int i = 0; i < 10; ++i) {
8129 #pragma omp atomic // OK
8130     ++a;
8131   }
8132 #pragma omp target teams distribute
8133   for (int i = 0; i < 10; ++i) {
8134 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8135     ++a;
8136   }
8137 #pragma omp target teams distribute
8138   for (int i = 0; i < 10; ++i) {
8139 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8140     ++a;
8141   }
8142 #pragma omp target teams distribute
8143   for (int i = 0; i < 10; ++i) {
8144 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8145     for (int i = 0; i < 10; ++i)
8146       ;
8147   }
8148 #pragma omp target teams distribute
8149   for (int i = 0; i < 10; ++i) {
8150 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8151     ++a;
8152   }
8153 #pragma omp target teams distribute
8154   for (int i = 0; i < 10; ++i) {
8155 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8156     ++a;
8157   }
8158 #pragma omp target teams distribute
8159   for (int i = 0; i < 10; ++i) {
8160 #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?}}
8161     ++a;
8162   }
8163 #pragma omp target teams distribute
8164   for (int i = 0; i < 10; ++i) {
8165 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8166     ++a;
8167   }
8168 #pragma omp target teams distribute
8169   for (int i = 0; i < 10; ++i) {
8170 #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?}}
8171     for (int i = 0; i < 10; ++i)
8172       ++a;
8173   }
8174 #pragma omp target teams distribute
8175   for (int i = 0; i < 10; ++i) {
8176 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8177     for (int i = 0; i < 10; ++i)
8178       ++a;
8179   }
8180 #pragma omp target teams distribute
8181   for (int i = 0; i < 10; ++i) {
8182 #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?}}
8183     for (int i = 0; i < 10; ++i)
8184       ++a;
8185   }
8186 #pragma omp target teams distribute
8187   for (int i = 0; i < 10; ++i) {
8188 #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?}}
8189     for (int i = 0; i < 10; ++i)
8190       ++a;
8191   }
8192 #pragma omp target teams distribute
8193   for (int i = 0; i < 10; ++i) {
8194 #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?}}
8195     for (int i = 0; i < 10; ++i)
8196       ++a;
8197   }
8198 #pragma omp target teams distribute
8199   for (int i = 0; i < 10; ++i) {
8200 #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?}}
8201     for (int i = 0; i < 10; ++i)
8202       ;
8203   }
8204 #pragma omp target teams distribute
8205   for (int i = 0; i < 10; ++i) {
8206 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8207     a++;
8208   }
8209 #pragma omp target teams distribute
8210   for (int i = 0; i < 10; ++i) {
8211 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8212     for (int i = 0; i < 10; ++i)
8213       ;
8214   }
8215 #pragma omp target teams distribute
8216   for (int i = 0; i < 10; ++i) {
8217 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8218     for (int i = 0; i < 10; ++i)
8219       ;
8220   }
8221 #pragma omp target teams distribute
8222   for (int i = 0; i < 10; ++i) {
8223 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8224     for (int i = 0; i < 10; ++i)
8225       ;
8226   }
8227 #pragma omp target teams distribute
8228   for (int i = 0; i < 10; ++i) {
8229 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8230     for (int i = 0; i < 10; ++i)
8231       ;
8232   }
8233 
8234 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8235 #pragma omp target teams distribute parallel for // OK
8236   for (int i = 0; i < 10; ++i)
8237     ;
8238 #pragma omp target teams distribute parallel for
8239   for (int i = 0; i < 10; ++i) {
8240 #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?}}
8241     for (int i = 0; i < 10; ++i)
8242       ;
8243   }
8244 #pragma omp target teams distribute parallel for
8245   for (int i = 0; i < 10; ++i) {
8246 #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?}}
8247     for (int i = 0; i < 10; ++i)
8248       ;
8249   }
8250 #pragma omp target teams distribute parallel for
8251   for (int i = 0; i < 10; ++i) {
8252 #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?}}
8253     for (int i = 0; i < 10; ++i)
8254       ;
8255   }
8256 #pragma omp target teams distribute parallel for
8257   for (int i = 0; i < 10; ++i) {
8258 #pragma omp simd // OK
8259     for (int i = 0; i < 10; ++i)
8260       ;
8261   }
8262 #pragma omp target teams distribute parallel for
8263   for (int i = 0; i < 10; ++i) {
8264 #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?}}
8265     for (int i = 0; i < 10; ++i)
8266       ;
8267   }
8268 #pragma omp target teams distribute parallel for
8269   for (int i = 0; i < 10; ++i) {
8270 #pragma omp parallel // OK
8271     for (int i = 0; i < 10; ++i)
8272       ;
8273   }
8274 #pragma omp target teams distribute parallel for
8275   for (int i = 0; i < 10; ++i) {
8276 #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?}}
8277     {
8278       bar();
8279     }
8280   }
8281 #pragma omp target teams distribute parallel for
8282   for (int i = 0; i < 10; ++i) {
8283 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
8284     {
8285       bar();
8286     }
8287   }
8288 #pragma omp target teams distribute parallel for
8289   for (int i = 0; i < 10; ++i) {
8290 #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?}}
8291     {
8292       bar();
8293     }
8294   }
8295 #pragma omp target teams distribute parallel for
8296   for (int i = 0; i < 10; ++i) {
8297 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8298     {
8299       bar();
8300     }
8301   }
8302 #pragma omp target teams distribute parallel for
8303   for (int i = 0; i < 10; ++i) {
8304 #pragma omp critical // OK
8305     {
8306       bar();
8307     }
8308   }
8309 #pragma omp target teams distribute parallel for
8310   for (int i = 0; i < 10; ++i) {
8311 #pragma omp parallel // OK
8312     {
8313 #pragma omp single
8314       {
8315 	bar();
8316       }
8317     }
8318   }
8319 #pragma omp target teams distribute parallel for
8320   for (int i = 0; i < 10; ++i) {
8321 #pragma omp parallel for // OK
8322     for (int i = 0; i < 10; ++i)
8323       ;
8324   }
8325 #pragma omp target teams distribute parallel for
8326   for (int i = 0; i < 10; ++i) {
8327 #pragma omp parallel for simd // OK
8328     for (int i = 0; i < 10; ++i)
8329       ;
8330   }
8331 #pragma omp target teams distribute parallel for
8332   for (int i = 0; i < 10; ++i) {
8333 #pragma omp parallel sections // OK
8334     {
8335       bar();
8336     }
8337   }
8338 #pragma omp target teams distribute parallel for
8339   for (int i = 0; i < 10; ++i) {
8340 #pragma omp task // OK
8341     {
8342       bar();
8343     }
8344   }
8345 #pragma omp target teams distribute parallel for
8346   for (int i = 0; i < 10; ++i) {
8347 #pragma omp taskyield // OK
8348     bar();
8349   }
8350 #pragma omp target teams distribute parallel for
8351   for (int i = 0; i < 10; ++i) {
8352 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8353     bar();
8354   }
8355 #pragma omp target teams distribute parallel for
8356   for (int i = 0; i < 10; ++i) {
8357 #pragma omp taskwait // OK
8358     bar();
8359   }
8360 #pragma omp target teams distribute parallel for
8361   for (int i = 0; i < 10; ++i) {
8362 #pragma omp flush // OK
8363     bar();
8364   }
8365 #pragma omp target teams distribute parallel for
8366   for (int i = 0; i < 10; ++i) {
8367 #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?}}
8368     bar();
8369   }
8370 #pragma omp target teams distribute parallel for
8371   for (int i = 0; i < 10; ++i) {
8372 #pragma omp atomic // OK
8373     ++a;
8374   }
8375 #pragma omp target teams distribute parallel for
8376   for (int i = 0; i < 10; ++i) {
8377 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8378     ++a;
8379   }
8380 #pragma omp target teams distribute parallel for
8381   for (int i = 0; i < 10; ++i) {
8382 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8383     ++a;
8384   }
8385 #pragma omp target teams distribute parallel for
8386   for (int i = 0; i < 10; ++i) {
8387 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8388     for (int i = 0; i < 10; ++i)
8389       ;
8390   }
8391 #pragma omp target teams distribute parallel for
8392   for (int i = 0; i < 10; ++i) {
8393 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8394     ++a;
8395   }
8396 #pragma omp target teams distribute parallel for
8397   for (int i = 0; i < 10; ++i) {
8398 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8399     ++a;
8400   }
8401 #pragma omp target teams distribute parallel for
8402   for (int i = 0; i < 10; ++i) {
8403 #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?}}
8404     ++a;
8405   }
8406 #pragma omp target teams distribute parallel for
8407   for (int i = 0; i < 10; ++i) {
8408 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8409     ++a;
8410   }
8411 #pragma omp target teams distribute parallel for
8412   for (int i = 0; i < 10; ++i) {
8413 #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?}}
8414     for (int i = 0; i < 10; ++i)
8415       ++a;
8416   }
8417 #pragma omp target teams distribute parallel for
8418   for (int i = 0; i < 10; ++i) {
8419 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8420     for (int i = 0; i < 10; ++i)
8421       ++a;
8422   }
8423 #pragma omp target teams distribute parallel for
8424   for (int i = 0; i < 10; ++i) {
8425 #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?}}
8426     for (int i = 0; i < 10; ++i)
8427       ++a;
8428   }
8429 #pragma omp target teams distribute parallel for
8430   for (int i = 0; i < 10; ++i) {
8431 #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?}}
8432     for (int i = 0; i < 10; ++i)
8433       ++a;
8434   }
8435 #pragma omp target teams distribute parallel for
8436   for (int i = 0; i < 10; ++i) {
8437 #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?}}
8438     for (int i = 0; i < 10; ++i)
8439       ++a;
8440   }
8441 #pragma omp target teams distribute parallel for
8442   for (int i = 0; i < 10; ++i) {
8443 #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?}}
8444     for (int i = 0; i < 10; ++i)
8445       ;
8446   }
8447 #pragma omp target teams distribute parallel for
8448   for (int i = 0; i < 10; ++i) {
8449 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8450     a++;
8451   }
8452 #pragma omp target teams distribute parallel for
8453   for (int i = 0; i < 10; ++i) {
8454 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8455     for (int i = 0; i < 10; ++i)
8456       ;
8457   }
8458 #pragma omp target teams distribute parallel for
8459   for (int i = 0; i < 10; ++i) {
8460 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8461     for (int i = 0; i < 10; ++i)
8462       ;
8463   }
8464 #pragma omp target teams distribute parallel for
8465   for (int i = 0; i < 10; ++i) {
8466 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8467     for (int i = 0; i < 10; ++i)
8468       ;
8469   }
8470 #pragma omp target teams distribute parallel for
8471   for (int i = 0; i < 10; ++i) {
8472 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8473     for (int i = 0; i < 10; ++i)
8474       ;
8475   }
8476 
8477 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
8478 #pragma omp target teams distribute parallel for simd // OK
8479   for (int i = 0; i < 10; ++i)
8480     ;
8481 #pragma omp target teams distribute parallel for simd
8482   for (int i = 0; i < 10; ++i) {
8483 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8484     for (int i = 0; i < 10; ++i)
8485       ;
8486   }
8487 #pragma omp target teams distribute parallel for simd
8488   for (int i = 0; i < 10; ++i) {
8489 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8490     for (int i = 0; i < 10; ++i)
8491       ;
8492   }
8493 #pragma omp target teams distribute parallel for simd
8494   for (int i = 0; i < 10; ++i) {
8495 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8496     for (int i = 0; i < 10; ++i)
8497       ;
8498   }
8499 #pragma omp target teams distribute parallel for simd
8500   for (int i = 0; i < 10; ++i) {
8501 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8502     for (int i = 0; i < 10; ++i)
8503       ;
8504   }
8505 #pragma omp target teams distribute parallel for simd
8506   for (int i = 0; i < 10; ++i) {
8507 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8508     for (int i = 0; i < 10; ++i)
8509       ;
8510   }
8511 #pragma omp target teams distribute parallel for simd
8512   for (int i = 0; i < 10; ++i) {
8513 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8514     for (int i = 0; i < 10; ++i)
8515       ;
8516   }
8517 #pragma omp target teams distribute parallel for simd
8518   for (int i = 0; i < 10; ++i) {
8519 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8520     {
8521       bar();
8522     }
8523   }
8524 #pragma omp target teams distribute parallel for simd
8525   for (int i = 0; i < 10; ++i) {
8526 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8527     {
8528       bar();
8529     }
8530   }
8531 #pragma omp target teams distribute parallel for simd
8532   for (int i = 0; i < 10; ++i) {
8533 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8534     {
8535       bar();
8536     }
8537   }
8538 #pragma omp target teams distribute parallel for simd
8539   for (int i = 0; i < 10; ++i) {
8540 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8541     {
8542       bar();
8543     }
8544   }
8545 #pragma omp target teams distribute parallel for simd
8546   for (int i = 0; i < 10; ++i) {
8547 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8548     {
8549       bar();
8550     }
8551   }
8552 #pragma omp target teams distribute parallel for simd
8553   for (int i = 0; i < 10; ++i) {
8554 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8555     {
8556 #pragma omp single
8557       {
8558 	bar();
8559       }
8560     }
8561   }
8562 #pragma omp target teams distribute parallel for simd
8563   for (int i = 0; i < 10; ++i) {
8564 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8565     for (int i = 0; i < 10; ++i)
8566       ;
8567   }
8568 #pragma omp target teams distribute parallel for simd
8569   for (int i = 0; i < 10; ++i) {
8570 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8571     for (int i = 0; i < 10; ++i)
8572       ;
8573   }
8574 #pragma omp target teams distribute parallel for simd
8575   for (int i = 0; i < 10; ++i) {
8576 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8577     {
8578       bar();
8579     }
8580   }
8581 #pragma omp target teams distribute parallel for simd
8582   for (int i = 0; i < 10; ++i) {
8583 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8584     {
8585       bar();
8586     }
8587   }
8588 #pragma omp target teams distribute parallel for simd
8589   for (int i = 0; i < 10; ++i) {
8590 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8591     bar();
8592   }
8593 #pragma omp target teams distribute parallel for simd
8594   for (int i = 0; i < 10; ++i) {
8595 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8596     bar();
8597   }
8598 #pragma omp target teams distribute parallel for simd
8599   for (int i = 0; i < 10; ++i) {
8600 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8601     bar();
8602   }
8603 #pragma omp target teams distribute parallel for simd
8604   for (int i = 0; i < 10; ++i) {
8605 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8606     bar();
8607   }
8608 #pragma omp target teams distribute parallel for simd
8609   for (int i = 0; i < 10; ++i) {
8610 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8611     bar();
8612   }
8613 #pragma omp target teams distribute parallel for simd
8614   for (int i = 0; i < 10; ++i) {
8615 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
8616     ++a;
8617   }
8618 #pragma omp target teams distribute parallel for simd
8619   for (int i = 0; i < 10; ++i) {
8620 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8621     ++a;
8622   }
8623 #pragma omp target teams distribute parallel for simd
8624   for (int i = 0; i < 10; ++i) {
8625 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8626     ++a;
8627   }
8628 #pragma omp target teams distribute parallel for simd
8629   for (int i = 0; i < 10; ++i) {
8630 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8631     for (int i = 0; i < 10; ++i)
8632       ;
8633   }
8634 #pragma omp target teams distribute parallel for simd
8635   for (int i = 0; i < 10; ++i) {
8636 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8637     ++a;
8638   }
8639 #pragma omp target teams distribute parallel for simd
8640   for (int i = 0; i < 10; ++i) {
8641 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8642     ++a;
8643   }
8644 #pragma omp target teams distribute parallel for simd
8645   for (int i = 0; i < 10; ++i) {
8646 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8647     ++a;
8648   }
8649 #pragma omp target teams distribute parallel for simd
8650   for (int i = 0; i < 10; ++i) {
8651 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8652     ++a;
8653   }
8654 #pragma omp target teams distribute parallel for simd
8655   for (int i = 0; i < 10; ++i) {
8656 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8657     for (int i = 0; i < 10; ++i)
8658       ++a;
8659   }
8660 #pragma omp target teams distribute parallel for simd
8661   for (int i = 0; i < 10; ++i) {
8662 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8663     for (int i = 0; i < 10; ++i)
8664       ++a;
8665   }
8666 #pragma omp target teams distribute parallel for simd
8667   for (int i = 0; i < 10; ++i) {
8668 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8669     for (int i = 0; i < 10; ++i)
8670       ++a;
8671   }
8672 #pragma omp target teams distribute parallel for simd
8673   for (int i = 0; i < 10; ++i) {
8674 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8675     for (int i = 0; i < 10; ++i)
8676       ++a;
8677   }
8678 #pragma omp target teams distribute parallel for simd
8679   for (int i = 0; i < 10; ++i) {
8680 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8681     for (int i = 0; i < 10; ++i)
8682       ++a;
8683   }
8684 #pragma omp target teams distribute parallel for simd
8685   for (int i = 0; i < 10; ++i) {
8686 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8687     for (int i = 0; i < 10; ++i)
8688       ;
8689   }
8690 #pragma omp target teams distribute parallel for simd
8691   for (int i = 0; i < 10; ++i) {
8692 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8693     a++;
8694   }
8695 #pragma omp target teams distribute parallel for simd
8696   for (int i = 0; i < 10; ++i) {
8697 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8698     for (int i = 0; i < 10; ++i)
8699       ;
8700   }
8701 #pragma omp target teams distribute parallel for simd
8702   for (int i = 0; i < 10; ++i) {
8703 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8704     for (int i = 0; i < 10; ++i)
8705       ;
8706   }
8707 #pragma omp target teams distribute parallel for simd
8708   for (int i = 0; i < 10; ++i) {
8709 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8710     for (int i = 0; i < 10; ++i)
8711       ;
8712   }
8713 #pragma omp target teams distribute parallel for simd
8714   for (int i = 0; i < 10; ++i) {
8715 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8716     for (int i = 0; i < 10; ++i)
8717       ;
8718   }
8719 
8720 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
8721 #pragma omp target teams distribute simd // OK
8722   for (int i = 0; i < 10; ++i)
8723     ;
8724 #pragma omp target teams distribute simd
8725   for (int i = 0; i < 10; ++i) {
8726 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8727     for (int i = 0; i < 10; ++i)
8728       ;
8729   }
8730 #pragma omp target teams distribute simd
8731   for (int i = 0; i < 10; ++i) {
8732 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8733     for (int i = 0; i < 10; ++i)
8734       ;
8735   }
8736 #pragma omp target teams distribute simd
8737   for (int i = 0; i < 10; ++i) {
8738 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8739     for (int i = 0; i < 10; ++i)
8740       ;
8741   }
8742 #pragma omp target teams distribute simd
8743   for (int i = 0; i < 10; ++i) {
8744 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8745     for (int i = 0; i < 10; ++i)
8746       ;
8747   }
8748 #pragma omp target teams distribute simd
8749   for (int i = 0; i < 10; ++i) {
8750 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8751     for (int i = 0; i < 10; ++i)
8752       ;
8753   }
8754 #pragma omp target teams distribute simd
8755   for (int i = 0; i < 10; ++i) {
8756 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8757     for (int i = 0; i < 10; ++i)
8758       ;
8759   }
8760 #pragma omp target teams distribute simd
8761   for (int i = 0; i < 10; ++i) {
8762 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8763     {
8764       bar();
8765     }
8766   }
8767 #pragma omp target teams distribute simd
8768   for (int i = 0; i < 10; ++i) {
8769 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8770     {
8771       bar();
8772     }
8773   }
8774 #pragma omp target teams distribute simd
8775   for (int i = 0; i < 10; ++i) {
8776 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8777     {
8778       bar();
8779     }
8780   }
8781 #pragma omp target teams distribute simd
8782   for (int i = 0; i < 10; ++i) {
8783 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8784     {
8785       bar();
8786     }
8787   }
8788 #pragma omp target teams distribute simd
8789   for (int i = 0; i < 10; ++i) {
8790 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8791     {
8792       bar();
8793     }
8794   }
8795 #pragma omp target teams distribute simd
8796   for (int i = 0; i < 10; ++i) {
8797 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8798     {
8799 #pragma omp single
8800       {
8801 	bar();
8802       }
8803     }
8804   }
8805 #pragma omp target teams distribute simd
8806   for (int i = 0; i < 10; ++i) {
8807 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8808     for (int i = 0; i < 10; ++i)
8809       ;
8810   }
8811 #pragma omp target teams distribute simd
8812   for (int i = 0; i < 10; ++i) {
8813 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8814     for (int i = 0; i < 10; ++i)
8815       ;
8816   }
8817 #pragma omp target teams distribute simd
8818   for (int i = 0; i < 10; ++i) {
8819 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8820     {
8821       bar();
8822     }
8823   }
8824 #pragma omp target teams distribute simd
8825   for (int i = 0; i < 10; ++i) {
8826 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8827     {
8828       bar();
8829     }
8830   }
8831 #pragma omp target teams distribute simd
8832   for (int i = 0; i < 10; ++i) {
8833 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8834     bar();
8835   }
8836 #pragma omp target teams distribute simd
8837   for (int i = 0; i < 10; ++i) {
8838 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8839     bar();
8840   }
8841 #pragma omp target teams distribute simd
8842   for (int i = 0; i < 10; ++i) {
8843 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8844     bar();
8845   }
8846 #pragma omp target teams distribute simd
8847   for (int i = 0; i < 10; ++i) {
8848 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8849     bar();
8850   }
8851 #pragma omp target teams distribute simd
8852   for (int i = 0; i < 10; ++i) {
8853 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8854     bar();
8855   }
8856 #pragma omp target teams distribute simd
8857   for (int i = 0; i < 10; ++i) {
8858 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
8859     ++a;
8860   }
8861 #pragma omp target teams distribute simd
8862   for (int i = 0; i < 10; ++i) {
8863 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8864     ++a;
8865   }
8866 #pragma omp target teams distribute simd
8867   for (int i = 0; i < 10; ++i) {
8868 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8869     ++a;
8870   }
8871 #pragma omp target teams distribute simd
8872   for (int i = 0; i < 10; ++i) {
8873 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8874     for (int i = 0; i < 10; ++i)
8875       ;
8876   }
8877 #pragma omp target teams distribute simd
8878   for (int i = 0; i < 10; ++i) {
8879 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8880     ++a;
8881   }
8882 #pragma omp target teams distribute simd
8883   for (int i = 0; i < 10; ++i) {
8884 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8885     ++a;
8886   }
8887 #pragma omp target teams distribute simd
8888   for (int i = 0; i < 10; ++i) {
8889 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8890     ++a;
8891   }
8892 #pragma omp target teams distribute simd
8893   for (int i = 0; i < 10; ++i) {
8894 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8895     ++a;
8896   }
8897 #pragma omp target teams distribute simd
8898   for (int i = 0; i < 10; ++i) {
8899 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8900     for (int i = 0; i < 10; ++i)
8901       ++a;
8902   }
8903 #pragma omp target teams distribute simd
8904   for (int i = 0; i < 10; ++i) {
8905 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8906     for (int i = 0; i < 10; ++i)
8907       ++a;
8908   }
8909 #pragma omp target teams distribute simd
8910   for (int i = 0; i < 10; ++i) {
8911 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8912     for (int i = 0; i < 10; ++i)
8913       ++a;
8914   }
8915 #pragma omp target teams distribute simd
8916   for (int i = 0; i < 10; ++i) {
8917 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8918     for (int i = 0; i < 10; ++i)
8919       ++a;
8920   }
8921 #pragma omp target teams distribute simd
8922   for (int i = 0; i < 10; ++i) {
8923 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8924     for (int i = 0; i < 10; ++i)
8925       ++a;
8926   }
8927 #pragma omp target teams distribute simd
8928   for (int i = 0; i < 10; ++i) {
8929 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8930     for (int i = 0; i < 10; ++i)
8931       ;
8932   }
8933 #pragma omp target teams distribute simd
8934   for (int i = 0; i < 10; ++i) {
8935 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8936     a++;
8937   }
8938 #pragma omp target teams distribute simd
8939   for (int i = 0; i < 10; ++i) {
8940 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8941     for (int i = 0; i < 10; ++i)
8942       ;
8943   }
8944 #pragma omp target teams distribute simd
8945   for (int i = 0; i < 10; ++i) {
8946 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8947     for (int i = 0; i < 10; ++i)
8948       ;
8949   }
8950 #pragma omp target teams distribute simd
8951   for (int i = 0; i < 10; ++i) {
8952 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8953     for (int i = 0; i < 10; ++i)
8954       ;
8955   }
8956 #pragma omp target teams distribute simd
8957   for (int i = 0; i < 10; ++i) {
8958 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8959     for (int i = 0; i < 10; ++i)
8960       ;
8961   }
8962 
8963 }
8964 
foo()8965 void foo() {
8966   int a = 0;
8967 // PARALLEL DIRECTIVE
8968 #pragma omp parallel
8969 #pragma omp for
8970   for (int i = 0; i < 10; ++i)
8971     ;
8972 #pragma omp parallel
8973 #pragma omp simd
8974   for (int i = 0; i < 10; ++i)
8975     ;
8976 #pragma omp parallel
8977 #pragma omp for simd
8978   for (int i = 0; i < 10; ++i)
8979     ;
8980 #pragma omp parallel
8981 #pragma omp sections
8982   {
8983     bar();
8984   }
8985 #pragma omp parallel
8986 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
8987   {
8988     bar();
8989   }
8990 #pragma omp parallel
8991 #pragma omp sections
8992   {
8993     bar();
8994   }
8995 #pragma omp parallel
8996 #pragma omp single
8997   bar();
8998 #pragma omp parallel
8999 #pragma omp master
9000   bar();
9001 #pragma omp parallel
9002 #pragma omp critical
9003   bar();
9004 #pragma omp parallel
9005 #pragma omp parallel for
9006   for (int i = 0; i < 10; ++i)
9007     ;
9008 #pragma omp parallel
9009 #pragma omp parallel for simd
9010   for (int i = 0; i < 10; ++i)
9011     ;
9012 #pragma omp parallel
9013 #pragma omp parallel sections
9014   {
9015     bar();
9016   }
9017 #pragma omp parallel
9018 #pragma omp task
9019   {
9020     bar();
9021   }
9022 #pragma omp parallel
9023   {
9024 #pragma omp taskyield
9025     bar();
9026   }
9027 #pragma omp parallel
9028   {
9029 #pragma omp barrier
9030     bar();
9031   }
9032 #pragma omp parallel
9033   {
9034 #pragma omp taskwait
9035     bar();
9036   }
9037 #pragma omp parallel
9038   {
9039 #pragma omp flush
9040     bar();
9041   }
9042 #pragma omp parallel
9043   {
9044 #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?}}
9045     bar();
9046   }
9047 #pragma omp parallel
9048   {
9049 #pragma omp atomic
9050     ++a;
9051   }
9052 #pragma omp parallel
9053   {
9054 #pragma omp target
9055     ++a;
9056   }
9057 #pragma omp parallel
9058   {
9059 #pragma omp target parallel
9060     ++a;
9061   }
9062 #pragma omp parallel
9063 #pragma omp target parallel for
9064   for (int i = 0; i < 10; ++i)
9065     ;
9066 #pragma omp parallel
9067   {
9068 #pragma omp target enter data map(to: a)
9069     ++a;
9070   }
9071 #pragma omp parallel
9072   {
9073 #pragma omp target exit data map(from: a)
9074     ++a;
9075   }
9076 #pragma omp parallel
9077   {
9078 #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?}}
9079     ++a;
9080   }
9081 #pragma omp parallel
9082   {
9083 #pragma omp taskloop
9084   for (int i = 0; i < 10; ++i)
9085     ++a;
9086   }
9087 #pragma omp parallel
9088   {
9089 #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?}}
9090     for (int i = 0; i < 10; ++i)
9091       ;
9092   }
9093 #pragma omp parallel
9094   {
9095 #pragma omp target update to(a)
9096     a++;
9097   }
9098 #pragma omp parallel
9099   {
9100 #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?}}
9101     for (int i = 0; i < 10; ++i)
9102       ;
9103   }
9104 #pragma omp parallel
9105   {
9106 #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?}}
9107     for (int i = 0; i < 10; ++i)
9108       ;
9109   }
9110 #pragma omp parallel
9111   {
9112 #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?}}
9113     for (int i = 0; i < 10; ++i)
9114       ;
9115   }
9116 #pragma omp parallel
9117   {
9118 #pragma omp target simd // OK
9119     for (int i = 0; i < 10; ++i)
9120       ;
9121   }
9122 #pragma omp parallel
9123   {
9124 #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?}}
9125     for (int i = 0; i < 10; ++i)
9126       ;
9127   }
9128 #pragma omp parallel
9129   {
9130 #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?}}
9131     for (int i = 0; i < 10; ++i)
9132       ;
9133   }
9134 #pragma omp parallel
9135   {
9136 #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?}}
9137     for (int i = 0; i < 10; ++i)
9138       ;
9139   }
9140 #pragma omp parallel
9141   {
9142 #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?}}
9143     for (int i = 0; i < 10; ++i)
9144       ;
9145   }
9146 #pragma omp parallel
9147   {
9148 #pragma omp target teams // OK
9149     a++;
9150   }
9151 #pragma omp parallel
9152   {
9153 #pragma omp target teams distribute // OK
9154     for (int i = 0; i < 10; ++i)
9155       ;
9156   }
9157 #pragma omp parallel
9158   {
9159 #pragma omp target teams distribute parallel for // OK
9160     for (int i = 0; i < 10; ++i)
9161       ;
9162   }
9163 #pragma omp parallel
9164   {
9165 #pragma omp target teams distribute parallel for simd // OK
9166     for (int i = 0; i < 10; ++i)
9167       ;
9168   }
9169 #pragma omp parallel
9170   {
9171 #pragma omp target teams distribute simd // OK
9172     for (int i = 0; i < 10; ++i)
9173       ;
9174   }
9175 
9176 // SIMD DIRECTIVE
9177 #pragma omp simd
9178   for (int i = 0; i < 10; ++i) {
9179 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9180     for (int i = 0; i < 10; ++i)
9181       ;
9182   }
9183 #pragma omp simd
9184   for (int i = 0; i < 10; ++i) {
9185 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9186     for (int i = 0; i < 10; ++i)
9187       ;
9188   }
9189 #pragma omp simd
9190   for (int i = 0; i < 10; ++i) {
9191 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9192     for (int i = 0; i < 10; ++i)
9193       ;
9194   }
9195 #pragma omp simd
9196   for (int i = 0; i < 10; ++i) {
9197 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9198     for (int i = 0; i < 10; ++i)
9199       ;
9200   }
9201 #pragma omp simd
9202   for (int i = 0; i < 10; ++i) {
9203 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9204     {
9205       bar();
9206     }
9207   }
9208 #pragma omp simd
9209   for (int i = 0; i < 10; ++i) {
9210 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9211     {
9212       bar();
9213     }
9214   }
9215 #pragma omp simd
9216   for (int i = 0; i < 10; ++i) {
9217 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9218     bar();
9219 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9220     bar();
9221   }
9222 #pragma omp simd
9223   for (int i = 0; i < 10; ++i) {
9224 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9225     bar();
9226 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9227     bar();
9228   }
9229 #pragma omp simd
9230   for (int i = 0; i < 10; ++i) {
9231 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9232     for (int i = 0; i < 10; ++i)
9233       ;
9234   }
9235 #pragma omp simd
9236   for (int i = 0; i < 10; ++i) {
9237 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9238     for (int i = 0; i < 10; ++i)
9239       ;
9240   }
9241 #pragma omp simd
9242   for (int i = 0; i < 10; ++i) {
9243 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9244     {
9245       bar();
9246     }
9247   }
9248 #pragma omp simd
9249   for (int i = 0; i < 10; ++i) {
9250 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9251     {
9252       bar();
9253     }
9254   }
9255 #pragma omp simd
9256   for (int i = 0; i < 10; ++i) {
9257 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9258     bar();
9259   }
9260 #pragma omp simd
9261   for (int i = 0; i < 10; ++i) {
9262 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9263     bar();
9264   }
9265 #pragma omp simd
9266   for (int i = 0; i < 10; ++i) {
9267 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9268     bar();
9269   }
9270 #pragma omp simd
9271   for (int i = 0; i < 10; ++i) {
9272 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9273     bar();
9274   }
9275 #pragma omp simd
9276   for (int i = 0; i < 10; ++i) {
9277 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9278     bar();
9279   }
9280 #pragma omp simd
9281   for (int i = 0; i < 10; ++i) {
9282 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9283     ++a;
9284   }
9285 #pragma omp simd
9286   for (int i = 0; i < 10; ++i) {
9287 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9288     ++a;
9289   }
9290 #pragma omp simd
9291   for (int i = 0; i < 10; ++i) {
9292 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9293     ++a;
9294   }
9295 #pragma omp simd
9296   for (int i = 0; i < 10; ++i) {
9297 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9298     for (int i = 0; i < 10; ++i)
9299       ;
9300   }
9301 #pragma omp simd
9302   for (int i = 0; i < 10; ++i) {
9303 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9304     ++a;
9305   }
9306 #pragma omp simd
9307   for (int i = 0; i < 10; ++i) {
9308 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9309     ++a;
9310   }
9311 #pragma omp simd
9312   for (int i = 0; i < 10; ++i) {
9313 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9314     ++a;
9315   }
9316 #pragma omp simd
9317   for (int i = 0; i < 10; ++i) {
9318 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9319   for (int i = 0; i < 10; ++i)
9320     ++a;
9321   }
9322 #pragma omp simd
9323   for (int i = 0; i < 10; ++i) {
9324 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9325     for (int j = 0; j < 10; ++j)
9326       ;
9327   }
9328 #pragma omp simd
9329   for (int i = 0; i < 10; ++i) {
9330 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9331     a++;
9332   }
9333 #pragma omp simd
9334   for (int i = 0; i < 10; ++i) {
9335 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9336     for (int j = 0; j < 10; ++j)
9337       ;
9338   }
9339 #pragma omp simd
9340   for (int i = 0; i < 10; ++i) {
9341 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9342     for (int j = 0; j < 10; ++j)
9343       ;
9344   }
9345 #pragma omp simd
9346   for (int i = 0; i < 10; ++i) {
9347 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9348     for (int j = 0; j < 10; ++j)
9349       ;
9350   }
9351 #pragma omp simd
9352   for (int i = 0; i < 10; ++i) {
9353 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9354     for (int j = 0; j < 10; ++j)
9355       ;
9356   }
9357 #pragma omp simd
9358   for (int i = 0; i < 10; ++i) {
9359 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9360     for (int j = 0; j < 10; ++j)
9361       ;
9362   }
9363 #pragma omp simd
9364   for (int i = 0; i < 10; ++i) {
9365 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9366     for (int j = 0; j < 10; ++j)
9367       ;
9368   }
9369 #pragma omp simd
9370   for (int i = 0; i < 10; ++i) {
9371 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9372     for (int j = 0; j < 10; ++j)
9373       ;
9374   }
9375 #pragma omp simd
9376   for (int i = 0; i < 10; ++i) {
9377 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9378     for (int j = 0; j < 10; ++j)
9379       ;
9380   }
9381 #pragma omp simd
9382   for (int i = 0; i < 10; ++i) {
9383 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9384     a++;
9385   }
9386 #pragma omp simd
9387   for (int i = 0; i < 10; ++i) {
9388 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9389     for (int j = 0; j < 10; ++j)
9390       ;
9391   }
9392 #pragma omp simd
9393   for (int i = 0; i < 10; ++i) {
9394 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9395     for (int j = 0; j < 10; ++j)
9396       ;
9397   }
9398 #pragma omp simd
9399   for (int i = 0; i < 10; ++i) {
9400 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9401     for (int j = 0; j < 10; ++j)
9402       ;
9403   }
9404 #pragma omp simd
9405   for (int i = 0; i < 10; ++i) {
9406 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9407     for (int j = 0; j < 10; ++j)
9408       ;
9409   }
9410 
9411 // FOR DIRECTIVE
9412 #pragma omp for
9413   for (int i = 0; i < 10; ++i) {
9414 #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?}}
9415     for (int i = 0; i < 10; ++i)
9416       ;
9417   }
9418 #pragma omp for
9419   for (int i = 0; i < 10; ++i) {
9420 #pragma omp simd
9421     for (int i = 0; i < 10; ++i)
9422       ;
9423   }
9424 #pragma omp for
9425   for (int i = 0; i < 10; ++i) {
9426 #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?}}
9427     for (int i = 0; i < 10; ++i)
9428       ;
9429   }
9430 #pragma omp for
9431   for (int i = 0; i < 10; ++i) {
9432 #pragma omp parallel
9433     for (int i = 0; i < 10; ++i)
9434       ;
9435   }
9436 #pragma omp for
9437   for (int i = 0; i < 10; ++i) {
9438 #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?}}
9439     {
9440       bar();
9441     }
9442   }
9443 #pragma omp for
9444   for (int i = 0; i < 10; ++i) {
9445 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
9446     {
9447       bar();
9448     }
9449   }
9450 #pragma omp for
9451   for (int i = 0; i < 10; ++i) {
9452 #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?}}
9453     bar();
9454 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
9455     bar();
9456 #pragma omp critical
9457     bar();
9458   }
9459 #pragma omp for
9460   for (int i = 0; i < 10; ++i) {
9461 #pragma omp parallel
9462     {
9463 #pragma omp single // OK
9464       {
9465         bar();
9466       }
9467 #pragma omp for // OK
9468       for (int i = 0; i < 10; ++i)
9469         ;
9470 #pragma omp for simd // OK
9471       for (int i = 0; i < 10; ++i)
9472         ;
9473 #pragma omp sections // OK
9474       {
9475         bar();
9476       }
9477     }
9478   }
9479 #pragma omp for
9480   for (int i = 0; i < 10; ++i) {
9481 #pragma omp parallel for
9482     for (int i = 0; i < 10; ++i)
9483       ;
9484   }
9485 #pragma omp for
9486   for (int i = 0; i < 10; ++i) {
9487 #pragma omp parallel for simd
9488     for (int i = 0; i < 10; ++i)
9489       ;
9490   }
9491 #pragma omp for
9492   for (int i = 0; i < 10; ++i) {
9493 #pragma omp parallel sections
9494     {
9495       bar();
9496     }
9497   }
9498 #pragma omp for
9499   for (int i = 0; i < 10; ++i) {
9500 #pragma omp task
9501     {
9502       bar();
9503     }
9504   }
9505 #pragma omp for
9506   for (int i = 0; i < 10; ++i) {
9507 #pragma omp taskyield
9508     bar();
9509   }
9510 #pragma omp for
9511   for (int i = 0; i < 10; ++i) {
9512 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
9513     bar();
9514   }
9515 #pragma omp for
9516   for (int i = 0; i < 10; ++i) {
9517 #pragma omp taskwait
9518     bar();
9519   }
9520 #pragma omp for
9521   for (int i = 0; i < 10; ++i) {
9522 #pragma omp flush
9523     bar();
9524   }
9525 #pragma omp for
9526   for (int i = 0; i < 10; ++i) {
9527 #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?}}
9528     bar();
9529   }
9530 #pragma omp for ordered
9531   for (int i = 0; i < 10; ++i) {
9532 #pragma omp ordered // OK
9533     bar();
9534   }
9535 #pragma omp for
9536   for (int i = 0; i < 10; ++i) {
9537 #pragma omp atomic
9538     ++a;
9539   }
9540 #pragma omp for
9541   for (int i = 0; i < 10; ++i) {
9542 #pragma omp target
9543     ++a;
9544   }
9545 #pragma omp for
9546   for (int i = 0; i < 10; ++i) {
9547 #pragma omp target parallel
9548     ++a;
9549   }
9550 #pragma omp for
9551   for (int i = 0; i < 10; ++i) {
9552 #pragma omp target parallel for
9553     for (int i = 0; i < 10; ++i)
9554       ;
9555   }
9556 #pragma omp for
9557   for (int i = 0; i < 10; ++i) {
9558 #pragma omp target enter data map(to: a)
9559     ++a;
9560   }
9561 #pragma omp for
9562   for (int i = 0; i < 10; ++i) {
9563 #pragma omp target exit data map(from: a)
9564     ++a;
9565   }
9566 #pragma omp for
9567   for (int i = 0; i < 10; ++i) {
9568 #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?}}
9569     ++a;
9570   }
9571 #pragma omp for
9572   for (int i = 0; i < 10; ++i) {
9573 #pragma omp taskloop
9574   for (int i = 0; i < 10; ++i)
9575     ++a;
9576   }
9577 #pragma omp for
9578   for (int i = 0; i < 10; ++i) {
9579 #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?}}
9580     for (int j = 0; j < 10; ++j)
9581       ;
9582   }
9583 #pragma omp for
9584   for (int i = 0; i < 10; ++i) {
9585 #pragma omp target update to(a)
9586     ++a;
9587   }
9588 #pragma omp for
9589   for (int i = 0; i < 10; ++i) {
9590 #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?}}
9591     for (int j = 0; j < 10; ++j)
9592       ;
9593   }
9594 #pragma omp for
9595   for (int i = 0; i < 10; ++i) {
9596 #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?}}
9597     for (int j = 0; j < 10; ++j)
9598       ;
9599   }
9600 #pragma omp for
9601   for (int i = 0; i < 10; ++i) {
9602 #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?}}
9603     for (int j = 0; j < 10; ++j)
9604       ;
9605   }
9606 #pragma omp for
9607   for (int i = 0; i < 10; ++i) {
9608 #pragma omp target simd // OK
9609     for (int j = 0; j < 10; ++j)
9610       ;
9611   }
9612 #pragma omp for
9613   for (int i = 0; i < 10; ++i) {
9614 #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?}}
9615     for (int j = 0; j < 10; ++j)
9616       ;
9617   }
9618 #pragma omp for
9619   for (int i = 0; i < 10; ++i) {
9620 #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?}}
9621     for (int j = 0; j < 10; ++j)
9622       ;
9623   }
9624 #pragma omp for
9625   for (int i = 0; i < 10; ++i) {
9626 #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?}}
9627     for (int j = 0; j < 10; ++j)
9628       ;
9629   }
9630 #pragma omp for
9631   for (int i = 0; i < 10; ++i) {
9632 #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?}}
9633     for (int j = 0; j < 10; ++j)
9634       ;
9635   }
9636 #pragma omp for
9637   for (int i = 0; i < 10; ++i) {
9638 #pragma omp target teams // OK
9639     a++;
9640   }
9641 #pragma omp for
9642   for (int i = 0; i < 10; ++i) {
9643 #pragma omp target teams distribute // OK
9644     for (int j = 0; j < 10; ++j)
9645       ;
9646   }
9647 #pragma omp for
9648   for (int i = 0; i < 10; ++i) {
9649 #pragma omp target teams distribute parallel for // OK
9650     for (int j = 0; j < 10; ++j)
9651       ;
9652   }
9653 #pragma omp for
9654   for (int i = 0; i < 10; ++i) {
9655 #pragma omp target teams distribute parallel for simd // OK
9656     for (int j = 0; j < 10; ++j)
9657       ;
9658   }
9659 #pragma omp for
9660   for (int i = 0; i < 10; ++i) {
9661 #pragma omp target teams distribute simd // OK
9662     for (int j = 0; j < 10; ++j)
9663       ;
9664   }
9665 
9666 // FOR SIMD DIRECTIVE
9667 #pragma omp for simd
9668   for (int i = 0; i < 10; ++i) {
9669 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9670     for (int i = 0; i < 10; ++i)
9671       ;
9672   }
9673 #pragma omp for simd
9674   for (int i = 0; i < 10; ++i) {
9675 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9676     for (int i = 0; i < 10; ++i)
9677       ;
9678   }
9679 #pragma omp for simd
9680   for (int i = 0; i < 10; ++i) {
9681 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9682     for (int i = 0; i < 10; ++i)
9683       ;
9684   }
9685 #pragma omp for simd
9686   for (int i = 0; i < 10; ++i) {
9687 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9688     for (int i = 0; i < 10; ++i)
9689       ;
9690   }
9691 #pragma omp for simd
9692   for (int i = 0; i < 10; ++i) {
9693 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9694     {
9695       bar();
9696     }
9697   }
9698 #pragma omp for simd
9699   for (int i = 0; i < 10; ++i) {
9700 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9701     {
9702       bar();
9703     }
9704   }
9705 #pragma omp for simd
9706   for (int i = 0; i < 10; ++i) {
9707 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9708     bar();
9709 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9710     bar();
9711   }
9712 #pragma omp for simd
9713   for (int i = 0; i < 10; ++i) {
9714 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9715     bar();
9716 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9717     bar();
9718   }
9719 #pragma omp for simd
9720   for (int i = 0; i < 10; ++i) {
9721 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9722     for (int i = 0; i < 10; ++i)
9723       ;
9724   }
9725 #pragma omp for simd
9726   for (int i = 0; i < 10; ++i) {
9727 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9728     for (int i = 0; i < 10; ++i)
9729       ;
9730   }
9731 #pragma omp for simd
9732   for (int i = 0; i < 10; ++i) {
9733 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9734     {
9735       bar();
9736     }
9737   }
9738 #pragma omp for simd
9739   for (int i = 0; i < 10; ++i) {
9740 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9741     {
9742       bar();
9743     }
9744   }
9745 #pragma omp for simd
9746   for (int i = 0; i < 10; ++i) {
9747 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9748     bar();
9749   }
9750 #pragma omp for simd
9751   for (int i = 0; i < 10; ++i) {
9752 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9753     bar();
9754   }
9755 #pragma omp for simd
9756   for (int i = 0; i < 10; ++i) {
9757 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9758     bar();
9759   }
9760 #pragma omp for simd
9761   for (int i = 0; i < 10; ++i) {
9762 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9763     bar();
9764   }
9765 #pragma omp for simd
9766   for (int i = 0; i < 10; ++i) {
9767 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9768     bar();
9769   }
9770 #pragma omp for simd
9771   for (int i = 0; i < 10; ++i) {
9772 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9773     ++a;
9774   }
9775 #pragma omp for simd
9776   for (int i = 0; i < 10; ++i) {
9777 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9778     ++a;
9779   }
9780 #pragma omp for simd
9781   for (int i = 0; i < 10; ++i) {
9782 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9783     ++a;
9784   }
9785 #pragma omp for simd
9786   for (int i = 0; i < 10; ++i) {
9787 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9788     for (int i = 0; i < 10; ++i)
9789       ;
9790   }
9791 #pragma omp for simd
9792   for (int i = 0; i < 10; ++i) {
9793 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9794     ++a;
9795   }
9796 #pragma omp for simd
9797   for (int i = 0; i < 10; ++i) {
9798 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9799     ++a;
9800   }
9801 #pragma omp for simd
9802   for (int i = 0; i < 10; ++i) {
9803 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9804     ++a;
9805   }
9806 #pragma omp for simd
9807   for (int i = 0; i < 10; ++i) {
9808 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9809   for (int i = 0; i < 10; ++i)
9810     ++a;
9811   }
9812 #pragma omp for simd
9813   for (int i = 0; i < 10; ++i) {
9814 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9815     for (int j = 0; j < 10; ++j)
9816       ;
9817   }
9818 #pragma omp for simd
9819   for (int i = 0; i < 10; ++i) {
9820 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9821     ++a;
9822   }
9823 #pragma omp for simd
9824   for (int i = 0; i < 10; ++i) {
9825 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9826     for (int j = 0; j < 10; ++j)
9827       ;
9828   }
9829 #pragma omp for simd
9830   for (int i = 0; i < 10; ++i) {
9831 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9832     for (int j = 0; j < 10; ++j)
9833       ;
9834   }
9835 #pragma omp for simd
9836   for (int i = 0; i < 10; ++i) {
9837 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9838     for (int j = 0; j < 10; ++j)
9839       ;
9840   }
9841 #pragma omp for simd
9842   for (int i = 0; i < 10; ++i) {
9843 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9844     for (int j = 0; j < 10; ++j)
9845       ;
9846   }
9847 #pragma omp for simd
9848   for (int i = 0; i < 10; ++i) {
9849 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9850     for (int j = 0; j < 10; ++j)
9851       ;
9852   }
9853 #pragma omp for simd
9854   for (int i = 0; i < 10; ++i) {
9855 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9856     for (int j = 0; j < 10; ++j)
9857       ;
9858   }
9859 #pragma omp for simd
9860   for (int i = 0; i < 10; ++i) {
9861 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9862     for (int j = 0; j < 10; ++j)
9863       ;
9864   }
9865 #pragma omp for simd
9866   for (int i = 0; i < 10; ++i) {
9867 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9868     for (int j = 0; j < 10; ++j)
9869       ;
9870   }
9871 #pragma omp for simd
9872   for (int i = 0; i < 10; ++i) {
9873 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9874     a++;
9875   }
9876 #pragma omp for simd
9877   for (int i = 0; i < 10; ++i) {
9878 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9879     for (int j = 0; j < 10; ++j)
9880       ;
9881   }
9882 #pragma omp for simd
9883   for (int i = 0; i < 10; ++i) {
9884 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9885     for (int j = 0; j < 10; ++j)
9886       ;
9887   }
9888 #pragma omp for simd
9889   for (int i = 0; i < 10; ++i) {
9890 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9891     for (int j = 0; j < 10; ++j)
9892       ;
9893   }
9894 #pragma omp for simd
9895   for (int i = 0; i < 10; ++i) {
9896 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9897     for (int j = 0; j < 10; ++j)
9898       ;
9899   }
9900 
9901 // SECTIONS DIRECTIVE
9902 #pragma omp sections
9903   {
9904 #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?}}
9905     for (int i = 0; i < 10; ++i)
9906       ;
9907   }
9908 #pragma omp sections
9909   {
9910 #pragma omp simd
9911     for (int i = 0; i < 10; ++i)
9912       ;
9913   }
9914 #pragma omp sections
9915   {
9916 #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?}}
9917     for (int i = 0; i < 10; ++i)
9918       ;
9919   }
9920 #pragma omp sections
9921   {
9922 #pragma omp parallel
9923     for (int i = 0; i < 10; ++i)
9924       ;
9925   }
9926 #pragma omp sections
9927   {
9928 #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?}}
9929     {
9930       bar();
9931     }
9932   }
9933 #pragma omp sections
9934   {
9935 #pragma omp section
9936     {
9937       bar();
9938     }
9939   }
9940 #pragma omp sections
9941   {
9942 #pragma omp critical
9943     bar();
9944 #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?}}
9945     bar();
9946 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
9947     bar();
9948   }
9949 #pragma omp sections
9950   {
9951 #pragma omp parallel
9952     {
9953 #pragma omp single // OK
9954       {
9955         bar();
9956       }
9957 #pragma omp for // OK
9958       for (int i = 0; i < 10; ++i)
9959         ;
9960 #pragma omp for simd // OK
9961       for (int i = 0; i < 10; ++i)
9962         ;
9963 #pragma omp sections // OK
9964       {
9965         bar();
9966       }
9967     }
9968   }
9969 #pragma omp sections
9970   {
9971 #pragma omp parallel for
9972     for (int i = 0; i < 10; ++i)
9973       ;
9974   }
9975 #pragma omp sections
9976   {
9977 #pragma omp parallel for simd
9978     for (int i = 0; i < 10; ++i)
9979       ;
9980   }
9981 #pragma omp sections
9982   {
9983 #pragma omp parallel sections
9984     {
9985       bar();
9986     }
9987   }
9988 #pragma omp sections
9989   {
9990 #pragma omp task
9991     {
9992       bar();
9993     }
9994   }
9995 #pragma omp sections
9996   {
9997 #pragma omp taskyield
9998   }
9999 #pragma omp sections
10000   {
10001 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
10002     bar();
10003   }
10004 #pragma omp sections
10005   {
10006 #pragma omp taskwait
10007   }
10008 #pragma omp sections
10009   {
10010 #pragma omp flush
10011   }
10012 #pragma omp sections
10013   {
10014 #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?}}
10015     bar();
10016   }
10017 #pragma omp sections
10018   {
10019 #pragma omp atomic
10020     ++a;
10021   }
10022 #pragma omp sections
10023   {
10024 #pragma omp target
10025     ++a;
10026   }
10027 #pragma omp sections
10028   {
10029 #pragma omp target parallel
10030     ++a;
10031   }
10032 #pragma omp sections
10033   {
10034 #pragma omp target parallel for
10035     for (int i = 0; i < 10; ++i)
10036       ;
10037   }
10038 #pragma omp sections
10039   {
10040 #pragma omp target enter data map(to: a)
10041   }
10042 #pragma omp sections
10043   {
10044 #pragma omp target exit data map(from: a)
10045   }
10046 #pragma omp sections
10047   {
10048 #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?}}
10049     ++a;
10050   }
10051 #pragma omp sections
10052   {
10053 #pragma omp taskloop
10054   for (int i = 0; i < 10; ++i)
10055     ++a;
10056   }
10057 #pragma omp sections
10058   {
10059 #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?}}
10060     for (int i = 0; i < 10; ++i)
10061       ;
10062   }
10063 #pragma omp sections
10064   {
10065 #pragma omp target update to(a)
10066   }
10067 #pragma omp sections
10068   {
10069 #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?}}
10070     for (int i = 0; i < 10; ++i)
10071       ;
10072   }
10073 #pragma omp sections
10074   {
10075 #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?}}
10076     for (int i = 0; i < 10; ++i)
10077       ;
10078   }
10079 #pragma omp sections
10080   {
10081 #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?}}
10082     for (int i = 0; i < 10; ++i)
10083       ;
10084   }
10085 #pragma omp sections
10086   {
10087 #pragma omp target simd // OK
10088     for (int i = 0; i < 10; ++i)
10089       ;
10090   }
10091 #pragma omp sections
10092   {
10093 #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?}}
10094     for (int i = 0; i < 10; ++i)
10095       ;
10096   }
10097 #pragma omp sections
10098   {
10099 #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?}}
10100     for (int i = 0; i < 10; ++i)
10101       ;
10102   }
10103 #pragma omp sections
10104   {
10105 #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?}}
10106     for (int i = 0; i < 10; ++i)
10107       ;
10108   }
10109 #pragma omp sections
10110   {
10111 #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?}}
10112     for (int i = 0; i < 10; ++i)
10113       ;
10114   }
10115 #pragma omp sections
10116   {
10117 #pragma omp target teams // OK
10118     a++;
10119   }
10120 #pragma omp sections
10121   {
10122 #pragma omp target teams distribute // OK
10123     for (int i = 0; i < 10; ++i)
10124       ;
10125   }
10126 #pragma omp sections
10127   {
10128 #pragma omp target teams distribute parallel for // OK
10129     for (int i = 0; i < 10; ++i)
10130       ;
10131   }
10132 #pragma omp sections
10133   {
10134 #pragma omp target teams distribute parallel for simd // OK
10135     for (int i = 0; i < 10; ++i)
10136       ;
10137   }
10138 #pragma omp sections
10139   {
10140 #pragma omp target teams distribute simd // OK
10141     for (int i = 0; i < 10; ++i)
10142       ;
10143   }
10144 
10145 // SECTION DIRECTIVE
10146 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
10147   {
10148     bar();
10149   }
10150 #pragma omp sections
10151   {
10152 #pragma omp section
10153     {
10154 #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?}}
10155       for (int i = 0; i < 10; ++i)
10156         ;
10157     }
10158   }
10159 #pragma omp sections
10160   {
10161 #pragma omp section
10162     {
10163 #pragma omp simd
10164       for (int i = 0; i < 10; ++i)
10165         ;
10166     }
10167   }
10168 #pragma omp sections
10169   {
10170 #pragma omp section
10171     {
10172 #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?}}
10173       for (int i = 0; i < 10; ++i)
10174         ;
10175     }
10176   }
10177 #pragma omp sections
10178   {
10179 #pragma omp section
10180     {
10181 #pragma omp parallel
10182       for (int i = 0; i < 10; ++i)
10183         ;
10184     }
10185   }
10186 #pragma omp sections
10187   {
10188 #pragma omp section
10189     {
10190 #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?}}
10191       {
10192         bar();
10193       }
10194     }
10195   }
10196 #pragma omp sections
10197   {
10198 #pragma omp section
10199     {
10200 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
10201       {
10202         bar();
10203       }
10204     }
10205   }
10206 #pragma omp sections
10207   {
10208 #pragma omp section
10209     {
10210 #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?}}
10211       bar();
10212 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
10213       bar();
10214 #pragma omp critical
10215       bar();
10216     }
10217   }
10218 #pragma omp sections
10219   {
10220 #pragma omp section
10221     {
10222 #pragma omp parallel
10223       {
10224 #pragma omp single // OK
10225         {
10226           bar();
10227         }
10228 #pragma omp for // OK
10229         for (int i = 0; i < 10; ++i)
10230           ;
10231 #pragma omp for simd // OK
10232         for (int i = 0; i < 10; ++i)
10233           ;
10234 #pragma omp sections // OK
10235         {
10236           bar();
10237         }
10238       }
10239     }
10240   }
10241 #pragma omp sections
10242   {
10243 #pragma omp section
10244     {
10245 #pragma omp parallel for
10246       for (int i = 0; i < 10; ++i)
10247         ;
10248     }
10249   }
10250 #pragma omp sections
10251   {
10252 #pragma omp section
10253     {
10254 #pragma omp parallel for simd
10255       for (int i = 0; i < 10; ++i)
10256         ;
10257     }
10258   }
10259 #pragma omp sections
10260   {
10261 #pragma omp section
10262     {
10263 #pragma omp parallel sections
10264       {
10265         bar();
10266       }
10267     }
10268   }
10269 #pragma omp sections
10270   {
10271 #pragma omp section
10272     {
10273 #pragma omp task
10274       {
10275         bar();
10276       }
10277     }
10278   }
10279 #pragma omp sections
10280   {
10281 #pragma omp section
10282     {
10283 #pragma omp taskyield
10284       bar();
10285     }
10286   }
10287 #pragma omp sections
10288   {
10289 #pragma omp section
10290     {
10291 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
10292       bar();
10293     }
10294   }
10295 #pragma omp sections
10296   {
10297 #pragma omp section
10298     {
10299 #pragma omp taskwait
10300       bar();
10301     }
10302   }
10303 #pragma omp sections
10304   {
10305 #pragma omp section
10306     {
10307 #pragma omp flush
10308       bar();
10309     }
10310   }
10311 #pragma omp sections
10312   {
10313 #pragma omp section
10314     {
10315 #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?}}
10316       bar();
10317     }
10318   }
10319 #pragma omp sections
10320   {
10321 #pragma omp section
10322     {
10323 #pragma omp atomic
10324       ++a;
10325     }
10326   }
10327 #pragma omp sections
10328   {
10329 #pragma omp section
10330     {
10331 #pragma omp target
10332       ++a;
10333     }
10334   }
10335 #pragma omp sections
10336   {
10337 #pragma omp section
10338     {
10339 #pragma omp target parallel
10340       ++a;
10341     }
10342   }
10343 #pragma omp sections
10344   {
10345 #pragma omp section
10346     {
10347 #pragma omp target parallel for
10348       for (int i = 0; i < 10; ++i)
10349         ;
10350     }
10351   }
10352 #pragma omp sections
10353   {
10354 #pragma omp section
10355     {
10356 #pragma omp target enter data map(to: a)
10357       ++a;
10358     }
10359   }
10360 #pragma omp sections
10361   {
10362 #pragma omp section
10363     {
10364 #pragma omp target exit data map(from: a)
10365       ++a;
10366     }
10367   }
10368 #pragma omp sections
10369   {
10370 #pragma omp section
10371     {
10372 #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?}}
10373       ++a;
10374     }
10375   }
10376 #pragma omp sections
10377   {
10378 #pragma omp section
10379     {
10380 #pragma omp taskloop
10381   for (int i = 0; i < 10; ++i)
10382       ++a;
10383     }
10384   }
10385 #pragma omp sections
10386   {
10387 #pragma omp section
10388 #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?}}
10389     for (int i = 0; i < 10; ++i)
10390       ;
10391   }
10392 #pragma omp sections
10393   {
10394 #pragma omp section
10395     {
10396 #pragma omp target update to(a)
10397       a++;
10398     }
10399   }
10400 #pragma omp sections
10401   {
10402 #pragma omp section
10403 #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?}}
10404     for (int i = 0; i < 10; ++i)
10405       ;
10406   }
10407 #pragma omp sections
10408   {
10409 #pragma omp section
10410 #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?}}
10411     for (int i = 0; i < 10; ++i)
10412       ;
10413   }
10414 #pragma omp sections
10415   {
10416 #pragma omp section
10417 #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?}}
10418     for (int i = 0; i < 10; ++i)
10419       ;
10420   }
10421 #pragma omp sections
10422   {
10423 #pragma omp section
10424 #pragma omp target simd // OK
10425     for (int i = 0; i < 10; ++i)
10426       ;
10427   }
10428 #pragma omp sections
10429   {
10430 #pragma omp section
10431 #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?}}
10432     for (int i = 0; i < 10; ++i)
10433       ;
10434   }
10435 #pragma omp sections
10436   {
10437 #pragma omp section
10438 #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?}}
10439     for (int i = 0; i < 10; ++i)
10440       ;
10441   }
10442 #pragma omp sections
10443   {
10444 #pragma omp section
10445 #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?}}
10446     for (int i = 0; i < 10; ++i)
10447       ;
10448   }
10449 #pragma omp sections
10450   {
10451 #pragma omp section
10452 #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?}}
10453     for (int i = 0; i < 10; ++i)
10454       ;
10455   }
10456 #pragma omp sections
10457   {
10458 #pragma omp section
10459 #pragma omp target teams // OK
10460     a++;
10461   }
10462 #pragma omp sections
10463   {
10464 #pragma omp section
10465 #pragma omp target teams distribute // OK
10466     for (int i = 0; i < 10; ++i)
10467       ;
10468   }
10469 #pragma omp sections
10470   {
10471 #pragma omp section
10472 #pragma omp target teams distribute parallel for // OK
10473     for (int i = 0; i < 10; ++i)
10474       ;
10475   }
10476 #pragma omp sections
10477   {
10478 #pragma omp section
10479 #pragma omp target teams distribute parallel for simd // OK
10480     for (int i = 0; i < 10; ++i)
10481       ;
10482   }
10483 #pragma omp sections
10484   {
10485 #pragma omp section
10486 #pragma omp target teams distribute simd // OK
10487     for (int i = 0; i < 10; ++i)
10488       ;
10489   }
10490 
10491 // SINGLE DIRECTIVE
10492 #pragma omp single
10493   {
10494 #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?}}
10495     for (int i = 0; i < 10; ++i)
10496       ;
10497   }
10498 #pragma omp single
10499   {
10500 #pragma omp simd
10501     for (int i = 0; i < 10; ++i)
10502       ;
10503   }
10504 #pragma omp single
10505   {
10506 #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?}}
10507     for (int i = 0; i < 10; ++i)
10508       ;
10509   }
10510 #pragma omp single
10511   {
10512 #pragma omp parallel
10513     for (int i = 0; i < 10; ++i)
10514       ;
10515   }
10516 #pragma omp single
10517   {
10518 #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?}}
10519     {
10520       bar();
10521     }
10522 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
10523     bar();
10524 #pragma omp critical
10525     bar();
10526   }
10527 #pragma omp single
10528   {
10529 #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?}}
10530     {
10531       bar();
10532     }
10533   }
10534 #pragma omp single
10535   {
10536 #pragma omp parallel
10537     {
10538 #pragma omp single // OK
10539       {
10540         bar();
10541       }
10542 #pragma omp for // OK
10543       for (int i = 0; i < 10; ++i)
10544         ;
10545 #pragma omp for simd // OK
10546       for (int i = 0; i < 10; ++i)
10547         ;
10548 #pragma omp sections // OK
10549       {
10550         bar();
10551       }
10552     }
10553   }
10554 #pragma omp single
10555   {
10556 #pragma omp parallel for
10557     for (int i = 0; i < 10; ++i)
10558       ;
10559   }
10560 #pragma omp single
10561   {
10562 #pragma omp parallel for simd
10563     for (int i = 0; i < 10; ++i)
10564       ;
10565   }
10566 #pragma omp single
10567   {
10568 #pragma omp parallel sections
10569     {
10570       bar();
10571     }
10572   }
10573 #pragma omp single
10574   {
10575 #pragma omp task
10576     {
10577       bar();
10578     }
10579   }
10580 #pragma omp single
10581   {
10582 #pragma omp taskyield
10583     bar();
10584   }
10585 #pragma omp single
10586   {
10587 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
10588     bar();
10589   }
10590 #pragma omp single
10591   {
10592 #pragma omp taskwait
10593     bar();
10594   }
10595 #pragma omp single
10596   {
10597 #pragma omp flush
10598     bar();
10599   }
10600 #pragma omp single
10601   {
10602 #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?}}
10603     bar();
10604   }
10605 #pragma omp single
10606   {
10607 #pragma omp atomic
10608     ++a;
10609   }
10610 #pragma omp single
10611   {
10612 #pragma omp target
10613     ++a;
10614   }
10615 #pragma omp single
10616   {
10617 #pragma omp target parallel
10618     ++a;
10619   }
10620 #pragma omp single
10621   {
10622 #pragma omp target parallel for
10623     for (int i = 0; i < 10; ++i)
10624       ;
10625   }
10626 #pragma omp single
10627   {
10628 #pragma omp target enter data map(to: a)
10629     ++a;
10630   }
10631 #pragma omp single
10632   {
10633 #pragma omp target exit data map(from: a)
10634     ++a;
10635   }
10636 #pragma omp single
10637   {
10638 #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?}}
10639     ++a;
10640   }
10641 #pragma omp single
10642   {
10643 #pragma omp taskloop
10644   for (int i = 0; i < 10; ++i)
10645     ++a;
10646   }
10647 #pragma omp single
10648   {
10649 #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?}}
10650     for (int i = 0; i < 10; ++i)
10651       ;
10652   }
10653 #pragma omp single
10654   {
10655 #pragma omp target update to(a)
10656     a++;
10657   }
10658 #pragma omp single
10659   {
10660 #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?}}
10661     for (int i = 0; i < 10; ++i)
10662       ;
10663   }
10664 #pragma omp single
10665   {
10666 #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?}}
10667     for (int i = 0; i < 10; ++i)
10668       ;
10669   }
10670 #pragma omp single
10671   {
10672 #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?}}
10673     for (int i = 0; i < 10; ++i)
10674       ;
10675   }
10676 #pragma omp single
10677   {
10678 #pragma omp target simd // OK
10679     for (int i = 0; i < 10; ++i)
10680       ;
10681   }
10682 #pragma omp single
10683   {
10684 #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?}}
10685     for (int i = 0; i < 10; ++i)
10686       ;
10687   }
10688 #pragma omp single
10689   {
10690 #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?}}
10691     for (int i = 0; i < 10; ++i)
10692       ;
10693   }
10694 #pragma omp single
10695   {
10696 #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?}}
10697     for (int i = 0; i < 10; ++i)
10698       ;
10699   }
10700 #pragma omp single
10701   {
10702 #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?}}
10703     for (int i = 0; i < 10; ++i)
10704       ;
10705   }
10706 #pragma omp single
10707   {
10708 #pragma omp target teams // oK
10709     a++;
10710   }
10711 #pragma omp single
10712   {
10713 #pragma omp target teams distribute // OK
10714     for (int i = 0; i < 10; ++i)
10715       ;
10716   }
10717 #pragma omp single
10718   {
10719 #pragma omp target teams distribute parallel for // OK
10720     for (int i = 0; i < 10; ++i)
10721       ;
10722   }
10723 #pragma omp single
10724   {
10725 #pragma omp target teams distribute parallel for simd // OK
10726     for (int i = 0; i < 10; ++i)
10727       ;
10728   }
10729 #pragma omp single
10730   {
10731 #pragma omp target teams distribute simd // OK
10732     for (int i = 0; i < 10; ++i)
10733       ;
10734   }
10735 
10736 // MASTER DIRECTIVE
10737 #pragma omp master
10738   {
10739 #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?}}
10740     for (int i = 0; i < 10; ++i)
10741       ;
10742   }
10743 #pragma omp master
10744   {
10745 #pragma omp simd
10746     for (int i = 0; i < 10; ++i)
10747       ;
10748   }
10749 #pragma omp master
10750   {
10751 #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?}}
10752     for (int i = 0; i < 10; ++i)
10753       ;
10754   }
10755 #pragma omp master
10756   {
10757 #pragma omp parallel
10758     for (int i = 0; i < 10; ++i)
10759       ;
10760   }
10761 #pragma omp master
10762   {
10763 #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?}}
10764     {
10765       bar();
10766     }
10767   }
10768 #pragma omp master
10769   {
10770 #pragma omp master // OK, though second 'master' is redundant
10771     {
10772       bar();
10773     }
10774   }
10775 #pragma omp master
10776   {
10777 #pragma omp critical
10778     {
10779       bar();
10780     }
10781   }
10782 #pragma omp master
10783   {
10784 #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?}}
10785     {
10786       bar();
10787     }
10788   }
10789 #pragma omp master
10790   {
10791 #pragma omp parallel
10792     {
10793 #pragma omp master // OK
10794       {
10795         bar();
10796       }
10797 #pragma omp for // OK
10798       for (int i = 0; i < 10; ++i)
10799         ;
10800 #pragma omp for simd // OK
10801       for (int i = 0; i < 10; ++i)
10802         ;
10803 #pragma omp sections // OK
10804       {
10805         bar();
10806       }
10807     }
10808   }
10809 #pragma omp master
10810   {
10811 #pragma omp parallel for
10812     for (int i = 0; i < 10; ++i)
10813       ;
10814   }
10815 #pragma omp master
10816   {
10817 #pragma omp parallel for simd
10818     for (int i = 0; i < 10; ++i)
10819       ;
10820   }
10821 #pragma omp master
10822   {
10823 #pragma omp parallel sections
10824     {
10825       bar();
10826     }
10827   }
10828 #pragma omp master
10829   {
10830 #pragma omp task
10831     {
10832       bar();
10833     }
10834   }
10835 #pragma omp master
10836   {
10837 #pragma omp taskyield
10838     bar();
10839   }
10840 #pragma omp master
10841   {
10842 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
10843     bar();
10844   }
10845 #pragma omp master
10846   {
10847 #pragma omp taskwait
10848     bar();
10849   }
10850 #pragma omp master
10851   {
10852 #pragma omp flush
10853     bar();
10854   }
10855 #pragma omp master
10856   {
10857 #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?}}
10858     bar();
10859   }
10860 #pragma omp master
10861   {
10862 #pragma omp atomic
10863     ++a;
10864   }
10865 #pragma omp master
10866   {
10867 #pragma omp target
10868     ++a;
10869   }
10870 #pragma omp master
10871   {
10872 #pragma omp target parallel
10873     ++a;
10874   }
10875 #pragma omp master
10876   {
10877 #pragma omp target parallel for
10878     for (int i = 0; i < 10; ++i)
10879       ;
10880   }
10881 #pragma omp master
10882   {
10883 #pragma omp target enter data map(to: a)
10884     ++a;
10885   }
10886 #pragma omp master
10887   {
10888 #pragma omp target exit data map(from: a)
10889     ++a;
10890   }
10891 #pragma omp master
10892   {
10893 #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?}}
10894     ++a;
10895   }
10896 #pragma omp master
10897   {
10898 #pragma omp taskloop
10899   for (int i = 0; i < 10; ++i)
10900     ++a;
10901   }
10902 #pragma omp master
10903   {
10904 #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?}}
10905     for (int i = 0; i < 10; ++i)
10906       ;
10907   }
10908 #pragma omp master
10909   {
10910 #pragma omp target update to(a)
10911     ++a;
10912   }
10913 #pragma omp master
10914   {
10915 #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?}}
10916     for (int i = 0; i < 10; ++i)
10917       ;
10918   }
10919 #pragma omp master
10920   {
10921 #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?}}
10922     for (int i = 0; i < 10; ++i)
10923       ;
10924   }
10925 #pragma omp master
10926   {
10927 #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?}}
10928     for (int i = 0; i < 10; ++i)
10929       ;
10930   }
10931 #pragma omp master
10932   {
10933 #pragma omp target simd // OK
10934     for (int i = 0; i < 10; ++i)
10935       ;
10936   }
10937 #pragma omp master
10938   {
10939 #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?}}
10940     for (int i = 0; i < 10; ++i)
10941       ;
10942   }
10943 #pragma omp master
10944   {
10945 #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?}}
10946     for (int i = 0; i < 10; ++i)
10947       ;
10948   }
10949 #pragma omp master
10950   {
10951 #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?}}
10952     for (int i = 0; i < 10; ++i)
10953       ;
10954   }
10955 #pragma omp master
10956   {
10957 #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?}}
10958     for (int i = 0; i < 10; ++i)
10959       ;
10960   }
10961 #pragma omp master
10962   {
10963 #pragma omp target teams // OK
10964     a++;
10965   }
10966 #pragma omp master
10967   {
10968 #pragma omp target teams distribute // OK
10969     for (int i = 0; i < 10; ++i)
10970       ;
10971   }
10972 #pragma omp master
10973   {
10974 #pragma omp target teams distribute parallel for // OK
10975     for (int i = 0; i < 10; ++i)
10976       ;
10977   }
10978 #pragma omp master
10979   {
10980 #pragma omp target teams distribute parallel for simd // OK
10981     for (int i = 0; i < 10; ++i)
10982       ;
10983   }
10984 #pragma omp master
10985   {
10986 #pragma omp target teams distribute simd // OK
10987     for (int i = 0; i < 10; ++i)
10988       ;
10989   }
10990 
10991 // CRITICAL DIRECTIVE
10992 #pragma omp critical
10993   {
10994 #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?}}
10995     for (int i = 0; i < 10; ++i)
10996       ;
10997   }
10998 #pragma omp critical
10999   {
11000 #pragma omp simd
11001     for (int i = 0; i < 10; ++i)
11002       ;
11003   }
11004 #pragma omp critical
11005   {
11006 #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?}}
11007     for (int i = 0; i < 10; ++i)
11008       ;
11009   }
11010 #pragma omp critical
11011   {
11012 #pragma omp parallel
11013     for (int i = 0; i < 10; ++i)
11014       ;
11015   }
11016 #pragma omp critical
11017   {
11018 #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?}}
11019     {
11020       bar();
11021     }
11022   }
11023 #pragma omp critical
11024   {
11025 #pragma omp master // OK, though second 'master' is redundant
11026     {
11027       bar();
11028     }
11029   }
11030 #pragma omp critical
11031   {
11032 #pragma omp critical
11033     {
11034       bar();
11035     }
11036   }
11037 #pragma omp critical
11038   {
11039 #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?}}
11040     {
11041       bar();
11042     }
11043   }
11044 #pragma omp critical
11045   {
11046 #pragma omp parallel
11047     {
11048 #pragma omp master // OK
11049       {
11050         bar();
11051       }
11052 #pragma omp for // OK
11053       for (int i = 0; i < 10; ++i)
11054         ;
11055 #pragma omp for simd // OK
11056       for (int i = 0; i < 10; ++i)
11057         ;
11058 #pragma omp sections // OK
11059       {
11060         bar();
11061       }
11062     }
11063   }
11064 #pragma omp critical
11065   {
11066 #pragma omp parallel for
11067     for (int i = 0; i < 10; ++i)
11068       ;
11069   }
11070 #pragma omp critical
11071   {
11072 #pragma omp parallel for simd
11073     for (int i = 0; i < 10; ++i)
11074       ;
11075   }
11076 #pragma omp critical
11077   {
11078 #pragma omp parallel sections
11079     {
11080       bar();
11081     }
11082   }
11083 #pragma omp critical
11084   {
11085 #pragma omp task
11086     {
11087       bar();
11088     }
11089   }
11090 #pragma omp critical
11091   {
11092 #pragma omp taskyield
11093     bar();
11094   }
11095 #pragma omp critical
11096   {
11097 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
11098     bar();
11099   }
11100 #pragma omp critical
11101   {
11102 #pragma omp taskwait
11103     bar();
11104   }
11105 #pragma omp critical(Belka)
11106   {
11107 #pragma omp critical(Strelka)
11108     bar();
11109   }
11110 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
11111   {
11112 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
11113     {
11114 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
11115       {
11116 #pragma omp parallel
11117 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
11118         {
11119           bar();
11120         }
11121       }
11122     }
11123   }
11124 #pragma omp critical
11125   {
11126 #pragma omp flush
11127     bar();
11128   }
11129 #pragma omp critical
11130   {
11131 #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?}}
11132     bar();
11133   }
11134 #pragma omp critical
11135   {
11136 #pragma omp atomic
11137     ++a;
11138   }
11139 #pragma omp critical
11140   {
11141 #pragma omp target
11142     ++a;
11143   }
11144 #pragma omp critical
11145   {
11146 #pragma omp target parallel
11147     ++a;
11148   }
11149 #pragma omp critical
11150   {
11151 #pragma omp target parallel for
11152     for (int i = 0; i < 10; ++i)
11153       ;
11154   }
11155 #pragma omp critical
11156   {
11157 #pragma omp target enter data map(to: a)
11158     ++a;
11159   }
11160 #pragma omp critical
11161   {
11162 #pragma omp target exit data map(from: a)
11163     ++a;
11164   }
11165 #pragma omp critical
11166   {
11167 #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?}}
11168     ++a;
11169   }
11170 #pragma omp critical
11171   {
11172 #pragma omp taskloop
11173   for (int i = 0; i < 10; ++i)
11174     ++a;
11175   }
11176 #pragma omp critical
11177   {
11178 #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?}}
11179     for (int i = 0; i < 10; ++i)
11180       ;
11181   }
11182 #pragma omp critical
11183   {
11184 #pragma omp target update to(a)
11185     a++;
11186   }
11187 #pragma omp critical
11188   {
11189 #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?}}
11190     for (int i = 0; i < 10; ++i)
11191       ;
11192   }
11193 #pragma omp critical
11194   {
11195 #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?}}
11196     for (int i = 0; i < 10; ++i)
11197       ;
11198   }
11199 #pragma omp critical
11200   {
11201 #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?}}
11202     for (int i = 0; i < 10; ++i)
11203       ;
11204   }
11205 #pragma omp critical
11206   {
11207 #pragma omp target simd // OK
11208     for (int i = 0; i < 10; ++i)
11209       ;
11210   }
11211 #pragma omp critical
11212   {
11213 #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?}}
11214     for (int i = 0; i < 10; ++i)
11215       ;
11216   }
11217 #pragma omp critical
11218   {
11219 #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?}}
11220     for (int i = 0; i < 10; ++i)
11221       ;
11222   }
11223 #pragma omp critical
11224   {
11225 #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?}}
11226     for (int i = 0; i < 10; ++i)
11227       ;
11228   }
11229 #pragma omp critical
11230   {
11231 #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?}}
11232     for (int i = 0; i < 10; ++i)
11233       ;
11234   }
11235 #pragma omp critical
11236   {
11237 #pragma omp target teams // OK
11238     a++;
11239   }
11240 #pragma omp critical
11241   {
11242 #pragma omp target teams distribute // OK
11243     for (int i = 0; i < 10; ++i)
11244       ;
11245   }
11246 #pragma omp critical
11247   {
11248 #pragma omp target teams distribute parallel for // OK
11249     for (int i = 0; i < 10; ++i)
11250       ;
11251   }
11252 #pragma omp critical
11253   {
11254 #pragma omp target teams distribute parallel for simd // OK
11255     for (int i = 0; i < 10; ++i)
11256       ;
11257   }
11258 #pragma omp critical
11259   {
11260 #pragma omp target teams distribute simd // OK
11261     for (int i = 0; i < 10; ++i)
11262       ;
11263   }
11264 
11265 // PARALLEL FOR DIRECTIVE
11266 #pragma omp parallel for
11267   for (int i = 0; i < 10; ++i) {
11268 #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?}}
11269     for (int i = 0; i < 10; ++i)
11270       ;
11271   }
11272 #pragma omp parallel for
11273   for (int i = 0; i < 10; ++i) {
11274 #pragma omp simd
11275     for (int i = 0; i < 10; ++i)
11276       ;
11277   }
11278 #pragma omp parallel for
11279   for (int i = 0; i < 10; ++i) {
11280 #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?}}
11281     for (int i = 0; i < 10; ++i)
11282       ;
11283   }
11284 
11285 #pragma omp parallel for
11286   for (int i = 0; i < 10; ++i) {
11287 #pragma omp parallel
11288     for (int i = 0; i < 10; ++i)
11289       ;
11290   }
11291 #pragma omp parallel for
11292   for (int i = 0; i < 10; ++i) {
11293 #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?}}
11294     {
11295       bar();
11296     }
11297   }
11298 #pragma omp parallel for
11299   for (int i = 0; i < 10; ++i) {
11300 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
11301     {
11302       bar();
11303     }
11304   }
11305 #pragma omp parallel for
11306   for (int i = 0; i < 10; ++i) {
11307 #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?}}
11308     {
11309       bar();
11310     }
11311 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11312     {
11313       bar();
11314     }
11315 #pragma omp critical
11316     {
11317       bar();
11318     }
11319   }
11320 #pragma omp parallel for
11321   for (int i = 0; i < 10; ++i) {
11322 #pragma omp parallel
11323     {
11324 #pragma omp single // OK
11325       {
11326         bar();
11327       }
11328 #pragma omp master // OK
11329       {
11330         bar();
11331       }
11332 #pragma omp critical // OK
11333       {
11334         bar();
11335       }
11336 #pragma omp for // OK
11337       for (int i = 0; i < 10; ++i)
11338         ;
11339 #pragma omp for simd // OK
11340       for (int i = 0; i < 10; ++i)
11341         ;
11342 #pragma omp sections // OK
11343       {
11344         bar();
11345       }
11346     }
11347   }
11348 #pragma omp parallel for
11349   for (int i = 0; i < 10; ++i) {
11350 #pragma omp parallel for
11351     for (int i = 0; i < 10; ++i)
11352       ;
11353   }
11354 #pragma omp parallel for
11355   for (int i = 0; i < 10; ++i) {
11356 #pragma omp parallel for simd
11357     for (int i = 0; i < 10; ++i)
11358       ;
11359   }
11360 #pragma omp parallel for
11361   for (int i = 0; i < 10; ++i) {
11362 #pragma omp parallel sections
11363     {
11364       bar();
11365     }
11366   }
11367 #pragma omp parallel for
11368   for (int i = 0; i < 10; ++i) {
11369 #pragma omp task
11370     {
11371       bar();
11372     }
11373   }
11374 #pragma omp parallel for
11375   for (int i = 0; i < 10; ++i) {
11376 #pragma omp taskyield
11377     bar();
11378   }
11379 #pragma omp parallel for
11380   for (int i = 0; i < 10; ++i) {
11381 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11382     bar();
11383   }
11384 #pragma omp parallel for
11385   for (int i = 0; i < 10; ++i) {
11386 #pragma omp taskwait
11387     bar();
11388   }
11389 #pragma omp parallel for
11390   for (int i = 0; i < 10; ++i) {
11391 #pragma omp flush
11392     bar();
11393   }
11394 #pragma omp parallel for
11395   for (int i = 0; i < 10; ++i) {
11396 #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?}}
11397     bar();
11398   }
11399 #pragma omp parallel for ordered
11400   for (int i = 0; i < 10; ++i) {
11401 #pragma omp ordered // OK
11402     bar();
11403   }
11404 #pragma omp parallel for
11405   for (int i = 0; i < 10; ++i) {
11406 #pragma omp atomic
11407     ++a;
11408   }
11409 #pragma omp parallel for
11410   for (int i = 0; i < 10; ++i) {
11411 #pragma omp target
11412     ++a;
11413   }
11414 #pragma omp parallel for
11415   for (int i = 0; i < 10; ++i) {
11416 #pragma omp target parallel
11417     ++a;
11418   }
11419 #pragma omp parallel for
11420   for (int i = 0; i < 10; ++i) {
11421 #pragma omp target parallel for
11422     for (int i = 0; i < 10; ++i)
11423       ;
11424   }
11425 #pragma omp parallel for
11426   for (int i = 0; i < 10; ++i) {
11427 #pragma omp target enter data map(to: a)
11428     ++a;
11429   }
11430 #pragma omp parallel for
11431   for (int i = 0; i < 10; ++i) {
11432 #pragma omp target exit data map(from: a)
11433     ++a;
11434   }
11435 #pragma omp parallel for
11436   for (int i = 0; i < 10; ++i) {
11437 #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?}}
11438     ++a;
11439   }
11440 #pragma omp parallel for
11441   for (int i = 0; i < 10; ++i) {
11442 #pragma omp taskloop
11443   for (int i = 0; i < 10; ++i)
11444     ++a;
11445   }
11446 #pragma omp parallel for
11447   for (int i = 0; i < 10; ++i) {
11448 #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?}}
11449     for (int j = 0; j < 10; ++j)
11450       ;
11451   }
11452 #pragma omp parallel for
11453   for (int i = 0; i < 10; ++i) {
11454 #pragma omp target update to(a)
11455     a++;
11456   }
11457 #pragma omp parallel for
11458   for (int i = 0; i < 10; ++i) {
11459 #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?}}
11460     for (int j = 0; j < 10; ++j)
11461       ;
11462   }
11463 #pragma omp parallel for
11464   for (int i = 0; i < 10; ++i) {
11465 #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?}}
11466     for (int j = 0; j < 10; ++j)
11467       ;
11468   }
11469 #pragma omp parallel for
11470   for (int i = 0; i < 10; ++i) {
11471 #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?}}
11472     for (int j = 0; j < 10; ++j)
11473       ;
11474   }
11475 #pragma omp parallel for
11476   for (int i = 0; i < 10; ++i) {
11477 #pragma omp target simd // OK
11478     for (int j = 0; j < 10; ++j)
11479       ;
11480   }
11481 #pragma omp parallel for
11482   for (int i = 0; i < 10; ++i) {
11483 #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?}}
11484     for (int j = 0; j < 10; ++j)
11485       ;
11486   }
11487 #pragma omp parallel for
11488   for (int i = 0; i < 10; ++i) {
11489 #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?}}
11490     for (int j = 0; j < 10; ++j)
11491       ;
11492   }
11493 #pragma omp parallel for
11494   for (int i = 0; i < 10; ++i) {
11495 #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?}}
11496     for (int j = 0; j < 10; ++j)
11497       ;
11498   }
11499 #pragma omp parallel for
11500   for (int i = 0; i < 10; ++i) {
11501 #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?}}
11502     for (int j = 0; j < 10; ++j)
11503       ;
11504   }
11505 #pragma omp parallel for
11506   for (int i = 0; i < 10; ++i) {
11507 #pragma omp target teams // OK
11508     a++;
11509   }
11510 #pragma omp parallel for
11511   for (int i = 0; i < 10; ++i) {
11512 #pragma omp target teams distribute // OK
11513     for (int j = 0; j < 10; ++j)
11514       ;
11515   }
11516 #pragma omp parallel for
11517   for (int i = 0; i < 10; ++i) {
11518 #pragma omp target teams distribute parallel for // OK
11519     for (int j = 0; j < 10; ++j)
11520       ;
11521   }
11522 #pragma omp parallel for
11523   for (int i = 0; i < 10; ++i) {
11524 #pragma omp target teams distribute parallel for simd // OK
11525     for (int j = 0; j < 10; ++j)
11526       ;
11527   }
11528 #pragma omp parallel for
11529   for (int i = 0; i < 10; ++i) {
11530 #pragma omp target teams distribute simd // OK
11531     for (int j = 0; j < 10; ++j)
11532       ;
11533   }
11534 
11535 // PARALLEL FOR SIMD DIRECTIVE
11536 #pragma omp parallel for simd
11537   for (int i = 0; i < 10; ++i) {
11538 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11539     for (int i = 0; i < 10; ++i)
11540       ;
11541   }
11542 #pragma omp parallel for simd
11543   for (int i = 0; i < 10; ++i) {
11544 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
11545     for (int i = 0; i < 10; ++i)
11546       ;
11547   }
11548 #pragma omp parallel for simd
11549   for (int i = 0; i < 10; ++i) {
11550 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11551     for (int i = 0; i < 10; ++i)
11552       ;
11553   }
11554 #pragma omp parallel for simd
11555   for (int i = 0; i < 10; ++i) {
11556 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11557     for (int i = 0; i < 10; ++i)
11558       ;
11559   }
11560 #pragma omp parallel for simd
11561   for (int i = 0; i < 10; ++i) {
11562 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11563     {
11564       bar();
11565     }
11566   }
11567 #pragma omp parallel for simd
11568   for (int i = 0; i < 10; ++i) {
11569 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11570     {
11571       bar();
11572     }
11573   }
11574 #pragma omp parallel for simd
11575   for (int i = 0; i < 10; ++i) {
11576 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11577     {
11578       bar();
11579     }
11580   }
11581 
11582 #pragma omp parallel for simd
11583   for (int i = 0; i < 10; ++i) {
11584 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11585     {
11586       bar();
11587     }
11588   }
11589 
11590 #pragma omp parallel for simd
11591   for (int i = 0; i < 10; ++i) {
11592 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11593     {
11594       bar();
11595     }
11596   }
11597 
11598 #pragma omp parallel for simd
11599   for (int i = 0; i < 10; ++i) {
11600 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11601     {
11602 #pragma omp single
11603       {
11604         bar();
11605       }
11606 #pragma omp for
11607       for (int i = 0; i < 10; ++i)
11608         ;
11609 #pragma omp for simd
11610       for (int i = 0; i < 10; ++i)
11611         ;
11612 #pragma omp sections
11613       {
11614         bar();
11615       }
11616     }
11617   }
11618 #pragma omp parallel for simd
11619   for (int i = 0; i < 10; ++i) {
11620 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11621     for (int i = 0; i < 10; ++i)
11622       ;
11623   }
11624 #pragma omp parallel for simd
11625   for (int i = 0; i < 10; ++i) {
11626 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
11627     for (int i = 0; i < 10; ++i)
11628       ;
11629   }
11630 #pragma omp parallel for simd
11631   for (int i = 0; i < 10; ++i) {
11632 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11633     {
11634       bar();
11635     }
11636   }
11637 #pragma omp parallel for simd
11638   for (int i = 0; i < 10; ++i) {
11639 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11640     {
11641       bar();
11642     }
11643   }
11644 #pragma omp parallel for simd
11645   for (int i = 0; i < 10; ++i) {
11646 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11647     bar();
11648   }
11649 #pragma omp parallel for simd
11650   for (int i = 0; i < 10; ++i) {
11651 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11652     bar();
11653   }
11654 #pragma omp parallel for simd
11655   for (int i = 0; i < 10; ++i) {
11656 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11657     bar();
11658   }
11659 #pragma omp parallel for simd
11660   for (int i = 0; i < 10; ++i) {
11661 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11662     bar();
11663   }
11664 #pragma omp parallel for simd
11665   for (int i = 0; i < 10; ++i) {
11666 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11667     bar();
11668   }
11669 #pragma omp parallel for simd
11670   for (int i = 0; i < 10; ++i) {
11671 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11672     bar();
11673   }
11674 #pragma omp parallel for simd
11675   for (int i = 0; i < 10; ++i) {
11676 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11677     ++a;
11678   }
11679 #pragma omp parallel for simd
11680   for (int i = 0; i < 10; ++i) {
11681 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11682     ++a;
11683   }
11684 #pragma omp parallel for simd
11685   for (int i = 0; i < 10; ++i) {
11686 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11687     ++a;
11688   }
11689 #pragma omp parallel for simd
11690   for (int i = 0; i < 10; ++i) {
11691 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11692     for (int i = 0; i < 10; ++i)
11693       ;
11694   }
11695 #pragma omp parallel for simd
11696   for (int i = 0; i < 10; ++i) {
11697 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11698     ++a;
11699   }
11700 #pragma omp parallel for simd
11701   for (int i = 0; i < 10; ++i) {
11702 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11703     ++a;
11704   }
11705 #pragma omp parallel for simd
11706   for (int i = 0; i < 10; ++i) {
11707 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11708     ++a;
11709   }
11710 #pragma omp parallel for simd
11711   for (int i = 0; i < 10; ++i) {
11712 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11713   for (int i = 0; i < 10; ++i)
11714     ++a;
11715   }
11716 #pragma omp parallel for simd
11717   for (int i = 0; i < 10; ++i) {
11718 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11719     for (int j = 0; j < 10; ++j)
11720       ;
11721   }
11722 #pragma omp parallel for simd
11723   for (int i = 0; i < 10; ++i) {
11724 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11725     a++;
11726   }
11727 #pragma omp parallel for simd
11728   for (int i = 0; i < 10; ++i) {
11729 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11730     for (int j = 0; j < 10; ++j)
11731       ;
11732   }
11733 #pragma omp parallel for simd
11734   for (int i = 0; i < 10; ++i) {
11735 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11736     for (int j = 0; j < 10; ++j)
11737       ;
11738   }
11739 #pragma omp parallel for simd
11740   for (int i = 0; i < 10; ++i) {
11741 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11742     for (int j = 0; j < 10; ++j)
11743       ;
11744   }
11745 #pragma omp parallel for simd
11746   for (int i = 0; i < 10; ++i) {
11747 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11748     for (int j = 0; j < 10; ++j)
11749       ;
11750   }
11751 #pragma omp parallel for simd
11752   for (int i = 0; i < 10; ++i) {
11753 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11754     for (int j = 0; j < 10; ++j)
11755       ;
11756   }
11757 #pragma omp parallel for simd
11758   for (int i = 0; i < 10; ++i) {
11759 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11760     for (int j = 0; j < 10; ++j)
11761       ;
11762   }
11763 #pragma omp parallel for simd
11764   for (int i = 0; i < 10; ++i) {
11765 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11766     for (int j = 0; j < 10; ++j)
11767       ;
11768   }
11769 #pragma omp parallel for simd
11770   for (int i = 0; i < 10; ++i) {
11771 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11772     for (int j = 0; j < 10; ++j)
11773       ;
11774   }
11775 #pragma omp parallel for simd
11776   for (int i = 0; i < 10; ++i) {
11777 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11778     a++;
11779   }
11780 #pragma omp parallel for simd
11781   for (int i = 0; i < 10; ++i) {
11782 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11783     for (int j = 0; j < 10; ++j)
11784       ;
11785   }
11786 #pragma omp parallel for simd
11787   for (int i = 0; i < 10; ++i) {
11788 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11789     for (int j = 0; j < 10; ++j)
11790       ;
11791   }
11792 #pragma omp parallel for simd
11793   for (int i = 0; i < 10; ++i) {
11794 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11795     for (int j = 0; j < 10; ++j)
11796       ;
11797   }
11798 #pragma omp parallel for simd
11799   for (int i = 0; i < 10; ++i) {
11800 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11801     for (int j = 0; j < 10; ++j)
11802       ;
11803   }
11804 
11805 // PARALLEL SECTIONS DIRECTIVE
11806 #pragma omp parallel sections
11807   {
11808 #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?}}
11809     for (int i = 0; i < 10; ++i)
11810       ;
11811   }
11812 #pragma omp parallel sections
11813   {
11814 #pragma omp simd
11815     for (int i = 0; i < 10; ++i)
11816       ;
11817   }
11818 #pragma omp parallel sections
11819   {
11820 #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?}}
11821     for (int i = 0; i < 10; ++i)
11822       ;
11823   }
11824 #pragma omp parallel sections
11825   {
11826 #pragma omp parallel
11827     for (int i = 0; i < 10; ++i)
11828       ;
11829   }
11830 #pragma omp parallel sections
11831   {
11832 #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?}}
11833     {
11834       bar();
11835     }
11836   }
11837 #pragma omp parallel sections
11838   {
11839 #pragma omp section
11840     {
11841       bar();
11842     }
11843   }
11844 #pragma omp parallel sections
11845   {
11846 #pragma omp section
11847     {
11848 #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?}}
11849       bar();
11850 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
11851       bar();
11852 #pragma omp critical
11853       bar();
11854     }
11855   }
11856 #pragma omp parallel sections
11857   {
11858 #pragma omp parallel
11859     {
11860 #pragma omp single // OK
11861       {
11862         bar();
11863       }
11864 #pragma omp master // OK
11865       {
11866         bar();
11867       }
11868 #pragma omp critical // OK
11869       {
11870         bar();
11871       }
11872 #pragma omp for // OK
11873       for (int i = 0; i < 10; ++i)
11874         ;
11875 #pragma omp for simd // OK
11876       for (int i = 0; i < 10; ++i)
11877         ;
11878 #pragma omp sections // OK
11879       {
11880         bar();
11881       }
11882     }
11883   }
11884 #pragma omp parallel sections
11885   {
11886 #pragma omp parallel for
11887     for (int i = 0; i < 10; ++i)
11888       ;
11889   }
11890 #pragma omp parallel sections
11891   {
11892 #pragma omp parallel for simd
11893     for (int i = 0; i < 10; ++i)
11894       ;
11895   }
11896 #pragma omp parallel sections
11897   {
11898 #pragma omp parallel sections
11899     {
11900       bar();
11901     }
11902   }
11903 #pragma omp parallel sections
11904   {
11905 #pragma omp task
11906     {
11907       bar();
11908     }
11909   }
11910 #pragma omp parallel sections
11911   {
11912 #pragma omp taskyield
11913   }
11914 #pragma omp parallel sections
11915   {
11916 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
11917   }
11918 #pragma omp parallel sections
11919   {
11920 #pragma omp taskwait
11921   }
11922 #pragma omp parallel sections
11923   {
11924 #pragma omp flush
11925   }
11926 #pragma omp parallel sections
11927   {
11928 #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?}}
11929     bar();
11930   }
11931 #pragma omp parallel sections
11932   {
11933 #pragma omp atomic
11934     ++a;
11935   }
11936 #pragma omp parallel sections
11937   {
11938 #pragma omp target
11939     ++a;
11940   }
11941 #pragma omp parallel sections
11942   {
11943 #pragma omp target parallel
11944     ++a;
11945   }
11946 #pragma omp parallel sections
11947   {
11948 #pragma omp target parallel for
11949     for (int i = 0; i < 10; ++i)
11950       ;
11951   }
11952 #pragma omp parallel sections
11953   {
11954 #pragma omp target enter data map(to: a)
11955   }
11956 #pragma omp parallel sections
11957   {
11958 #pragma omp target exit data map(from: a)
11959   }
11960 #pragma omp parallel sections
11961   {
11962 #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?}}
11963     ++a;
11964   }
11965 #pragma omp parallel sections
11966   {
11967 #pragma omp taskloop
11968   for (int i = 0; i < 10; ++i)
11969     ++a;
11970   }
11971 #pragma omp parallel sections
11972   {
11973 #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?}}
11974     for (int i = 0; i < 10; ++i)
11975       ;
11976   }
11977 #pragma omp parallel sections
11978   {
11979 #pragma omp target update to(a)
11980   }
11981 #pragma omp parallel sections
11982   {
11983 #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?}}
11984     for (int i = 0; i < 10; ++i)
11985       ;
11986   }
11987 #pragma omp parallel sections
11988   {
11989 #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?}}
11990     for (int i = 0; i < 10; ++i)
11991       ;
11992   }
11993 #pragma omp parallel sections
11994   {
11995 #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?}}
11996     for (int i = 0; i < 10; ++i)
11997       ;
11998   }
11999 #pragma omp parallel sections
12000   {
12001 #pragma omp target simd // OK
12002     for (int i = 0; i < 10; ++i)
12003       ;
12004   }
12005 #pragma omp parallel sections
12006   {
12007 #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?}}
12008     for (int i = 0; i < 10; ++i)
12009       ;
12010   }
12011 #pragma omp parallel sections
12012   {
12013 #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?}}
12014     for (int i = 0; i < 10; ++i)
12015       ;
12016   }
12017 #pragma omp parallel sections
12018   {
12019 #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?}}
12020     for (int i = 0; i < 10; ++i)
12021       ;
12022   }
12023 #pragma omp parallel sections
12024   {
12025 #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?}}
12026     for (int i = 0; i < 10; ++i)
12027       ;
12028   }
12029 #pragma omp parallel sections
12030   {
12031 #pragma omp target teams // OK
12032     a++;
12033   }
12034 #pragma omp parallel sections
12035   {
12036 #pragma omp target teams distribute // OK
12037     for (int i = 0; i < 10; ++i)
12038       ;
12039   }
12040 #pragma omp parallel sections
12041   {
12042 #pragma omp target teams distribute parallel for // OK
12043     for (int i = 0; i < 10; ++i)
12044       ;
12045   }
12046 #pragma omp parallel sections
12047   {
12048 #pragma omp target teams distribute parallel for simd // OK
12049     for (int i = 0; i < 10; ++i)
12050       ;
12051   }
12052 #pragma omp parallel sections
12053   {
12054 #pragma omp target teams distribute simd // OK
12055     for (int i = 0; i < 10; ++i)
12056       ;
12057   }
12058 
12059 // TASK DIRECTIVE
12060 #pragma omp task
12061 #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?}}
12062   for (int i = 0; i < 10; ++i)
12063     ;
12064 #pragma omp task
12065 #pragma omp simd
12066   for (int i = 0; i < 10; ++i)
12067     ;
12068 #pragma omp task
12069 #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?}}
12070   for (int i = 0; i < 10; ++i)
12071     ;
12072 #pragma omp task
12073 #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?}}
12074   {
12075     bar();
12076   }
12077 #pragma omp task
12078 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
12079   {
12080     bar();
12081   }
12082 #pragma omp task
12083 #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?}}
12084   bar();
12085 #pragma omp task
12086 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
12087   bar();
12088 #pragma omp task
12089 #pragma omp critical
12090   bar();
12091 #pragma omp task
12092 #pragma omp parallel for
12093   for (int i = 0; i < 10; ++i)
12094     ;
12095 #pragma omp task
12096 #pragma omp parallel for simd
12097   for (int i = 0; i < 10; ++i)
12098     ;
12099 #pragma omp task
12100 #pragma omp parallel sections
12101   {
12102     bar();
12103   }
12104 #pragma omp task
12105 #pragma omp task
12106   {
12107     bar();
12108   }
12109 #pragma omp task
12110   {
12111 #pragma omp taskyield
12112     bar();
12113   }
12114 #pragma omp task
12115   {
12116 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
12117     bar();
12118   }
12119 #pragma omp task
12120   {
12121 #pragma omp taskwait
12122     bar();
12123   }
12124 #pragma omp task
12125   {
12126 #pragma omp flush
12127     bar();
12128   }
12129 #pragma omp task
12130   {
12131 #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?}}
12132     bar();
12133   }
12134 #pragma omp task
12135   {
12136 #pragma omp atomic
12137     ++a;
12138   }
12139 #pragma omp task
12140   {
12141 #pragma omp target
12142     ++a;
12143   }
12144 #pragma omp task
12145   {
12146 #pragma omp target parallel
12147     ++a;
12148   }
12149 #pragma omp task
12150 #pragma omp target parallel for
12151   for (int i = 0; i < 10; ++i)
12152     ;
12153 #pragma omp task
12154   {
12155 #pragma omp target enter data map(to: a)
12156     ++a;
12157   }
12158 #pragma omp task
12159   {
12160 #pragma omp target exit data map(from: a)
12161     ++a;
12162   }
12163 #pragma omp task
12164   {
12165 #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?}}
12166     ++a;
12167   }
12168 #pragma omp task
12169   {
12170 #pragma omp taskloop
12171   for (int i = 0; i < 10; ++i)
12172     ++a;
12173   }
12174 #pragma omp task
12175   {
12176 #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?}}
12177     for (int i = 0; i < 10; ++i)
12178       ;
12179   }
12180 #pragma omp task
12181   {
12182 #pragma omp target update to(a)
12183     a++;
12184   }
12185 #pragma omp task
12186   {
12187 #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?}}
12188     for (int i = 0; i < 10; ++i)
12189       ;
12190   }
12191 #pragma omp task
12192   {
12193 #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?}}
12194     for (int i = 0; i < 10; ++i)
12195       ;
12196   }
12197 #pragma omp task
12198   {
12199 #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?}}
12200     for (int i = 0; i < 10; ++i)
12201       ;
12202   }
12203 #pragma omp task
12204   {
12205 #pragma omp target simd // OK
12206     for (int i = 0; i < 10; ++i)
12207       ;
12208   }
12209 #pragma omp task
12210   {
12211 #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?}}
12212     for (int i = 0; i < 10; ++i)
12213       ;
12214   }
12215 #pragma omp task
12216   {
12217 #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?}}
12218     for (int i = 0; i < 10; ++i)
12219       ;
12220   }
12221 #pragma omp task
12222   {
12223 #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?}}
12224     for (int i = 0; i < 10; ++i)
12225       ;
12226   }
12227 #pragma omp task
12228   {
12229 #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?}}
12230     for (int i = 0; i < 10; ++i)
12231       ;
12232   }
12233 #pragma omp task
12234   {
12235 #pragma omp target teams // OK
12236     a++;
12237   }
12238 #pragma omp task
12239   {
12240 #pragma omp target teams distribute // OK
12241     for (int i = 0; i < 10; ++i)
12242       ;
12243   }
12244 #pragma omp task
12245   {
12246 #pragma omp target teams distribute parallel for // OK
12247     for (int i = 0; i < 10; ++i)
12248       ;
12249   }
12250 #pragma omp task
12251   {
12252 #pragma omp target teams distribute parallel for simd // OK
12253     for (int i = 0; i < 10; ++i)
12254       ;
12255   }
12256 #pragma omp task
12257   {
12258 #pragma omp target teams distribute simd // OK
12259     for (int i = 0; i < 10; ++i)
12260       ;
12261   }
12262 
12263 // ATOMIC DIRECTIVE
12264 #pragma omp atomic
12265   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12266   // expected-note@+1 {{expected an expression statement}}
12267   {
12268 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12269     for (int i = 0; i < 10; ++i)
12270       ;
12271   }
12272 #pragma omp atomic
12273   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12274   // expected-note@+1 {{expected an expression statement}}
12275   {
12276 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12277     for (int i = 0; i < 10; ++i)
12278       ;
12279   }
12280 #pragma omp atomic
12281   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12282   // expected-note@+1 {{expected an expression statement}}
12283   {
12284 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12285     for (int i = 0; i < 10; ++i)
12286       ;
12287   }
12288 #pragma omp atomic
12289   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12290   // expected-note@+1 {{expected an expression statement}}
12291   {
12292 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12293     for (int i = 0; i < 10; ++i)
12294       ;
12295   }
12296 #pragma omp atomic
12297   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12298   // expected-note@+1 {{expected an expression statement}}
12299   {
12300 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12301     {
12302       bar();
12303     }
12304   }
12305 #pragma omp atomic
12306   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12307   // expected-note@+1 {{expected an expression statement}}
12308   {
12309 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12310     {
12311       bar();
12312     }
12313   }
12314 #pragma omp atomic
12315   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12316   // expected-note@+1 {{expected an expression statement}}
12317   {
12318 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12319     {
12320       bar();
12321     }
12322   }
12323 #pragma omp atomic
12324   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12325   // expected-note@+1 {{expected an expression statement}}
12326   {
12327 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12328     {
12329       bar();
12330     }
12331   }
12332 #pragma omp atomic
12333   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12334   // expected-note@+1 {{expected an expression statement}}
12335   {
12336 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12337     {
12338       bar();
12339     }
12340   }
12341 #pragma omp atomic
12342   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12343   // expected-note@+1 {{expected an expression statement}}
12344   {
12345 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12346     for (int i = 0; i < 10; ++i)
12347       ;
12348   }
12349 #pragma omp atomic
12350   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12351   // expected-note@+1 {{expected an expression statement}}
12352   {
12353 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12354     for (int i = 0; i < 10; ++i)
12355       ;
12356   }
12357 #pragma omp atomic
12358   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12359   // expected-note@+1 {{expected an expression statement}}
12360   {
12361 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12362     {
12363       bar();
12364     }
12365   }
12366 #pragma omp atomic
12367   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12368   // expected-note@+1 {{expected an expression statement}}
12369   {
12370 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12371     {
12372       bar();
12373     }
12374   }
12375 #pragma omp atomic
12376   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12377   // expected-note@+1 {{expected an expression statement}}
12378   {
12379 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12380     bar();
12381   }
12382 #pragma omp atomic
12383   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12384   // expected-note@+1 {{expected an expression statement}}
12385   {
12386 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12387     bar();
12388   }
12389 #pragma omp atomic
12390   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12391   // expected-note@+1 {{expected an expression statement}}
12392   {
12393 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12394     bar();
12395   }
12396 #pragma omp atomic
12397   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12398   // expected-note@+1 {{expected an expression statement}}
12399   {
12400 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12401     bar();
12402   }
12403 #pragma omp atomic
12404   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12405   // expected-note@+1 {{expected an expression statement}}
12406   {
12407 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12408     bar();
12409   }
12410 #pragma omp atomic
12411   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12412   // expected-note@+1 {{expected an expression statement}}
12413   {
12414 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12415     ++a;
12416   }
12417 #pragma omp atomic
12418   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12419   // expected-note@+1 {{expected an expression statement}}
12420   {
12421 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12422     ++a;
12423   }
12424 #pragma omp atomic
12425   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12426   // expected-note@+1 {{expected an expression statement}}
12427   {
12428 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12429     ++a;
12430   }
12431 #pragma omp atomic
12432   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12433   // expected-note@+1 {{expected an expression statement}}
12434   {
12435 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12436     for (int i = 0; i < 10; ++i)
12437       ;
12438   }
12439 #pragma omp atomic
12440   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12441   // expected-note@+1 {{expected an expression statement}}
12442   {
12443 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12444     ++a;
12445   }
12446 #pragma omp atomic
12447   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12448   // expected-note@+1 {{expected an expression statement}}
12449   {
12450 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12451     ++a;
12452   }
12453 #pragma omp atomic
12454   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12455   // expected-note@+1 {{expected an expression statement}}
12456   {
12457 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12458     ++a;
12459   }
12460 #pragma omp atomic
12461   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12462   // expected-note@+1 {{expected an expression statement}}
12463   {
12464 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12465   for (int i = 0; i < 10; ++i)
12466     ++a;
12467   }
12468 #pragma omp atomic
12469   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12470   // expected-note@+1 {{expected an expression statement}}
12471   {
12472 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12473     for (int i = 0; i < 10; ++i)
12474       ;
12475   }
12476 #pragma omp atomic
12477   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12478   // expected-note@+1 {{expected an expression statement}}
12479   {
12480 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12481   }
12482 #pragma omp atomic
12483   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12484   // expected-note@+1 {{expected an expression statement}}
12485   {
12486 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12487     for (int i = 0; i < 10; ++i)
12488       ;
12489   }
12490 #pragma omp atomic
12491   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12492   // expected-note@+1 {{expected an expression statement}}
12493   {
12494 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12495     for (int i = 0; i < 10; ++i)
12496       ;
12497   }
12498 #pragma omp atomic
12499   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12500   // expected-note@+1 {{expected an expression statement}}
12501   {
12502 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12503     for (int i = 0; i < 10; ++i)
12504       ;
12505   }
12506 #pragma omp atomic
12507   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12508   // expected-note@+1 {{expected an expression statement}}
12509   {
12510 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12511     for (int i = 0; i < 10; ++i)
12512       ;
12513   }
12514 #pragma omp atomic
12515   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12516   // expected-note@+1 {{expected an expression statement}}
12517   {
12518 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12519     for (int i = 0; i < 10; ++i)
12520       ;
12521   }
12522 #pragma omp atomic
12523   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12524   // expected-note@+1 {{expected an expression statement}}
12525   {
12526 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12527     for (int i = 0; i < 10; ++i)
12528       ;
12529   }
12530 #pragma omp atomic
12531   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12532   // expected-note@+1 {{expected an expression statement}}
12533   {
12534 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12535     for (int i = 0; i < 10; ++i)
12536       ;
12537   }
12538 #pragma omp atomic
12539   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12540   // expected-note@+1 {{expected an expression statement}}
12541   {
12542 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12543     for (int i = 0; i < 10; ++i)
12544       ;
12545   }
12546 #pragma omp atomic
12547   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12548   // expected-note@+1 {{expected an expression statement}}
12549   {
12550 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12551     a++;
12552   }
12553 #pragma omp atomic
12554   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12555   // expected-note@+1 {{expected an expression statement}}
12556   {
12557 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12558     for (int i = 0; i < 10; ++i)
12559       ;
12560   }
12561 #pragma omp atomic
12562   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12563   // expected-note@+1 {{expected an expression statement}}
12564   {
12565 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12566     for (int i = 0; i < 10; ++i)
12567       ;
12568   }
12569 #pragma omp atomic
12570   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12571   // expected-note@+1 {{expected an expression statement}}
12572   {
12573 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12574     for (int i = 0; i < 10; ++i)
12575       ;
12576   }
12577 #pragma omp atomic
12578   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12579   // expected-note@+1 {{expected an expression statement}}
12580   {
12581 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12582     for (int i = 0; i < 10; ++i)
12583       ;
12584   }
12585 
12586 // TARGET DIRECTIVE
12587 #pragma omp target
12588 #pragma omp parallel
12589   bar();
12590 #pragma omp target
12591 #pragma omp for
12592   for (int i = 0; i < 10; ++i)
12593     ;
12594 #pragma omp target
12595 #pragma omp simd
12596   for (int i = 0; i < 10; ++i)
12597     ;
12598 #pragma omp target
12599 #pragma omp for simd
12600   for (int i = 0; i < 10; ++i)
12601     ;
12602 #pragma omp target
12603 #pragma omp sections
12604   {
12605     bar();
12606   }
12607 #pragma omp target
12608 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
12609   {
12610     bar();
12611   }
12612 #pragma omp target
12613 #pragma omp single
12614   bar();
12615 
12616 #pragma omp target
12617 #pragma omp master
12618   {
12619     bar();
12620   }
12621 #pragma omp target
12622 #pragma omp critical
12623   {
12624     bar();
12625   }
12626 #pragma omp target
12627 #pragma omp parallel for
12628   for (int i = 0; i < 10; ++i)
12629     ;
12630 #pragma omp target
12631 #pragma omp parallel for simd
12632   for (int i = 0; i < 10; ++i)
12633     ;
12634 #pragma omp target
12635 #pragma omp parallel sections
12636   {
12637     bar();
12638   }
12639 #pragma omp target
12640 #pragma omp task
12641   {
12642     bar();
12643   }
12644 #pragma omp target
12645   {
12646 #pragma omp taskyield
12647     bar();
12648   }
12649 #pragma omp target
12650   {
12651 #pragma omp barrier
12652     bar();
12653   }
12654 #pragma omp target
12655   {
12656 #pragma omp taskwait
12657     bar();
12658   }
12659 #pragma omp target
12660   {
12661 #pragma omp flush
12662     bar();
12663   }
12664 #pragma omp target
12665   {
12666 #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?}}
12667     bar();
12668   }
12669 #pragma omp target
12670   {
12671 #pragma omp atomic
12672     ++a;
12673   }
12674 #pragma omp target
12675   {
12676 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
12677     ++a;
12678   }
12679 #pragma omp target
12680   {
12681 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
12682     ++a;
12683   }
12684 #pragma omp target
12685 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
12686   for (int i = 0; i < 10; ++i)
12687     ;
12688 #pragma omp target
12689   {
12690 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
12691   }
12692 #pragma omp target
12693   {
12694 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
12695   }
12696 #pragma omp target
12697   {
12698 #pragma omp teams
12699     ++a;
12700   }
12701 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
12702   {
12703 #pragma omp teams // expected-note {{directive outside teams construct here}}
12704     ++a;
12705 #pragma omp teams // expected-note {{nested teams construct here}}
12706     ++a;
12707   }
12708 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
12709   {
12710     ++a;          // expected-note {{statement outside teams construct here}}
12711 #pragma omp teams // expected-note {{nested teams construct here}}
12712     ++a;
12713   }
12714 #pragma omp target
12715   {
12716 #pragma omp taskloop
12717   for (int i = 0; i < 10; ++i)
12718     ++a;
12719   }
12720 #pragma omp target
12721   {
12722 #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?}}
12723     for (int i = 0; i < 10; ++i)
12724       ;
12725   }
12726 #pragma omp atomic
12727   // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12728   // expected-note@+1 {{expected an expression statement}}
12729   {
12730 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12731     a++;
12732   }
12733 #pragma omp target
12734   {
12735 #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?}}
12736     for (int i = 0; i < 10; ++i)
12737       ;
12738   }
12739 #pragma omp target
12740   {
12741 #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?}}
12742     for (int i = 0; i < 10; ++i)
12743       ;
12744   }
12745 #pragma omp target
12746   {
12747 #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?}}
12748     for (int i = 0; i < 10; ++i)
12749       ;
12750   }
12751 #pragma omp target
12752   {
12753 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
12754     for (int i = 0; i < 10; ++i)
12755       ;
12756   }
12757 #pragma omp target
12758   {
12759 #pragma omp teams distribute // OK
12760     for (int i = 0; i < 10; ++i)
12761       ;
12762   }
12763 #pragma omp target
12764   {
12765 #pragma omp teams distribute simd // OK
12766     for (int i = 0; i < 10; ++i)
12767       ;
12768   }
12769 #pragma omp target
12770   {
12771 #pragma omp teams distribute parallel for simd // OK
12772     for (int i = 0; i < 10; ++i)
12773       ;
12774   }
12775 #pragma omp target
12776   {
12777 #pragma omp teams distribute parallel for // OK
12778     for (int i = 0; i < 10; ++i)
12779       ;
12780   }
12781 #pragma omp target
12782   {
12783 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
12784     a++;
12785   }
12786 #pragma omp target
12787   {
12788 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
12789     for (int i = 0; i < 10; ++i)
12790       ;
12791   }
12792 #pragma omp target
12793   {
12794 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
12795     for (int i = 0; i < 10; ++i)
12796       ;
12797   }
12798 #pragma omp target
12799   {
12800 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
12801     for (int i = 0; i < 10; ++i)
12802       ;
12803   }
12804 #pragma omp target
12805   {
12806 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
12807     for (int i = 0; i < 10; ++i)
12808       ;
12809   }
12810 
12811 // TARGET PARALLEL DIRECTIVE
12812 #pragma omp target parallel
12813 #pragma omp parallel
12814   bar();
12815 #pragma omp target parallel
12816 #pragma omp for
12817   for (int i = 0; i < 10; ++i)
12818     ;
12819 #pragma omp target parallel
12820 #pragma omp simd
12821   for (int i = 0; i < 10; ++i)
12822     ;
12823 #pragma omp target parallel
12824 #pragma omp for simd
12825   for (int i = 0; i < 10; ++i)
12826     ;
12827 #pragma omp target parallel
12828 #pragma omp sections
12829   {
12830     bar();
12831   }
12832 #pragma omp target parallel
12833 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
12834   {
12835     bar();
12836   }
12837 #pragma omp target parallel
12838 #pragma omp single
12839   bar();
12840 
12841 #pragma omp target parallel
12842 #pragma omp master
12843   {
12844     bar();
12845   }
12846 #pragma omp target parallel
12847 #pragma omp critical
12848   {
12849     bar();
12850   }
12851 #pragma omp target parallel
12852 #pragma omp parallel for
12853   for (int i = 0; i < 10; ++i)
12854     ;
12855 #pragma omp target parallel
12856 #pragma omp parallel for simd
12857   for (int i = 0; i < 10; ++i)
12858     ;
12859 #pragma omp target parallel
12860 #pragma omp parallel sections
12861   {
12862     bar();
12863   }
12864 #pragma omp target parallel
12865 #pragma omp task
12866   {
12867     bar();
12868   }
12869 #pragma omp target parallel
12870   {
12871 #pragma omp taskyield
12872     bar();
12873   }
12874 #pragma omp target parallel
12875   {
12876 #pragma omp barrier
12877     bar();
12878   }
12879 #pragma omp target parallel
12880   {
12881 #pragma omp taskwait
12882     bar();
12883   }
12884 #pragma omp target parallel
12885   {
12886 #pragma omp flush
12887     bar();
12888   }
12889 #pragma omp target parallel
12890   {
12891 #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?}}
12892     bar();
12893   }
12894 #pragma omp target parallel
12895   {
12896 #pragma omp atomic
12897     ++a;
12898   }
12899 #pragma omp target parallel
12900   {
12901 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
12902     ++a;
12903   }
12904 #pragma omp target parallel
12905   {
12906 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
12907     ++a;
12908   }
12909 #pragma omp target parallel
12910 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
12911   for (int i = 0; i < 10; ++i)
12912     ;
12913 #pragma omp target parallel
12914   {
12915 #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?}}
12916     ++a;
12917   }
12918 #pragma omp target parallel
12919   {
12920     ++a;
12921 #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?}}
12922     ++a;
12923   }
12924 #pragma omp target parallel
12925   {
12926 #pragma omp taskloop
12927   for (int i = 0; i < 10; ++i)
12928     ++a;
12929   }
12930 #pragma omp target parallel
12931   {
12932 #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?}}
12933     for (int i = 0; i < 10; ++i)
12934       ;
12935   }
12936 #pragma omp target parallel
12937   {
12938 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12939   }
12940 #pragma omp target parallel
12941   {
12942 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12943   }
12944 #pragma omp target parallel
12945   {
12946 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12947   }
12948 #pragma omp target parallel
12949   {
12950 #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?}}
12951     for (int i = 0; i < 10; ++i)
12952       ;
12953   }
12954 #pragma omp target parallel
12955   {
12956 #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?}}
12957     for (int i = 0; i < 10; ++i)
12958       ;
12959   }
12960 #pragma omp target parallel
12961   {
12962 #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?}}
12963     for (int i = 0; i < 10; ++i)
12964       ;
12965   }
12966 #pragma omp target parallel
12967   {
12968 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
12969     for (int i = 0; i < 10; ++i)
12970       ;
12971   }
12972 #pragma omp target parallel
12973   {
12974 #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?}}
12975     for (int i = 0; i < 10; ++i)
12976       ;
12977   }
12978 #pragma omp target parallel
12979   {
12980 #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?}}
12981     for (int i = 0; i < 10; ++i)
12982       ;
12983   }
12984 #pragma omp target parallel
12985   {
12986 #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?}}
12987     for (int i = 0; i < 10; ++i)
12988       ;
12989   }
12990 #pragma omp target parallel
12991   {
12992 #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?}}
12993     for (int i = 0; i < 10; ++i)
12994       ;
12995   }
12996 #pragma omp target parallel
12997   {
12998 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
12999     a++;
13000   }
13001 #pragma omp target parallel
13002   {
13003 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
13004     for (int i = 0; i < 10; ++i)
13005       ;
13006   }
13007 #pragma omp target parallel
13008   {
13009 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13010     for (int i = 0; i < 10; ++i)
13011       ;
13012   }
13013 #pragma omp target parallel
13014   {
13015 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13016     for (int i = 0; i < 10; ++i)
13017       ;
13018   }
13019 #pragma omp target parallel
13020   {
13021 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13022     for (int i = 0; i < 10; ++i)
13023       ;
13024   }
13025 
13026 // TARGET PARALLEL FOR DIRECTIVE
13027 #pragma omp target parallel for
13028   for (int i = 0; i < 10; ++i) {
13029 #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?}}
13030     for (int i = 0; i < 10; ++i)
13031       ;
13032   }
13033 #pragma omp target parallel for
13034   for (int i = 0; i < 10; ++i) {
13035 #pragma omp simd
13036     for (int i = 0; i < 10; ++i)
13037       ;
13038   }
13039 #pragma omp target parallel for
13040   for (int i = 0; i < 10; ++i) {
13041 #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?}}
13042     for (int i = 0; i < 10; ++i)
13043       ;
13044   }
13045 #pragma omp target parallel for
13046   for (int i = 0; i < 10; ++i) {
13047 #pragma omp parallel
13048     for (int i = 0; i < 10; ++i)
13049       ;
13050   }
13051 #pragma omp target parallel for
13052   for (int i = 0; i < 10; ++i) {
13053 #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?}}
13054     {
13055       bar();
13056     }
13057   }
13058 #pragma omp target parallel for
13059   for (int i = 0; i < 10; ++i) {
13060 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
13061     {
13062       bar();
13063     }
13064   }
13065 #pragma omp target parallel for
13066   for (int i = 0; i < 10; ++i) {
13067 #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?}}
13068     {
13069       bar();
13070     }
13071   }
13072 
13073 #pragma omp target parallel for
13074   for (int i = 0; i < 10; ++i) {
13075 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13076     {
13077       bar();
13078     }
13079   }
13080 
13081 #pragma omp target parallel for
13082   for (int i = 0; i < 10; ++i) {
13083 #pragma omp critical
13084     {
13085       bar();
13086     }
13087   }
13088 
13089 #pragma omp target parallel for
13090   for (int i = 0; i < 10; ++i) {
13091 #pragma omp parallel
13092     {
13093 #pragma omp single // OK
13094       {
13095         bar();
13096       }
13097 #pragma omp for // OK
13098       for (int i = 0; i < 10; ++i)
13099         ;
13100 #pragma omp for simd // OK
13101       for (int i = 0; i < 10; ++i)
13102         ;
13103 #pragma omp sections // OK
13104       {
13105         bar();
13106       }
13107     }
13108   }
13109 #pragma omp target parallel for
13110   for (int i = 0; i < 10; ++i) {
13111 #pragma omp parallel for
13112     for (int i = 0; i < 10; ++i)
13113       ;
13114   }
13115 #pragma omp target parallel for
13116   for (int i = 0; i < 10; ++i) {
13117 #pragma omp parallel for simd
13118     for (int i = 0; i < 10; ++i)
13119       ;
13120   }
13121 #pragma omp target parallel for
13122   for (int i = 0; i < 10; ++i) {
13123 #pragma omp parallel sections
13124     {
13125       bar();
13126     }
13127   }
13128 #pragma omp target parallel for
13129   for (int i = 0; i < 10; ++i) {
13130 #pragma omp task
13131     {
13132       bar();
13133     }
13134   }
13135 #pragma omp target parallel for
13136   for (int i = 0; i < 10; ++i) {
13137 #pragma omp taskyield
13138     bar();
13139   }
13140 #pragma omp target parallel for
13141   for (int i = 0; i < 10; ++i) {
13142 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13143     bar();
13144   }
13145 #pragma omp target parallel for
13146   for (int i = 0; i < 10; ++i) {
13147 #pragma omp taskwait
13148     bar();
13149   }
13150 #pragma omp target parallel for
13151   for (int i = 0; i < 10; ++i) {
13152 #pragma omp flush
13153     bar();
13154   }
13155 #pragma omp target parallel for
13156   for (int i = 0; i < 10; ++i) {
13157 #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?}}
13158     bar();
13159   }
13160 #pragma omp target parallel for ordered
13161   for (int i = 0; i < 10; ++i) {
13162 #pragma omp ordered // OK
13163     bar();
13164   }
13165 #pragma omp target parallel for
13166   for (int i = 0; i < 10; ++i) {
13167 #pragma omp atomic
13168     ++a;
13169   }
13170 #pragma omp target parallel for
13171   for (int i = 0; i < 10; ++i) {
13172 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
13173     ++a;
13174   }
13175 #pragma omp target parallel for
13176   for (int i = 0; i < 10; ++i) {
13177 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
13178     ++a;
13179   }
13180 #pragma omp target parallel for
13181   for (int i = 0; i < 10; ++i) {
13182 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13183     for (int i = 0; i < 10; ++i)
13184       ;
13185   }
13186 #pragma omp target parallel for
13187   for (int i = 0; i < 10; ++i) {
13188 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13189     ++a;
13190   }
13191 #pragma omp target parallel for
13192   for (int i = 0; i < 10; ++i) {
13193 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13194     ++a;
13195   }
13196 #pragma omp target parallel for
13197   for (int i = 0; i < 10; ++i) {
13198 #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?}}
13199     ++a;
13200   }
13201 #pragma omp target parallel for
13202   for (int i = 0; i < 10; ++i) {
13203 #pragma omp taskloop
13204   for (int i = 0; i < 10; ++i)
13205     ++a;
13206   }
13207 #pragma omp target parallel for
13208   for (int i = 0; i < 10; ++i) {
13209 #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?}}
13210     for (int j = 0; j < 10; ++j)
13211       ;
13212   }
13213 #pragma omp target parallel for
13214   for (int i = 0; i < 10; ++i) {
13215 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13216     a++;
13217   }
13218 #pragma omp target parallel for
13219   for (int i = 0; i < 10; ++i) {
13220 #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?}}
13221     for (int j = 0; j < 10; ++j)
13222       ;
13223   }
13224 #pragma omp target parallel for
13225   for (int i = 0; i < 10; ++i) {
13226 #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?}}
13227     for (int j = 0; j < 10; ++j)
13228       ;
13229   }
13230 #pragma omp target parallel for
13231   for (int i = 0; i < 10; ++i) {
13232 #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?}}
13233     for (int j = 0; j < 10; ++j)
13234       ;
13235   }
13236 #pragma omp target parallel for
13237   for (int i = 0; i < 10; ++i) {
13238 #pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13239     for (int j = 0; j < 10; ++j)
13240       ;
13241   }
13242 #pragma omp target parallel for
13243   for (int i = 0; i < 10; ++i) {
13244 #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?}}
13245     for (int j = 0; j < 10; ++j)
13246       ;
13247   }
13248 #pragma omp target parallel for
13249   for (int i = 0; i < 10; ++i) {
13250 #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?}}
13251     for (int j = 0; j < 10; ++j)
13252       ;
13253   }
13254 #pragma omp target parallel for
13255   for (int i = 0; i < 10; ++i) {
13256 #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?}}
13257     for (int j = 0; j < 10; ++j)
13258       ;
13259   }
13260 #pragma omp target parallel for
13261   for (int i = 0; i < 10; ++i) {
13262 #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?}}
13263     for (int j = 0; j < 10; ++j)
13264       ;
13265   }
13266 #pragma omp target parallel for
13267   for (int i = 0; i < 10; ++i) {
13268 #pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
13269     a++;
13270   }
13271 #pragma omp target parallel for
13272   for (int i = 0; i < 10; ++i) {
13273 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
13274     for (int j = 0; j < 10; ++j)
13275       ;
13276   }
13277 #pragma omp target parallel for
13278   for (int i = 0; i < 10; ++i) {
13279 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13280     for (int j = 0; j < 10; ++j)
13281       ;
13282   }
13283 #pragma omp target parallel for
13284   for (int i = 0; i < 10; ++i) {
13285 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13286     for (int j = 0; j < 10; ++j)
13287       ;
13288   }
13289 #pragma omp target parallel for
13290   for (int i = 0; i < 10; ++i) {
13291 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13292     for (int j = 0; j < 10; ++j)
13293       ;
13294   }
13295 
13296 // TEAMS DIRECTIVE
13297 #pragma omp target
13298 #pragma omp teams
13299 #pragma omp parallel
13300   bar();
13301 #pragma omp target
13302 #pragma omp teams
13303 #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?}}
13304   for (int i = 0; i < 10; ++i)
13305     ;
13306 #pragma omp target
13307 #pragma omp teams
13308 #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?}}
13309   for (int i = 0; i < 10; ++i)
13310     ;
13311 #pragma omp target
13312 #pragma omp teams
13313 #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?}}
13314   for (int i = 0; i < 10; ++i)
13315     ;
13316 #pragma omp target
13317 #pragma omp teams
13318 #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?}}
13319   {
13320     bar();
13321   }
13322 #pragma omp target
13323 #pragma omp teams
13324 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
13325   {
13326     bar();
13327   }
13328 #pragma omp target
13329 #pragma omp teams
13330 #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?}}
13331   bar();
13332 
13333 #pragma omp target
13334 #pragma omp teams
13335 #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?}}
13336   {
13337     bar();
13338   }
13339 #pragma omp target
13340 #pragma omp teams
13341 #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?}}
13342   {
13343     bar();
13344   }
13345 #pragma omp target
13346 #pragma omp teams
13347 #pragma omp parallel for
13348   for (int i = 0; i < 10; ++i)
13349     ;
13350 #pragma omp target
13351 #pragma omp teams
13352 #pragma omp parallel for simd
13353   for (int i = 0; i < 10; ++i)
13354     ;
13355 #pragma omp target
13356 #pragma omp teams
13357 #pragma omp parallel sections
13358   {
13359     bar();
13360   }
13361 #pragma omp target
13362 #pragma omp teams
13363 #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?}}
13364   {
13365     bar();
13366   }
13367 #pragma omp target
13368 #pragma omp teams
13369   {
13370 #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?}}
13371     bar();
13372   }
13373 #pragma omp target
13374 #pragma omp teams
13375   {
13376 #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?}}
13377     bar();
13378   }
13379 #pragma omp target
13380 #pragma omp teams
13381   {
13382 #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?}}
13383     bar();
13384   }
13385 #pragma omp target
13386 #pragma omp teams
13387   {
13388 #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?}}
13389     bar();
13390   }
13391 #pragma omp target
13392 #pragma omp teams
13393   {
13394 #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?}}
13395     bar();
13396   }
13397 #pragma omp target
13398 #pragma omp teams
13399   {
13400 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
13401     ++a;
13402   }
13403 #pragma omp target
13404 #pragma omp teams
13405   {
13406 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13407     ++a;
13408   }
13409 #pragma omp target
13410 #pragma omp teams
13411   {
13412 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13413     ++a;
13414   }
13415 #pragma omp target
13416 #pragma omp teams
13417 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13418   for (int i = 0; i < 10; ++i)
13419     ;
13420 #pragma omp target
13421 #pragma omp teams
13422   {
13423 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13424   }
13425 #pragma omp target
13426 #pragma omp teams
13427   {
13428 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13429   }
13430 #pragma omp target
13431 #pragma omp teams
13432   {
13433 #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?}}
13434     ++a;
13435   }
13436 #pragma omp target
13437 #pragma omp teams
13438   {
13439 #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?}}
13440   for (int i = 0; i < 10; ++i)
13441     ++a;
13442   }
13443 #pragma omp target
13444 #pragma omp teams
13445 #pragma omp distribute
13446   for (int i = 0; i < 10; ++i)
13447     ;
13448 #pragma omp target
13449 #pragma omp teams
13450 #pragma omp distribute
13451   for (int i = 0; i < 10; ++i)
13452     ;
13453 #pragma omp distribute
13454   for (int j = 0; j < 10; ++j)
13455     ;
13456 #pragma omp target
13457 #pragma omp teams
13458   {
13459 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
13460     ++a;
13461   }
13462 #pragma omp target
13463 #pragma omp teams
13464 #pragma omp distribute parallel for
13465   for (int i = 0; i < 10; ++i)
13466     ;
13467 #pragma omp target
13468 #pragma omp teams
13469   {
13470 #pragma omp distribute parallel for
13471   for (int i = 0; i < 10; ++i)
13472     ;
13473 #pragma omp distribute parallel for
13474   for (int j = 0; j < 10; ++j)
13475     ;
13476   }
13477 #pragma omp target
13478 #pragma omp teams
13479   {
13480 #pragma omp distribute parallel for simd
13481   for (int i = 0; i < 10; ++i)
13482     ;
13483 #pragma omp distribute parallel for simd
13484   for (int j = 0; j < 10; ++j)
13485     ;
13486   }
13487 #pragma omp target
13488 #pragma omp teams
13489   {
13490 #pragma omp distribute simd
13491   for (int i = 0; i < 10; ++i)
13492     ;
13493 #pragma omp distribute simd
13494   for (int j = 0; j < 10; ++j)
13495     ;
13496   }
13497 #pragma omp target
13498 #pragma omp teams
13499   {
13500 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13501   for (int i = 0; i < 10; ++i)
13502     ;
13503   }
13504 #pragma omp target
13505 #pragma omp teams
13506   {
13507 #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?}}
13508   for (int i = 0; i < 10; ++i)
13509     ;
13510   }
13511 #pragma omp target
13512 #pragma omp teams
13513   {
13514 #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?}}
13515   for (int i = 0; i < 10; ++i)
13516     ;
13517   }
13518 #pragma omp target
13519 #pragma omp teams
13520   {
13521 #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?}}
13522   for (int i = 0; i < 10; ++i)
13523     ;
13524   }
13525 #pragma omp target
13526 #pragma omp teams
13527   {
13528 #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?}}
13529   for (int i = 0; i < 10; ++i)
13530     ;
13531   }
13532 #pragma omp target
13533 #pragma omp teams
13534   {
13535 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13536     a++;
13537   }
13538 #pragma omp target
13539 #pragma omp teams
13540   {
13541 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13542   for (int i = 0; i < 10; ++i)
13543     ;
13544   }
13545 #pragma omp target
13546 #pragma omp teams
13547   {
13548 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13549   for (int i = 0; i < 10; ++i)
13550     ;
13551   }
13552 #pragma omp target
13553 #pragma omp teams
13554   {
13555 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13556   for (int i = 0; i < 10; ++i)
13557     ;
13558   }
13559 #pragma omp target
13560 #pragma omp teams
13561   {
13562 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13563   for (int i = 0; i < 10; ++i)
13564     ;
13565   }
13566 
13567 // TASKLOOP DIRECTIVE
13568 #pragma omp taskloop
13569   for (int i = 0; i < 10; ++i) {
13570 #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?}}
13571     for (int i = 0; i < 10; ++i)
13572       ;
13573   }
13574 #pragma omp taskloop
13575   for (int i = 0; i < 10; ++i) {
13576 #pragma omp simd
13577     for (int i = 0; i < 10; ++i)
13578       ;
13579   }
13580 #pragma omp taskloop
13581   for (int i = 0; i < 10; ++i) {
13582 #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?}}
13583     for (int i = 0; i < 10; ++i)
13584       ;
13585   }
13586 #pragma omp taskloop
13587   for (int i = 0; i < 10; ++i) {
13588 #pragma omp parallel
13589     for (int i = 0; i < 10; ++i)
13590       ;
13591   }
13592 #pragma omp taskloop
13593   for (int i = 0; i < 10; ++i) {
13594 #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?}}
13595     {
13596       bar();
13597     }
13598   }
13599 #pragma omp taskloop
13600   for (int i = 0; i < 10; ++i) {
13601 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
13602     {
13603       bar();
13604     }
13605   }
13606 #pragma omp taskloop
13607   for (int i = 0; i < 10; ++i) {
13608 #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?}}
13609     {
13610       bar();
13611     }
13612   }
13613 
13614 #pragma omp taskloop
13615   for (int i = 0; i < 10; ++i) {
13616 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
13617     {
13618       bar();
13619     }
13620   }
13621 #pragma omp taskloop
13622   for (int i = 0; i < 10; ++i) {
13623 #pragma omp critical
13624     {
13625       bar();
13626     }
13627   }
13628 #pragma omp taskloop
13629   for (int i = 0; i < 10; ++i) {
13630 #pragma omp parallel
13631     {
13632 #pragma omp single // OK
13633       {
13634         bar();
13635       }
13636 #pragma omp for // OK
13637       for (int i = 0; i < 10; ++i)
13638         ;
13639 #pragma omp sections // OK
13640       {
13641         bar();
13642       }
13643     }
13644   }
13645 #pragma omp taskloop
13646   for (int i = 0; i < 10; ++i) {
13647 #pragma omp parallel for
13648     for (int i = 0; i < 10; ++i)
13649       ;
13650   }
13651 #pragma omp taskloop
13652   for (int i = 0; i < 10; ++i) {
13653 #pragma omp parallel for simd
13654     for (int i = 0; i < 10; ++i)
13655       ;
13656   }
13657 #pragma omp taskloop
13658   for (int i = 0; i < 10; ++i) {
13659 #pragma omp parallel sections
13660     {
13661       bar();
13662     }
13663   }
13664 #pragma omp taskloop
13665   for (int i = 0; i < 10; ++i) {
13666 #pragma omp task
13667     {
13668       bar();
13669     }
13670   }
13671 #pragma omp taskloop
13672   for (int i = 0; i < 10; ++i) {
13673 #pragma omp taskyield
13674     bar();
13675   }
13676 #pragma omp taskloop
13677   for (int i = 0; i < 10; ++i) {
13678 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
13679     bar();
13680   }
13681 #pragma omp taskloop
13682   for (int i = 0; i < 10; ++i) {
13683 #pragma omp taskwait
13684     bar();
13685   }
13686 #pragma omp taskloop
13687   for (int i = 0; i < 10; ++i) {
13688 #pragma omp flush
13689     bar();
13690   }
13691 #pragma omp taskloop
13692   for (int i = 0; i < 10; ++i) {
13693 #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?}}
13694     bar();
13695   }
13696 #pragma omp taskloop
13697   for (int i = 0; i < 10; ++i) {
13698 #pragma omp atomic
13699     ++a;
13700   }
13701 #pragma omp taskloop
13702   for (int i = 0; i < 10; ++i) {
13703 #pragma omp target
13704     ++a;
13705   }
13706 #pragma omp taskloop
13707   for (int i = 0; i < 10; ++i) {
13708 #pragma omp target parallel
13709     ++a;
13710   }
13711 #pragma omp taskloop
13712   for (int i = 0; i < 10; ++i) {
13713 #pragma omp target parallel for
13714     for (int i = 0; i < 10; ++i)
13715       ;
13716   }
13717 #pragma omp taskloop
13718   for (int i = 0; i < 10; ++i) {
13719 #pragma omp target enter data map(to: a)
13720     ++a;
13721   }
13722 #pragma omp taskloop
13723   for (int i = 0; i < 10; ++i) {
13724 #pragma omp target exit data map(from: a)
13725     ++a;
13726   }
13727 #pragma omp taskloop
13728   for (int i = 0; i < 10; ++i) {
13729 #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?}}
13730     ++a;
13731   }
13732 #pragma omp taskloop
13733   for (int i = 0; i < 10; ++i) {
13734 #pragma omp taskloop
13735   for (int i = 0; i < 10; ++i)
13736     ++a;
13737   }
13738 #pragma omp taskloop
13739   for (int i = 0; i < 10; ++i) {
13740 #pragma omp target update to(a)
13741     ++a;
13742   }
13743 #pragma omp taskloop
13744   for (int i = 0; i < 10; ++i) {
13745 #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?}}
13746     for (int i = 0; i < 10; ++i)
13747       ;
13748   }
13749 #pragma omp taskloop
13750   for (int i = 0; i < 10; ++i) {
13751 #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?}}
13752     for (int i = 0; i < 10; ++i)
13753       ;
13754   }
13755 #pragma omp taskloop
13756   for (int i = 0; i < 10; ++i) {
13757 #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?}}
13758     for (int i = 0; i < 10; ++i)
13759       ;
13760   }
13761 #pragma omp taskloop
13762   for (int i = 0; i < 10; ++i) {
13763 #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?}}
13764     for (int i = 0; i < 10; ++i)
13765       ;
13766   }
13767 #pragma omp taskloop
13768   for (int i = 0; i < 10; ++i) {
13769 #pragma omp target simd // OK
13770     for (int i = 0; i < 10; ++i)
13771       ;
13772   }
13773 #pragma omp taskloop
13774   for (int i = 0; i < 10; ++i) {
13775 #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?}}
13776     for (int i = 0; i < 10; ++i)
13777       ;
13778   }
13779 #pragma omp taskloop
13780   for (int i = 0; i < 10; ++i) {
13781 #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?}}
13782     for (int i = 0; i < 10; ++i)
13783       ;
13784   }
13785 #pragma omp taskloop
13786   for (int i = 0; i < 10; ++i) {
13787 #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?}}
13788     for (int i = 0; i < 10; ++i)
13789       ;
13790   }
13791 #pragma omp taskloop
13792   for (int i = 0; i < 10; ++i) {
13793 #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?}}
13794     for (int i = 0; i < 10; ++i)
13795       ;
13796   }
13797 #pragma omp taskloop
13798   for (int i = 0; i < 10; ++i) {
13799 #pragma omp target teams // OK
13800     a++;
13801   }
13802 #pragma omp taskloop
13803   for (int i = 0; i < 10; ++i) {
13804 #pragma omp target teams distribute // OK
13805     for (int i = 0; i < 10; ++i)
13806       ;
13807   }
13808 #pragma omp taskloop
13809   for (int i = 0; i < 10; ++i) {
13810 #pragma omp target teams distribute parallel for // OK
13811     for (int i = 0; i < 10; ++i)
13812       ;
13813   }
13814 #pragma omp taskloop
13815   for (int i = 0; i < 10; ++i) {
13816 #pragma omp target teams distribute parallel for simd // OK
13817     for (int i = 0; i < 10; ++i)
13818       ;
13819   }
13820 #pragma omp taskloop
13821   for (int i = 0; i < 10; ++i) {
13822 #pragma omp target teams distribute simd // OK
13823     for (int i = 0; i < 10; ++i)
13824       ;
13825   }
13826 
13827 // DISTRIBUTE DIRECTIVE
13828 #pragma omp target
13829 #pragma omp teams
13830 #pragma omp distribute
13831   for (int i = 0; i < 10; ++i) {
13832 #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?}}
13833     for (int i = 0; i < 10; ++i)
13834       ;
13835   }
13836 #pragma omp target
13837 #pragma omp teams
13838 #pragma omp distribute
13839   for (int i = 0; i < 10; ++i) {
13840 #pragma omp for
13841     for (int i = 0; i < 10; ++i)
13842       ;
13843   }
13844 #pragma omp target
13845 #pragma omp teams
13846 #pragma omp distribute
13847   for (int i = 0; i < 10; ++i) {
13848 #pragma omp simd
13849     for (int i = 0; i < 10; ++i)
13850       ;
13851   }
13852 #pragma omp target
13853 #pragma omp teams
13854 #pragma omp distribute
13855   for (int i = 0; i < 10; ++i) {
13856 #pragma omp for simd
13857     for (int i = 0; i < 10; ++i)
13858       ;
13859   }
13860 #pragma omp target
13861 #pragma omp teams
13862 #pragma omp distribute
13863   for (int i = 0; i < 10; ++i) {
13864 #pragma omp parallel
13865     for (int i = 0; i < 10; ++i)
13866       ;
13867   }
13868 #pragma omp target
13869 #pragma omp teams
13870 #pragma omp distribute
13871   for (int i = 0; i < 10; ++i) {
13872 #pragma omp sections
13873     {
13874       bar();
13875     }
13876   }
13877 #pragma omp target
13878 #pragma omp teams
13879 #pragma omp distribute
13880   for (int i = 0; i < 10; ++i) {
13881 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
13882     {
13883       bar();
13884     }
13885   }
13886 #pragma omp target
13887 #pragma omp teams
13888 #pragma omp distribute
13889   for (int i = 0; i < 10; ++i) {
13890 #pragma omp single
13891     {
13892       bar();
13893     }
13894   }
13895 #pragma omp target
13896 #pragma omp teams
13897 #pragma omp distribute
13898   for (int i = 0; i < 10; ++i) {
13899 #pragma omp master
13900     {
13901       bar();
13902     }
13903   }
13904 #pragma omp target
13905 #pragma omp teams
13906 #pragma omp distribute
13907   for (int i = 0; i < 10; ++i) {
13908 #pragma omp critical
13909     {
13910       bar();
13911     }
13912   }
13913 #pragma omp target
13914 #pragma omp teams
13915 #pragma omp distribute
13916   for (int i = 0; i < 10; ++i) {
13917 #pragma omp parallel
13918     {
13919 #pragma omp single
13920       {
13921 	bar();
13922       }
13923     }
13924   }
13925 #pragma omp target
13926 #pragma omp teams
13927 #pragma omp distribute
13928   for (int i = 0; i < 10; ++i) {
13929 #pragma omp parallel for
13930     for (int i = 0; i < 10; ++i)
13931       ;
13932   }
13933 #pragma omp target
13934 #pragma omp teams
13935 #pragma omp distribute
13936   for (int i = 0; i < 10; ++i) {
13937 #pragma omp parallel for simd
13938     for (int i = 0; i < 10; ++i)
13939       ;
13940   }
13941 #pragma omp target
13942 #pragma omp teams
13943 #pragma omp distribute
13944   for (int i = 0; i < 10; ++i) {
13945 #pragma omp parallel sections
13946     {
13947       bar();
13948     }
13949   }
13950 #pragma omp target
13951 #pragma omp teams
13952 #pragma omp distribute
13953   for (int i = 0; i < 10; ++i) {
13954 #pragma omp task
13955     {
13956       bar();
13957     }
13958   }
13959 #pragma omp target
13960 #pragma omp teams
13961 #pragma omp distribute
13962   for (int i = 0; i < 10; ++i) {
13963 #pragma omp taskyield
13964     bar();
13965   }
13966 #pragma omp target
13967 #pragma omp teams
13968 #pragma omp distribute
13969   for (int i = 0; i < 10; ++i) {
13970 #pragma omp barrier
13971     bar();
13972   }
13973 #pragma omp target
13974 #pragma omp teams
13975 #pragma omp distribute
13976   for (int i = 0; i < 10; ++i) {
13977 #pragma omp taskwait
13978     bar();
13979   }
13980 #pragma omp target
13981 #pragma omp teams
13982 #pragma omp distribute
13983   for (int i = 0; i < 10; ++i) {
13984 #pragma omp flush
13985     bar();
13986   }
13987 #pragma omp target
13988 #pragma omp teams
13989 #pragma omp distribute
13990   for (int i = 0; i < 10; ++i) {
13991 #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?}}
13992     bar();
13993   }
13994 #pragma omp target
13995 #pragma omp teams
13996 #pragma omp distribute
13997   for (int i = 0; i < 10; ++i) {
13998 #pragma omp atomic
13999     ++a;
14000   }
14001 #pragma omp target
14002 #pragma omp teams
14003 #pragma omp distribute
14004   for (int i = 0; i < 10; ++i) {
14005 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14006     ++a;
14007   }
14008 #pragma omp target
14009 #pragma omp teams
14010 #pragma omp distribute
14011   for (int i = 0; i < 10; ++i) {
14012 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14013     ++a;
14014   }
14015 #pragma omp target
14016 #pragma omp teams
14017 #pragma omp distribute
14018   for (int i = 0; i < 10; ++i) {
14019 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14020     for (int i = 0; i < 10; ++i)
14021       ;
14022   }
14023 #pragma omp target
14024 #pragma omp teams
14025 #pragma omp distribute
14026   for (int i = 0; i < 10; ++i) {
14027 #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?}}
14028     ++a;
14029   }
14030 #pragma omp target
14031 #pragma omp teams
14032 #pragma omp distribute
14033   for (int i = 0; i < 10; ++i) {
14034 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14035     ++a;
14036   }
14037 #pragma omp target
14038 #pragma omp teams
14039 #pragma omp distribute
14040   for (int i = 0; i < 10; ++i) {
14041 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14042     ++a;
14043   }
14044 #pragma omp target
14045 #pragma omp teams
14046 #pragma omp distribute
14047   for (int i = 0; i < 10; ++i) {
14048 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14049     ++a;
14050   }
14051 #pragma omp target
14052 #pragma omp teams
14053 #pragma omp distribute
14054   for (int i = 0; i < 10; ++i) {
14055 #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?}}
14056   for (int i = 0; i < 10; ++i)
14057     ++a;
14058   }
14059 #pragma omp target
14060 #pragma omp teams
14061 #pragma omp distribute
14062   for (int i = 0; i < 10; ++i) {
14063 #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?}}
14064   for (int i = 0; i < 10; ++i)
14065     ++a;
14066   }
14067 #pragma omp target
14068 #pragma omp teams
14069 #pragma omp distribute
14070   for (int i = 0; i < 10; ++i) {
14071 #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?}}
14072   for (int i = 0; i < 10; ++i)
14073     ++a;
14074   }
14075 #pragma omp target
14076 #pragma omp teams
14077 #pragma omp distribute
14078   for (int i = 0; i < 10; ++i) {
14079 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14080   for (int i = 0; i < 10; ++i)
14081     ++a;
14082   }
14083 #pragma omp target
14084 #pragma omp teams
14085 #pragma omp distribute
14086   for (int i = 0; i < 10; ++i) {
14087 #pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14088   for (int i = 0; i < 10; ++i)
14089     ++a;
14090   }
14091 #pragma omp target
14092 #pragma omp teams
14093 #pragma omp distribute
14094   for (int i = 0; i < 10; ++i) {
14095 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14096   for (int i = 0; i < 10; ++i)
14097     ++a;
14098   }
14099 #pragma omp target
14100 #pragma omp teams
14101 #pragma omp distribute
14102   for (int i = 0; i < 10; ++i) {
14103 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14104   for (int i = 0; i < 10; ++i)
14105     ++a;
14106   }
14107 #pragma omp target
14108 #pragma omp teams
14109 #pragma omp distribute
14110   for (int i = 0; i < 10; ++i) {
14111 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14112   for (int i = 0; i < 10; ++i)
14113     ++a;
14114   }
14115 #pragma omp target
14116 #pragma omp teams
14117 #pragma omp distribute
14118   for (int i = 0; i < 10; ++i) {
14119 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14120   for (int i = 0; i < 10; ++i)
14121     ++a;
14122   }
14123 #pragma omp target
14124 #pragma omp teams
14125 #pragma omp distribute
14126   for (int i = 0; i < 10; ++i) {
14127 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14128   for (int i = 0; i < 10; ++i)
14129     ++a;
14130   }
14131 #pragma omp target
14132 #pragma omp teams
14133 #pragma omp distribute
14134   for (int i = 0; i < 10; ++i) {
14135 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14136   for (int i = 0; i < 10; ++i)
14137     ++a;
14138   }
14139 
14140 // DISTRIBUTE PARALLEL FOR DIRECTIVE
14141 #pragma omp target
14142 #pragma omp teams
14143 #pragma omp distribute parallel for
14144   for (int i = 0; i < 10; ++i) {
14145 #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?}}
14146     for (int i = 0; i < 10; ++i)
14147       ;
14148   }
14149 
14150 #pragma omp target
14151 #pragma omp teams
14152 #pragma omp distribute parallel for
14153   for (int i = 0; i < 10; ++i) {
14154 #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?}}
14155     for (int i = 0; i < 10; ++i)
14156       ;
14157   }
14158 #pragma omp target
14159 #pragma omp teams
14160 #pragma omp distribute parallel for
14161   for (int i = 0; i < 10; ++i) {
14162 #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?}}
14163     for (int i = 0; i < 10; ++i)
14164       ;
14165   }
14166 #pragma omp target
14167 #pragma omp teams
14168 #pragma omp distribute parallel for
14169   for (int i = 0; i < 10; ++i) {
14170 #pragma omp simd
14171     for (int i = 0; i < 10; ++i)
14172       ;
14173   }
14174 #pragma omp target
14175 #pragma omp teams
14176 #pragma omp distribute parallel for
14177   for (int i = 0; i < 10; ++i) {
14178 #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?}}
14179     for (int i = 0; i < 10; ++i)
14180       ;
14181   }
14182 #pragma omp target
14183 #pragma omp teams
14184 #pragma omp distribute parallel for
14185   for (int i = 0; i < 10; ++i) {
14186 #pragma omp parallel
14187     for (int i = 0; i < 10; ++i)
14188       ;
14189   }
14190 #pragma omp target
14191 #pragma omp teams
14192 #pragma omp distribute parallel for
14193   for (int i = 0; i < 10; ++i) {
14194 #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?}}
14195     {
14196       bar();
14197     }
14198   }
14199 #pragma omp target
14200 #pragma omp teams
14201 #pragma omp distribute parallel for
14202   for (int i = 0; i < 10; ++i) {
14203 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
14204     {
14205       bar();
14206     }
14207   }
14208 #pragma omp target
14209 #pragma omp teams
14210 #pragma omp distribute parallel for
14211   for (int i = 0; i < 10; ++i) {
14212 #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?}}
14213     {
14214       bar();
14215     }
14216   }
14217 #pragma omp target
14218 #pragma omp teams
14219 #pragma omp distribute parallel for
14220   for (int i = 0; i < 10; ++i) {
14221 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14222     {
14223       bar();
14224     }
14225   }
14226 #pragma omp target
14227 #pragma omp teams
14228 #pragma omp distribute parallel for
14229   for (int i = 0; i < 10; ++i) {
14230 #pragma omp critical
14231     {
14232       bar();
14233     }
14234   }
14235 #pragma omp target
14236 #pragma omp teams
14237 #pragma omp distribute parallel for
14238   for (int i = 0; i < 10; ++i) {
14239 #pragma omp parallel
14240     {
14241 #pragma omp single
14242       {
14243 	bar();
14244       }
14245     }
14246   }
14247 #pragma omp target
14248 #pragma omp teams
14249 #pragma omp distribute parallel for
14250   for (int i = 0; i < 10; ++i) {
14251 #pragma omp parallel for
14252     for (int i = 0; i < 10; ++i)
14253       ;
14254   }
14255 #pragma omp target
14256 #pragma omp teams
14257 #pragma omp distribute parallel for
14258   for (int i = 0; i < 10; ++i) {
14259 #pragma omp parallel for simd
14260     for (int i = 0; i < 10; ++i)
14261       ;
14262   }
14263 #pragma omp target
14264 #pragma omp teams
14265 #pragma omp distribute parallel for
14266   for (int i = 0; i < 10; ++i) {
14267 #pragma omp parallel sections
14268     {
14269       bar();
14270     }
14271   }
14272 #pragma omp target
14273 #pragma omp teams
14274 #pragma omp distribute parallel for
14275   for (int i = 0; i < 10; ++i) {
14276 #pragma omp task
14277     {
14278       bar();
14279     }
14280   }
14281 #pragma omp target
14282 #pragma omp teams
14283 #pragma omp distribute parallel for
14284   for (int i = 0; i < 10; ++i) {
14285 #pragma omp taskyield
14286     bar();
14287   }
14288 #pragma omp target
14289 #pragma omp teams
14290 #pragma omp distribute parallel for
14291   for (int i = 0; i < 10; ++i) {
14292 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14293     bar();
14294   }
14295 #pragma omp target
14296 #pragma omp teams
14297 #pragma omp distribute parallel for
14298   for (int i = 0; i < 10; ++i) {
14299 #pragma omp taskwait
14300     bar();
14301   }
14302 #pragma omp target
14303 #pragma omp teams
14304 #pragma omp distribute parallel for
14305   for (int i = 0; i < 10; ++i) {
14306 #pragma omp flush
14307     bar();
14308   }
14309 #pragma omp target
14310 #pragma omp teams
14311 #pragma omp distribute parallel for
14312   for (int i = 0; i < 10; ++i) {
14313 #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?}}
14314     bar();
14315   }
14316 #pragma omp target
14317 #pragma omp teams
14318 #pragma omp distribute parallel for
14319   for (int i = 0; i < 10; ++i) {
14320 #pragma omp atomic
14321     ++a;
14322   }
14323 #pragma omp target
14324 #pragma omp teams
14325 #pragma omp distribute parallel for
14326   for (int i = 0; i < 10; ++i) {
14327 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14328     ++a;
14329   }
14330 #pragma omp target
14331 #pragma omp teams
14332 #pragma omp distribute parallel for
14333   for (int i = 0; i < 10; ++i) {
14334 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14335     ++a;
14336   }
14337 #pragma omp target
14338 #pragma omp teams
14339 #pragma omp distribute parallel for
14340   for (int i = 0; i < 10; ++i) {
14341 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14342     for (int i = 0; i < 10; ++i)
14343       ;
14344   }
14345 #pragma omp target
14346 #pragma omp teams
14347 #pragma omp distribute parallel for
14348   for (int i = 0; i < 10; ++i) {
14349 #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?}}
14350     ++a;
14351   }
14352 #pragma omp target
14353 #pragma omp teams
14354 #pragma omp distribute parallel for
14355   for (int i = 0; i < 10; ++i) {
14356 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14357     ++a;
14358   }
14359 #pragma omp target
14360 #pragma omp teams
14361 #pragma omp distribute parallel for
14362   for (int i = 0; i < 10; ++i) {
14363 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14364     ++a;
14365   }
14366 #pragma omp target
14367 #pragma omp teams
14368 #pragma omp distribute parallel for
14369   for (int i = 0; i < 10; ++i) {
14370 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14371     ++a;
14372   }
14373 #pragma omp target
14374 #pragma omp teams
14375 #pragma omp distribute parallel for
14376   for (int i = 0; i < 10; ++i) {
14377 #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?}}
14378   for (int i = 0; i < 10; ++i)
14379     ++a;
14380   }
14381 #pragma omp target
14382 #pragma omp teams
14383 #pragma omp distribute parallel for
14384   for (int i = 0; i < 10; ++i) {
14385 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14386   for (int i = 0; i < 10; ++i)
14387     ++a;
14388   }
14389 #pragma omp target
14390 #pragma omp teams
14391 #pragma omp distribute parallel for
14392   for (int i = 0; i < 10; ++i) {
14393 #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?}}
14394   for (int i = 0; i < 10; ++i)
14395     ++a;
14396   }
14397 #pragma omp target
14398 #pragma omp teams
14399 #pragma omp distribute parallel for
14400   for (int i = 0; i < 10; ++i) {
14401 #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?}}
14402   for (int i = 0; i < 10; ++i)
14403     ++a;
14404   }
14405 #pragma omp target
14406 #pragma omp teams
14407 #pragma omp distribute parallel for
14408   for (int i = 0; i < 10; ++i) {
14409 #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?}}
14410   for (int i = 0; i < 10; ++i)
14411     ++a;
14412   }
14413 #pragma omp target
14414 #pragma omp teams
14415 #pragma omp distribute parallel for
14416   for (int i = 0; i < 10; ++i) {
14417 #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?}}
14418   for (int i = 0; i < 10; ++i)
14419     ++a;
14420   }
14421 #pragma omp target
14422 #pragma omp teams
14423 #pragma omp distribute parallel for
14424   for (int i = 0; i < 10; ++i) {
14425 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14426     ++a;
14427   }
14428 #pragma omp target
14429 #pragma omp teams
14430 #pragma omp distribute parallel for
14431   for (int i = 0; i < 10; ++i) {
14432 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14433   for (int i = 0; i < 10; ++i)
14434     ++a;
14435   }
14436 #pragma omp target
14437 #pragma omp teams
14438 #pragma omp distribute parallel for
14439   for (int i = 0; i < 10; ++i) {
14440 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14441   for (int i = 0; i < 10; ++i)
14442     ++a;
14443   }
14444 #pragma omp target
14445 #pragma omp teams
14446 #pragma omp distribute parallel for
14447   for (int i = 0; i < 10; ++i) {
14448 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14449   for (int i = 0; i < 10; ++i)
14450     ++a;
14451   }
14452 #pragma omp target
14453 #pragma omp teams
14454 #pragma omp distribute parallel for
14455   for (int i = 0; i < 10; ++i) {
14456 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14457   for (int i = 0; i < 10; ++i)
14458     ++a;
14459   }
14460 
14461 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
14462 #pragma omp target
14463 #pragma omp teams
14464 #pragma omp distribute parallel for simd
14465   for (int i = 0; i < 10; ++i) {
14466 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14467     for (int i = 0; i < 10; ++i)
14468       ;
14469   }
14470 #pragma omp target
14471 #pragma omp teams
14472 #pragma omp distribute parallel for simd
14473   for (int i = 0; i < 10; ++i) {
14474 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14475     for (int i = 0; i < 10; ++i)
14476       ;
14477   }
14478 #pragma omp target
14479 #pragma omp teams
14480 #pragma omp distribute parallel for simd
14481   for (int i = 0; i < 10; ++i) {
14482 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14483     for (int i = 0; i < 10; ++i)
14484       ;
14485   }
14486 #pragma omp target
14487 #pragma omp teams
14488 #pragma omp distribute parallel for simd
14489   for (int i = 0; i < 10; ++i) {
14490 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
14491     for (int i = 0; i < 10; ++i)
14492       ;
14493   }
14494 #pragma omp target
14495 #pragma omp teams
14496 #pragma omp distribute parallel for simd
14497   for (int i = 0; i < 10; ++i) {
14498 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14499     for (int i = 0; i < 10; ++i)
14500       ;
14501   }
14502 #pragma omp target
14503 #pragma omp teams
14504 #pragma omp distribute parallel for simd
14505   for (int i = 0; i < 10; ++i) {
14506 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14507     for (int i = 0; i < 10; ++i)
14508       ;
14509   }
14510 #pragma omp target
14511 #pragma omp teams
14512 #pragma omp distribute parallel for simd
14513   for (int i = 0; i < 10; ++i) {
14514 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14515     {
14516       bar();
14517     }
14518   }
14519 #pragma omp target
14520 #pragma omp teams
14521 #pragma omp distribute parallel for simd
14522   for (int i = 0; i < 10; ++i) {
14523 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14524     {
14525       bar();
14526     }
14527   }
14528 #pragma omp target
14529 #pragma omp teams
14530 #pragma omp distribute parallel for simd
14531   for (int i = 0; i < 10; ++i) {
14532 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14533     {
14534       bar();
14535     }
14536   }
14537 #pragma omp target
14538 #pragma omp teams
14539 #pragma omp distribute parallel for simd
14540   for (int i = 0; i < 10; ++i) {
14541 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14542     {
14543       bar();
14544     }
14545   }
14546 #pragma omp target
14547 #pragma omp teams
14548 #pragma omp distribute parallel for simd
14549   for (int i = 0; i < 10; ++i) {
14550 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14551     {
14552       bar();
14553     }
14554   }
14555 #pragma omp target
14556 #pragma omp teams
14557 #pragma omp distribute parallel for simd
14558   for (int i = 0; i < 10; ++i) {
14559 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14560     {
14561 #pragma omp single
14562       {
14563 	bar();
14564       }
14565     }
14566   }
14567 #pragma omp target
14568 #pragma omp teams
14569 #pragma omp distribute parallel for simd
14570   for (int i = 0; i < 10; ++i) {
14571 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14572     for (int i = 0; i < 10; ++i)
14573       ;
14574   }
14575 #pragma omp target
14576 #pragma omp teams
14577 #pragma omp distribute parallel for simd
14578   for (int i = 0; i < 10; ++i) {
14579 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14580     for (int i = 0; i < 10; ++i)
14581       ;
14582   }
14583 #pragma omp target
14584 #pragma omp teams
14585 #pragma omp distribute parallel for simd
14586   for (int i = 0; i < 10; ++i) {
14587 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14588     {
14589       bar();
14590     }
14591   }
14592 #pragma omp target
14593 #pragma omp teams
14594 #pragma omp distribute parallel for simd
14595   for (int i = 0; i < 10; ++i) {
14596 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14597     {
14598       bar();
14599     }
14600   }
14601 #pragma omp target
14602 #pragma omp teams
14603 #pragma omp distribute parallel for simd
14604   for (int i = 0; i < 10; ++i) {
14605 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14606     bar();
14607   }
14608 #pragma omp target
14609 #pragma omp teams
14610 #pragma omp distribute parallel for simd
14611   for (int i = 0; i < 10; ++i) {
14612 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14613     bar();
14614   }
14615 #pragma omp target
14616 #pragma omp teams
14617 #pragma omp distribute parallel for simd
14618   for (int i = 0; i < 10; ++i) {
14619 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14620     bar();
14621   }
14622 #pragma omp target
14623 #pragma omp teams
14624 #pragma omp distribute parallel for simd
14625   for (int i = 0; i < 10; ++i) {
14626 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14627     bar();
14628   }
14629 #pragma omp target
14630 #pragma omp teams
14631 #pragma omp distribute parallel for simd
14632   for (int i = 0; i < 10; ++i) {
14633 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14634     bar();
14635   }
14636 #pragma omp target
14637 #pragma omp teams
14638 #pragma omp distribute parallel for simd
14639   for (int i = 0; i < 10; ++i) {
14640 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14641     ++a;
14642   }
14643 #pragma omp target
14644 #pragma omp teams
14645 #pragma omp distribute parallel for simd
14646   for (int i = 0; i < 10; ++i) {
14647 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14648     ++a;
14649   }
14650 #pragma omp target
14651 #pragma omp teams
14652 #pragma omp distribute parallel for simd
14653   for (int i = 0; i < 10; ++i) {
14654 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14655     ++a;
14656   }
14657 #pragma omp target
14658 #pragma omp teams
14659 #pragma omp distribute parallel for simd
14660   for (int i = 0; i < 10; ++i) {
14661 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14662     ++a;
14663   }
14664 #pragma omp target
14665 #pragma omp teams
14666 #pragma omp distribute parallel for simd
14667   for (int i = 0; i < 10; ++i) {
14668 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14669     ++a;
14670   }
14671 #pragma omp target
14672 #pragma omp teams
14673 #pragma omp distribute parallel for simd
14674   for (int i = 0; i < 10; ++i) {
14675 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14676     ++a;
14677   }
14678 #pragma omp target
14679 #pragma omp teams
14680 #pragma omp distribute parallel for simd
14681   for (int i = 0; i < 10; ++i) {
14682 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14683     ++a;
14684   }
14685 #pragma omp target
14686 #pragma omp teams
14687 #pragma omp distribute parallel for simd
14688   for (int i = 0; i < 10; ++i) {
14689 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14690     for (int i = 0; i < 10; ++i)
14691       ;
14692   }
14693 #pragma omp target
14694 #pragma omp teams
14695 #pragma omp distribute parallel for simd
14696   for (int i = 0; i < 10; ++i) {
14697 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14698     for (int i = 0; i < 10; ++i)
14699       ;
14700   }
14701 #pragma omp target
14702 #pragma omp teams
14703 #pragma omp distribute parallel for simd
14704   for (int i = 0; i < 10; ++i) {
14705 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14706     for (int i = 0; i < 10; ++i)
14707       ;
14708   }
14709 #pragma omp target
14710 #pragma omp teams
14711 #pragma omp distribute parallel for simd
14712   for (int i = 0; i < 10; ++i) {
14713 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14714     for (int i = 0; i < 10; ++i)
14715       ;
14716   }
14717 #pragma omp target
14718 #pragma omp teams
14719 #pragma omp distribute parallel for simd
14720   for (int i = 0; i < 10; ++i) {
14721 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14722     for (int i = 0; i < 10; ++i)
14723       ;
14724   }
14725 #pragma omp target
14726 #pragma omp teams
14727 #pragma omp distribute parallel for simd
14728   for (int i = 0; i < 10; ++i) {
14729 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14730     for (int i = 0; i < 10; ++i)
14731       ;
14732   }
14733 #pragma omp target
14734 #pragma omp teams
14735 #pragma omp distribute parallel for simd
14736   for (int i = 0; i < 10; ++i) {
14737 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14738     a++;
14739   }
14740 #pragma omp target
14741 #pragma omp teams
14742 #pragma omp distribute parallel for simd
14743   for (int i = 0; i < 10; ++i) {
14744 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14745     for (int i = 0; i < 10; ++i)
14746       ;
14747   }
14748 #pragma omp target
14749 #pragma omp teams
14750 #pragma omp distribute parallel for simd
14751   for (int i = 0; i < 10; ++i) {
14752 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14753     for (int i = 0; i < 10; ++i)
14754       ;
14755   }
14756 #pragma omp target
14757 #pragma omp teams
14758 #pragma omp distribute parallel for simd
14759   for (int i = 0; i < 10; ++i) {
14760 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14761     for (int i = 0; i < 10; ++i)
14762       ;
14763   }
14764 #pragma omp target
14765 #pragma omp teams
14766 #pragma omp distribute parallel for simd
14767   for (int i = 0; i < 10; ++i) {
14768 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14769     for (int i = 0; i < 10; ++i)
14770       ;
14771   }
14772 
14773 // DISTRIBUTE SIMD DIRECTIVE
14774 #pragma omp target
14775 #pragma omp teams
14776 #pragma omp distribute simd
14777   for (int i = 0; i < 10; ++i) {
14778 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14779     for (int i = 0; i < 10; ++i)
14780       ;
14781   }
14782 #pragma omp target
14783 #pragma omp teams
14784 #pragma omp distribute simd
14785   for (int i = 0; i < 10; ++i) {
14786 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14787     for (int i = 0; i < 10; ++i)
14788       ;
14789   }
14790 #pragma omp target
14791 #pragma omp teams
14792 #pragma omp distribute simd
14793   for (int i = 0; i < 10; ++i) {
14794 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14795     for (int i = 0; i < 10; ++i)
14796       ;
14797   }
14798 #pragma omp target
14799 #pragma omp teams
14800 #pragma omp distribute simd
14801   for (int i = 0; i < 10; ++i) {
14802 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
14803     for (int i = 0; i < 10; ++i)
14804       ;
14805   }
14806 #pragma omp target
14807 #pragma omp teams
14808 #pragma omp distribute simd
14809   for (int i = 0; i < 10; ++i) {
14810 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14811     for (int i = 0; i < 10; ++i)
14812       ;
14813   }
14814 #pragma omp target
14815 #pragma omp teams
14816 #pragma omp distribute simd
14817   for (int i = 0; i < 10; ++i) {
14818 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14819     for (int i = 0; i < 10; ++i)
14820       ;
14821   }
14822 #pragma omp target
14823 #pragma omp teams
14824 #pragma omp distribute simd
14825   for (int i = 0; i < 10; ++i) {
14826 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14827     {
14828       bar();
14829     }
14830   }
14831 #pragma omp target
14832 #pragma omp teams
14833 #pragma omp distribute simd
14834   for (int i = 0; i < 10; ++i) {
14835 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14836     {
14837       bar();
14838     }
14839   }
14840 #pragma omp target
14841 #pragma omp teams
14842 #pragma omp distribute simd
14843   for (int i = 0; i < 10; ++i) {
14844 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14845     {
14846       bar();
14847     }
14848   }
14849 #pragma omp target
14850 #pragma omp teams
14851 #pragma omp distribute simd
14852   for (int i = 0; i < 10; ++i) {
14853 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14854     {
14855       bar();
14856     }
14857   }
14858 #pragma omp target
14859 #pragma omp teams
14860 #pragma omp distribute simd
14861   for (int i = 0; i < 10; ++i) {
14862 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14863     {
14864       bar();
14865     }
14866   }
14867 #pragma omp target
14868 #pragma omp teams
14869 #pragma omp distribute simd
14870   for (int i = 0; i < 10; ++i) {
14871 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14872     {
14873 #pragma omp single
14874       {
14875 	bar();
14876       }
14877     }
14878   }
14879 #pragma omp target
14880 #pragma omp teams
14881 #pragma omp distribute simd
14882   for (int i = 0; i < 10; ++i) {
14883 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14884     for (int i = 0; i < 10; ++i)
14885       ;
14886   }
14887 #pragma omp target
14888 #pragma omp teams
14889 #pragma omp distribute simd
14890   for (int i = 0; i < 10; ++i) {
14891 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14892     for (int i = 0; i < 10; ++i)
14893       ;
14894   }
14895 #pragma omp target
14896 #pragma omp teams
14897 #pragma omp distribute simd
14898   for (int i = 0; i < 10; ++i) {
14899 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14900     {
14901       bar();
14902     }
14903   }
14904 #pragma omp target
14905 #pragma omp teams
14906 #pragma omp distribute simd
14907   for (int i = 0; i < 10; ++i) {
14908 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14909     {
14910       bar();
14911     }
14912   }
14913 #pragma omp target
14914 #pragma omp teams
14915 #pragma omp distribute simd
14916   for (int i = 0; i < 10; ++i) {
14917 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14918     bar();
14919   }
14920 #pragma omp target
14921 #pragma omp teams
14922 #pragma omp distribute simd
14923   for (int i = 0; i < 10; ++i) {
14924 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14925     bar();
14926   }
14927 #pragma omp target
14928 #pragma omp teams
14929 #pragma omp distribute simd
14930   for (int i = 0; i < 10; ++i) {
14931 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14932     bar();
14933   }
14934 #pragma omp target
14935 #pragma omp teams
14936 #pragma omp distribute simd
14937   for (int i = 0; i < 10; ++i) {
14938 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14939     bar();
14940   }
14941 #pragma omp target
14942 #pragma omp teams
14943 #pragma omp distribute simd
14944   for (int i = 0; i < 10; ++i) {
14945 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14946     bar();
14947   }
14948 #pragma omp target
14949 #pragma omp teams
14950 #pragma omp distribute simd
14951   for (int i = 0; i < 10; ++i) {
14952 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14953     ++a;
14954   }
14955 #pragma omp target
14956 #pragma omp teams
14957 #pragma omp distribute simd
14958   for (int i = 0; i < 10; ++i) {
14959 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14960     ++a;
14961   }
14962 #pragma omp target
14963 #pragma omp teams
14964 #pragma omp distribute simd
14965   for (int i = 0; i < 10; ++i) {
14966 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14967     ++a;
14968   }
14969 #pragma omp target
14970 #pragma omp teams
14971 #pragma omp distribute simd
14972   for (int i = 0; i < 10; ++i) {
14973 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14974     ++a;
14975   }
14976 #pragma omp target
14977 #pragma omp teams
14978 #pragma omp distribute simd
14979   for (int i = 0; i < 10; ++i) {
14980 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14981     ++a;
14982   }
14983 #pragma omp target
14984 #pragma omp teams
14985 #pragma omp distribute simd
14986   for (int i = 0; i < 10; ++i) {
14987 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14988     ++a;
14989   }
14990 #pragma omp target
14991 #pragma omp teams
14992 #pragma omp distribute simd
14993   for (int i = 0; i < 10; ++i) {
14994 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14995     ++a;
14996   }
14997 #pragma omp target
14998 #pragma omp teams
14999 #pragma omp distribute simd
15000   for (int i = 0; i < 10; ++i) {
15001 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15002     for (int i = 0; i < 10; ++i)
15003       ;
15004   }
15005 #pragma omp target
15006 #pragma omp teams
15007 #pragma omp distribute simd
15008   for (int i = 0; i < 10; ++i) {
15009 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15010     for (int i = 0; i < 10; ++i)
15011       ;
15012   }
15013 #pragma omp target
15014 #pragma omp teams
15015 #pragma omp distribute simd
15016   for (int i = 0; i < 10; ++i) {
15017 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15018     for (int i = 0; i < 10; ++i)
15019       ;
15020   }
15021 #pragma omp target
15022 #pragma omp teams
15023 #pragma omp distribute simd
15024   for (int i = 0; i < 10; ++i) {
15025 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15026     for (int i = 0; i < 10; ++i)
15027       ;
15028   }
15029 #pragma omp target
15030 #pragma omp teams
15031 #pragma omp distribute simd
15032   for (int i = 0; i < 10; ++i) {
15033 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15034     for (int i = 0; i < 10; ++i)
15035       ;
15036   }
15037 #pragma omp target
15038 #pragma omp teams
15039 #pragma omp distribute simd
15040   for (int i = 0; i < 10; ++i) {
15041 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15042     for (int i = 0; i < 10; ++i)
15043       ;
15044   }
15045 #pragma omp target
15046 #pragma omp teams
15047 #pragma omp distribute simd
15048   for (int i = 0; i < 10; ++i) {
15049 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15050     a++;
15051   }
15052 #pragma omp target
15053 #pragma omp teams
15054 #pragma omp distribute simd
15055   for (int i = 0; i < 10; ++i) {
15056 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15057     for (int i = 0; i < 10; ++i)
15058       ;
15059   }
15060 #pragma omp target
15061 #pragma omp teams
15062 #pragma omp distribute simd
15063   for (int i = 0; i < 10; ++i) {
15064 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15065     for (int i = 0; i < 10; ++i)
15066       ;
15067   }
15068 #pragma omp target
15069 #pragma omp teams
15070 #pragma omp distribute simd
15071   for (int i = 0; i < 10; ++i) {
15072 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15073     for (int i = 0; i < 10; ++i)
15074       ;
15075   }
15076 #pragma omp target
15077 #pragma omp teams
15078 #pragma omp distribute simd
15079   for (int i = 0; i < 10; ++i) {
15080 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15081     for (int i = 0; i < 10; ++i)
15082       ;
15083   }
15084 
15085 // TARGET SIMD DIRECTIVE
15086 #pragma omp target simd
15087   for (int i = 0; i < 10; ++i) {
15088 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15089     for (int i = 0; i < 10; ++i)
15090       ;
15091   }
15092 #pragma omp target simd
15093   for (int i = 0; i < 10; ++i) {
15094 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15095     for (int i = 0; i < 10; ++i)
15096       ;
15097   }
15098 #pragma omp target simd
15099   for (int i = 0; i < 10; ++i) {
15100 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15101     for (int i = 0; i < 10; ++i)
15102       ;
15103   }
15104 #pragma omp target simd
15105   for (int i = 0; i < 10; ++i) {
15106 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15107     for (int i = 0; i < 10; ++i)
15108       ;
15109   }
15110 #pragma omp target simd
15111   for (int i = 0; i < 10; ++i) {
15112 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15113     for (int i = 0; i < 10; ++i)
15114       ;
15115   }
15116 #pragma omp target simd
15117   for (int i = 0; i < 10; ++i) {
15118 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15119     for (int i = 0; i < 10; ++i)
15120       ;
15121   }
15122 #pragma omp target simd
15123   for (int i = 0; i < 10; ++i) {
15124 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15125     {
15126       bar();
15127     }
15128   }
15129 #pragma omp target simd
15130   for (int i = 0; i < 10; ++i) {
15131 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15132     {
15133       bar();
15134     }
15135   }
15136 #pragma omp target simd
15137   for (int i = 0; i < 10; ++i) {
15138 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15139     {
15140       bar();
15141     }
15142   }
15143 #pragma omp target simd
15144   for (int i = 0; i < 10; ++i) {
15145 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15146     {
15147       bar();
15148     }
15149   }
15150 #pragma omp target simd
15151   for (int i = 0; i < 10; ++i) {
15152 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15153     {
15154       bar();
15155     }
15156   }
15157 #pragma omp target simd
15158   for (int i = 0; i < 10; ++i) {
15159 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15160     {
15161 #pragma omp single
15162       {
15163 	bar();
15164       }
15165     }
15166   }
15167 #pragma omp target simd
15168   for (int i = 0; i < 10; ++i) {
15169 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15170     for (int i = 0; i < 10; ++i)
15171       ;
15172   }
15173 #pragma omp target simd
15174   for (int i = 0; i < 10; ++i) {
15175 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15176     for (int i = 0; i < 10; ++i)
15177       ;
15178   }
15179 #pragma omp target simd
15180   for (int i = 0; i < 10; ++i) {
15181 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15182     {
15183       bar();
15184     }
15185   }
15186 #pragma omp target simd
15187   for (int i = 0; i < 10; ++i) {
15188 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15189     {
15190       bar();
15191     }
15192   }
15193 #pragma omp target simd
15194   for (int i = 0; i < 10; ++i) {
15195 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15196     bar();
15197   }
15198 #pragma omp target simd
15199   for (int i = 0; i < 10; ++i) {
15200 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15201     bar();
15202   }
15203 #pragma omp target simd
15204   for (int i = 0; i < 10; ++i) {
15205 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15206     bar();
15207   }
15208 #pragma omp target simd
15209   for (int i = 0; i < 10; ++i) {
15210 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15211     bar();
15212   }
15213 #pragma omp target simd
15214   for (int i = 0; i < 10; ++i) {
15215 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15216     bar();
15217   }
15218 #pragma omp target simd
15219   for (int i = 0; i < 10; ++i) {
15220 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15221     ++a;
15222   }
15223 #pragma omp target simd
15224   for (int i = 0; i < 10; ++i) {
15225 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15226     ++a;
15227   }
15228 #pragma omp target simd
15229   for (int i = 0; i < 10; ++i) {
15230 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15231     ++a;
15232   }
15233 #pragma omp target simd
15234   for (int i = 0; i < 10; ++i) {
15235 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15236     ++a;
15237   }
15238 #pragma omp target simd
15239   for (int i = 0; i < 10; ++i) {
15240 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15241     ++a;
15242   }
15243 #pragma omp target simd
15244   for (int i = 0; i < 10; ++i) {
15245 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15246     ++a;
15247   }
15248 #pragma omp target simd
15249   for (int i = 0; i < 10; ++i) {
15250 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15251     ++a;
15252   }
15253 #pragma omp target simd
15254   for (int i = 0; i < 10; ++i) {
15255 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15256     for (int i = 0; i < 10; ++i)
15257       ;
15258   }
15259 #pragma omp target simd
15260   for (int i = 0; i < 10; ++i) {
15261 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15262     for (int i = 0; i < 10; ++i)
15263       ;
15264   }
15265 #pragma omp target simd
15266   for (int i = 0; i < 10; ++i) {
15267 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15268     for (int i = 0; i < 10; ++i)
15269       ;
15270   }
15271 #pragma omp target simd
15272   for (int i = 0; i < 10; ++i) {
15273 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15274     for (int i = 0; i < 10; ++i)
15275       ;
15276   }
15277 #pragma omp target simd
15278   for (int i = 0; i < 10; ++i) {
15279 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15280     for (int i = 0; i < 10; ++i)
15281       ;
15282   }
15283 #pragma omp target simd
15284   for (int i = 0; i < 10; ++i) {
15285 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15286     for (int i = 0; i < 10; ++i)
15287       ;
15288   }
15289 #pragma omp target simd
15290   for (int i = 0; i < 10; ++i) {
15291 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15292     a++;
15293   }
15294 #pragma omp target simd
15295   for (int i = 0; i < 10; ++i) {
15296 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15297     for (int i = 0; i < 10; ++i)
15298       ;
15299   }
15300 #pragma omp target simd
15301   for (int i = 0; i < 10; ++i) {
15302 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15303     for (int i = 0; i < 10; ++i)
15304       ;
15305   }
15306 #pragma omp target simd
15307   for (int i = 0; i < 10; ++i) {
15308 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15309     for (int i = 0; i < 10; ++i)
15310       ;
15311   }
15312 #pragma omp target simd
15313   for (int i = 0; i < 10; ++i) {
15314 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15315     for (int i = 0; i < 10; ++i)
15316       ;
15317   }
15318 
15319 // TEAMS DISTRIBUTE DIRECTIVE
15320 #pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15321   for (int i = 0; i < 10; ++i)
15322     ;
15323 #pragma omp target
15324 #pragma omp teams distribute
15325   for (int i = 0; i < 10; ++i) {
15326 #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?}}
15327     for (int i = 0; i < 10; ++i)
15328       ;
15329   }
15330 #pragma omp target
15331 #pragma omp teams distribute
15332   for (int i = 0; i < 10; ++i) {
15333 #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?}}
15334     for (int i = 0; i < 10; ++i)
15335       ;
15336   }
15337 #pragma omp target
15338 #pragma omp teams distribute
15339   for (int i = 0; i < 10; ++i) {
15340 #pragma omp for // OK
15341     for (int i = 0; i < 10; ++i)
15342       ;
15343   }
15344 #pragma omp target
15345 #pragma omp teams distribute
15346   for (int i = 0; i < 10; ++i) {
15347 #pragma omp simd // OK
15348     for (int i = 0; i < 10; ++i)
15349       ;
15350   }
15351 #pragma omp target
15352 #pragma omp teams distribute
15353   for (int i = 0; i < 10; ++i) {
15354 #pragma omp for simd // OK
15355     for (int i = 0; i < 10; ++i)
15356       ;
15357   }
15358 #pragma omp target
15359 #pragma omp teams distribute
15360   for (int i = 0; i < 10; ++i) {
15361 #pragma omp parallel // OK
15362     for (int i = 0; i < 10; ++i)
15363       ;
15364   }
15365 #pragma omp target
15366 #pragma omp teams distribute
15367   for (int i = 0; i < 10; ++i) {
15368 #pragma omp sections // OK
15369     {
15370       bar();
15371     }
15372   }
15373 #pragma omp target
15374 #pragma omp teams distribute
15375   for (int i = 0; i < 10; ++i) {
15376 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
15377     {
15378       bar();
15379     }
15380   }
15381 #pragma omp target
15382 #pragma omp teams distribute
15383   for (int i = 0; i < 10; ++i) {
15384 #pragma omp single // OK
15385     {
15386       bar();
15387     }
15388   }
15389 #pragma omp target
15390 #pragma omp teams distribute
15391   for (int i = 0; i < 10; ++i) {
15392 #pragma omp master // OK
15393     {
15394       bar();
15395     }
15396   }
15397 #pragma omp target
15398 #pragma omp teams distribute
15399   for (int i = 0; i < 10; ++i) {
15400 #pragma omp critical // OK
15401     {
15402       bar();
15403     }
15404   }
15405 #pragma omp target
15406 #pragma omp teams distribute
15407   for (int i = 0; i < 10; ++i) {
15408 #pragma omp parallel // OK
15409     {
15410 #pragma omp single
15411       {
15412 	bar();
15413       }
15414     }
15415   }
15416 #pragma omp target
15417 #pragma omp teams distribute
15418   for (int i = 0; i < 10; ++i) {
15419 #pragma omp parallel for // OK
15420     for (int i = 0; i < 10; ++i)
15421       ;
15422   }
15423 #pragma omp target
15424 #pragma omp teams distribute
15425   for (int i = 0; i < 10; ++i) {
15426 #pragma omp parallel for simd // OK
15427     for (int i = 0; i < 10; ++i)
15428       ;
15429   }
15430 #pragma omp target
15431 #pragma omp teams distribute
15432   for (int i = 0; i < 10; ++i) {
15433 #pragma omp parallel sections // OK
15434     {
15435       bar();
15436     }
15437   }
15438 #pragma omp target
15439 #pragma omp teams distribute
15440   for (int i = 0; i < 10; ++i) {
15441 #pragma omp task // OK
15442     {
15443       bar();
15444     }
15445   }
15446 #pragma omp target
15447 #pragma omp teams distribute
15448   for (int i = 0; i < 10; ++i) {
15449 #pragma omp taskyield // OK
15450     bar();
15451   }
15452 #pragma omp target
15453 #pragma omp teams distribute
15454   for (int i = 0; i < 10; ++i) {
15455 #pragma omp barrier // OK
15456     bar();
15457   }
15458 #pragma omp target
15459 #pragma omp teams distribute
15460   for (int i = 0; i < 10; ++i) {
15461 #pragma omp taskwait // OK
15462     bar();
15463   }
15464 #pragma omp target
15465 #pragma omp teams distribute
15466   for (int i = 0; i < 10; ++i) {
15467 #pragma omp flush // OK
15468     bar();
15469   }
15470 #pragma omp target
15471 #pragma omp teams distribute
15472   for (int i = 0; i < 10; ++i) {
15473 #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?}}
15474     bar();
15475   }
15476 #pragma omp target
15477 #pragma omp teams distribute
15478   for (int i = 0; i < 10; ++i) {
15479 #pragma omp atomic // OK
15480     ++a;
15481   }
15482 #pragma omp target
15483 #pragma omp teams distribute
15484   for (int i = 0; i < 10; ++i) {
15485 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15486     ++a;
15487   }
15488 #pragma omp target
15489 #pragma omp teams distribute
15490   for (int i = 0; i < 10; ++i) {
15491 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
15492     ++a;
15493   }
15494 #pragma omp target
15495 #pragma omp teams distribute
15496   for (int i = 0; i < 10; ++i) {
15497 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15498     for (int i = 0; i < 10; ++i)
15499       ;
15500   }
15501 #pragma omp target
15502 #pragma omp teams distribute
15503   for (int i = 0; i < 10; ++i) {
15504 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15505     ++a;
15506   }
15507 #pragma omp target
15508 #pragma omp teams distribute
15509   for (int i = 0; i < 10; ++i) {
15510 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15511     ++a;
15512   }
15513 #pragma omp target
15514 #pragma omp teams distribute
15515   for (int i = 0; i < 10; ++i) {
15516 #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?}}
15517     ++a;
15518   }
15519 #pragma omp target
15520 #pragma omp teams distribute
15521   for (int i = 0; i < 10; ++i) {
15522 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15523     ++a;
15524   }
15525 #pragma omp target
15526 #pragma omp teams distribute
15527   for (int i = 0; i < 10; ++i) {
15528 #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?}}
15529     for (int i = 0; i < 10; ++i)
15530       ++a;
15531   }
15532 #pragma omp target
15533 #pragma omp teams distribute
15534   for (int i = 0; i < 10; ++i) {
15535 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15536     for (int i = 0; i < 10; ++i)
15537       ++a;
15538   }
15539 #pragma omp target
15540 #pragma omp teams distribute
15541   for (int i = 0; i < 10; ++i) {
15542 #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?}}
15543     for (int i = 0; i < 10; ++i)
15544       ++a;
15545   }
15546 #pragma omp target
15547 #pragma omp teams distribute
15548   for (int i = 0; i < 10; ++i) {
15549 #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?}}
15550     for (int i = 0; i < 10; ++i)
15551       ++a;
15552   }
15553 #pragma omp target
15554 #pragma omp teams distribute
15555   for (int i = 0; i < 10; ++i) {
15556 #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?}}
15557     for (int i = 0; i < 10; ++i)
15558       ++a;
15559   }
15560 #pragma omp target
15561 #pragma omp teams distribute
15562   for (int i = 0; i < 10; ++i) {
15563 #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?}}
15564     for (int i = 0; i < 10; ++i)
15565       ++a;
15566   }
15567 #pragma omp target
15568 #pragma omp teams distribute
15569   for (int i = 0; i < 10; ++i) {
15570 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15571     ++a;
15572   }
15573 #pragma omp target
15574 #pragma omp teams distribute
15575   for (int i = 0; i < 10; ++i) {
15576 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15577     for (int i = 0; i < 10; ++i)
15578       ++a;
15579   }
15580 #pragma omp target
15581 #pragma omp teams distribute
15582   for (int i = 0; i < 10; ++i) {
15583 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15584     for (int i = 0; i < 10; ++i)
15585       ++a;
15586   }
15587 #pragma omp target
15588 #pragma omp teams distribute
15589   for (int i = 0; i < 10; ++i) {
15590 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15591     for (int i = 0; i < 10; ++i)
15592       ++a;
15593   }
15594 #pragma omp target
15595 #pragma omp teams distribute
15596   for (int i = 0; i < 10; ++i) {
15597 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
15598     for (int i = 0; i < 10; ++i)
15599       ++a;
15600   }
15601 
15602 // TEAMS DISTRIBUTE SIMD DIRECTIVE
15603 #pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15604   for (int i = 0; i < 10; ++i)
15605     ;
15606 #pragma omp target
15607 #pragma omp teams distribute simd
15608   for (int i = 0; i < 10; ++i) {
15609 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15610     for (int i = 0; i < 10; ++i)
15611       ;
15612   }
15613 #pragma omp target
15614 #pragma omp teams distribute simd
15615   for (int i = 0; i < 10; ++i) {
15616 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15617     for (int i = 0; i < 10; ++i)
15618       ;
15619   }
15620 #pragma omp target
15621 #pragma omp teams distribute simd
15622   for (int i = 0; i < 10; ++i) {
15623 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15624     for (int i = 0; i < 10; ++i)
15625       ;
15626   }
15627 #pragma omp target
15628 #pragma omp teams distribute simd
15629   for (int i = 0; i < 10; ++i) {
15630 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15631     for (int i = 0; i < 10; ++i)
15632       ;
15633   }
15634 #pragma omp target
15635 #pragma omp teams distribute simd
15636   for (int i = 0; i < 10; ++i) {
15637 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15638     for (int i = 0; i < 10; ++i)
15639       ;
15640   }
15641 #pragma omp target
15642 #pragma omp teams distribute simd
15643   for (int i = 0; i < 10; ++i) {
15644 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15645     for (int i = 0; i < 10; ++i)
15646       ;
15647   }
15648 #pragma omp target
15649 #pragma omp teams distribute simd
15650   for (int i = 0; i < 10; ++i) {
15651 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15652     {
15653       bar();
15654     }
15655   }
15656 #pragma omp target
15657 #pragma omp teams distribute simd
15658   for (int i = 0; i < 10; ++i) {
15659 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15660     {
15661       bar();
15662     }
15663   }
15664 #pragma omp target
15665 #pragma omp teams distribute simd
15666   for (int i = 0; i < 10; ++i) {
15667 #pragma omp single // 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 distribute simd
15674   for (int i = 0; i < 10; ++i) {
15675 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15676     {
15677       bar();
15678     }
15679   }
15680 #pragma omp target
15681 #pragma omp teams distribute simd
15682   for (int i = 0; i < 10; ++i) {
15683 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15684     {
15685       bar();
15686     }
15687   }
15688 #pragma omp target
15689 #pragma omp teams distribute simd
15690   for (int i = 0; i < 10; ++i) {
15691 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15692     {
15693 #pragma omp single
15694       {
15695 	bar();
15696       }
15697     }
15698   }
15699 #pragma omp target
15700 #pragma omp teams distribute simd
15701   for (int i = 0; i < 10; ++i) {
15702 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15703     for (int i = 0; i < 10; ++i)
15704       ;
15705   }
15706 #pragma omp target
15707 #pragma omp teams distribute simd
15708   for (int i = 0; i < 10; ++i) {
15709 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15710     for (int i = 0; i < 10; ++i)
15711       ;
15712   }
15713 #pragma omp target
15714 #pragma omp teams distribute simd
15715   for (int i = 0; i < 10; ++i) {
15716 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15717     {
15718       bar();
15719     }
15720   }
15721 #pragma omp target
15722 #pragma omp teams distribute simd
15723   for (int i = 0; i < 10; ++i) {
15724 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15725     {
15726       bar();
15727     }
15728   }
15729 #pragma omp target
15730 #pragma omp teams distribute simd
15731   for (int i = 0; i < 10; ++i) {
15732 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15733     bar();
15734   }
15735 #pragma omp target
15736 #pragma omp teams distribute simd
15737   for (int i = 0; i < 10; ++i) {
15738 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15739     bar();
15740   }
15741 #pragma omp target
15742 #pragma omp teams distribute simd
15743   for (int i = 0; i < 10; ++i) {
15744 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15745     bar();
15746   }
15747 #pragma omp target
15748 #pragma omp teams distribute simd
15749   for (int i = 0; i < 10; ++i) {
15750 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15751     bar();
15752   }
15753 #pragma omp target
15754 #pragma omp teams distribute simd
15755   for (int i = 0; i < 10; ++i) {
15756 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15757     bar();
15758   }
15759 #pragma omp target
15760 #pragma omp teams distribute simd
15761   for (int i = 0; i < 10; ++i) {
15762 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15763     ++a;
15764   }
15765 #pragma omp target
15766 #pragma omp teams distribute simd
15767   for (int i = 0; i < 10; ++i) {
15768 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15769     ++a;
15770   }
15771 #pragma omp target
15772 #pragma omp teams distribute simd
15773   for (int i = 0; i < 10; ++i) {
15774 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15775     ++a;
15776   }
15777 #pragma omp target
15778 #pragma omp teams distribute simd
15779   for (int i = 0; i < 10; ++i) {
15780 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15781     for (int i = 0; i < 10; ++i)
15782       ;
15783   }
15784 #pragma omp target
15785 #pragma omp teams distribute simd
15786   for (int i = 0; i < 10; ++i) {
15787 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15788     ++a;
15789   }
15790 #pragma omp target
15791 #pragma omp teams distribute simd
15792   for (int i = 0; i < 10; ++i) {
15793 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15794     ++a;
15795   }
15796 #pragma omp target
15797 #pragma omp teams distribute simd
15798   for (int i = 0; i < 10; ++i) {
15799 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15800     ++a;
15801   }
15802 #pragma omp target
15803 #pragma omp teams distribute simd
15804   for (int i = 0; i < 10; ++i) {
15805 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15806     ++a;
15807   }
15808 #pragma omp target
15809 #pragma omp teams distribute simd
15810   for (int i = 0; i < 10; ++i) {
15811 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15812     for (int i = 0; i < 10; ++i)
15813       ++a;
15814   }
15815 #pragma omp target
15816 #pragma omp teams distribute simd
15817   for (int i = 0; i < 10; ++i) {
15818 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15819     for (int i = 0; i < 10; ++i)
15820       ++a;
15821   }
15822 #pragma omp target
15823 #pragma omp teams distribute simd
15824   for (int i = 0; i < 10; ++i) {
15825 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15826     for (int i = 0; i < 10; ++i)
15827       ++a;
15828   }
15829 #pragma omp target
15830 #pragma omp teams distribute simd
15831   for (int i = 0; i < 10; ++i) {
15832 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15833     for (int i = 0; i < 10; ++i)
15834       ++a;
15835   }
15836 #pragma omp target
15837 #pragma omp teams distribute simd
15838   for (int i = 0; i < 10; ++i) {
15839 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15840     for (int i = 0; i < 10; ++i)
15841       ++a;
15842   }
15843 #pragma omp target
15844 #pragma omp teams distribute simd
15845   for (int i = 0; i < 10; ++i) {
15846 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15847     for (int i = 0; i < 10; ++i)
15848       ++a;
15849   }
15850 #pragma omp target
15851 #pragma omp teams distribute simd
15852   for (int i = 0; i < 10; ++i) {
15853 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15854     ++a;
15855   }
15856 #pragma omp target
15857 #pragma omp teams distribute simd
15858   for (int i = 0; i < 10; ++i) {
15859 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15860     for (int i = 0; i < 10; ++i)
15861       ++a;
15862   }
15863 #pragma omp target
15864 #pragma omp teams distribute simd
15865   for (int i = 0; i < 10; ++i) {
15866 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15867     for (int i = 0; i < 10; ++i)
15868       ++a;
15869   }
15870 #pragma omp target
15871 #pragma omp teams distribute simd
15872   for (int i = 0; i < 10; ++i) {
15873 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15874     for (int i = 0; i < 10; ++i)
15875       ++a;
15876   }
15877 #pragma omp target
15878 #pragma omp teams distribute simd
15879   for (int i = 0; i < 10; ++i) {
15880 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15881     for (int i = 0; i < 10; ++i)
15882       ++a;
15883   }
15884 
15885 // TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
15886 #pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15887   for (int i = 0; i < 10; ++i)
15888     ;
15889 #pragma omp target
15890 #pragma omp teams distribute parallel for simd
15891   for (int i = 0; i < 10; ++i) {
15892 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15893     for (int i = 0; i < 10; ++i)
15894       ;
15895   }
15896 #pragma omp target
15897 #pragma omp teams distribute parallel for simd
15898   for (int i = 0; i < 10; ++i) {
15899 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15900     for (int i = 0; i < 10; ++i)
15901       ;
15902   }
15903 #pragma omp target
15904 #pragma omp teams distribute parallel for simd
15905   for (int i = 0; i < 10; ++i) {
15906 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15907     for (int i = 0; i < 10; ++i)
15908       ;
15909   }
15910 #pragma omp target
15911 #pragma omp teams distribute parallel for simd
15912   for (int i = 0; i < 10; ++i) {
15913 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15914     for (int i = 0; i < 10; ++i)
15915       ;
15916   }
15917 #pragma omp target
15918 #pragma omp teams distribute parallel for simd
15919   for (int i = 0; i < 10; ++i) {
15920 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15921     for (int i = 0; i < 10; ++i)
15922       ;
15923   }
15924 #pragma omp target
15925 #pragma omp teams distribute parallel for simd
15926   for (int i = 0; i < 10; ++i) {
15927 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15928     for (int i = 0; i < 10; ++i)
15929       ;
15930   }
15931 #pragma omp target
15932 #pragma omp teams distribute parallel for simd
15933   for (int i = 0; i < 10; ++i) {
15934 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15935     {
15936       bar();
15937     }
15938   }
15939 #pragma omp target
15940 #pragma omp teams distribute parallel for simd
15941   for (int i = 0; i < 10; ++i) {
15942 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15943     {
15944       bar();
15945     }
15946   }
15947 #pragma omp target
15948 #pragma omp teams distribute parallel for simd
15949   for (int i = 0; i < 10; ++i) {
15950 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15951     {
15952       bar();
15953     }
15954   }
15955 #pragma omp target
15956 #pragma omp teams distribute parallel for simd
15957   for (int i = 0; i < 10; ++i) {
15958 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15959     {
15960       bar();
15961     }
15962   }
15963 #pragma omp target
15964 #pragma omp teams distribute parallel for simd
15965   for (int i = 0; i < 10; ++i) {
15966 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15967     {
15968       bar();
15969     }
15970   }
15971 #pragma omp target
15972 #pragma omp teams distribute parallel for simd
15973   for (int i = 0; i < 10; ++i) {
15974 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15975     {
15976 #pragma omp single
15977       {
15978 	bar();
15979       }
15980     }
15981   }
15982 #pragma omp target
15983 #pragma omp teams distribute parallel for simd
15984   for (int i = 0; i < 10; ++i) {
15985 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15986     for (int i = 0; i < 10; ++i)
15987       ;
15988   }
15989 #pragma omp target
15990 #pragma omp teams distribute parallel for simd
15991   for (int i = 0; i < 10; ++i) {
15992 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15993     for (int i = 0; i < 10; ++i)
15994       ;
15995   }
15996 #pragma omp target
15997 #pragma omp teams distribute parallel for simd
15998   for (int i = 0; i < 10; ++i) {
15999 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16000     {
16001       bar();
16002     }
16003   }
16004 #pragma omp target
16005 #pragma omp teams distribute parallel for simd
16006   for (int i = 0; i < 10; ++i) {
16007 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16008     {
16009       bar();
16010     }
16011   }
16012 #pragma omp target
16013 #pragma omp teams distribute parallel for simd
16014   for (int i = 0; i < 10; ++i) {
16015 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16016     bar();
16017   }
16018 #pragma omp target
16019 #pragma omp teams distribute parallel for simd
16020   for (int i = 0; i < 10; ++i) {
16021 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16022     bar();
16023   }
16024 #pragma omp target
16025 #pragma omp teams distribute parallel for simd
16026   for (int i = 0; i < 10; ++i) {
16027 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16028     bar();
16029   }
16030 #pragma omp target
16031 #pragma omp teams distribute parallel for simd
16032   for (int i = 0; i < 10; ++i) {
16033 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16034     bar();
16035   }
16036 #pragma omp target
16037 #pragma omp teams distribute parallel for simd
16038   for (int i = 0; i < 10; ++i) {
16039 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16040     bar();
16041   }
16042 #pragma omp target
16043 #pragma omp teams distribute parallel for simd
16044   for (int i = 0; i < 10; ++i) {
16045 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16046     ++a;
16047   }
16048 #pragma omp target
16049 #pragma omp teams distribute parallel for simd
16050   for (int i = 0; i < 10; ++i) {
16051 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16052     ++a;
16053   }
16054 #pragma omp target
16055 #pragma omp teams distribute parallel for simd
16056   for (int i = 0; i < 10; ++i) {
16057 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16058     ++a;
16059   }
16060 #pragma omp target
16061 #pragma omp teams distribute parallel for simd
16062   for (int i = 0; i < 10; ++i) {
16063 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16064     for (int i = 0; i < 10; ++i)
16065       ;
16066   }
16067 #pragma omp target
16068 #pragma omp teams distribute parallel for simd
16069   for (int i = 0; i < 10; ++i) {
16070 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16071     ++a;
16072   }
16073 #pragma omp target
16074 #pragma omp teams distribute parallel for simd
16075   for (int i = 0; i < 10; ++i) {
16076 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16077     ++a;
16078   }
16079 #pragma omp target
16080 #pragma omp teams distribute parallel for simd
16081   for (int i = 0; i < 10; ++i) {
16082 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16083     ++a;
16084   }
16085 #pragma omp target
16086 #pragma omp teams distribute parallel for simd
16087   for (int i = 0; i < 10; ++i) {
16088 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16089     ++a;
16090   }
16091 #pragma omp target
16092 #pragma omp teams distribute parallel for simd
16093   for (int i = 0; i < 10; ++i) {
16094 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16095     for (int i = 0; i < 10; ++i)
16096       ++a;
16097   }
16098 #pragma omp target
16099 #pragma omp teams distribute parallel for simd
16100   for (int i = 0; i < 10; ++i) {
16101 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16102     for (int i = 0; i < 10; ++i)
16103       ++a;
16104   }
16105 #pragma omp target
16106 #pragma omp teams distribute parallel for simd
16107   for (int i = 0; i < 10; ++i) {
16108 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16109     for (int i = 0; i < 10; ++i)
16110       ++a;
16111   }
16112 #pragma omp target
16113 #pragma omp teams distribute parallel for simd
16114   for (int i = 0; i < 10; ++i) {
16115 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16116     for (int i = 0; i < 10; ++i)
16117       ++a;
16118   }
16119 #pragma omp target
16120 #pragma omp teams distribute parallel for simd
16121   for (int i = 0; i < 10; ++i) {
16122 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16123     for (int i = 0; i < 10; ++i)
16124       ++a;
16125   }
16126 #pragma omp target
16127 #pragma omp teams distribute parallel for simd
16128   for (int i = 0; i < 10; ++i) {
16129 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16130     for (int i = 0; i < 10; ++i)
16131       ++a;
16132   }
16133 #pragma omp target
16134 #pragma omp teams distribute parallel for simd
16135   for (int i = 0; i < 10; ++i) {
16136 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16137     ++a;
16138   }
16139 #pragma omp target
16140 #pragma omp teams distribute parallel for simd
16141   for (int i = 0; i < 10; ++i) {
16142 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16143     for (int i = 0; i < 10; ++i)
16144       ++a;
16145   }
16146 #pragma omp target
16147 #pragma omp teams distribute parallel for 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       ++a;
16152   }
16153 #pragma omp target
16154 #pragma omp teams distribute parallel for simd
16155   for (int i = 0; i < 10; ++i) {
16156 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16157     for (int i = 0; i < 10; ++i)
16158       ++a;
16159   }
16160 #pragma omp target
16161 #pragma omp teams distribute parallel for simd
16162   for (int i = 0; i < 10; ++i) {
16163 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16164     for (int i = 0; i < 10; ++i)
16165       ++a;
16166   }
16167 
16168 // TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16169 #pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16170   for (int i = 0; i < 10; ++i)
16171     ;
16172 #pragma omp target
16173 #pragma omp teams distribute parallel for
16174   for (int i = 0; i < 10; ++i) {
16175 #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?}}
16176     for (int i = 0; i < 10; ++i)
16177       ;
16178   }
16179 #pragma omp target
16180 #pragma omp teams distribute parallel for
16181   for (int i = 0; i < 10; ++i) {
16182 #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?}}
16183     for (int i = 0; i < 10; ++i)
16184       ;
16185   }
16186 #pragma omp target
16187 #pragma omp teams distribute parallel for
16188   for (int i = 0; i < 10; ++i) {
16189 #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?}}
16190     for (int i = 0; i < 10; ++i)
16191       ;
16192   }
16193 #pragma omp target
16194 #pragma omp teams distribute parallel for
16195   for (int i = 0; i < 10; ++i) {
16196 #pragma omp simd // OK
16197     for (int i = 0; i < 10; ++i)
16198       ;
16199   }
16200 #pragma omp target
16201 #pragma omp teams distribute parallel for
16202   for (int i = 0; i < 10; ++i) {
16203 #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?}}
16204     for (int i = 0; i < 10; ++i)
16205       ;
16206   }
16207 #pragma omp target
16208 #pragma omp teams distribute parallel for
16209   for (int i = 0; i < 10; ++i) {
16210 #pragma omp parallel // OK
16211     for (int i = 0; i < 10; ++i)
16212       ;
16213   }
16214 #pragma omp target
16215 #pragma omp teams distribute parallel for
16216   for (int i = 0; i < 10; ++i) {
16217 #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?}}
16218     {
16219       bar();
16220     }
16221   }
16222 #pragma omp target
16223 #pragma omp teams distribute parallel for
16224   for (int i = 0; i < 10; ++i) {
16225 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
16226     {
16227       bar();
16228     }
16229   }
16230 #pragma omp target
16231 #pragma omp teams distribute parallel for
16232   for (int i = 0; i < 10; ++i) {
16233 #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?}}
16234     {
16235       bar();
16236     }
16237   }
16238 #pragma omp target
16239 #pragma omp teams distribute parallel for
16240   for (int i = 0; i < 10; ++i) {
16241 #pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16242     {
16243       bar();
16244     }
16245   }
16246 #pragma omp target
16247 #pragma omp teams distribute parallel for
16248   for (int i = 0; i < 10; ++i) {
16249 #pragma omp critical // OK
16250     {
16251       bar();
16252     }
16253   }
16254 #pragma omp target
16255 #pragma omp teams distribute parallel for
16256   for (int i = 0; i < 10; ++i) {
16257 #pragma omp parallel // OK
16258     {
16259 #pragma omp single
16260       {
16261 	bar();
16262       }
16263     }
16264   }
16265 #pragma omp target
16266 #pragma omp teams distribute parallel for
16267   for (int i = 0; i < 10; ++i) {
16268 #pragma omp parallel for // OK
16269     for (int i = 0; i < 10; ++i)
16270       ;
16271   }
16272 #pragma omp target
16273 #pragma omp teams distribute parallel for
16274   for (int i = 0; i < 10; ++i) {
16275 #pragma omp parallel for simd // OK
16276     for (int i = 0; i < 10; ++i)
16277       ;
16278   }
16279 #pragma omp target
16280 #pragma omp teams distribute parallel for
16281   for (int i = 0; i < 10; ++i) {
16282 #pragma omp parallel sections // OK
16283     {
16284       bar();
16285     }
16286   }
16287 #pragma omp target
16288 #pragma omp teams distribute parallel for
16289   for (int i = 0; i < 10; ++i) {
16290 #pragma omp task // OK
16291     {
16292       bar();
16293     }
16294   }
16295 #pragma omp target
16296 #pragma omp teams distribute parallel for
16297   for (int i = 0; i < 10; ++i) {
16298 #pragma omp taskyield // OK
16299     bar();
16300   }
16301 #pragma omp target
16302 #pragma omp teams distribute parallel for
16303   for (int i = 0; i < 10; ++i) {
16304 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16305     bar();
16306   }
16307 #pragma omp target
16308 #pragma omp teams distribute parallel for
16309   for (int i = 0; i < 10; ++i) {
16310 #pragma omp taskwait // OK
16311     bar();
16312   }
16313 #pragma omp target
16314 #pragma omp teams distribute parallel for
16315   for (int i = 0; i < 10; ++i) {
16316 #pragma omp flush // OK
16317     bar();
16318   }
16319 #pragma omp target
16320 #pragma omp teams distribute parallel for
16321   for (int i = 0; i < 10; ++i) {
16322 #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?}}
16323     bar();
16324   }
16325 #pragma omp target
16326 #pragma omp teams distribute parallel for
16327   for (int i = 0; i < 10; ++i) {
16328 #pragma omp atomic // OK
16329     ++a;
16330   }
16331 #pragma omp target
16332 #pragma omp teams distribute parallel for
16333   for (int i = 0; i < 10; ++i) {
16334 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
16335     ++a;
16336   }
16337 #pragma omp target
16338 #pragma omp teams distribute parallel for
16339   for (int i = 0; i < 10; ++i) {
16340 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
16341     ++a;
16342   }
16343 #pragma omp target
16344 #pragma omp teams distribute parallel for
16345   for (int i = 0; i < 10; ++i) {
16346 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
16347     for (int i = 0; i < 10; ++i)
16348       ;
16349   }
16350 #pragma omp target
16351 #pragma omp teams distribute parallel for
16352   for (int i = 0; i < 10; ++i) {
16353 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
16354     ++a;
16355   }
16356 #pragma omp target
16357 #pragma omp teams distribute parallel for
16358   for (int i = 0; i < 10; ++i) {
16359 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
16360     ++a;
16361   }
16362 #pragma omp target
16363 #pragma omp teams distribute parallel for
16364   for (int i = 0; i < 10; ++i) {
16365 #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?}}
16366     ++a;
16367   }
16368 #pragma omp target
16369 #pragma omp teams distribute parallel for
16370   for (int i = 0; i < 10; ++i) {
16371 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
16372     ++a;
16373   }
16374 #pragma omp target
16375 #pragma omp teams distribute parallel for
16376   for (int i = 0; i < 10; ++i) {
16377 #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?}}
16378     for (int i = 0; i < 10; ++i)
16379       ++a;
16380   }
16381 #pragma omp target
16382 #pragma omp teams distribute parallel for
16383   for (int i = 0; i < 10; ++i) {
16384 #pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
16385     for (int i = 0; i < 10; ++i)
16386       ++a;
16387   }
16388 #pragma omp target
16389 #pragma omp teams distribute parallel for
16390   for (int i = 0; i < 10; ++i) {
16391 #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?}}
16392     for (int i = 0; i < 10; ++i)
16393       ++a;
16394   }
16395 #pragma omp target
16396 #pragma omp teams distribute parallel for
16397   for (int i = 0; i < 10; ++i) {
16398 #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?}}
16399     for (int i = 0; i < 10; ++i)
16400       ++a;
16401   }
16402 #pragma omp target
16403 #pragma omp teams distribute parallel for
16404   for (int i = 0; i < 10; ++i) {
16405 #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?}}
16406     for (int i = 0; i < 10; ++i)
16407       ++a;
16408   }
16409 #pragma omp target
16410 #pragma omp teams distribute parallel for
16411   for (int i = 0; i < 10; ++i) {
16412 #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?}}
16413     for (int i = 0; i < 10; ++i)
16414       ++a;
16415   }
16416 #pragma omp target
16417 #pragma omp teams distribute parallel for
16418   for (int i = 0; i < 10; ++i) {
16419 #pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
16420     ++a;
16421   }
16422 #pragma omp target
16423 #pragma omp teams distribute parallel for
16424   for (int i = 0; i < 10; ++i) {
16425 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
16426     for (int i = 0; i < 10; ++i)
16427       ++a;
16428   }
16429 #pragma omp target
16430 #pragma omp teams distribute parallel for
16431   for (int i = 0; i < 10; ++i) {
16432 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
16433     for (int i = 0; i < 10; ++i)
16434       ++a;
16435   }
16436 #pragma omp target
16437 #pragma omp teams distribute parallel for
16438   for (int i = 0; i < 10; ++i) {
16439 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16440     for (int i = 0; i < 10; ++i)
16441       ++a;
16442   }
16443 #pragma omp target
16444 #pragma omp teams distribute parallel for
16445   for (int i = 0; i < 10; ++i) {
16446 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16447     for (int i = 0; i < 10; ++i)
16448       ++a;
16449   }
16450 
16451 // TARGET TEAMS DIRECTIVE
16452 #pragma omp target teams
16453 #pragma omp parallel
16454   bar();
16455 #pragma omp target teams
16456 #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?}}
16457   for (int i = 0; i < 10; ++i)
16458     ;
16459 #pragma omp target teams
16460 #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?}}
16461   for (int i = 0; i < 10; ++i)
16462     ;
16463 #pragma omp target teams
16464 #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?}}
16465   for (int i = 0; i < 10; ++i)
16466     ;
16467 #pragma omp target teams
16468 #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?}}
16469   {
16470     bar();
16471   }
16472 #pragma omp target teams
16473 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
16474   {
16475     bar();
16476   }
16477 #pragma omp target teams
16478 #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?}}
16479   bar();
16480 
16481 #pragma omp target teams
16482 #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?}}
16483   {
16484     bar();
16485   }
16486 #pragma omp target teams
16487 #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?}}
16488   {
16489     bar();
16490   }
16491 #pragma omp target teams
16492 #pragma omp parallel for
16493   for (int i = 0; i < 10; ++i)
16494     ;
16495 #pragma omp target teams
16496 #pragma omp parallel for simd
16497   for (int i = 0; i < 10; ++i)
16498     ;
16499 #pragma omp target teams
16500 #pragma omp parallel sections
16501   {
16502     bar();
16503   }
16504 #pragma omp target teams
16505 #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?}}
16506   {
16507     bar();
16508   }
16509 #pragma omp target teams
16510   {
16511 #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?}}
16512     bar();
16513   }
16514 #pragma omp target teams
16515   {
16516 #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?}}
16517     bar();
16518   }
16519 #pragma omp target teams
16520   {
16521 #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?}}
16522     bar();
16523   }
16524 #pragma omp target teams
16525   {
16526 #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?}}
16527     bar();
16528   }
16529 #pragma omp target teams
16530   {
16531 #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?}}
16532     bar();
16533   }
16534 #pragma omp target teams
16535   {
16536 #pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
16537     ++a;
16538   }
16539 #pragma omp target teams
16540   {
16541 #pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
16542     ++a;
16543   }
16544 #pragma omp target teams
16545   {
16546 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
16547     ++a;
16548   }
16549 #pragma omp target teams
16550 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
16551   for (int i = 0; i < 10; ++i)
16552     ;
16553 #pragma omp target teams
16554   {
16555 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16556   }
16557 #pragma omp target teams
16558   {
16559 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16560   }
16561 #pragma omp target teams
16562   {
16563 #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?}}
16564     ++a;
16565   }
16566 #pragma omp target teams
16567   {
16568 #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?}}
16569   for (int i = 0; i < 10; ++i)
16570     ++a;
16571   }
16572 #pragma omp target teams
16573 #pragma omp distribute
16574   for (int i = 0; i < 10; ++i)
16575     ;
16576 #pragma omp target teams
16577   {
16578 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
16579     ++a;
16580   }
16581 #pragma omp target teams
16582 #pragma omp distribute parallel for
16583   for (int i = 0; i < 10; ++i)
16584     ;
16585 #pragma omp target teams
16586   {
16587 #pragma omp distribute parallel for
16588   for (int i = 0; i < 10; ++i)
16589     ;
16590 #pragma omp distribute parallel for
16591   for (int j = 0; j < 10; ++j)
16592     ;
16593   }
16594 #pragma omp target teams
16595   {
16596 #pragma omp distribute parallel for simd
16597   for (int i = 0; i < 10; ++i)
16598     ;
16599 #pragma omp distribute parallel for simd
16600   for (int j = 0; j < 10; ++j)
16601     ;
16602   }
16603 #pragma omp target teams
16604   {
16605 #pragma omp distribute simd
16606   for (int i = 0; i < 10; ++i)
16607     ;
16608 #pragma omp distribute simd
16609   for (int j = 0; j < 10; ++j)
16610     ;
16611   }
16612 #pragma omp target teams
16613   {
16614 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
16615   for (int i = 0; i < 10; ++i)
16616     ;
16617   }
16618 #pragma omp target teams
16619   {
16620 #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?}}
16621   for (int i = 0; i < 10; ++i)
16622     ;
16623   }
16624 #pragma omp target teams
16625   {
16626 #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?}}
16627   for (int i = 0; i < 10; ++i)
16628     ;
16629   }
16630 #pragma omp target teams
16631   {
16632 #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?}}
16633   for (int i = 0; i < 10; ++i)
16634     ;
16635   }
16636 #pragma omp target teams
16637   {
16638 #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?}}
16639   for (int i = 0; i < 10; ++i)
16640     ;
16641   }
16642 #pragma omp target teams
16643   {
16644 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
16645     a++;
16646   }
16647 #pragma omp target teams
16648   {
16649 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
16650   for (int i = 0; i < 10; ++i)
16651     ;
16652   }
16653 #pragma omp target teams
16654   {
16655 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
16656   for (int i = 0; i < 10; ++i)
16657     ;
16658   }
16659 #pragma omp target teams
16660   {
16661 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
16662   for (int i = 0; i < 10; ++i)
16663     ;
16664   }
16665 #pragma omp target teams
16666   {
16667 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
16668   for (int i = 0; i < 10; ++i)
16669     ;
16670   }
16671 
16672 // TARGET TEAMS DISTRIBUTE DIRECTIVE
16673 #pragma omp target teams distribute // OK
16674   for (int i = 0; i < 10; ++i)
16675     ;
16676 #pragma omp target teams distribute
16677   for (int i = 0; i < 10; ++i) {
16678 #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?}}
16679     for (int i = 0; i < 10; ++i)
16680       ;
16681   }
16682 #pragma omp target teams distribute
16683   for (int i = 0; i < 10; ++i) {
16684 #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?}}
16685     for (int i = 0; i < 10; ++i)
16686       ;
16687   }
16688 #pragma omp target teams distribute
16689   for (int i = 0; i < 10; ++i) {
16690 #pragma omp for // OK
16691     for (int i = 0; i < 10; ++i)
16692       ;
16693   }
16694 #pragma omp target teams distribute
16695   for (int i = 0; i < 10; ++i) {
16696 #pragma omp simd // OK
16697     for (int i = 0; i < 10; ++i)
16698       ;
16699   }
16700 #pragma omp target teams distribute
16701   for (int i = 0; i < 10; ++i) {
16702 #pragma omp for simd // OK
16703     for (int i = 0; i < 10; ++i)
16704       ;
16705   }
16706 #pragma omp target teams distribute
16707   for (int i = 0; i < 10; ++i) {
16708 #pragma omp parallel // OK
16709     for (int i = 0; i < 10; ++i)
16710       ;
16711   }
16712 #pragma omp target teams distribute
16713   for (int i = 0; i < 10; ++i) {
16714 #pragma omp sections // OK
16715     {
16716       bar();
16717     }
16718   }
16719 #pragma omp target teams distribute
16720   for (int i = 0; i < 10; ++i) {
16721 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
16722     {
16723       bar();
16724     }
16725   }
16726 #pragma omp target teams distribute
16727   for (int i = 0; i < 10; ++i) {
16728 #pragma omp single // OK
16729     {
16730       bar();
16731     }
16732   }
16733 #pragma omp target teams distribute
16734   for (int i = 0; i < 10; ++i) {
16735 #pragma omp master // OK
16736     {
16737       bar();
16738     }
16739   }
16740 #pragma omp target teams distribute
16741   for (int i = 0; i < 10; ++i) {
16742 #pragma omp critical // OK
16743     {
16744       bar();
16745     }
16746   }
16747 #pragma omp target teams distribute
16748   for (int i = 0; i < 10; ++i) {
16749 #pragma omp parallel // OK
16750     {
16751 #pragma omp single
16752       {
16753 	bar();
16754       }
16755     }
16756   }
16757 #pragma omp target teams distribute
16758   for (int i = 0; i < 10; ++i) {
16759 #pragma omp parallel for // OK
16760     for (int i = 0; i < 10; ++i)
16761       ;
16762   }
16763 #pragma omp target teams distribute
16764   for (int i = 0; i < 10; ++i) {
16765 #pragma omp parallel for simd // OK
16766     for (int i = 0; i < 10; ++i)
16767       ;
16768   }
16769 #pragma omp target teams distribute
16770   for (int i = 0; i < 10; ++i) {
16771 #pragma omp parallel sections // OK
16772     {
16773       bar();
16774     }
16775   }
16776 #pragma omp target teams distribute
16777   for (int i = 0; i < 10; ++i) {
16778 #pragma omp task // OK
16779     {
16780       bar();
16781     }
16782   }
16783 #pragma omp target teams distribute
16784   for (int i = 0; i < 10; ++i) {
16785 #pragma omp taskyield // OK
16786     bar();
16787   }
16788 #pragma omp target teams distribute
16789   for (int i = 0; i < 10; ++i) {
16790 #pragma omp barrier // OK
16791     bar();
16792   }
16793 #pragma omp target teams distribute
16794   for (int i = 0; i < 10; ++i) {
16795 #pragma omp taskwait // OK
16796     bar();
16797   }
16798 #pragma omp target teams distribute
16799   for (int i = 0; i < 10; ++i) {
16800 #pragma omp flush // OK
16801     bar();
16802   }
16803 #pragma omp target teams distribute
16804   for (int i = 0; i < 10; ++i) {
16805 #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?}}
16806     bar();
16807   }
16808 #pragma omp target teams distribute
16809   for (int i = 0; i < 10; ++i) {
16810 #pragma omp atomic // OK
16811     ++a;
16812   }
16813 #pragma omp target teams distribute
16814   for (int i = 0; i < 10; ++i) {
16815 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16816     ++a;
16817   }
16818 #pragma omp target teams distribute
16819   for (int i = 0; i < 10; ++i) {
16820 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16821     ++a;
16822   }
16823 #pragma omp target teams distribute
16824   for (int i = 0; i < 10; ++i) {
16825 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16826     for (int i = 0; i < 10; ++i)
16827       ;
16828   }
16829 #pragma omp target teams distribute
16830   for (int i = 0; i < 10; ++i) {
16831 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16832     ++a;
16833   }
16834 #pragma omp target teams distribute
16835   for (int i = 0; i < 10; ++i) {
16836 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16837     ++a;
16838   }
16839 #pragma omp target teams distribute
16840   for (int i = 0; i < 10; ++i) {
16841 #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?}}
16842     ++a;
16843   }
16844 #pragma omp target teams distribute
16845   for (int i = 0; i < 10; ++i) {
16846 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16847     ++a;
16848   }
16849 #pragma omp target teams distribute
16850   for (int i = 0; i < 10; ++i) {
16851 #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?}}
16852     for (int i = 0; i < 10; ++i)
16853       ++a;
16854   }
16855 #pragma omp target teams distribute
16856   for (int i = 0; i < 10; ++i) {
16857 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16858     for (int i = 0; i < 10; ++i)
16859       ++a;
16860   }
16861 #pragma omp target teams distribute
16862   for (int i = 0; i < 10; ++i) {
16863 #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?}}
16864     for (int i = 0; i < 10; ++i)
16865       ++a;
16866   }
16867 #pragma omp target teams distribute
16868   for (int i = 0; i < 10; ++i) {
16869 #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?}}
16870     for (int i = 0; i < 10; ++i)
16871       ++a;
16872   }
16873 #pragma omp target teams distribute
16874   for (int i = 0; i < 10; ++i) {
16875 #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?}}
16876     for (int i = 0; i < 10; ++i)
16877       ++a;
16878   }
16879 #pragma omp target teams distribute
16880   for (int i = 0; i < 10; ++i) {
16881 #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?}}
16882     for (int i = 0; i < 10; ++i)
16883       ++a;
16884   }
16885 #pragma omp target teams distribute
16886   for (int i = 0; i < 10; ++i) {
16887 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16888     ++a;
16889   }
16890 #pragma omp target teams distribute
16891   for (int i = 0; i < 10; ++i) {
16892 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16893     for (int i = 0; i < 10; ++i)
16894       ++a;
16895   }
16896 #pragma omp target teams distribute
16897   for (int i = 0; i < 10; ++i) {
16898 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16899     for (int i = 0; i < 10; ++i)
16900       ++a;
16901   }
16902 #pragma omp target teams distribute
16903   for (int i = 0; i < 10; ++i) {
16904 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16905     for (int i = 0; i < 10; ++i)
16906       ++a;
16907   }
16908 #pragma omp target teams distribute
16909   for (int i = 0; i < 10; ++i) {
16910 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16911     for (int i = 0; i < 10; ++i)
16912       ++a;
16913   }
16914 
16915 // TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16916 #pragma omp target teams distribute parallel for // OK
16917   for (int i = 0; i < 10; ++i)
16918     ;
16919 #pragma omp target teams distribute parallel for
16920   for (int i = 0; i < 10; ++i) {
16921 #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?}}
16922     for (int i = 0; i < 10; ++i)
16923       ;
16924   }
16925 #pragma omp target teams distribute parallel for
16926   for (int i = 0; i < 10; ++i) {
16927 #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?}}
16928     for (int i = 0; i < 10; ++i)
16929       ;
16930   }
16931 #pragma omp target teams distribute parallel for
16932   for (int i = 0; i < 10; ++i) {
16933 #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?}}
16934     for (int i = 0; i < 10; ++i)
16935       ;
16936   }
16937 #pragma omp target teams distribute parallel for
16938   for (int i = 0; i < 10; ++i) {
16939 #pragma omp simd // OK
16940     for (int i = 0; i < 10; ++i)
16941       ;
16942   }
16943 #pragma omp target teams distribute parallel for
16944   for (int i = 0; i < 10; ++i) {
16945 #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?}}
16946     for (int i = 0; i < 10; ++i)
16947       ;
16948   }
16949 #pragma omp target teams distribute parallel for
16950   for (int i = 0; i < 10; ++i) {
16951 #pragma omp parallel // OK
16952     for (int i = 0; i < 10; ++i)
16953       ;
16954   }
16955 #pragma omp target teams distribute parallel for
16956   for (int i = 0; i < 10; ++i) {
16957 #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?}}
16958     {
16959       bar();
16960     }
16961   }
16962 #pragma omp target teams distribute parallel for
16963   for (int i = 0; i < 10; ++i) {
16964 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
16965     {
16966       bar();
16967     }
16968   }
16969 #pragma omp target teams distribute parallel for
16970   for (int i = 0; i < 10; ++i) {
16971 #pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
16972     {
16973       bar();
16974     }
16975   }
16976 #pragma omp target teams distribute parallel for
16977   for (int i = 0; i < 10; ++i) {
16978 #pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
16979     {
16980       bar();
16981     }
16982   }
16983 #pragma omp target teams distribute parallel for
16984   for (int i = 0; i < 10; ++i) {
16985 #pragma omp critical // OK
16986     {
16987       bar();
16988     }
16989   }
16990 #pragma omp target teams distribute parallel for
16991   for (int i = 0; i < 10; ++i) {
16992 #pragma omp parallel // OK
16993     {
16994 #pragma omp single
16995       {
16996 	bar();
16997       }
16998     }
16999   }
17000 #pragma omp target teams distribute parallel for
17001   for (int i = 0; i < 10; ++i) {
17002 #pragma omp parallel for // OK
17003     for (int i = 0; i < 10; ++i)
17004       ;
17005   }
17006 #pragma omp target teams distribute parallel for
17007   for (int i = 0; i < 10; ++i) {
17008 #pragma omp parallel for simd // OK
17009     for (int i = 0; i < 10; ++i)
17010       ;
17011   }
17012 #pragma omp target teams distribute parallel for
17013   for (int i = 0; i < 10; ++i) {
17014 #pragma omp parallel sections // OK
17015     {
17016       bar();
17017     }
17018   }
17019 #pragma omp target teams distribute parallel for
17020   for (int i = 0; i < 10; ++i) {
17021 #pragma omp task // OK
17022     {
17023       bar();
17024     }
17025   }
17026 #pragma omp target teams distribute parallel for
17027   for (int i = 0; i < 10; ++i) {
17028 #pragma omp taskyield // OK
17029     bar();
17030   }
17031 #pragma omp target teams distribute parallel for
17032   for (int i = 0; i < 10; ++i) {
17033 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17034     bar();
17035   }
17036 #pragma omp target teams distribute parallel for
17037   for (int i = 0; i < 10; ++i) {
17038 #pragma omp taskwait // OK
17039     bar();
17040   }
17041 #pragma omp target teams distribute parallel for
17042   for (int i = 0; i < 10; ++i) {
17043 #pragma omp flush // OK
17044     bar();
17045   }
17046 #pragma omp target teams distribute parallel for
17047   for (int i = 0; i < 10; ++i) {
17048 #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?}}
17049     bar();
17050   }
17051 #pragma omp target teams distribute parallel for
17052   for (int i = 0; i < 10; ++i) {
17053 #pragma omp atomic // OK
17054     ++a;
17055   }
17056 #pragma omp target teams distribute parallel for
17057   for (int i = 0; i < 10; ++i) {
17058 #pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17059     ++a;
17060   }
17061 #pragma omp target teams distribute parallel for
17062   for (int i = 0; i < 10; ++i) {
17063 #pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17064     ++a;
17065   }
17066 #pragma omp target teams distribute parallel for
17067   for (int i = 0; i < 10; ++i) {
17068 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17069     for (int i = 0; i < 10; ++i)
17070       ;
17071   }
17072 #pragma omp target teams distribute parallel for
17073   for (int i = 0; i < 10; ++i) {
17074 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17075     ++a;
17076   }
17077 #pragma omp target teams distribute parallel for
17078   for (int i = 0; i < 10; ++i) {
17079 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17080     ++a;
17081   }
17082 #pragma omp target teams distribute parallel for
17083   for (int i = 0; i < 10; ++i) {
17084 #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?}}
17085     ++a;
17086   }
17087 #pragma omp target teams distribute parallel for
17088   for (int i = 0; i < 10; ++i) {
17089 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17090     ++a;
17091   }
17092 #pragma omp target teams distribute parallel for
17093   for (int i = 0; i < 10; ++i) {
17094 #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?}}
17095     for (int i = 0; i < 10; ++i)
17096       ++a;
17097   }
17098 #pragma omp target teams distribute parallel for
17099   for (int i = 0; i < 10; ++i) {
17100 #pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17101     for (int i = 0; i < 10; ++i)
17102       ++a;
17103   }
17104 #pragma omp target teams distribute parallel for
17105   for (int i = 0; i < 10; ++i) {
17106 #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?}}
17107     for (int i = 0; i < 10; ++i)
17108       ++a;
17109   }
17110 #pragma omp target teams distribute parallel for
17111   for (int i = 0; i < 10; ++i) {
17112 #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?}}
17113     for (int i = 0; i < 10; ++i)
17114       ++a;
17115   }
17116 #pragma omp target teams distribute parallel for
17117   for (int i = 0; i < 10; ++i) {
17118 #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?}}
17119     for (int i = 0; i < 10; ++i)
17120       ++a;
17121   }
17122 #pragma omp target teams distribute parallel for
17123   for (int i = 0; i < 10; ++i) {
17124 #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?}}
17125     for (int i = 0; i < 10; ++i)
17126       ++a;
17127   }
17128 #pragma omp target teams distribute parallel for
17129   for (int i = 0; i < 10; ++i) {
17130 #pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17131     ++a;
17132   }
17133 #pragma omp target teams distribute parallel for
17134   for (int i = 0; i < 10; ++i) {
17135 #pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17136     for (int i = 0; i < 10; ++i)
17137       ++a;
17138   }
17139 #pragma omp target teams distribute parallel for
17140   for (int i = 0; i < 10; ++i) {
17141 #pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17142     for (int i = 0; i < 10; ++i)
17143       ++a;
17144   }
17145 #pragma omp target teams distribute parallel for
17146   for (int i = 0; i < 10; ++i) {
17147 #pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17148     for (int i = 0; i < 10; ++i)
17149       ++a;
17150   }
17151 #pragma omp target teams distribute parallel for
17152   for (int i = 0; i < 10; ++i) {
17153 #pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17154     for (int i = 0; i < 10; ++i)
17155       ++a;
17156   }
17157 
17158 // TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
17159 #pragma omp target teams distribute parallel for simd // OK
17160   for (int i = 0; i < 10; ++i)
17161     ;
17162 #pragma omp target teams distribute parallel for simd
17163   for (int i = 0; i < 10; ++i) {
17164 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17165     for (int i = 0; i < 10; ++i)
17166       ;
17167   }
17168 #pragma omp target teams distribute parallel for simd
17169   for (int i = 0; i < 10; ++i) {
17170 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17171     for (int i = 0; i < 10; ++i)
17172       ;
17173   }
17174 #pragma omp target teams distribute parallel for simd
17175   for (int i = 0; i < 10; ++i) {
17176 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17177     for (int i = 0; i < 10; ++i)
17178       ;
17179   }
17180 #pragma omp target teams distribute parallel for simd
17181   for (int i = 0; i < 10; ++i) {
17182 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17183     for (int i = 0; i < 10; ++i)
17184       ;
17185   }
17186 #pragma omp target teams distribute parallel for simd
17187   for (int i = 0; i < 10; ++i) {
17188 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17189     for (int i = 0; i < 10; ++i)
17190       ;
17191   }
17192 #pragma omp target teams distribute parallel for simd
17193   for (int i = 0; i < 10; ++i) {
17194 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17195     for (int i = 0; i < 10; ++i)
17196       ;
17197   }
17198 #pragma omp target teams distribute parallel for simd
17199   for (int i = 0; i < 10; ++i) {
17200 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17201     {
17202       bar();
17203     }
17204   }
17205 #pragma omp target teams distribute parallel for simd
17206   for (int i = 0; i < 10; ++i) {
17207 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17208     {
17209       bar();
17210     }
17211   }
17212 #pragma omp target teams distribute parallel for simd
17213   for (int i = 0; i < 10; ++i) {
17214 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17215     {
17216       bar();
17217     }
17218   }
17219 #pragma omp target teams distribute parallel for simd
17220   for (int i = 0; i < 10; ++i) {
17221 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17222     {
17223       bar();
17224     }
17225   }
17226 #pragma omp target teams distribute parallel for simd
17227   for (int i = 0; i < 10; ++i) {
17228 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17229     {
17230       bar();
17231     }
17232   }
17233 #pragma omp target teams distribute parallel for simd
17234   for (int i = 0; i < 10; ++i) {
17235 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17236     {
17237 #pragma omp single
17238       {
17239 	bar();
17240       }
17241     }
17242   }
17243 #pragma omp target teams distribute parallel for simd
17244   for (int i = 0; i < 10; ++i) {
17245 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17246     for (int i = 0; i < 10; ++i)
17247       ;
17248   }
17249 #pragma omp target teams distribute parallel for simd
17250   for (int i = 0; i < 10; ++i) {
17251 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17252     for (int i = 0; i < 10; ++i)
17253       ;
17254   }
17255 #pragma omp target teams distribute parallel for simd
17256   for (int i = 0; i < 10; ++i) {
17257 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17258     {
17259       bar();
17260     }
17261   }
17262 #pragma omp target teams distribute parallel for simd
17263   for (int i = 0; i < 10; ++i) {
17264 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17265     {
17266       bar();
17267     }
17268   }
17269 #pragma omp target teams distribute parallel for simd
17270   for (int i = 0; i < 10; ++i) {
17271 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17272     bar();
17273   }
17274 #pragma omp target teams distribute parallel for simd
17275   for (int i = 0; i < 10; ++i) {
17276 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17277     bar();
17278   }
17279 #pragma omp target teams distribute parallel for simd
17280   for (int i = 0; i < 10; ++i) {
17281 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17282     bar();
17283   }
17284 #pragma omp target teams distribute parallel for simd
17285   for (int i = 0; i < 10; ++i) {
17286 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17287     bar();
17288   }
17289 #pragma omp target teams distribute parallel for simd
17290   for (int i = 0; i < 10; ++i) {
17291 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17292     bar();
17293   }
17294 #pragma omp target teams distribute parallel for simd
17295   for (int i = 0; i < 10; ++i) {
17296 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
17297     ++a;
17298   }
17299 #pragma omp target teams distribute parallel for simd
17300   for (int i = 0; i < 10; ++i) {
17301 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17302     ++a;
17303   }
17304 #pragma omp target teams distribute parallel for simd
17305   for (int i = 0; i < 10; ++i) {
17306 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17307     ++a;
17308   }
17309 #pragma omp target teams distribute parallel for simd
17310   for (int i = 0; i < 10; ++i) {
17311 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17312     for (int i = 0; i < 10; ++i)
17313       ;
17314   }
17315 #pragma omp target teams distribute parallel for simd
17316   for (int i = 0; i < 10; ++i) {
17317 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17318     ++a;
17319   }
17320 #pragma omp target teams distribute parallel for simd
17321   for (int i = 0; i < 10; ++i) {
17322 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17323     ++a;
17324   }
17325 #pragma omp target teams distribute parallel for simd
17326   for (int i = 0; i < 10; ++i) {
17327 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17328     ++a;
17329   }
17330 #pragma omp target teams distribute parallel for simd
17331   for (int i = 0; i < 10; ++i) {
17332 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17333     ++a;
17334   }
17335 #pragma omp target teams distribute parallel for simd
17336   for (int i = 0; i < 10; ++i) {
17337 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17338     for (int i = 0; i < 10; ++i)
17339       ++a;
17340   }
17341 #pragma omp target teams distribute parallel for simd
17342   for (int i = 0; i < 10; ++i) {
17343 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17344     for (int i = 0; i < 10; ++i)
17345       ++a;
17346   }
17347 #pragma omp target teams distribute parallel for simd
17348   for (int i = 0; i < 10; ++i) {
17349 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17350     for (int i = 0; i < 10; ++i)
17351       ++a;
17352   }
17353 #pragma omp target teams distribute parallel for simd
17354   for (int i = 0; i < 10; ++i) {
17355 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17356     for (int i = 0; i < 10; ++i)
17357       ++a;
17358   }
17359 #pragma omp target teams distribute parallel for simd
17360   for (int i = 0; i < 10; ++i) {
17361 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17362     for (int i = 0; i < 10; ++i)
17363       ++a;
17364   }
17365 #pragma omp target teams distribute parallel for simd
17366   for (int i = 0; i < 10; ++i) {
17367 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17368     for (int i = 0; i < 10; ++i)
17369       ;
17370   }
17371 #pragma omp target teams distribute parallel for simd
17372   for (int i = 0; i < 10; ++i) {
17373 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17374     a++;
17375   }
17376 #pragma omp target teams distribute parallel for simd
17377   for (int i = 0; i < 10; ++i) {
17378 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17379     for (int i = 0; i < 10; ++i)
17380       ;
17381   }
17382 #pragma omp target teams distribute parallel for simd
17383   for (int i = 0; i < 10; ++i) {
17384 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17385     for (int i = 0; i < 10; ++i)
17386       ;
17387   }
17388 #pragma omp target teams distribute parallel for simd
17389   for (int i = 0; i < 10; ++i) {
17390 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17391     for (int i = 0; i < 10; ++i)
17392       ;
17393   }
17394 #pragma omp target teams distribute parallel for simd
17395   for (int i = 0; i < 10; ++i) {
17396 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17397     for (int i = 0; i < 10; ++i)
17398       ;
17399   }
17400 
17401 // TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
17402 #pragma omp target teams distribute simd // OK
17403   for (int i = 0; i < 10; ++i)
17404     ;
17405 #pragma omp target teams distribute simd
17406   for (int i = 0; i < 10; ++i) {
17407 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17408     for (int i = 0; i < 10; ++i)
17409       ;
17410   }
17411 #pragma omp target teams distribute simd
17412   for (int i = 0; i < 10; ++i) {
17413 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17414     for (int i = 0; i < 10; ++i)
17415       ;
17416   }
17417 #pragma omp target teams distribute simd
17418   for (int i = 0; i < 10; ++i) {
17419 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17420     for (int i = 0; i < 10; ++i)
17421       ;
17422   }
17423 #pragma omp target teams distribute simd
17424   for (int i = 0; i < 10; ++i) {
17425 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17426     for (int i = 0; i < 10; ++i)
17427       ;
17428   }
17429 #pragma omp target teams distribute simd
17430   for (int i = 0; i < 10; ++i) {
17431 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17432     for (int i = 0; i < 10; ++i)
17433       ;
17434   }
17435 #pragma omp target teams distribute simd
17436   for (int i = 0; i < 10; ++i) {
17437 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17438     for (int i = 0; i < 10; ++i)
17439       ;
17440   }
17441 #pragma omp target teams distribute simd
17442   for (int i = 0; i < 10; ++i) {
17443 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17444     {
17445       bar();
17446     }
17447   }
17448 #pragma omp target teams distribute simd
17449   for (int i = 0; i < 10; ++i) {
17450 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17451     {
17452       bar();
17453     }
17454   }
17455 #pragma omp target teams distribute simd
17456   for (int i = 0; i < 10; ++i) {
17457 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17458     {
17459       bar();
17460     }
17461   }
17462 #pragma omp target teams distribute simd
17463   for (int i = 0; i < 10; ++i) {
17464 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17465     {
17466       bar();
17467     }
17468   }
17469 #pragma omp target teams distribute simd
17470   for (int i = 0; i < 10; ++i) {
17471 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17472     {
17473       bar();
17474     }
17475   }
17476 #pragma omp target teams distribute simd
17477   for (int i = 0; i < 10; ++i) {
17478 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17479     {
17480 #pragma omp single
17481       {
17482 	bar();
17483       }
17484     }
17485   }
17486 #pragma omp target teams distribute simd
17487   for (int i = 0; i < 10; ++i) {
17488 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17489     for (int i = 0; i < 10; ++i)
17490       ;
17491   }
17492 #pragma omp target teams distribute simd
17493   for (int i = 0; i < 10; ++i) {
17494 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17495     for (int i = 0; i < 10; ++i)
17496       ;
17497   }
17498 #pragma omp target teams distribute simd
17499   for (int i = 0; i < 10; ++i) {
17500 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17501     {
17502       bar();
17503     }
17504   }
17505 #pragma omp target teams distribute simd
17506   for (int i = 0; i < 10; ++i) {
17507 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17508     {
17509       bar();
17510     }
17511   }
17512 #pragma omp target teams distribute simd
17513   for (int i = 0; i < 10; ++i) {
17514 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17515     bar();
17516   }
17517 #pragma omp target teams distribute simd
17518   for (int i = 0; i < 10; ++i) {
17519 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17520     bar();
17521   }
17522 #pragma omp target teams distribute simd
17523   for (int i = 0; i < 10; ++i) {
17524 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17525     bar();
17526   }
17527 #pragma omp target teams distribute simd
17528   for (int i = 0; i < 10; ++i) {
17529 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17530     bar();
17531   }
17532 #pragma omp target teams distribute simd
17533   for (int i = 0; i < 10; ++i) {
17534 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17535     bar();
17536   }
17537 #pragma omp target teams distribute simd
17538   for (int i = 0; i < 10; ++i) {
17539 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
17540     ++a;
17541   }
17542 #pragma omp target teams distribute simd
17543   for (int i = 0; i < 10; ++i) {
17544 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17545     ++a;
17546   }
17547 #pragma omp target teams distribute simd
17548   for (int i = 0; i < 10; ++i) {
17549 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17550     ++a;
17551   }
17552 #pragma omp target teams distribute simd
17553   for (int i = 0; i < 10; ++i) {
17554 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17555     for (int i = 0; i < 10; ++i)
17556       ;
17557   }
17558 #pragma omp target teams distribute simd
17559   for (int i = 0; i < 10; ++i) {
17560 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17561     ++a;
17562   }
17563 #pragma omp target teams distribute simd
17564   for (int i = 0; i < 10; ++i) {
17565 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17566     ++a;
17567   }
17568 #pragma omp target teams distribute simd
17569   for (int i = 0; i < 10; ++i) {
17570 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17571     ++a;
17572   }
17573 #pragma omp target teams distribute simd
17574   for (int i = 0; i < 10; ++i) {
17575 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17576     ++a;
17577   }
17578 #pragma omp target teams distribute simd
17579   for (int i = 0; i < 10; ++i) {
17580 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17581     for (int i = 0; i < 10; ++i)
17582       ++a;
17583   }
17584 #pragma omp target teams distribute simd
17585   for (int i = 0; i < 10; ++i) {
17586 #pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17587     for (int i = 0; i < 10; ++i)
17588       ++a;
17589   }
17590 #pragma omp target teams distribute simd
17591   for (int i = 0; i < 10; ++i) {
17592 #pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17593     for (int i = 0; i < 10; ++i)
17594       ++a;
17595   }
17596 #pragma omp target teams distribute simd
17597   for (int i = 0; i < 10; ++i) {
17598 #pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17599     for (int i = 0; i < 10; ++i)
17600       ++a;
17601   }
17602 #pragma omp target teams distribute simd
17603   for (int i = 0; i < 10; ++i) {
17604 #pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17605     for (int i = 0; i < 10; ++i)
17606       ++a;
17607   }
17608 #pragma omp target teams distribute simd
17609   for (int i = 0; i < 10; ++i) {
17610 #pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17611     for (int i = 0; i < 10; ++i)
17612       ;
17613   }
17614 #pragma omp target teams distribute simd
17615   for (int i = 0; i < 10; ++i) {
17616 #pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17617     a++;
17618   }
17619 #pragma omp target teams distribute simd
17620   for (int i = 0; i < 10; ++i) {
17621 #pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17622     for (int i = 0; i < 10; ++i)
17623       ;
17624   }
17625 #pragma omp target teams distribute simd
17626   for (int i = 0; i < 10; ++i) {
17627 #pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17628     for (int i = 0; i < 10; ++i)
17629       ;
17630   }
17631 #pragma omp target teams distribute simd
17632   for (int i = 0; i < 10; ++i) {
17633 #pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17634     for (int i = 0; i < 10; ++i)
17635       ;
17636   }
17637 #pragma omp target teams distribute simd
17638   for (int i = 0; i < 10; ++i) {
17639 #pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17640     for (int i = 0; i < 10; ++i)
17641       ;
17642   }
17643 
17644   return foo<int>();
17645 }
17646 
17647