1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2 
3 void bar();
4 
5 template <class T>
foo()6 void foo() {
7   T a = T();
8 // PARALLEL DIRECTIVE
9 #pragma omp parallel
10 #pragma omp for
11   for (int i = 0; i < 10; ++i)
12     ;
13 #pragma omp parallel
14 #pragma omp simd
15   for (int i = 0; i < 10; ++i)
16     ;
17 #pragma omp parallel
18 #pragma omp for simd
19   for (int i = 0; i < 10; ++i)
20     ;
21 #pragma omp parallel
22 #pragma omp sections
23   {
24     bar();
25   }
26 #pragma omp parallel
27 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
28   {
29     bar();
30   }
31 #pragma omp parallel
32 #pragma omp single
33   bar();
34 
35 #pragma omp parallel
36 #pragma omp master
37   {
38     bar();
39   }
40 #pragma omp parallel
41 #pragma omp critical
42   {
43     bar();
44   }
45 #pragma omp parallel
46 #pragma omp parallel for
47   for (int i = 0; i < 10; ++i)
48     ;
49 #pragma omp parallel
50 #pragma omp parallel for simd
51   for (int i = 0; i < 10; ++i)
52     ;
53 #pragma omp parallel
54 #pragma omp parallel sections
55   {
56     bar();
57   }
58 #pragma omp parallel
59 #pragma omp task
60   {
61     bar();
62   }
63 #pragma omp parallel
64   {
65 #pragma omp taskyield
66     bar();
67   }
68 #pragma omp parallel
69   {
70 #pragma omp barrier
71     bar();
72   }
73 #pragma omp parallel
74   {
75 #pragma omp taskwait
76     bar();
77   }
78 #pragma omp parallel
79   {
80 #pragma omp flush
81     bar();
82   }
83 #pragma omp parallel
84   {
85 #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?}}
86     bar();
87   }
88 #pragma omp parallel
89   {
90 #pragma omp atomic
91     ++a;
92   }
93 #pragma omp parallel
94   {
95 #pragma omp target
96     ++a;
97   }
98 #pragma omp parallel
99   {
100 #pragma omp target parallel
101     ++a;
102   }
103 #pragma omp parallel
104   {
105 #pragma omp target parallel for
106   for (int i = 0; i < 10; ++i)
107     ;
108   }
109 #pragma omp parallel
110   {
111 #pragma omp target enter data map(to: a)
112     ++a;
113   }
114 #pragma omp parallel
115   {
116 #pragma omp target exit data map(from: a)
117     ++a;
118   }
119 #pragma omp parallel
120   {
121 #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?}}
122     ++a;
123   }
124 #pragma omp parallel
125   {
126 #pragma omp taskloop
127   for (int i = 0; i < 10; ++i)
128     ++a;
129   }
130 #pragma omp parallel
131   {
132 #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?}}
133     for (int i = 0; i < 10; ++i)
134       ;
135   }
136 #pragma omp parallel
137   {
138 #pragma omp target update to(a)
139   }
140 #pragma omp parallel
141   {
142 #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?}}
143     for (int i = 0; i < 10; ++i)
144       ;
145   }
146 #pragma omp parallel
147   {
148 #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?}}
149     for (int i = 0; i < 10; ++i)
150       ;
151   }
152 #pragma omp parallel
153   {
154 #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?}}
155     for (int i = 0; i < 10; ++i)
156       ;
157   }
158 
159 // SIMD DIRECTIVE
160 #pragma omp simd
161   for (int i = 0; i < 10; ++i) {
162 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
163     for (int i = 0; i < 10; ++i)
164       ;
165   }
166 #pragma omp simd
167   for (int i = 0; i < 10; ++i) {
168 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
169     for (int i = 0; i < 10; ++i)
170       ;
171   }
172 #pragma omp simd
173   for (int i = 0; i < 10; ++i) {
174 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
175     for (int i = 0; i < 10; ++i)
176       ;
177   }
178 #pragma omp simd
179   for (int i = 0; i < 10; ++i) {
180 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
181     for (int i = 0; i < 10; ++i)
182       ;
183   }
184 #pragma omp simd
185   for (int i = 0; i < 10; ++i) {
186 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
187     {
188       bar();
189     }
190   }
191 #pragma omp simd
192   for (int i = 0; i < 10; ++i) {
193 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
194     {
195       bar();
196     }
197   }
198 #pragma omp simd
199   for (int i = 0; i < 10; ++i) {
200 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
201     {
202       bar();
203     }
204   }
205 #pragma omp simd
206   for (int i = 0; i < 10; ++i) {
207 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
208     {
209       bar();
210     }
211   }
212 #pragma omp simd
213   for (int i = 0; i < 10; ++i) {
214 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
215     {
216       bar();
217     }
218   }
219 #pragma omp simd
220   for (int i = 0; i < 10; ++i) {
221 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
222     for (int i = 0; i < 10; ++i)
223       ;
224   }
225 #pragma omp simd
226   for (int i = 0; i < 10; ++i) {
227 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
228     for (int i = 0; i < 10; ++i)
229       ;
230   }
231 #pragma omp simd
232   for (int i = 0; i < 10; ++i) {
233 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
234     {
235       bar();
236     }
237   }
238 #pragma omp simd
239   for (int i = 0; i < 10; ++i) {
240 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
241     {
242       bar();
243     }
244   }
245 #pragma omp simd
246   for (int i = 0; i < 10; ++i) {
247 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
248     bar();
249   }
250 #pragma omp simd
251   for (int i = 0; i < 10; ++i) {
252 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
253     bar();
254   }
255 #pragma omp simd
256   for (int i = 0; i < 10; ++i) {
257 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
258     bar();
259   }
260 #pragma omp simd
261   for (int i = 0; i < 10; ++i) {
262 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
263     bar();
264   }
265 #pragma omp simd
266   for (int i = 0; i < 10; ++i) {
267 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
268     bar();
269   }
270 #pragma omp simd
271   for (int i = 0; i < 10; ++i) {
272 #pragma omp ordered simd // OK
273     bar();
274   }
275 #pragma omp simd
276   for (int i = 0; i < 10; ++i) {
277 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
278     bar();
279   }
280 #pragma omp simd
281   for (int i = 0; i < 10; ++i) {
282 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
283     ++a;
284   }
285 #pragma omp simd
286   for (int i = 0; i < 10; ++i) {
287 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
288     ++a;
289   }
290 #pragma omp simd
291   for (int i = 0; i < 10; ++i) {
292 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
293     ++a;
294   }
295 #pragma omp simd
296   for (int i = 0; i < 10; ++i) {
297 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
298     for (int i = 0; i < 10; ++i)
299       ;
300   }
301 #pragma omp simd
302   for (int i = 0; i < 10; ++i) {
303 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
304     ++a;
305   }
306 #pragma omp simd
307   for (int i = 0; i < 10; ++i) {
308 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
309     ++a;
310   }
311 #pragma omp simd
312   for (int i = 0; i < 10; ++i) {
313 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
314     ++a;
315   }
316 #pragma omp simd
317   for (int i = 0; i < 10; ++i) {
318 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
319   for (int i = 0; i < 10; ++i)
320     ++a;
321   }
322 #pragma omp simd
323   for (int i = 0; i < 10; ++i) {
324 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
325     for (int j = 0; j < 10; ++j)
326       ;
327   }
328 #pragma omp simd
329   for (int i = 0; i < 10; ++i) {
330 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
331   }
332 #pragma omp simd
333   for (int i = 0; i < 10; ++i) {
334 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
335     for (int j = 0; j < 10; ++j)
336       ;
337   }
338 #pragma omp simd
339   for (int i = 0; i < 10; ++i) {
340 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
341     for (int j = 0; j < 10; ++j)
342       ;
343   }
344 #pragma omp simd
345   for (int i = 0; i < 10; ++i) {
346 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
347     for (int j = 0; j < 10; ++j)
348       ;
349   }
350 
351 // FOR DIRECTIVE
352 #pragma omp for
353   for (int i = 0; i < 10; ++i) {
354 #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?}}
355     for (int i = 0; i < 10; ++i)
356       ;
357   }
358 #pragma omp for
359   for (int i = 0; i < 10; ++i) {
360 #pragma omp simd
361     for (int i = 0; i < 10; ++i)
362       ;
363   }
364 #pragma omp for
365   for (int i = 0; i < 10; ++i) {
366 #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?}}
367     for (int i = 0; i < 10; ++i)
368       ;
369   }
370 #pragma omp for
371   for (int i = 0; i < 10; ++i) {
372 #pragma omp parallel
373     for (int i = 0; i < 10; ++i)
374       ;
375   }
376 #pragma omp for
377   for (int i = 0; i < 10; ++i) {
378 #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?}}
379     {
380       bar();
381     }
382   }
383 #pragma omp for
384   for (int i = 0; i < 10; ++i) {
385 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
386     {
387       bar();
388     }
389   }
390 #pragma omp for
391   for (int i = 0; i < 10; ++i) {
392 #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?}}
393     {
394       bar();
395     }
396   }
397 
398 #pragma omp for
399   for (int i = 0; i < 10; ++i) {
400 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
401     {
402       bar();
403     }
404   }
405 #pragma omp for
406   for (int i = 0; i < 10; ++i) {
407 #pragma omp critical
408     {
409       bar();
410     }
411   }
412 #pragma omp for
413   for (int i = 0; i < 10; ++i) {
414 #pragma omp parallel
415     {
416 #pragma omp single // OK
417       {
418         bar();
419       }
420 #pragma omp for // OK
421       for (int i = 0; i < 10; ++i)
422         ;
423 #pragma omp sections // OK
424       {
425         bar();
426       }
427     }
428   }
429 #pragma omp for
430   for (int i = 0; i < 10; ++i) {
431 #pragma omp parallel for
432     for (int i = 0; i < 10; ++i)
433       ;
434   }
435 #pragma omp for
436   for (int i = 0; i < 10; ++i) {
437 #pragma omp parallel for simd
438     for (int i = 0; i < 10; ++i)
439       ;
440   }
441 #pragma omp for
442   for (int i = 0; i < 10; ++i) {
443 #pragma omp parallel sections
444     {
445       bar();
446     }
447   }
448 #pragma omp for
449   for (int i = 0; i < 10; ++i) {
450 #pragma omp task
451     {
452       bar();
453     }
454   }
455 #pragma omp for
456   for (int i = 0; i < 10; ++i) {
457 #pragma omp taskyield
458     bar();
459   }
460 #pragma omp for
461   for (int i = 0; i < 10; ++i) {
462 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
463     bar();
464   }
465 #pragma omp for
466   for (int i = 0; i < 10; ++i) {
467 #pragma omp taskwait
468     bar();
469   }
470 #pragma omp for
471   for (int i = 0; i < 10; ++i) {
472 #pragma omp flush
473     bar();
474   }
475 #pragma omp for
476   for (int i = 0; i < 10; ++i) {
477 #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?}}
478     bar();
479   }
480 #pragma omp for ordered
481   for (int i = 0; i < 10; ++i) {
482 #pragma omp ordered // OK
483     bar();
484   }
485 #pragma omp for
486   for (int i = 0; i < 10; ++i) {
487 #pragma omp atomic
488     ++a;
489   }
490 #pragma omp for
491   for (int i = 0; i < 10; ++i) {
492 #pragma omp target
493     ++a;
494   }
495 #pragma omp for
496   for (int i = 0; i < 10; ++i) {
497 #pragma omp target parallel
498     ++a;
499   }
500 #pragma omp for
501   for (int i = 0; i < 10; ++i) {
502 #pragma omp target parallel for
503     for (int i = 0; i < 10; ++i)
504       ;
505   }
506 #pragma omp for
507   for (int i = 0; i < 10; ++i) {
508 #pragma omp target enter data map(to: a)
509     ++a;
510   }
511 #pragma omp for
512   for (int i = 0; i < 10; ++i) {
513 #pragma omp target exit data map(from: a)
514     ++a;
515   }
516 #pragma omp for
517   for (int i = 0; i < 10; ++i) {
518 #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?}}
519     ++a;
520   }
521 #pragma omp for
522   for (int i = 0; i < 10; ++i) {
523 #pragma omp taskloop
524   for (int i = 0; i < 10; ++i)
525     ++a;
526   }
527 #pragma omp for
528   for (int i = 0; i < 10; ++i) {
529 #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?}}
530     for (int j = 0; j < 10; ++j)
531       ;
532   }
533 #pragma omp for
534   for (int i = 0; i < 10; ++i) {
535 #pragma omp target update to(a)
536   }
537 #pragma omp for
538   for (int i = 0; i < 10; ++i) {
539 #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?}}
540     for (int j = 0; j < 10; ++j)
541       ;
542   }
543 #pragma omp for
544   for (int i = 0; i < 10; ++i) {
545 #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?}}
546     for (int j = 0; j < 10; ++j)
547       ;
548   }
549 #pragma omp for
550   for (int i = 0; i < 10; ++i) {
551 #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?}}
552     for (int j = 0; j < 10; ++j)
553       ;
554   }
555 
556 // FOR SIMD DIRECTIVE
557 #pragma omp for simd
558   for (int i = 0; i < 10; ++i) {
559 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
560     for (int i = 0; i < 10; ++i)
561       ;
562   }
563 #pragma omp for simd
564   for (int i = 0; i < 10; ++i) {
565 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
566     for (int i = 0; i < 10; ++i)
567       ;
568   }
569 #pragma omp for simd
570   for (int i = 0; i < 10; ++i) {
571 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
572     for (int i = 0; i < 10; ++i)
573       ;
574   }
575 #pragma omp for simd
576   for (int i = 0; i < 10; ++i) {
577 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
578     for (int i = 0; i < 10; ++i)
579       ;
580   }
581 #pragma omp for simd
582   for (int i = 0; i < 10; ++i) {
583 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
584     {
585       bar();
586     }
587   }
588 #pragma omp for simd
589   for (int i = 0; i < 10; ++i) {
590 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
591     {
592       bar();
593     }
594   }
595 #pragma omp for simd
596   for (int i = 0; i < 10; ++i) {
597 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
598     {
599       bar();
600     }
601   }
602 #pragma omp for simd
603   for (int i = 0; i < 10; ++i) {
604 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
605     {
606       bar();
607     }
608   }
609 #pragma omp for simd
610   for (int i = 0; i < 10; ++i) {
611 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
612     {
613       bar();
614     }
615   }
616 #pragma omp for simd
617   for (int i = 0; i < 10; ++i) {
618 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
619     for (int i = 0; i < 10; ++i)
620       ;
621   }
622 #pragma omp for simd
623   for (int i = 0; i < 10; ++i) {
624 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
625     for (int i = 0; i < 10; ++i)
626       ;
627   }
628 #pragma omp for simd
629   for (int i = 0; i < 10; ++i) {
630 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
631     {
632       bar();
633     }
634   }
635 #pragma omp for simd
636   for (int i = 0; i < 10; ++i) {
637 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
638     {
639       bar();
640     }
641   }
642 #pragma omp for simd
643   for (int i = 0; i < 10; ++i) {
644 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
645     bar();
646   }
647 #pragma omp for simd
648   for (int i = 0; i < 10; ++i) {
649 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
650     bar();
651   }
652 #pragma omp for simd
653   for (int i = 0; i < 10; ++i) {
654 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
655     bar();
656   }
657 #pragma omp for simd
658   for (int i = 0; i < 10; ++i) {
659 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
660     bar();
661   }
662 #pragma omp for simd
663   for (int i = 0; i < 10; ++i) {
664 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
665     bar();
666   }
667 #pragma omp for simd
668   for (int i = 0; i < 10; ++i) {
669 #pragma omp ordered simd // OK
670     bar();
671   }
672 #pragma omp for simd
673   for (int i = 0; i < 10; ++i) {
674 #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
675     bar();
676   }
677 #pragma omp for simd
678   for (int i = 0; i < 10; ++i) {
679 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
680     ++a;
681   }
682 #pragma omp for simd
683   for (int i = 0; i < 10; ++i) {
684 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
685     ++a;
686   }
687 #pragma omp for simd
688   for (int i = 0; i < 10; ++i) {
689 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
690     ++a;
691   }
692 #pragma omp for simd
693   for (int i = 0; i < 10; ++i) {
694 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
695     for (int i = 0; i < 10; ++i)
696       ;
697   }
698 #pragma omp for simd
699   for (int i = 0; i < 10; ++i) {
700 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
701     ++a;
702   }
703 #pragma omp for simd
704   for (int i = 0; i < 10; ++i) {
705 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
706     ++a;
707   }
708 #pragma omp for simd
709   for (int i = 0; i < 10; ++i) {
710 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
711     ++a;
712   }
713 #pragma omp for simd
714   for (int i = 0; i < 10; ++i) {
715 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
716   for (int i = 0; i < 10; ++i)
717     ++a;
718   }
719 #pragma omp for simd
720   for (int i = 0; i < 10; ++i) {
721 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
722     for (int j = 0; j < 10; ++j)
723       ;
724   }
725 #pragma omp for simd
726   for (int i = 0; i < 10; ++i) {
727 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
728     bar();
729   }
730 #pragma omp for simd
731   for (int i = 0; i < 10; ++i) {
732 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
733     for (int j = 0; j < 10; ++j)
734       ;
735   }
736 #pragma omp for simd
737   for (int i = 0; i < 10; ++i) {
738 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
739     for (int j = 0; j < 10; ++j)
740       ;
741   }
742 #pragma omp for simd
743   for (int i = 0; i < 10; ++i) {
744 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
745     for (int j = 0; j < 10; ++j)
746       ;
747   }
748 
749 // SECTIONS DIRECTIVE
750 #pragma omp sections
751   {
752 #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?}}
753     for (int i = 0; i < 10; ++i)
754       ;
755   }
756 #pragma omp sections
757   {
758 #pragma omp simd
759     for (int i = 0; i < 10; ++i)
760       ;
761   }
762 #pragma omp sections
763   {
764 #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?}}
765     for (int i = 0; i < 10; ++i)
766       ;
767   }
768 #pragma omp sections
769   {
770 #pragma omp parallel
771     for (int i = 0; i < 10; ++i)
772       ;
773   }
774 #pragma omp sections
775   {
776 #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?}}
777     {
778       bar();
779     }
780   }
781 #pragma omp sections
782   {
783 #pragma omp section
784     {
785       bar();
786     }
787   }
788 #pragma omp sections
789   {
790 #pragma omp parallel
791     {
792 #pragma omp single // OK
793       {
794         bar();
795       }
796 #pragma omp for // OK
797       for (int i = 0; i < 10; ++i)
798         ;
799 #pragma omp sections // OK
800       {
801         bar();
802       }
803     }
804   }
805 #pragma omp sections
806   {
807 #pragma omp parallel
808     {
809 #pragma omp master // OK
810       {
811         bar();
812       }
813 #pragma omp for // OK
814       for (int i = 0; i < 10; ++i)
815         ;
816 #pragma omp master // OK
817       {
818         bar();
819       }
820     }
821 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
822     bar();
823   }
824 #pragma omp sections
825   {
826 #pragma omp parallel
827     {
828 #pragma omp critical(A) // OK
829       {
830         bar();
831       }
832 #pragma omp for // OK
833       for (int i = 0; i < 10; ++i)
834         ;
835 #pragma omp critical // OK
836       {
837         bar();
838       }
839     }
840 #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
841     bar();
842   }
843 #pragma omp sections
844   {
845 #pragma omp parallel for
846     for (int i = 0; i < 10; ++i)
847       ;
848   }
849 #pragma omp sections
850   {
851 #pragma omp parallel for simd
852     for (int i = 0; i < 10; ++i)
853       ;
854   }
855 #pragma omp sections
856   {
857 #pragma omp parallel sections
858     {
859       bar();
860     }
861   }
862 #pragma omp sections
863   {
864 #pragma omp task
865     {
866       bar();
867     }
868   }
869 #pragma omp sections
870   {
871 #pragma omp taskyield
872   }
873 #pragma omp sections
874   {
875 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
876   }
877 #pragma omp sections
878   {
879 #pragma omp taskwait
880   }
881 #pragma omp sections
882   {
883 #pragma omp flush
884   }
885 #pragma omp sections
886   {
887 #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?}}
888     bar();
889   }
890 #pragma omp sections
891   {
892 #pragma omp atomic
893     ++a;
894   }
895 #pragma omp sections
896   {
897 #pragma omp target
898     ++a;
899   }
900 #pragma omp sections
901   {
902 #pragma omp target parallel
903     ++a;
904   }
905 #pragma omp sections
906   {
907 #pragma omp target parallel for
908     for (int i = 0; i < 10; ++i)
909       ;
910   }
911 #pragma omp sections
912   {
913 #pragma omp target enter data map(to: a)
914   }
915 #pragma omp sections
916   {
917 #pragma omp target exit data map(from: a)
918   }
919 #pragma omp sections
920   {
921 #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?}}
922     ++a;
923   }
924 #pragma omp sections
925   {
926 #pragma omp taskloop
927   for (int i = 0; i < 10; ++i)
928     ++a;
929   }
930 #pragma omp sections
931   {
932 #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?}}
933     for (int i = 0; i < 10; ++i)
934       ;
935   }
936 #pragma omp sections
937   {
938 #pragma omp target update to(a)
939   }
940 #pragma omp sections
941   {
942 #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?}}
943     for (int i = 0; i < 10; ++i)
944       ;
945   }
946 #pragma omp sections
947   {
948 #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?}}
949     for (int i = 0; i < 10; ++i)
950       ;
951   }
952 #pragma omp sections
953   {
954 #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?}}
955     for (int i = 0; i < 10; ++i)
956       ;
957   }
958 
959 // SECTION DIRECTIVE
960 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
961   {
962     bar();
963   }
964 #pragma omp sections
965   {
966 #pragma omp section
967     {
968 #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?}}
969       for (int i = 0; i < 10; ++i)
970         ;
971     }
972   }
973 #pragma omp sections
974   {
975 #pragma omp section
976     {
977 #pragma omp simd
978       for (int i = 0; i < 10; ++i)
979         ;
980     }
981   }
982 #pragma omp sections
983   {
984 #pragma omp section
985     {
986 #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?}}
987       for (int i = 0; i < 10; ++i)
988         ;
989     }
990   }
991 #pragma omp sections
992   {
993 #pragma omp section
994     {
995 #pragma omp parallel
996       for (int i = 0; i < 10; ++i)
997         ;
998     }
999   }
1000 #pragma omp sections
1001   {
1002 #pragma omp section
1003     {
1004 #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?}}
1005       {
1006         bar();
1007       }
1008     }
1009   }
1010 #pragma omp sections
1011   {
1012 #pragma omp section
1013     {
1014 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1015       {
1016         bar();
1017       }
1018     }
1019   }
1020 #pragma omp sections
1021   {
1022 #pragma omp section
1023     {
1024 #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?}}
1025       bar();
1026 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1027       bar();
1028 #pragma omp critical
1029       bar();
1030     }
1031   }
1032 #pragma omp sections
1033   {
1034 #pragma omp section
1035     {
1036 #pragma omp parallel
1037       {
1038 #pragma omp single // OK
1039         {
1040           bar();
1041         }
1042 #pragma omp for // OK
1043         for (int i = 0; i < 10; ++i)
1044           ;
1045 #pragma omp for simd // OK
1046         for (int i = 0; i < 10; ++i)
1047           ;
1048 #pragma omp sections // OK
1049         {
1050           bar();
1051         }
1052       }
1053     }
1054   }
1055 #pragma omp sections
1056   {
1057 #pragma omp section
1058     {
1059 #pragma omp parallel for
1060       for (int i = 0; i < 10; ++i)
1061         ;
1062     }
1063   }
1064 #pragma omp sections
1065   {
1066 #pragma omp section
1067     {
1068 #pragma omp parallel for simd
1069       for (int i = 0; i < 10; ++i)
1070         ;
1071     }
1072   }
1073 #pragma omp sections
1074   {
1075 #pragma omp section
1076     {
1077 #pragma omp parallel sections
1078       {
1079         bar();
1080       }
1081     }
1082   }
1083 #pragma omp sections
1084   {
1085 #pragma omp section
1086     {
1087 #pragma omp task
1088       {
1089         bar();
1090       }
1091     }
1092   }
1093 #pragma omp sections
1094   {
1095 #pragma omp section
1096     {
1097 #pragma omp taskyield
1098       bar();
1099     }
1100   }
1101 #pragma omp sections
1102   {
1103 #pragma omp section
1104     {
1105 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1106       bar();
1107     }
1108   }
1109 #pragma omp sections
1110   {
1111 #pragma omp section
1112     {
1113 #pragma omp taskwait
1114       bar();
1115     }
1116   }
1117 #pragma omp sections
1118   {
1119 #pragma omp section
1120     {
1121 #pragma omp flush
1122       bar();
1123     }
1124   }
1125 #pragma omp sections
1126   {
1127 #pragma omp section
1128     {
1129 #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?}}
1130       bar();
1131     }
1132   }
1133 #pragma omp sections
1134   {
1135 #pragma omp section
1136 #pragma omp atomic
1137     ++a;
1138   }
1139 #pragma omp sections
1140   {
1141 #pragma omp section
1142 #pragma omp target
1143     ++a;
1144   }
1145 #pragma omp sections
1146   {
1147 #pragma omp section
1148 #pragma omp target parallel
1149     ++a;
1150   }
1151 #pragma omp sections
1152   {
1153 #pragma omp section
1154     {
1155 #pragma omp target parallel for
1156       for (int i = 0; i < 10; ++i)
1157         ;
1158     }
1159   }
1160 #pragma omp sections
1161   {
1162 #pragma omp section
1163     {
1164 #pragma omp target enter data map(to: a)
1165       ++a;
1166     }
1167   }
1168 #pragma omp sections
1169   {
1170 #pragma omp section
1171     {
1172 #pragma omp target exit data map(from: a)
1173       ++a;
1174     }
1175   }
1176 #pragma omp sections
1177   {
1178 #pragma omp section
1179 #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?}}
1180     ++a;
1181   }
1182 #pragma omp sections
1183   {
1184 #pragma omp section
1185 #pragma omp taskloop
1186   for (int i = 0; i < 10; ++i)
1187     ++a;
1188   }
1189 #pragma omp sections
1190   {
1191 #pragma omp section
1192 #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?}}
1193     for (int i = 0; i < 10; ++i)
1194       ;
1195   }
1196 #pragma omp sections
1197   {
1198 #pragma omp section
1199     {
1200       bar();
1201 #pragma omp target update to(a)
1202     }
1203   }
1204 #pragma omp sections
1205   {
1206 #pragma omp section
1207 #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?}}
1208     for (int i = 0; i < 10; ++i)
1209       ;
1210   }
1211 #pragma omp sections
1212   {
1213 #pragma omp section
1214 #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?}}
1215     for (int i = 0; i < 10; ++i)
1216       ;
1217   }
1218 #pragma omp sections
1219   {
1220 #pragma omp section
1221 #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?}}
1222     for (int i = 0; i < 10; ++i)
1223       ;
1224   }
1225 
1226 // SINGLE DIRECTIVE
1227 #pragma omp single
1228   {
1229 #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?}}
1230     for (int i = 0; i < 10; ++i)
1231       ;
1232   }
1233 #pragma omp single
1234   {
1235 #pragma omp simd
1236     for (int i = 0; i < 10; ++i)
1237       ;
1238   }
1239 #pragma omp single
1240   {
1241 #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?}}
1242     for (int i = 0; i < 10; ++i)
1243       ;
1244   }
1245 #pragma omp single
1246   {
1247 #pragma omp parallel
1248     for (int i = 0; i < 10; ++i)
1249       ;
1250   }
1251 #pragma omp single
1252   {
1253 #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?}}
1254     {
1255       bar();
1256     }
1257   }
1258 #pragma omp single
1259   {
1260 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1261     {
1262       bar();
1263     }
1264   }
1265 #pragma omp single
1266   {
1267 #pragma omp critical
1268     {
1269       bar();
1270     }
1271   }
1272 #pragma omp single
1273   {
1274 #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?}}
1275     {
1276       bar();
1277     }
1278   }
1279 #pragma omp single
1280   {
1281 #pragma omp parallel
1282     {
1283 #pragma omp single // OK
1284       {
1285         bar();
1286       }
1287 #pragma omp for // OK
1288       for (int i = 0; i < 10; ++i)
1289         ;
1290 #pragma omp for simd // OK
1291       for (int i = 0; i < 10; ++i)
1292         ;
1293 #pragma omp sections // OK
1294       {
1295         bar();
1296       }
1297     }
1298   }
1299 #pragma omp single
1300   {
1301 #pragma omp parallel for
1302     for (int i = 0; i < 10; ++i)
1303       ;
1304   }
1305 #pragma omp single
1306   {
1307 #pragma omp parallel for simd
1308     for (int i = 0; i < 10; ++i)
1309       ;
1310   }
1311 #pragma omp single
1312   {
1313 #pragma omp parallel sections
1314     {
1315       bar();
1316     }
1317   }
1318 #pragma omp single
1319   {
1320 #pragma omp task
1321     {
1322       bar();
1323     }
1324   }
1325 #pragma omp single
1326   {
1327 #pragma omp taskyield
1328     bar();
1329   }
1330 #pragma omp single
1331   {
1332 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1333     bar();
1334   }
1335 #pragma omp single
1336   {
1337 #pragma omp taskwait
1338     bar();
1339   }
1340 #pragma omp single
1341   {
1342 #pragma omp flush
1343     bar();
1344   }
1345 #pragma omp single
1346   {
1347 #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?}}
1348     bar();
1349   }
1350 #pragma omp single
1351   {
1352 #pragma omp atomic
1353     ++a;
1354   }
1355 #pragma omp single
1356   {
1357 #pragma omp target
1358     ++a;
1359   }
1360 #pragma omp single
1361   {
1362 #pragma omp target parallel
1363     ++a;
1364   }
1365 #pragma omp single
1366   {
1367 #pragma omp target parallel for
1368     for (int i = 0; i < 10; ++i)
1369       ;
1370   }
1371 #pragma omp single
1372   {
1373 #pragma omp target enter data map(to: a)
1374     ++a;
1375   }
1376 #pragma omp single
1377   {
1378 #pragma omp target exit data map(from: a)
1379     ++a;
1380   }
1381 #pragma omp single
1382   {
1383 #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?}}
1384     ++a;
1385   }
1386 #pragma omp single
1387   {
1388 #pragma omp taskloop
1389   for (int i = 0; i < 10; ++i)
1390     ++a;
1391   }
1392 #pragma omp single
1393   {
1394 #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?}}
1395     for (int i = 0; i < 10; ++i)
1396       ;
1397   }
1398 #pragma omp single
1399   {
1400 #pragma omp target update to(a)
1401     bar();
1402   }
1403 #pragma omp single
1404   {
1405 #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?}}
1406     for (int i = 0; i < 10; ++i)
1407       ;
1408   }
1409 #pragma omp single
1410   {
1411 #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?}}
1412     for (int i = 0; i < 10; ++i)
1413       ;
1414   }
1415 #pragma omp single
1416   {
1417 #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?}}
1418     for (int i = 0; i < 10; ++i)
1419       ;
1420   }
1421 
1422 // MASTER DIRECTIVE
1423 #pragma omp master
1424   {
1425 #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?}}
1426     for (int i = 0; i < 10; ++i)
1427       ;
1428   }
1429 #pragma omp master
1430   {
1431 #pragma omp simd
1432     for (int i = 0; i < 10; ++i)
1433       ;
1434   }
1435 #pragma omp master
1436   {
1437 #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?}}
1438     for (int i = 0; i < 10; ++i)
1439       ;
1440   }
1441 #pragma omp master
1442   {
1443 #pragma omp parallel
1444     for (int i = 0; i < 10; ++i)
1445       ;
1446   }
1447 #pragma omp master
1448   {
1449 #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?}}
1450     {
1451       bar();
1452     }
1453   }
1454 #pragma omp master
1455   {
1456 #pragma omp master // OK, though second 'master' is redundant
1457     {
1458       bar();
1459     }
1460   }
1461 #pragma omp master
1462   {
1463 #pragma omp critical
1464     {
1465       bar();
1466     }
1467   }
1468 #pragma omp master
1469   {
1470 #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?}}
1471     {
1472       bar();
1473     }
1474   }
1475 #pragma omp master
1476   {
1477 #pragma omp parallel
1478     {
1479 #pragma omp master // OK
1480       {
1481         bar();
1482       }
1483 #pragma omp for // OK
1484       for (int i = 0; i < 10; ++i)
1485         ;
1486 #pragma omp for simd // OK
1487       for (int i = 0; i < 10; ++i)
1488         ;
1489 #pragma omp sections // OK
1490       {
1491         bar();
1492       }
1493     }
1494   }
1495 #pragma omp master
1496   {
1497 #pragma omp parallel for
1498     for (int i = 0; i < 10; ++i)
1499       ;
1500   }
1501 #pragma omp master
1502   {
1503 #pragma omp parallel for simd
1504     for (int i = 0; i < 10; ++i)
1505       ;
1506   }
1507 #pragma omp master
1508   {
1509 #pragma omp parallel sections
1510     {
1511       bar();
1512     }
1513   }
1514 #pragma omp master
1515   {
1516 #pragma omp task
1517     {
1518       bar();
1519     }
1520   }
1521 #pragma omp master
1522   {
1523 #pragma omp taskyield
1524     bar();
1525   }
1526 #pragma omp master
1527   {
1528 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1529     bar();
1530   }
1531 #pragma omp master
1532   {
1533 #pragma omp taskwait
1534     bar();
1535   }
1536 #pragma omp master
1537   {
1538 #pragma omp flush
1539     bar();
1540   }
1541 #pragma omp master
1542   {
1543 #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?}}
1544     bar();
1545   }
1546 #pragma omp master
1547   {
1548 #pragma omp atomic
1549     ++a;
1550   }
1551 #pragma omp master
1552   {
1553 #pragma omp target
1554     ++a;
1555   }
1556 #pragma omp master
1557   {
1558 #pragma omp target parallel
1559     ++a;
1560   }
1561 #pragma omp master
1562   {
1563 #pragma omp target parallel for
1564     for (int i = 0; i < 10; ++i)
1565       ;
1566   }
1567 #pragma omp master
1568   {
1569 #pragma omp target enter data map(to: a)
1570     ++a;
1571   }
1572 #pragma omp master
1573   {
1574 #pragma omp target exit data map(from: a)
1575     ++a;
1576   }
1577 #pragma omp master
1578   {
1579 #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?}}
1580     ++a;
1581   }
1582 #pragma omp master
1583   {
1584 #pragma omp taskloop
1585   for (int i = 0; i < 10; ++i)
1586     ++a;
1587   }
1588 #pragma omp master
1589   {
1590 #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?}}
1591     for (int i = 0; i < 10; ++i)
1592       ;
1593   }
1594 #pragma omp master
1595   {
1596 #pragma omp target update to(a)
1597     bar();
1598   }
1599 #pragma omp master
1600   {
1601 #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?}}
1602     for (int i = 0; i < 10; ++i)
1603       ;
1604   }
1605 #pragma omp master
1606   {
1607 #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?}}
1608     for (int i = 0; i < 10; ++i)
1609       ;
1610   }
1611 #pragma omp master
1612   {
1613 #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?}}
1614     for (int i = 0; i < 10; ++i)
1615       ;
1616   }
1617 
1618 // CRITICAL DIRECTIVE
1619 #pragma omp critical
1620   {
1621 #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?}}
1622     for (int i = 0; i < 10; ++i)
1623       ;
1624   }
1625 #pragma omp critical
1626   {
1627 #pragma omp simd
1628     for (int i = 0; i < 10; ++i)
1629       ;
1630   }
1631 #pragma omp critical
1632   {
1633 #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?}}
1634     for (int i = 0; i < 10; ++i)
1635       ;
1636   }
1637 #pragma omp critical
1638   {
1639 #pragma omp parallel
1640     for (int i = 0; i < 10; ++i)
1641       ;
1642   }
1643 #pragma omp critical
1644   {
1645 #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?}}
1646     {
1647       bar();
1648     }
1649   }
1650 #pragma omp critical
1651   {
1652 #pragma omp master // OK, though second 'master' is redundant
1653     {
1654       bar();
1655     }
1656   }
1657 #pragma omp critical
1658   {
1659 #pragma omp critical
1660     {
1661       bar();
1662     }
1663   }
1664 #pragma omp critical
1665   {
1666 #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?}}
1667     {
1668       bar();
1669     }
1670   }
1671 #pragma omp critical
1672   {
1673 #pragma omp parallel
1674     {
1675 #pragma omp master // OK
1676       {
1677         bar();
1678       }
1679 #pragma omp for // OK
1680       for (int i = 0; i < 10; ++i)
1681         ;
1682 #pragma omp for simd // OK
1683       for (int i = 0; i < 10; ++i)
1684         ;
1685 #pragma omp sections // OK
1686       {
1687         bar();
1688       }
1689     }
1690   }
1691 #pragma omp critical
1692   {
1693 #pragma omp parallel for
1694     for (int i = 0; i < 10; ++i)
1695       ;
1696   }
1697 #pragma omp critical
1698   {
1699 #pragma omp parallel for simd
1700     for (int i = 0; i < 10; ++i)
1701       ;
1702   }
1703 #pragma omp critical
1704   {
1705 #pragma omp parallel sections
1706     {
1707       bar();
1708     }
1709   }
1710 #pragma omp critical
1711   {
1712 #pragma omp task
1713     {
1714       bar();
1715     }
1716   }
1717 #pragma omp critical
1718   {
1719 #pragma omp taskyield
1720     bar();
1721   }
1722 #pragma omp critical
1723   {
1724 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
1725     bar();
1726   }
1727 #pragma omp critical
1728   {
1729 #pragma omp taskwait
1730     bar();
1731   }
1732 #pragma omp critical(Tuzik)
1733   {
1734 #pragma omp critical(grelka)
1735     bar();
1736   }
1737 #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
1738   {
1739 #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
1740     {
1741 #pragma omp critical(Tuzik)
1742       {
1743 #pragma omp parallel
1744 #pragma omp critical(grelka)
1745         {
1746           bar();
1747         }
1748       }
1749     }
1750   }
1751 #pragma omp critical
1752   {
1753 #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?}}
1754     bar();
1755   }
1756 #pragma omp critical
1757   {
1758 #pragma omp atomic
1759     ++a;
1760   }
1761 #pragma omp critical
1762   {
1763 #pragma omp target
1764     ++a;
1765   }
1766 #pragma omp critical
1767   {
1768 #pragma omp target parallel
1769     ++a;
1770   }
1771 #pragma omp critical
1772   {
1773 #pragma omp target parallel for
1774     for (int i = 0; i < 10; ++i)
1775       ;
1776   }
1777 #pragma omp critical
1778   {
1779 #pragma omp target enter data map(to: a)
1780     ++a;
1781   }
1782 #pragma omp critical
1783   {
1784 #pragma omp target exit data map(from: a)
1785     ++a;
1786   }
1787 #pragma omp critical
1788   {
1789 #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?}}
1790     ++a;
1791   }
1792 #pragma omp critical
1793   {
1794 #pragma omp taskloop
1795   for (int i = 0; i < 10; ++i)
1796     ++a;
1797   }
1798 #pragma omp critical
1799   {
1800 #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?}}
1801     for (int i = 0; i < 10; ++i)
1802       ;
1803   }
1804 #pragma omp critical
1805   {
1806 #pragma omp target update to(a)
1807     bar();
1808   }
1809 #pragma omp critical
1810   {
1811 #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?}}
1812     for (int i = 0; i < 10; ++i)
1813       ;
1814   }
1815 #pragma omp critical
1816   {
1817 #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?}}
1818     for (int i = 0; i < 10; ++i)
1819       ;
1820   }
1821 #pragma omp critical
1822   {
1823 #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?}}
1824     for (int i = 0; i < 10; ++i)
1825       ;
1826   }
1827 
1828 // PARALLEL FOR DIRECTIVE
1829 #pragma omp parallel for
1830   for (int i = 0; i < 10; ++i) {
1831 #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?}}
1832     for (int i = 0; i < 10; ++i)
1833       ;
1834   }
1835 #pragma omp parallel for
1836   for (int i = 0; i < 10; ++i) {
1837 #pragma omp simd
1838     for (int i = 0; i < 10; ++i)
1839       ;
1840   }
1841 #pragma omp parallel for
1842   for (int i = 0; i < 10; ++i) {
1843 #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?}}
1844     for (int i = 0; i < 10; ++i)
1845       ;
1846   }
1847 #pragma omp parallel for
1848   for (int i = 0; i < 10; ++i) {
1849 #pragma omp parallel
1850     for (int i = 0; i < 10; ++i)
1851       ;
1852   }
1853 #pragma omp parallel for
1854   for (int i = 0; i < 10; ++i) {
1855 #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?}}
1856     {
1857       bar();
1858     }
1859   }
1860 #pragma omp parallel for
1861   for (int i = 0; i < 10; ++i) {
1862 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
1863     {
1864       bar();
1865     }
1866   }
1867 #pragma omp parallel for
1868   for (int i = 0; i < 10; ++i) {
1869 #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?}}
1870     {
1871       bar();
1872     }
1873   }
1874 
1875 #pragma omp parallel for
1876   for (int i = 0; i < 10; ++i) {
1877 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
1878     {
1879       bar();
1880     }
1881   }
1882 
1883 #pragma omp parallel for
1884   for (int i = 0; i < 10; ++i) {
1885 #pragma omp critical
1886     {
1887       bar();
1888     }
1889   }
1890 
1891 #pragma omp parallel for
1892   for (int i = 0; i < 10; ++i) {
1893 #pragma omp parallel
1894     {
1895 #pragma omp single // OK
1896       {
1897         bar();
1898       }
1899 #pragma omp for // OK
1900       for (int i = 0; i < 10; ++i)
1901         ;
1902 #pragma omp for simd // OK
1903       for (int i = 0; i < 10; ++i)
1904         ;
1905 #pragma omp sections // OK
1906       {
1907         bar();
1908       }
1909     }
1910   }
1911 #pragma omp parallel for
1912   for (int i = 0; i < 10; ++i) {
1913 #pragma omp parallel for
1914     for (int i = 0; i < 10; ++i)
1915       ;
1916   }
1917 #pragma omp parallel for
1918   for (int i = 0; i < 10; ++i) {
1919 #pragma omp parallel for simd
1920     for (int i = 0; i < 10; ++i)
1921       ;
1922   }
1923 #pragma omp parallel for
1924   for (int i = 0; i < 10; ++i) {
1925 #pragma omp parallel sections
1926     {
1927       bar();
1928     }
1929   }
1930 #pragma omp parallel for
1931   for (int i = 0; i < 10; ++i) {
1932 #pragma omp task
1933     {
1934       bar();
1935     }
1936   }
1937 #pragma omp parallel for
1938   for (int i = 0; i < 10; ++i) {
1939 #pragma omp taskyield
1940     bar();
1941   }
1942 #pragma omp parallel for
1943   for (int i = 0; i < 10; ++i) {
1944 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
1945     bar();
1946   }
1947 #pragma omp parallel for
1948   for (int i = 0; i < 10; ++i) {
1949 #pragma omp taskwait
1950     bar();
1951   }
1952 #pragma omp parallel for
1953   for (int i = 0; i < 10; ++i) {
1954 #pragma omp flush
1955     bar();
1956   }
1957 #pragma omp parallel for
1958   for (int i = 0; i < 10; ++i) {
1959 #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?}}
1960     bar();
1961   }
1962 #pragma omp parallel for ordered
1963   for (int i = 0; i < 10; ++i) {
1964 #pragma omp ordered // OK
1965     bar();
1966   }
1967 #pragma omp parallel for
1968   for (int i = 0; i < 10; ++i) {
1969 #pragma omp atomic
1970     ++a;
1971   }
1972 #pragma omp parallel for
1973   for (int i = 0; i < 10; ++i) {
1974 #pragma omp target
1975     ++a;
1976   }
1977 #pragma omp parallel for
1978   for (int i = 0; i < 10; ++i) {
1979 #pragma omp target parallel
1980     ++a;
1981   }
1982 #pragma omp parallel for
1983   for (int i = 0; i < 10; ++i) {
1984 #pragma omp target parallel for
1985     for (int i = 0; i < 10; ++i)
1986       ;
1987   }
1988 #pragma omp parallel for
1989   for (int i = 0; i < 10; ++i) {
1990 #pragma omp target enter data map(to: a)
1991     ++a;
1992   }
1993 #pragma omp parallel for
1994   for (int i = 0; i < 10; ++i) {
1995 #pragma omp target exit data map(from: a)
1996     ++a;
1997   }
1998 #pragma omp parallel for
1999   for (int i = 0; i < 10; ++i) {
2000 #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?}}
2001     ++a;
2002   }
2003 #pragma omp parallel for
2004   for (int i = 0; i < 10; ++i) {
2005 #pragma omp taskloop
2006   for (int i = 0; i < 10; ++i)
2007     ++a;
2008   }
2009 #pragma omp parallel for
2010   for (int i = 0; i < 10; ++i) {
2011 #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?}}
2012     for (int j = 0; j < 10; ++j)
2013       ;
2014   }
2015 #pragma omp parallel for
2016   for (int i = 0; i < 10; ++i) {
2017 #pragma omp target update to(a)
2018   }
2019 #pragma omp parallel for
2020   for (int i = 0; i < 10; ++i) {
2021 #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?}}
2022     for (int j = 0; j < 10; ++j)
2023       ;
2024   }
2025 #pragma omp parallel for
2026   for (int i = 0; i < 10; ++i) {
2027 #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?}}
2028     for (int j = 0; j < 10; ++j)
2029       ;
2030   }
2031 #pragma omp parallel for
2032   for (int i = 0; i < 10; ++i) {
2033 #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?}}
2034     for (int j = 0; j < 10; ++j)
2035       ;
2036   }
2037 
2038 // PARALLEL FOR SIMD DIRECTIVE
2039 #pragma omp parallel for simd
2040   for (int i = 0; i < 10; ++i) {
2041 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2042     for (int i = 0; i < 10; ++i)
2043       ;
2044   }
2045 #pragma omp parallel for simd
2046   for (int i = 0; i < 10; ++i) {
2047 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2048     for (int i = 0; i < 10; ++i)
2049       ;
2050   }
2051 #pragma omp parallel for simd
2052   for (int i = 0; i < 10; ++i) {
2053 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2054     for (int i = 0; i < 10; ++i)
2055       ;
2056   }
2057 #pragma omp parallel for simd
2058   for (int i = 0; i < 10; ++i) {
2059 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2060     for (int i = 0; i < 10; ++i)
2061       ;
2062   }
2063 #pragma omp parallel for simd
2064   for (int i = 0; i < 10; ++i) {
2065 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2066     {
2067       bar();
2068     }
2069   }
2070 #pragma omp parallel for simd
2071   for (int i = 0; i < 10; ++i) {
2072 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2073     {
2074       bar();
2075     }
2076   }
2077 #pragma omp parallel for simd
2078   for (int i = 0; i < 10; ++i) {
2079 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2080     {
2081       bar();
2082     }
2083   }
2084 
2085 #pragma omp parallel for simd
2086   for (int i = 0; i < 10; ++i) {
2087 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2088     {
2089       bar();
2090     }
2091   }
2092 
2093 #pragma omp parallel for simd
2094   for (int i = 0; i < 10; ++i) {
2095 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2096     {
2097       bar();
2098     }
2099   }
2100 
2101 #pragma omp parallel for simd
2102   for (int i = 0; i < 10; ++i) {
2103 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2104     {
2105 #pragma omp single
2106       {
2107         bar();
2108       }
2109 #pragma omp for
2110       for (int i = 0; i < 10; ++i)
2111         ;
2112 #pragma omp for simd
2113       for (int i = 0; i < 10; ++i)
2114         ;
2115 #pragma omp sections
2116       {
2117         bar();
2118       }
2119     }
2120   }
2121 #pragma omp parallel for simd
2122   for (int i = 0; i < 10; ++i) {
2123 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2124     for (int i = 0; i < 10; ++i)
2125       ;
2126   }
2127 #pragma omp parallel for simd
2128   for (int i = 0; i < 10; ++i) {
2129 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2130     for (int i = 0; i < 10; ++i)
2131       ;
2132   }
2133 #pragma omp parallel for simd
2134   for (int i = 0; i < 10; ++i) {
2135 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2136     {
2137       bar();
2138     }
2139   }
2140 #pragma omp parallel for simd
2141   for (int i = 0; i < 10; ++i) {
2142 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2143     {
2144       bar();
2145     }
2146   }
2147 #pragma omp parallel for simd
2148   for (int i = 0; i < 10; ++i) {
2149 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2150     bar();
2151   }
2152 #pragma omp parallel for simd
2153   for (int i = 0; i < 10; ++i) {
2154 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2155     bar();
2156   }
2157 #pragma omp parallel for simd
2158   for (int i = 0; i < 10; ++i) {
2159 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2160     bar();
2161   }
2162 #pragma omp parallel for simd
2163   for (int i = 0; i < 10; ++i) {
2164 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2165     bar();
2166   }
2167 #pragma omp parallel for simd
2168   for (int i = 0; i < 10; ++i) {
2169 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2170     bar();
2171   }
2172 #pragma omp parallel for simd
2173   for (int i = 0; i < 10; ++i) {
2174 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2175     bar();
2176   }
2177 #pragma omp parallel for simd
2178   for (int i = 0; i < 10; ++i) {
2179 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2180     ++a;
2181   }
2182 #pragma omp parallel for simd
2183   for (int i = 0; i < 10; ++i) {
2184 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2185     ++a;
2186   }
2187 #pragma omp parallel for simd
2188   for (int i = 0; i < 10; ++i) {
2189 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2190     ++a;
2191   }
2192 #pragma omp parallel for simd
2193   for (int i = 0; i < 10; ++i) {
2194 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2195     for (int i = 0; i < 10; ++i)
2196       ;
2197   }
2198 #pragma omp parallel for simd
2199   for (int i = 0; i < 10; ++i) {
2200 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2201     ++a;
2202   }
2203 #pragma omp parallel for simd
2204   for (int i = 0; i < 10; ++i) {
2205 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2206     ++a;
2207   }
2208 #pragma omp parallel for simd
2209   for (int i = 0; i < 10; ++i) {
2210 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2211     ++a;
2212   }
2213 #pragma omp parallel for simd
2214   for (int i = 0; i < 10; ++i) {
2215 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2216   for (int i = 0; i < 10; ++i)
2217     ++a;
2218   }
2219 #pragma omp parallel for simd
2220   for (int i = 0; i < 10; ++i) {
2221 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2222     for (int j = 0; j < 10; ++j)
2223       ;
2224   }
2225 #pragma omp parallel for simd
2226   for (int i = 0; i < 10; ++i) {
2227 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2228     bar();
2229   }
2230 #pragma omp parallel for simd
2231   for (int i = 0; i < 10; ++i) {
2232 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2233     for (int j = 0; j < 10; ++j)
2234       ;
2235   }
2236 #pragma omp parallel for simd
2237   for (int i = 0; i < 10; ++i) {
2238 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2239     for (int j = 0; j < 10; ++j)
2240       ;
2241   }
2242 #pragma omp parallel for simd
2243   for (int i = 0; i < 10; ++i) {
2244 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2245     for (int j = 0; j < 10; ++j)
2246       ;
2247   }
2248 
2249 // PARALLEL SECTIONS DIRECTIVE
2250 #pragma omp parallel sections
2251   {
2252 #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?}}
2253     for (int i = 0; i < 10; ++i)
2254       ;
2255   }
2256 #pragma omp parallel sections
2257   {
2258 #pragma omp simd
2259     for (int i = 0; i < 10; ++i)
2260       ;
2261   }
2262 #pragma omp parallel sections
2263   {
2264 #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?}}
2265     for (int i = 0; i < 10; ++i)
2266       ;
2267   }
2268 #pragma omp parallel sections
2269   {
2270 #pragma omp parallel
2271     for (int i = 0; i < 10; ++i)
2272       ;
2273   }
2274 #pragma omp parallel sections
2275   {
2276 #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?}}
2277     {
2278       bar();
2279     }
2280   }
2281 #pragma omp parallel sections
2282   {
2283 #pragma omp section
2284     {
2285       bar();
2286     }
2287   }
2288 #pragma omp parallel sections
2289   {
2290 #pragma omp section
2291     {
2292 #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?}}
2293       bar();
2294     }
2295   }
2296 #pragma omp parallel sections
2297   {
2298 #pragma omp section
2299     {
2300 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2301       bar();
2302     }
2303   }
2304 #pragma omp parallel sections
2305   {
2306 #pragma omp section
2307     {
2308 #pragma omp critical
2309       bar();
2310     }
2311   }
2312 #pragma omp parallel sections
2313   {
2314 #pragma omp parallel
2315     {
2316 #pragma omp single // OK
2317       {
2318         bar();
2319       }
2320 #pragma omp for // OK
2321       for (int i = 0; i < 10; ++i)
2322         ;
2323 #pragma omp for simd // OK
2324       for (int i = 0; i < 10; ++i)
2325         ;
2326 #pragma omp sections // OK
2327       {
2328         bar();
2329       }
2330     }
2331   }
2332 #pragma omp parallel sections
2333   {
2334 #pragma omp parallel for
2335     for (int i = 0; i < 10; ++i)
2336       ;
2337   }
2338 #pragma omp parallel sections
2339   {
2340 #pragma omp parallel for simd
2341     for (int i = 0; i < 10; ++i)
2342       ;
2343   }
2344 #pragma omp parallel sections
2345   {
2346 #pragma omp parallel sections
2347     {
2348       bar();
2349     }
2350   }
2351 #pragma omp parallel sections
2352   {
2353 #pragma omp task
2354     {
2355       bar();
2356     }
2357   }
2358 #pragma omp parallel sections
2359   {
2360 #pragma omp taskyield
2361   }
2362 #pragma omp parallel sections
2363   {
2364 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
2365   }
2366 #pragma omp parallel sections
2367   {
2368 #pragma omp taskwait
2369   }
2370 #pragma omp parallel sections
2371   {
2372 #pragma omp flush
2373   }
2374 #pragma omp parallel sections
2375   {
2376 #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?}}
2377     bar();
2378   }
2379 #pragma omp parallel sections
2380   {
2381 #pragma omp atomic
2382     ++a;
2383   }
2384 #pragma omp parallel sections
2385   {
2386 #pragma omp target
2387     ++a;
2388   }
2389 #pragma omp parallel sections
2390   {
2391 #pragma omp target parallel
2392     ++a;
2393   }
2394 #pragma omp parallel sections
2395   {
2396 #pragma omp target parallel for
2397     for (int i = 0; i < 10; ++i)
2398       ;
2399   }
2400 #pragma omp parallel sections
2401   {
2402 #pragma omp target enter data map(to: a)
2403   }
2404 #pragma omp parallel sections
2405   {
2406 #pragma omp target exit data map(from: a)
2407   }
2408 #pragma omp parallel sections
2409   {
2410 #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?}}
2411     ++a;
2412   }
2413 #pragma omp parallel sections
2414   {
2415 #pragma omp taskloop
2416   for (int i = 0; i < 10; ++i)
2417     ++a;
2418   }
2419 #pragma omp parallel sections
2420   {
2421 #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?}}
2422     for (int i = 0; i < 10; ++i)
2423       ;
2424   }
2425 #pragma omp parallel sections
2426   {
2427 #pragma omp target update to(a)
2428   }
2429 #pragma omp parallel sections
2430   {
2431 #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?}}
2432     for (int i = 0; i < 10; ++i)
2433       ;
2434   }
2435 #pragma omp parallel sections
2436   {
2437 #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?}}
2438     for (int i = 0; i < 10; ++i)
2439       ;
2440   }
2441 #pragma omp parallel sections
2442   {
2443 #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?}}
2444     for (int i = 0; i < 10; ++i)
2445       ;
2446   }
2447 
2448 // TASK DIRECTIVE
2449 #pragma omp task
2450 #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?}}
2451   for (int i = 0; i < 10; ++i)
2452     ;
2453 #pragma omp task
2454 #pragma omp simd
2455   for (int i = 0; i < 10; ++i)
2456     ;
2457 #pragma omp task
2458 #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?}}
2459   for (int i = 0; i < 10; ++i)
2460     ;
2461 #pragma omp task
2462 #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?}}
2463   {
2464     bar();
2465   }
2466 #pragma omp task
2467 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
2468   {
2469     bar();
2470   }
2471 #pragma omp task
2472 #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?}}
2473   bar();
2474 #pragma omp task
2475 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
2476   bar();
2477 #pragma omp task
2478 #pragma omp critical
2479   bar();
2480 
2481 #pragma omp task
2482 #pragma omp parallel for
2483   for (int i = 0; i < 10; ++i)
2484     ;
2485 #pragma omp task
2486 #pragma omp parallel for simd
2487   for (int i = 0; i < 10; ++i)
2488     ;
2489 #pragma omp task
2490 #pragma omp parallel sections
2491   {
2492     bar();
2493   }
2494 #pragma omp task
2495 #pragma omp task
2496   {
2497     bar();
2498   }
2499 #pragma omp task
2500   {
2501 #pragma omp taskyield
2502     bar();
2503   }
2504 #pragma omp task
2505   {
2506 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
2507     bar();
2508   }
2509 #pragma omp task
2510   {
2511 #pragma omp taskwait
2512     bar();
2513   }
2514 #pragma omp task
2515   {
2516 #pragma omp flush
2517     bar();
2518   }
2519 #pragma omp task
2520   {
2521 #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?}}
2522     bar();
2523   }
2524 #pragma omp task
2525   {
2526 #pragma omp atomic
2527     ++a;
2528   }
2529 #pragma omp task
2530   {
2531 #pragma omp target
2532     ++a;
2533   }
2534 #pragma omp task
2535   {
2536 #pragma omp target parallel
2537     ++a;
2538   }
2539 #pragma omp task
2540 #pragma omp target parallel for
2541   for (int i = 0; i < 10; ++i)
2542     ;
2543 #pragma omp task
2544   {
2545 #pragma omp target enter data map(to: a)
2546     ++a;
2547   }
2548 #pragma omp task
2549   {
2550 #pragma omp target exit data map(from: a)
2551     ++a;
2552   }
2553 #pragma omp task
2554   {
2555 #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?}}
2556     ++a;
2557   }
2558 #pragma omp task
2559   {
2560 #pragma omp taskloop
2561   for (int i = 0; i < 10; ++i)
2562     ++a;
2563   }
2564 #pragma omp task
2565   {
2566 #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?}}
2567     for (int i = 0; i < 10; ++i)
2568       ;
2569   }
2570 #pragma omp task
2571   {
2572 #pragma omp target update to(a)
2573     bar();
2574   }
2575 #pragma omp task
2576   {
2577 #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?}}
2578     for (int i = 0; i < 10; ++i)
2579       ;
2580   }
2581 #pragma omp task
2582   {
2583 #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?}}
2584     for (int i = 0; i < 10; ++i)
2585       ;
2586   }
2587 #pragma omp task
2588   {
2589 #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?}}
2590     for (int i = 0; i < 10; ++i)
2591       ;
2592   }
2593 
2594 // ORDERED DIRECTIVE
2595 #pragma omp ordered
2596   {
2597 #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?}}
2598     for (int i = 0; i < 10; ++i)
2599       ;
2600   }
2601 #pragma omp ordered
2602   {
2603 #pragma omp simd
2604     for (int i = 0; i < 10; ++i)
2605       ;
2606   }
2607 #pragma omp ordered
2608   {
2609 #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?}}
2610     for (int i = 0; i < 10; ++i)
2611       ;
2612   }
2613 #pragma omp ordered
2614   {
2615 #pragma omp parallel
2616     for (int i = 0; i < 10; ++i)
2617       ;
2618   }
2619 #pragma omp ordered
2620   {
2621 #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?}}
2622     {
2623       bar();
2624     }
2625   }
2626 #pragma omp ordered
2627   {
2628 #pragma omp master // OK, though second 'ordered' is redundant
2629     {
2630       bar();
2631     }
2632   }
2633 #pragma omp ordered
2634   {
2635 #pragma omp critical
2636     {
2637       bar();
2638     }
2639   }
2640 #pragma omp ordered
2641   {
2642 #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?}}
2643     {
2644       bar();
2645     }
2646   }
2647 #pragma omp ordered
2648   {
2649 #pragma omp parallel for ordered
2650     for (int j = 0; j < 10; ++j) {
2651 #pragma omp ordered // OK
2652       {
2653         bar();
2654       }
2655     }
2656   }
2657 #pragma omp ordered
2658   {
2659 #pragma omp parallel for simd ordered
2660     for (int j = 0; j < 10; ++j) {
2661 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2662       {
2663         bar();
2664       }
2665     }
2666   }
2667 #pragma omp ordered
2668   {
2669 #pragma omp parallel for simd ordered
2670     for (int j = 0; j < 10; ++j) {
2671 #pragma omp ordered simd
2672       {
2673         bar();
2674       }
2675     }
2676   }
2677 #pragma omp ordered
2678   {
2679 #pragma omp parallel for
2680     for (int i = 0; i < 10; ++i)
2681       ;
2682   }
2683 #pragma omp ordered
2684   {
2685 #pragma omp parallel for simd
2686     for (int i = 0; i < 10; ++i)
2687       ;
2688   }
2689 #pragma omp ordered
2690   {
2691 #pragma omp parallel sections
2692     {
2693       bar();
2694     }
2695   }
2696 #pragma omp ordered
2697   {
2698 #pragma omp task
2699     {
2700       bar();
2701     }
2702   }
2703 #pragma omp ordered
2704   {
2705 #pragma omp taskyield
2706     bar();
2707   }
2708 #pragma omp ordered
2709   {
2710 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
2711     bar();
2712   }
2713 #pragma omp ordered
2714   {
2715 #pragma omp taskwait
2716     bar();
2717   }
2718 #pragma omp ordered
2719   {
2720 #pragma omp flush
2721     bar();
2722   }
2723 #pragma omp ordered
2724   {
2725 #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?}}
2726     bar();
2727   }
2728 #pragma omp ordered
2729   {
2730 #pragma omp atomic
2731     ++a;
2732   }
2733 #pragma omp ordered
2734   {
2735 #pragma omp target
2736     ++a;
2737   }
2738 #pragma omp ordered
2739   {
2740 #pragma omp target parallel
2741     ++a;
2742   }
2743 #pragma omp ordered
2744   {
2745 #pragma omp target parallel for ordered
2746     for (int j = 0; j < 10; ++j) {
2747 #pragma omp ordered // OK
2748       {
2749         bar();
2750       }
2751     }
2752   }
2753 #pragma omp ordered
2754   {
2755 #pragma omp target parallel for
2756     for (int i = 0; i < 10; ++i)
2757       ;
2758   }
2759 #pragma omp ordered
2760   {
2761 #pragma omp target enter data map(to: a)
2762     ++a;
2763   }
2764 #pragma omp ordered
2765   {
2766 #pragma omp target exit data map(from: a)
2767     ++a;
2768   }
2769 #pragma omp ordered
2770   {
2771 #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?}}
2772     ++a;
2773   }
2774 #pragma omp ordered
2775   {
2776 #pragma omp taskloop
2777   for (int i = 0; i < 10; ++i)
2778     ++a;
2779   }
2780 #pragma omp ordered
2781   {
2782 #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?}}
2783     for (int i = 0; i < 10; ++i)
2784       ;
2785   }
2786 #pragma omp ordered
2787   {
2788     bar();
2789 #pragma omp target update to(a)
2790     bar();
2791   }
2792 #pragma omp ordered
2793   {
2794 #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?}}
2795     for (int i = 0; i < 10; ++i)
2796       ;
2797   }
2798 #pragma omp ordered
2799   {
2800 #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?}}
2801     for (int i = 0; i < 10; ++i)
2802       ;
2803   }
2804 #pragma omp ordered
2805   {
2806 #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?}}
2807     for (int i = 0; i < 10; ++i)
2808       ;
2809   }
2810 
2811 // ATOMIC DIRECTIVE
2812 #pragma omp atomic
2813   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2814   // expected-note@+1 {{expected an expression statement}}
2815   {
2816 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2817     for (int i = 0; i < 10; ++i)
2818       ;
2819   }
2820 #pragma omp atomic
2821   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2822   // expected-note@+1 {{expected an expression statement}}
2823   {
2824 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2825     for (int i = 0; i < 10; ++i)
2826       ;
2827   }
2828 #pragma omp atomic
2829   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2830   // expected-note@+1 {{expected an expression statement}}
2831   {
2832 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2833     for (int i = 0; i < 10; ++i)
2834       ;
2835   }
2836 #pragma omp atomic
2837   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2838   // expected-note@+1 {{expected an expression statement}}
2839   {
2840 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2841     for (int i = 0; i < 10; ++i)
2842       ;
2843   }
2844 #pragma omp atomic
2845   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2846   // expected-note@+1 {{expected an expression statement}}
2847   {
2848 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2849     {
2850       bar();
2851     }
2852   }
2853 #pragma omp atomic
2854   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2855   // expected-note@+1 {{expected an expression statement}}
2856   {
2857 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2858     {
2859       bar();
2860     }
2861   }
2862 #pragma omp atomic
2863   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2864   // expected-note@+1 {{expected an expression statement}}
2865   {
2866 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2867     {
2868       bar();
2869     }
2870   }
2871 #pragma omp atomic
2872   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2873   // expected-note@+1 {{expected an expression statement}}
2874   {
2875 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2876     {
2877       bar();
2878     }
2879   }
2880 #pragma omp atomic
2881   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2882   // expected-note@+1 {{expected an expression statement}}
2883   {
2884 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2885     {
2886       bar();
2887     }
2888   }
2889 #pragma omp atomic
2890   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2891   // expected-note@+1 {{expected an expression statement}}
2892   {
2893 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2894     for (int i = 0; i < 10; ++i)
2895       ;
2896   }
2897 #pragma omp atomic
2898   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2899   // expected-note@+1 {{expected an expression statement}}
2900   {
2901 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2902     for (int i = 0; i < 10; ++i)
2903       ;
2904   }
2905 #pragma omp atomic
2906   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2907   // expected-note@+1 {{expected an expression statement}}
2908   {
2909 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2910     {
2911       bar();
2912     }
2913   }
2914 #pragma omp atomic
2915   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2916   // expected-note@+1 {{expected an expression statement}}
2917   {
2918 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2919     {
2920       bar();
2921     }
2922   }
2923 #pragma omp atomic
2924   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2925   // expected-note@+1 {{expected an expression statement}}
2926   {
2927 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2928     bar();
2929   }
2930 #pragma omp atomic
2931   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2932   // expected-note@+1 {{expected an expression statement}}
2933   {
2934 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2935     bar();
2936   }
2937 #pragma omp atomic
2938   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2939   // expected-note@+1 {{expected an expression statement}}
2940   {
2941 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2942     bar();
2943   }
2944 #pragma omp atomic
2945   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2946   // expected-note@+1 {{expected an expression statement}}
2947   {
2948 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2949     bar();
2950   }
2951 #pragma omp atomic
2952   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2953   // expected-note@+1 {{expected an expression statement}}
2954   {
2955 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2956     bar();
2957   }
2958 #pragma omp atomic
2959   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2960   // expected-note@+1 {{expected an expression statement}}
2961   {
2962 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2963     ++a;
2964   }
2965 #pragma omp atomic
2966   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2967   // expected-note@+1 {{expected an expression statement}}
2968   {
2969 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2970     ++a;
2971   }
2972 #pragma omp atomic
2973   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2974   // expected-note@+1 {{expected an expression statement}}
2975   {
2976 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2977     ++a;
2978   }
2979 #pragma omp atomic
2980   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2981   // expected-note@+1 {{expected an expression statement}}
2982   {
2983 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2984     for (int i = 0; i < 10; ++i)
2985       ;
2986   }
2987 #pragma omp atomic
2988   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2989   // expected-note@+1 {{expected an expression statement}}
2990   {
2991 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2992     ++a;
2993   }
2994 #pragma omp atomic
2995   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
2996   // expected-note@+1 {{expected an expression statement}}
2997   {
2998 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2999     ++a;
3000   }
3001 #pragma omp atomic
3002   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
3003   // expected-note@+1 {{expected an expression statement}}
3004   {
3005 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3006     ++a;
3007   }
3008 #pragma omp atomic
3009   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
3010   // expected-note@+1 {{expected an expression statement}}
3011   {
3012 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3013   for (int i = 0; i < 10; ++i)
3014     ++a;
3015   }
3016 #pragma omp atomic
3017   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
3018   // expected-note@+1 {{expected an expression statement}}
3019   {
3020 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3021     for (int i = 0; i < 10; ++i)
3022       ;
3023   }
3024 #pragma omp atomic
3025   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
3026   // expected-note@+1 {{expected an expression statement}}
3027   {
3028 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3029     bar();
3030   }
3031 #pragma omp atomic
3032   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
3033   // expected-note@+1 {{expected an expression statement}}
3034   {
3035 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3036     for (int i = 0; i < 10; ++i)
3037       ;
3038   }
3039 #pragma omp atomic
3040   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
3041   // expected-note@+1 {{expected an expression statement}}
3042   {
3043 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3044     for (int i = 0; i < 10; ++i)
3045       ;
3046   }
3047 #pragma omp atomic
3048   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
3049   // expected-note@+1 {{expected an expression statement}}
3050   {
3051 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3052     for (int i = 0; i < 10; ++i)
3053       ;
3054   }
3055 
3056 // TARGET DIRECTIVE
3057 #pragma omp target
3058 #pragma omp parallel
3059   bar();
3060 #pragma omp target
3061 #pragma omp for
3062   for (int i = 0; i < 10; ++i)
3063     ;
3064 #pragma omp target
3065 #pragma omp simd
3066   for (int i = 0; i < 10; ++i)
3067     ;
3068 #pragma omp target
3069 #pragma omp for simd
3070   for (int i = 0; i < 10; ++i)
3071     ;
3072 #pragma omp target
3073 #pragma omp sections
3074   {
3075     bar();
3076   }
3077 #pragma omp target
3078 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3079   {
3080     bar();
3081   }
3082 #pragma omp target
3083 #pragma omp single
3084   bar();
3085 
3086 #pragma omp target
3087 #pragma omp master
3088   {
3089     bar();
3090   }
3091 #pragma omp target
3092 #pragma omp critical
3093   {
3094     bar();
3095   }
3096 #pragma omp target
3097 #pragma omp parallel for
3098   for (int i = 0; i < 10; ++i)
3099     ;
3100 #pragma omp target
3101 #pragma omp parallel for simd
3102   for (int i = 0; i < 10; ++i)
3103     ;
3104 #pragma omp target
3105 #pragma omp parallel sections
3106   {
3107     bar();
3108   }
3109 #pragma omp target
3110 #pragma omp task
3111   {
3112     bar();
3113   }
3114 #pragma omp target
3115   {
3116 #pragma omp taskyield
3117     bar();
3118   }
3119 #pragma omp target
3120   {
3121 #pragma omp barrier
3122     bar();
3123   }
3124 #pragma omp target
3125   {
3126 #pragma omp taskwait
3127     bar();
3128   }
3129 #pragma omp target
3130   {
3131 #pragma omp flush
3132     bar();
3133   }
3134 #pragma omp target
3135   {
3136 #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?}}
3137     bar();
3138   }
3139 #pragma omp target
3140   {
3141 #pragma omp atomic
3142     ++a;
3143   }
3144 #pragma omp target
3145   {
3146 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
3147     ++a;
3148   }
3149 #pragma omp target
3150   {
3151 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
3152     ++a;
3153   }
3154 #pragma omp target
3155 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
3156   for (int i = 0; i < 10; ++i)
3157     ;
3158 #pragma omp target
3159   {
3160 #pragma omp teams
3161     ++a;
3162   }
3163 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3164   {
3165     ++a;           // expected-note {{statement outside teams construct here}}
3166 #pragma omp teams  // expected-note {{nested teams construct here}}
3167     ++a;
3168   }
3169 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3170   {
3171     while (0)      // expected-note {{statement outside teams construct here}}
3172 #pragma omp teams  // expected-note {{nested teams construct here}}
3173     ++a;
3174   }
3175 #pragma omp target
3176   {
3177 #pragma omp taskloop
3178   for (int i = 0; i < 10; ++i)
3179     ++a;
3180   }
3181 #pragma omp target
3182   {
3183 #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?}}
3184     for (int i = 0; i < 10; ++i)
3185       ;
3186   }
3187 #pragma omp target
3188   {
3189 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
3190   }
3191 #pragma omp target
3192   {
3193 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
3194   }
3195 #pragma omp target
3196   {
3197 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
3198   }
3199 #pragma omp target
3200   {
3201 #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?}}
3202     for (int i = 0; i < 10; ++i)
3203       ;
3204   }
3205 #pragma omp target
3206   {
3207 #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?}}
3208     for (int i = 0; i < 10; ++i)
3209       ;
3210   }
3211 #pragma omp target
3212   {
3213 #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?}}
3214     for (int i = 0; i < 10; ++i)
3215       ;
3216   }
3217 
3218 // TARGET PARALLEL DIRECTIVE
3219 #pragma omp target parallel
3220 #pragma omp parallel
3221   bar();
3222 #pragma omp target parallel
3223 #pragma omp for
3224   for (int i = 0; i < 10; ++i)
3225     ;
3226 #pragma omp target parallel
3227 #pragma omp simd
3228   for (int i = 0; i < 10; ++i)
3229     ;
3230 #pragma omp target parallel
3231 #pragma omp for simd
3232   for (int i = 0; i < 10; ++i)
3233     ;
3234 #pragma omp target parallel
3235 #pragma omp sections
3236   {
3237     bar();
3238   }
3239 #pragma omp target parallel
3240 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
3241   {
3242     bar();
3243   }
3244 #pragma omp target parallel
3245 #pragma omp single
3246   bar();
3247 
3248 #pragma omp target parallel
3249 #pragma omp master
3250   {
3251     bar();
3252   }
3253 #pragma omp target parallel
3254 #pragma omp critical
3255   {
3256     bar();
3257   }
3258 #pragma omp target parallel
3259 #pragma omp parallel for
3260   for (int i = 0; i < 10; ++i)
3261     ;
3262 #pragma omp target parallel
3263 #pragma omp parallel for simd
3264   for (int i = 0; i < 10; ++i)
3265     ;
3266 #pragma omp target parallel
3267 #pragma omp parallel sections
3268   {
3269     bar();
3270   }
3271 #pragma omp target parallel
3272 #pragma omp task
3273   {
3274     bar();
3275   }
3276 #pragma omp target parallel
3277   {
3278 #pragma omp taskyield
3279     bar();
3280   }
3281 #pragma omp target parallel
3282   {
3283 #pragma omp barrier
3284     bar();
3285   }
3286 #pragma omp target parallel
3287   {
3288 #pragma omp taskwait
3289     bar();
3290   }
3291 #pragma omp target parallel
3292   {
3293 #pragma omp flush
3294     bar();
3295   }
3296 #pragma omp target parallel
3297   {
3298 #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?}}
3299     bar();
3300   }
3301 #pragma omp target parallel
3302   {
3303 #pragma omp atomic
3304     ++a;
3305   }
3306 #pragma omp target parallel
3307   {
3308 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
3309     ++a;
3310   }
3311 #pragma omp target parallel
3312   {
3313 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
3314     ++a;
3315   }
3316 #pragma omp target parallel
3317 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
3318   for (int i = 0; i < 10; ++i)
3319     ;
3320 #pragma omp target parallel
3321   {
3322 #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?}}
3323     ++a;
3324   }
3325 #pragma omp target parallel
3326   {
3327     ++a;
3328 #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?}}
3329     ++a;
3330   }
3331 #pragma omp target parallel
3332   {
3333 #pragma omp taskloop
3334   for (int i = 0; i < 10; ++i)
3335     ++a;
3336   }
3337 #pragma omp target parallel
3338   {
3339 #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?}}
3340     for (int i = 0; i < 10; ++i)
3341       ;
3342   }
3343 #pragma omp target parallel
3344   {
3345 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3346   }
3347 #pragma omp target parallel
3348   {
3349 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3350   }
3351 #pragma omp target parallel
3352   {
3353 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3354   }
3355 #pragma omp target parallel
3356   {
3357 #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?}}
3358     for (int i = 0; i < 10; ++i)
3359       ;
3360   }
3361 #pragma omp target parallel
3362   {
3363 #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?}}
3364     for (int i = 0; i < 10; ++i)
3365       ;
3366   }
3367 #pragma omp target parallel
3368   {
3369 #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?}}
3370     for (int i = 0; i < 10; ++i)
3371       ;
3372   }
3373 
3374 // TARGET PARALLEL FOR DIRECTIVE
3375 #pragma omp target parallel for
3376   for (int i = 0; i < 10; ++i) {
3377 #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?}}
3378     for (int i = 0; i < 10; ++i)
3379       ;
3380   }
3381 #pragma omp target parallel for
3382   for (int i = 0; i < 10; ++i) {
3383 #pragma omp simd
3384     for (int i = 0; i < 10; ++i)
3385       ;
3386   }
3387 #pragma omp target parallel for
3388   for (int i = 0; i < 10; ++i) {
3389 #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?}}
3390     for (int i = 0; i < 10; ++i)
3391       ;
3392   }
3393 #pragma omp target parallel for
3394   for (int i = 0; i < 10; ++i) {
3395 #pragma omp parallel
3396     for (int i = 0; i < 10; ++i)
3397       ;
3398   }
3399 #pragma omp target parallel for
3400   for (int i = 0; i < 10; ++i) {
3401 #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?}}
3402     {
3403       bar();
3404     }
3405   }
3406 #pragma omp target parallel for
3407   for (int i = 0; i < 10; ++i) {
3408 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
3409     {
3410       bar();
3411     }
3412   }
3413 #pragma omp target parallel for
3414   for (int i = 0; i < 10; ++i) {
3415 #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?}}
3416     {
3417       bar();
3418     }
3419   }
3420 
3421 #pragma omp target parallel for
3422   for (int i = 0; i < 10; ++i) {
3423 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
3424     {
3425       bar();
3426     }
3427   }
3428 
3429 #pragma omp target parallel for
3430   for (int i = 0; i < 10; ++i) {
3431 #pragma omp critical
3432     {
3433       bar();
3434     }
3435   }
3436 
3437 #pragma omp target parallel for
3438   for (int i = 0; i < 10; ++i) {
3439 #pragma omp parallel
3440     {
3441 #pragma omp single // OK
3442       {
3443         bar();
3444       }
3445 #pragma omp for // OK
3446       for (int i = 0; i < 10; ++i)
3447         ;
3448 #pragma omp for simd // OK
3449       for (int i = 0; i < 10; ++i)
3450         ;
3451 #pragma omp sections // OK
3452       {
3453         bar();
3454       }
3455     }
3456   }
3457 #pragma omp target parallel for
3458   for (int i = 0; i < 10; ++i) {
3459 #pragma omp parallel for
3460     for (int i = 0; i < 10; ++i)
3461       ;
3462   }
3463 #pragma omp target parallel for
3464   for (int i = 0; i < 10; ++i) {
3465 #pragma omp parallel for simd
3466     for (int i = 0; i < 10; ++i)
3467       ;
3468   }
3469 #pragma omp target parallel for
3470   for (int i = 0; i < 10; ++i) {
3471 #pragma omp parallel sections
3472     {
3473       bar();
3474     }
3475   }
3476 #pragma omp target parallel for
3477   for (int i = 0; i < 10; ++i) {
3478 #pragma omp task
3479     {
3480       bar();
3481     }
3482   }
3483 #pragma omp target parallel for
3484   for (int i = 0; i < 10; ++i) {
3485 #pragma omp taskyield
3486     bar();
3487   }
3488 #pragma omp target parallel for
3489   for (int i = 0; i < 10; ++i) {
3490 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
3491     bar();
3492   }
3493 #pragma omp target parallel for
3494   for (int i = 0; i < 10; ++i) {
3495 #pragma omp taskwait
3496     bar();
3497   }
3498 #pragma omp target parallel for
3499   for (int i = 0; i < 10; ++i) {
3500 #pragma omp flush
3501     bar();
3502   }
3503 #pragma omp target parallel for
3504   for (int i = 0; i < 10; ++i) {
3505 #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?}}
3506     bar();
3507   }
3508 #pragma omp target parallel for ordered
3509   for (int i = 0; i < 10; ++i) {
3510 #pragma omp ordered // OK
3511     bar();
3512   }
3513 #pragma omp target parallel for
3514   for (int i = 0; i < 10; ++i) {
3515 #pragma omp atomic
3516     ++a;
3517   }
3518 #pragma omp target parallel for
3519   for (int i = 0; i < 10; ++i) {
3520 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
3521     ++a;
3522   }
3523 #pragma omp target parallel for
3524   for (int i = 0; i < 10; ++i) {
3525 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
3526     ++a;
3527   }
3528 #pragma omp target parallel for
3529   for (int i = 0; i < 10; ++i) {
3530 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
3531     for (int i = 0; i < 10; ++i)
3532       ;
3533   }
3534 #pragma omp target parallel for
3535   for (int i = 0; i < 10; ++i) {
3536 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3537     ++a;
3538   }
3539 #pragma omp target parallel for
3540   for (int i = 0; i < 10; ++i) {
3541 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3542     ++a;
3543   }
3544 #pragma omp target parallel for
3545   for (int i = 0; i < 10; ++i) {
3546 #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?}}
3547     ++a;
3548   }
3549 #pragma omp target parallel for
3550   for (int i = 0; i < 10; ++i) {
3551 #pragma omp taskloop
3552   for (int i = 0; i < 10; ++i)
3553     ++a;
3554   }
3555 #pragma omp target parallel for
3556   for (int i = 0; i < 10; ++i) {
3557 #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?}}
3558     for (int j = 0; j < 10; ++j)
3559       ;
3560   }
3561 #pragma omp target parallel for
3562   for (int i = 0; i < 10; ++i) {
3563 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3564   }
3565 #pragma omp target parallel for
3566   for (int i = 0; i < 10; ++i) {
3567 #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?}}
3568     for (int j = 0; j < 10; ++j)
3569       ;
3570   }
3571 #pragma omp target parallel for
3572   for (int i = 0; i < 10; ++i) {
3573 #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?}}
3574     for (int j = 0; j < 10; ++j)
3575       ;
3576   }
3577 #pragma omp target parallel for
3578   for (int i = 0; i < 10; ++i) {
3579 #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?}}
3580     for (int j = 0; j < 10; ++j)
3581       ;
3582   }
3583 
3584 // TEAMS DIRECTIVE
3585 #pragma omp target
3586 #pragma omp teams
3587 #pragma omp parallel
3588   bar();
3589 #pragma omp target
3590 #pragma omp teams
3591 #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?}}
3592   for (int i = 0; i < 10; ++i)
3593     ;
3594 #pragma omp target
3595 #pragma omp teams
3596 #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?}}
3597   for (int i = 0; i < 10; ++i)
3598     ;
3599 #pragma omp target
3600 #pragma omp teams
3601 #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?}}
3602   for (int i = 0; i < 10; ++i)
3603     ;
3604 #pragma omp target
3605 #pragma omp teams
3606 #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?}}
3607   {
3608     bar();
3609   }
3610 #pragma omp target
3611 #pragma omp teams
3612 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
3613   {
3614     bar();
3615   }
3616 #pragma omp target
3617 #pragma omp teams
3618 #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?}}
3619   bar();
3620 
3621 #pragma omp target
3622 #pragma omp teams
3623 #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?}}
3624   {
3625     bar();
3626   }
3627 #pragma omp target
3628 #pragma omp teams
3629 #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?}}
3630   {
3631     bar();
3632   }
3633 #pragma omp target
3634 #pragma omp teams
3635 #pragma omp parallel for
3636   for (int i = 0; i < 10; ++i)
3637     ;
3638 #pragma omp target
3639 #pragma omp teams
3640 #pragma omp parallel for simd
3641   for (int i = 0; i < 10; ++i)
3642     ;
3643 #pragma omp target
3644 #pragma omp teams
3645 #pragma omp parallel sections
3646   {
3647     bar();
3648   }
3649 #pragma omp target
3650 #pragma omp teams
3651 #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?}}
3652   {
3653     bar();
3654   }
3655 #pragma omp target
3656 #pragma omp teams
3657   {
3658 #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?}}
3659     bar();
3660   }
3661 #pragma omp target
3662 #pragma omp teams
3663   {
3664 #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?}}
3665     bar();
3666   }
3667 #pragma omp target
3668 #pragma omp teams
3669   {
3670 #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?}}
3671     bar();
3672   }
3673 #pragma omp target
3674 #pragma omp teams
3675   {
3676 #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?}}
3677     bar();
3678   }
3679 #pragma omp target
3680 #pragma omp teams
3681   {
3682 #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?}}
3683     bar();
3684   }
3685 #pragma omp target
3686 #pragma omp teams
3687   {
3688 #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?}}
3689     ++a;
3690   }
3691 #pragma omp target
3692 #pragma omp teams
3693   {
3694 #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}}
3695     ++a;
3696   }
3697 #pragma omp target
3698 #pragma omp teams
3699   {
3700 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
3701     ++a;
3702   }
3703 #pragma omp target
3704 #pragma omp teams
3705 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
3706   for (int i = 0; i < 10; ++i)
3707     ;
3708 #pragma omp target
3709 #pragma omp teams
3710   {
3711 #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
3712     ++a;
3713   }
3714 #pragma omp target
3715 #pragma omp teams
3716   {
3717 #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}}
3718     ++a;
3719   }
3720 #pragma omp target
3721 #pragma omp teams
3722   {
3723 #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?}}
3724     ++a;
3725   }
3726 #pragma omp target
3727 #pragma omp teams
3728   {
3729 #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?}}
3730   for (int i = 0; i < 10; ++i)
3731     ++a;
3732   }
3733 #pragma omp target
3734 #pragma omp teams
3735 #pragma omp distribute
3736   for (int i = 0; i < 10; ++i)
3737     ;
3738 #pragma omp target
3739 #pragma omp teams
3740 #pragma omp distribute
3741   for (int i = 0; i < 10; ++i)
3742     ;
3743 #pragma omp distribute
3744   for (int j = 0; j < 10; ++j)
3745     ;
3746 #pragma omp target
3747 #pragma omp teams
3748   {
3749 #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}}
3750   }
3751 #pragma omp target
3752 #pragma omp teams
3753   {
3754 #pragma omp distribute parallel for
3755   for (int i = 0; i < 10; ++i)
3756     ;
3757 #pragma omp distribute parallel for
3758   for (int j = 0; j < 10; ++j)
3759     ;
3760   }
3761 #pragma omp target
3762 #pragma omp teams
3763   {
3764 #pragma omp distribute parallel for simd
3765   for (int i = 0; i < 10; ++i)
3766     ;
3767 #pragma omp distribute parallel for simd
3768   for (int j = 0; j < 10; ++j)
3769     ;
3770   }
3771 #pragma omp target
3772 #pragma omp teams
3773   {
3774 #pragma omp distribute simd
3775   for (int i = 0; i < 10; ++i)
3776     ;
3777 #pragma omp distribute simd
3778   for (int j = 0; j < 10; ++j)
3779     ;
3780   }
3781 
3782 // TASKLOOP DIRECTIVE
3783 #pragma omp taskloop
3784   for (int i = 0; i < 10; ++i) {
3785 #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?}}
3786     for (int i = 0; i < 10; ++i)
3787       ;
3788   }
3789 #pragma omp taskloop
3790   for (int i = 0; i < 10; ++i) {
3791 #pragma omp simd
3792     for (int i = 0; i < 10; ++i)
3793       ;
3794   }
3795 #pragma omp taskloop
3796   for (int i = 0; i < 10; ++i) {
3797 #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?}}
3798     for (int i = 0; i < 10; ++i)
3799       ;
3800   }
3801 #pragma omp taskloop
3802   for (int i = 0; i < 10; ++i) {
3803 #pragma omp parallel
3804     for (int i = 0; i < 10; ++i)
3805       ;
3806   }
3807 #pragma omp taskloop
3808   for (int i = 0; i < 10; ++i) {
3809 #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?}}
3810     {
3811       bar();
3812     }
3813   }
3814 #pragma omp taskloop
3815   for (int i = 0; i < 10; ++i) {
3816 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
3817     {
3818       bar();
3819     }
3820   }
3821 #pragma omp taskloop
3822   for (int i = 0; i < 10; ++i) {
3823 #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?}}
3824     {
3825       bar();
3826     }
3827   }
3828 
3829 #pragma omp taskloop
3830   for (int i = 0; i < 10; ++i) {
3831 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
3832     {
3833       bar();
3834     }
3835   }
3836 #pragma omp taskloop
3837   for (int i = 0; i < 10; ++i) {
3838 #pragma omp critical
3839     {
3840       bar();
3841     }
3842   }
3843 #pragma omp taskloop
3844   for (int i = 0; i < 10; ++i) {
3845 #pragma omp parallel
3846     {
3847 #pragma omp single // OK
3848       {
3849         bar();
3850       }
3851 #pragma omp for // OK
3852       for (int i = 0; i < 10; ++i)
3853         ;
3854 #pragma omp sections // OK
3855       {
3856         bar();
3857       }
3858     }
3859   }
3860 #pragma omp taskloop
3861   for (int i = 0; i < 10; ++i) {
3862 #pragma omp parallel for
3863     for (int i = 0; i < 10; ++i)
3864       ;
3865   }
3866 #pragma omp taskloop
3867   for (int i = 0; i < 10; ++i) {
3868 #pragma omp parallel for simd
3869     for (int i = 0; i < 10; ++i)
3870       ;
3871   }
3872 #pragma omp taskloop
3873   for (int i = 0; i < 10; ++i) {
3874 #pragma omp parallel sections
3875     {
3876       bar();
3877     }
3878   }
3879 #pragma omp taskloop
3880   for (int i = 0; i < 10; ++i) {
3881 #pragma omp task
3882     {
3883       bar();
3884     }
3885   }
3886 #pragma omp taskloop
3887   for (int i = 0; i < 10; ++i) {
3888 #pragma omp taskyield
3889     bar();
3890   }
3891 #pragma omp taskloop
3892   for (int i = 0; i < 10; ++i) {
3893 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
3894     bar();
3895   }
3896 #pragma omp taskloop
3897   for (int i = 0; i < 10; ++i) {
3898 #pragma omp taskwait
3899     bar();
3900   }
3901 #pragma omp taskloop
3902   for (int i = 0; i < 10; ++i) {
3903 #pragma omp flush
3904     bar();
3905   }
3906 #pragma omp taskloop
3907   for (int i = 0; i < 10; ++i) {
3908 #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?}}
3909     bar();
3910   }
3911 #pragma omp taskloop
3912   for (int i = 0; i < 10; ++i) {
3913 #pragma omp atomic
3914     ++a;
3915   }
3916 #pragma omp taskloop
3917   for (int i = 0; i < 10; ++i) {
3918 #pragma omp target
3919     ++a;
3920   }
3921 #pragma omp taskloop
3922   for (int i = 0; i < 10; ++i) {
3923 #pragma omp target parallel
3924     ++a;
3925   }
3926 #pragma omp taskloop
3927   for (int i = 0; i < 10; ++i) {
3928 #pragma omp target parallel for
3929     for (int i = 0; i < 10; ++i)
3930       ;
3931   }
3932 #pragma omp taskloop
3933   for (int i = 0; i < 10; ++i) {
3934 #pragma omp target enter data map(to: a)
3935     ++a;
3936   }
3937 #pragma omp taskloop
3938   for (int i = 0; i < 10; ++i) {
3939 #pragma omp target exit data map(from: a)
3940     ++a;
3941   }
3942 #pragma omp taskloop
3943   for (int i = 0; i < 10; ++i) {
3944 #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?}}
3945     ++a;
3946   }
3947 #pragma omp taskloop
3948   for (int i = 0; i < 10; ++i) {
3949 #pragma omp taskloop
3950   for (int i = 0; i < 10; ++i)
3951     ++a;
3952   }
3953 #pragma omp taskloop
3954   for (int i = 0; i < 10; ++i) {
3955 #pragma omp target update to(a)
3956     bar();
3957   }
3958 #pragma omp taskloop
3959   for (int i = 0; i < 10; ++i) {
3960 #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?}}
3961   for (int j = 0; j < 10; ++j)
3962     ++a;
3963   }
3964 #pragma omp taskloop
3965   for (int i = 0; i < 10; ++i) {
3966 #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?}}
3967   for (int j = 0; j < 10; ++j)
3968     ++a;
3969   }
3970 #pragma omp taskloop
3971   for (int i = 0; i < 10; ++i) {
3972 #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?}}
3973   for (int j = 0; j < 10; ++j)
3974     ++a;
3975   }
3976 #pragma omp taskloop
3977   for (int i = 0; i < 10; ++i) {
3978 #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?}}
3979   for (int j = 0; j < 10; ++j)
3980     ++a;
3981   }
3982 
3983 // DISTRIBUTE DIRECTIVE
3984 #pragma omp target
3985 #pragma omp teams
3986 #pragma omp distribute
3987   for (int i = 0; i < 10; ++i) {
3988 #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?}}
3989     for (int i = 0; i < 10; ++i)
3990       ;
3991   }
3992 #pragma omp target
3993 #pragma omp teams
3994 #pragma omp distribute
3995   for (int i = 0; i < 10; ++i) {
3996 #pragma omp for
3997     for (int i = 0; i < 10; ++i)
3998       ;
3999   }
4000 #pragma omp target
4001 #pragma omp teams
4002 #pragma omp distribute
4003   for (int i = 0; i < 10; ++i) {
4004 #pragma omp simd
4005     for (int i = 0; i < 10; ++i)
4006       ;
4007   }
4008 #pragma omp target
4009 #pragma omp teams
4010 #pragma omp distribute
4011   for (int i = 0; i < 10; ++i) {
4012 #pragma omp for simd
4013     for (int i = 0; i < 10; ++i)
4014       ;
4015   }
4016 #pragma omp target
4017 #pragma omp teams
4018 #pragma omp distribute
4019   for (int i = 0; i < 10; ++i) {
4020 #pragma omp parallel
4021     for (int i = 0; i < 10; ++i)
4022       ;
4023   }
4024 #pragma omp target
4025 #pragma omp teams
4026 #pragma omp distribute
4027   for (int i = 0; i < 10; ++i) {
4028 #pragma omp sections
4029     {
4030       bar();
4031     }
4032   }
4033 #pragma omp target
4034 #pragma omp teams
4035 #pragma omp distribute
4036   for (int i = 0; i < 10; ++i) {
4037 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
4038     {
4039       bar();
4040     }
4041   }
4042 #pragma omp target
4043 #pragma omp teams
4044 #pragma omp distribute
4045   for (int i = 0; i < 10; ++i) {
4046 #pragma omp single
4047     {
4048       bar();
4049     }
4050   }
4051 #pragma omp target
4052 #pragma omp teams
4053 #pragma omp distribute
4054   for (int i = 0; i < 10; ++i) {
4055 #pragma omp master
4056     {
4057       bar();
4058     }
4059   }
4060 #pragma omp target
4061 #pragma omp teams
4062 #pragma omp distribute
4063   for (int i = 0; i < 10; ++i) {
4064 #pragma omp critical
4065     {
4066       bar();
4067     }
4068   }
4069 #pragma omp target
4070 #pragma omp teams
4071 #pragma omp distribute
4072   for (int i = 0; i < 10; ++i) {
4073 #pragma omp parallel
4074     {
4075 #pragma omp single
4076       {
4077 	bar();
4078       }
4079     }
4080   }
4081 #pragma omp target
4082 #pragma omp teams
4083 #pragma omp distribute
4084   for (int i = 0; i < 10; ++i) {
4085 #pragma omp parallel for
4086     for (int i = 0; i < 10; ++i)
4087       ;
4088   }
4089 #pragma omp target
4090 #pragma omp teams
4091 #pragma omp distribute
4092   for (int i = 0; i < 10; ++i) {
4093 #pragma omp parallel for simd
4094     for (int i = 0; i < 10; ++i)
4095       ;
4096   }
4097 #pragma omp target
4098 #pragma omp teams
4099 #pragma omp distribute
4100   for (int i = 0; i < 10; ++i) {
4101 #pragma omp parallel sections
4102     {
4103       bar();
4104     }
4105   }
4106 #pragma omp target
4107 #pragma omp teams
4108 #pragma omp distribute
4109   for (int i = 0; i < 10; ++i) {
4110 #pragma omp task
4111     {
4112       bar();
4113     }
4114   }
4115 #pragma omp target
4116 #pragma omp teams
4117 #pragma omp distribute
4118   for (int i = 0; i < 10; ++i) {
4119 #pragma omp taskyield
4120     bar();
4121   }
4122 #pragma omp target
4123 #pragma omp teams
4124 #pragma omp distribute
4125   for (int i = 0; i < 10; ++i) {
4126 #pragma omp barrier
4127     bar();
4128   }
4129 #pragma omp target
4130 #pragma omp teams
4131 #pragma omp distribute
4132   for (int i = 0; i < 10; ++i) {
4133 #pragma omp taskwait
4134     bar();
4135   }
4136 #pragma omp target
4137 #pragma omp teams
4138 #pragma omp distribute
4139   for (int i = 0; i < 10; ++i) {
4140 #pragma omp flush
4141     bar();
4142   }
4143 #pragma omp target
4144 #pragma omp teams
4145 #pragma omp distribute
4146   for (int i = 0; i < 10; ++i) {
4147 #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?}}
4148     bar();
4149   }
4150 #pragma omp target
4151 #pragma omp teams
4152 #pragma omp distribute
4153   for (int i = 0; i < 10; ++i) {
4154 #pragma omp atomic
4155     ++a;
4156   }
4157 #pragma omp target
4158 #pragma omp teams
4159 #pragma omp distribute
4160   for (int i = 0; i < 10; ++i) {
4161 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4162     ++a;
4163   }
4164 #pragma omp target
4165 #pragma omp teams
4166 #pragma omp distribute
4167   for (int i = 0; i < 10; ++i) {
4168 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4169     ++a;
4170   }
4171 #pragma omp target
4172 #pragma omp teams
4173 #pragma omp distribute
4174   for (int i = 0; i < 10; ++i) {
4175 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4176     for (int i = 0; i < 10; ++i)
4177       ;
4178   }
4179 #pragma omp target
4180 #pragma omp teams
4181 #pragma omp distribute
4182   for (int i = 0; i < 10; ++i) {
4183 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4184     ++a;
4185   }
4186 #pragma omp target
4187 #pragma omp teams
4188 #pragma omp distribute
4189   for (int i = 0; i < 10; ++i) {
4190 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4191     ++a;
4192   }
4193 #pragma omp target
4194 #pragma omp teams
4195 #pragma omp distribute
4196   for (int i = 0; i < 10; ++i) {
4197 #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?}}
4198     ++a;
4199   }
4200 #pragma omp target
4201 #pragma omp teams
4202 #pragma omp distribute
4203   for (int i = 0; i < 10; ++i) {
4204 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4205     ++a;
4206   }
4207 
4208 // DISTRIBUTE PARALLEL FOR DIRECTIVE
4209 #pragma omp target
4210 #pragma omp teams
4211 #pragma omp distribute parallel for
4212   for (int i = 0; i < 10; ++i) {
4213 #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?}}
4214     for (int i = 0; i < 10; ++i)
4215       ;
4216   }
4217 #pragma omp target
4218 #pragma omp teams
4219 #pragma omp distribute parallel for
4220   for (int i = 0; i < 10; ++i) {
4221 #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?}}
4222     for (int i = 0; i < 10; ++i)
4223       ;
4224   }
4225 #pragma omp target
4226 #pragma omp teams
4227 #pragma omp distribute parallel for
4228   for (int i = 0; i < 10; ++i) {
4229 #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?}}
4230     for (int i = 0; i < 10; ++i)
4231       ;
4232   }
4233 #pragma omp target
4234 #pragma omp teams
4235 #pragma omp distribute parallel for
4236   for (int i = 0; i < 10; ++i) {
4237 #pragma omp simd
4238     for (int i = 0; i < 10; ++i)
4239       ;
4240   }
4241 #pragma omp target
4242 #pragma omp teams
4243 #pragma omp distribute parallel for
4244   for (int i = 0; i < 10; ++i) {
4245 #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?}}
4246     for (int i = 0; i < 10; ++i)
4247       ;
4248   }
4249 #pragma omp target
4250 #pragma omp teams
4251 #pragma omp distribute parallel for
4252   for (int i = 0; i < 10; ++i) {
4253 #pragma omp parallel
4254     for (int i = 0; i < 10; ++i)
4255       ;
4256   }
4257 #pragma omp target
4258 #pragma omp teams
4259 #pragma omp distribute parallel for
4260   for (int i = 0; i < 10; ++i) {
4261 #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?}}
4262     {
4263       bar();
4264     }
4265   }
4266 #pragma omp target
4267 #pragma omp teams
4268 #pragma omp distribute parallel for
4269   for (int i = 0; i < 10; ++i) {
4270 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
4271     {
4272       bar();
4273     }
4274   }
4275 #pragma omp target
4276 #pragma omp teams
4277 #pragma omp distribute parallel for
4278   for (int i = 0; i < 10; ++i) {
4279 #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?}}
4280     {
4281       bar();
4282     }
4283   }
4284 #pragma omp target
4285 #pragma omp teams
4286 #pragma omp distribute parallel for
4287   for (int i = 0; i < 10; ++i) {
4288 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
4289     {
4290       bar();
4291     }
4292   }
4293 #pragma omp target
4294 #pragma omp teams
4295 #pragma omp distribute parallel for
4296   for (int i = 0; i < 10; ++i) {
4297 #pragma omp critical
4298     {
4299       bar();
4300     }
4301   }
4302 #pragma omp target
4303 #pragma omp teams
4304 #pragma omp distribute parallel for
4305   for (int i = 0; i < 10; ++i) {
4306 #pragma omp parallel
4307     {
4308 #pragma omp single
4309       {
4310 	bar();
4311       }
4312     }
4313   }
4314 #pragma omp target
4315 #pragma omp teams
4316 #pragma omp distribute parallel for
4317   for (int i = 0; i < 10; ++i) {
4318 #pragma omp parallel for
4319     for (int i = 0; i < 10; ++i)
4320       ;
4321   }
4322 #pragma omp target
4323 #pragma omp teams
4324 #pragma omp distribute parallel for
4325   for (int i = 0; i < 10; ++i) {
4326 #pragma omp parallel for simd
4327     for (int i = 0; i < 10; ++i)
4328       ;
4329   }
4330 #pragma omp target
4331 #pragma omp teams
4332 #pragma omp distribute parallel for
4333   for (int i = 0; i < 10; ++i) {
4334 #pragma omp parallel sections
4335     {
4336       bar();
4337     }
4338   }
4339 #pragma omp target
4340 #pragma omp teams
4341 #pragma omp distribute parallel for
4342   for (int i = 0; i < 10; ++i) {
4343 #pragma omp task
4344     {
4345       bar();
4346     }
4347   }
4348 #pragma omp target
4349 #pragma omp teams
4350 #pragma omp distribute parallel for
4351   for (int i = 0; i < 10; ++i) {
4352 #pragma omp taskyield
4353     bar();
4354   }
4355 #pragma omp target
4356 #pragma omp teams
4357 #pragma omp distribute parallel for
4358   for (int i = 0; i < 10; ++i) {
4359 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
4360     bar();
4361   }
4362 #pragma omp target
4363 #pragma omp teams
4364 #pragma omp distribute parallel for
4365   for (int i = 0; i < 10; ++i) {
4366 #pragma omp taskwait
4367     bar();
4368   }
4369 #pragma omp target
4370 #pragma omp teams
4371 #pragma omp distribute parallel for
4372   for (int i = 0; i < 10; ++i) {
4373 #pragma omp flush
4374     bar();
4375   }
4376 #pragma omp target
4377 #pragma omp teams
4378 #pragma omp distribute parallel for
4379   for (int i = 0; i < 10; ++i) {
4380 #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?}}
4381     bar();
4382   }
4383 #pragma omp target
4384 #pragma omp teams
4385 #pragma omp distribute parallel for
4386   for (int i = 0; i < 10; ++i) {
4387 #pragma omp atomic
4388     ++a;
4389   }
4390 #pragma omp target
4391 #pragma omp teams
4392 #pragma omp distribute parallel for
4393   for (int i = 0; i < 10; ++i) {
4394 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4395     ++a;
4396   }
4397 #pragma omp target
4398 #pragma omp teams
4399 #pragma omp distribute parallel for
4400   for (int i = 0; i < 10; ++i) {
4401 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4402     ++a;
4403   }
4404 #pragma omp target
4405 #pragma omp teams
4406 #pragma omp distribute parallel for
4407   for (int i = 0; i < 10; ++i) {
4408 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4409     for (int i = 0; i < 10; ++i)
4410       ;
4411   }
4412 #pragma omp target
4413 #pragma omp teams
4414 #pragma omp distribute parallel for
4415   for (int i = 0; i < 10; ++i) {
4416 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4417     ++a;
4418   }
4419 #pragma omp target
4420 #pragma omp teams
4421 #pragma omp distribute parallel for
4422   for (int i = 0; i < 10; ++i) {
4423 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4424     ++a;
4425   }
4426 #pragma omp target
4427 #pragma omp teams
4428 #pragma omp distribute parallel for
4429   for (int i = 0; i < 10; ++i) {
4430 #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?}}
4431     ++a;
4432   }
4433 #pragma omp target
4434 #pragma omp teams
4435 #pragma omp distribute parallel for
4436   for (int i = 0; i < 10; ++i) {
4437 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4438     ++a;
4439   }
4440 #pragma omp target
4441 #pragma omp teams
4442 #pragma omp distribute parallel for
4443   for (int i = 0; i < 10; ++i) {
4444 #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?}}
4445     for (int i = 0; i < 10; ++i)
4446       ;
4447   }
4448 
4449 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
4450 #pragma omp target
4451 #pragma omp teams
4452 #pragma omp distribute parallel for simd
4453   for (int i = 0; i < 10; ++i) {
4454 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4455     for (int i = 0; i < 10; ++i)
4456       ;
4457   }
4458 #pragma omp target
4459 #pragma omp teams
4460 #pragma omp distribute parallel for simd
4461   for (int i = 0; i < 10; ++i) {
4462 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4463     for (int i = 0; i < 10; ++i)
4464       ;
4465   }
4466 #pragma omp target
4467 #pragma omp teams
4468 #pragma omp distribute parallel for simd
4469   for (int i = 0; i < 10; ++i) {
4470 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4471     for (int i = 0; i < 10; ++i)
4472       ;
4473   }
4474 #pragma omp target
4475 #pragma omp teams
4476 #pragma omp distribute parallel for simd
4477   for (int i = 0; i < 10; ++i) {
4478 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
4479     for (int i = 0; i < 10; ++i)
4480       ;
4481   }
4482 #pragma omp target
4483 #pragma omp teams
4484 #pragma omp distribute parallel for simd
4485   for (int i = 0; i < 10; ++i) {
4486 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4487     for (int i = 0; i < 10; ++i)
4488       ;
4489   }
4490 #pragma omp target
4491 #pragma omp teams
4492 #pragma omp distribute parallel for simd
4493   for (int i = 0; i < 10; ++i) {
4494 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4495     for (int i = 0; i < 10; ++i)
4496       ;
4497   }
4498 #pragma omp target
4499 #pragma omp teams
4500 #pragma omp distribute parallel for simd
4501   for (int i = 0; i < 10; ++i) {
4502 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4503     {
4504       bar();
4505     }
4506   }
4507 #pragma omp target
4508 #pragma omp teams
4509 #pragma omp distribute parallel for simd
4510   for (int i = 0; i < 10; ++i) {
4511 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4512     {
4513       bar();
4514     }
4515   }
4516 #pragma omp target
4517 #pragma omp teams
4518 #pragma omp distribute parallel for simd
4519   for (int i = 0; i < 10; ++i) {
4520 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4521     {
4522       bar();
4523     }
4524   }
4525 #pragma omp target
4526 #pragma omp teams
4527 #pragma omp distribute parallel for simd
4528   for (int i = 0; i < 10; ++i) {
4529 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4530     {
4531       bar();
4532     }
4533   }
4534 #pragma omp target
4535 #pragma omp teams
4536 #pragma omp distribute parallel for simd
4537   for (int i = 0; i < 10; ++i) {
4538 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4539     {
4540       bar();
4541     }
4542   }
4543 #pragma omp target
4544 #pragma omp teams
4545 #pragma omp distribute parallel for simd
4546   for (int i = 0; i < 10; ++i) {
4547 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4548     {
4549 #pragma omp single
4550       {
4551 	bar();
4552       }
4553     }
4554   }
4555 #pragma omp target
4556 #pragma omp teams
4557 #pragma omp distribute parallel for simd
4558   for (int i = 0; i < 10; ++i) {
4559 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4560     for (int i = 0; i < 10; ++i)
4561       ;
4562   }
4563 #pragma omp target
4564 #pragma omp teams
4565 #pragma omp distribute parallel for simd
4566   for (int i = 0; i < 10; ++i) {
4567 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4568     for (int i = 0; i < 10; ++i)
4569       ;
4570   }
4571 #pragma omp target
4572 #pragma omp teams
4573 #pragma omp distribute parallel for simd
4574   for (int i = 0; i < 10; ++i) {
4575 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4576     {
4577       bar();
4578     }
4579   }
4580 #pragma omp target
4581 #pragma omp teams
4582 #pragma omp distribute parallel for simd
4583   for (int i = 0; i < 10; ++i) {
4584 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4585     {
4586       bar();
4587     }
4588   }
4589 #pragma omp target
4590 #pragma omp teams
4591 #pragma omp distribute parallel for simd
4592   for (int i = 0; i < 10; ++i) {
4593 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4594     bar();
4595   }
4596 #pragma omp target
4597 #pragma omp teams
4598 #pragma omp distribute parallel for simd
4599   for (int i = 0; i < 10; ++i) {
4600 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4601     bar();
4602   }
4603 #pragma omp target
4604 #pragma omp teams
4605 #pragma omp distribute parallel for simd
4606   for (int i = 0; i < 10; ++i) {
4607 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4608     bar();
4609   }
4610 #pragma omp target
4611 #pragma omp teams
4612 #pragma omp distribute parallel for simd
4613   for (int i = 0; i < 10; ++i) {
4614 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4615     bar();
4616   }
4617 #pragma omp target
4618 #pragma omp teams
4619 #pragma omp distribute parallel for simd
4620   for (int i = 0; i < 10; ++i) {
4621 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4622     bar();
4623   }
4624 #pragma omp target
4625 #pragma omp teams
4626 #pragma omp distribute parallel for simd
4627   for (int i = 0; i < 10; ++i) {
4628 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4629     ++a;
4630   }
4631 #pragma omp target
4632 #pragma omp teams
4633 #pragma omp distribute parallel for simd
4634   for (int i = 0; i < 10; ++i) {
4635 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4636     ++a;
4637   }
4638 #pragma omp target
4639 #pragma omp teams
4640 #pragma omp distribute parallel for simd
4641   for (int i = 0; i < 10; ++i) {
4642 #pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4643     ++a;
4644   }
4645 #pragma omp target
4646 #pragma omp teams
4647 #pragma omp distribute parallel for simd
4648   for (int i = 0; i < 10; ++i) {
4649 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4650     for (int i = 0; i < 10; ++i)
4651       ;
4652   }
4653 #pragma omp target
4654 #pragma omp teams
4655 #pragma omp distribute parallel for simd
4656   for (int i = 0; i < 10; ++i) {
4657 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4658     ++a;
4659   }
4660 #pragma omp target
4661 #pragma omp teams
4662 #pragma omp distribute parallel for simd
4663   for (int i = 0; i < 10; ++i) {
4664 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4665     ++a;
4666   }
4667 #pragma omp target
4668 #pragma omp teams
4669 #pragma omp distribute parallel for simd
4670   for (int i = 0; i < 10; ++i) {
4671 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4672     ++a;
4673   }
4674 #pragma omp target
4675 #pragma omp teams
4676 #pragma omp distribute parallel for simd
4677   for (int i = 0; i < 10; ++i) {
4678 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4679     ++a;
4680   }
4681 #pragma omp target
4682 #pragma omp teams
4683 #pragma omp distribute parallel for simd
4684   for (int i = 0; i < 10; ++i) {
4685 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4686     for (int i = 0; i < 10; ++i)
4687       ++a;
4688   }
4689 }
4690 
foo()4691 void foo() {
4692   int a = 0;
4693 // PARALLEL DIRECTIVE
4694 #pragma omp parallel
4695 #pragma omp for
4696   for (int i = 0; i < 10; ++i)
4697     ;
4698 #pragma omp parallel
4699 #pragma omp simd
4700   for (int i = 0; i < 10; ++i)
4701     ;
4702 #pragma omp parallel
4703 #pragma omp for simd
4704   for (int i = 0; i < 10; ++i)
4705     ;
4706 #pragma omp parallel
4707 #pragma omp sections
4708   {
4709     bar();
4710   }
4711 #pragma omp parallel
4712 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
4713   {
4714     bar();
4715   }
4716 #pragma omp parallel
4717 #pragma omp sections
4718   {
4719     bar();
4720   }
4721 #pragma omp parallel
4722 #pragma omp single
4723   bar();
4724 #pragma omp parallel
4725 #pragma omp master
4726   bar();
4727 #pragma omp parallel
4728 #pragma omp critical
4729   bar();
4730 #pragma omp parallel
4731 #pragma omp parallel for
4732   for (int i = 0; i < 10; ++i)
4733     ;
4734 #pragma omp parallel
4735 #pragma omp parallel for simd
4736   for (int i = 0; i < 10; ++i)
4737     ;
4738 #pragma omp parallel
4739 #pragma omp parallel sections
4740   {
4741     bar();
4742   }
4743 #pragma omp parallel
4744 #pragma omp task
4745   {
4746     bar();
4747   }
4748 #pragma omp parallel
4749   {
4750 #pragma omp taskyield
4751     bar();
4752   }
4753 #pragma omp parallel
4754   {
4755 #pragma omp barrier
4756     bar();
4757   }
4758 #pragma omp parallel
4759   {
4760 #pragma omp taskwait
4761     bar();
4762   }
4763 #pragma omp parallel
4764   {
4765 #pragma omp flush
4766     bar();
4767   }
4768 #pragma omp parallel
4769   {
4770 #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?}}
4771     bar();
4772   }
4773 #pragma omp parallel
4774   {
4775 #pragma omp atomic
4776     ++a;
4777   }
4778 #pragma omp parallel
4779   {
4780 #pragma omp target
4781     ++a;
4782   }
4783 #pragma omp parallel
4784   {
4785 #pragma omp target parallel
4786     ++a;
4787   }
4788 #pragma omp parallel
4789 #pragma omp target parallel for
4790   for (int i = 0; i < 10; ++i)
4791     ;
4792 #pragma omp parallel
4793   {
4794 #pragma omp target enter data map(to: a)
4795     ++a;
4796   }
4797 #pragma omp parallel
4798   {
4799 #pragma omp target exit data map(from: a)
4800     ++a;
4801   }
4802 #pragma omp parallel
4803   {
4804 #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?}}
4805     ++a;
4806   }
4807 #pragma omp parallel
4808   {
4809 #pragma omp taskloop
4810   for (int i = 0; i < 10; ++i)
4811     ++a;
4812   }
4813 #pragma omp parallel
4814   {
4815 #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?}}
4816     for (int i = 0; i < 10; ++i)
4817       ;
4818   }
4819 #pragma omp parallel
4820   {
4821 #pragma omp target update to(a)
4822     a++;
4823   }
4824 #pragma omp parallel
4825   {
4826 #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?}}
4827     for (int i = 0; i < 10; ++i)
4828       ;
4829   }
4830 #pragma omp parallel
4831   {
4832 #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?}}
4833     for (int i = 0; i < 10; ++i)
4834       ;
4835   }
4836 #pragma omp parallel
4837   {
4838 #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?}}
4839     for (int i = 0; i < 10; ++i)
4840       ;
4841   }
4842 
4843 // SIMD DIRECTIVE
4844 #pragma omp simd
4845   for (int i = 0; i < 10; ++i) {
4846 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4847     for (int i = 0; i < 10; ++i)
4848       ;
4849   }
4850 #pragma omp simd
4851   for (int i = 0; i < 10; ++i) {
4852 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
4853     for (int i = 0; i < 10; ++i)
4854       ;
4855   }
4856 #pragma omp simd
4857   for (int i = 0; i < 10; ++i) {
4858 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4859     for (int i = 0; i < 10; ++i)
4860       ;
4861   }
4862 #pragma omp simd
4863   for (int i = 0; i < 10; ++i) {
4864 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4865     for (int i = 0; i < 10; ++i)
4866       ;
4867   }
4868 #pragma omp simd
4869   for (int i = 0; i < 10; ++i) {
4870 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4871     {
4872       bar();
4873     }
4874   }
4875 #pragma omp simd
4876   for (int i = 0; i < 10; ++i) {
4877 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4878     {
4879       bar();
4880     }
4881   }
4882 #pragma omp simd
4883   for (int i = 0; i < 10; ++i) {
4884 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4885     bar();
4886 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4887     bar();
4888   }
4889 #pragma omp simd
4890   for (int i = 0; i < 10; ++i) {
4891 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4892     bar();
4893 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4894     bar();
4895   }
4896 #pragma omp simd
4897   for (int i = 0; i < 10; ++i) {
4898 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4899     for (int i = 0; i < 10; ++i)
4900       ;
4901   }
4902 #pragma omp simd
4903   for (int i = 0; i < 10; ++i) {
4904 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4905     for (int i = 0; i < 10; ++i)
4906       ;
4907   }
4908 #pragma omp simd
4909   for (int i = 0; i < 10; ++i) {
4910 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4911     {
4912       bar();
4913     }
4914   }
4915 #pragma omp simd
4916   for (int i = 0; i < 10; ++i) {
4917 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4918     {
4919       bar();
4920     }
4921   }
4922 #pragma omp simd
4923   for (int i = 0; i < 10; ++i) {
4924 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4925     bar();
4926   }
4927 #pragma omp simd
4928   for (int i = 0; i < 10; ++i) {
4929 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4930     bar();
4931   }
4932 #pragma omp simd
4933   for (int i = 0; i < 10; ++i) {
4934 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4935     bar();
4936   }
4937 #pragma omp simd
4938   for (int i = 0; i < 10; ++i) {
4939 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4940     bar();
4941   }
4942 #pragma omp simd
4943   for (int i = 0; i < 10; ++i) {
4944 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4945     bar();
4946   }
4947 #pragma omp simd
4948   for (int i = 0; i < 10; ++i) {
4949 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4950     ++a;
4951   }
4952 #pragma omp simd
4953   for (int i = 0; i < 10; ++i) {
4954 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4955     ++a;
4956   }
4957 #pragma omp simd
4958   for (int i = 0; i < 10; ++i) {
4959 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4960     ++a;
4961   }
4962 #pragma omp simd
4963   for (int i = 0; i < 10; ++i) {
4964 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4965     for (int i = 0; i < 10; ++i)
4966       ;
4967   }
4968 #pragma omp simd
4969   for (int i = 0; i < 10; ++i) {
4970 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4971     ++a;
4972   }
4973 #pragma omp simd
4974   for (int i = 0; i < 10; ++i) {
4975 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4976     ++a;
4977   }
4978 #pragma omp simd
4979   for (int i = 0; i < 10; ++i) {
4980 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4981     ++a;
4982   }
4983 #pragma omp simd
4984   for (int i = 0; i < 10; ++i) {
4985 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4986   for (int i = 0; i < 10; ++i)
4987     ++a;
4988   }
4989 #pragma omp simd
4990   for (int i = 0; i < 10; ++i) {
4991 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4992     for (int j = 0; j < 10; ++j)
4993       ;
4994   }
4995 #pragma omp simd
4996   for (int i = 0; i < 10; ++i) {
4997 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4998     a++;
4999   }
5000 #pragma omp simd
5001   for (int i = 0; i < 10; ++i) {
5002 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5003     for (int j = 0; j < 10; ++j)
5004       ;
5005   }
5006 #pragma omp simd
5007   for (int i = 0; i < 10; ++i) {
5008 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5009     for (int j = 0; j < 10; ++j)
5010       ;
5011   }
5012 #pragma omp simd
5013   for (int i = 0; i < 10; ++i) {
5014 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5015     for (int j = 0; j < 10; ++j)
5016       ;
5017   }
5018 
5019 // FOR DIRECTIVE
5020 #pragma omp for
5021   for (int i = 0; i < 10; ++i) {
5022 #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?}}
5023     for (int i = 0; i < 10; ++i)
5024       ;
5025   }
5026 #pragma omp for
5027   for (int i = 0; i < 10; ++i) {
5028 #pragma omp simd
5029     for (int i = 0; i < 10; ++i)
5030       ;
5031   }
5032 #pragma omp for
5033   for (int i = 0; i < 10; ++i) {
5034 #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?}}
5035     for (int i = 0; i < 10; ++i)
5036       ;
5037   }
5038 #pragma omp for
5039   for (int i = 0; i < 10; ++i) {
5040 #pragma omp parallel
5041     for (int i = 0; i < 10; ++i)
5042       ;
5043   }
5044 #pragma omp for
5045   for (int i = 0; i < 10; ++i) {
5046 #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?}}
5047     {
5048       bar();
5049     }
5050   }
5051 #pragma omp for
5052   for (int i = 0; i < 10; ++i) {
5053 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
5054     {
5055       bar();
5056     }
5057   }
5058 #pragma omp for
5059   for (int i = 0; i < 10; ++i) {
5060 #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?}}
5061     bar();
5062 #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
5063     bar();
5064 #pragma omp critical
5065     bar();
5066   }
5067 #pragma omp for
5068   for (int i = 0; i < 10; ++i) {
5069 #pragma omp parallel
5070     {
5071 #pragma omp single // OK
5072       {
5073         bar();
5074       }
5075 #pragma omp for // OK
5076       for (int i = 0; i < 10; ++i)
5077         ;
5078 #pragma omp for simd // OK
5079       for (int i = 0; i < 10; ++i)
5080         ;
5081 #pragma omp sections // OK
5082       {
5083         bar();
5084       }
5085     }
5086   }
5087 #pragma omp for
5088   for (int i = 0; i < 10; ++i) {
5089 #pragma omp parallel for
5090     for (int i = 0; i < 10; ++i)
5091       ;
5092   }
5093 #pragma omp for
5094   for (int i = 0; i < 10; ++i) {
5095 #pragma omp parallel for simd
5096     for (int i = 0; i < 10; ++i)
5097       ;
5098   }
5099 #pragma omp for
5100   for (int i = 0; i < 10; ++i) {
5101 #pragma omp parallel sections
5102     {
5103       bar();
5104     }
5105   }
5106 #pragma omp for
5107   for (int i = 0; i < 10; ++i) {
5108 #pragma omp task
5109     {
5110       bar();
5111     }
5112   }
5113 #pragma omp for
5114   for (int i = 0; i < 10; ++i) {
5115 #pragma omp taskyield
5116     bar();
5117   }
5118 #pragma omp for
5119   for (int i = 0; i < 10; ++i) {
5120 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
5121     bar();
5122   }
5123 #pragma omp for
5124   for (int i = 0; i < 10; ++i) {
5125 #pragma omp taskwait
5126     bar();
5127   }
5128 #pragma omp for
5129   for (int i = 0; i < 10; ++i) {
5130 #pragma omp flush
5131     bar();
5132   }
5133 #pragma omp for
5134   for (int i = 0; i < 10; ++i) {
5135 #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?}}
5136     bar();
5137   }
5138 #pragma omp for ordered
5139   for (int i = 0; i < 10; ++i) {
5140 #pragma omp ordered // OK
5141     bar();
5142   }
5143 #pragma omp for
5144   for (int i = 0; i < 10; ++i) {
5145 #pragma omp atomic
5146     ++a;
5147   }
5148 #pragma omp for
5149   for (int i = 0; i < 10; ++i) {
5150 #pragma omp target
5151     ++a;
5152   }
5153 #pragma omp for
5154   for (int i = 0; i < 10; ++i) {
5155 #pragma omp target parallel
5156     ++a;
5157   }
5158 #pragma omp for
5159   for (int i = 0; i < 10; ++i) {
5160 #pragma omp target parallel for
5161     for (int i = 0; i < 10; ++i)
5162       ;
5163   }
5164 #pragma omp for
5165   for (int i = 0; i < 10; ++i) {
5166 #pragma omp target enter data map(to: a)
5167     ++a;
5168   }
5169 #pragma omp for
5170   for (int i = 0; i < 10; ++i) {
5171 #pragma omp target exit data map(from: a)
5172     ++a;
5173   }
5174 #pragma omp for
5175   for (int i = 0; i < 10; ++i) {
5176 #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?}}
5177     ++a;
5178   }
5179 #pragma omp for
5180   for (int i = 0; i < 10; ++i) {
5181 #pragma omp taskloop
5182   for (int i = 0; i < 10; ++i)
5183     ++a;
5184   }
5185 #pragma omp for
5186   for (int i = 0; i < 10; ++i) {
5187 #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?}}
5188     for (int j = 0; j < 10; ++j)
5189       ;
5190   }
5191 #pragma omp for
5192   for (int i = 0; i < 10; ++i) {
5193 #pragma omp target update to(a)
5194     ++a;
5195   }
5196 #pragma omp for
5197   for (int i = 0; i < 10; ++i) {
5198 #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?}}
5199     for (int j = 0; j < 10; ++j)
5200       ;
5201   }
5202 #pragma omp for
5203   for (int i = 0; i < 10; ++i) {
5204 #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?}}
5205     for (int j = 0; j < 10; ++j)
5206       ;
5207   }
5208 #pragma omp for
5209   for (int i = 0; i < 10; ++i) {
5210 #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?}}
5211     for (int j = 0; j < 10; ++j)
5212       ;
5213   }
5214 
5215 // FOR SIMD DIRECTIVE
5216 #pragma omp for simd
5217   for (int i = 0; i < 10; ++i) {
5218 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5219     for (int i = 0; i < 10; ++i)
5220       ;
5221   }
5222 #pragma omp for simd
5223   for (int i = 0; i < 10; ++i) {
5224 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5225     for (int i = 0; i < 10; ++i)
5226       ;
5227   }
5228 #pragma omp for simd
5229   for (int i = 0; i < 10; ++i) {
5230 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5231     for (int i = 0; i < 10; ++i)
5232       ;
5233   }
5234 #pragma omp for simd
5235   for (int i = 0; i < 10; ++i) {
5236 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5237     for (int i = 0; i < 10; ++i)
5238       ;
5239   }
5240 #pragma omp for simd
5241   for (int i = 0; i < 10; ++i) {
5242 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5243     {
5244       bar();
5245     }
5246   }
5247 #pragma omp for simd
5248   for (int i = 0; i < 10; ++i) {
5249 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5250     {
5251       bar();
5252     }
5253   }
5254 #pragma omp for simd
5255   for (int i = 0; i < 10; ++i) {
5256 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5257     bar();
5258 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5259     bar();
5260   }
5261 #pragma omp for simd
5262   for (int i = 0; i < 10; ++i) {
5263 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5264     bar();
5265 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5266     bar();
5267   }
5268 #pragma omp for simd
5269   for (int i = 0; i < 10; ++i) {
5270 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5271     for (int i = 0; i < 10; ++i)
5272       ;
5273   }
5274 #pragma omp for simd
5275   for (int i = 0; i < 10; ++i) {
5276 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5277     for (int i = 0; i < 10; ++i)
5278       ;
5279   }
5280 #pragma omp for simd
5281   for (int i = 0; i < 10; ++i) {
5282 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5283     {
5284       bar();
5285     }
5286   }
5287 #pragma omp for simd
5288   for (int i = 0; i < 10; ++i) {
5289 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5290     {
5291       bar();
5292     }
5293   }
5294 #pragma omp for simd
5295   for (int i = 0; i < 10; ++i) {
5296 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5297     bar();
5298   }
5299 #pragma omp for simd
5300   for (int i = 0; i < 10; ++i) {
5301 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5302     bar();
5303   }
5304 #pragma omp for simd
5305   for (int i = 0; i < 10; ++i) {
5306 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5307     bar();
5308   }
5309 #pragma omp for simd
5310   for (int i = 0; i < 10; ++i) {
5311 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5312     bar();
5313   }
5314 #pragma omp for simd
5315   for (int i = 0; i < 10; ++i) {
5316 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5317     bar();
5318   }
5319 #pragma omp for simd
5320   for (int i = 0; i < 10; ++i) {
5321 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5322     ++a;
5323   }
5324 #pragma omp for simd
5325   for (int i = 0; i < 10; ++i) {
5326 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5327     ++a;
5328   }
5329 #pragma omp for simd
5330   for (int i = 0; i < 10; ++i) {
5331 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5332     ++a;
5333   }
5334 #pragma omp for simd
5335   for (int i = 0; i < 10; ++i) {
5336 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5337     for (int i = 0; i < 10; ++i)
5338       ;
5339   }
5340 #pragma omp for simd
5341   for (int i = 0; i < 10; ++i) {
5342 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5343     ++a;
5344   }
5345 #pragma omp for simd
5346   for (int i = 0; i < 10; ++i) {
5347 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5348     ++a;
5349   }
5350 #pragma omp for simd
5351   for (int i = 0; i < 10; ++i) {
5352 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5353     ++a;
5354   }
5355 #pragma omp for simd
5356   for (int i = 0; i < 10; ++i) {
5357 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5358   for (int i = 0; i < 10; ++i)
5359     ++a;
5360   }
5361 #pragma omp for simd
5362   for (int i = 0; i < 10; ++i) {
5363 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5364     for (int j = 0; j < 10; ++j)
5365       ;
5366   }
5367 #pragma omp for simd
5368   for (int i = 0; i < 10; ++i) {
5369 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5370     ++a;
5371   }
5372 #pragma omp for simd
5373   for (int i = 0; i < 10; ++i) {
5374 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5375     for (int j = 0; j < 10; ++j)
5376       ;
5377   }
5378 #pragma omp for simd
5379   for (int i = 0; i < 10; ++i) {
5380 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5381     for (int j = 0; j < 10; ++j)
5382       ;
5383   }
5384 #pragma omp for simd
5385   for (int i = 0; i < 10; ++i) {
5386 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5387     for (int j = 0; j < 10; ++j)
5388       ;
5389   }
5390 
5391 // SECTIONS DIRECTIVE
5392 #pragma omp sections
5393   {
5394 #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?}}
5395     for (int i = 0; i < 10; ++i)
5396       ;
5397   }
5398 #pragma omp sections
5399   {
5400 #pragma omp simd
5401     for (int i = 0; i < 10; ++i)
5402       ;
5403   }
5404 #pragma omp sections
5405   {
5406 #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?}}
5407     for (int i = 0; i < 10; ++i)
5408       ;
5409   }
5410 #pragma omp sections
5411   {
5412 #pragma omp parallel
5413     for (int i = 0; i < 10; ++i)
5414       ;
5415   }
5416 #pragma omp sections
5417   {
5418 #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?}}
5419     {
5420       bar();
5421     }
5422   }
5423 #pragma omp sections
5424   {
5425 #pragma omp section
5426     {
5427       bar();
5428     }
5429   }
5430 #pragma omp sections
5431   {
5432 #pragma omp critical
5433     bar();
5434 #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?}}
5435     bar();
5436 #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
5437     bar();
5438   }
5439 #pragma omp sections
5440   {
5441 #pragma omp parallel
5442     {
5443 #pragma omp single // OK
5444       {
5445         bar();
5446       }
5447 #pragma omp for // OK
5448       for (int i = 0; i < 10; ++i)
5449         ;
5450 #pragma omp for simd // OK
5451       for (int i = 0; i < 10; ++i)
5452         ;
5453 #pragma omp sections // OK
5454       {
5455         bar();
5456       }
5457     }
5458   }
5459 #pragma omp sections
5460   {
5461 #pragma omp parallel for
5462     for (int i = 0; i < 10; ++i)
5463       ;
5464   }
5465 #pragma omp sections
5466   {
5467 #pragma omp parallel for simd
5468     for (int i = 0; i < 10; ++i)
5469       ;
5470   }
5471 #pragma omp sections
5472   {
5473 #pragma omp parallel sections
5474     {
5475       bar();
5476     }
5477   }
5478 #pragma omp sections
5479   {
5480 #pragma omp task
5481     {
5482       bar();
5483     }
5484   }
5485 #pragma omp sections
5486   {
5487 #pragma omp taskyield
5488   }
5489 #pragma omp sections
5490   {
5491 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
5492     bar();
5493   }
5494 #pragma omp sections
5495   {
5496 #pragma omp taskwait
5497   }
5498 #pragma omp sections
5499   {
5500 #pragma omp flush
5501   }
5502 #pragma omp sections
5503   {
5504 #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?}}
5505     bar();
5506   }
5507 #pragma omp sections
5508   {
5509 #pragma omp atomic
5510     ++a;
5511   }
5512 #pragma omp sections
5513   {
5514 #pragma omp target
5515     ++a;
5516   }
5517 #pragma omp sections
5518   {
5519 #pragma omp target parallel
5520     ++a;
5521   }
5522 #pragma omp sections
5523   {
5524 #pragma omp target parallel for
5525     for (int i = 0; i < 10; ++i)
5526       ;
5527   }
5528 #pragma omp sections
5529   {
5530 #pragma omp target enter data map(to: a)
5531   }
5532 #pragma omp sections
5533   {
5534 #pragma omp target exit data map(from: a)
5535   }
5536 #pragma omp sections
5537   {
5538 #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?}}
5539     ++a;
5540   }
5541 #pragma omp sections
5542   {
5543 #pragma omp taskloop
5544   for (int i = 0; i < 10; ++i)
5545     ++a;
5546   }
5547 #pragma omp sections
5548   {
5549 #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?}}
5550     for (int i = 0; i < 10; ++i)
5551       ;
5552   }
5553 #pragma omp sections
5554   {
5555 #pragma omp target update to(a)
5556   }
5557 #pragma omp sections
5558   {
5559 #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?}}
5560     for (int i = 0; i < 10; ++i)
5561       ;
5562   }
5563 #pragma omp sections
5564   {
5565 #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?}}
5566     for (int i = 0; i < 10; ++i)
5567       ;
5568   }
5569 #pragma omp sections
5570   {
5571 #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?}}
5572     for (int i = 0; i < 10; ++i)
5573       ;
5574   }
5575 
5576 // SECTION DIRECTIVE
5577 #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
5578   {
5579     bar();
5580   }
5581 #pragma omp sections
5582   {
5583 #pragma omp section
5584     {
5585 #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?}}
5586       for (int i = 0; i < 10; ++i)
5587         ;
5588     }
5589   }
5590 #pragma omp sections
5591   {
5592 #pragma omp section
5593     {
5594 #pragma omp simd
5595       for (int i = 0; i < 10; ++i)
5596         ;
5597     }
5598   }
5599 #pragma omp sections
5600   {
5601 #pragma omp section
5602     {
5603 #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?}}
5604       for (int i = 0; i < 10; ++i)
5605         ;
5606     }
5607   }
5608 #pragma omp sections
5609   {
5610 #pragma omp section
5611     {
5612 #pragma omp parallel
5613       for (int i = 0; i < 10; ++i)
5614         ;
5615     }
5616   }
5617 #pragma omp sections
5618   {
5619 #pragma omp section
5620     {
5621 #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?}}
5622       {
5623         bar();
5624       }
5625     }
5626   }
5627 #pragma omp sections
5628   {
5629 #pragma omp section
5630     {
5631 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
5632       {
5633         bar();
5634       }
5635     }
5636   }
5637 #pragma omp sections
5638   {
5639 #pragma omp section
5640     {
5641 #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?}}
5642       bar();
5643 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
5644       bar();
5645 #pragma omp critical
5646       bar();
5647     }
5648   }
5649 #pragma omp sections
5650   {
5651 #pragma omp section
5652     {
5653 #pragma omp parallel
5654       {
5655 #pragma omp single // OK
5656         {
5657           bar();
5658         }
5659 #pragma omp for // OK
5660         for (int i = 0; i < 10; ++i)
5661           ;
5662 #pragma omp for simd // OK
5663         for (int i = 0; i < 10; ++i)
5664           ;
5665 #pragma omp sections // OK
5666         {
5667           bar();
5668         }
5669       }
5670     }
5671   }
5672 #pragma omp sections
5673   {
5674 #pragma omp section
5675     {
5676 #pragma omp parallel for
5677       for (int i = 0; i < 10; ++i)
5678         ;
5679     }
5680   }
5681 #pragma omp sections
5682   {
5683 #pragma omp section
5684     {
5685 #pragma omp parallel for simd
5686       for (int i = 0; i < 10; ++i)
5687         ;
5688     }
5689   }
5690 #pragma omp sections
5691   {
5692 #pragma omp section
5693     {
5694 #pragma omp parallel sections
5695       {
5696         bar();
5697       }
5698     }
5699   }
5700 #pragma omp sections
5701   {
5702 #pragma omp section
5703     {
5704 #pragma omp task
5705       {
5706         bar();
5707       }
5708     }
5709   }
5710 #pragma omp sections
5711   {
5712 #pragma omp section
5713     {
5714 #pragma omp taskyield
5715       bar();
5716     }
5717   }
5718 #pragma omp sections
5719   {
5720 #pragma omp section
5721     {
5722 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
5723       bar();
5724     }
5725   }
5726 #pragma omp sections
5727   {
5728 #pragma omp section
5729     {
5730 #pragma omp taskwait
5731       bar();
5732     }
5733   }
5734 #pragma omp sections
5735   {
5736 #pragma omp section
5737     {
5738 #pragma omp flush
5739       bar();
5740     }
5741   }
5742 #pragma omp sections
5743   {
5744 #pragma omp section
5745     {
5746 #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?}}
5747       bar();
5748     }
5749   }
5750 #pragma omp sections
5751   {
5752 #pragma omp section
5753     {
5754 #pragma omp atomic
5755       ++a;
5756     }
5757   }
5758 #pragma omp sections
5759   {
5760 #pragma omp section
5761     {
5762 #pragma omp target
5763       ++a;
5764     }
5765   }
5766 #pragma omp sections
5767   {
5768 #pragma omp section
5769     {
5770 #pragma omp target parallel
5771       ++a;
5772     }
5773   }
5774 #pragma omp sections
5775   {
5776 #pragma omp section
5777     {
5778 #pragma omp target parallel for
5779       for (int i = 0; i < 10; ++i)
5780         ;
5781     }
5782   }
5783 #pragma omp sections
5784   {
5785 #pragma omp section
5786     {
5787 #pragma omp target enter data map(to: a)
5788       ++a;
5789     }
5790   }
5791 #pragma omp sections
5792   {
5793 #pragma omp section
5794     {
5795 #pragma omp target exit data map(from: a)
5796       ++a;
5797     }
5798   }
5799 #pragma omp sections
5800   {
5801 #pragma omp section
5802     {
5803 #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?}}
5804       ++a;
5805     }
5806   }
5807 #pragma omp sections
5808   {
5809 #pragma omp section
5810     {
5811 #pragma omp taskloop
5812   for (int i = 0; i < 10; ++i)
5813       ++a;
5814     }
5815   }
5816 #pragma omp sections
5817   {
5818 #pragma omp section
5819 #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?}}
5820     for (int i = 0; i < 10; ++i)
5821       ;
5822   }
5823 #pragma omp sections
5824   {
5825 #pragma omp section
5826     {
5827 #pragma omp target update to(a)
5828       a++;
5829     }
5830   }
5831 #pragma omp sections
5832   {
5833 #pragma omp section
5834 #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?}}
5835     for (int i = 0; i < 10; ++i)
5836       ;
5837   }
5838 #pragma omp sections
5839   {
5840 #pragma omp section
5841 #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?}}
5842     for (int i = 0; i < 10; ++i)
5843       ;
5844   }
5845 #pragma omp sections
5846   {
5847 #pragma omp section
5848 #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?}}
5849     for (int i = 0; i < 10; ++i)
5850       ;
5851   }
5852 
5853 // SINGLE DIRECTIVE
5854 #pragma omp single
5855   {
5856 #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?}}
5857     for (int i = 0; i < 10; ++i)
5858       ;
5859   }
5860 #pragma omp single
5861   {
5862 #pragma omp simd
5863     for (int i = 0; i < 10; ++i)
5864       ;
5865   }
5866 #pragma omp single
5867   {
5868 #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?}}
5869     for (int i = 0; i < 10; ++i)
5870       ;
5871   }
5872 #pragma omp single
5873   {
5874 #pragma omp parallel
5875     for (int i = 0; i < 10; ++i)
5876       ;
5877   }
5878 #pragma omp single
5879   {
5880 #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?}}
5881     {
5882       bar();
5883     }
5884 #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
5885     bar();
5886 #pragma omp critical
5887     bar();
5888   }
5889 #pragma omp single
5890   {
5891 #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?}}
5892     {
5893       bar();
5894     }
5895   }
5896 #pragma omp single
5897   {
5898 #pragma omp parallel
5899     {
5900 #pragma omp single // OK
5901       {
5902         bar();
5903       }
5904 #pragma omp for // OK
5905       for (int i = 0; i < 10; ++i)
5906         ;
5907 #pragma omp for simd // OK
5908       for (int i = 0; i < 10; ++i)
5909         ;
5910 #pragma omp sections // OK
5911       {
5912         bar();
5913       }
5914     }
5915   }
5916 #pragma omp single
5917   {
5918 #pragma omp parallel for
5919     for (int i = 0; i < 10; ++i)
5920       ;
5921   }
5922 #pragma omp single
5923   {
5924 #pragma omp parallel for simd
5925     for (int i = 0; i < 10; ++i)
5926       ;
5927   }
5928 #pragma omp single
5929   {
5930 #pragma omp parallel sections
5931     {
5932       bar();
5933     }
5934   }
5935 #pragma omp single
5936   {
5937 #pragma omp task
5938     {
5939       bar();
5940     }
5941   }
5942 #pragma omp single
5943   {
5944 #pragma omp taskyield
5945     bar();
5946   }
5947 #pragma omp single
5948   {
5949 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
5950     bar();
5951   }
5952 #pragma omp single
5953   {
5954 #pragma omp taskwait
5955     bar();
5956   }
5957 #pragma omp single
5958   {
5959 #pragma omp flush
5960     bar();
5961   }
5962 #pragma omp single
5963   {
5964 #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?}}
5965     bar();
5966   }
5967 #pragma omp single
5968   {
5969 #pragma omp atomic
5970     ++a;
5971   }
5972 #pragma omp single
5973   {
5974 #pragma omp target
5975     ++a;
5976   }
5977 #pragma omp single
5978   {
5979 #pragma omp target parallel
5980     ++a;
5981   }
5982 #pragma omp single
5983   {
5984 #pragma omp target parallel for
5985     for (int i = 0; i < 10; ++i)
5986       ;
5987   }
5988 #pragma omp single
5989   {
5990 #pragma omp target enter data map(to: a)
5991     ++a;
5992   }
5993 #pragma omp single
5994   {
5995 #pragma omp target exit data map(from: a)
5996     ++a;
5997   }
5998 #pragma omp single
5999   {
6000 #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?}}
6001     ++a;
6002   }
6003 #pragma omp single
6004   {
6005 #pragma omp taskloop
6006   for (int i = 0; i < 10; ++i)
6007     ++a;
6008   }
6009 #pragma omp single
6010   {
6011 #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?}}
6012     for (int i = 0; i < 10; ++i)
6013       ;
6014   }
6015 #pragma omp single
6016   {
6017 #pragma omp target update to(a)
6018     a++;
6019   }
6020 #pragma omp single
6021   {
6022 #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?}}
6023     for (int i = 0; i < 10; ++i)
6024       ;
6025   }
6026 #pragma omp single
6027   {
6028 #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?}}
6029     for (int i = 0; i < 10; ++i)
6030       ;
6031   }
6032 #pragma omp single
6033   {
6034 #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?}}
6035     for (int i = 0; i < 10; ++i)
6036       ;
6037   }
6038 
6039 // MASTER DIRECTIVE
6040 #pragma omp master
6041   {
6042 #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?}}
6043     for (int i = 0; i < 10; ++i)
6044       ;
6045   }
6046 #pragma omp master
6047   {
6048 #pragma omp simd
6049     for (int i = 0; i < 10; ++i)
6050       ;
6051   }
6052 #pragma omp master
6053   {
6054 #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?}}
6055     for (int i = 0; i < 10; ++i)
6056       ;
6057   }
6058 #pragma omp master
6059   {
6060 #pragma omp parallel
6061     for (int i = 0; i < 10; ++i)
6062       ;
6063   }
6064 #pragma omp master
6065   {
6066 #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?}}
6067     {
6068       bar();
6069     }
6070   }
6071 #pragma omp master
6072   {
6073 #pragma omp master // OK, though second 'master' is redundant
6074     {
6075       bar();
6076     }
6077   }
6078 #pragma omp master
6079   {
6080 #pragma omp critical
6081     {
6082       bar();
6083     }
6084   }
6085 #pragma omp master
6086   {
6087 #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?}}
6088     {
6089       bar();
6090     }
6091   }
6092 #pragma omp master
6093   {
6094 #pragma omp parallel
6095     {
6096 #pragma omp master // OK
6097       {
6098         bar();
6099       }
6100 #pragma omp for // OK
6101       for (int i = 0; i < 10; ++i)
6102         ;
6103 #pragma omp for simd // OK
6104       for (int i = 0; i < 10; ++i)
6105         ;
6106 #pragma omp sections // OK
6107       {
6108         bar();
6109       }
6110     }
6111   }
6112 #pragma omp master
6113   {
6114 #pragma omp parallel for
6115     for (int i = 0; i < 10; ++i)
6116       ;
6117   }
6118 #pragma omp master
6119   {
6120 #pragma omp parallel for simd
6121     for (int i = 0; i < 10; ++i)
6122       ;
6123   }
6124 #pragma omp master
6125   {
6126 #pragma omp parallel sections
6127     {
6128       bar();
6129     }
6130   }
6131 #pragma omp master
6132   {
6133 #pragma omp task
6134     {
6135       bar();
6136     }
6137   }
6138 #pragma omp master
6139   {
6140 #pragma omp taskyield
6141     bar();
6142   }
6143 #pragma omp master
6144   {
6145 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
6146     bar();
6147   }
6148 #pragma omp master
6149   {
6150 #pragma omp taskwait
6151     bar();
6152   }
6153 #pragma omp master
6154   {
6155 #pragma omp flush
6156     bar();
6157   }
6158 #pragma omp master
6159   {
6160 #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?}}
6161     bar();
6162   }
6163 #pragma omp master
6164   {
6165 #pragma omp atomic
6166     ++a;
6167   }
6168 #pragma omp master
6169   {
6170 #pragma omp target
6171     ++a;
6172   }
6173 #pragma omp master
6174   {
6175 #pragma omp target parallel
6176     ++a;
6177   }
6178 #pragma omp master
6179   {
6180 #pragma omp target parallel for
6181     for (int i = 0; i < 10; ++i)
6182       ;
6183   }
6184 #pragma omp master
6185   {
6186 #pragma omp target enter data map(to: a)
6187     ++a;
6188   }
6189 #pragma omp master
6190   {
6191 #pragma omp target exit data map(from: a)
6192     ++a;
6193   }
6194 #pragma omp master
6195   {
6196 #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?}}
6197     ++a;
6198   }
6199 #pragma omp master
6200   {
6201 #pragma omp taskloop
6202   for (int i = 0; i < 10; ++i)
6203     ++a;
6204   }
6205 #pragma omp master
6206   {
6207 #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?}}
6208     for (int i = 0; i < 10; ++i)
6209       ;
6210   }
6211 #pragma omp master
6212   {
6213 #pragma omp target update to(a)
6214     ++a;
6215   }
6216 #pragma omp master
6217   {
6218 #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?}}
6219     for (int i = 0; i < 10; ++i)
6220       ;
6221   }
6222 #pragma omp master
6223   {
6224 #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?}}
6225     for (int i = 0; i < 10; ++i)
6226       ;
6227   }
6228 #pragma omp master
6229   {
6230 #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?}}
6231     for (int i = 0; i < 10; ++i)
6232       ;
6233   }
6234 
6235 // CRITICAL DIRECTIVE
6236 #pragma omp critical
6237   {
6238 #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?}}
6239     for (int i = 0; i < 10; ++i)
6240       ;
6241   }
6242 #pragma omp critical
6243   {
6244 #pragma omp simd
6245     for (int i = 0; i < 10; ++i)
6246       ;
6247   }
6248 #pragma omp critical
6249   {
6250 #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?}}
6251     for (int i = 0; i < 10; ++i)
6252       ;
6253   }
6254 #pragma omp critical
6255   {
6256 #pragma omp parallel
6257     for (int i = 0; i < 10; ++i)
6258       ;
6259   }
6260 #pragma omp critical
6261   {
6262 #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?}}
6263     {
6264       bar();
6265     }
6266   }
6267 #pragma omp critical
6268   {
6269 #pragma omp master // OK, though second 'master' is redundant
6270     {
6271       bar();
6272     }
6273   }
6274 #pragma omp critical
6275   {
6276 #pragma omp critical
6277     {
6278       bar();
6279     }
6280   }
6281 #pragma omp critical
6282   {
6283 #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?}}
6284     {
6285       bar();
6286     }
6287   }
6288 #pragma omp critical
6289   {
6290 #pragma omp parallel
6291     {
6292 #pragma omp master // OK
6293       {
6294         bar();
6295       }
6296 #pragma omp for // OK
6297       for (int i = 0; i < 10; ++i)
6298         ;
6299 #pragma omp for simd // OK
6300       for (int i = 0; i < 10; ++i)
6301         ;
6302 #pragma omp sections // OK
6303       {
6304         bar();
6305       }
6306     }
6307   }
6308 #pragma omp critical
6309   {
6310 #pragma omp parallel for
6311     for (int i = 0; i < 10; ++i)
6312       ;
6313   }
6314 #pragma omp critical
6315   {
6316 #pragma omp parallel for simd
6317     for (int i = 0; i < 10; ++i)
6318       ;
6319   }
6320 #pragma omp critical
6321   {
6322 #pragma omp parallel sections
6323     {
6324       bar();
6325     }
6326   }
6327 #pragma omp critical
6328   {
6329 #pragma omp task
6330     {
6331       bar();
6332     }
6333   }
6334 #pragma omp critical
6335   {
6336 #pragma omp taskyield
6337     bar();
6338   }
6339 #pragma omp critical
6340   {
6341 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
6342     bar();
6343   }
6344 #pragma omp critical
6345   {
6346 #pragma omp taskwait
6347     bar();
6348   }
6349 #pragma omp critical(Belka)
6350   {
6351 #pragma omp critical(Strelka)
6352     bar();
6353   }
6354 #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
6355   {
6356 #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
6357     {
6358 #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
6359       {
6360 #pragma omp parallel
6361 #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
6362         {
6363           bar();
6364         }
6365       }
6366     }
6367   }
6368 #pragma omp critical
6369   {
6370 #pragma omp flush
6371     bar();
6372   }
6373 #pragma omp critical
6374   {
6375 #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?}}
6376     bar();
6377   }
6378 #pragma omp critical
6379   {
6380 #pragma omp atomic
6381     ++a;
6382   }
6383 #pragma omp critical
6384   {
6385 #pragma omp target
6386     ++a;
6387   }
6388 #pragma omp critical
6389   {
6390 #pragma omp target parallel
6391     ++a;
6392   }
6393 #pragma omp critical
6394   {
6395 #pragma omp target parallel for
6396     for (int i = 0; i < 10; ++i)
6397       ;
6398   }
6399 #pragma omp critical
6400   {
6401 #pragma omp target enter data map(to: a)
6402     ++a;
6403   }
6404 #pragma omp critical
6405   {
6406 #pragma omp target exit data map(from: a)
6407     ++a;
6408   }
6409 #pragma omp critical
6410   {
6411 #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?}}
6412     ++a;
6413   }
6414 #pragma omp critical
6415   {
6416 #pragma omp taskloop
6417   for (int i = 0; i < 10; ++i)
6418     ++a;
6419   }
6420 #pragma omp critical
6421   {
6422 #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?}}
6423     for (int i = 0; i < 10; ++i)
6424       ;
6425   }
6426 #pragma omp critical
6427   {
6428 #pragma omp target update to(a)
6429     a++;
6430   }
6431 #pragma omp critical
6432   {
6433 #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?}}
6434     for (int i = 0; i < 10; ++i)
6435       ;
6436   }
6437 #pragma omp critical
6438   {
6439 #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?}}
6440     for (int i = 0; i < 10; ++i)
6441       ;
6442   }
6443 #pragma omp critical
6444   {
6445 #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?}}
6446     for (int i = 0; i < 10; ++i)
6447       ;
6448   }
6449 
6450 // PARALLEL FOR DIRECTIVE
6451 #pragma omp parallel for
6452   for (int i = 0; i < 10; ++i) {
6453 #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?}}
6454     for (int i = 0; i < 10; ++i)
6455       ;
6456   }
6457 #pragma omp parallel for
6458   for (int i = 0; i < 10; ++i) {
6459 #pragma omp simd
6460     for (int i = 0; i < 10; ++i)
6461       ;
6462   }
6463 #pragma omp parallel for
6464   for (int i = 0; i < 10; ++i) {
6465 #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?}}
6466     for (int i = 0; i < 10; ++i)
6467       ;
6468   }
6469 
6470 #pragma omp parallel for
6471   for (int i = 0; i < 10; ++i) {
6472 #pragma omp parallel
6473     for (int i = 0; i < 10; ++i)
6474       ;
6475   }
6476 #pragma omp parallel for
6477   for (int i = 0; i < 10; ++i) {
6478 #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?}}
6479     {
6480       bar();
6481     }
6482   }
6483 #pragma omp parallel for
6484   for (int i = 0; i < 10; ++i) {
6485 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
6486     {
6487       bar();
6488     }
6489   }
6490 #pragma omp parallel for
6491   for (int i = 0; i < 10; ++i) {
6492 #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?}}
6493     {
6494       bar();
6495     }
6496 #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
6497     {
6498       bar();
6499     }
6500 #pragma omp critical
6501     {
6502       bar();
6503     }
6504   }
6505 #pragma omp parallel for
6506   for (int i = 0; i < 10; ++i) {
6507 #pragma omp parallel
6508     {
6509 #pragma omp single // OK
6510       {
6511         bar();
6512       }
6513 #pragma omp master // OK
6514       {
6515         bar();
6516       }
6517 #pragma omp critical // OK
6518       {
6519         bar();
6520       }
6521 #pragma omp for // OK
6522       for (int i = 0; i < 10; ++i)
6523         ;
6524 #pragma omp for simd // OK
6525       for (int i = 0; i < 10; ++i)
6526         ;
6527 #pragma omp sections // OK
6528       {
6529         bar();
6530       }
6531     }
6532   }
6533 #pragma omp parallel for
6534   for (int i = 0; i < 10; ++i) {
6535 #pragma omp parallel for
6536     for (int i = 0; i < 10; ++i)
6537       ;
6538   }
6539 #pragma omp parallel for
6540   for (int i = 0; i < 10; ++i) {
6541 #pragma omp parallel for simd
6542     for (int i = 0; i < 10; ++i)
6543       ;
6544   }
6545 #pragma omp parallel for
6546   for (int i = 0; i < 10; ++i) {
6547 #pragma omp parallel sections
6548     {
6549       bar();
6550     }
6551   }
6552 #pragma omp parallel for
6553   for (int i = 0; i < 10; ++i) {
6554 #pragma omp task
6555     {
6556       bar();
6557     }
6558   }
6559 #pragma omp parallel for
6560   for (int i = 0; i < 10; ++i) {
6561 #pragma omp taskyield
6562     bar();
6563   }
6564 #pragma omp parallel for
6565   for (int i = 0; i < 10; ++i) {
6566 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
6567     bar();
6568   }
6569 #pragma omp parallel for
6570   for (int i = 0; i < 10; ++i) {
6571 #pragma omp taskwait
6572     bar();
6573   }
6574 #pragma omp parallel for
6575   for (int i = 0; i < 10; ++i) {
6576 #pragma omp flush
6577     bar();
6578   }
6579 #pragma omp parallel for
6580   for (int i = 0; i < 10; ++i) {
6581 #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?}}
6582     bar();
6583   }
6584 #pragma omp parallel for ordered
6585   for (int i = 0; i < 10; ++i) {
6586 #pragma omp ordered // OK
6587     bar();
6588   }
6589 #pragma omp parallel for
6590   for (int i = 0; i < 10; ++i) {
6591 #pragma omp atomic
6592     ++a;
6593   }
6594 #pragma omp parallel for
6595   for (int i = 0; i < 10; ++i) {
6596 #pragma omp target
6597     ++a;
6598   }
6599 #pragma omp parallel for
6600   for (int i = 0; i < 10; ++i) {
6601 #pragma omp target parallel
6602     ++a;
6603   }
6604 #pragma omp parallel for
6605   for (int i = 0; i < 10; ++i) {
6606 #pragma omp target parallel for
6607     for (int i = 0; i < 10; ++i)
6608       ;
6609   }
6610 #pragma omp parallel for
6611   for (int i = 0; i < 10; ++i) {
6612 #pragma omp target enter data map(to: a)
6613     ++a;
6614   }
6615 #pragma omp parallel for
6616   for (int i = 0; i < 10; ++i) {
6617 #pragma omp target exit data map(from: a)
6618     ++a;
6619   }
6620 #pragma omp parallel for
6621   for (int i = 0; i < 10; ++i) {
6622 #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?}}
6623     ++a;
6624   }
6625 #pragma omp parallel for
6626   for (int i = 0; i < 10; ++i) {
6627 #pragma omp taskloop
6628   for (int i = 0; i < 10; ++i)
6629     ++a;
6630   }
6631 #pragma omp parallel for
6632   for (int i = 0; i < 10; ++i) {
6633 #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?}}
6634     for (int j = 0; j < 10; ++j)
6635       ;
6636   }
6637 #pragma omp parallel for
6638   for (int i = 0; i < 10; ++i) {
6639 #pragma omp target update to(a)
6640     a++;
6641   }
6642 #pragma omp parallel for
6643   for (int i = 0; i < 10; ++i) {
6644 #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?}}
6645     for (int j = 0; j < 10; ++j)
6646       ;
6647   }
6648 #pragma omp parallel for
6649   for (int i = 0; i < 10; ++i) {
6650 #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?}}
6651     for (int j = 0; j < 10; ++j)
6652       ;
6653   }
6654 #pragma omp parallel for
6655   for (int i = 0; i < 10; ++i) {
6656 #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?}}
6657     for (int j = 0; j < 10; ++j)
6658       ;
6659   }
6660 
6661 // PARALLEL FOR SIMD DIRECTIVE
6662 #pragma omp parallel for simd
6663   for (int i = 0; i < 10; ++i) {
6664 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6665     for (int i = 0; i < 10; ++i)
6666       ;
6667   }
6668 #pragma omp parallel for simd
6669   for (int i = 0; i < 10; ++i) {
6670 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6671     for (int i = 0; i < 10; ++i)
6672       ;
6673   }
6674 #pragma omp parallel for simd
6675   for (int i = 0; i < 10; ++i) {
6676 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6677     for (int i = 0; i < 10; ++i)
6678       ;
6679   }
6680 #pragma omp parallel for simd
6681   for (int i = 0; i < 10; ++i) {
6682 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6683     for (int i = 0; i < 10; ++i)
6684       ;
6685   }
6686 #pragma omp parallel for simd
6687   for (int i = 0; i < 10; ++i) {
6688 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6689     {
6690       bar();
6691     }
6692   }
6693 #pragma omp parallel for simd
6694   for (int i = 0; i < 10; ++i) {
6695 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6696     {
6697       bar();
6698     }
6699   }
6700 #pragma omp parallel for simd
6701   for (int i = 0; i < 10; ++i) {
6702 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6703     {
6704       bar();
6705     }
6706   }
6707 
6708 #pragma omp parallel for simd
6709   for (int i = 0; i < 10; ++i) {
6710 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6711     {
6712       bar();
6713     }
6714   }
6715 
6716 #pragma omp parallel for simd
6717   for (int i = 0; i < 10; ++i) {
6718 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6719     {
6720       bar();
6721     }
6722   }
6723 
6724 #pragma omp parallel for simd
6725   for (int i = 0; i < 10; ++i) {
6726 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6727     {
6728 #pragma omp single
6729       {
6730         bar();
6731       }
6732 #pragma omp for
6733       for (int i = 0; i < 10; ++i)
6734         ;
6735 #pragma omp for simd
6736       for (int i = 0; i < 10; ++i)
6737         ;
6738 #pragma omp sections
6739       {
6740         bar();
6741       }
6742     }
6743   }
6744 #pragma omp parallel for simd
6745   for (int i = 0; i < 10; ++i) {
6746 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6747     for (int i = 0; i < 10; ++i)
6748       ;
6749   }
6750 #pragma omp parallel for simd
6751   for (int i = 0; i < 10; ++i) {
6752 #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
6753     for (int i = 0; i < 10; ++i)
6754       ;
6755   }
6756 #pragma omp parallel for simd
6757   for (int i = 0; i < 10; ++i) {
6758 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6759     {
6760       bar();
6761     }
6762   }
6763 #pragma omp parallel for simd
6764   for (int i = 0; i < 10; ++i) {
6765 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6766     {
6767       bar();
6768     }
6769   }
6770 #pragma omp parallel for simd
6771   for (int i = 0; i < 10; ++i) {
6772 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6773     bar();
6774   }
6775 #pragma omp parallel for simd
6776   for (int i = 0; i < 10; ++i) {
6777 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6778     bar();
6779   }
6780 #pragma omp parallel for simd
6781   for (int i = 0; i < 10; ++i) {
6782 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6783     bar();
6784   }
6785 #pragma omp parallel for simd
6786   for (int i = 0; i < 10; ++i) {
6787 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6788     bar();
6789   }
6790 #pragma omp parallel for simd
6791   for (int i = 0; i < 10; ++i) {
6792 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6793     bar();
6794   }
6795 #pragma omp parallel for simd
6796   for (int i = 0; i < 10; ++i) {
6797 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6798     bar();
6799   }
6800 #pragma omp parallel for simd
6801   for (int i = 0; i < 10; ++i) {
6802 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6803     ++a;
6804   }
6805 #pragma omp parallel for simd
6806   for (int i = 0; i < 10; ++i) {
6807 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6808     ++a;
6809   }
6810 #pragma omp parallel for simd
6811   for (int i = 0; i < 10; ++i) {
6812 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6813     ++a;
6814   }
6815 #pragma omp parallel for simd
6816   for (int i = 0; i < 10; ++i) {
6817 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6818     for (int i = 0; i < 10; ++i)
6819       ;
6820   }
6821 #pragma omp parallel for simd
6822   for (int i = 0; i < 10; ++i) {
6823 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6824     ++a;
6825   }
6826 #pragma omp parallel for simd
6827   for (int i = 0; i < 10; ++i) {
6828 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6829     ++a;
6830   }
6831 #pragma omp parallel for simd
6832   for (int i = 0; i < 10; ++i) {
6833 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6834     ++a;
6835   }
6836 #pragma omp parallel for simd
6837   for (int i = 0; i < 10; ++i) {
6838 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6839   for (int i = 0; i < 10; ++i)
6840     ++a;
6841   }
6842 #pragma omp parallel for simd
6843   for (int i = 0; i < 10; ++i) {
6844 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6845     for (int j = 0; j < 10; ++j)
6846       ;
6847   }
6848 #pragma omp parallel for simd
6849   for (int i = 0; i < 10; ++i) {
6850 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6851     a++;
6852   }
6853 #pragma omp parallel for simd
6854   for (int i = 0; i < 10; ++i) {
6855 #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6856     for (int j = 0; j < 10; ++j)
6857       ;
6858   }
6859 #pragma omp parallel for simd
6860   for (int i = 0; i < 10; ++i) {
6861 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6862     for (int j = 0; j < 10; ++j)
6863       ;
6864   }
6865 #pragma omp parallel for simd
6866   for (int i = 0; i < 10; ++i) {
6867 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6868     for (int j = 0; j < 10; ++j)
6869       ;
6870   }
6871 
6872 // PARALLEL SECTIONS DIRECTIVE
6873 #pragma omp parallel sections
6874   {
6875 #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?}}
6876     for (int i = 0; i < 10; ++i)
6877       ;
6878   }
6879 #pragma omp parallel sections
6880   {
6881 #pragma omp simd
6882     for (int i = 0; i < 10; ++i)
6883       ;
6884   }
6885 #pragma omp parallel sections
6886   {
6887 #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?}}
6888     for (int i = 0; i < 10; ++i)
6889       ;
6890   }
6891 #pragma omp parallel sections
6892   {
6893 #pragma omp parallel
6894     for (int i = 0; i < 10; ++i)
6895       ;
6896   }
6897 #pragma omp parallel sections
6898   {
6899 #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?}}
6900     {
6901       bar();
6902     }
6903   }
6904 #pragma omp parallel sections
6905   {
6906 #pragma omp section
6907     {
6908       bar();
6909     }
6910   }
6911 #pragma omp parallel sections
6912   {
6913 #pragma omp section
6914     {
6915 #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?}}
6916       bar();
6917 #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
6918       bar();
6919 #pragma omp critical
6920       bar();
6921     }
6922   }
6923 #pragma omp parallel sections
6924   {
6925 #pragma omp parallel
6926     {
6927 #pragma omp single // OK
6928       {
6929         bar();
6930       }
6931 #pragma omp master // OK
6932       {
6933         bar();
6934       }
6935 #pragma omp critical // OK
6936       {
6937         bar();
6938       }
6939 #pragma omp for // OK
6940       for (int i = 0; i < 10; ++i)
6941         ;
6942 #pragma omp for simd // OK
6943       for (int i = 0; i < 10; ++i)
6944         ;
6945 #pragma omp sections // OK
6946       {
6947         bar();
6948       }
6949     }
6950   }
6951 #pragma omp parallel sections
6952   {
6953 #pragma omp parallel for
6954     for (int i = 0; i < 10; ++i)
6955       ;
6956   }
6957 #pragma omp parallel sections
6958   {
6959 #pragma omp parallel for simd
6960     for (int i = 0; i < 10; ++i)
6961       ;
6962   }
6963 #pragma omp parallel sections
6964   {
6965 #pragma omp parallel sections
6966     {
6967       bar();
6968     }
6969   }
6970 #pragma omp parallel sections
6971   {
6972 #pragma omp task
6973     {
6974       bar();
6975     }
6976   }
6977 #pragma omp parallel sections
6978   {
6979 #pragma omp taskyield
6980   }
6981 #pragma omp parallel sections
6982   {
6983 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
6984   }
6985 #pragma omp parallel sections
6986   {
6987 #pragma omp taskwait
6988   }
6989 #pragma omp parallel sections
6990   {
6991 #pragma omp flush
6992   }
6993 #pragma omp parallel sections
6994   {
6995 #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?}}
6996     bar();
6997   }
6998 #pragma omp parallel sections
6999   {
7000 #pragma omp atomic
7001     ++a;
7002   }
7003 #pragma omp parallel sections
7004   {
7005 #pragma omp target
7006     ++a;
7007   }
7008 #pragma omp parallel sections
7009   {
7010 #pragma omp target parallel
7011     ++a;
7012   }
7013 #pragma omp parallel sections
7014   {
7015 #pragma omp target parallel for
7016     for (int i = 0; i < 10; ++i)
7017       ;
7018   }
7019 #pragma omp parallel sections
7020   {
7021 #pragma omp target enter data map(to: a)
7022   }
7023 #pragma omp parallel sections
7024   {
7025 #pragma omp target exit data map(from: a)
7026   }
7027 #pragma omp parallel sections
7028   {
7029 #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?}}
7030     ++a;
7031   }
7032 #pragma omp parallel sections
7033   {
7034 #pragma omp taskloop
7035   for (int i = 0; i < 10; ++i)
7036     ++a;
7037   }
7038 #pragma omp parallel sections
7039   {
7040 #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?}}
7041     for (int i = 0; i < 10; ++i)
7042       ;
7043   }
7044 #pragma omp parallel sections
7045   {
7046 #pragma omp target update to(a)
7047   }
7048 #pragma omp parallel sections
7049   {
7050 #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?}}
7051     for (int i = 0; i < 10; ++i)
7052       ;
7053   }
7054 #pragma omp parallel sections
7055   {
7056 #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?}}
7057     for (int i = 0; i < 10; ++i)
7058       ;
7059   }
7060 #pragma omp parallel sections
7061   {
7062 #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?}}
7063     for (int i = 0; i < 10; ++i)
7064       ;
7065   }
7066 
7067 // TASK DIRECTIVE
7068 #pragma omp task
7069 #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?}}
7070   for (int i = 0; i < 10; ++i)
7071     ;
7072 #pragma omp task
7073 #pragma omp simd
7074   for (int i = 0; i < 10; ++i)
7075     ;
7076 #pragma omp task
7077 #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?}}
7078   for (int i = 0; i < 10; ++i)
7079     ;
7080 #pragma omp task
7081 #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?}}
7082   {
7083     bar();
7084   }
7085 #pragma omp task
7086 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
7087   {
7088     bar();
7089   }
7090 #pragma omp task
7091 #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?}}
7092   bar();
7093 #pragma omp task
7094 #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
7095   bar();
7096 #pragma omp task
7097 #pragma omp critical
7098   bar();
7099 #pragma omp task
7100 #pragma omp parallel for
7101   for (int i = 0; i < 10; ++i)
7102     ;
7103 #pragma omp task
7104 #pragma omp parallel for simd
7105   for (int i = 0; i < 10; ++i)
7106     ;
7107 #pragma omp task
7108 #pragma omp parallel sections
7109   {
7110     bar();
7111   }
7112 #pragma omp task
7113 #pragma omp task
7114   {
7115     bar();
7116   }
7117 #pragma omp task
7118   {
7119 #pragma omp taskyield
7120     bar();
7121   }
7122 #pragma omp task
7123   {
7124 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
7125     bar();
7126   }
7127 #pragma omp task
7128   {
7129 #pragma omp taskwait
7130     bar();
7131   }
7132 #pragma omp task
7133   {
7134 #pragma omp flush
7135     bar();
7136   }
7137 #pragma omp task
7138   {
7139 #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?}}
7140     bar();
7141   }
7142 #pragma omp task
7143   {
7144 #pragma omp atomic
7145     ++a;
7146   }
7147 #pragma omp task
7148   {
7149 #pragma omp target
7150     ++a;
7151   }
7152 #pragma omp task
7153   {
7154 #pragma omp target parallel
7155     ++a;
7156   }
7157 #pragma omp task
7158 #pragma omp target parallel for
7159   for (int i = 0; i < 10; ++i)
7160     ;
7161 #pragma omp task
7162   {
7163 #pragma omp target enter data map(to: a)
7164     ++a;
7165   }
7166 #pragma omp task
7167   {
7168 #pragma omp target exit data map(from: a)
7169     ++a;
7170   }
7171 #pragma omp task
7172   {
7173 #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?}}
7174     ++a;
7175   }
7176 #pragma omp task
7177   {
7178 #pragma omp taskloop
7179   for (int i = 0; i < 10; ++i)
7180     ++a;
7181   }
7182 #pragma omp task
7183   {
7184 #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?}}
7185     for (int i = 0; i < 10; ++i)
7186       ;
7187   }
7188 #pragma omp task
7189   {
7190 #pragma omp target update to(a)
7191     a++;
7192   }
7193 #pragma omp task
7194   {
7195 #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?}}
7196     for (int i = 0; i < 10; ++i)
7197       ;
7198   }
7199 #pragma omp task
7200   {
7201 #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?}}
7202     for (int i = 0; i < 10; ++i)
7203       ;
7204   }
7205 #pragma omp task
7206   {
7207 #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?}}
7208     for (int i = 0; i < 10; ++i)
7209       ;
7210   }
7211 
7212 // ATOMIC DIRECTIVE
7213 #pragma omp atomic
7214   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7215   // expected-note@+1 {{expected an expression statement}}
7216   {
7217 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7218     for (int i = 0; i < 10; ++i)
7219       ;
7220   }
7221 #pragma omp atomic
7222   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7223   // expected-note@+1 {{expected an expression statement}}
7224   {
7225 #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7226     for (int i = 0; i < 10; ++i)
7227       ;
7228   }
7229 #pragma omp atomic
7230   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7231   // expected-note@+1 {{expected an expression statement}}
7232   {
7233 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7234     for (int i = 0; i < 10; ++i)
7235       ;
7236   }
7237 #pragma omp atomic
7238   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7239   // expected-note@+1 {{expected an expression statement}}
7240   {
7241 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7242     for (int i = 0; i < 10; ++i)
7243       ;
7244   }
7245 #pragma omp atomic
7246   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7247   // expected-note@+1 {{expected an expression statement}}
7248   {
7249 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7250     {
7251       bar();
7252     }
7253   }
7254 #pragma omp atomic
7255   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7256   // expected-note@+1 {{expected an expression statement}}
7257   {
7258 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7259     {
7260       bar();
7261     }
7262   }
7263 #pragma omp atomic
7264   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7265   // expected-note@+1 {{expected an expression statement}}
7266   {
7267 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7268     {
7269       bar();
7270     }
7271   }
7272 #pragma omp atomic
7273   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7274   // expected-note@+1 {{expected an expression statement}}
7275   {
7276 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7277     {
7278       bar();
7279     }
7280   }
7281 #pragma omp atomic
7282   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7283   // expected-note@+1 {{expected an expression statement}}
7284   {
7285 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7286     {
7287       bar();
7288     }
7289   }
7290 #pragma omp atomic
7291   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7292   // expected-note@+1 {{expected an expression statement}}
7293   {
7294 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7295     for (int i = 0; i < 10; ++i)
7296       ;
7297   }
7298 #pragma omp atomic
7299   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7300   // expected-note@+1 {{expected an expression statement}}
7301   {
7302 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7303     for (int i = 0; i < 10; ++i)
7304       ;
7305   }
7306 #pragma omp atomic
7307   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7308   // expected-note@+1 {{expected an expression statement}}
7309   {
7310 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7311     {
7312       bar();
7313     }
7314   }
7315 #pragma omp atomic
7316   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7317   // expected-note@+1 {{expected an expression statement}}
7318   {
7319 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7320     {
7321       bar();
7322     }
7323   }
7324 #pragma omp atomic
7325   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7326   // expected-note@+1 {{expected an expression statement}}
7327   {
7328 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7329     bar();
7330   }
7331 #pragma omp atomic
7332   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7333   // expected-note@+1 {{expected an expression statement}}
7334   {
7335 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7336     bar();
7337   }
7338 #pragma omp atomic
7339   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7340   // expected-note@+1 {{expected an expression statement}}
7341   {
7342 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7343     bar();
7344   }
7345 #pragma omp atomic
7346   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7347   // expected-note@+1 {{expected an expression statement}}
7348   {
7349 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7350     bar();
7351   }
7352 #pragma omp atomic
7353   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7354   // expected-note@+1 {{expected an expression statement}}
7355   {
7356 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7357     bar();
7358   }
7359 #pragma omp atomic
7360   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7361   // expected-note@+1 {{expected an expression statement}}
7362   {
7363 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7364     ++a;
7365   }
7366 #pragma omp atomic
7367   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7368   // expected-note@+1 {{expected an expression statement}}
7369   {
7370 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7371     ++a;
7372   }
7373 #pragma omp atomic
7374   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7375   // expected-note@+1 {{expected an expression statement}}
7376   {
7377 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7378     ++a;
7379   }
7380 #pragma omp atomic
7381   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7382   // expected-note@+1 {{expected an expression statement}}
7383   {
7384 #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7385     for (int i = 0; i < 10; ++i)
7386       ;
7387   }
7388 #pragma omp atomic
7389   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7390   // expected-note@+1 {{expected an expression statement}}
7391   {
7392 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7393     ++a;
7394   }
7395 #pragma omp atomic
7396   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7397   // expected-note@+1 {{expected an expression statement}}
7398   {
7399 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7400     ++a;
7401   }
7402 #pragma omp atomic
7403   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7404   // expected-note@+1 {{expected an expression statement}}
7405   {
7406 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7407     ++a;
7408   }
7409 #pragma omp atomic
7410   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7411   // expected-note@+1 {{expected an expression statement}}
7412   {
7413 #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7414   for (int i = 0; i < 10; ++i)
7415     ++a;
7416   }
7417 #pragma omp atomic
7418   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7419   // expected-note@+1 {{expected an expression statement}}
7420   {
7421 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7422     for (int i = 0; i < 10; ++i)
7423       ;
7424   }
7425 #pragma omp atomic
7426   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7427   // expected-note@+1 {{expected an expression statement}}
7428   {
7429 #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7430   }
7431 #pragma omp atomic
7432   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7433   // expected-note@+1 {{expected an expression statement}}
7434   {
7435 #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7436     for (int i = 0; i < 10; ++i)
7437       ;
7438   }
7439 #pragma omp atomic
7440   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7441   // expected-note@+1 {{expected an expression statement}}
7442   {
7443 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7444     for (int i = 0; i < 10; ++i)
7445       ;
7446   }
7447 #pragma omp atomic
7448   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7449   // expected-note@+1 {{expected an expression statement}}
7450   {
7451 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7452     for (int i = 0; i < 10; ++i)
7453       ;
7454   }
7455 
7456 // TARGET DIRECTIVE
7457 #pragma omp target
7458 #pragma omp parallel
7459   bar();
7460 #pragma omp target
7461 #pragma omp for
7462   for (int i = 0; i < 10; ++i)
7463     ;
7464 #pragma omp target
7465 #pragma omp simd
7466   for (int i = 0; i < 10; ++i)
7467     ;
7468 #pragma omp target
7469 #pragma omp for simd
7470   for (int i = 0; i < 10; ++i)
7471     ;
7472 #pragma omp target
7473 #pragma omp sections
7474   {
7475     bar();
7476   }
7477 #pragma omp target
7478 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
7479   {
7480     bar();
7481   }
7482 #pragma omp target
7483 #pragma omp single
7484   bar();
7485 
7486 #pragma omp target
7487 #pragma omp master
7488   {
7489     bar();
7490   }
7491 #pragma omp target
7492 #pragma omp critical
7493   {
7494     bar();
7495   }
7496 #pragma omp target
7497 #pragma omp parallel for
7498   for (int i = 0; i < 10; ++i)
7499     ;
7500 #pragma omp target
7501 #pragma omp parallel for simd
7502   for (int i = 0; i < 10; ++i)
7503     ;
7504 #pragma omp target
7505 #pragma omp parallel sections
7506   {
7507     bar();
7508   }
7509 #pragma omp target
7510 #pragma omp task
7511   {
7512     bar();
7513   }
7514 #pragma omp target
7515   {
7516 #pragma omp taskyield
7517     bar();
7518   }
7519 #pragma omp target
7520   {
7521 #pragma omp barrier
7522     bar();
7523   }
7524 #pragma omp target
7525   {
7526 #pragma omp taskwait
7527     bar();
7528   }
7529 #pragma omp target
7530   {
7531 #pragma omp flush
7532     bar();
7533   }
7534 #pragma omp target
7535   {
7536 #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?}}
7537     bar();
7538   }
7539 #pragma omp target
7540   {
7541 #pragma omp atomic
7542     ++a;
7543   }
7544 #pragma omp target
7545   {
7546 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7547     ++a;
7548   }
7549 #pragma omp target
7550   {
7551 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
7552     ++a;
7553   }
7554 #pragma omp target
7555 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7556   for (int i = 0; i < 10; ++i)
7557     ;
7558 #pragma omp target
7559   {
7560 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7561   }
7562 #pragma omp target
7563   {
7564 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7565   }
7566 #pragma omp target
7567   {
7568 #pragma omp teams
7569     ++a;
7570   }
7571 #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
7572   {
7573     ++a;          // expected-note {{statement outside teams construct here}}
7574 #pragma omp teams // expected-note {{nested teams construct here}}
7575     ++a;
7576   }
7577 #pragma omp target
7578   {
7579 #pragma omp taskloop
7580   for (int i = 0; i < 10; ++i)
7581     ++a;
7582   }
7583 #pragma omp target
7584   {
7585 #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?}}
7586     for (int i = 0; i < 10; ++i)
7587       ;
7588   }
7589 #pragma omp atomic
7590   // expected-error@+2 {{the statement for 'atomic' must be an 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}}
7591   // expected-note@+1 {{expected an expression statement}}
7592   {
7593 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7594     a++;
7595   }
7596 #pragma omp target
7597   {
7598 #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?}}
7599     for (int i = 0; i < 10; ++i)
7600       ;
7601   }
7602 #pragma omp target
7603   {
7604 #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?}}
7605     for (int i = 0; i < 10; ++i)
7606       ;
7607   }
7608 #pragma omp target
7609   {
7610 #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?}}
7611     for (int i = 0; i < 10; ++i)
7612       ;
7613   }
7614 
7615 // TARGET PARALLEL DIRECTIVE
7616 #pragma omp target parallel
7617 #pragma omp parallel
7618   bar();
7619 #pragma omp target parallel
7620 #pragma omp for
7621   for (int i = 0; i < 10; ++i)
7622     ;
7623 #pragma omp target parallel
7624 #pragma omp simd
7625   for (int i = 0; i < 10; ++i)
7626     ;
7627 #pragma omp target parallel
7628 #pragma omp for simd
7629   for (int i = 0; i < 10; ++i)
7630     ;
7631 #pragma omp target parallel
7632 #pragma omp sections
7633   {
7634     bar();
7635   }
7636 #pragma omp target parallel
7637 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
7638   {
7639     bar();
7640   }
7641 #pragma omp target parallel
7642 #pragma omp single
7643   bar();
7644 
7645 #pragma omp target parallel
7646 #pragma omp master
7647   {
7648     bar();
7649   }
7650 #pragma omp target parallel
7651 #pragma omp critical
7652   {
7653     bar();
7654   }
7655 #pragma omp target parallel
7656 #pragma omp parallel for
7657   for (int i = 0; i < 10; ++i)
7658     ;
7659 #pragma omp target parallel
7660 #pragma omp parallel for simd
7661   for (int i = 0; i < 10; ++i)
7662     ;
7663 #pragma omp target parallel
7664 #pragma omp parallel sections
7665   {
7666     bar();
7667   }
7668 #pragma omp target parallel
7669 #pragma omp task
7670   {
7671     bar();
7672   }
7673 #pragma omp target parallel
7674   {
7675 #pragma omp taskyield
7676     bar();
7677   }
7678 #pragma omp target parallel
7679   {
7680 #pragma omp barrier
7681     bar();
7682   }
7683 #pragma omp target parallel
7684   {
7685 #pragma omp taskwait
7686     bar();
7687   }
7688 #pragma omp target parallel
7689   {
7690 #pragma omp flush
7691     bar();
7692   }
7693 #pragma omp target parallel
7694   {
7695 #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?}}
7696     bar();
7697   }
7698 #pragma omp target parallel
7699   {
7700 #pragma omp atomic
7701     ++a;
7702   }
7703 #pragma omp target parallel
7704   {
7705 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
7706     ++a;
7707   }
7708 #pragma omp target parallel
7709   {
7710 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
7711     ++a;
7712   }
7713 #pragma omp target parallel
7714 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
7715   for (int i = 0; i < 10; ++i)
7716     ;
7717 #pragma omp target parallel
7718   {
7719 #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?}}
7720     ++a;
7721   }
7722 #pragma omp target parallel
7723   {
7724     ++a;
7725 #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?}}
7726     ++a;
7727   }
7728 #pragma omp target parallel
7729   {
7730 #pragma omp taskloop
7731   for (int i = 0; i < 10; ++i)
7732     ++a;
7733   }
7734 #pragma omp target parallel
7735   {
7736 #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?}}
7737     for (int i = 0; i < 10; ++i)
7738       ;
7739   }
7740 #pragma omp target parallel
7741   {
7742 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
7743   }
7744 #pragma omp target parallel
7745   {
7746 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
7747   }
7748 #pragma omp target parallel
7749   {
7750 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
7751   }
7752 #pragma omp target parallel
7753   {
7754 #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?}}
7755     for (int i = 0; i < 10; ++i)
7756       ;
7757   }
7758 #pragma omp target parallel
7759   {
7760 #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?}}
7761     for (int i = 0; i < 10; ++i)
7762       ;
7763   }
7764 #pragma omp target parallel
7765   {
7766 #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?}}
7767     for (int i = 0; i < 10; ++i)
7768       ;
7769   }
7770 
7771 // TARGET PARALLEL FOR DIRECTIVE
7772 #pragma omp target parallel for
7773   for (int i = 0; i < 10; ++i) {
7774 #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?}}
7775     for (int i = 0; i < 10; ++i)
7776       ;
7777   }
7778 #pragma omp target parallel for
7779   for (int i = 0; i < 10; ++i) {
7780 #pragma omp simd
7781     for (int i = 0; i < 10; ++i)
7782       ;
7783   }
7784 #pragma omp target parallel for
7785   for (int i = 0; i < 10; ++i) {
7786 #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?}}
7787     for (int i = 0; i < 10; ++i)
7788       ;
7789   }
7790 #pragma omp target parallel for
7791   for (int i = 0; i < 10; ++i) {
7792 #pragma omp parallel
7793     for (int i = 0; i < 10; ++i)
7794       ;
7795   }
7796 #pragma omp target parallel for
7797   for (int i = 0; i < 10; ++i) {
7798 #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?}}
7799     {
7800       bar();
7801     }
7802   }
7803 #pragma omp target parallel for
7804   for (int i = 0; i < 10; ++i) {
7805 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
7806     {
7807       bar();
7808     }
7809   }
7810 #pragma omp target parallel for
7811   for (int i = 0; i < 10; ++i) {
7812 #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?}}
7813     {
7814       bar();
7815     }
7816   }
7817 
7818 #pragma omp target parallel for
7819   for (int i = 0; i < 10; ++i) {
7820 #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
7821     {
7822       bar();
7823     }
7824   }
7825 
7826 #pragma omp target parallel for
7827   for (int i = 0; i < 10; ++i) {
7828 #pragma omp critical
7829     {
7830       bar();
7831     }
7832   }
7833 
7834 #pragma omp target parallel for
7835   for (int i = 0; i < 10; ++i) {
7836 #pragma omp parallel
7837     {
7838 #pragma omp single // OK
7839       {
7840         bar();
7841       }
7842 #pragma omp for // OK
7843       for (int i = 0; i < 10; ++i)
7844         ;
7845 #pragma omp for simd // OK
7846       for (int i = 0; i < 10; ++i)
7847         ;
7848 #pragma omp sections // OK
7849       {
7850         bar();
7851       }
7852     }
7853   }
7854 #pragma omp target parallel for
7855   for (int i = 0; i < 10; ++i) {
7856 #pragma omp parallel for
7857     for (int i = 0; i < 10; ++i)
7858       ;
7859   }
7860 #pragma omp target parallel for
7861   for (int i = 0; i < 10; ++i) {
7862 #pragma omp parallel for simd
7863     for (int i = 0; i < 10; ++i)
7864       ;
7865   }
7866 #pragma omp target parallel for
7867   for (int i = 0; i < 10; ++i) {
7868 #pragma omp parallel sections
7869     {
7870       bar();
7871     }
7872   }
7873 #pragma omp target parallel for
7874   for (int i = 0; i < 10; ++i) {
7875 #pragma omp task
7876     {
7877       bar();
7878     }
7879   }
7880 #pragma omp target parallel for
7881   for (int i = 0; i < 10; ++i) {
7882 #pragma omp taskyield
7883     bar();
7884   }
7885 #pragma omp target parallel for
7886   for (int i = 0; i < 10; ++i) {
7887 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
7888     bar();
7889   }
7890 #pragma omp target parallel for
7891   for (int i = 0; i < 10; ++i) {
7892 #pragma omp taskwait
7893     bar();
7894   }
7895 #pragma omp target parallel for
7896   for (int i = 0; i < 10; ++i) {
7897 #pragma omp flush
7898     bar();
7899   }
7900 #pragma omp target parallel for
7901   for (int i = 0; i < 10; ++i) {
7902 #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?}}
7903     bar();
7904   }
7905 #pragma omp target parallel for ordered
7906   for (int i = 0; i < 10; ++i) {
7907 #pragma omp ordered // OK
7908     bar();
7909   }
7910 #pragma omp target parallel for
7911   for (int i = 0; i < 10; ++i) {
7912 #pragma omp atomic
7913     ++a;
7914   }
7915 #pragma omp target parallel for
7916   for (int i = 0; i < 10; ++i) {
7917 #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
7918     ++a;
7919   }
7920 #pragma omp target parallel for
7921   for (int i = 0; i < 10; ++i) {
7922 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
7923     ++a;
7924   }
7925 #pragma omp target parallel for
7926   for (int i = 0; i < 10; ++i) {
7927 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
7928     for (int i = 0; i < 10; ++i)
7929       ;
7930   }
7931 #pragma omp target parallel for
7932   for (int i = 0; i < 10; ++i) {
7933 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
7934     ++a;
7935   }
7936 #pragma omp target parallel for
7937   for (int i = 0; i < 10; ++i) {
7938 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
7939     ++a;
7940   }
7941 #pragma omp target parallel for
7942   for (int i = 0; i < 10; ++i) {
7943 #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?}}
7944     ++a;
7945   }
7946 #pragma omp target parallel for
7947   for (int i = 0; i < 10; ++i) {
7948 #pragma omp taskloop
7949   for (int i = 0; i < 10; ++i)
7950     ++a;
7951   }
7952 #pragma omp target parallel for
7953   for (int i = 0; i < 10; ++i) {
7954 #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?}}
7955     for (int j = 0; j < 10; ++j)
7956       ;
7957   }
7958 #pragma omp target parallel for
7959   for (int i = 0; i < 10; ++i) {
7960 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
7961     a++;
7962   }
7963 #pragma omp target parallel for
7964   for (int i = 0; i < 10; ++i) {
7965 #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?}}
7966     for (int j = 0; j < 10; ++j)
7967       ;
7968   }
7969 #pragma omp target parallel for
7970   for (int i = 0; i < 10; ++i) {
7971 #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?}}
7972     for (int j = 0; j < 10; ++j)
7973       ;
7974   }
7975 #pragma omp target parallel for
7976   for (int i = 0; i < 10; ++i) {
7977 #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?}}
7978     for (int j = 0; j < 10; ++j)
7979       ;
7980   }
7981 
7982 // TEAMS DIRECTIVE
7983 #pragma omp target
7984 #pragma omp teams
7985 #pragma omp parallel
7986   bar();
7987 #pragma omp target
7988 #pragma omp teams
7989 #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?}}
7990   for (int i = 0; i < 10; ++i)
7991     ;
7992 #pragma omp target
7993 #pragma omp teams
7994 #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?}}
7995   for (int i = 0; i < 10; ++i)
7996     ;
7997 #pragma omp target
7998 #pragma omp teams
7999 #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?}}
8000   for (int i = 0; i < 10; ++i)
8001     ;
8002 #pragma omp target
8003 #pragma omp teams
8004 #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?}}
8005   {
8006     bar();
8007   }
8008 #pragma omp target
8009 #pragma omp teams
8010 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
8011   {
8012     bar();
8013   }
8014 #pragma omp target
8015 #pragma omp teams
8016 #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?}}
8017   bar();
8018 
8019 #pragma omp target
8020 #pragma omp teams
8021 #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?}}
8022   {
8023     bar();
8024   }
8025 #pragma omp target
8026 #pragma omp teams
8027 #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?}}
8028   {
8029     bar();
8030   }
8031 #pragma omp target
8032 #pragma omp teams
8033 #pragma omp parallel for
8034   for (int i = 0; i < 10; ++i)
8035     ;
8036 #pragma omp target
8037 #pragma omp teams
8038 #pragma omp parallel for simd
8039   for (int i = 0; i < 10; ++i)
8040     ;
8041 #pragma omp target
8042 #pragma omp teams
8043 #pragma omp parallel sections
8044   {
8045     bar();
8046   }
8047 #pragma omp target
8048 #pragma omp teams
8049 #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?}}
8050   {
8051     bar();
8052   }
8053 #pragma omp target
8054 #pragma omp teams
8055   {
8056 #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?}}
8057     bar();
8058   }
8059 #pragma omp target
8060 #pragma omp teams
8061   {
8062 #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?}}
8063     bar();
8064   }
8065 #pragma omp target
8066 #pragma omp teams
8067   {
8068 #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?}}
8069     bar();
8070   }
8071 #pragma omp target
8072 #pragma omp teams
8073   {
8074 #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?}}
8075     bar();
8076   }
8077 #pragma omp target
8078 #pragma omp teams
8079   {
8080 #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?}}
8081     bar();
8082   }
8083 #pragma omp target
8084 #pragma omp teams
8085   {
8086 #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?}}
8087     ++a;
8088   }
8089 #pragma omp target
8090 #pragma omp teams
8091   {
8092 #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}}
8093     ++a;
8094   }
8095 #pragma omp target
8096 #pragma omp teams
8097   {
8098 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
8099     ++a;
8100   }
8101 #pragma omp target
8102 #pragma omp teams
8103 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8104   for (int i = 0; i < 10; ++i)
8105     ;
8106 #pragma omp target
8107 #pragma omp teams
8108   {
8109 #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
8110   }
8111 #pragma omp target
8112 #pragma omp teams
8113   {
8114 #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}}
8115   }
8116 #pragma omp target
8117 #pragma omp teams
8118   {
8119 #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?}}
8120     ++a;
8121   }
8122 #pragma omp target
8123 #pragma omp teams
8124   {
8125 #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?}}
8126   for (int i = 0; i < 10; ++i)
8127     ++a;
8128   }
8129 #pragma omp target
8130 #pragma omp teams
8131 #pragma omp distribute
8132   for (int i = 0; i < 10; ++i)
8133     ;
8134 #pragma omp target
8135 #pragma omp teams
8136 #pragma omp distribute
8137   for (int i = 0; i < 10; ++i)
8138     ;
8139 #pragma omp distribute
8140   for (int j = 0; j < 10; ++j)
8141     ;
8142 #pragma omp target
8143 #pragma omp teams
8144   {
8145 #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}}
8146     ++a;
8147   }
8148 #pragma omp target
8149 #pragma omp teams
8150 #pragma omp distribute parallel for
8151   for (int i = 0; i < 10; ++i)
8152     ;
8153 #pragma omp target
8154 #pragma omp teams
8155   {
8156 #pragma omp distribute parallel for
8157   for (int i = 0; i < 10; ++i)
8158     ;
8159 #pragma omp distribute parallel for
8160   for (int j = 0; j < 10; ++j)
8161     ;
8162   }
8163 #pragma omp target
8164 #pragma omp teams
8165   {
8166 #pragma omp distribute parallel for simd
8167   for (int i = 0; i < 10; ++i)
8168     ;
8169 #pragma omp distribute parallel for simd
8170   for (int j = 0; j < 10; ++j)
8171     ;
8172   }
8173 #pragma omp target
8174 #pragma omp teams
8175   {
8176 #pragma omp distribute simd
8177   for (int i = 0; i < 10; ++i)
8178     ;
8179 #pragma omp distribute simd
8180   for (int j = 0; j < 10; ++j)
8181     ;
8182   }
8183 
8184 // TASKLOOP DIRECTIVE
8185 #pragma omp taskloop
8186   for (int i = 0; i < 10; ++i) {
8187 #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?}}
8188     for (int i = 0; i < 10; ++i)
8189       ;
8190   }
8191 #pragma omp taskloop
8192   for (int i = 0; i < 10; ++i) {
8193 #pragma omp simd
8194     for (int i = 0; i < 10; ++i)
8195       ;
8196   }
8197 #pragma omp taskloop
8198   for (int i = 0; i < 10; ++i) {
8199 #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?}}
8200     for (int i = 0; i < 10; ++i)
8201       ;
8202   }
8203 #pragma omp taskloop
8204   for (int i = 0; i < 10; ++i) {
8205 #pragma omp parallel
8206     for (int i = 0; i < 10; ++i)
8207       ;
8208   }
8209 #pragma omp taskloop
8210   for (int i = 0; i < 10; ++i) {
8211 #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?}}
8212     {
8213       bar();
8214     }
8215   }
8216 #pragma omp taskloop
8217   for (int i = 0; i < 10; ++i) {
8218 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
8219     {
8220       bar();
8221     }
8222   }
8223 #pragma omp taskloop
8224   for (int i = 0; i < 10; ++i) {
8225 #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?}}
8226     {
8227       bar();
8228     }
8229   }
8230 
8231 #pragma omp taskloop
8232   for (int i = 0; i < 10; ++i) {
8233 #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
8234     {
8235       bar();
8236     }
8237   }
8238 #pragma omp taskloop
8239   for (int i = 0; i < 10; ++i) {
8240 #pragma omp critical
8241     {
8242       bar();
8243     }
8244   }
8245 #pragma omp taskloop
8246   for (int i = 0; i < 10; ++i) {
8247 #pragma omp parallel
8248     {
8249 #pragma omp single // OK
8250       {
8251         bar();
8252       }
8253 #pragma omp for // OK
8254       for (int i = 0; i < 10; ++i)
8255         ;
8256 #pragma omp sections // OK
8257       {
8258         bar();
8259       }
8260     }
8261   }
8262 #pragma omp taskloop
8263   for (int i = 0; i < 10; ++i) {
8264 #pragma omp parallel for
8265     for (int i = 0; i < 10; ++i)
8266       ;
8267   }
8268 #pragma omp taskloop
8269   for (int i = 0; i < 10; ++i) {
8270 #pragma omp parallel for simd
8271     for (int i = 0; i < 10; ++i)
8272       ;
8273   }
8274 #pragma omp taskloop
8275   for (int i = 0; i < 10; ++i) {
8276 #pragma omp parallel sections
8277     {
8278       bar();
8279     }
8280   }
8281 #pragma omp taskloop
8282   for (int i = 0; i < 10; ++i) {
8283 #pragma omp task
8284     {
8285       bar();
8286     }
8287   }
8288 #pragma omp taskloop
8289   for (int i = 0; i < 10; ++i) {
8290 #pragma omp taskyield
8291     bar();
8292   }
8293 #pragma omp taskloop
8294   for (int i = 0; i < 10; ++i) {
8295 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
8296     bar();
8297   }
8298 #pragma omp taskloop
8299   for (int i = 0; i < 10; ++i) {
8300 #pragma omp taskwait
8301     bar();
8302   }
8303 #pragma omp taskloop
8304   for (int i = 0; i < 10; ++i) {
8305 #pragma omp flush
8306     bar();
8307   }
8308 #pragma omp taskloop
8309   for (int i = 0; i < 10; ++i) {
8310 #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?}}
8311     bar();
8312   }
8313 #pragma omp taskloop
8314   for (int i = 0; i < 10; ++i) {
8315 #pragma omp atomic
8316     ++a;
8317   }
8318 #pragma omp taskloop
8319   for (int i = 0; i < 10; ++i) {
8320 #pragma omp target
8321     ++a;
8322   }
8323 #pragma omp taskloop
8324   for (int i = 0; i < 10; ++i) {
8325 #pragma omp target parallel
8326     ++a;
8327   }
8328 #pragma omp taskloop
8329   for (int i = 0; i < 10; ++i) {
8330 #pragma omp target parallel for
8331     for (int i = 0; i < 10; ++i)
8332       ;
8333   }
8334 #pragma omp taskloop
8335   for (int i = 0; i < 10; ++i) {
8336 #pragma omp target enter data map(to: a)
8337     ++a;
8338   }
8339 #pragma omp taskloop
8340   for (int i = 0; i < 10; ++i) {
8341 #pragma omp target exit data map(from: a)
8342     ++a;
8343   }
8344 #pragma omp taskloop
8345   for (int i = 0; i < 10; ++i) {
8346 #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?}}
8347     ++a;
8348   }
8349 #pragma omp taskloop
8350   for (int i = 0; i < 10; ++i) {
8351 #pragma omp taskloop
8352   for (int i = 0; i < 10; ++i)
8353     ++a;
8354   }
8355 #pragma omp taskloop
8356   for (int i = 0; i < 10; ++i) {
8357 #pragma omp target update to(a)
8358     ++a;
8359   }
8360 #pragma omp taskloop
8361   for (int i = 0; i < 10; ++i) {
8362 #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?}}
8363     for (int i = 0; i < 10; ++i)
8364       ;
8365   }
8366 #pragma omp taskloop
8367   for (int i = 0; i < 10; ++i) {
8368 #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?}}
8369     for (int i = 0; i < 10; ++i)
8370       ;
8371   }
8372 #pragma omp taskloop
8373   for (int i = 0; i < 10; ++i) {
8374 #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?}}
8375     for (int i = 0; i < 10; ++i)
8376       ;
8377   }
8378 #pragma omp taskloop
8379   for (int i = 0; i < 10; ++i) {
8380 #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?}}
8381     for (int i = 0; i < 10; ++i)
8382       ;
8383   }
8384 
8385 // DISTRIBUTE DIRECTIVE
8386 #pragma omp target
8387 #pragma omp teams
8388 #pragma omp distribute
8389   for (int i = 0; i < 10; ++i) {
8390 #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?}}
8391     for (int i = 0; i < 10; ++i)
8392       ;
8393   }
8394 #pragma omp target
8395 #pragma omp teams
8396 #pragma omp distribute
8397   for (int i = 0; i < 10; ++i) {
8398 #pragma omp for
8399     for (int i = 0; i < 10; ++i)
8400       ;
8401   }
8402 #pragma omp target
8403 #pragma omp teams
8404 #pragma omp distribute
8405   for (int i = 0; i < 10; ++i) {
8406 #pragma omp simd
8407     for (int i = 0; i < 10; ++i)
8408       ;
8409   }
8410 #pragma omp target
8411 #pragma omp teams
8412 #pragma omp distribute
8413   for (int i = 0; i < 10; ++i) {
8414 #pragma omp for simd
8415     for (int i = 0; i < 10; ++i)
8416       ;
8417   }
8418 #pragma omp target
8419 #pragma omp teams
8420 #pragma omp distribute
8421   for (int i = 0; i < 10; ++i) {
8422 #pragma omp parallel
8423     for (int i = 0; i < 10; ++i)
8424       ;
8425   }
8426 #pragma omp target
8427 #pragma omp teams
8428 #pragma omp distribute
8429   for (int i = 0; i < 10; ++i) {
8430 #pragma omp sections
8431     {
8432       bar();
8433     }
8434   }
8435 #pragma omp target
8436 #pragma omp teams
8437 #pragma omp distribute
8438   for (int i = 0; i < 10; ++i) {
8439 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
8440     {
8441       bar();
8442     }
8443   }
8444 #pragma omp target
8445 #pragma omp teams
8446 #pragma omp distribute
8447   for (int i = 0; i < 10; ++i) {
8448 #pragma omp single
8449     {
8450       bar();
8451     }
8452   }
8453 #pragma omp target
8454 #pragma omp teams
8455 #pragma omp distribute
8456   for (int i = 0; i < 10; ++i) {
8457 #pragma omp master
8458     {
8459       bar();
8460     }
8461   }
8462 #pragma omp target
8463 #pragma omp teams
8464 #pragma omp distribute
8465   for (int i = 0; i < 10; ++i) {
8466 #pragma omp critical
8467     {
8468       bar();
8469     }
8470   }
8471 #pragma omp target
8472 #pragma omp teams
8473 #pragma omp distribute
8474   for (int i = 0; i < 10; ++i) {
8475 #pragma omp parallel
8476     {
8477 #pragma omp single
8478       {
8479 	bar();
8480       }
8481     }
8482   }
8483 #pragma omp target
8484 #pragma omp teams
8485 #pragma omp distribute
8486   for (int i = 0; i < 10; ++i) {
8487 #pragma omp parallel for
8488     for (int i = 0; i < 10; ++i)
8489       ;
8490   }
8491 #pragma omp target
8492 #pragma omp teams
8493 #pragma omp distribute
8494   for (int i = 0; i < 10; ++i) {
8495 #pragma omp parallel for simd
8496     for (int i = 0; i < 10; ++i)
8497       ;
8498   }
8499 #pragma omp target
8500 #pragma omp teams
8501 #pragma omp distribute
8502   for (int i = 0; i < 10; ++i) {
8503 #pragma omp parallel sections
8504     {
8505       bar();
8506     }
8507   }
8508 #pragma omp target
8509 #pragma omp teams
8510 #pragma omp distribute
8511   for (int i = 0; i < 10; ++i) {
8512 #pragma omp task
8513     {
8514       bar();
8515     }
8516   }
8517 #pragma omp target
8518 #pragma omp teams
8519 #pragma omp distribute
8520   for (int i = 0; i < 10; ++i) {
8521 #pragma omp taskyield
8522     bar();
8523   }
8524 #pragma omp target
8525 #pragma omp teams
8526 #pragma omp distribute
8527   for (int i = 0; i < 10; ++i) {
8528 #pragma omp barrier
8529     bar();
8530   }
8531 #pragma omp target
8532 #pragma omp teams
8533 #pragma omp distribute
8534   for (int i = 0; i < 10; ++i) {
8535 #pragma omp taskwait
8536     bar();
8537   }
8538 #pragma omp target
8539 #pragma omp teams
8540 #pragma omp distribute
8541   for (int i = 0; i < 10; ++i) {
8542 #pragma omp flush
8543     bar();
8544   }
8545 #pragma omp target
8546 #pragma omp teams
8547 #pragma omp distribute
8548   for (int i = 0; i < 10; ++i) {
8549 #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?}}
8550     bar();
8551   }
8552 #pragma omp target
8553 #pragma omp teams
8554 #pragma omp distribute
8555   for (int i = 0; i < 10; ++i) {
8556 #pragma omp atomic
8557     ++a;
8558   }
8559 #pragma omp target
8560 #pragma omp teams
8561 #pragma omp distribute
8562   for (int i = 0; i < 10; ++i) {
8563 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8564     ++a;
8565   }
8566 #pragma omp target
8567 #pragma omp teams
8568 #pragma omp distribute
8569   for (int i = 0; i < 10; ++i) {
8570 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
8571     ++a;
8572   }
8573 #pragma omp target
8574 #pragma omp teams
8575 #pragma omp distribute
8576   for (int i = 0; i < 10; ++i) {
8577 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8578     for (int i = 0; i < 10; ++i)
8579       ;
8580   }
8581 #pragma omp target
8582 #pragma omp teams
8583 #pragma omp distribute
8584   for (int i = 0; i < 10; ++i) {
8585 #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?}}
8586     ++a;
8587   }
8588   return foo<int>();
8589 #pragma omp target
8590 #pragma omp teams
8591 #pragma omp distribute
8592   for (int i = 0; i < 10; ++i) {
8593 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8594     ++a;
8595   }
8596 #pragma omp target
8597 #pragma omp teams
8598 #pragma omp distribute
8599   for (int i = 0; i < 10; ++i) {
8600 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8601     ++a;
8602   }
8603 #pragma omp target
8604 #pragma omp teams
8605 #pragma omp distribute
8606   for (int i = 0; i < 10; ++i) {
8607 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8608     ++a;
8609   }
8610 #pragma omp target
8611 #pragma omp teams
8612 #pragma omp distribute
8613   for (int i = 0; i < 10; ++i) {
8614 #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?}}
8615   for (int i = 0; i < 10; ++i)
8616     ++a;
8617   }
8618 #pragma omp target
8619 #pragma omp teams
8620 #pragma omp distribute
8621   for (int i = 0; i < 10; ++i) {
8622 #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?}}
8623   for (int i = 0; i < 10; ++i)
8624     ++a;
8625   }
8626 #pragma omp target
8627 #pragma omp teams
8628 #pragma omp distribute
8629   for (int i = 0; i < 10; ++i) {
8630 #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?}}
8631   for (int i = 0; i < 10; ++i)
8632     ++a;
8633   }
8634 
8635   // DISTRIBUTE PARALLEL FOR DIRECTIVE
8636 #pragma omp target
8637 #pragma omp teams
8638 #pragma omp distribute parallel for
8639   for (int i = 0; i < 10; ++i) {
8640 #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?}}
8641     for (int i = 0; i < 10; ++i)
8642       ;
8643   }
8644 
8645 #pragma omp target
8646 #pragma omp teams
8647 #pragma omp distribute parallel for
8648   for (int i = 0; i < 10; ++i) {
8649 #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?}}
8650     for (int i = 0; i < 10; ++i)
8651       ;
8652   }
8653 #pragma omp target
8654 #pragma omp teams
8655 #pragma omp distribute parallel for
8656   for (int i = 0; i < 10; ++i) {
8657 #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?}}
8658     for (int i = 0; i < 10; ++i)
8659       ;
8660   }
8661 #pragma omp target
8662 #pragma omp teams
8663 #pragma omp distribute parallel for
8664   for (int i = 0; i < 10; ++i) {
8665 #pragma omp simd
8666     for (int i = 0; i < 10; ++i)
8667       ;
8668   }
8669 #pragma omp target
8670 #pragma omp teams
8671 #pragma omp distribute parallel for
8672   for (int i = 0; i < 10; ++i) {
8673 #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?}}
8674     for (int i = 0; i < 10; ++i)
8675       ;
8676   }
8677 #pragma omp target
8678 #pragma omp teams
8679 #pragma omp distribute parallel for
8680   for (int i = 0; i < 10; ++i) {
8681 #pragma omp parallel
8682     for (int i = 0; i < 10; ++i)
8683       ;
8684   }
8685 #pragma omp target
8686 #pragma omp teams
8687 #pragma omp distribute parallel for
8688   for (int i = 0; i < 10; ++i) {
8689 #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?}}
8690     {
8691       bar();
8692     }
8693   }
8694 #pragma omp target
8695 #pragma omp teams
8696 #pragma omp distribute parallel for
8697   for (int i = 0; i < 10; ++i) {
8698 #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
8699     {
8700       bar();
8701     }
8702   }
8703 #pragma omp target
8704 #pragma omp teams
8705 #pragma omp distribute parallel for
8706   for (int i = 0; i < 10; ++i) {
8707 #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?}}
8708     {
8709       bar();
8710     }
8711   }
8712 #pragma omp target
8713 #pragma omp teams
8714 #pragma omp distribute parallel for
8715   for (int i = 0; i < 10; ++i) {
8716 #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
8717     {
8718       bar();
8719     }
8720   }
8721 #pragma omp target
8722 #pragma omp teams
8723 #pragma omp distribute parallel for
8724   for (int i = 0; i < 10; ++i) {
8725 #pragma omp critical
8726     {
8727       bar();
8728     }
8729   }
8730 #pragma omp target
8731 #pragma omp teams
8732 #pragma omp distribute parallel for
8733   for (int i = 0; i < 10; ++i) {
8734 #pragma omp parallel
8735     {
8736 #pragma omp single
8737       {
8738 	bar();
8739       }
8740     }
8741   }
8742 #pragma omp target
8743 #pragma omp teams
8744 #pragma omp distribute parallel for
8745   for (int i = 0; i < 10; ++i) {
8746 #pragma omp parallel for
8747     for (int i = 0; i < 10; ++i)
8748       ;
8749   }
8750 #pragma omp target
8751 #pragma omp teams
8752 #pragma omp distribute parallel for
8753   for (int i = 0; i < 10; ++i) {
8754 #pragma omp parallel for simd
8755     for (int i = 0; i < 10; ++i)
8756       ;
8757   }
8758 #pragma omp target
8759 #pragma omp teams
8760 #pragma omp distribute parallel for
8761   for (int i = 0; i < 10; ++i) {
8762 #pragma omp parallel sections
8763     {
8764       bar();
8765     }
8766   }
8767 #pragma omp target
8768 #pragma omp teams
8769 #pragma omp distribute parallel for
8770   for (int i = 0; i < 10; ++i) {
8771 #pragma omp task
8772     {
8773       bar();
8774     }
8775   }
8776 #pragma omp target
8777 #pragma omp teams
8778 #pragma omp distribute parallel for
8779   for (int i = 0; i < 10; ++i) {
8780 #pragma omp taskyield
8781     bar();
8782   }
8783 #pragma omp target
8784 #pragma omp teams
8785 #pragma omp distribute parallel for
8786   for (int i = 0; i < 10; ++i) {
8787 #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
8788     bar();
8789   }
8790 #pragma omp target
8791 #pragma omp teams
8792 #pragma omp distribute parallel for
8793   for (int i = 0; i < 10; ++i) {
8794 #pragma omp taskwait
8795     bar();
8796   }
8797 #pragma omp target
8798 #pragma omp teams
8799 #pragma omp distribute parallel for
8800   for (int i = 0; i < 10; ++i) {
8801 #pragma omp flush
8802     bar();
8803   }
8804 #pragma omp target
8805 #pragma omp teams
8806 #pragma omp distribute parallel for
8807   for (int i = 0; i < 10; ++i) {
8808 #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?}}
8809     bar();
8810   }
8811 #pragma omp target
8812 #pragma omp teams
8813 #pragma omp distribute parallel for
8814   for (int i = 0; i < 10; ++i) {
8815 #pragma omp atomic
8816     ++a;
8817   }
8818 #pragma omp target
8819 #pragma omp teams
8820 #pragma omp distribute parallel for
8821   for (int i = 0; i < 10; ++i) {
8822 #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8823     ++a;
8824   }
8825 #pragma omp target
8826 #pragma omp teams
8827 #pragma omp distribute parallel for
8828   for (int i = 0; i < 10; ++i) {
8829 #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
8830     ++a;
8831   }
8832 #pragma omp target
8833 #pragma omp teams
8834 #pragma omp distribute parallel for
8835   for (int i = 0; i < 10; ++i) {
8836 #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8837     for (int i = 0; i < 10; ++i)
8838       ;
8839   }
8840 #pragma omp target
8841 #pragma omp teams
8842 #pragma omp distribute parallel for
8843   for (int i = 0; i < 10; ++i) {
8844 #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?}}
8845     ++a;
8846   }
8847   return foo<int>();
8848 #pragma omp target
8849 #pragma omp teams
8850 #pragma omp distribute parallel for
8851   for (int i = 0; i < 10; ++i) {
8852 #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8853     ++a;
8854   }
8855 #pragma omp target
8856 #pragma omp teams
8857 #pragma omp distribute parallel for
8858   for (int i = 0; i < 10; ++i) {
8859 #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8860     ++a;
8861   }
8862 #pragma omp target
8863 #pragma omp teams
8864 #pragma omp distribute parallel for
8865   for (int i = 0; i < 10; ++i) {
8866 #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8867     ++a;
8868   }
8869 #pragma omp target
8870 #pragma omp teams
8871 #pragma omp distribute parallel for
8872   for (int i = 0; i < 10; ++i) {
8873 #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?}}
8874   for (int i = 0; i < 10; ++i)
8875     ++a;
8876   }
8877 
8878 // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
8879 #pragma omp target
8880 #pragma omp teams
8881 #pragma omp distribute parallel for simd
8882   for (int i = 0; i < 10; ++i) {
8883 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8884     for (int i = 0; i < 10; ++i)
8885       ;
8886   }
8887 #pragma omp target
8888 #pragma omp teams
8889 #pragma omp distribute parallel for simd
8890   for (int i = 0; i < 10; ++i) {
8891 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8892     for (int i = 0; i < 10; ++i)
8893       ;
8894   }
8895 #pragma omp target
8896 #pragma omp teams
8897 #pragma omp distribute parallel for simd
8898   for (int i = 0; i < 10; ++i) {
8899 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8900     for (int i = 0; i < 10; ++i)
8901       ;
8902   }
8903 #pragma omp target
8904 #pragma omp teams
8905 #pragma omp distribute parallel for simd
8906   for (int i = 0; i < 10; ++i) {
8907 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8908     for (int i = 0; i < 10; ++i)
8909       ;
8910   }
8911 #pragma omp target
8912 #pragma omp teams
8913 #pragma omp distribute parallel for simd
8914   for (int i = 0; i < 10; ++i) {
8915 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8916     for (int i = 0; i < 10; ++i)
8917       ;
8918   }
8919 #pragma omp target
8920 #pragma omp teams
8921 #pragma omp distribute parallel for simd
8922   for (int i = 0; i < 10; ++i) {
8923 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8924     for (int i = 0; i < 10; ++i)
8925       ;
8926   }
8927 #pragma omp target
8928 #pragma omp teams
8929 #pragma omp distribute parallel for simd
8930   for (int i = 0; i < 10; ++i) {
8931 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8932     {
8933       bar();
8934     }
8935   }
8936 #pragma omp target
8937 #pragma omp teams
8938 #pragma omp distribute parallel for simd
8939   for (int i = 0; i < 10; ++i) {
8940 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8941     {
8942       bar();
8943     }
8944   }
8945 #pragma omp target
8946 #pragma omp teams
8947 #pragma omp distribute parallel for simd
8948   for (int i = 0; i < 10; ++i) {
8949 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8950     {
8951       bar();
8952     }
8953   }
8954 #pragma omp target
8955 #pragma omp teams
8956 #pragma omp distribute parallel for simd
8957   for (int i = 0; i < 10; ++i) {
8958 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8959     {
8960       bar();
8961     }
8962   }
8963 #pragma omp target
8964 #pragma omp teams
8965 #pragma omp distribute parallel for simd
8966   for (int i = 0; i < 10; ++i) {
8967 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8968     {
8969       bar();
8970     }
8971   }
8972 #pragma omp target
8973 #pragma omp teams
8974 #pragma omp distribute parallel for simd
8975   for (int i = 0; i < 10; ++i) {
8976 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8977     {
8978 #pragma omp single
8979       {
8980 	bar();
8981       }
8982     }
8983   }
8984 #pragma omp target
8985 #pragma omp teams
8986 #pragma omp distribute parallel for simd
8987   for (int i = 0; i < 10; ++i) {
8988 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8989     for (int i = 0; i < 10; ++i)
8990       ;
8991   }
8992 #pragma omp target
8993 #pragma omp teams
8994 #pragma omp distribute parallel for simd
8995   for (int i = 0; i < 10; ++i) {
8996 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8997     for (int i = 0; i < 10; ++i)
8998       ;
8999   }
9000 #pragma omp target
9001 #pragma omp teams
9002 #pragma omp distribute parallel for simd
9003   for (int i = 0; i < 10; ++i) {
9004 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9005     {
9006       bar();
9007     }
9008   }
9009 #pragma omp target
9010 #pragma omp teams
9011 #pragma omp distribute parallel for simd
9012   for (int i = 0; i < 10; ++i) {
9013 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9014     {
9015       bar();
9016     }
9017   }
9018 #pragma omp target
9019 #pragma omp teams
9020 #pragma omp distribute parallel for simd
9021   for (int i = 0; i < 10; ++i) {
9022 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9023     bar();
9024   }
9025 #pragma omp target
9026 #pragma omp teams
9027 #pragma omp distribute parallel for simd
9028   for (int i = 0; i < 10; ++i) {
9029 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9030     bar();
9031   }
9032 #pragma omp target
9033 #pragma omp teams
9034 #pragma omp distribute parallel for simd
9035   for (int i = 0; i < 10; ++i) {
9036 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9037     bar();
9038   }
9039 #pragma omp target
9040 #pragma omp teams
9041 #pragma omp distribute parallel for simd
9042   for (int i = 0; i < 10; ++i) {
9043 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9044     bar();
9045   }
9046 #pragma omp target
9047 #pragma omp teams
9048 #pragma omp distribute parallel for simd
9049   for (int i = 0; i < 10; ++i) {
9050 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9051     bar();
9052   }
9053 #pragma omp target
9054 #pragma omp teams
9055 #pragma omp distribute parallel for simd
9056   for (int i = 0; i < 10; ++i) {
9057 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9058     ++a;
9059   }
9060 #pragma omp target
9061 #pragma omp teams
9062 #pragma omp distribute parallel for simd
9063   for (int i = 0; i < 10; ++i) {
9064 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9065     ++a;
9066   }
9067 #pragma omp target
9068 #pragma omp teams
9069 #pragma omp distribute parallel for simd
9070   for (int i = 0; i < 10; ++i) {
9071 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9072     ++a;
9073   }
9074 #pragma omp target
9075 #pragma omp teams
9076 #pragma omp distribute parallel for simd
9077   for (int i = 0; i < 10; ++i) {
9078 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9079     ++a;
9080   }
9081   return foo<int>();
9082 #pragma omp target
9083 #pragma omp teams
9084 #pragma omp distribute parallel for simd
9085   for (int i = 0; i < 10; ++i) {
9086 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9087     ++a;
9088   }
9089 #pragma omp target
9090 #pragma omp teams
9091 #pragma omp distribute parallel for simd
9092   for (int i = 0; i < 10; ++i) {
9093 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9094     ++a;
9095   }
9096 #pragma omp target
9097 #pragma omp teams
9098 #pragma omp distribute parallel for simd
9099   for (int i = 0; i < 10; ++i) {
9100 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9101     ++a;
9102   }
9103 #pragma omp target
9104 #pragma omp teams
9105 #pragma omp distribute parallel for simd
9106   for (int i = 0; i < 10; ++i) {
9107 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9108     for (int i = 0; i < 10; ++i)
9109       ;
9110   }
9111 
9112 // DISTRIBUTE SIMD DIRECTIVE
9113 #pragma omp target
9114 #pragma omp teams
9115 #pragma omp distribute simd
9116   for (int i = 0; i < 10; ++i) {
9117 #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9118     for (int i = 0; i < 10; ++i)
9119       ;
9120   }
9121 #pragma omp target
9122 #pragma omp teams
9123 #pragma omp distribute simd
9124   for (int i = 0; i < 10; ++i) {
9125 #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9126     for (int i = 0; i < 10; ++i)
9127       ;
9128   }
9129 #pragma omp target
9130 #pragma omp teams
9131 #pragma omp distribute simd
9132   for (int i = 0; i < 10; ++i) {
9133 #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9134     for (int i = 0; i < 10; ++i)
9135       ;
9136   }
9137 #pragma omp target
9138 #pragma omp teams
9139 #pragma omp distribute simd
9140   for (int i = 0; i < 10; ++i) {
9141 #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9142     for (int i = 0; i < 10; ++i)
9143       ;
9144   }
9145 #pragma omp target
9146 #pragma omp teams
9147 #pragma omp distribute simd
9148   for (int i = 0; i < 10; ++i) {
9149 #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9150     for (int i = 0; i < 10; ++i)
9151       ;
9152   }
9153 #pragma omp target
9154 #pragma omp teams
9155 #pragma omp distribute simd
9156   for (int i = 0; i < 10; ++i) {
9157 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9158     for (int i = 0; i < 10; ++i)
9159       ;
9160   }
9161 #pragma omp target
9162 #pragma omp teams
9163 #pragma omp distribute simd
9164   for (int i = 0; i < 10; ++i) {
9165 #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9166     {
9167       bar();
9168     }
9169   }
9170 #pragma omp target
9171 #pragma omp teams
9172 #pragma omp distribute simd
9173   for (int i = 0; i < 10; ++i) {
9174 #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9175     {
9176       bar();
9177     }
9178   }
9179 #pragma omp target
9180 #pragma omp teams
9181 #pragma omp distribute simd
9182   for (int i = 0; i < 10; ++i) {
9183 #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9184     {
9185       bar();
9186     }
9187   }
9188 #pragma omp target
9189 #pragma omp teams
9190 #pragma omp distribute simd
9191   for (int i = 0; i < 10; ++i) {
9192 #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9193     {
9194       bar();
9195     }
9196   }
9197 #pragma omp target
9198 #pragma omp teams
9199 #pragma omp distribute simd
9200   for (int i = 0; i < 10; ++i) {
9201 #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9202     {
9203       bar();
9204     }
9205   }
9206 #pragma omp target
9207 #pragma omp teams
9208 #pragma omp distribute simd
9209   for (int i = 0; i < 10; ++i) {
9210 #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9211     {
9212 #pragma omp single
9213       {
9214 	bar();
9215       }
9216     }
9217   }
9218 #pragma omp target
9219 #pragma omp teams
9220 #pragma omp distribute simd
9221   for (int i = 0; i < 10; ++i) {
9222 #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9223     for (int i = 0; i < 10; ++i)
9224       ;
9225   }
9226 #pragma omp target
9227 #pragma omp teams
9228 #pragma omp distribute simd
9229   for (int i = 0; i < 10; ++i) {
9230 #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9231     for (int i = 0; i < 10; ++i)
9232       ;
9233   }
9234 #pragma omp target
9235 #pragma omp teams
9236 #pragma omp distribute simd
9237   for (int i = 0; i < 10; ++i) {
9238 #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9239     {
9240       bar();
9241     }
9242   }
9243 #pragma omp target
9244 #pragma omp teams
9245 #pragma omp distribute simd
9246   for (int i = 0; i < 10; ++i) {
9247 #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9248     {
9249       bar();
9250     }
9251   }
9252 #pragma omp target
9253 #pragma omp teams
9254 #pragma omp distribute simd
9255   for (int i = 0; i < 10; ++i) {
9256 #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9257     bar();
9258   }
9259 #pragma omp target
9260 #pragma omp teams
9261 #pragma omp distribute simd
9262   for (int i = 0; i < 10; ++i) {
9263 #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9264     bar();
9265   }
9266 #pragma omp target
9267 #pragma omp teams
9268 #pragma omp distribute simd
9269   for (int i = 0; i < 10; ++i) {
9270 #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9271     bar();
9272   }
9273 #pragma omp target
9274 #pragma omp teams
9275 #pragma omp distribute simd
9276   for (int i = 0; i < 10; ++i) {
9277 #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9278     bar();
9279   }
9280 #pragma omp target
9281 #pragma omp teams
9282 #pragma omp distribute simd
9283   for (int i = 0; i < 10; ++i) {
9284 #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9285     bar();
9286   }
9287 #pragma omp target
9288 #pragma omp teams
9289 #pragma omp distribute simd
9290   for (int i = 0; i < 10; ++i) {
9291 #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9292     ++a;
9293   }
9294 #pragma omp target
9295 #pragma omp teams
9296 #pragma omp distribute simd
9297   for (int i = 0; i < 10; ++i) {
9298 #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9299     ++a;
9300   }
9301 #pragma omp target
9302 #pragma omp teams
9303 #pragma omp distribute simd
9304   for (int i = 0; i < 10; ++i) {
9305 #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9306     ++a;
9307   }
9308 #pragma omp target
9309 #pragma omp teams
9310 #pragma omp distribute simd
9311   for (int i = 0; i < 10; ++i) {
9312 #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9313     ++a;
9314   }
9315   return foo<int>();
9316 #pragma omp target
9317 #pragma omp teams
9318 #pragma omp distribute simd
9319   for (int i = 0; i < 10; ++i) {
9320 #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9321     ++a;
9322   }
9323 #pragma omp target
9324 #pragma omp teams
9325 #pragma omp distribute simd
9326   for (int i = 0; i < 10; ++i) {
9327 #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9328     ++a;
9329   }
9330 #pragma omp target
9331 #pragma omp teams
9332 #pragma omp distribute simd
9333   for (int i = 0; i < 10; ++i) {
9334 #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9335     ++a;
9336   }
9337 #pragma omp target
9338 #pragma omp teams
9339 #pragma omp distribute simd
9340   for (int i = 0; i < 10; ++i) {
9341 #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9342     for (int i = 0; i < 10; ++i)
9343       ;
9344   }
9345 }
9346