Clang Project

clang_source_code/test/OpenMP/nesting_of_regions.cpp
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2
3// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s
4// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
5
6void bar();
7
8template <class T>
9void foo() {
10  T a = T();
11// PARALLEL DIRECTIVE
12#pragma omp parallel
13#pragma omp for
14  for (int i = 0; i < 10; ++i)
15    ;
16#pragma omp parallel
17#pragma omp simd
18  for (int i = 0; i < 10; ++i)
19    ;
20#pragma omp parallel
21#pragma omp for simd
22  for (int i = 0; i < 10; ++i)
23    ;
24#pragma omp parallel
25#pragma omp sections
26  {
27    bar();
28  }
29#pragma omp parallel
30#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
31  {
32    bar();
33  }
34#pragma omp parallel
35#pragma omp single
36  bar();
37
38#pragma omp parallel
39#pragma omp master
40  {
41    bar();
42  }
43#pragma omp parallel
44#pragma omp critical
45  {
46    bar();
47  }
48#pragma omp parallel
49#pragma omp parallel for
50  for (int i = 0; i < 10; ++i)
51    ;
52#pragma omp parallel
53#pragma omp parallel for simd
54  for (int i = 0; i < 10; ++i)
55    ;
56#pragma omp parallel
57#pragma omp parallel sections
58  {
59    bar();
60  }
61#pragma omp parallel
62#pragma omp task
63  {
64    bar();
65  }
66#pragma omp parallel
67  {
68#pragma omp taskyield
69    bar();
70  }
71#pragma omp parallel
72  {
73#pragma omp barrier
74    bar();
75  }
76#pragma omp parallel
77  {
78#pragma omp taskwait
79    bar();
80  }
81#pragma omp parallel
82  {
83#pragma omp flush
84    bar();
85  }
86#pragma omp parallel
87  {
88#pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
89    bar();
90  }
91#pragma omp parallel
92  {
93#pragma omp atomic
94    ++a;
95  }
96#pragma omp parallel
97  {
98#pragma omp target
99    ++a;
100  }
101#pragma omp parallel
102  {
103#pragma omp target parallel
104    ++a;
105  }
106#pragma omp parallel
107  {
108#pragma omp target parallel for
109  for (int i = 0; i < 10; ++i)
110    ;
111  }
112#pragma omp parallel
113  {
114#pragma omp target enter data map(to: a)
115    ++a;
116  }
117#pragma omp parallel
118  {
119#pragma omp target exit data map(from: a)
120    ++a;
121  }
122#pragma omp parallel
123  {
124#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
125    ++a;
126  }
127#pragma omp parallel
128  {
129#pragma omp taskloop
130  for (int i = 0; i < 10; ++i)
131    ++a;
132  }
133#pragma omp parallel
134  {
135#pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
136    for (int i = 0; i < 10; ++i)
137      ;
138  }
139#pragma omp parallel
140  {
141#pragma omp target update to(a)
142  }
143#pragma omp parallel
144  {
145#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
146    for (int i = 0; i < 10; ++i)
147      ;
148  }
149#pragma omp parallel
150  {
151#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
152    for (int i = 0; i < 10; ++i)
153      ;
154  }
155#pragma omp parallel
156  {
157#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
158    for (int i = 0; i < 10; ++i)
159      ;
160  }
161#pragma omp parallel
162  {
163#pragma omp target simd // OK
164    for (int i = 0; i < 10; ++i)
165      ;
166  }
167#pragma omp parallel
168  {
169#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
170    for (int i = 0; i < 10; ++i)
171      ;
172  }
173#pragma omp parallel
174  {
175#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
176    for (int i = 0; i < 10; ++i)
177      ;
178  }
179#pragma omp parallel
180  {
181#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
182    for (int i = 0; i < 10; ++i)
183      ;
184  }
185#pragma omp parallel
186  {
187#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
188    for (int i = 0; i < 10; ++i)
189      ;
190  }
191#pragma omp parallel
192  {
193#pragma omp target teams // OK
194    ++a;
195  }
196#pragma omp parallel
197  {
198#pragma omp target teams distribute // OK
199    for (int i = 0; i < 10; ++i)
200      ;
201  }
202#pragma omp parallel
203  {
204#pragma omp target teams distribute parallel for // OK
205    for (int i = 0; i < 10; ++i)
206      ;
207  }
208#pragma omp parallel
209  {
210#pragma omp target teams distribute parallel for simd // OK
211    for (int i = 0; i < 10; ++i)
212      ;
213  }
214#pragma omp parallel
215  {
216#pragma omp target teams distribute simd // OK
217    for (int i = 0; i < 10; ++i)
218      ;
219  }
220
221// SIMD DIRECTIVE
222#pragma omp simd
223  for (int i = 0; i < 10; ++i) {
224#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
225    for (int i = 0; i < 10; ++i)
226      ;
227  }
228#pragma omp simd
229  for (int i = 0; i < 10; ++i) {
230#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
231    for (int i = 0; i < 10; ++i)
232      ;
233  }
234#pragma omp simd
235  for (int i = 0; i < 10; ++i) {
236#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
237    for (int i = 0; i < 10; ++i)
238      ;
239  }
240#pragma omp simd
241  for (int i = 0; i < 10; ++i) {
242#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
243    for (int i = 0; i < 10; ++i)
244      ;
245  }
246#pragma omp simd
247  for (int i = 0; i < 10; ++i) {
248#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
249    {
250      bar();
251    }
252  }
253#pragma omp simd
254  for (int i = 0; i < 10; ++i) {
255#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
256    {
257      bar();
258    }
259  }
260#pragma omp simd
261  for (int i = 0; i < 10; ++i) {
262#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
263    {
264      bar();
265    }
266  }
267#pragma omp simd
268  for (int i = 0; i < 10; ++i) {
269#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
270    {
271      bar();
272    }
273  }
274#pragma omp simd
275  for (int i = 0; i < 10; ++i) {
276#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
277    {
278      bar();
279    }
280  }
281#pragma omp simd
282  for (int i = 0; i < 10; ++i) {
283#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
284    for (int i = 0; i < 10; ++i)
285      ;
286  }
287#pragma omp simd
288  for (int i = 0; i < 10; ++i) {
289#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
290    for (int i = 0; i < 10; ++i)
291      ;
292  }
293#pragma omp simd
294  for (int i = 0; i < 10; ++i) {
295#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
296    {
297      bar();
298    }
299  }
300#pragma omp simd
301  for (int i = 0; i < 10; ++i) {
302#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
303    {
304      bar();
305    }
306  }
307#pragma omp simd
308  for (int i = 0; i < 10; ++i) {
309#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
310    bar();
311  }
312#pragma omp simd
313  for (int i = 0; i < 10; ++i) {
314#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
315    bar();
316  }
317#pragma omp simd
318  for (int i = 0; i < 10; ++i) {
319#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
320    bar();
321  }
322#pragma omp simd
323  for (int i = 0; i < 10; ++i) {
324#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
325    bar();
326  }
327#pragma omp simd
328  for (int i = 0; i < 10; ++i) {
329#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
330    bar();
331  }
332#pragma omp simd
333  for (int i = 0; i < 10; ++i) {
334#pragma omp ordered simd // OK
335    bar();
336  }
337#pragma omp simd
338  for (int i = 0; i < 10; ++i) {
339#pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
340    bar();
341  }
342#pragma omp simd
343  for (int i = 0; i < 10; ++i) {
344#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
345    ++a;
346  }
347#pragma omp simd
348  for (int i = 0; i < 10; ++i) {
349#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
350    ++a;
351  }
352#pragma omp simd
353  for (int i = 0; i < 10; ++i) {
354#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
355    ++a;
356  }
357#pragma omp simd
358  for (int i = 0; i < 10; ++i) {
359#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
360    for (int i = 0; i < 10; ++i)
361      ;
362  }
363#pragma omp simd
364  for (int i = 0; i < 10; ++i) {
365#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
366    ++a;
367  }
368#pragma omp simd
369  for (int i = 0; i < 10; ++i) {
370#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
371    ++a;
372  }
373#pragma omp simd
374  for (int i = 0; i < 10; ++i) {
375#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
376    ++a;
377  }
378#pragma omp simd
379  for (int i = 0; i < 10; ++i) {
380#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
381  for (int i = 0; i < 10; ++i)
382    ++a;
383  }
384#pragma omp simd
385  for (int i = 0; i < 10; ++i) {
386#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
387    for (int j = 0; j < 10; ++j)
388      ;
389  }
390#pragma omp simd
391  for (int i = 0; i < 10; ++i) {
392#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
393  }
394#pragma omp simd
395  for (int i = 0; i < 10; ++i) {
396#pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
397    for (int j = 0; j < 10; ++j)
398      ;
399  }
400#pragma omp simd
401  for (int i = 0; i < 10; ++i) {
402#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
403    for (int j = 0; j < 10; ++j)
404      ;
405  }
406#pragma omp simd
407  for (int i = 0; i < 10; ++i) {
408#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
409    for (int j = 0; j < 10; ++j)
410      ;
411  }
412#pragma omp simd
413  for (int i = 0; i < 10; ++i) {
414#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
415    for (int j = 0; j < 10; ++j)
416      ;
417  }
418#pragma omp simd
419  for (int i = 0; i < 10; ++i) {
420#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
421    for (int j = 0; j < 10; ++j)
422      ;
423  }
424#pragma omp simd
425  for (int i = 0; i < 10; ++i) {
426#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
427    for (int j = 0; j < 10; ++j)
428      ;
429  }
430#pragma omp simd
431  for (int i = 0; i < 10; ++i) {
432#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
433    for (int j = 0; j < 10; ++j)
434      ;
435  }
436#pragma omp simd
437  for (int i = 0; i < 10; ++i) {
438#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
439    for (int j = 0; j < 10; ++j)
440      ;
441  }
442#pragma omp simd
443  for (int i = 0; i < 10; ++i) {
444#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
445    ++a;
446  }
447#pragma omp simd
448  for (int i = 0; i < 10; ++i) {
449#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
450    for (int j = 0; j < 10; ++j)
451      ;
452  }
453#pragma omp simd
454  for (int i = 0; i < 10; ++i) {
455#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
456    for (int j = 0; j < 10; ++j)
457      ;
458  }
459#pragma omp simd
460  for (int i = 0; i < 10; ++i) {
461#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
462    for (int j = 0; j < 10; ++j)
463      ;
464  }
465#pragma omp simd
466  for (int i = 0; i < 10; ++i) {
467#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
468    for (int j = 0; j < 10; ++j)
469      ;
470  }
471  
472// FOR DIRECTIVE
473#pragma omp for
474  for (int i = 0; i < 10; ++i) {
475#pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
476    for (int i = 0; i < 10; ++i)
477      ;
478  }
479#pragma omp for
480  for (int i = 0; i < 10; ++i) {
481#pragma omp simd
482    for (int i = 0; i < 10; ++i)
483      ;
484  }
485#pragma omp for
486  for (int i = 0; i < 10; ++i) {
487#pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
488    for (int i = 0; i < 10; ++i)
489      ;
490  }
491#pragma omp for
492  for (int i = 0; i < 10; ++i) {
493#pragma omp parallel
494    for (int i = 0; i < 10; ++i)
495      ;
496  }
497#pragma omp for
498  for (int i = 0; i < 10; ++i) {
499#pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
500    {
501      bar();
502    }
503  }
504#pragma omp for
505  for (int i = 0; i < 10; ++i) {
506#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
507    {
508      bar();
509    }
510  }
511#pragma omp for
512  for (int i = 0; i < 10; ++i) {
513#pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
514    {
515      bar();
516    }
517  }
518
519#pragma omp for
520  for (int i = 0; i < 10; ++i) {
521#pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
522    {
523      bar();
524    }
525  }
526#pragma omp for
527  for (int i = 0; i < 10; ++i) {
528#pragma omp critical
529    {
530      bar();
531    }
532  }
533#pragma omp for
534  for (int i = 0; i < 10; ++i) {
535#pragma omp parallel
536    {
537#pragma omp single // OK
538      {
539        bar();
540      }
541#pragma omp for // OK
542      for (int i = 0; i < 10; ++i)
543        ;
544#pragma omp sections // OK
545      {
546        bar();
547      }
548    }
549  }
550#pragma omp for
551  for (int i = 0; i < 10; ++i) {
552#pragma omp parallel for
553    for (int i = 0; i < 10; ++i)
554      ;
555  }
556#pragma omp for
557  for (int i = 0; i < 10; ++i) {
558#pragma omp parallel for simd
559    for (int i = 0; i < 10; ++i)
560      ;
561  }
562#pragma omp for
563  for (int i = 0; i < 10; ++i) {
564#pragma omp parallel sections
565    {
566      bar();
567    }
568  }
569#pragma omp for
570  for (int i = 0; i < 10; ++i) {
571#pragma omp task
572    {
573      bar();
574    }
575  }
576#pragma omp for
577  for (int i = 0; i < 10; ++i) {
578#pragma omp taskyield
579    bar();
580  }
581#pragma omp for
582  for (int i = 0; i < 10; ++i) {
583#pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
584    bar();
585  }
586#pragma omp for
587  for (int i = 0; i < 10; ++i) {
588#pragma omp taskwait
589    bar();
590  }
591#pragma omp for
592  for (int i = 0; i < 10; ++i) {
593#pragma omp flush
594    bar();
595  }
596#pragma omp for
597  for (int i = 0; i < 10; ++i) {
598#pragma omp ordered // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
599    bar();
600  }
601#pragma omp for ordered
602  for (int i = 0; i < 10; ++i) {
603#pragma omp ordered // OK
604    bar();
605  }
606#pragma omp for
607  for (int i = 0; i < 10; ++i) {
608#pragma omp atomic
609    ++a;
610  }
611#pragma omp for
612  for (int i = 0; i < 10; ++i) {
613#pragma omp target
614    ++a;
615  }
616#pragma omp for
617  for (int i = 0; i < 10; ++i) {
618#pragma omp target parallel
619    ++a;
620  }
621#pragma omp for
622  for (int i = 0; i < 10; ++i) {
623#pragma omp target parallel for
624    for (int i = 0; i < 10; ++i)
625      ;
626  }
627#pragma omp for
628  for (int i = 0; i < 10; ++i) {
629#pragma omp target enter data map(to: a)
630    ++a;
631  }
632#pragma omp for
633  for (int i = 0; i < 10; ++i) {
634#pragma omp target exit data map(from: a)
635    ++a;
636  }
637#pragma omp for
638  for (int i = 0; i < 10; ++i) {
639#pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
640    ++a;
641  }
642#pragma omp for
643  for (int i = 0; i < 10; ++i) {
644#pragma omp taskloop
645  for (int i = 0; i < 10; ++i)
646    ++a;
647  }
648#pragma omp for
649  for (int i = 0; i < 10; ++i) {
650#pragma omp distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
651    for (int j = 0; j < 10; ++j)
652      ;
653  }
654#pragma omp for
655  for (int i = 0; i < 10; ++i) {
656#pragma omp target update to(a)
657  }
658#pragma omp for
659  for (int i = 0; i < 10; ++i) {
660#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
661    for (int j = 0; j < 10; ++j)
662      ;
663  }
664#pragma omp for
665  for (int i = 0; i < 10; ++i) {
666#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
667    for (int j = 0; j < 10; ++j)
668      ;
669  }
670#pragma omp for
671  for (int i = 0; i < 10; ++i) {
672#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
673    for (int j = 0; j < 10; ++j)
674      ;
675  }
676#pragma omp for
677  for (int i = 0; i < 10; ++i) {
678#pragma omp target simd // OK
679    for (int j = 0; j < 10; ++j)
680      ;
681  }
682#pragma omp for
683  for (int i = 0; i < 10; ++i) {
684#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
685    for (int j = 0; j < 10; ++j)
686      ;
687  }
688#pragma omp for
689  for (int i = 0; i < 10; ++i) {
690#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
691    for (int j = 0; j < 10; ++j)
692      ;
693  }
694#pragma omp for
695  for (int i = 0; i < 10; ++i) {
696#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
697    for (int j = 0; j < 10; ++j)
698      ;
699  }
700#pragma omp for
701  for (int i = 0; i < 10; ++i) {
702#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
703    for (int j = 0; j < 10; ++j)
704      ;
705  }
706#pragma omp for
707  for (int i = 0; i < 10; ++i) {
708#pragma omp target teams // OK
709    ++a;
710  }
711#pragma omp for
712  for (int i = 0; i < 10; ++i) {
713#pragma omp target teams distribute // OK
714    for (int j = 0; j < 10; ++j)
715      ;
716  }
717#pragma omp for
718  for (int i = 0; i < 10; ++i) {
719#pragma omp target teams distribute parallel for // OK
720    for (int j = 0; j < 10; ++j)
721      ;
722  }
723#pragma omp for
724  for (int i = 0; i < 10; ++i) {
725#pragma omp target teams distribute parallel for simd // OK
726    for (int j = 0; j < 10; ++j)
727      ;
728  }
729#pragma omp for
730  for (int i = 0; i < 10; ++i) {
731#pragma omp target teams distribute simd // OK
732    for (int j = 0; j < 10; ++j)
733      ;
734  }
735
736// FOR SIMD DIRECTIVE
737#pragma omp for simd
738  for (int i = 0; i < 10; ++i) {
739#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
740    for (int i = 0; i < 10; ++i)
741      ;
742  }
743#pragma omp for simd
744  for (int i = 0; i < 10; ++i) {
745#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
746    for (int i = 0; i < 10; ++i)
747      ;
748  }
749#pragma omp for simd
750  for (int i = 0; i < 10; ++i) {
751#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
752    for (int i = 0; i < 10; ++i)
753      ;
754  }
755#pragma omp for simd
756  for (int i = 0; i < 10; ++i) {
757#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
758    for (int i = 0; i < 10; ++i)
759      ;
760  }
761#pragma omp for simd
762  for (int i = 0; i < 10; ++i) {
763#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
764    {
765      bar();
766    }
767  }
768#pragma omp for simd
769  for (int i = 0; i < 10; ++i) {
770#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
771    {
772      bar();
773    }
774  }
775#pragma omp for simd
776  for (int i = 0; i < 10; ++i) {
777#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
778    {
779      bar();
780    }
781  }
782#pragma omp for simd
783  for (int i = 0; i < 10; ++i) {
784#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
785    {
786      bar();
787    }
788  }
789#pragma omp for simd
790  for (int i = 0; i < 10; ++i) {
791#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
792    {
793      bar();
794    }
795  }
796#pragma omp for simd
797  for (int i = 0; i < 10; ++i) {
798#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
799    for (int i = 0; i < 10; ++i)
800      ;
801  }
802#pragma omp for simd
803  for (int i = 0; i < 10; ++i) {
804#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
805    for (int i = 0; i < 10; ++i)
806      ;
807  }
808#pragma omp for simd
809  for (int i = 0; i < 10; ++i) {
810#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
811    {
812      bar();
813    }
814  }
815#pragma omp for simd
816  for (int i = 0; i < 10; ++i) {
817#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
818    {
819      bar();
820    }
821  }
822#pragma omp for simd
823  for (int i = 0; i < 10; ++i) {
824#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
825    bar();
826  }
827#pragma omp for simd
828  for (int i = 0; i < 10; ++i) {
829#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
830    bar();
831  }
832#pragma omp for simd
833  for (int i = 0; i < 10; ++i) {
834#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
835    bar();
836  }
837#pragma omp for simd
838  for (int i = 0; i < 10; ++i) {
839#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
840    bar();
841  }
842#pragma omp for simd
843  for (int i = 0; i < 10; ++i) {
844#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
845    bar();
846  }
847#pragma omp for simd
848  for (int i = 0; i < 10; ++i) {
849#pragma omp ordered simd // OK
850    bar();
851  }
852#pragma omp for simd
853  for (int i = 0; i < 10; ++i) {
854#pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
855    bar();
856  }
857#pragma omp for simd
858  for (int i = 0; i < 10; ++i) {
859#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
860    ++a;
861  }
862#pragma omp for simd
863  for (int i = 0; i < 10; ++i) {
864#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
865    ++a;
866  }
867#pragma omp for simd
868  for (int i = 0; i < 10; ++i) {
869#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
870    ++a;
871  }
872#pragma omp for simd
873  for (int i = 0; i < 10; ++i) {
874#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
875    for (int i = 0; i < 10; ++i)
876      ;
877  }
878#pragma omp for simd
879  for (int i = 0; i < 10; ++i) {
880#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
881    ++a;
882  }
883#pragma omp for simd
884  for (int i = 0; i < 10; ++i) {
885#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
886    ++a;
887  }
888#pragma omp for simd
889  for (int i = 0; i < 10; ++i) {
890#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
891    ++a;
892  }
893#pragma omp for simd
894  for (int i = 0; i < 10; ++i) {
895#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
896  for (int i = 0; i < 10; ++i)
897    ++a;
898  }
899#pragma omp for simd
900  for (int i = 0; i < 10; ++i) {
901#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
902    for (int j = 0; j < 10; ++j)
903      ;
904  }
905#pragma omp for simd
906  for (int i = 0; i < 10; ++i) {
907#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
908    bar();
909  }
910#pragma omp for simd
911  for (int i = 0; i < 10; ++i) {
912#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
913    for (int j = 0; j < 10; ++j)
914      ;
915  }
916#pragma omp for simd
917  for (int i = 0; i < 10; ++i) {
918#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
919    for (int j = 0; j < 10; ++j)
920      ;
921  }
922#pragma omp for simd
923  for (int i = 0; i < 10; ++i) {
924#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
925    for (int j = 0; j < 10; ++j)
926      ;
927  }
928#pragma omp for simd
929  for (int i = 0; i < 10; ++i) {
930#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
931    for (int j = 0; j < 10; ++j)
932      ;
933  }
934#pragma omp for simd
935  for (int i = 0; i < 10; ++i) {
936#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
937    for (int j = 0; j < 10; ++j)
938      ;
939  }
940#pragma omp for simd
941  for (int i = 0; i < 10; ++i) {
942#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
943    for (int j = 0; j < 10; ++j)
944      ;
945  }
946#pragma omp for simd
947  for (int i = 0; i < 10; ++i) {
948#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
949    for (int j = 0; j < 10; ++j)
950      ;
951  }
952#pragma omp for simd
953  for (int i = 0; i < 10; ++i) {
954#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
955    for (int j = 0; j < 10; ++j)
956      ;
957  }
958#pragma omp for simd
959  for (int i = 0; i < 10; ++i) {
960#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
961    a++;
962  }
963#pragma omp for simd
964  for (int i = 0; i < 10; ++i) {
965#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
966    for (int j = 0; j < 10; ++j)
967      ;
968  }
969#pragma omp for simd
970  for (int i = 0; i < 10; ++i) {
971#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
972    for (int j = 0; j < 10; ++j)
973      ;
974  }
975#pragma omp for simd
976  for (int i = 0; i < 10; ++i) {
977#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
978    for (int j = 0; j < 10; ++j)
979      ;
980  }
981#pragma omp for simd
982  for (int i = 0; i < 10; ++i) {
983#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
984    for (int j = 0; j < 10; ++j)
985      ;
986  }
987
988// SECTIONS DIRECTIVE
989#pragma omp sections
990  {
991#pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
992    for (int i = 0; i < 10; ++i)
993      ;
994  }
995#pragma omp sections
996  {
997#pragma omp simd
998    for (int i = 0; i < 10; ++i)
999      ;
1000  }
1001#pragma omp sections
1002  {
1003#pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1004    for (int i = 0; i < 10; ++i)
1005      ;
1006  }
1007#pragma omp sections
1008  {
1009#pragma omp parallel
1010    for (int i = 0; i < 10; ++i)
1011      ;
1012  }
1013#pragma omp sections
1014  {
1015#pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1016    {
1017      bar();
1018    }
1019  }
1020#pragma omp sections
1021  {
1022#pragma omp section
1023    {
1024      bar();
1025    }
1026  }
1027#pragma omp sections
1028  {
1029#pragma omp parallel
1030    {
1031#pragma omp single // OK
1032      {
1033        bar();
1034      }
1035#pragma omp for // OK
1036      for (int i = 0; i < 10; ++i)
1037        ;
1038#pragma omp sections // OK
1039      {
1040        bar();
1041      }
1042    }
1043  }
1044#pragma omp sections
1045  {
1046#pragma omp parallel
1047    {
1048#pragma omp master // OK
1049      {
1050        bar();
1051      }
1052#pragma omp for // OK
1053      for (int i = 0; i < 10; ++i)
1054        ;
1055#pragma omp master // OK
1056      {
1057        bar();
1058      }
1059    }
1060#pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
1061    bar();
1062  }
1063#pragma omp sections
1064  {
1065#pragma omp parallel
1066    {
1067#pragma omp critical(A) // OK
1068      {
1069        bar();
1070      }
1071#pragma omp for // OK
1072      for (int i = 0; i < 10; ++i)
1073        ;
1074#pragma omp critical // OK
1075      {
1076        bar();
1077      }
1078    }
1079#pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
1080    bar();
1081  }
1082#pragma omp sections
1083  {
1084#pragma omp parallel for
1085    for (int i = 0; i < 10; ++i)
1086      ;
1087  }
1088#pragma omp sections
1089  {
1090#pragma omp parallel for simd
1091    for (int i = 0; i < 10; ++i)
1092      ;
1093  }
1094#pragma omp sections
1095  {
1096#pragma omp parallel sections
1097    {
1098      bar();
1099    }
1100  }
1101#pragma omp sections
1102  {
1103#pragma omp task
1104    {
1105      bar();
1106    }
1107  }
1108#pragma omp sections
1109  {
1110#pragma omp taskyield
1111  }
1112#pragma omp sections
1113  {
1114#pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
1115  }
1116#pragma omp sections
1117  {
1118#pragma omp taskwait
1119  }
1120#pragma omp sections
1121  {
1122#pragma omp flush
1123  }
1124#pragma omp sections
1125  {
1126#pragma omp ordered // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1127    bar();
1128  }
1129#pragma omp sections
1130  {
1131#pragma omp atomic
1132    ++a;
1133  }
1134#pragma omp sections
1135  {
1136#pragma omp target
1137    ++a;
1138  }
1139#pragma omp sections
1140  {
1141#pragma omp target parallel
1142    ++a;
1143  }
1144#pragma omp sections
1145  {
1146#pragma omp target parallel for
1147    for (int i = 0; i < 10; ++i)
1148      ;
1149  }
1150#pragma omp sections
1151  {
1152#pragma omp target enter data map(to: a)
1153  }
1154#pragma omp sections
1155  {
1156#pragma omp target exit data map(from: a)
1157  }
1158#pragma omp sections
1159  {
1160#pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
1161    ++a;
1162  }
1163#pragma omp sections
1164  {
1165#pragma omp taskloop
1166  for (int i = 0; i < 10; ++i)
1167    ++a;
1168  }
1169#pragma omp sections
1170  {
1171#pragma omp distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
1172    for (int i = 0; i < 10; ++i)
1173      ;
1174  }
1175#pragma omp sections
1176  {
1177#pragma omp target update to(a)
1178  }
1179#pragma omp sections
1180  {
1181#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
1182    for (int i = 0; i < 10; ++i)
1183      ;
1184  }
1185#pragma omp sections
1186  {
1187#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
1188    for (int i = 0; i < 10; ++i)
1189      ;
1190  }
1191#pragma omp sections
1192  {
1193#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
1194    for (int i = 0; i < 10; ++i)
1195      ;
1196  }
1197#pragma omp sections
1198  {
1199#pragma omp target simd // OK
1200    for (int i = 0; i < 10; ++i)
1201      ;
1202  }
1203#pragma omp sections
1204  {
1205#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
1206    for (int i = 0; i < 10; ++i)
1207      ;
1208  }
1209#pragma omp sections
1210  {
1211#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
1212    for (int i = 0; i < 10; ++i)
1213      ;
1214  }
1215#pragma omp sections
1216  {
1217#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1218    for (int i = 0; i < 10; ++i)
1219      ;
1220  }
1221#pragma omp sections
1222  {
1223#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1224    for (int i = 0; i < 10; ++i)
1225      ;
1226  }
1227#pragma omp sections
1228  {
1229#pragma omp target teams // OK
1230    ++a;
1231  }
1232#pragma omp sections
1233  {
1234#pragma omp target teams distribute // OK
1235    for (int i = 0; i < 10; ++i)
1236      ;
1237  }
1238#pragma omp sections
1239  {
1240#pragma omp target teams distribute parallel for // OK
1241    for (int i = 0; i < 10; ++i)
1242      ;
1243  }
1244#pragma omp sections
1245  {
1246#pragma omp target teams distribute parallel for simd // OK
1247    for (int i = 0; i < 10; ++i)
1248      ;
1249  }
1250#pragma omp sections
1251  {
1252#pragma omp target teams distribute simd // OK
1253    for (int i = 0; i < 10; ++i)
1254      ;
1255  }
1256
1257// SECTION DIRECTIVE
1258#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
1259  {
1260    bar();
1261  }
1262#pragma omp sections
1263  {
1264#pragma omp section
1265    {
1266#pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
1267      for (int i = 0; i < 10; ++i)
1268        ;
1269    }
1270  }
1271#pragma omp sections
1272  {
1273#pragma omp section
1274    {
1275#pragma omp simd
1276      for (int i = 0; i < 10; ++i)
1277        ;
1278    }
1279  }
1280#pragma omp sections
1281  {
1282#pragma omp section
1283    {
1284#pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1285      for (int i = 0; i < 10; ++i)
1286        ;
1287    }
1288  }
1289#pragma omp sections
1290  {
1291#pragma omp section
1292    {
1293#pragma omp parallel
1294      for (int i = 0; i < 10; ++i)
1295        ;
1296    }
1297  }
1298#pragma omp sections
1299  {
1300#pragma omp section
1301    {
1302#pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1303      {
1304        bar();
1305      }
1306    }
1307  }
1308#pragma omp sections
1309  {
1310#pragma omp section
1311    {
1312#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1313      {
1314        bar();
1315      }
1316    }
1317  }
1318#pragma omp sections
1319  {
1320#pragma omp section
1321    {
1322#pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1323      bar();
1324#pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1325      bar();
1326#pragma omp critical
1327      bar();
1328    }
1329  }
1330#pragma omp sections
1331  {
1332#pragma omp section
1333    {
1334#pragma omp parallel
1335      {
1336#pragma omp single // OK
1337        {
1338          bar();
1339        }
1340#pragma omp for // OK
1341        for (int i = 0; i < 10; ++i)
1342          ;
1343#pragma omp for simd // OK
1344        for (int i = 0; i < 10; ++i)
1345          ;
1346#pragma omp sections // OK
1347        {
1348          bar();
1349        }
1350      }
1351    }
1352  }
1353#pragma omp sections
1354  {
1355#pragma omp section
1356    {
1357#pragma omp parallel for
1358      for (int i = 0; i < 10; ++i)
1359        ;
1360    }
1361  }
1362#pragma omp sections
1363  {
1364#pragma omp section
1365    {
1366#pragma omp parallel for simd
1367      for (int i = 0; i < 10; ++i)
1368        ;
1369    }
1370  }
1371#pragma omp sections
1372  {
1373#pragma omp section
1374    {
1375#pragma omp parallel sections
1376      {
1377        bar();
1378      }
1379    }
1380  }
1381#pragma omp sections
1382  {
1383#pragma omp section
1384    {
1385#pragma omp task
1386      {
1387        bar();
1388      }
1389    }
1390  }
1391#pragma omp sections
1392  {
1393#pragma omp section
1394    {
1395#pragma omp taskyield
1396      bar();
1397    }
1398  }
1399#pragma omp sections
1400  {
1401#pragma omp section
1402    {
1403#pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1404      bar();
1405    }
1406  }
1407#pragma omp sections
1408  {
1409#pragma omp section
1410    {
1411#pragma omp taskwait
1412      bar();
1413    }
1414  }
1415#pragma omp sections
1416  {
1417#pragma omp section
1418    {
1419#pragma omp flush
1420      bar();
1421    }
1422  }
1423#pragma omp sections
1424  {
1425#pragma omp section
1426    {
1427#pragma omp ordered // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1428      bar();
1429    }
1430  }
1431#pragma omp sections
1432  {
1433#pragma omp section
1434#pragma omp atomic
1435    ++a;
1436  }
1437#pragma omp sections
1438  {
1439#pragma omp section
1440#pragma omp target
1441    ++a;
1442  }
1443#pragma omp sections
1444  {
1445#pragma omp section
1446#pragma omp target parallel
1447    ++a;
1448  }
1449#pragma omp sections
1450  {
1451#pragma omp section
1452    {
1453#pragma omp target parallel for
1454      for (int i = 0; i < 10; ++i)
1455        ;
1456    }
1457  }
1458#pragma omp sections
1459  {
1460#pragma omp section
1461    {
1462#pragma omp target enter data map(to: a)
1463      ++a;
1464    }
1465  }
1466#pragma omp sections
1467  {
1468#pragma omp section
1469    {
1470#pragma omp target exit data map(from: a)
1471      ++a;
1472    }
1473  }
1474#pragma omp sections
1475  {
1476#pragma omp section
1477#pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
1478    ++a;
1479  }
1480#pragma omp sections
1481  {
1482#pragma omp section
1483#pragma omp taskloop
1484  for (int i = 0; i < 10; ++i)
1485    ++a;
1486  }
1487#pragma omp sections
1488  {
1489#pragma omp section
1490#pragma omp distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
1491    for (int i = 0; i < 10; ++i)
1492      ;
1493  }
1494#pragma omp sections
1495  {
1496#pragma omp section
1497    {
1498      bar();
1499#pragma omp target update to(a)
1500    }
1501  }
1502#pragma omp sections
1503  {
1504#pragma omp section
1505#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
1506    for (int i = 0; i < 10; ++i)
1507      ;
1508  }
1509#pragma omp sections
1510  {
1511#pragma omp section
1512#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
1513    for (int i = 0; i < 10; ++i)
1514      ;
1515  }
1516#pragma omp sections
1517  {
1518#pragma omp section
1519#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
1520    for (int i = 0; i < 10; ++i)
1521      ;
1522  }
1523#pragma omp sections
1524  {
1525#pragma omp section
1526#pragma omp target simd // OK
1527    for (int i = 0; i < 10; ++i)
1528      ;
1529  }
1530#pragma omp sections
1531  {
1532#pragma omp section
1533#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
1534    for (int i = 0; i < 10; ++i)
1535      ;
1536  }
1537#pragma omp sections
1538  {
1539#pragma omp section
1540#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
1541    for (int i = 0; i < 10; ++i)
1542      ;
1543  }
1544#pragma omp sections
1545  {
1546#pragma omp section
1547#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1548    for (int i = 0; i < 10; ++i)
1549      ;
1550  }
1551#pragma omp sections
1552  {
1553#pragma omp section
1554#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1555    for (int i = 0; i < 10; ++i)
1556      ;
1557  }
1558#pragma omp sections
1559  {
1560#pragma omp section
1561#pragma omp target teams // OK
1562    ++a;
1563  }
1564#pragma omp sections
1565  {
1566#pragma omp section
1567#pragma omp target teams distribute // OK
1568    for (int i = 0; i < 10; ++i)
1569      ;
1570  }
1571#pragma omp sections
1572  {
1573#pragma omp section
1574#pragma omp target teams distribute parallel for // OK
1575    for (int i = 0; i < 10; ++i)
1576      ;
1577  }
1578#pragma omp sections
1579  {
1580#pragma omp section
1581#pragma omp target teams distribute parallel for simd // OK
1582    for (int i = 0; i < 10; ++i)
1583      ;
1584  }
1585#pragma omp sections
1586  {
1587#pragma omp section
1588#pragma omp target teams distribute simd // OK
1589    for (int i = 0; i < 10; ++i)
1590      ;
1591  }
1592
1593// SINGLE DIRECTIVE
1594#pragma omp single
1595  {
1596#pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
1597    for (int i = 0; i < 10; ++i)
1598      ;
1599  }
1600#pragma omp single
1601  {
1602#pragma omp simd
1603    for (int i = 0; i < 10; ++i)
1604      ;
1605  }
1606#pragma omp single
1607  {
1608#pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1609    for (int i = 0; i < 10; ++i)
1610      ;
1611  }
1612#pragma omp single
1613  {
1614#pragma omp parallel
1615    for (int i = 0; i < 10; ++i)
1616      ;
1617  }
1618#pragma omp single
1619  {
1620#pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1621    {
1622      bar();
1623    }
1624  }
1625#pragma omp single
1626  {
1627#pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1628    {
1629      bar();
1630    }
1631  }
1632#pragma omp single
1633  {
1634#pragma omp critical
1635    {
1636      bar();
1637    }
1638  }
1639#pragma omp single
1640  {
1641#pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1642    {
1643      bar();
1644    }
1645  }
1646#pragma omp single
1647  {
1648#pragma omp parallel
1649    {
1650#pragma omp single // OK
1651      {
1652        bar();
1653      }
1654#pragma omp for // OK
1655      for (int i = 0; i < 10; ++i)
1656        ;
1657#pragma omp for simd // OK
1658      for (int i = 0; i < 10; ++i)
1659        ;
1660#pragma omp sections // OK
1661      {
1662        bar();
1663      }
1664    }
1665  }
1666#pragma omp single
1667  {
1668#pragma omp parallel for
1669    for (int i = 0; i < 10; ++i)
1670      ;
1671  }
1672#pragma omp single
1673  {
1674#pragma omp parallel for simd
1675    for (int i = 0; i < 10; ++i)
1676      ;
1677  }
1678#pragma omp single
1679  {
1680#pragma omp parallel sections
1681    {
1682      bar();
1683    }
1684  }
1685#pragma omp single
1686  {
1687#pragma omp task
1688    {
1689      bar();
1690    }
1691  }
1692#pragma omp single
1693  {
1694#pragma omp taskyield
1695    bar();
1696  }
1697#pragma omp single
1698  {
1699#pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1700    bar();
1701  }
1702#pragma omp single
1703  {
1704#pragma omp taskwait
1705    bar();
1706  }
1707#pragma omp single
1708  {
1709#pragma omp flush
1710    bar();
1711  }
1712#pragma omp single
1713  {
1714#pragma omp ordered // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1715    bar();
1716  }
1717#pragma omp single
1718  {
1719#pragma omp atomic
1720    ++a;
1721  }
1722#pragma omp single
1723  {
1724#pragma omp target
1725    ++a;
1726  }
1727#pragma omp single
1728  {
1729#pragma omp target parallel
1730    ++a;
1731  }
1732#pragma omp single
1733  {
1734#pragma omp target parallel for
1735    for (int i = 0; i < 10; ++i)
1736      ;
1737  }
1738#pragma omp single
1739  {
1740#pragma omp target enter data map(to: a)
1741    ++a;
1742  }
1743#pragma omp single
1744  {
1745#pragma omp target exit data map(from: a)
1746    ++a;
1747  }
1748#pragma omp single
1749  {
1750#pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
1751    ++a;
1752  }
1753#pragma omp single
1754  {
1755#pragma omp taskloop
1756  for (int i = 0; i < 10; ++i)
1757    ++a;
1758  }
1759#pragma omp single
1760  {
1761#pragma omp distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
1762    for (int i = 0; i < 10; ++i)
1763      ;
1764  }
1765#pragma omp single
1766  {
1767#pragma omp target update to(a)
1768    bar();
1769  }
1770#pragma omp single
1771  {
1772#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
1773    for (int i = 0; i < 10; ++i)
1774      ;
1775  }
1776#pragma omp single
1777  {
1778#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
1779    for (int i = 0; i < 10; ++i)
1780      ;
1781  }
1782#pragma omp single
1783  {
1784#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
1785    for (int i = 0; i < 10; ++i)
1786      ;
1787  }
1788#pragma omp single
1789  {
1790#pragma omp target simd // OK
1791    for (int i = 0; i < 10; ++i)
1792      ;
1793  }
1794#pragma omp single
1795  {
1796#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
1797    for (int i = 0; i < 10; ++i)
1798      ;
1799  }
1800#pragma omp single
1801  {
1802#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
1803    for (int i = 0; i < 10; ++i)
1804      ;
1805  }
1806#pragma omp single
1807  {
1808#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
1809    for (int i = 0; i < 10; ++i)
1810      ;
1811  }
1812#pragma omp single
1813  {
1814#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
1815    for (int i = 0; i < 10; ++i)
1816      ;
1817  }
1818#pragma omp single
1819  {
1820#pragma omp target teams // OK
1821    ++a;
1822  }
1823#pragma omp single
1824  {
1825#pragma omp target teams distribute // OK
1826    for (int i = 0; i < 10; ++i)
1827      ;
1828  }
1829#pragma omp single
1830  {
1831#pragma omp target teams distribute parallel for // OK
1832    for (int i = 0; i < 10; ++i)
1833      ;
1834  }
1835#pragma omp single
1836  {
1837#pragma omp target teams distribute parallel for simd // OK
1838    for (int i = 0; i < 10; ++i)
1839      ;
1840  }
1841#pragma omp single
1842  {
1843#pragma omp target teams distribute simd // OK
1844    for (int i = 0; i < 10; ++i)
1845      ;
1846  }
1847
1848// MASTER DIRECTIVE
1849#pragma omp master
1850  {
1851#pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
1852    for (int i = 0; i < 10; ++i)
1853      ;
1854  }
1855#pragma omp master
1856  {
1857#pragma omp simd
1858    for (int i = 0; i < 10; ++i)
1859      ;
1860  }
1861#pragma omp master
1862  {
1863#pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1864    for (int i = 0; i < 10; ++i)
1865      ;
1866  }
1867#pragma omp master
1868  {
1869#pragma omp parallel
1870    for (int i = 0; i < 10; ++i)
1871      ;
1872  }
1873#pragma omp master
1874  {
1875#pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1876    {
1877      bar();
1878    }
1879  }
1880#pragma omp master
1881  {
1882#pragma omp master // OK, though second 'master' is redundant
1883    {
1884      bar();
1885    }
1886  }
1887#pragma omp master
1888  {
1889#pragma omp critical
1890    {
1891      bar();
1892    }
1893  }
1894#pragma omp master
1895  {
1896#pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1897    {
1898      bar();
1899    }
1900  }
1901#pragma omp master
1902  {
1903#pragma omp parallel
1904    {
1905#pragma omp master // OK
1906      {
1907        bar();
1908      }
1909#pragma omp for // OK
1910      for (int i = 0; i < 10; ++i)
1911        ;
1912#pragma omp for simd // OK
1913      for (int i = 0; i < 10; ++i)
1914        ;
1915#pragma omp sections // OK
1916      {
1917        bar();
1918      }
1919    }
1920  }
1921#pragma omp master
1922  {
1923#pragma omp parallel for
1924    for (int i = 0; i < 10; ++i)
1925      ;
1926  }
1927#pragma omp master
1928  {
1929#pragma omp parallel for simd
1930    for (int i = 0; i < 10; ++i)
1931      ;
1932  }
1933#pragma omp master
1934  {
1935#pragma omp parallel sections
1936    {
1937      bar();
1938    }
1939  }
1940#pragma omp master
1941  {
1942#pragma omp task
1943    {
1944      bar();
1945    }
1946  }
1947#pragma omp master
1948  {
1949#pragma omp taskyield
1950    bar();
1951  }
1952#pragma omp master
1953  {
1954#pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1955    bar();
1956  }
1957#pragma omp master
1958  {
1959#pragma omp taskwait
1960    bar();
1961  }
1962#pragma omp master
1963  {
1964#pragma omp flush
1965    bar();
1966  }
1967#pragma omp master
1968  {
1969#pragma omp ordered // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1970    bar();
1971  }
1972#pragma omp master
1973  {
1974#pragma omp atomic
1975    ++a;
1976  }
1977#pragma omp master
1978  {
1979#pragma omp target
1980    ++a;
1981  }
1982#pragma omp master
1983  {
1984#pragma omp target parallel
1985    ++a;
1986  }
1987#pragma omp master
1988  {
1989#pragma omp target parallel for
1990    for (int i = 0; i < 10; ++i)
1991      ;
1992  }
1993#pragma omp master
1994  {
1995#pragma omp target enter data map(to: a)
1996    ++a;
1997  }
1998#pragma omp master
1999  {
2000#pragma omp target exit data map(from: a)
2001    ++a;
2002  }
2003#pragma omp master
2004  {
2005#pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
2006    ++a;
2007  }
2008#pragma omp master
2009  {
2010#pragma omp taskloop
2011  for (int i = 0; i < 10; ++i)
2012    ++a;
2013  }
2014#pragma omp master
2015  {
2016#pragma omp distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
2017    for (int i = 0; i < 10; ++i)
2018      ;
2019  }
2020#pragma omp master
2021  {
2022#pragma omp target update to(a)
2023    bar();
2024  }
2025#pragma omp master
2026  {
2027#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
2028    for (int i = 0; i < 10; ++i)
2029      ;
2030  }
2031#pragma omp master
2032  {
2033#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
2034    for (int i = 0; i < 10; ++i)
2035      ;
2036  }
2037#pragma omp master
2038  {
2039#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
2040    for (int i = 0; i < 10; ++i)
2041      ;
2042  }
2043#pragma omp master
2044  {
2045#pragma omp target simd // OK
2046    for (int i = 0; i < 10; ++i)
2047      ;
2048  }
2049#pragma omp master
2050  {
2051#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
2052    for (int i = 0; i < 10; ++i)
2053      ;
2054  }
2055#pragma omp master
2056  {
2057#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
2058    for (int i = 0; i < 10; ++i)
2059      ;
2060  }
2061#pragma omp master
2062  {
2063#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2064    for (int i = 0; i < 10; ++i)
2065      ;
2066  }
2067#pragma omp master
2068  {
2069#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2070    for (int i = 0; i < 10; ++i)
2071      ;
2072  }
2073#pragma omp master
2074  {
2075#pragma omp target teams // OK
2076    a++;
2077  }
2078#pragma omp master
2079  {
2080#pragma omp target teams distribute // OK
2081    for (int i = 0; i < 10; ++i)
2082      ;
2083  }
2084#pragma omp master
2085  {
2086#pragma omp target teams distribute parallel for // OK
2087    for (int i = 0; i < 10; ++i)
2088      ;
2089  }
2090#pragma omp master
2091  {
2092#pragma omp target teams distribute parallel for simd // OK
2093    for (int i = 0; i < 10; ++i)
2094      ;
2095  }
2096#pragma omp master
2097  {
2098#pragma omp target teams distribute simd // OK
2099    for (int i = 0; i < 10; ++i)
2100      ;
2101  }
2102
2103// CRITICAL DIRECTIVE
2104#pragma omp critical
2105  {
2106#pragma omp for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
2107    for (int i = 0; i < 10; ++i)
2108      ;
2109  }
2110#pragma omp critical
2111  {
2112#pragma omp simd
2113    for (int i = 0; i < 10; ++i)
2114      ;
2115  }
2116#pragma omp critical
2117  {
2118#pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
2119    for (int i = 0; i < 10; ++i)
2120      ;
2121  }
2122#pragma omp critical
2123  {
2124#pragma omp parallel
2125    for (int i = 0; i < 10; ++i)
2126      ;
2127  }
2128#pragma omp critical
2129  {
2130#pragma omp single // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
2131    {
2132      bar();
2133    }
2134  }
2135#pragma omp critical
2136  {
2137#pragma omp master // OK, though second 'master' is redundant
2138    {
2139      bar();
2140    }
2141  }
2142#pragma omp critical
2143  {
2144#pragma omp critical
2145    {
2146      bar();
2147    }
2148  }
2149#pragma omp critical
2150  {
2151#pragma omp sections // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
2152    {
2153      bar();
2154    }
2155  }
2156#pragma omp critical
2157  {
2158#pragma omp parallel
2159    {
2160#pragma omp master // OK
2161      {
2162        bar();
2163      }
2164#pragma omp for // OK
2165      for (int i = 0; i < 10; ++i)
2166        ;
2167#pragma omp for simd // OK
2168      for (int i = 0; i < 10; ++i)
2169        ;
2170#pragma omp sections // OK
2171      {
2172        bar();
2173      }
2174    }
2175  }
2176#pragma omp critical
2177  {
2178#pragma omp parallel for
2179    for (int i = 0; i < 10; ++i)
2180      ;
2181  }
2182#pragma omp critical
2183  {
2184#pragma omp parallel for simd
2185    for (int i = 0; i < 10; ++i)
2186      ;
2187  }
2188#pragma omp critical
2189  {
2190#pragma omp parallel sections
2191    {
2192      bar();
2193    }
2194  }
2195#pragma omp critical
2196  {
2197#pragma omp task
2198    {
2199      bar();
2200    }
2201  }
2202#pragma omp critical
2203  {
2204#pragma omp taskyield
2205    bar();
2206  }
2207#pragma omp critical
2208  {
2209#pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
2210    bar();
2211  }
2212#pragma omp critical
2213  {
2214#pragma omp taskwait
2215    bar();
2216  }
2217#pragma omp critical(Tuzik)
2218  {
2219#pragma omp critical(grelka)
2220    bar();
2221  }
2222#pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
2223  {
2224#pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
2225    {
2226#pragma omp critical(Tuzik)
2227      {
2228#pragma omp parallel
2229#pragma omp critical(grelka)
2230        {
2231          bar();
2232        }
2233      }
2234    }
2235  }
2236#pragma omp critical
2237  {
2238#pragma omp ordered // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
2239    bar();
2240  }
2241#pragma omp critical
2242  {
2243#pragma omp atomic
2244    ++a;
2245  }
2246#pragma omp critical
2247  {
2248#pragma omp target
2249    ++a;
2250  }
2251#pragma omp critical
2252  {
2253#pragma omp target parallel
2254    ++a;
2255  }
2256#pragma omp critical
2257  {
2258#pragma omp target parallel for
2259    for (int i = 0; i < 10; ++i)
2260      ;
2261  }
2262#pragma omp critical
2263  {
2264#pragma omp target enter data map(to: a)
2265    ++a;
2266  }
2267#pragma omp critical
2268  {
2269#pragma omp target exit data map(from: a)
2270    ++a;
2271  }
2272#pragma omp critical
2273  {
2274#pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
2275    ++a;
2276  }
2277#pragma omp critical
2278  {
2279#pragma omp taskloop
2280  for (int i = 0; i < 10; ++i)
2281    ++a;
2282  }
2283#pragma omp critical
2284  {
2285#pragma omp distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
2286    for (int i = 0; i < 10; ++i)
2287      ;
2288  }
2289#pragma omp critical
2290  {
2291#pragma omp target update to(a)
2292    bar();
2293  }
2294#pragma omp critical
2295  {
2296#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
2297    for (int i = 0; i < 10; ++i)
2298      ;
2299  }
2300#pragma omp critical
2301  {
2302#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
2303    for (int i = 0; i < 10; ++i)
2304      ;
2305  }
2306#pragma omp critical
2307  {
2308#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
2309    for (int i = 0; i < 10; ++i)
2310      ;
2311  }
2312#pragma omp critical
2313  {
2314#pragma omp target simd // OK
2315    for (int i = 0; i < 10; ++i)
2316      ;
2317  }
2318#pragma omp critical
2319  {
2320#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
2321    for (int i = 0; i < 10; ++i)
2322      ;
2323  }
2324#pragma omp critical
2325  {
2326#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
2327    for (int i = 0; i < 10; ++i)
2328      ;
2329  }
2330#pragma omp critical
2331  {
2332#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2333    for (int i = 0; i < 10; ++i)
2334      ;
2335  }
2336#pragma omp critical
2337  {
2338#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2339    for (int i = 0; i < 10; ++i)
2340      ;
2341  }
2342#pragma omp critical
2343  {
2344#pragma omp target teams // OK
2345    a++;
2346  }
2347#pragma omp critical
2348  {
2349#pragma omp target teams distribute // OK
2350    for (int i = 0; i < 10; ++i)
2351      ;
2352  }
2353#pragma omp critical
2354  {
2355#pragma omp target teams distribute parallel for // OK
2356    for (int i = 0; i < 10; ++i)
2357      ;
2358  }
2359#pragma omp critical
2360  {
2361#pragma omp target teams distribute parallel for simd // OK
2362    for (int i = 0; i < 10; ++i)
2363      ;
2364  }
2365#pragma omp critical
2366  {
2367#pragma omp target teams distribute simd // OK
2368    for (int i = 0; i < 10; ++i)
2369      ;
2370  }
2371
2372// PARALLEL FOR DIRECTIVE
2373#pragma omp parallel for
2374  for (int i = 0; i < 10; ++i) {
2375#pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
2376    for (int i = 0; i < 10; ++i)
2377      ;
2378  }
2379#pragma omp parallel for
2380  for (int i = 0; i < 10; ++i) {
2381#pragma omp simd
2382    for (int i = 0; i < 10; ++i)
2383      ;
2384  }
2385#pragma omp parallel for
2386  for (int i = 0; i < 10; ++i) {
2387#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
2388    for (int i = 0; i < 10; ++i)
2389      ;
2390  }
2391#pragma omp parallel for
2392  for (int i = 0; i < 10; ++i) {
2393#pragma omp parallel
2394    for (int i = 0; i < 10; ++i)
2395      ;
2396  }
2397#pragma omp parallel for
2398  for (int i = 0; i < 10; ++i) {
2399#pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
2400    {
2401      bar();
2402    }
2403  }
2404#pragma omp parallel for
2405  for (int i = 0; i < 10; ++i) {
2406#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
2407    {
2408      bar();
2409    }
2410  }
2411#pragma omp parallel for
2412  for (int i = 0; i < 10; ++i) {
2413#pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
2414    {
2415      bar();
2416    }
2417  }
2418
2419#pragma omp parallel for
2420  for (int i = 0; i < 10; ++i) {
2421#pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2422    {
2423      bar();
2424    }
2425  }
2426
2427#pragma omp parallel for
2428  for (int i = 0; i < 10; ++i) {
2429#pragma omp critical
2430    {
2431      bar();
2432    }
2433  }
2434
2435#pragma omp parallel for
2436  for (int i = 0; i < 10; ++i) {
2437#pragma omp parallel
2438    {
2439#pragma omp single // OK
2440      {
2441        bar();
2442      }
2443#pragma omp for // OK
2444      for (int i = 0; i < 10; ++i)
2445        ;
2446#pragma omp for simd // OK
2447      for (int i = 0; i < 10; ++i)
2448        ;
2449#pragma omp sections // OK
2450      {
2451        bar();
2452      }
2453    }
2454  }
2455#pragma omp parallel for
2456  for (int i = 0; i < 10; ++i) {
2457#pragma omp parallel for
2458    for (int i = 0; i < 10; ++i)
2459      ;
2460  }
2461#pragma omp parallel for
2462  for (int i = 0; i < 10; ++i) {
2463#pragma omp parallel for simd
2464    for (int i = 0; i < 10; ++i)
2465      ;
2466  }
2467#pragma omp parallel for
2468  for (int i = 0; i < 10; ++i) {
2469#pragma omp parallel sections
2470    {
2471      bar();
2472    }
2473  }
2474#pragma omp parallel for
2475  for (int i = 0; i < 10; ++i) {
2476#pragma omp task
2477    {
2478      bar();
2479    }
2480  }
2481#pragma omp parallel for
2482  for (int i = 0; i < 10; ++i) {
2483#pragma omp taskyield
2484    bar();
2485  }
2486#pragma omp parallel for
2487  for (int i = 0; i < 10; ++i) {
2488#pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
2489    bar();
2490  }
2491#pragma omp parallel for
2492  for (int i = 0; i < 10; ++i) {
2493#pragma omp taskwait
2494    bar();
2495  }
2496#pragma omp parallel for
2497  for (int i = 0; i < 10; ++i) {
2498#pragma omp flush
2499    bar();
2500  }
2501#pragma omp parallel for
2502  for (int i = 0; i < 10; ++i) {
2503#pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
2504    bar();
2505  }
2506#pragma omp parallel for ordered
2507  for (int i = 0; i < 10; ++i) {
2508#pragma omp ordered // OK
2509    bar();
2510  }
2511#pragma omp parallel for
2512  for (int i = 0; i < 10; ++i) {
2513#pragma omp atomic
2514    ++a;
2515  }
2516#pragma omp parallel for
2517  for (int i = 0; i < 10; ++i) {
2518#pragma omp target
2519    ++a;
2520  }
2521#pragma omp parallel for
2522  for (int i = 0; i < 10; ++i) {
2523#pragma omp target parallel
2524    ++a;
2525  }
2526#pragma omp parallel for
2527  for (int i = 0; i < 10; ++i) {
2528#pragma omp target parallel for
2529    for (int i = 0; i < 10; ++i)
2530      ;
2531  }
2532#pragma omp parallel for
2533  for (int i = 0; i < 10; ++i) {
2534#pragma omp target enter data map(to: a)
2535    ++a;
2536  }
2537#pragma omp parallel for
2538  for (int i = 0; i < 10; ++i) {
2539#pragma omp target exit data map(from: a)
2540    ++a;
2541  }
2542#pragma omp parallel for
2543  for (int i = 0; i < 10; ++i) {
2544#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
2545    ++a;
2546  }
2547#pragma omp parallel for
2548  for (int i = 0; i < 10; ++i) {
2549#pragma omp taskloop
2550  for (int i = 0; i < 10; ++i)
2551    ++a;
2552  }
2553#pragma omp parallel for
2554  for (int i = 0; i < 10; ++i) {
2555#pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
2556    for (int j = 0; j < 10; ++j)
2557      ;
2558  }
2559#pragma omp parallel for
2560  for (int i = 0; i < 10; ++i) {
2561#pragma omp target update to(a)
2562  }
2563#pragma omp parallel for
2564  for (int i = 0; i < 10; ++i) {
2565#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
2566    for (int j = 0; j < 10; ++j)
2567      ;
2568  }
2569#pragma omp parallel for
2570  for (int i = 0; i < 10; ++i) {
2571#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
2572    for (int j = 0; j < 10; ++j)
2573      ;
2574  }
2575#pragma omp parallel for
2576  for (int i = 0; i < 10; ++i) {
2577#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
2578    for (int j = 0; j < 10; ++j)
2579      ;
2580  }
2581#pragma omp parallel for
2582  for (int i = 0; i < 10; ++i) {
2583#pragma omp target simd // OK
2584    for (int j = 0; j < 10; ++j)
2585      ;
2586  }
2587#pragma omp parallel for
2588  for (int i = 0; i < 10; ++i) {
2589#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
2590    for (int j = 0; j < 10; ++j)
2591      ;
2592  }
2593#pragma omp parallel for
2594  for (int i = 0; i < 10; ++i) {
2595#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
2596    for (int j = 0; j < 10; ++j)
2597      ;
2598  }
2599#pragma omp parallel for
2600  for (int i = 0; i < 10; ++i) {
2601#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
2602    for (int j = 0; j < 10; ++j)
2603      ;
2604  }
2605#pragma omp parallel for
2606  for (int i = 0; i < 10; ++i) {
2607#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
2608    for (int j = 0; j < 10; ++j)
2609      ;
2610  }
2611#pragma omp parallel for
2612  for (int i = 0; i < 10; ++i) {
2613#pragma omp target teams // OK
2614    a++;
2615  }
2616#pragma omp parallel for
2617  for (int i = 0; i < 10; ++i) {
2618#pragma omp target teams distribute // OK
2619    for (int j = 0; j < 10; ++j)
2620      ;
2621  }
2622#pragma omp parallel for
2623  for (int i = 0; i < 10; ++i) {
2624#pragma omp target teams distribute parallel for // OK
2625    for (int j = 0; j < 10; ++j)
2626      ;
2627  }
2628#pragma omp parallel for
2629  for (int i = 0; i < 10; ++i) {
2630#pragma omp target teams distribute parallel for simd // OK
2631    for (int j = 0; j < 10; ++j)
2632      ;
2633  }
2634#pragma omp parallel for
2635  for (int i = 0; i < 10; ++i) {
2636#pragma omp target teams distribute simd // OK
2637    for (int j = 0; j < 10; ++j)
2638      ;
2639  }
2640
2641// PARALLEL FOR SIMD DIRECTIVE
2642#pragma omp parallel for simd
2643  for (int i = 0; i < 10; ++i) {
2644#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2645    for (int i = 0; i < 10; ++i)
2646      ;
2647  }
2648#pragma omp parallel for simd
2649  for (int i = 0; i < 10; ++i) {
2650#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2651    for (int i = 0; i < 10; ++i)
2652      ;
2653  }
2654#pragma omp parallel for simd
2655  for (int i = 0; i < 10; ++i) {
2656#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2657    for (int i = 0; i < 10; ++i)
2658      ;
2659  }
2660#pragma omp parallel for simd
2661  for (int i = 0; i < 10; ++i) {
2662#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2663    for (int i = 0; i < 10; ++i)
2664      ;
2665  }
2666#pragma omp parallel for simd
2667  for (int i = 0; i < 10; ++i) {
2668#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2669    {
2670      bar();
2671    }
2672  }
2673#pragma omp parallel for simd
2674  for (int i = 0; i < 10; ++i) {
2675#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2676    {
2677      bar();
2678    }
2679  }
2680#pragma omp parallel for simd
2681  for (int i = 0; i < 10; ++i) {
2682#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2683    {
2684      bar();
2685    }
2686  }
2687
2688#pragma omp parallel for simd
2689  for (int i = 0; i < 10; ++i) {
2690#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2691    {
2692      bar();
2693    }
2694  }
2695
2696#pragma omp parallel for simd
2697  for (int i = 0; i < 10; ++i) {
2698#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2699    {
2700      bar();
2701    }
2702  }
2703
2704#pragma omp parallel for simd
2705  for (int i = 0; i < 10; ++i) {
2706#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2707    {
2708#pragma omp single
2709      {
2710        bar();
2711      }
2712#pragma omp for
2713      for (int i = 0; i < 10; ++i)
2714        ;
2715#pragma omp for simd
2716      for (int i = 0; i < 10; ++i)
2717        ;
2718#pragma omp sections
2719      {
2720        bar();
2721      }
2722    }
2723  }
2724#pragma omp parallel for simd
2725  for (int i = 0; i < 10; ++i) {
2726#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2727    for (int i = 0; i < 10; ++i)
2728      ;
2729  }
2730#pragma omp parallel for simd
2731  for (int i = 0; i < 10; ++i) {
2732#pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2733    for (int i = 0; i < 10; ++i)
2734      ;
2735  }
2736#pragma omp parallel for simd
2737  for (int i = 0; i < 10; ++i) {
2738#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2739    {
2740      bar();
2741    }
2742  }
2743#pragma omp parallel for simd
2744  for (int i = 0; i < 10; ++i) {
2745#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2746    {
2747      bar();
2748    }
2749  }
2750#pragma omp parallel for simd
2751  for (int i = 0; i < 10; ++i) {
2752#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2753    bar();
2754  }
2755#pragma omp parallel for simd
2756  for (int i = 0; i < 10; ++i) {
2757#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2758    bar();
2759  }
2760#pragma omp parallel for simd
2761  for (int i = 0; i < 10; ++i) {
2762#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2763    bar();
2764  }
2765#pragma omp parallel for simd
2766  for (int i = 0; i < 10; ++i) {
2767#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2768    bar();
2769  }
2770#pragma omp parallel for simd
2771  for (int i = 0; i < 10; ++i) {
2772#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2773    bar();
2774  }
2775#pragma omp parallel for simd
2776  for (int i = 0; i < 10; ++i) {
2777#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2778    bar();
2779  }
2780#pragma omp parallel for simd
2781  for (int i = 0; i < 10; ++i) {
2782#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2783    ++a;
2784  }
2785#pragma omp parallel for simd
2786  for (int i = 0; i < 10; ++i) {
2787#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2788    ++a;
2789  }
2790#pragma omp parallel for simd
2791  for (int i = 0; i < 10; ++i) {
2792#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2793    ++a;
2794  }
2795#pragma omp parallel for simd
2796  for (int i = 0; i < 10; ++i) {
2797#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2798    for (int i = 0; i < 10; ++i)
2799      ;
2800  }
2801#pragma omp parallel for simd
2802  for (int i = 0; i < 10; ++i) {
2803#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2804    ++a;
2805  }
2806#pragma omp parallel for simd
2807  for (int i = 0; i < 10; ++i) {
2808#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2809    ++a;
2810  }
2811#pragma omp parallel for simd
2812  for (int i = 0; i < 10; ++i) {
2813#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2814    ++a;
2815  }
2816#pragma omp parallel for simd
2817  for (int i = 0; i < 10; ++i) {
2818#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2819  for (int i = 0; i < 10; ++i)
2820    ++a;
2821  }
2822#pragma omp parallel for simd
2823  for (int i = 0; i < 10; ++i) {
2824#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2825    for (int j = 0; j < 10; ++j)
2826      ;
2827  }
2828#pragma omp parallel for simd
2829  for (int i = 0; i < 10; ++i) {
2830#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2831    bar();
2832  }
2833#pragma omp parallel for simd
2834  for (int i = 0; i < 10; ++i) {
2835#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2836    for (int j = 0; j < 10; ++j)
2837      ;
2838  }
2839#pragma omp parallel for simd
2840  for (int i = 0; i < 10; ++i) {
2841#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2842    for (int j = 0; j < 10; ++j)
2843      ;
2844  }
2845#pragma omp parallel for simd
2846  for (int i = 0; i < 10; ++i) {
2847#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2848    for (int j = 0; j < 10; ++j)
2849      ;
2850  }
2851#pragma omp parallel for simd
2852  for (int i = 0; i < 10; ++i) {
2853#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2854    for (int j = 0; j < 10; ++j)
2855      ;
2856  }
2857#pragma omp parallel for simd
2858  for (int i = 0; i < 10; ++i) {
2859#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2860    for (int j = 0; j < 10; ++j)
2861      ;
2862  }
2863#pragma omp parallel for simd
2864  for (int i = 0; i < 10; ++i) {
2865#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2866    for (int j = 0; j < 10; ++j)
2867      ;
2868  }
2869#pragma omp parallel for simd
2870  for (int i = 0; i < 10; ++i) {
2871#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2872    for (int j = 0; j < 10; ++j)
2873      ;
2874  }
2875#pragma omp parallel for simd
2876  for (int i = 0; i < 10; ++i) {
2877#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2878    for (int j = 0; j < 10; ++j)
2879      ;
2880  }
2881#pragma omp parallel for simd
2882  for (int i = 0; i < 10; ++i) {
2883#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2884    a++;
2885  }
2886#pragma omp parallel for simd
2887  for (int i = 0; i < 10; ++i) {
2888#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2889    for (int j = 0; j < 10; ++j)
2890      ;
2891  }
2892#pragma omp parallel for simd
2893  for (int i = 0; i < 10; ++i) {
2894#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2895    for (int j = 0; j < 10; ++j)
2896      ;
2897  }
2898#pragma omp parallel for simd
2899  for (int i = 0; i < 10; ++i) {
2900#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2901    for (int j = 0; j < 10; ++j)
2902      ;
2903  }
2904#pragma omp parallel for simd
2905  for (int i = 0; i < 10; ++i) {
2906#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2907    for (int j = 0; j < 10; ++j)
2908      ;
2909  }
2910
2911// PARALLEL SECTIONS DIRECTIVE
2912#pragma omp parallel sections
2913  {
2914#pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
2915    for (int i = 0; i < 10; ++i)
2916      ;
2917  }
2918#pragma omp parallel sections
2919  {
2920#pragma omp simd
2921    for (int i = 0; i < 10; ++i)
2922      ;
2923  }
2924#pragma omp parallel sections
2925  {
2926#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
2927    for (int i = 0; i < 10; ++i)
2928      ;
2929  }
2930#pragma omp parallel sections
2931  {
2932#pragma omp parallel
2933    for (int i = 0; i < 10; ++i)
2934      ;
2935  }
2936#pragma omp parallel sections
2937  {
2938#pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
2939    {
2940      bar();
2941    }
2942  }
2943#pragma omp parallel sections
2944  {
2945#pragma omp section
2946    {
2947      bar();
2948    }
2949  }
2950#pragma omp parallel sections
2951  {
2952#pragma omp section
2953    {
2954#pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
2955      bar();
2956    }
2957  }
2958#pragma omp parallel sections
2959  {
2960#pragma omp section
2961    {
2962#pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2963      bar();
2964    }
2965  }
2966#pragma omp parallel sections
2967  {
2968#pragma omp section
2969    {
2970#pragma omp critical
2971      bar();
2972    }
2973  }
2974#pragma omp parallel sections
2975  {
2976#pragma omp parallel
2977    {
2978#pragma omp single // OK
2979      {
2980        bar();
2981      }
2982#pragma omp for // OK
2983      for (int i = 0; i < 10; ++i)
2984        ;
2985#pragma omp for simd // OK
2986      for (int i = 0; i < 10; ++i)
2987        ;
2988#pragma omp sections // OK
2989      {
2990        bar();
2991      }
2992    }
2993  }
2994#pragma omp parallel sections
2995  {
2996#pragma omp parallel for
2997    for (int i = 0; i < 10; ++i)
2998      ;
2999  }
3000#pragma omp parallel sections
3001  {
3002#pragma omp parallel for simd
3003    for (int i = 0; i < 10; ++i)
3004      ;
3005  }
3006#pragma omp parallel sections
3007  {
3008#pragma omp parallel sections
3009    {
3010      bar();
3011    }
3012  }
3013#pragma omp parallel sections
3014  {
3015#pragma omp task
3016    {
3017      bar();
3018    }
3019  }
3020#pragma omp parallel sections
3021  {
3022#pragma omp taskyield
3023  }
3024#pragma omp parallel sections
3025  {
3026#pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
3027  }
3028#pragma omp parallel sections
3029  {
3030#pragma omp taskwait
3031  }
3032#pragma omp parallel sections
3033  {
3034#pragma omp flush
3035  }
3036#pragma omp parallel sections
3037  {
3038#pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3039    bar();
3040  }
3041#pragma omp parallel sections
3042  {
3043#pragma omp atomic
3044    ++a;
3045  }
3046#pragma omp parallel sections
3047  {
3048#pragma omp target
3049    ++a;
3050  }
3051#pragma omp parallel sections
3052  {
3053#pragma omp target parallel
3054    ++a;
3055  }
3056#pragma omp parallel sections
3057  {
3058#pragma omp target parallel for
3059    for (int i = 0; i < 10; ++i)
3060      ;
3061  }
3062#pragma omp parallel sections
3063  {
3064#pragma omp target enter data map(to: a)
3065  }
3066#pragma omp parallel sections
3067  {
3068#pragma omp target exit data map(from: a)
3069  }
3070#pragma omp parallel sections
3071  {
3072#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3073    ++a;
3074  }
3075#pragma omp parallel sections
3076  {
3077#pragma omp taskloop
3078  for (int i = 0; i < 10; ++i)
3079    ++a;
3080  }
3081#pragma omp parallel sections
3082  {
3083#pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3084    for (int i = 0; i < 10; ++i)
3085      ;
3086  }
3087#pragma omp parallel sections
3088  {
3089#pragma omp target update to(a)
3090  }
3091#pragma omp parallel sections
3092  {
3093#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3094    for (int i = 0; i < 10; ++i)
3095      ;
3096  }
3097#pragma omp parallel sections
3098  {
3099#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3100    for (int i = 0; i < 10; ++i)
3101      ;
3102  }
3103#pragma omp parallel sections
3104  {
3105#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3106    for (int i = 0; i < 10; ++i)
3107      ;
3108  }
3109#pragma omp parallel sections
3110  {
3111#pragma omp target simd // OK
3112    for (int i = 0; i < 10; ++i)
3113      ;
3114  }
3115#pragma omp parallel sections
3116  {
3117#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
3118    for (int i = 0; i < 10; ++i)
3119      ;
3120  }
3121#pragma omp parallel sections
3122  {
3123#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
3124    for (int i = 0; i < 10; ++i)
3125      ;
3126  }
3127#pragma omp parallel sections
3128  {
3129#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3130    for (int i = 0; i < 10; ++i)
3131      ;
3132  }
3133#pragma omp parallel sections
3134  {
3135#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3136    for (int i = 0; i < 10; ++i)
3137      ;
3138  }
3139#pragma omp parallel sections
3140  {
3141#pragma omp target teams // OK
3142    a++;
3143  }
3144#pragma omp parallel sections
3145  {
3146#pragma omp target teams distribute // OK
3147    for (int i = 0; i < 10; ++i)
3148      ;
3149  }
3150#pragma omp parallel sections
3151  {
3152#pragma omp target teams distribute parallel for // OK
3153    for (int i = 0; i < 10; ++i)
3154      ;
3155  }
3156#pragma omp parallel sections
3157  {
3158#pragma omp target teams distribute parallel for simd // OK
3159    for (int i = 0; i < 10; ++i)
3160      ;
3161  }
3162#pragma omp parallel sections
3163  {
3164#pragma omp target teams distribute simd // OK
3165    for (int i = 0; i < 10; ++i)
3166      ;
3167  }
3168
3169// TASK DIRECTIVE
3170#pragma omp task
3171#pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
3172  for (int i = 0; i < 10; ++i)
3173    ;
3174#pragma omp task
3175#pragma omp simd
3176  for (int i = 0; i < 10; ++i)
3177    ;
3178#pragma omp task
3179#pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
3180  for (int i = 0; i < 10; ++i)
3181    ;
3182#pragma omp task
3183#pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
3184  {
3185    bar();
3186  }
3187#pragma omp task
3188#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
3189  {
3190    bar();
3191  }
3192#pragma omp task
3193#pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
3194  bar();
3195#pragma omp task
3196#pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
3197  bar();
3198#pragma omp task
3199#pragma omp critical
3200  bar();
3201
3202#pragma omp task
3203#pragma omp parallel for
3204  for (int i = 0; i < 10; ++i)
3205    ;
3206#pragma omp task
3207#pragma omp parallel for simd
3208  for (int i = 0; i < 10; ++i)
3209    ;
3210#pragma omp task
3211#pragma omp parallel sections
3212  {
3213    bar();
3214  }
3215#pragma omp task
3216#pragma omp task
3217  {
3218    bar();
3219  }
3220#pragma omp task
3221  {
3222#pragma omp taskyield
3223    bar();
3224  }
3225#pragma omp task
3226  {
3227#pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
3228    bar();
3229  }
3230#pragma omp task
3231  {
3232#pragma omp taskwait
3233    bar();
3234  }
3235#pragma omp task
3236  {
3237#pragma omp flush
3238    bar();
3239  }
3240#pragma omp task
3241  {
3242#pragma omp ordered // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3243    bar();
3244  }
3245#pragma omp task
3246  {
3247#pragma omp atomic
3248    ++a;
3249  }
3250#pragma omp task
3251  {
3252#pragma omp target
3253    ++a;
3254  }
3255#pragma omp task
3256  {
3257#pragma omp target parallel
3258    ++a;
3259  }
3260#pragma omp task
3261#pragma omp target parallel for
3262  for (int i = 0; i < 10; ++i)
3263    ;
3264#pragma omp task
3265  {
3266#pragma omp target enter data map(to: a)
3267    ++a;
3268  }
3269#pragma omp task
3270  {
3271#pragma omp target exit data map(from: a)
3272    ++a;
3273  }
3274#pragma omp task
3275  {
3276#pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3277    ++a;
3278  }
3279#pragma omp task
3280  {
3281#pragma omp taskloop
3282  for (int i = 0; i < 10; ++i)
3283    ++a;
3284  }
3285#pragma omp task
3286  {
3287#pragma omp distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3288    for (int i = 0; i < 10; ++i)
3289      ;
3290  }
3291#pragma omp task
3292  {
3293#pragma omp target update to(a)
3294    bar();
3295  }
3296#pragma omp task
3297  {
3298#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3299    for (int i = 0; i < 10; ++i)
3300      ;
3301  }
3302#pragma omp task
3303  {
3304#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3305    for (int i = 0; i < 10; ++i)
3306      ;
3307  }
3308#pragma omp task
3309  {
3310#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3311    for (int i = 0; i < 10; ++i)
3312      ;
3313  }
3314#pragma omp task
3315  {
3316#pragma omp target simd // OK
3317    for (int i = 0; i < 10; ++i)
3318      ;
3319  }
3320#pragma omp task
3321  {
3322#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
3323    for (int i = 0; i < 10; ++i)
3324      ;
3325  }
3326#pragma omp task
3327  {
3328#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
3329    for (int i = 0; i < 10; ++i)
3330      ;
3331  }
3332#pragma omp task
3333  {
3334#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3335    for (int i = 0; i < 10; ++i)
3336      ;
3337  }
3338#pragma omp task
3339  {
3340#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3341    for (int i = 0; i < 10; ++i)
3342      ;
3343  }
3344#pragma omp task
3345  {
3346#pragma omp target teams // OK
3347    a++;
3348  }
3349#pragma omp task
3350  {
3351#pragma omp target teams distribute // OK
3352    for (int i = 0; i < 10; ++i)
3353      ;
3354  }
3355#pragma omp task
3356  {
3357#pragma omp target teams distribute parallel for // OK
3358    for (int i = 0; i < 10; ++i)
3359      ;
3360  }
3361#pragma omp task
3362  {
3363#pragma omp target teams distribute parallel for simd // OK
3364    for (int i = 0; i < 10; ++i)
3365      ;
3366  }
3367#pragma omp task
3368  {
3369#pragma omp target teams distribute simd // OK
3370    for (int i = 0; i < 10; ++i)
3371      ;
3372  }
3373
3374// ORDERED DIRECTIVE
3375#pragma omp ordered
3376  {
3377#pragma omp for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
3378    for (int i = 0; i < 10; ++i)
3379      ;
3380  }
3381#pragma omp ordered
3382  {
3383#pragma omp simd
3384    for (int i = 0; i < 10; ++i)
3385      ;
3386  }
3387#pragma omp ordered
3388  {
3389#pragma omp for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
3390    for (int i = 0; i < 10; ++i)
3391      ;
3392  }
3393#pragma omp ordered
3394  {
3395#pragma omp parallel
3396    for (int i = 0; i < 10; ++i)
3397      ;
3398  }
3399#pragma omp ordered
3400  {
3401#pragma omp single // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
3402    {
3403      bar();
3404    }
3405  }
3406#pragma omp ordered
3407  {
3408#pragma omp master // OK, though second 'ordered' is redundant
3409    {
3410      bar();
3411    }
3412  }
3413#pragma omp ordered
3414  {
3415#pragma omp critical
3416    {
3417      bar();
3418    }
3419  }
3420#pragma omp ordered
3421  {
3422#pragma omp sections // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
3423    {
3424      bar();
3425    }
3426  }
3427#pragma omp ordered
3428  {
3429#pragma omp parallel for ordered
3430    for (int j = 0; j < 10; ++j) {
3431#pragma omp ordered // OK
3432      {
3433        bar();
3434      }
3435    }
3436  }
3437#pragma omp ordered
3438  {
3439#pragma omp parallel for simd ordered
3440    for (int j = 0; j < 10; ++j) {
3441#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
3442      {
3443        bar();
3444      }
3445    }
3446  }
3447#pragma omp ordered
3448  {
3449#pragma omp parallel for simd ordered
3450    for (int j = 0; j < 10; ++j) {
3451#pragma omp ordered simd
3452      {
3453        bar();
3454      }
3455    }
3456  }
3457#pragma omp ordered
3458  {
3459#pragma omp parallel for
3460    for (int i = 0; i < 10; ++i)
3461      ;
3462  }
3463#pragma omp ordered
3464  {
3465#pragma omp parallel for simd
3466    for (int i = 0; i < 10; ++i)
3467      ;
3468  }
3469#pragma omp ordered
3470  {
3471#pragma omp parallel sections
3472    {
3473      bar();
3474    }
3475  }
3476#pragma omp ordered
3477  {
3478#pragma omp task
3479    {
3480      bar();
3481    }
3482  }
3483#pragma omp ordered
3484  {
3485#pragma omp taskyield
3486    bar();
3487  }
3488#pragma omp ordered
3489  {
3490#pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
3491    bar();
3492  }
3493#pragma omp ordered
3494  {
3495#pragma omp taskwait
3496    bar();
3497  }
3498#pragma omp ordered
3499  {
3500#pragma omp flush
3501    bar();
3502  }
3503#pragma omp ordered
3504  {
3505#pragma omp ordered // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3506    bar();
3507  }
3508#pragma omp ordered
3509  {
3510#pragma omp atomic
3511    ++a;
3512  }
3513#pragma omp ordered
3514  {
3515#pragma omp target
3516    ++a;
3517  }
3518#pragma omp ordered
3519  {
3520#pragma omp target parallel
3521    ++a;
3522  }
3523#pragma omp ordered
3524  {
3525#pragma omp target parallel for ordered
3526    for (int j = 0; j < 10; ++j) {
3527#pragma omp ordered // OK
3528      {
3529        bar();
3530      }
3531    }
3532  }
3533#pragma omp ordered
3534  {
3535#pragma omp target parallel for
3536    for (int i = 0; i < 10; ++i)
3537      ;
3538  }
3539#pragma omp ordered
3540  {
3541#pragma omp target enter data map(to: a)
3542    ++a;
3543  }
3544#pragma omp ordered
3545  {
3546#pragma omp target exit data map(from: a)
3547    ++a;
3548  }
3549#pragma omp ordered
3550  {
3551#pragma omp teams // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3552    ++a;
3553  }
3554#pragma omp ordered
3555  {
3556#pragma omp taskloop
3557  for (int i = 0; i < 10; ++i)
3558    ++a;
3559  }
3560#pragma omp ordered
3561  {
3562#pragma omp distribute // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3563    for (int i = 0; i < 10; ++i)
3564      ;
3565  }
3566#pragma omp ordered
3567  {
3568    bar();
3569#pragma omp target update to(a)
3570    bar();
3571  }
3572#pragma omp ordered
3573  {
3574#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3575    for (int i = 0; i < 10; ++i)
3576      ;
3577  }
3578#pragma omp ordered
3579  {
3580#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3581    for (int i = 0; i < 10; ++i)
3582      ;
3583  }
3584#pragma omp ordered
3585  {
3586#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3587    for (int i = 0; i < 10; ++i)
3588      ;
3589  }
3590#pragma omp ordered
3591  {
3592#pragma omp target simd // OK
3593    for (int i = 0; i < 10; ++i)
3594      ;
3595  }
3596#pragma omp ordered
3597  {
3598#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
3599    for (int i = 0; i < 10; ++i)
3600      ;
3601  }
3602#pragma omp ordered
3603  {
3604#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
3605    for (int i = 0; i < 10; ++i)
3606      ;
3607  }
3608#pragma omp ordered
3609  {
3610#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
3611    for (int i = 0; i < 10; ++i)
3612      ;
3613  }
3614#pragma omp ordered
3615  {
3616#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
3617    for (int i = 0; i < 10; ++i)
3618      ;
3619  }
3620#pragma omp ordered
3621  {
3622#pragma omp target teams // OK
3623    a++;
3624  }
3625#pragma omp ordered
3626  {
3627#pragma omp target teams distribute // OK
3628    for (int i = 0; i < 10; ++i)
3629      ;
3630  }
3631#pragma omp ordered
3632  {
3633#pragma omp target teams distribute parallel for // OK
3634    for (int i = 0; i < 10; ++i)
3635      ;
3636  }
3637#pragma omp ordered
3638  {
3639#pragma omp target teams distribute parallel for simd // OK
3640    for (int i = 0; i < 10; ++i)
3641      ;
3642  }
3643#pragma omp ordered
3644  {
3645#pragma omp target teams distribute simd // OK
3646    for (int i = 0; i < 10; ++i)
3647      ;
3648  }
3649
3650// ATOMIC DIRECTIVE
3651#pragma omp atomic
3652  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3653  // expected-note@+1 {{expected an expression statement}}
3654  {
3655#pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3656    for (int i = 0; i < 10; ++i)
3657      ;
3658  }
3659#pragma omp atomic
3660  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3661  // expected-note@+1 {{expected an expression statement}}
3662  {
3663#pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3664    for (int i = 0; i < 10; ++i)
3665      ;
3666  }
3667#pragma omp atomic
3668  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3669  // expected-note@+1 {{expected an expression statement}}
3670  {
3671#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3672    for (int i = 0; i < 10; ++i)
3673      ;
3674  }
3675#pragma omp atomic
3676  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3677  // expected-note@+1 {{expected an expression statement}}
3678  {
3679#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3680    for (int i = 0; i < 10; ++i)
3681      ;
3682  }
3683#pragma omp atomic
3684  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3685  // expected-note@+1 {{expected an expression statement}}
3686  {
3687#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3688    {
3689      bar();
3690    }
3691  }
3692#pragma omp atomic
3693  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3694  // expected-note@+1 {{expected an expression statement}}
3695  {
3696#pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3697    {
3698      bar();
3699    }
3700  }
3701#pragma omp atomic
3702  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3703  // expected-note@+1 {{expected an expression statement}}
3704  {
3705#pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3706    {
3707      bar();
3708    }
3709  }
3710#pragma omp atomic
3711  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3712  // expected-note@+1 {{expected an expression statement}}
3713  {
3714#pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3715    {
3716      bar();
3717    }
3718  }
3719#pragma omp atomic
3720  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3721  // expected-note@+1 {{expected an expression statement}}
3722  {
3723#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3724    {
3725      bar();
3726    }
3727  }
3728#pragma omp atomic
3729  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3730  // expected-note@+1 {{expected an expression statement}}
3731  {
3732#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3733    for (int i = 0; i < 10; ++i)
3734      ;
3735  }
3736#pragma omp atomic
3737  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3738  // expected-note@+1 {{expected an expression statement}}
3739  {
3740#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3741    for (int i = 0; i < 10; ++i)
3742      ;
3743  }
3744#pragma omp atomic
3745  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3746  // expected-note@+1 {{expected an expression statement}}
3747  {
3748#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3749    {
3750      bar();
3751    }
3752  }
3753#pragma omp atomic
3754  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3755  // expected-note@+1 {{expected an expression statement}}
3756  {
3757#pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3758    {
3759      bar();
3760    }
3761  }
3762#pragma omp atomic
3763  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3764  // expected-note@+1 {{expected an expression statement}}
3765  {
3766#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3767    bar();
3768  }
3769#pragma omp atomic
3770  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3771  // expected-note@+1 {{expected an expression statement}}
3772  {
3773#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3774    bar();
3775  }
3776#pragma omp atomic
3777  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3778  // expected-note@+1 {{expected an expression statement}}
3779  {
3780#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3781    bar();
3782  }
3783#pragma omp atomic
3784  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3785  // expected-note@+1 {{expected an expression statement}}
3786  {
3787#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3788    bar();
3789  }
3790#pragma omp atomic
3791  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3792  // expected-note@+1 {{expected an expression statement}}
3793  {
3794#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3795    bar();
3796  }
3797#pragma omp atomic
3798  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3799  // expected-note@+1 {{expected an expression statement}}
3800  {
3801#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3802    ++a;
3803  }
3804#pragma omp atomic
3805  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3806  // expected-note@+1 {{expected an expression statement}}
3807  {
3808#pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3809    ++a;
3810  }
3811#pragma omp atomic
3812  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3813  // expected-note@+1 {{expected an expression statement}}
3814  {
3815#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3816    ++a;
3817  }
3818#pragma omp atomic
3819  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3820  // expected-note@+1 {{expected an expression statement}}
3821  {
3822#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3823    for (int i = 0; i < 10; ++i)
3824      ;
3825  }
3826#pragma omp atomic
3827  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3828  // expected-note@+1 {{expected an expression statement}}
3829  {
3830#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3831    ++a;
3832  }
3833#pragma omp atomic
3834  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3835  // expected-note@+1 {{expected an expression statement}}
3836  {
3837#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3838    ++a;
3839  }
3840#pragma omp atomic
3841  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3842  // expected-note@+1 {{expected an expression statement}}
3843  {
3844#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3845    ++a;
3846  }
3847#pragma omp atomic
3848  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3849  // expected-note@+1 {{expected an expression statement}}
3850  {
3851#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3852  for (int i = 0; i < 10; ++i)
3853    ++a;
3854  }
3855#pragma omp atomic
3856  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3857  // expected-note@+1 {{expected an expression statement}}
3858  {
3859#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3860    for (int i = 0; i < 10; ++i)
3861      ;
3862  }
3863#pragma omp atomic
3864  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3865  // expected-note@+1 {{expected an expression statement}}
3866  {
3867#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3868    bar();
3869  }
3870#pragma omp atomic
3871  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3872  // expected-note@+1 {{expected an expression statement}}
3873  {
3874#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3875    for (int i = 0; i < 10; ++i)
3876      ;
3877  }
3878#pragma omp atomic
3879  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3880  // expected-note@+1 {{expected an expression statement}}
3881  {
3882#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3883    for (int i = 0; i < 10; ++i)
3884      ;
3885  }
3886#pragma omp atomic
3887  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3888  // expected-note@+1 {{expected an expression statement}}
3889  {
3890#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3891    for (int i = 0; i < 10; ++i)
3892      ;
3893  }
3894#pragma omp atomic
3895  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3896  // expected-note@+1 {{expected an expression statement}}
3897  {
3898#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3899    for (int i = 0; i < 10; ++i)
3900      ;
3901  }
3902#pragma omp atomic
3903  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3904  // expected-note@+1 {{expected an expression statement}}
3905  {
3906#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3907    for (int i = 0; i < 10; ++i)
3908      ;
3909  }
3910#pragma omp atomic
3911  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3912  // expected-note@+1 {{expected an expression statement}}
3913  {
3914#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3915    for (int i = 0; i < 10; ++i)
3916      ;
3917  }
3918#pragma omp atomic
3919  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3920  // expected-note@+1 {{expected an expression statement}}
3921  {
3922#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3923    for (int i = 0; i < 10; ++i)
3924      ;
3925  }
3926#pragma omp atomic
3927  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3928  // expected-note@+1 {{expected an expression statement}}
3929  {
3930#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3931    for (int i = 0; i < 10; ++i)
3932      ;
3933  }
3934#pragma omp atomic
3935  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3936  // expected-note@+1 {{expected an expression statement}}
3937  {
3938#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3939    a++;
3940  }
3941#pragma omp atomic
3942  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3943  // expected-note@+1 {{expected an expression statement}}
3944  {
3945#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3946    for (int i = 0; i < 10; ++i)
3947      ;
3948  }
3949#pragma omp atomic
3950  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3951  // expected-note@+1 {{expected an expression statement}}
3952  {
3953#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3954    for (int i = 0; i < 10; ++i)
3955      ;
3956  }
3957#pragma omp atomic
3958  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3959  // expected-note@+1 {{expected an expression statement}}
3960  {
3961#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3962    for (int i = 0; i < 10; ++i)
3963      ;
3964  }
3965#pragma omp atomic
3966  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3967  // expected-note@+1 {{expected an expression statement}}
3968  {
3969#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3970    for (int i = 0; i < 10; ++i)
3971      ;
3972  }
3973
3974// TARGET DIRECTIVE
3975#pragma omp target
3976#pragma omp parallel
3977  bar();
3978#pragma omp target
3979#pragma omp for
3980  for (int i = 0; i < 10; ++i)
3981    ;
3982#pragma omp target
3983#pragma omp simd
3984  for (int i = 0; i < 10; ++i)
3985    ;
3986#pragma omp target
3987#pragma omp for simd
3988  for (int i = 0; i < 10; ++i)
3989    ;
3990#pragma omp target
3991#pragma omp sections
3992  {
3993    bar();
3994  }
3995#pragma omp target
3996#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3997  {
3998    bar();
3999  }
4000#pragma omp target
4001#pragma omp single
4002  bar();
4003
4004#pragma omp target
4005#pragma omp master
4006  {
4007    bar();
4008  }
4009#pragma omp target
4010#pragma omp critical
4011  {
4012    bar();
4013  }
4014#pragma omp target
4015#pragma omp parallel for
4016  for (int i = 0; i < 10; ++i)
4017    ;
4018#pragma omp target
4019#pragma omp parallel for simd
4020  for (int i = 0; i < 10; ++i)
4021    ;
4022#pragma omp target
4023#pragma omp parallel sections
4024  {
4025    bar();
4026  }
4027#pragma omp target
4028#pragma omp task
4029  {
4030    bar();
4031  }
4032#pragma omp target
4033  {
4034#pragma omp taskyield
4035    bar();
4036  }
4037#pragma omp target
4038  {
4039#pragma omp barrier
4040    bar();
4041  }
4042#pragma omp target
4043  {
4044#pragma omp taskwait
4045    bar();
4046  }
4047#pragma omp target
4048  {
4049#pragma omp flush
4050    bar();
4051  }
4052#pragma omp target
4053  {
4054#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
4055    bar();
4056  }
4057#pragma omp target
4058  {
4059#pragma omp atomic
4060    ++a;
4061  }
4062#pragma omp target
4063  {
4064#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4065    ++a;
4066  }
4067#pragma omp target
4068  {
4069#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4070    ++a;
4071  }
4072#pragma omp target
4073#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4074  for (int i = 0; i < 10; ++i)
4075    ;
4076#pragma omp target
4077  {
4078#pragma omp teams
4079    ++a;
4080  }
4081#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4082  {
4083#pragma omp teams // expected-note {{directive outside teams construct here}}
4084    ++a;
4085#pragma omp teams // expected-note {{nested teams construct here}}
4086    ++a;
4087  }
4088#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4089  {
4090    ++a;           // expected-note {{statement outside teams construct here}}
4091#pragma omp teams  // expected-note {{nested teams construct here}}
4092    ++a;
4093  }
4094#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
4095  {
4096    while (0)      // expected-note {{statement outside teams construct here}}
4097#pragma omp teams  // expected-note {{nested teams construct here}}
4098    ++a;
4099  }
4100#pragma omp target
4101  {
4102#pragma omp taskloop
4103  for (int i = 0; i < 10; ++i)
4104    ++a;
4105  }
4106#pragma omp target
4107  { 
4108#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
4109    for (int i = 0; i < 10; ++i)
4110      ;
4111  }
4112#pragma omp target
4113  {
4114#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4115  }
4116#pragma omp target
4117  {
4118#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4119  }
4120#pragma omp target
4121  {
4122#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4123  }
4124#pragma omp target
4125  { 
4126#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
4127    for (int i = 0; i < 10; ++i)
4128      ;
4129  }
4130#pragma omp target
4131  { 
4132#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
4133    for (int i = 0; i < 10; ++i)
4134      ;
4135  }
4136#pragma omp target
4137  { 
4138#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
4139    for (int i = 0; i < 10; ++i)
4140      ;
4141  }
4142#pragma omp target
4143  { 
4144#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4145    for (int i = 0; i < 10; ++i)
4146      ;
4147  }
4148#pragma omp target
4149  { 
4150#pragma omp teams distribute // OK
4151    for (int i = 0; i < 10; ++i)
4152      ;
4153  }
4154#pragma omp target
4155  { 
4156#pragma omp teams distribute simd // OK
4157    for (int i = 0; i < 10; ++i)
4158      ;
4159  }
4160#pragma omp target
4161  { 
4162#pragma omp teams distribute parallel for simd // OK
4163    for (int i = 0; i < 10; ++i)
4164      ;
4165  }
4166#pragma omp target
4167  { 
4168#pragma omp teams distribute parallel for // OK
4169    for (int i = 0; i < 10; ++i)
4170      ;
4171  }
4172#pragma omp target
4173  { 
4174#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4175    for (int i = 0; i < 10; ++i)
4176      ;
4177  }
4178#pragma omp target
4179  { 
4180#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4181    for (int i = 0; i < 10; ++i)
4182      ;
4183  }
4184#pragma omp target
4185  { 
4186#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4187    for (int i = 0; i < 10; ++i)
4188      ;
4189  }
4190#pragma omp target
4191  { 
4192#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4193    for (int i = 0; i < 10; ++i)
4194      ;
4195  }
4196#pragma omp target
4197  { 
4198#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4199    for (int i = 0; i < 10; ++i)
4200      ;
4201  }
4202
4203// TARGET PARALLEL DIRECTIVE
4204#pragma omp target parallel
4205#pragma omp parallel
4206  bar();
4207#pragma omp target parallel
4208#pragma omp for
4209  for (int i = 0; i < 10; ++i)
4210    ;
4211#pragma omp target parallel
4212#pragma omp simd
4213  for (int i = 0; i < 10; ++i)
4214    ;
4215#pragma omp target parallel
4216#pragma omp for simd
4217  for (int i = 0; i < 10; ++i)
4218    ;
4219#pragma omp target parallel
4220#pragma omp sections
4221  {
4222    bar();
4223  }
4224#pragma omp target parallel
4225#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
4226  {
4227    bar();
4228  }
4229#pragma omp target parallel
4230#pragma omp single
4231  bar();
4232
4233#pragma omp target parallel
4234#pragma omp master
4235  {
4236    bar();
4237  }
4238#pragma omp target parallel
4239#pragma omp critical
4240  {
4241    bar();
4242  }
4243#pragma omp target parallel
4244#pragma omp parallel for
4245  for (int i = 0; i < 10; ++i)
4246    ;
4247#pragma omp target parallel
4248#pragma omp parallel for simd
4249  for (int i = 0; i < 10; ++i)
4250    ;
4251#pragma omp target parallel
4252#pragma omp parallel sections
4253  {
4254    bar();
4255  }
4256#pragma omp target parallel
4257#pragma omp task
4258  {
4259    bar();
4260  }
4261#pragma omp target parallel
4262  {
4263#pragma omp taskyield
4264    bar();
4265  }
4266#pragma omp target parallel
4267  {
4268#pragma omp barrier
4269    bar();
4270  }
4271#pragma omp target parallel
4272  {
4273#pragma omp taskwait
4274    bar();
4275  }
4276#pragma omp target parallel
4277  {
4278#pragma omp flush
4279    bar();
4280  }
4281#pragma omp target parallel
4282  {
4283#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
4284    bar();
4285  }
4286#pragma omp target parallel
4287  {
4288#pragma omp atomic
4289    ++a;
4290  }
4291#pragma omp target parallel
4292  {
4293#pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
4294    ++a;
4295  }
4296#pragma omp target parallel
4297  {
4298#pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
4299    ++a;
4300  }
4301#pragma omp target parallel
4302#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4303  for (int i = 0; i < 10; ++i)
4304    ;
4305#pragma omp target parallel
4306  {
4307#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
4308    ++a;
4309  }
4310#pragma omp target parallel
4311  {
4312    ++a;
4313#pragma omp teams  // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
4314    ++a;
4315  }
4316#pragma omp target parallel
4317  {
4318#pragma omp taskloop
4319  for (int i = 0; i < 10; ++i)
4320    ++a;
4321  }
4322#pragma omp target parallel
4323  { 
4324#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
4325    for (int i = 0; i < 10; ++i)
4326      ;
4327  }
4328#pragma omp target parallel
4329  {
4330#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4331  }
4332#pragma omp target parallel
4333  {
4334#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4335  }
4336#pragma omp target parallel
4337  {
4338#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
4339  }
4340#pragma omp target parallel
4341  { 
4342#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
4343    for (int i = 0; i < 10; ++i)
4344      ;
4345  }
4346#pragma omp target parallel
4347  { 
4348#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
4349    for (int i = 0; i < 10; ++i)
4350      ;
4351  }
4352#pragma omp target parallel
4353  { 
4354#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
4355    for (int i = 0; i < 10; ++i)
4356      ;
4357  }
4358#pragma omp target parallel
4359  { 
4360#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4361    for (int i = 0; i < 10; ++i)
4362      ;
4363  }
4364#pragma omp target parallel
4365  { 
4366#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
4367    for (int i = 0; i < 10; ++i)
4368      ;
4369  }
4370#pragma omp target parallel
4371  { 
4372#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
4373    for (int i = 0; i < 10; ++i)
4374      ;
4375  }
4376#pragma omp target parallel
4377  { 
4378#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4379    for (int i = 0; i < 10; ++i)
4380      ;
4381  }
4382#pragma omp target parallel
4383  { 
4384#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4385    for (int i = 0; i < 10; ++i)
4386      ;
4387  }
4388#pragma omp target parallel
4389  { 
4390#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
4391    a++;
4392  }
4393#pragma omp target parallel
4394  { 
4395#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
4396    for (int i = 0; i < 10; ++i)
4397      ;
4398  }
4399#pragma omp target parallel
4400  { 
4401#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
4402    for (int i = 0; i < 10; ++i)
4403      ;
4404  }
4405#pragma omp target parallel
4406  { 
4407#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4408    for (int i = 0; i < 10; ++i)
4409      ;
4410  }
4411#pragma omp target parallel
4412  { 
4413#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
4414    for (int i = 0; i < 10; ++i)
4415      ;
4416  }
4417
4418// TARGET PARALLEL FOR DIRECTIVE
4419#pragma omp target parallel for
4420  for (int i = 0; i < 10; ++i) {
4421#pragma omp for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
4422    for (int i = 0; i < 10; ++i)
4423      ;
4424  }
4425#pragma omp target parallel for
4426  for (int i = 0; i < 10; ++i) {
4427#pragma omp simd
4428    for (int i = 0; i < 10; ++i)
4429      ;
4430  }
4431#pragma omp target parallel for
4432  for (int i = 0; i < 10; ++i) {
4433#pragma omp for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
4434    for (int i = 0; i < 10; ++i)
4435      ;
4436  }
4437#pragma omp target parallel for
4438  for (int i = 0; i < 10; ++i) {
4439#pragma omp parallel
4440    for (int i = 0; i < 10; ++i)
4441      ;
4442  }
4443#pragma omp target parallel for
4444  for (int i = 0; i < 10; ++i) {
4445#pragma omp sections // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
4446    {
4447      bar();
4448    }
4449  }
4450#pragma omp target parallel for
4451  for (int i = 0; i < 10; ++i) {
4452#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
4453    {
4454      bar();
4455    }
4456  }
4457#pragma omp target parallel for
4458  for (int i = 0; i < 10; ++i) {
4459#pragma omp single // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
4460    {
4461      bar();
4462    }
4463  }
4464
4465#pragma omp target parallel for
4466  for (int i = 0; i < 10; ++i) {
4467#pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4468    {
4469      bar();
4470    }
4471  }
4472
4473#pragma omp target parallel for
4474  for (int i = 0; i < 10; ++i) {
4475#pragma omp critical
4476    {
4477      bar();
4478    }
4479  }
4480
4481#pragma omp target parallel for
4482  for (int i = 0; i < 10; ++i) {
4483#pragma omp parallel
4484    {
4485#pragma omp single // OK
4486      {
4487        bar();
4488      }
4489#pragma omp for // OK
4490      for (int i = 0; i < 10; ++i)
4491        ;
4492#pragma omp for simd // OK
4493      for (int i = 0; i < 10; ++i)
4494        ;
4495#pragma omp sections // OK
4496      {
4497        bar();
4498      }
4499    }
4500  }
4501#pragma omp target parallel for
4502  for (int i = 0; i < 10; ++i) {
4503#pragma omp parallel for
4504    for (int i = 0; i < 10; ++i)
4505      ;
4506  }
4507#pragma omp target parallel for
4508  for (int i = 0; i < 10; ++i) {
4509#pragma omp parallel for simd
4510    for (int i = 0; i < 10; ++i)
4511      ;
4512  }
4513#pragma omp target parallel for
4514  for (int i = 0; i < 10; ++i) {
4515#pragma omp parallel sections
4516    {
4517      bar();
4518    }
4519  }
4520#pragma omp target parallel for
4521  for (int i = 0; i < 10; ++i) {
4522#pragma omp task
4523    {
4524      bar();
4525    }
4526  }
4527#pragma omp target parallel for
4528  for (int i = 0; i < 10; ++i) {
4529#pragma omp taskyield
4530    bar();
4531  }
4532#pragma omp target parallel for
4533  for (int i = 0; i < 10; ++i) {
4534#pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
4535    bar();
4536  }
4537#pragma omp target parallel for
4538  for (int i = 0; i < 10; ++i) {
4539#pragma omp taskwait
4540    bar();
4541  }
4542#pragma omp target parallel for
4543  for (int i = 0; i < 10; ++i) {
4544#pragma omp flush
4545    bar();
4546  }
4547#pragma omp target parallel for
4548  for (int i = 0; i < 10; ++i) {
4549#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
4550    bar();
4551  }
4552#pragma omp target parallel for ordered
4553  for (int i = 0; i < 10; ++i) {
4554#pragma omp ordered // OK
4555    bar();
4556  }
4557#pragma omp target parallel for
4558  for (int i = 0; i < 10; ++i) {
4559#pragma omp atomic
4560    ++a;
4561  }
4562#pragma omp target parallel for
4563  for (int i = 0; i < 10; ++i) {
4564#pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
4565    ++a;
4566  }
4567#pragma omp target parallel for
4568  for (int i = 0; i < 10; ++i) {
4569#pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
4570    ++a;
4571  }
4572#pragma omp target parallel for
4573  for (int i = 0; i < 10; ++i) {
4574#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4575    for (int i = 0; i < 10; ++i)
4576      ;
4577  }
4578#pragma omp target parallel for
4579  for (int i = 0; i < 10; ++i) {
4580#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4581    ++a;
4582  }
4583#pragma omp target parallel for
4584  for (int i = 0; i < 10; ++i) {
4585#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4586    ++a;
4587  }
4588#pragma omp target parallel for
4589  for (int i = 0; i < 10; ++i) {
4590#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
4591    ++a;
4592  }
4593#pragma omp target parallel for
4594  for (int i = 0; i < 10; ++i) {
4595#pragma omp taskloop
4596  for (int i = 0; i < 10; ++i)
4597    ++a;
4598  }
4599#pragma omp target parallel for
4600  for (int i = 0; i < 10; ++i) {
4601#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
4602    for (int j = 0; j < 10; ++j)
4603      ;
4604  }
4605#pragma omp target parallel for
4606  for (int i = 0; i < 10; ++i) {
4607#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
4608  }
4609#pragma omp target parallel for
4610  for (int i = 0; i < 10; ++i) {
4611#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
4612    for (int j = 0; j < 10; ++j)
4613      ;
4614  }    
4615#pragma omp target parallel for
4616  for (int i = 0; i < 10; ++i) {
4617#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
4618    for (int j = 0; j < 10; ++j)
4619      ;
4620  }    
4621#pragma omp target parallel for
4622  for (int i = 0; i < 10; ++i) {
4623#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
4624    for (int j = 0; j < 10; ++j)
4625      ;
4626  }    
4627#pragma omp target parallel for
4628  for (int i = 0; i < 10; ++i) {
4629#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4630    for (int j = 0; j < 10; ++j)
4631      ;
4632  }    
4633#pragma omp target parallel for
4634  for (int i = 0; i < 10; ++i) {
4635#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
4636    for (int j = 0; j < 10; ++j)
4637      ;
4638  }    
4639#pragma omp target parallel for
4640  for (int i = 0; i < 10; ++i) {
4641#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
4642    for (int j = 0; j < 10; ++j)
4643      ;
4644  }    
4645#pragma omp target parallel for
4646  for (int i = 0; i < 10; ++i) {
4647#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4648    for (int j = 0; j < 10; ++j)
4649      ;
4650  }    
4651#pragma omp target parallel for
4652  for (int i = 0; i < 10; ++i) {
4653#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4654    for (int j = 0; j < 10; ++j)
4655      ;
4656  }    
4657#pragma omp target parallel for
4658  for (int i = 0; i < 10; ++i) {
4659#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
4660    a++;
4661  }    
4662#pragma omp target parallel for
4663  for (int i = 0; i < 10; ++i) {
4664#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
4665    for (int j = 0; j < 10; ++j)
4666      ;
4667  }    
4668#pragma omp target parallel for
4669  for (int i = 0; i < 10; ++i) {
4670#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
4671    for (int j = 0; j < 10; ++j)
4672      ;
4673  }
4674#pragma omp target parallel for
4675  for (int i = 0; i < 10; ++i) {
4676#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4677    for (int j = 0; j < 10; ++j)
4678      ;
4679  }
4680#pragma omp target parallel for
4681  for (int i = 0; i < 10; ++i) {
4682#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
4683    for (int j = 0; j < 10; ++j)
4684      ;
4685  }
4686
4687// TEAMS DIRECTIVE
4688#pragma omp teams // expected-error {{orphaned 'omp teams' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
4689  bar();
4690#pragma omp target
4691#pragma omp teams
4692#pragma omp parallel
4693  bar();
4694#pragma omp target
4695#pragma omp teams
4696#pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
4697  for (int i = 0; i < 10; ++i)
4698    ;
4699#pragma omp target
4700#pragma omp teams
4701#pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
4702  for (int i = 0; i < 10; ++i)
4703    ;
4704#pragma omp target
4705#pragma omp teams
4706#pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
4707  for (int i = 0; i < 10; ++i)
4708    ;
4709#pragma omp target
4710#pragma omp teams
4711#pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
4712  {
4713    bar();
4714  }
4715#pragma omp target
4716#pragma omp teams
4717#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
4718  {
4719    bar();
4720  }
4721#pragma omp target
4722#pragma omp teams
4723#pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
4724  bar();
4725
4726#pragma omp target
4727#pragma omp teams
4728#pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
4729  {
4730    bar();
4731  }
4732#pragma omp target
4733#pragma omp teams
4734#pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
4735  {
4736    bar();
4737  }
4738#pragma omp target
4739#pragma omp teams
4740#pragma omp parallel for
4741  for (int i = 0; i < 10; ++i)
4742    ;
4743#pragma omp target
4744#pragma omp teams
4745#pragma omp parallel for simd
4746  for (int i = 0; i < 10; ++i)
4747    ;
4748#pragma omp target
4749#pragma omp teams
4750#pragma omp parallel sections
4751  {
4752    bar();
4753  }
4754#pragma omp target
4755#pragma omp teams
4756#pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
4757  {
4758    bar();
4759  }
4760#pragma omp target
4761#pragma omp teams
4762  {
4763#pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
4764    bar();
4765  }
4766#pragma omp target
4767#pragma omp teams
4768  {
4769#pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
4770    bar();
4771  }
4772#pragma omp target
4773#pragma omp teams
4774  {
4775#pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
4776    bar();
4777  }
4778#pragma omp target
4779#pragma omp teams
4780  {
4781#pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
4782    bar();
4783  }
4784#pragma omp target
4785#pragma omp teams
4786  {
4787#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
4788    bar();
4789  }
4790#pragma omp target
4791#pragma omp teams
4792  {
4793#pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
4794    ++a;
4795  }
4796#pragma omp target
4797#pragma omp teams
4798  {
4799#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4800    ++a;
4801  }
4802#pragma omp target
4803#pragma omp teams
4804  {
4805#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4806    ++a;
4807  }
4808#pragma omp target
4809#pragma omp teams
4810#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4811  for (int i = 0; i < 10; ++i)
4812    ;
4813#pragma omp target
4814#pragma omp teams
4815  {
4816#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4817    ++a;
4818  }
4819#pragma omp target
4820#pragma omp teams
4821  {
4822#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4823    ++a;
4824  }
4825#pragma omp target
4826#pragma omp teams
4827  {
4828#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
4829    ++a;
4830  }
4831#pragma omp target
4832#pragma omp teams
4833  {
4834#pragma omp taskloop // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
4835  for (int i = 0; i < 10; ++i)
4836    ++a;
4837  }
4838#pragma omp target
4839#pragma omp teams
4840#pragma omp distribute
4841  for (int i = 0; i < 10; ++i)
4842    ;
4843#pragma omp target
4844#pragma omp teams
4845#pragma omp distribute
4846  for (int i = 0; i < 10; ++i)
4847    ;
4848#pragma omp distribute
4849  for (int j = 0; j < 10; ++j)
4850    ;        
4851#pragma omp target
4852#pragma omp teams
4853  {
4854#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4855  }
4856#pragma omp target
4857#pragma omp teams
4858  {
4859#pragma omp distribute parallel for
4860  for (int i = 0; i < 10; ++i)
4861    ;
4862#pragma omp distribute parallel for
4863  for (int j = 0; j < 10; ++j)
4864    ;  
4865  }
4866#pragma omp target
4867#pragma omp teams
4868  {
4869#pragma omp distribute parallel for simd
4870  for (int i = 0; i < 10; ++i)
4871    ;
4872#pragma omp distribute parallel for simd
4873  for (int j = 0; j < 10; ++j)
4874    ;  
4875  }
4876#pragma omp target
4877#pragma omp teams
4878  {
4879#pragma omp distribute simd
4880  for (int i = 0; i < 10; ++i)
4881    ;
4882#pragma omp distribute simd
4883  for (int j = 0; j < 10; ++j)
4884    ;  
4885  }
4886#pragma omp target
4887#pragma omp teams
4888  {
4889#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
4890  for (int i = 0; i < 10; ++i)
4891    ;
4892  }
4893#pragma omp target
4894#pragma omp teams
4895  {
4896#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
4897  for (int i = 0; i < 10; ++i)
4898    ;
4899  }
4900#pragma omp target
4901#pragma omp teams
4902  {
4903#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
4904  for (int i = 0; i < 10; ++i)
4905    ;
4906  }
4907#pragma omp target
4908#pragma omp teams
4909  {
4910#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
4911  for (int i = 0; i < 10; ++i)
4912    ;
4913  }
4914#pragma omp target
4915#pragma omp teams
4916  {
4917#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
4918  for (int i = 0; i < 10; ++i)
4919    ;
4920  }
4921#pragma omp target
4922#pragma omp teams
4923  {
4924#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
4925    a++;
4926  }
4927#pragma omp target
4928#pragma omp teams
4929  {
4930#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
4931  for (int i = 0; i < 10; ++i)
4932    ;
4933  }
4934#pragma omp target
4935#pragma omp teams
4936  {
4937#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
4938  for (int i = 0; i < 10; ++i)
4939    ;
4940  }
4941#pragma omp target
4942#pragma omp teams
4943  {
4944#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
4945  for (int i = 0; i < 10; ++i)
4946    ;
4947  }
4948#pragma omp target
4949#pragma omp teams
4950  {
4951#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
4952  for (int i = 0; i < 10; ++i)
4953    ;
4954  }
4955
4956// TASKLOOP DIRECTIVE
4957#pragma omp taskloop
4958  for (int i = 0; i < 10; ++i) {
4959#pragma omp for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
4960    for (int i = 0; i < 10; ++i)
4961      ;
4962  }
4963#pragma omp taskloop
4964  for (int i = 0; i < 10; ++i) {
4965#pragma omp simd
4966    for (int i = 0; i < 10; ++i)
4967      ;
4968  }
4969#pragma omp taskloop
4970  for (int i = 0; i < 10; ++i) {
4971#pragma omp for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
4972    for (int i = 0; i < 10; ++i)
4973      ;
4974  }
4975#pragma omp taskloop
4976  for (int i = 0; i < 10; ++i) {
4977#pragma omp parallel
4978    for (int i = 0; i < 10; ++i)
4979      ;
4980  }
4981#pragma omp taskloop
4982  for (int i = 0; i < 10; ++i) {
4983#pragma omp sections // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
4984    {
4985      bar();
4986    }
4987  }
4988#pragma omp taskloop
4989  for (int i = 0; i < 10; ++i) {
4990#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
4991    {
4992      bar();
4993    }
4994  }
4995#pragma omp taskloop
4996  for (int i = 0; i < 10; ++i) {
4997#pragma omp single // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
4998    {
4999      bar();
5000    }
5001  }
5002
5003#pragma omp taskloop
5004  for (int i = 0; i < 10; ++i) {
5005#pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5006    {
5007      bar();
5008    }
5009  }
5010#pragma omp taskloop
5011  for (int i = 0; i < 10; ++i) {
5012#pragma omp critical
5013    {
5014      bar();
5015    }
5016  }
5017#pragma omp taskloop
5018  for (int i = 0; i < 10; ++i) {
5019#pragma omp parallel
5020    {
5021#pragma omp single // OK
5022      {
5023        bar();
5024      }
5025#pragma omp for // OK
5026      for (int i = 0; i < 10; ++i)
5027        ;
5028#pragma omp sections // OK
5029      {
5030        bar();
5031      }
5032    }
5033  }
5034#pragma omp taskloop
5035  for (int i = 0; i < 10; ++i) {
5036#pragma omp parallel for
5037    for (int i = 0; i < 10; ++i)
5038      ;
5039  }
5040#pragma omp taskloop
5041  for (int i = 0; i < 10; ++i) {
5042#pragma omp parallel for simd
5043    for (int i = 0; i < 10; ++i)
5044      ;
5045  }
5046#pragma omp taskloop
5047  for (int i = 0; i < 10; ++i) {
5048#pragma omp parallel sections
5049    {
5050      bar();
5051    }
5052  }
5053#pragma omp taskloop
5054  for (int i = 0; i < 10; ++i) {
5055#pragma omp task
5056    {
5057      bar();
5058    }
5059  }
5060#pragma omp taskloop
5061  for (int i = 0; i < 10; ++i) {
5062#pragma omp taskyield
5063    bar();
5064  }
5065#pragma omp taskloop
5066  for (int i = 0; i < 10; ++i) {
5067#pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
5068    bar();
5069  }
5070#pragma omp taskloop
5071  for (int i = 0; i < 10; ++i) {
5072#pragma omp taskwait
5073    bar();
5074  }
5075#pragma omp taskloop
5076  for (int i = 0; i < 10; ++i) {
5077#pragma omp flush
5078    bar();
5079  }
5080#pragma omp taskloop
5081  for (int i = 0; i < 10; ++i) {
5082#pragma omp ordered // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
5083    bar();
5084  }
5085#pragma omp taskloop
5086  for (int i = 0; i < 10; ++i) {
5087#pragma omp atomic
5088    ++a;
5089  }
5090#pragma omp taskloop
5091  for (int i = 0; i < 10; ++i) {
5092#pragma omp target
5093    ++a;
5094  }
5095#pragma omp taskloop
5096  for (int i = 0; i < 10; ++i) {
5097#pragma omp target parallel
5098    ++a;
5099  }
5100#pragma omp taskloop
5101  for (int i = 0; i < 10; ++i) {
5102#pragma omp target parallel for
5103    for (int i = 0; i < 10; ++i)
5104      ;
5105  }
5106#pragma omp taskloop
5107  for (int i = 0; i < 10; ++i) {
5108#pragma omp target enter data map(to: a)
5109    ++a;
5110  }
5111#pragma omp taskloop
5112  for (int i = 0; i < 10; ++i) {
5113#pragma omp target exit data map(from: a)
5114    ++a;
5115  }
5116#pragma omp taskloop
5117  for (int i = 0; i < 10; ++i) {
5118#pragma omp teams // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
5119    ++a;
5120  }
5121#pragma omp taskloop
5122  for (int i = 0; i < 10; ++i) {
5123#pragma omp taskloop
5124  for (int i = 0; i < 10; ++i)
5125    ++a;
5126  }
5127#pragma omp taskloop
5128  for (int i = 0; i < 10; ++i) {
5129#pragma omp target update to(a)
5130    bar();
5131  }
5132#pragma omp taskloop
5133  for (int i = 0; i < 10; ++i) {
5134#pragma omp distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
5135  for (int j = 0; j < 10; ++j)
5136    ++a;
5137  }
5138#pragma omp taskloop
5139  for (int i = 0; i < 10; ++i) {
5140#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
5141  for (int j = 0; j < 10; ++j)
5142    ++a;
5143  }
5144#pragma omp taskloop
5145  for (int i = 0; i < 10; ++i) {
5146#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
5147  for (int j = 0; j < 10; ++j)
5148    ++a;
5149  }
5150#pragma omp taskloop
5151  for (int i = 0; i < 10; ++i) {
5152#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
5153  for (int j = 0; j < 10; ++j)
5154    ++a;
5155  }
5156#pragma omp taskloop
5157  for (int i = 0; i < 10; ++i) {
5158#pragma omp target simd // OK
5159  for (int j = 0; j < 10; ++j)
5160    ++a;
5161  }
5162#pragma omp taskloop
5163  for (int i = 0; i < 10; ++i) {
5164#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
5165  for (int j = 0; j < 10; ++j)
5166    ++a;
5167  }
5168#pragma omp taskloop
5169  for (int i = 0; i < 10; ++i) {
5170#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
5171  for (int j = 0; j < 10; ++j)
5172    ++a;
5173  }
5174#pragma omp taskloop
5175  for (int i = 0; i < 10; ++i) {
5176#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5177  for (int j = 0; j < 10; ++j)
5178    ++a;
5179  }
5180#pragma omp taskloop
5181  for (int i = 0; i < 10; ++i) {
5182#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5183  for (int j = 0; j < 10; ++j)
5184    ++a;
5185  }
5186#pragma omp taskloop
5187  for (int i = 0; i < 10; ++i) {
5188#pragma omp target teams // OK
5189    ++a;
5190  }
5191#pragma omp taskloop
5192  for (int i = 0; i < 10; ++i) {
5193#pragma omp target teams distribute // OK
5194  for (int j = 0; j < 10; ++j)
5195    ++a;
5196  }
5197#pragma omp taskloop
5198  for (int i = 0; i < 10; ++i) {
5199#pragma omp target teams distribute parallel for // OK
5200  for (int j = 0; j < 10; ++j)
5201    ++a;
5202  }
5203#pragma omp taskloop
5204  for (int i = 0; i < 10; ++i) {
5205#pragma omp target teams distribute parallel for simd // OK
5206  for (int j = 0; j < 10; ++j)
5207    ++a;
5208  }
5209#pragma omp taskloop
5210  for (int i = 0; i < 10; ++i) {
5211#pragma omp target teams distribute simd // OK
5212  for (int j = 0; j < 10; ++j)
5213    ++a;
5214  }
5215
5216// DISTRIBUTE DIRECTIVE
5217#pragma omp target
5218#pragma omp teams
5219#pragma omp distribute
5220  for (int i = 0; i < 10; ++i) {
5221#pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
5222    for (int i = 0; i < 10; ++i)
5223      ;
5224  }
5225#pragma omp target
5226#pragma omp teams
5227#pragma omp distribute
5228  for (int i = 0; i < 10; ++i) {
5229#pragma omp for
5230    for (int i = 0; i < 10; ++i)
5231      ;
5232  }
5233#pragma omp target
5234#pragma omp teams
5235#pragma omp distribute
5236  for (int i = 0; i < 10; ++i) {
5237#pragma omp simd
5238    for (int i = 0; i < 10; ++i)
5239      ;
5240  }
5241#pragma omp target
5242#pragma omp teams
5243#pragma omp distribute
5244  for (int i = 0; i < 10; ++i) {
5245#pragma omp for simd
5246    for (int i = 0; i < 10; ++i)
5247      ;
5248  }
5249#pragma omp target
5250#pragma omp teams  
5251#pragma omp distribute
5252  for (int i = 0; i < 10; ++i) {
5253#pragma omp parallel
5254    for (int i = 0; i < 10; ++i)
5255      ;
5256  }
5257#pragma omp target
5258#pragma omp teams
5259#pragma omp distribute
5260  for (int i = 0; i < 10; ++i) {
5261#pragma omp sections
5262    {
5263      bar();
5264    }
5265  }
5266#pragma omp target
5267#pragma omp teams
5268#pragma omp distribute
5269  for (int i = 0; i < 10; ++i) {
5270#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
5271    {
5272      bar();
5273    }
5274  }
5275#pragma omp target
5276#pragma omp teams
5277#pragma omp distribute
5278  for (int i = 0; i < 10; ++i) {
5279#pragma omp single
5280    {
5281      bar();
5282    }
5283  }
5284#pragma omp target
5285#pragma omp teams
5286#pragma omp distribute
5287  for (int i = 0; i < 10; ++i) {
5288#pragma omp master
5289    {
5290      bar();
5291    }
5292  }
5293#pragma omp target
5294#pragma omp teams
5295#pragma omp distribute
5296  for (int i = 0; i < 10; ++i) {
5297#pragma omp critical
5298    {
5299      bar();
5300    }
5301  }
5302#pragma omp target
5303#pragma omp teams
5304#pragma omp distribute
5305  for (int i = 0; i < 10; ++i) {
5306#pragma omp parallel
5307    {
5308#pragma omp single
5309      {
5310 bar();
5311      }
5312    }
5313  }
5314#pragma omp target
5315#pragma omp teams
5316#pragma omp distribute
5317  for (int i = 0; i < 10; ++i) {
5318#pragma omp parallel for
5319    for (int i = 0; i < 10; ++i)
5320      ;
5321  }
5322#pragma omp target
5323#pragma omp teams
5324#pragma omp distribute
5325  for (int i = 0; i < 10; ++i) {
5326#pragma omp parallel for simd
5327    for (int i = 0; i < 10; ++i)
5328      ;
5329  }
5330#pragma omp target
5331#pragma omp teams
5332#pragma omp distribute
5333  for (int i = 0; i < 10; ++i) {
5334#pragma omp parallel sections
5335    {
5336      bar();
5337    }
5338  }
5339#pragma omp target
5340#pragma omp teams
5341#pragma omp distribute
5342  for (int i = 0; i < 10; ++i) {
5343#pragma omp task
5344    {
5345      bar();
5346    }
5347  }
5348#pragma omp target
5349#pragma omp teams
5350#pragma omp distribute
5351  for (int i = 0; i < 10; ++i) {
5352#pragma omp taskyield
5353    bar();
5354  }
5355#pragma omp target
5356#pragma omp teams
5357#pragma omp distribute
5358  for (int i = 0; i < 10; ++i) {
5359#pragma omp barrier
5360    bar();
5361  }
5362#pragma omp target
5363#pragma omp teams
5364#pragma omp distribute
5365  for (int i = 0; i < 10; ++i) {
5366#pragma omp taskwait
5367    bar();
5368  }
5369#pragma omp target
5370#pragma omp teams
5371#pragma omp distribute
5372  for (int i = 0; i < 10; ++i) {
5373#pragma omp flush
5374    bar();
5375  }
5376#pragma omp target
5377#pragma omp teams
5378#pragma omp distribute
5379  for (int i = 0; i < 10; ++i) {
5380#pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
5381    bar();
5382  }
5383#pragma omp target
5384#pragma omp teams
5385#pragma omp distribute
5386  for (int i = 0; i < 10; ++i) {
5387#pragma omp atomic
5388    ++a;
5389  }
5390#pragma omp target
5391#pragma omp teams
5392#pragma omp distribute
5393  for (int i = 0; i < 10; ++i) {
5394#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5395    ++a;
5396  }
5397#pragma omp target
5398#pragma omp teams
5399#pragma omp distribute
5400  for (int i = 0; i < 10; ++i) {
5401#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5402    ++a;
5403  }
5404#pragma omp target
5405#pragma omp teams
5406#pragma omp distribute
5407  for (int i = 0; i < 10; ++i) {
5408#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5409    for (int i = 0; i < 10; ++i)
5410      ;
5411  }
5412#pragma omp target
5413#pragma omp teams
5414#pragma omp distribute
5415  for (int i = 0; i < 10; ++i) {
5416#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5417    ++a;
5418  }
5419#pragma omp target
5420#pragma omp teams
5421#pragma omp distribute
5422  for (int i = 0; i < 10; ++i) {
5423#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5424    ++a;
5425  }
5426#pragma omp target
5427#pragma omp teams
5428#pragma omp distribute
5429  for (int i = 0; i < 10; ++i) {
5430#pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
5431    ++a;
5432  }
5433#pragma omp target
5434#pragma omp teams
5435#pragma omp distribute
5436  for (int i = 0; i < 10; ++i) {
5437#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5438    ++a;
5439  }
5440#pragma omp target
5441#pragma omp teams
5442#pragma omp distribute
5443  for (int i = 0; i < 10; ++i) {
5444#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
5445    for (int j = 0; j < 10; ++j)
5446      ;
5447  }
5448#pragma omp target
5449#pragma omp teams
5450#pragma omp distribute
5451  for (int i = 0; i < 10; ++i) {
5452#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
5453    for (int j = 0; j < 10; ++j)
5454      ;
5455  }
5456#pragma omp target
5457#pragma omp teams
5458#pragma omp distribute
5459  for (int i = 0; i < 10; ++i) {
5460#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
5461    for (int j = 0; j < 10; ++j)
5462      ;
5463  }
5464#pragma omp target
5465#pragma omp teams
5466#pragma omp distribute
5467  for (int i = 0; i < 10; ++i) {
5468#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5469    for (int j = 0; j < 10; ++j)
5470      ;
5471  }
5472#pragma omp target
5473#pragma omp teams
5474#pragma omp distribute
5475  for (int i = 0; i < 10; ++i) {
5476#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5477    for (int j = 0; j < 10; ++j)
5478      ;
5479  }
5480#pragma omp target
5481#pragma omp teams
5482#pragma omp distribute
5483  for (int i = 0; i < 10; ++i) {
5484#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5485    a++;
5486  }
5487#pragma omp target
5488#pragma omp teams
5489#pragma omp distribute
5490  for (int i = 0; i < 10; ++i) {
5491#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5492    for (int j = 0; j < 10; ++j)
5493      ;
5494  }
5495#pragma omp target
5496#pragma omp teams
5497#pragma omp distribute
5498  for (int i = 0; i < 10; ++i) {
5499#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5500    for (int j = 0; j < 10; ++j)
5501      ;
5502  }
5503#pragma omp target
5504#pragma omp teams
5505#pragma omp distribute
5506  for (int i = 0; i < 10; ++i) {
5507#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5508    for (int j = 0; j < 10; ++j)
5509      ;
5510  }
5511#pragma omp target
5512#pragma omp teams
5513#pragma omp distribute
5514  for (int i = 0; i < 10; ++i) {
5515#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5516    for (int j = 0; j < 10; ++j)
5517      ;
5518  }
5519
5520// DISTRIBUTE PARALLEL FOR DIRECTIVE
5521#pragma omp target
5522#pragma omp teams
5523#pragma omp distribute parallel for
5524  for (int i = 0; i < 10; ++i) {
5525#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
5526    for (int i = 0; i < 10; ++i)
5527      ;
5528  }
5529#pragma omp target
5530#pragma omp teams
5531#pragma omp distribute parallel for
5532  for (int i = 0; i < 10; ++i) {
5533#pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
5534    for (int i = 0; i < 10; ++i)
5535      ;
5536  }
5537#pragma omp target
5538#pragma omp teams
5539#pragma omp distribute parallel for
5540  for (int i = 0; i < 10; ++i) {
5541#pragma omp for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
5542    for (int i = 0; i < 10; ++i)
5543      ;
5544  }
5545#pragma omp target
5546#pragma omp teams
5547#pragma omp distribute parallel for
5548  for (int i = 0; i < 10; ++i) {
5549#pragma omp simd
5550    for (int i = 0; i < 10; ++i)
5551      ;
5552  }
5553#pragma omp target
5554#pragma omp teams
5555#pragma omp distribute parallel for
5556  for (int i = 0; i < 10; ++i) {
5557#pragma omp for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
5558    for (int i = 0; i < 10; ++i)
5559      ;
5560  }
5561#pragma omp target
5562#pragma omp teams  
5563#pragma omp distribute parallel for
5564  for (int i = 0; i < 10; ++i) {
5565#pragma omp parallel
5566    for (int i = 0; i < 10; ++i)
5567      ;
5568  }
5569#pragma omp target
5570#pragma omp teams
5571#pragma omp distribute parallel for
5572  for (int i = 0; i < 10; ++i) {
5573#pragma omp sections // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
5574    {
5575      bar();
5576    }
5577  }
5578#pragma omp target
5579#pragma omp teams
5580#pragma omp distribute parallel for
5581  for (int i = 0; i < 10; ++i) {
5582#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
5583    {
5584      bar();
5585    }
5586  }
5587#pragma omp target
5588#pragma omp teams
5589#pragma omp distribute parallel for
5590  for (int i = 0; i < 10; ++i) {
5591#pragma omp single // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
5592    {
5593      bar();
5594    }
5595  }
5596#pragma omp target
5597#pragma omp teams
5598#pragma omp distribute parallel for
5599  for (int i = 0; i < 10; ++i) {
5600#pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5601    {
5602      bar();
5603    }
5604  }
5605#pragma omp target
5606#pragma omp teams
5607#pragma omp distribute parallel for
5608  for (int i = 0; i < 10; ++i) {
5609#pragma omp critical
5610    {
5611      bar();
5612    }
5613  }
5614#pragma omp target
5615#pragma omp teams
5616#pragma omp distribute parallel for
5617  for (int i = 0; i < 10; ++i) {
5618#pragma omp parallel
5619    {
5620#pragma omp single
5621      {
5622 bar();
5623      }
5624    }
5625  }
5626#pragma omp target
5627#pragma omp teams
5628#pragma omp distribute parallel for
5629  for (int i = 0; i < 10; ++i) {
5630#pragma omp parallel for
5631    for (int i = 0; i < 10; ++i)
5632      ;
5633  }
5634#pragma omp target
5635#pragma omp teams
5636#pragma omp distribute parallel for
5637  for (int i = 0; i < 10; ++i) {
5638#pragma omp parallel for simd
5639    for (int i = 0; i < 10; ++i)
5640      ;
5641  }
5642#pragma omp target
5643#pragma omp teams
5644#pragma omp distribute parallel for
5645  for (int i = 0; i < 10; ++i) {
5646#pragma omp parallel sections
5647    {
5648      bar();
5649    }
5650  }
5651#pragma omp target
5652#pragma omp teams
5653#pragma omp distribute parallel for
5654  for (int i = 0; i < 10; ++i) {
5655#pragma omp task
5656    {
5657      bar();
5658    }
5659  }
5660#pragma omp target
5661#pragma omp teams
5662#pragma omp distribute parallel for
5663  for (int i = 0; i < 10; ++i) {
5664#pragma omp taskyield
5665    bar();
5666  }
5667#pragma omp target
5668#pragma omp teams
5669#pragma omp distribute parallel for
5670  for (int i = 0; i < 10; ++i) {
5671#pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
5672    bar();
5673  }
5674#pragma omp target
5675#pragma omp teams
5676#pragma omp distribute parallel for
5677  for (int i = 0; i < 10; ++i) {
5678#pragma omp taskwait
5679    bar();
5680  }
5681#pragma omp target
5682#pragma omp teams
5683#pragma omp distribute parallel for
5684  for (int i = 0; i < 10; ++i) {
5685#pragma omp flush
5686    bar();
5687  }
5688#pragma omp target
5689#pragma omp teams
5690#pragma omp distribute parallel for
5691  for (int i = 0; i < 10; ++i) {
5692#pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
5693    bar();
5694  }
5695#pragma omp target
5696#pragma omp teams
5697#pragma omp distribute parallel for
5698  for (int i = 0; i < 10; ++i) {
5699#pragma omp atomic
5700    ++a;
5701  }
5702#pragma omp target
5703#pragma omp teams
5704#pragma omp distribute parallel for
5705  for (int i = 0; i < 10; ++i) {
5706#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
5707    ++a;
5708  }
5709#pragma omp target
5710#pragma omp teams
5711#pragma omp distribute parallel for
5712  for (int i = 0; i < 10; ++i) {
5713#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
5714    ++a;
5715  }
5716#pragma omp target
5717#pragma omp teams
5718#pragma omp distribute parallel for
5719  for (int i = 0; i < 10; ++i) {
5720#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
5721    for (int i = 0; i < 10; ++i)
5722      ;
5723  }
5724#pragma omp target
5725#pragma omp teams
5726#pragma omp distribute parallel for
5727  for (int i = 0; i < 10; ++i) {
5728#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
5729    ++a;
5730  }
5731#pragma omp target
5732#pragma omp teams
5733#pragma omp distribute parallel for
5734  for (int i = 0; i < 10; ++i) {
5735#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
5736    ++a;
5737  }
5738#pragma omp target
5739#pragma omp teams
5740#pragma omp distribute parallel for
5741  for (int i = 0; i < 10; ++i) {
5742#pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
5743    ++a;
5744  }
5745#pragma omp target
5746#pragma omp teams
5747#pragma omp distribute parallel for
5748  for (int i = 0; i < 10; ++i) {
5749#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
5750    ++a;
5751  }
5752#pragma omp target
5753#pragma omp teams
5754#pragma omp distribute parallel for
5755  for (int i = 0; i < 10; ++i) {
5756#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
5757    for (int i = 0; i < 10; ++i)
5758      ;
5759  }
5760#pragma omp target
5761#pragma omp teams
5762#pragma omp distribute parallel for
5763  for (int i = 0; i < 10; ++i) {
5764#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
5765    for (int i = 0; i < 10; ++i)
5766      ;
5767  }
5768#pragma omp target
5769#pragma omp teams
5770#pragma omp distribute parallel for
5771  for (int i = 0; i < 10; ++i) {
5772#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
5773    for (int i = 0; i < 10; ++i)
5774      ;
5775  }
5776#pragma omp target
5777#pragma omp teams
5778#pragma omp distribute parallel for
5779  for (int i = 0; i < 10; ++i) {
5780#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
5781    for (int i = 0; i < 10; ++i)
5782      ;
5783  }
5784#pragma omp target
5785#pragma omp teams
5786#pragma omp distribute parallel for
5787  for (int i = 0; i < 10; ++i) {
5788#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
5789    for (int i = 0; i < 10; ++i)
5790      ;
5791  }
5792#pragma omp target
5793#pragma omp teams
5794#pragma omp distribute parallel for
5795  for (int i = 0; i < 10; ++i) {
5796#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
5797    a++;
5798  }
5799#pragma omp target
5800#pragma omp teams
5801#pragma omp distribute parallel for
5802  for (int i = 0; i < 10; ++i) {
5803#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
5804    for (int i = 0; i < 10; ++i)
5805      ;
5806  }
5807#pragma omp target
5808#pragma omp teams
5809#pragma omp distribute parallel for
5810  for (int i = 0; i < 10; ++i) {
5811#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
5812    for (int i = 0; i < 10; ++i)
5813      ;
5814  }
5815#pragma omp target
5816#pragma omp teams
5817#pragma omp distribute parallel for
5818  for (int i = 0; i < 10; ++i) {
5819#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
5820    for (int i = 0; i < 10; ++i)
5821      ;
5822  }
5823#pragma omp target
5824#pragma omp teams
5825#pragma omp distribute parallel for
5826  for (int i = 0; i < 10; ++i) {
5827#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
5828    for (int i = 0; i < 10; ++i)
5829      ;
5830  }
5831
5832// DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
5833#pragma omp target
5834#pragma omp teams
5835#pragma omp distribute parallel for simd
5836  for (int i = 0; i < 10; ++i) {
5837#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5838    for (int i = 0; i < 10; ++i)
5839      ;
5840  }
5841#pragma omp target
5842#pragma omp teams
5843#pragma omp distribute parallel for simd
5844  for (int i = 0; i < 10; ++i) {
5845#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5846    for (int i = 0; i < 10; ++i)
5847      ;
5848  }
5849#pragma omp target
5850#pragma omp teams
5851#pragma omp distribute parallel for simd
5852  for (int i = 0; i < 10; ++i) {
5853#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5854    for (int i = 0; i < 10; ++i)
5855      ;
5856  }
5857#pragma omp target
5858#pragma omp teams
5859#pragma omp distribute parallel for simd 
5860  for (int i = 0; i < 10; ++i) {
5861#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5862    for (int i = 0; i < 10; ++i)
5863      ;
5864  }
5865#pragma omp target
5866#pragma omp teams
5867#pragma omp distribute parallel for simd
5868  for (int i = 0; i < 10; ++i) {
5869#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5870    for (int i = 0; i < 10; ++i)
5871      ;
5872  }
5873#pragma omp target
5874#pragma omp teams  
5875#pragma omp distribute parallel for simd
5876  for (int i = 0; i < 10; ++i) {
5877#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5878    for (int i = 0; i < 10; ++i)
5879      ;
5880  }
5881#pragma omp target
5882#pragma omp teams
5883#pragma omp distribute parallel for simd
5884  for (int i = 0; i < 10; ++i) {
5885#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5886    {
5887      bar();
5888    }
5889  }
5890#pragma omp target
5891#pragma omp teams
5892#pragma omp distribute parallel for simd
5893  for (int i = 0; i < 10; ++i) {
5894#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5895    {
5896      bar();
5897    }
5898  }
5899#pragma omp target
5900#pragma omp teams
5901#pragma omp distribute parallel for simd
5902  for (int i = 0; i < 10; ++i) {
5903#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5904    {
5905      bar();
5906    }
5907  }
5908#pragma omp target
5909#pragma omp teams
5910#pragma omp distribute parallel for simd
5911  for (int i = 0; i < 10; ++i) {
5912#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5913    {
5914      bar();
5915    }
5916  }
5917#pragma omp target
5918#pragma omp teams
5919#pragma omp distribute parallel for simd
5920  for (int i = 0; i < 10; ++i) {
5921#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5922    {
5923      bar();
5924    }
5925  }
5926#pragma omp target
5927#pragma omp teams
5928#pragma omp distribute parallel for simd
5929  for (int i = 0; i < 10; ++i) {
5930#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5931    {
5932#pragma omp single
5933      {
5934 bar();
5935      }
5936    }
5937  }
5938#pragma omp target
5939#pragma omp teams
5940#pragma omp distribute parallel for simd
5941  for (int i = 0; i < 10; ++i) {
5942#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5943    for (int i = 0; i < 10; ++i)
5944      ;
5945  }
5946#pragma omp target
5947#pragma omp teams
5948#pragma omp distribute parallel for simd
5949  for (int i = 0; i < 10; ++i) {
5950#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5951    for (int i = 0; i < 10; ++i)
5952      ;
5953  }
5954#pragma omp target
5955#pragma omp teams
5956#pragma omp distribute parallel for simd
5957  for (int i = 0; i < 10; ++i) {
5958#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5959    {
5960      bar();
5961    }
5962  }
5963#pragma omp target
5964#pragma omp teams
5965#pragma omp distribute parallel for simd
5966  for (int i = 0; i < 10; ++i) {
5967#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5968    {
5969      bar();
5970    }
5971  }
5972#pragma omp target
5973#pragma omp teams
5974#pragma omp distribute parallel for simd
5975  for (int i = 0; i < 10; ++i) {
5976#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5977    bar();
5978  }
5979#pragma omp target
5980#pragma omp teams
5981#pragma omp distribute parallel for simd
5982  for (int i = 0; i < 10; ++i) {
5983#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5984    bar();
5985  }
5986#pragma omp target
5987#pragma omp teams
5988#pragma omp distribute parallel for simd
5989  for (int i = 0; i < 10; ++i) {
5990#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5991    bar();
5992  }
5993#pragma omp target
5994#pragma omp teams
5995#pragma omp distribute parallel for simd
5996  for (int i = 0; i < 10; ++i) {
5997#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5998    bar();
5999  }
6000#pragma omp target
6001#pragma omp teams
6002#pragma omp distribute parallel for simd
6003  for (int i = 0; i < 10; ++i) {
6004#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6005    bar();
6006  }
6007#pragma omp target
6008#pragma omp teams
6009#pragma omp distribute parallel for simd
6010  for (int i = 0; i < 10; ++i) {
6011#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6012    ++a;
6013  }
6014#pragma omp target
6015#pragma omp teams
6016#pragma omp distribute parallel for simd
6017  for (int i = 0; i < 10; ++i) {
6018#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6019    ++a;
6020  }
6021#pragma omp target
6022#pragma omp teams
6023#pragma omp distribute parallel for simd
6024  for (int i = 0; i < 10; ++i) {
6025#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6026    ++a;
6027  }
6028#pragma omp target
6029#pragma omp teams
6030#pragma omp distribute parallel for simd
6031  for (int i = 0; i < 10; ++i) {
6032#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6033    for (int i = 0; i < 10; ++i)
6034      ;
6035  }
6036#pragma omp target
6037#pragma omp teams
6038#pragma omp distribute parallel for simd
6039  for (int i = 0; i < 10; ++i) {
6040#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6041    ++a;
6042  }
6043#pragma omp target
6044#pragma omp teams
6045#pragma omp distribute parallel for simd
6046  for (int i = 0; i < 10; ++i) {
6047#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6048    ++a;
6049  }
6050#pragma omp target
6051#pragma omp teams
6052#pragma omp distribute parallel for simd
6053  for (int i = 0; i < 10; ++i) {
6054#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6055    ++a;
6056  }
6057#pragma omp target
6058#pragma omp teams
6059#pragma omp distribute parallel for simd
6060  for (int i = 0; i < 10; ++i) {
6061#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6062    ++a;
6063  }
6064#pragma omp target
6065#pragma omp teams
6066#pragma omp distribute parallel for simd
6067  for (int i = 0; i < 10; ++i) {
6068#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6069    for (int i = 0; i < 10; ++i)
6070      ++a;
6071  }
6072#pragma omp target
6073#pragma omp teams
6074#pragma omp distribute parallel for simd
6075  for (int i = 0; i < 10; ++i) {
6076#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6077    for (int i = 0; i < 10; ++i)
6078      ++a;
6079  }
6080#pragma omp target
6081#pragma omp teams
6082#pragma omp distribute parallel for simd
6083  for (int i = 0; i < 10; ++i) {
6084#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6085    for (int i = 0; i < 10; ++i)
6086      ++a;
6087  }
6088#pragma omp target
6089#pragma omp teams
6090#pragma omp distribute parallel for simd
6091  for (int i = 0; i < 10; ++i) {
6092#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6093    for (int i = 0; i < 10; ++i)
6094      ++a;
6095  }
6096#pragma omp target
6097#pragma omp teams
6098#pragma omp distribute parallel for simd
6099  for (int i = 0; i < 10; ++i) {
6100#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6101    for (int i = 0; i < 10; ++i)
6102      ++a;
6103  }
6104#pragma omp target
6105#pragma omp teams
6106#pragma omp distribute parallel for simd
6107  for (int i = 0; i < 10; ++i) {
6108#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6109    for (int i = 0; i < 10; ++i)
6110      ++a;
6111  }
6112#pragma omp target
6113#pragma omp teams
6114#pragma omp distribute parallel for simd
6115  for (int i = 0; i < 10; ++i) {
6116#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6117    ++a;
6118  }
6119#pragma omp target
6120#pragma omp teams
6121#pragma omp distribute parallel for simd
6122  for (int i = 0; i < 10; ++i) {
6123#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6124    for (int i = 0; i < 10; ++i)
6125      ++a;
6126  }
6127#pragma omp target
6128#pragma omp teams
6129#pragma omp distribute parallel for simd
6130  for (int i = 0; i < 10; ++i) {
6131#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6132    for (int i = 0; i < 10; ++i)
6133      ++a;
6134  }
6135#pragma omp target
6136#pragma omp teams
6137#pragma omp distribute parallel for simd
6138  for (int i = 0; i < 10; ++i) {
6139#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6140    for (int i = 0; i < 10; ++i)
6141      ++a;
6142  }
6143#pragma omp target
6144#pragma omp teams
6145#pragma omp distribute parallel for simd
6146  for (int i = 0; i < 10; ++i) {
6147#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6148    for (int i = 0; i < 10; ++i)
6149      ++a;
6150  }
6151
6152// TARGET SIMD DIRECTIVE
6153#pragma omp target simd
6154  for (int i = 0; i < 10; ++i) {
6155#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6156    for (int i = 0; i < 10; ++i)
6157      ;
6158  }
6159#pragma omp target simd
6160  for (int i = 0; i < 10; ++i) {
6161#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6162    for (int i = 0; i < 10; ++i)
6163      ;
6164  }
6165#pragma omp target simd
6166  for (int i = 0; i < 10; ++i) {
6167#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6168    for (int i = 0; i < 10; ++i)
6169      ;
6170  }
6171#pragma omp target simd 
6172  for (int i = 0; i < 10; ++i) {
6173#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6174    for (int i = 0; i < 10; ++i)
6175      ;
6176  }
6177#pragma omp target simd
6178  for (int i = 0; i < 10; ++i) {
6179#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6180    for (int i = 0; i < 10; ++i)
6181      ;
6182  }
6183#pragma omp target simd
6184  for (int i = 0; i < 10; ++i) {
6185#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6186    for (int i = 0; i < 10; ++i)
6187      ;
6188  }
6189#pragma omp target simd
6190  for (int i = 0; i < 10; ++i) {
6191#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6192    {
6193      bar();
6194    }
6195  }
6196#pragma omp target simd
6197  for (int i = 0; i < 10; ++i) {
6198#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6199    {
6200      bar();
6201    }
6202  }
6203#pragma omp target simd
6204  for (int i = 0; i < 10; ++i) {
6205#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6206    {
6207      bar();
6208    }
6209  }
6210#pragma omp target simd
6211  for (int i = 0; i < 10; ++i) {
6212#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6213    {
6214      bar();
6215    }
6216  }
6217#pragma omp target simd
6218  for (int i = 0; i < 10; ++i) {
6219#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6220    {
6221      bar();
6222    }
6223  }
6224#pragma omp target simd
6225  for (int i = 0; i < 10; ++i) {
6226#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6227    {
6228#pragma omp single
6229      {
6230 bar();
6231      }
6232    }
6233  }
6234#pragma omp target simd
6235  for (int i = 0; i < 10; ++i) {
6236#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6237    for (int i = 0; i < 10; ++i)
6238      ;
6239  }
6240#pragma omp target simd
6241  for (int i = 0; i < 10; ++i) {
6242#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6243    for (int i = 0; i < 10; ++i)
6244      ;
6245  }
6246#pragma omp target simd
6247  for (int i = 0; i < 10; ++i) {
6248#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6249    {
6250      bar();
6251    }
6252  }
6253#pragma omp target simd
6254  for (int i = 0; i < 10; ++i) {
6255#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6256    {
6257      bar();
6258    }
6259  }
6260#pragma omp target simd
6261  for (int i = 0; i < 10; ++i) {
6262#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6263    bar();
6264  }
6265#pragma omp target simd
6266  for (int i = 0; i < 10; ++i) {
6267#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6268    bar();
6269  }
6270#pragma omp target simd
6271  for (int i = 0; i < 10; ++i) {
6272#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6273    bar();
6274  }
6275#pragma omp target simd
6276  for (int i = 0; i < 10; ++i) {
6277#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6278    bar();
6279  }
6280#pragma omp target simd
6281  for (int i = 0; i < 10; ++i) {
6282#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6283    bar();
6284  }
6285#pragma omp target simd
6286  for (int i = 0; i < 10; ++i) {
6287#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6288    ++a;
6289  }
6290#pragma omp target simd
6291  for (int i = 0; i < 10; ++i) {
6292#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6293    ++a;
6294  }
6295#pragma omp target simd
6296  for (int i = 0; i < 10; ++i) {
6297#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6298    ++a;
6299  }
6300#pragma omp target simd
6301  for (int i = 0; i < 10; ++i) {
6302#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6303    for (int i = 0; i < 10; ++i)
6304      ;
6305  }
6306#pragma omp target simd
6307  for (int i = 0; i < 10; ++i) {
6308#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6309    ++a;
6310  }
6311#pragma omp target simd
6312  for (int i = 0; i < 10; ++i) {
6313#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6314    ++a;
6315  }
6316#pragma omp target simd
6317  for (int i = 0; i < 10; ++i) {
6318#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6319    ++a;
6320  }
6321#pragma omp target simd
6322  for (int i = 0; i < 10; ++i) {
6323#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6324    ++a;
6325  }
6326#pragma omp target simd
6327  for (int i = 0; i < 10; ++i) {
6328#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6329    for (int i = 0; i < 10; ++i)
6330      ++a;
6331  }
6332#pragma omp target simd
6333  for (int i = 0; i < 10; ++i) {
6334#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6335    for (int i = 0; i < 10; ++i)
6336      ++a;
6337  }
6338#pragma omp target simd
6339  for (int i = 0; i < 10; ++i) {
6340#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6341    for (int i = 0; i < 10; ++i)
6342      ++a;
6343  }
6344#pragma omp target simd
6345  for (int i = 0; i < 10; ++i) {
6346#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6347    for (int i = 0; i < 10; ++i)
6348      ++a;
6349  }
6350#pragma omp target simd
6351  for (int i = 0; i < 10; ++i) {
6352#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6353    for (int i = 0; i < 10; ++i)
6354      ++a;
6355  }
6356#pragma omp target simd
6357  for (int i = 0; i < 10; ++i) {
6358#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6359    for (int i = 0; i < 10; ++i)
6360      ++a;
6361  }
6362#pragma omp target simd
6363  for (int i = 0; i < 10; ++i) {
6364#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6365    for (int i = 0; i < 10; ++i)
6366      ++a;
6367  }
6368#pragma omp target simd
6369  for (int i = 0; i < 10; ++i) {
6370#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6371    for (int i = 0; i < 10; ++i)
6372      ++a;
6373  }
6374
6375// TEAMS DISTRIBUTE DIRECTIVE
6376#pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6377  for (int i = 0; i < 10; ++i)
6378    ;
6379#pragma omp target
6380#pragma omp teams distribute
6381  for (int i = 0; i < 10; ++i) {
6382#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6383    for (int i = 0; i < 10; ++i)
6384      ;
6385  }
6386#pragma omp target
6387#pragma omp teams distribute
6388  for (int i = 0; i < 10; ++i) {
6389#pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6390    for (int i = 0; i < 10; ++i)
6391      ;
6392  }
6393#pragma omp target
6394#pragma omp teams distribute
6395  for (int i = 0; i < 10; ++i) {
6396#pragma omp for // OK
6397    for (int i = 0; i < 10; ++i)
6398      ;
6399  }
6400#pragma omp target
6401#pragma omp teams distribute
6402  for (int i = 0; i < 10; ++i) {
6403#pragma omp simd // OK
6404    for (int i = 0; i < 10; ++i)
6405      ;
6406  }
6407#pragma omp target
6408#pragma omp teams distribute
6409  for (int i = 0; i < 10; ++i) {
6410#pragma omp for simd // OK
6411    for (int i = 0; i < 10; ++i)
6412      ;
6413  }
6414#pragma omp target
6415#pragma omp teams distribute
6416  for (int i = 0; i < 10; ++i) {
6417#pragma omp parallel // OK
6418    for (int i = 0; i < 10; ++i)
6419      ;
6420  }
6421#pragma omp target
6422#pragma omp teams distribute
6423  for (int i = 0; i < 10; ++i) {
6424#pragma omp sections // OK
6425    {
6426      bar();
6427    }
6428  }
6429#pragma omp target
6430#pragma omp teams distribute
6431  for (int i = 0; i < 10; ++i) {
6432#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6433    {
6434      bar();
6435    }
6436  }
6437#pragma omp target
6438#pragma omp teams distribute
6439  for (int i = 0; i < 10; ++i) {
6440#pragma omp single // OK
6441    {
6442      bar();
6443    }
6444  }
6445#pragma omp target
6446#pragma omp teams distribute
6447  for (int i = 0; i < 10; ++i) {
6448#pragma omp master // OK
6449    {
6450      bar();
6451    }
6452  }
6453#pragma omp target
6454#pragma omp teams distribute
6455  for (int i = 0; i < 10; ++i) {
6456#pragma omp critical // OK
6457    {
6458      bar();
6459    }
6460  }
6461#pragma omp target
6462#pragma omp teams distribute
6463  for (int i = 0; i < 10; ++i) {
6464#pragma omp parallel // OK
6465    {
6466#pragma omp single
6467      {
6468 bar();
6469      }
6470    }
6471  }
6472#pragma omp target
6473#pragma omp teams distribute
6474  for (int i = 0; i < 10; ++i) {
6475#pragma omp parallel for // OK
6476    for (int i = 0; i < 10; ++i)
6477      ;
6478  }
6479#pragma omp target
6480#pragma omp teams distribute
6481  for (int i = 0; i < 10; ++i) {
6482#pragma omp parallel for simd // OK
6483    for (int i = 0; i < 10; ++i)
6484      ;
6485  }
6486#pragma omp target
6487#pragma omp teams distribute
6488  for (int i = 0; i < 10; ++i) {
6489#pragma omp parallel sections // OK
6490    {
6491      bar();
6492    }
6493  }
6494#pragma omp target
6495#pragma omp teams distribute
6496  for (int i = 0; i < 10; ++i) {
6497#pragma omp task // OK
6498    {
6499      bar();
6500    }
6501  }
6502#pragma omp target
6503#pragma omp teams distribute
6504  for (int i = 0; i < 10; ++i) {
6505#pragma omp taskyield // OK
6506    bar();
6507  }
6508#pragma omp target
6509#pragma omp teams distribute
6510  for (int i = 0; i < 10; ++i) {
6511#pragma omp barrier // OK
6512    bar();
6513  }
6514#pragma omp target
6515#pragma omp teams distribute
6516  for (int i = 0; i < 10; ++i) {
6517#pragma omp taskwait // OK
6518    bar();
6519  }
6520#pragma omp target
6521#pragma omp teams distribute
6522  for (int i = 0; i < 10; ++i) {
6523#pragma omp flush // OK
6524    bar();
6525  }
6526#pragma omp target
6527#pragma omp teams distribute
6528  for (int i = 0; i < 10; ++i) {
6529#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6530    bar();
6531  }
6532#pragma omp target
6533#pragma omp teams distribute
6534  for (int i = 0; i < 10; ++i) {
6535#pragma omp atomic // OK
6536    ++a;
6537  }
6538#pragma omp target
6539#pragma omp teams distribute
6540  for (int i = 0; i < 10; ++i) {
6541#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6542    ++a;
6543  }
6544#pragma omp target
6545#pragma omp teams distribute
6546  for (int i = 0; i < 10; ++i) {
6547#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6548    ++a;
6549  }
6550#pragma omp target
6551#pragma omp teams distribute
6552  for (int i = 0; i < 10; ++i) {
6553#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6554    for (int i = 0; i < 10; ++i)
6555      ;
6556  }
6557#pragma omp target
6558#pragma omp teams distribute
6559  for (int i = 0; i < 10; ++i) {
6560#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6561    ++a;
6562  }
6563#pragma omp target
6564#pragma omp teams distribute
6565  for (int i = 0; i < 10; ++i) {
6566#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6567    ++a;
6568  }
6569#pragma omp target
6570#pragma omp teams distribute
6571  for (int i = 0; i < 10; ++i) {
6572#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6573    ++a;
6574  }
6575#pragma omp target
6576#pragma omp teams distribute
6577  for (int i = 0; i < 10; ++i) {
6578#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6579    ++a;
6580  }
6581#pragma omp target
6582#pragma omp teams distribute
6583  for (int i = 0; i < 10; ++i) {
6584#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6585    for (int i = 0; i < 10; ++i)
6586      ++a;
6587  }
6588#pragma omp target
6589#pragma omp teams distribute
6590  for (int i = 0; i < 10; ++i) {
6591#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6592    for (int i = 0; i < 10; ++i)
6593      ++a;
6594  }
6595#pragma omp target
6596#pragma omp teams distribute
6597  for (int i = 0; i < 10; ++i) {
6598#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
6599    for (int i = 0; i < 10; ++i)
6600      ++a;
6601  }
6602#pragma omp target
6603#pragma omp teams distribute
6604  for (int i = 0; i < 10; ++i) {
6605#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
6606    for (int i = 0; i < 10; ++i)
6607      ++a;
6608  }
6609#pragma omp target
6610#pragma omp teams distribute
6611  for (int i = 0; i < 10; ++i) {
6612#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
6613    for (int i = 0; i < 10; ++i)
6614      ++a;
6615  }
6616#pragma omp target
6617#pragma omp teams distribute
6618  for (int i = 0; i < 10; ++i) {
6619#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6620    for (int i = 0; i < 10; ++i)
6621      ++a;
6622  }
6623#pragma omp target
6624#pragma omp teams distribute
6625  for (int i = 0; i < 10; ++i) {
6626#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6627    for (int i = 0; i < 10; ++i)
6628      ++a;
6629  }
6630#pragma omp target
6631#pragma omp teams distribute
6632  for (int i = 0; i < 10; ++i) {
6633#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6634    for (int i = 0; i < 10; ++i)
6635      ++a;
6636  }
6637
6638// TEAMS DISTRIBUTE DIRECTIVE
6639#pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6640  for (int i = 0; i < 10; ++i)
6641    ;
6642#pragma omp target
6643#pragma omp teams distribute
6644  for (int i = 0; i < 10; ++i) {
6645#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6646    for (int i = 0; i < 10; ++i)
6647      ;
6648  }
6649#pragma omp target
6650#pragma omp teams distribute
6651  for (int i = 0; i < 10; ++i) {
6652#pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6653    for (int i = 0; i < 10; ++i)
6654      ;
6655  }
6656#pragma omp target
6657#pragma omp teams distribute
6658  for (int i = 0; i < 10; ++i) {
6659#pragma omp for // OK
6660    for (int i = 0; i < 10; ++i)
6661      ;
6662  }
6663#pragma omp target
6664#pragma omp teams distribute
6665  for (int i = 0; i < 10; ++i) {
6666#pragma omp simd // OK
6667    for (int i = 0; i < 10; ++i)
6668      ;
6669  }
6670#pragma omp target
6671#pragma omp teams distribute
6672  for (int i = 0; i < 10; ++i) {
6673#pragma omp for simd // OK
6674    for (int i = 0; i < 10; ++i)
6675      ;
6676  }
6677#pragma omp target
6678#pragma omp teams distribute
6679  for (int i = 0; i < 10; ++i) {
6680#pragma omp parallel // OK
6681    for (int i = 0; i < 10; ++i)
6682      ;
6683  }
6684#pragma omp target
6685#pragma omp teams distribute
6686  for (int i = 0; i < 10; ++i) {
6687#pragma omp sections // OK
6688    {
6689      bar();
6690    }
6691  }
6692#pragma omp target
6693#pragma omp teams distribute
6694  for (int i = 0; i < 10; ++i) {
6695#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
6696    {
6697      bar();
6698    }
6699  }
6700#pragma omp target
6701#pragma omp teams distribute
6702  for (int i = 0; i < 10; ++i) {
6703#pragma omp single // OK
6704    {
6705      bar();
6706    }
6707  }
6708#pragma omp target
6709#pragma omp teams distribute
6710  for (int i = 0; i < 10; ++i) {
6711#pragma omp master // OK
6712    {
6713      bar();
6714    }
6715  }
6716#pragma omp target
6717#pragma omp teams distribute
6718  for (int i = 0; i < 10; ++i) {
6719#pragma omp critical // OK
6720    {
6721      bar();
6722    }
6723  }
6724#pragma omp target
6725#pragma omp teams distribute
6726  for (int i = 0; i < 10; ++i) {
6727#pragma omp parallel // OK
6728    {
6729#pragma omp single
6730      {
6731 bar();
6732      }
6733    }
6734  }
6735#pragma omp target
6736#pragma omp teams distribute
6737  for (int i = 0; i < 10; ++i) {
6738#pragma omp parallel for // OK
6739    for (int i = 0; i < 10; ++i)
6740      ;
6741  }
6742#pragma omp target
6743#pragma omp teams distribute
6744  for (int i = 0; i < 10; ++i) {
6745#pragma omp parallel for simd // OK
6746    for (int i = 0; i < 10; ++i)
6747      ;
6748  }
6749#pragma omp target
6750#pragma omp teams distribute
6751  for (int i = 0; i < 10; ++i) {
6752#pragma omp parallel sections // OK
6753    {
6754      bar();
6755    }
6756  }
6757#pragma omp target
6758#pragma omp teams distribute
6759  for (int i = 0; i < 10; ++i) {
6760#pragma omp task // OK
6761    {
6762      bar();
6763    }
6764  }
6765#pragma omp target
6766#pragma omp teams distribute
6767  for (int i = 0; i < 10; ++i) {
6768#pragma omp taskyield // OK
6769    bar();
6770  }
6771#pragma omp target
6772#pragma omp teams distribute
6773  for (int i = 0; i < 10; ++i) {
6774#pragma omp barrier // OK
6775    bar();
6776  }
6777#pragma omp target
6778#pragma omp teams distribute
6779  for (int i = 0; i < 10; ++i) {
6780#pragma omp taskwait // OK
6781    bar();
6782  }
6783#pragma omp target
6784#pragma omp teams distribute
6785  for (int i = 0; i < 10; ++i) {
6786#pragma omp flush // OK
6787    bar();
6788  }
6789#pragma omp target
6790#pragma omp teams distribute
6791  for (int i = 0; i < 10; ++i) {
6792#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6793    bar();
6794  }
6795#pragma omp target
6796#pragma omp teams distribute
6797  for (int i = 0; i < 10; ++i) {
6798#pragma omp atomic // OK
6799    ++a;
6800  }
6801#pragma omp target
6802#pragma omp teams distribute
6803  for (int i = 0; i < 10; ++i) {
6804#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
6805    ++a;
6806  }
6807#pragma omp target
6808#pragma omp teams distribute
6809  for (int i = 0; i < 10; ++i) {
6810#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
6811    ++a;
6812  }
6813#pragma omp target
6814#pragma omp teams distribute
6815  for (int i = 0; i < 10; ++i) {
6816#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
6817    for (int i = 0; i < 10; ++i)
6818      ;
6819  }
6820#pragma omp target
6821#pragma omp teams distribute
6822  for (int i = 0; i < 10; ++i) {
6823#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
6824    ++a;
6825  }
6826#pragma omp target
6827#pragma omp teams distribute
6828  for (int i = 0; i < 10; ++i) {
6829#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
6830    ++a;
6831  }
6832#pragma omp target
6833#pragma omp teams distribute
6834  for (int i = 0; i < 10; ++i) {
6835#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6836    ++a;
6837  }
6838#pragma omp target
6839#pragma omp teams distribute
6840  for (int i = 0; i < 10; ++i) {
6841#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
6842    ++a;
6843  }
6844#pragma omp target
6845#pragma omp teams distribute
6846  for (int i = 0; i < 10; ++i) {
6847#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6848    for (int i = 0; i < 10; ++i)
6849      ++a;
6850  }
6851#pragma omp target
6852#pragma omp teams distribute
6853  for (int i = 0; i < 10; ++i) {
6854#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
6855    for (int i = 0; i < 10; ++i)
6856      ++a;
6857  }
6858#pragma omp target
6859#pragma omp teams distribute
6860  for (int i = 0; i < 10; ++i) {
6861#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
6862    for (int i = 0; i < 10; ++i)
6863      ++a;
6864  }
6865#pragma omp target
6866#pragma omp teams distribute
6867  for (int i = 0; i < 10; ++i) {
6868#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
6869    for (int i = 0; i < 10; ++i)
6870      ++a;
6871  }
6872#pragma omp target
6873#pragma omp teams distribute
6874  for (int i = 0; i < 10; ++i) {
6875#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
6876    for (int i = 0; i < 10; ++i)
6877      ++a;
6878  }
6879#pragma omp target
6880#pragma omp teams distribute
6881  for (int i = 0; i < 10; ++i) {
6882#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
6883    for (int i = 0; i < 10; ++i)
6884      ++a;
6885  }
6886#pragma omp target
6887#pragma omp teams distribute
6888  for (int i = 0; i < 10; ++i) {
6889#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
6890    ++a;
6891  }
6892#pragma omp target
6893#pragma omp teams distribute
6894  for (int i = 0; i < 10; ++i) {
6895#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
6896    for (int i = 0; i < 10; ++i)
6897      ++a;
6898  }
6899#pragma omp target
6900#pragma omp teams distribute
6901  for (int i = 0; i < 10; ++i) {
6902#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
6903    for (int i = 0; i < 10; ++i)
6904      ++a;
6905  }
6906#pragma omp target
6907#pragma omp teams distribute
6908  for (int i = 0; i < 10; ++i) {
6909#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
6910    for (int i = 0; i < 10; ++i)
6911      ++a;
6912  }
6913#pragma omp target
6914#pragma omp teams distribute
6915  for (int i = 0; i < 10; ++i) {
6916#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
6917    for (int i = 0; i < 10; ++i)
6918      ++a;
6919  }
6920
6921// TEAMS DISTRIBUTE SIMD DIRECTIVE
6922#pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
6923  for (int i = 0; i < 10; ++i)
6924    ;
6925#pragma omp target
6926#pragma omp teams distribute simd
6927  for (int i = 0; i < 10; ++i) {
6928#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6929    for (int i = 0; i < 10; ++i)
6930      ;
6931  }
6932#pragma omp target
6933#pragma omp teams distribute simd
6934  for (int i = 0; i < 10; ++i) {
6935#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6936    for (int i = 0; i < 10; ++i)
6937      ;
6938  }
6939#pragma omp target
6940#pragma omp teams distribute simd
6941  for (int i = 0; i < 10; ++i) {
6942#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6943    for (int i = 0; i < 10; ++i)
6944      ;
6945  }
6946#pragma omp target
6947#pragma omp teams distribute simd
6948  for (int i = 0; i < 10; ++i) {
6949#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6950    for (int i = 0; i < 10; ++i)
6951      ;
6952  }
6953#pragma omp target
6954#pragma omp teams distribute simd
6955  for (int i = 0; i < 10; ++i) {
6956#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6957    for (int i = 0; i < 10; ++i)
6958      ;
6959  }
6960#pragma omp target
6961#pragma omp teams distribute simd
6962  for (int i = 0; i < 10; ++i) {
6963#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6964    for (int i = 0; i < 10; ++i)
6965      ;
6966  }
6967#pragma omp target
6968#pragma omp teams distribute simd
6969  for (int i = 0; i < 10; ++i) {
6970#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6971    {
6972      bar();
6973    }
6974  }
6975#pragma omp target
6976#pragma omp teams distribute simd
6977  for (int i = 0; i < 10; ++i) {
6978#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6979    {
6980      bar();
6981    }
6982  }
6983#pragma omp target
6984#pragma omp teams distribute simd
6985  for (int i = 0; i < 10; ++i) {
6986#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6987    {
6988      bar();
6989    }
6990  }
6991#pragma omp target
6992#pragma omp teams distribute simd
6993  for (int i = 0; i < 10; ++i) {
6994#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6995    {
6996      bar();
6997    }
6998  }
6999#pragma omp target
7000#pragma omp teams distribute simd
7001  for (int i = 0; i < 10; ++i) {
7002#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7003    {
7004      bar();
7005    }
7006  }
7007#pragma omp target
7008#pragma omp teams distribute simd
7009  for (int i = 0; i < 10; ++i) {
7010#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7011    {
7012#pragma omp single
7013      {
7014 bar();
7015      }
7016    }
7017  }
7018#pragma omp target
7019#pragma omp teams distribute simd
7020  for (int i = 0; i < 10; ++i) {
7021#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7022    for (int i = 0; i < 10; ++i)
7023      ;
7024  }
7025#pragma omp target
7026#pragma omp teams distribute simd
7027  for (int i = 0; i < 10; ++i) {
7028#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7029    for (int i = 0; i < 10; ++i)
7030      ;
7031  }
7032#pragma omp target
7033#pragma omp teams distribute simd
7034  for (int i = 0; i < 10; ++i) {
7035#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7036    {
7037      bar();
7038    }
7039  }
7040#pragma omp target
7041#pragma omp teams distribute simd
7042  for (int i = 0; i < 10; ++i) {
7043#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7044    {
7045      bar();
7046    }
7047  }
7048#pragma omp target
7049#pragma omp teams distribute simd
7050  for (int i = 0; i < 10; ++i) {
7051#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7052    bar();
7053  }
7054#pragma omp target
7055#pragma omp teams distribute simd
7056  for (int i = 0; i < 10; ++i) {
7057#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7058    bar();
7059  }
7060#pragma omp target
7061#pragma omp teams distribute simd
7062  for (int i = 0; i < 10; ++i) {
7063#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7064    bar();
7065  }
7066#pragma omp target
7067#pragma omp teams distribute simd
7068  for (int i = 0; i < 10; ++i) {
7069#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7070    bar();
7071  }
7072#pragma omp target
7073#pragma omp teams distribute simd
7074  for (int i = 0; i < 10; ++i) {
7075#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7076    bar();
7077  }
7078#pragma omp target
7079#pragma omp teams distribute simd
7080  for (int i = 0; i < 10; ++i) {
7081#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7082    ++a;
7083  }
7084#pragma omp target
7085#pragma omp teams distribute simd
7086  for (int i = 0; i < 10; ++i) {
7087#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7088    ++a;
7089  }
7090#pragma omp target
7091#pragma omp teams distribute simd
7092  for (int i = 0; i < 10; ++i) {
7093#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7094    ++a;
7095  }
7096#pragma omp target
7097#pragma omp teams distribute simd
7098  for (int i = 0; i < 10; ++i) {
7099#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7100    for (int i = 0; i < 10; ++i)
7101      ;
7102  }
7103#pragma omp target
7104#pragma omp teams distribute simd
7105  for (int i = 0; i < 10; ++i) {
7106#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7107    ++a;
7108  }
7109#pragma omp target
7110#pragma omp teams distribute simd
7111  for (int i = 0; i < 10; ++i) {
7112#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7113    ++a;
7114  }
7115#pragma omp target
7116#pragma omp teams distribute simd
7117  for (int i = 0; i < 10; ++i) {
7118#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7119    ++a;
7120  }
7121#pragma omp target
7122#pragma omp teams distribute simd
7123  for (int i = 0; i < 10; ++i) {
7124#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7125    ++a;
7126  }
7127#pragma omp target
7128#pragma omp teams distribute simd
7129  for (int i = 0; i < 10; ++i) {
7130#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7131    for (int i = 0; i < 10; ++i)
7132      ++a;
7133  }
7134#pragma omp target
7135#pragma omp teams distribute simd
7136  for (int i = 0; i < 10; ++i) {
7137#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7138    for (int i = 0; i < 10; ++i)
7139      ++a;
7140  }
7141#pragma omp target
7142#pragma omp teams distribute simd
7143  for (int i = 0; i < 10; ++i) {
7144#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7145    for (int i = 0; i < 10; ++i)
7146      ++a;
7147  }
7148#pragma omp target
7149#pragma omp teams distribute simd
7150  for (int i = 0; i < 10; ++i) {
7151#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7152    for (int i = 0; i < 10; ++i)
7153      ++a;
7154  }
7155#pragma omp target
7156#pragma omp teams distribute simd
7157  for (int i = 0; i < 10; ++i) {
7158#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7159    for (int i = 0; i < 10; ++i)
7160      ++a;
7161  }
7162#pragma omp target
7163#pragma omp teams distribute simd
7164  for (int i = 0; i < 10; ++i) {
7165#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7166    for (int i = 0; i < 10; ++i)
7167      ++a;
7168  }
7169#pragma omp target
7170#pragma omp teams distribute simd
7171  for (int i = 0; i < 10; ++i) {
7172#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7173    ++a;
7174  }
7175#pragma omp target
7176#pragma omp teams distribute simd
7177  for (int i = 0; i < 10; ++i) {
7178#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7179    for (int i = 0; i < 10; ++i)
7180      ++a;
7181  }
7182#pragma omp target
7183#pragma omp teams distribute simd
7184  for (int i = 0; i < 10; ++i) {
7185#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7186    for (int i = 0; i < 10; ++i)
7187      ++a;
7188  }
7189#pragma omp target
7190#pragma omp teams distribute simd
7191  for (int i = 0; i < 10; ++i) {
7192#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7193    for (int i = 0; i < 10; ++i)
7194      ++a;
7195  }
7196#pragma omp target
7197#pragma omp teams distribute simd
7198  for (int i = 0; i < 10; ++i) {
7199#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7200    for (int i = 0; i < 10; ++i)
7201      ++a;
7202  }
7203
7204// TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
7205#pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7206  for (int i = 0; i < 10; ++i)
7207    ;
7208#pragma omp target
7209#pragma omp teams distribute parallel for simd
7210  for (int i = 0; i < 10; ++i) {
7211#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7212    for (int i = 0; i < 10; ++i)
7213      ;
7214  }
7215#pragma omp target
7216#pragma omp teams distribute parallel for simd
7217  for (int i = 0; i < 10; ++i) {
7218#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7219    for (int i = 0; i < 10; ++i)
7220      ;
7221  }
7222#pragma omp target
7223#pragma omp teams distribute parallel for simd
7224  for (int i = 0; i < 10; ++i) {
7225#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7226    for (int i = 0; i < 10; ++i)
7227      ;
7228  }
7229#pragma omp target
7230#pragma omp teams distribute parallel for simd
7231  for (int i = 0; i < 10; ++i) {
7232#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
7233    for (int i = 0; i < 10; ++i)
7234      ;
7235  }
7236#pragma omp target
7237#pragma omp teams distribute parallel for simd
7238  for (int i = 0; i < 10; ++i) {
7239#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7240    for (int i = 0; i < 10; ++i)
7241      ;
7242  }
7243#pragma omp target
7244#pragma omp teams distribute parallel for simd
7245  for (int i = 0; i < 10; ++i) {
7246#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7247    for (int i = 0; i < 10; ++i)
7248      ;
7249  }
7250#pragma omp target
7251#pragma omp teams distribute parallel for simd
7252  for (int i = 0; i < 10; ++i) {
7253#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7254    {
7255      bar();
7256    }
7257  }
7258#pragma omp target
7259#pragma omp teams distribute parallel for simd
7260  for (int i = 0; i < 10; ++i) {
7261#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7262    {
7263      bar();
7264    }
7265  }
7266#pragma omp target
7267#pragma omp teams distribute parallel for simd
7268  for (int i = 0; i < 10; ++i) {
7269#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7270    {
7271      bar();
7272    }
7273  }
7274#pragma omp target
7275#pragma omp teams distribute parallel for simd
7276  for (int i = 0; i < 10; ++i) {
7277#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7278    {
7279      bar();
7280    }
7281  }
7282#pragma omp target
7283#pragma omp teams distribute parallel for simd
7284  for (int i = 0; i < 10; ++i) {
7285#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7286    {
7287      bar();
7288    }
7289  }
7290#pragma omp target
7291#pragma omp teams distribute parallel for simd
7292  for (int i = 0; i < 10; ++i) {
7293#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7294    {
7295#pragma omp single
7296      {
7297 bar();
7298      }
7299    }
7300  }
7301#pragma omp target
7302#pragma omp teams distribute parallel for simd
7303  for (int i = 0; i < 10; ++i) {
7304#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7305    for (int i = 0; i < 10; ++i)
7306      ;
7307  }
7308#pragma omp target
7309#pragma omp teams distribute parallel for simd
7310  for (int i = 0; i < 10; ++i) {
7311#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7312    for (int i = 0; i < 10; ++i)
7313      ;
7314  }
7315#pragma omp target
7316#pragma omp teams distribute parallel for simd
7317  for (int i = 0; i < 10; ++i) {
7318#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7319    {
7320      bar();
7321    }
7322  }
7323#pragma omp target
7324#pragma omp teams distribute parallel for simd
7325  for (int i = 0; i < 10; ++i) {
7326#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7327    {
7328      bar();
7329    }
7330  }
7331#pragma omp target
7332#pragma omp teams distribute parallel for simd
7333  for (int i = 0; i < 10; ++i) {
7334#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7335    bar();
7336  }
7337#pragma omp target
7338#pragma omp teams distribute parallel for simd
7339  for (int i = 0; i < 10; ++i) {
7340#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7341    bar();
7342  }
7343#pragma omp target
7344#pragma omp teams distribute parallel for simd
7345  for (int i = 0; i < 10; ++i) {
7346#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7347    bar();
7348  }
7349#pragma omp target
7350#pragma omp teams distribute parallel for simd
7351  for (int i = 0; i < 10; ++i) {
7352#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7353    bar();
7354  }
7355#pragma omp target
7356#pragma omp teams distribute parallel for simd
7357  for (int i = 0; i < 10; ++i) {
7358#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7359    bar();
7360  }
7361#pragma omp target
7362#pragma omp teams distribute parallel for simd
7363  for (int i = 0; i < 10; ++i) {
7364#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7365    ++a;
7366  }
7367#pragma omp target
7368#pragma omp teams distribute parallel for simd
7369  for (int i = 0; i < 10; ++i) {
7370#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7371    ++a;
7372  }
7373#pragma omp target
7374#pragma omp teams distribute parallel for simd
7375  for (int i = 0; i < 10; ++i) {
7376#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7377    ++a;
7378  }
7379#pragma omp target
7380#pragma omp teams distribute parallel for simd
7381  for (int i = 0; i < 10; ++i) {
7382#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7383    for (int i = 0; i < 10; ++i)
7384      ;
7385  }
7386#pragma omp target
7387#pragma omp teams distribute parallel for simd
7388  for (int i = 0; i < 10; ++i) {
7389#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7390    ++a;
7391  }
7392#pragma omp target
7393#pragma omp teams distribute parallel for simd
7394  for (int i = 0; i < 10; ++i) {
7395#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7396    ++a;
7397  }
7398#pragma omp target
7399#pragma omp teams distribute parallel for simd
7400  for (int i = 0; i < 10; ++i) {
7401#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7402    ++a;
7403  }
7404#pragma omp target
7405#pragma omp teams distribute parallel for simd
7406  for (int i = 0; i < 10; ++i) {
7407#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7408    ++a;
7409  }
7410#pragma omp target
7411#pragma omp teams distribute parallel for simd
7412  for (int i = 0; i < 10; ++i) {
7413#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7414    for (int i = 0; i < 10; ++i)
7415      ++a;
7416  }
7417#pragma omp target
7418#pragma omp teams distribute parallel for simd
7419  for (int i = 0; i < 10; ++i) {
7420#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7421    for (int i = 0; i < 10; ++i)
7422      ++a;
7423  }
7424#pragma omp target
7425#pragma omp teams distribute parallel for simd
7426  for (int i = 0; i < 10; ++i) {
7427#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7428    for (int i = 0; i < 10; ++i)
7429      ++a;
7430  }
7431#pragma omp target
7432#pragma omp teams distribute parallel for simd
7433  for (int i = 0; i < 10; ++i) {
7434#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7435    for (int i = 0; i < 10; ++i)
7436      ++a;
7437  }
7438#pragma omp target
7439#pragma omp teams distribute parallel for simd
7440  for (int i = 0; i < 10; ++i) {
7441#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7442    for (int i = 0; i < 10; ++i)
7443      ++a;
7444  }
7445#pragma omp target
7446#pragma omp teams distribute parallel for simd
7447  for (int i = 0; i < 10; ++i) {
7448#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7449    for (int i = 0; i < 10; ++i)
7450      ++a;
7451  }
7452#pragma omp target
7453#pragma omp teams distribute parallel for simd
7454  for (int i = 0; i < 10; ++i) {
7455#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7456    ++a;
7457  }
7458#pragma omp target
7459#pragma omp teams distribute parallel for simd
7460  for (int i = 0; i < 10; ++i) {
7461#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7462    for (int i = 0; i < 10; ++i)
7463      ++a;
7464  }
7465#pragma omp target
7466#pragma omp teams distribute parallel for simd
7467  for (int i = 0; i < 10; ++i) {
7468#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7469    for (int i = 0; i < 10; ++i)
7470      ++a;
7471  }
7472#pragma omp target
7473#pragma omp teams distribute parallel for simd
7474  for (int i = 0; i < 10; ++i) {
7475#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7476    for (int i = 0; i < 10; ++i)
7477      ++a;
7478  }
7479#pragma omp target
7480#pragma omp teams distribute parallel for simd
7481  for (int i = 0; i < 10; ++i) {
7482#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
7483    for (int i = 0; i < 10; ++i)
7484      ++a;
7485  }
7486
7487// TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
7488#pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
7489  for (int i = 0; i < 10; ++i)
7490    ;
7491#pragma omp target
7492#pragma omp teams distribute parallel for
7493  for (int i = 0; i < 10; ++i) {
7494#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7495    for (int i = 0; i < 10; ++i)
7496      ;
7497  }
7498#pragma omp target
7499#pragma omp teams distribute parallel for
7500  for (int i = 0; i < 10; ++i) {
7501#pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7502    for (int i = 0; i < 10; ++i)
7503      ;
7504  }
7505#pragma omp target
7506#pragma omp teams distribute parallel for
7507  for (int i = 0; i < 10; ++i) {
7508#pragma omp for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
7509    for (int i = 0; i < 10; ++i)
7510      ;
7511  }
7512#pragma omp target
7513#pragma omp teams distribute parallel for
7514  for (int i = 0; i < 10; ++i) {
7515#pragma omp simd // OK
7516    for (int i = 0; i < 10; ++i)
7517      ;
7518  }
7519#pragma omp target
7520#pragma omp teams distribute parallel for
7521  for (int i = 0; i < 10; ++i) {
7522#pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
7523    for (int i = 0; i < 10; ++i)
7524      ;
7525  }
7526#pragma omp target
7527#pragma omp teams distribute parallel for
7528  for (int i = 0; i < 10; ++i) {
7529#pragma omp parallel // OK
7530    for (int i = 0; i < 10; ++i)
7531      ;
7532  }
7533#pragma omp target
7534#pragma omp teams distribute parallel for
7535  for (int i = 0; i < 10; ++i) {
7536#pragma omp sections // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
7537    {
7538      bar();
7539    }
7540  }
7541#pragma omp target
7542#pragma omp teams distribute parallel for
7543  for (int i = 0; i < 10; ++i) {
7544#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
7545    {
7546      bar();
7547    }
7548  }
7549#pragma omp target
7550#pragma omp teams distribute parallel for
7551  for (int i = 0; i < 10; ++i) {
7552#pragma omp single // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
7553    {
7554      bar();
7555    }
7556  }
7557#pragma omp target
7558#pragma omp teams distribute parallel for
7559  for (int i = 0; i < 10; ++i) {
7560#pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
7561    {
7562      bar();
7563    }
7564  }
7565#pragma omp target
7566#pragma omp teams distribute parallel for
7567  for (int i = 0; i < 10; ++i) {
7568#pragma omp critical // OK
7569    {
7570      bar();
7571    }
7572  }
7573#pragma omp target
7574#pragma omp teams distribute parallel for
7575  for (int i = 0; i < 10; ++i) {
7576#pragma omp parallel // OK
7577    {
7578#pragma omp single
7579      {
7580 bar();
7581      }
7582    }
7583  }
7584#pragma omp target
7585#pragma omp teams distribute parallel for
7586  for (int i = 0; i < 10; ++i) {
7587#pragma omp parallel for // OK
7588    for (int i = 0; i < 10; ++i)
7589      ;
7590  }
7591#pragma omp target
7592#pragma omp teams distribute parallel for
7593  for (int i = 0; i < 10; ++i) {
7594#pragma omp parallel for simd // OK
7595    for (int i = 0; i < 10; ++i)
7596      ;
7597  }
7598#pragma omp target
7599#pragma omp teams distribute parallel for
7600  for (int i = 0; i < 10; ++i) {
7601#pragma omp parallel sections // OK
7602    {
7603      bar();
7604    }
7605  }
7606#pragma omp target
7607#pragma omp teams distribute parallel for
7608  for (int i = 0; i < 10; ++i) {
7609#pragma omp task // OK
7610    {
7611      bar();
7612    }
7613  }
7614#pragma omp target
7615#pragma omp teams distribute parallel for
7616  for (int i = 0; i < 10; ++i) {
7617#pragma omp taskyield // OK
7618    bar();
7619  }
7620#pragma omp target
7621#pragma omp teams distribute parallel for
7622  for (int i = 0; i < 10; ++i) {
7623#pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
7624    bar();
7625  }
7626#pragma omp target
7627#pragma omp teams distribute parallel for
7628  for (int i = 0; i < 10; ++i) {
7629#pragma omp taskwait // OK
7630    bar();
7631  }
7632#pragma omp target
7633#pragma omp teams distribute parallel for
7634  for (int i = 0; i < 10; ++i) {
7635#pragma omp flush // OK
7636    bar();
7637  }
7638#pragma omp target
7639#pragma omp teams distribute parallel for
7640  for (int i = 0; i < 10; ++i) {
7641#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7642    bar();
7643  }
7644#pragma omp target
7645#pragma omp teams distribute parallel for
7646  for (int i = 0; i < 10; ++i) {
7647#pragma omp atomic // OK
7648    ++a;
7649  }
7650#pragma omp target
7651#pragma omp teams distribute parallel for
7652  for (int i = 0; i < 10; ++i) {
7653#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7654    ++a;
7655  }
7656#pragma omp target
7657#pragma omp teams distribute parallel for
7658  for (int i = 0; i < 10; ++i) {
7659#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
7660    ++a;
7661  }
7662#pragma omp target
7663#pragma omp teams distribute parallel for
7664  for (int i = 0; i < 10; ++i) {
7665#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7666    for (int i = 0; i < 10; ++i)
7667      ;
7668  }
7669#pragma omp target
7670#pragma omp teams distribute parallel for
7671  for (int i = 0; i < 10; ++i) {
7672#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7673    ++a;
7674  }
7675#pragma omp target
7676#pragma omp teams distribute parallel for
7677  for (int i = 0; i < 10; ++i) {
7678#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7679    ++a;
7680  }
7681#pragma omp target
7682#pragma omp teams distribute parallel for
7683  for (int i = 0; i < 10; ++i) {
7684#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7685    ++a;
7686  }
7687#pragma omp target
7688#pragma omp teams distribute parallel for
7689  for (int i = 0; i < 10; ++i) {
7690#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
7691    ++a;
7692  }
7693#pragma omp target
7694#pragma omp teams distribute parallel for
7695  for (int i = 0; i < 10; ++i) {
7696#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
7697    for (int i = 0; i < 10; ++i)
7698      ++a;
7699  }
7700#pragma omp target
7701#pragma omp teams distribute parallel for
7702  for (int i = 0; i < 10; ++i) {
7703#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
7704    for (int i = 0; i < 10; ++i)
7705      ++a;
7706  }
7707#pragma omp target
7708#pragma omp teams distribute parallel for
7709  for (int i = 0; i < 10; ++i) {
7710#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
7711    for (int i = 0; i < 10; ++i)
7712      ++a;
7713  }
7714#pragma omp target
7715#pragma omp teams distribute parallel for
7716  for (int i = 0; i < 10; ++i) {
7717#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
7718    for (int i = 0; i < 10; ++i)
7719      ++a;
7720  }
7721#pragma omp target
7722#pragma omp teams distribute parallel for
7723  for (int i = 0; i < 10; ++i) {
7724#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
7725    for (int i = 0; i < 10; ++i)
7726      ++a;
7727  }
7728#pragma omp target
7729#pragma omp teams distribute parallel for
7730  for (int i = 0; i < 10; ++i) {
7731#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
7732    for (int i = 0; i < 10; ++i)
7733      ++a;
7734  }
7735#pragma omp target
7736#pragma omp teams distribute parallel for
7737  for (int i = 0; i < 10; ++i) {
7738#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
7739    ++a;
7740  }
7741#pragma omp target
7742#pragma omp teams distribute parallel for
7743  for (int i = 0; i < 10; ++i) {
7744#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
7745    for (int i = 0; i < 10; ++i)
7746      ++a;
7747  }
7748#pragma omp target
7749#pragma omp teams distribute parallel for
7750  for (int i = 0; i < 10; ++i) {
7751#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
7752    for (int i = 0; i < 10; ++i)
7753      ++a;
7754  }
7755#pragma omp target
7756#pragma omp teams distribute parallel for
7757  for (int i = 0; i < 10; ++i) {
7758#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
7759    for (int i = 0; i < 10; ++i)
7760      ++a;
7761  }
7762#pragma omp target
7763#pragma omp teams distribute parallel for
7764  for (int i = 0; i < 10; ++i) {
7765#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
7766    for (int i = 0; i < 10; ++i)
7767      ++a;
7768  }
7769
7770// TARGET TEAMS DIRECTIVE
7771#pragma omp target teams
7772#pragma omp parallel
7773  bar();
7774#pragma omp target teams
7775#pragma omp for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
7776  for (int i = 0; i < 10; ++i)
7777    ;
7778#pragma omp target teams
7779#pragma omp simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
7780  for (int i = 0; i < 10; ++i)
7781    ;
7782#pragma omp target teams
7783#pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
7784  for (int i = 0; i < 10; ++i)
7785    ;
7786#pragma omp target teams
7787#pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
7788  {
7789    bar();
7790  }
7791#pragma omp target teams
7792#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
7793  {
7794    bar();
7795  }
7796#pragma omp target teams
7797#pragma omp single // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
7798  bar();
7799
7800#pragma omp target teams
7801#pragma omp master // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
7802  {
7803    bar();
7804  }
7805#pragma omp target teams
7806#pragma omp critical // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
7807  {
7808    bar();
7809  }
7810#pragma omp target teams
7811#pragma omp parallel for
7812  for (int i = 0; i < 10; ++i)
7813    ;
7814#pragma omp target teams
7815#pragma omp parallel for simd
7816  for (int i = 0; i < 10; ++i)
7817    ;
7818#pragma omp target teams
7819#pragma omp parallel sections
7820  {
7821    bar();
7822  }
7823#pragma omp target teams
7824#pragma omp task // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
7825  {
7826    bar();
7827  }
7828#pragma omp target teams
7829  {
7830#pragma omp taskyield // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
7831    bar();
7832  }
7833#pragma omp target teams
7834  {
7835#pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
7836    bar();
7837  }
7838#pragma omp target teams
7839  {
7840#pragma omp taskwait // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
7841    bar();
7842  }
7843#pragma omp target teams
7844  {
7845#pragma omp flush // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
7846    bar();
7847  }
7848#pragma omp target teams
7849  {
7850#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7851    bar();
7852  }
7853#pragma omp target teams
7854  {
7855#pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
7856    ++a;
7857  }
7858#pragma omp target teams
7859  {
7860#pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
7861    ++a;
7862  }
7863#pragma omp target teams
7864  {
7865#pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
7866    ++a;
7867  }
7868#pragma omp target teams
7869#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
7870  for (int i = 0; i < 10; ++i)
7871    ;
7872#pragma omp target teams
7873  {
7874#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7875  }
7876#pragma omp target teams
7877  {
7878#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
7879  }
7880#pragma omp target teams
7881  {
7882#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7883    ++a;
7884  }
7885#pragma omp target teams
7886  {
7887#pragma omp taskloop // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
7888  for (int i = 0; i < 10; ++i)
7889    ++a;
7890  }
7891#pragma omp target teams
7892#pragma omp distribute
7893  for (int i = 0; i < 10; ++i)
7894    ;
7895#pragma omp target teams
7896  {
7897#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
7898    ++a;
7899  }
7900#pragma omp target teams
7901#pragma omp distribute parallel for
7902  for (int i = 0; i < 10; ++i)
7903    ;
7904#pragma omp target teams
7905  {
7906#pragma omp distribute parallel for
7907  for (int i = 0; i < 10; ++i)
7908    ;
7909#pragma omp distribute parallel for
7910  for (int j = 0; j < 10; ++j)
7911    ;  
7912  }
7913#pragma omp target teams
7914  {
7915#pragma omp distribute parallel for simd
7916  for (int i = 0; i < 10; ++i)
7917    ;
7918#pragma omp distribute parallel for simd
7919  for (int j = 0; j < 10; ++j)
7920    ;  
7921  }
7922#pragma omp target teams
7923  {
7924#pragma omp distribute simd
7925  for (int i = 0; i < 10; ++i)
7926    ;
7927#pragma omp distribute simd
7928  for (int j = 0; j < 10; ++j)
7929    ;  
7930  }
7931#pragma omp target teams
7932  {
7933#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
7934  for (int i = 0; i < 10; ++i)
7935    ;
7936  }
7937#pragma omp target teams
7938  {
7939#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
7940  for (int i = 0; i < 10; ++i)
7941    ;
7942  }
7943#pragma omp target teams
7944  {
7945#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
7946  for (int i = 0; i < 10; ++i)
7947    ;
7948  }
7949#pragma omp target teams
7950  {
7951#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
7952  for (int i = 0; i < 10; ++i)
7953    ;
7954  }
7955#pragma omp target teams
7956  {
7957#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
7958  for (int i = 0; i < 10; ++i)
7959    ;
7960  }
7961#pragma omp target teams
7962  {
7963#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
7964    a++;
7965  }
7966#pragma omp target teams
7967  {
7968#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
7969  for (int i = 0; i < 10; ++i)
7970    ;
7971  }
7972#pragma omp target teams
7973  {
7974#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
7975  for (int i = 0; i < 10; ++i)
7976    ;
7977  }
7978#pragma omp target teams
7979  {
7980#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
7981  for (int i = 0; i < 10; ++i)
7982    ;
7983  }
7984#pragma omp target teams
7985  {
7986#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
7987  for (int i = 0; i < 10; ++i)
7988    ;
7989  }
7990
7991// TARGET TEAMS DISTRIBUTE DIRECTIVE
7992#pragma omp target teams distribute // OK
7993  for (int i = 0; i < 10; ++i)
7994    ;
7995#pragma omp target teams distribute
7996  for (int i = 0; i < 10; ++i) {
7997#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7998    for (int i = 0; i < 10; ++i)
7999      ;
8000  }
8001#pragma omp target teams distribute
8002  for (int i = 0; i < 10; ++i) {
8003#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8004    for (int i = 0; i < 10; ++i)
8005      ;
8006  }
8007#pragma omp target teams distribute
8008  for (int i = 0; i < 10; ++i) {
8009#pragma omp for // OK
8010    for (int i = 0; i < 10; ++i)
8011      ;
8012  }
8013#pragma omp target teams distribute
8014  for (int i = 0; i < 10; ++i) {
8015#pragma omp simd // OK
8016    for (int i = 0; i < 10; ++i)
8017      ;
8018  }
8019#pragma omp target teams distribute
8020  for (int i = 0; i < 10; ++i) {
8021#pragma omp for simd // OK
8022    for (int i = 0; i < 10; ++i)
8023      ;
8024  }
8025#pragma omp target teams distribute
8026  for (int i = 0; i < 10; ++i) {
8027#pragma omp parallel // OK
8028    for (int i = 0; i < 10; ++i)
8029      ;
8030  }
8031#pragma omp target teams distribute
8032  for (int i = 0; i < 10; ++i) {
8033#pragma omp sections // OK
8034    {
8035      bar();
8036    }
8037  }
8038#pragma omp target teams distribute
8039  for (int i = 0; i < 10; ++i) {
8040#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
8041    {
8042      bar();
8043    }
8044  }
8045#pragma omp target teams distribute
8046  for (int i = 0; i < 10; ++i) {
8047#pragma omp single // OK
8048    {
8049      bar();
8050    }
8051  }
8052#pragma omp target teams distribute
8053  for (int i = 0; i < 10; ++i) {
8054#pragma omp master // OK
8055    {
8056      bar();
8057    }
8058  }
8059#pragma omp target teams distribute
8060  for (int i = 0; i < 10; ++i) {
8061#pragma omp critical // OK
8062    {
8063      bar();
8064    }
8065  }
8066#pragma omp target teams distribute
8067  for (int i = 0; i < 10; ++i) {
8068#pragma omp parallel // OK
8069    {
8070#pragma omp single
8071      {
8072 bar();
8073      }
8074    }
8075  }
8076#pragma omp target teams distribute
8077  for (int i = 0; i < 10; ++i) {
8078#pragma omp parallel for // OK
8079    for (int i = 0; i < 10; ++i)
8080      ;
8081  }
8082#pragma omp target teams distribute
8083  for (int i = 0; i < 10; ++i) {
8084#pragma omp parallel for simd // OK
8085    for (int i = 0; i < 10; ++i)
8086      ;
8087  }
8088#pragma omp target teams distribute
8089  for (int i = 0; i < 10; ++i) {
8090#pragma omp parallel sections // OK
8091    {
8092      bar();
8093    }
8094  }
8095#pragma omp target teams distribute
8096  for (int i = 0; i < 10; ++i) {
8097#pragma omp task // OK
8098    {
8099      bar();
8100    }
8101  }
8102#pragma omp target teams distribute
8103  for (int i = 0; i < 10; ++i) {
8104#pragma omp taskyield // OK
8105    bar();
8106  }
8107#pragma omp target teams distribute
8108  for (int i = 0; i < 10; ++i) {
8109#pragma omp barrier // OK
8110    bar();
8111  }
8112#pragma omp target teams distribute
8113  for (int i = 0; i < 10; ++i) {
8114#pragma omp taskwait // OK
8115    bar();
8116  }
8117#pragma omp target teams distribute
8118  for (int i = 0; i < 10; ++i) {
8119#pragma omp flush // OK
8120    bar();
8121  }
8122#pragma omp target teams distribute
8123  for (int i = 0; i < 10; ++i) {
8124#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8125    bar();
8126  }
8127#pragma omp target teams distribute
8128  for (int i = 0; i < 10; ++i) {
8129#pragma omp atomic // OK
8130    ++a;
8131  }
8132#pragma omp target teams distribute
8133  for (int i = 0; i < 10; ++i) {
8134#pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8135    ++a;
8136  }
8137#pragma omp target teams distribute
8138  for (int i = 0; i < 10; ++i) {
8139#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8140    ++a;
8141  }
8142#pragma omp target teams distribute
8143  for (int i = 0; i < 10; ++i) {
8144#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8145    for (int i = 0; i < 10; ++i)
8146      ;
8147  }
8148#pragma omp target teams distribute
8149  for (int i = 0; i < 10; ++i) {
8150#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8151    ++a;
8152  }
8153#pragma omp target teams distribute
8154  for (int i = 0; i < 10; ++i) {
8155#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8156    ++a;
8157  }
8158#pragma omp target teams distribute
8159  for (int i = 0; i < 10; ++i) {
8160#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8161    ++a;
8162  }
8163#pragma omp target teams distribute
8164  for (int i = 0; i < 10; ++i) {
8165#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8166    ++a;
8167  }
8168#pragma omp target teams distribute
8169  for (int i = 0; i < 10; ++i) {
8170#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8171    for (int i = 0; i < 10; ++i)
8172      ++a;
8173  }
8174#pragma omp target teams distribute
8175  for (int i = 0; i < 10; ++i) {
8176#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8177    for (int i = 0; i < 10; ++i)
8178      ++a;
8179  }
8180#pragma omp target teams distribute
8181  for (int i = 0; i < 10; ++i) {
8182#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
8183    for (int i = 0; i < 10; ++i)
8184      ++a;
8185  }
8186#pragma omp target teams distribute
8187  for (int i = 0; i < 10; ++i) {
8188#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
8189    for (int i = 0; i < 10; ++i)
8190      ++a;
8191  }
8192#pragma omp target teams distribute
8193  for (int i = 0; i < 10; ++i) {
8194#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
8195    for (int i = 0; i < 10; ++i)
8196      ++a;
8197  }
8198#pragma omp target teams distribute
8199  for (int i = 0; i < 10; ++i) {
8200#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
8201    for (int i = 0; i < 10; ++i)
8202      ;
8203  }
8204#pragma omp target teams distribute
8205  for (int i = 0; i < 10; ++i) {
8206#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8207    a++;
8208  }
8209#pragma omp target teams distribute
8210  for (int i = 0; i < 10; ++i) {
8211#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8212    for (int i = 0; i < 10; ++i)
8213      ;
8214  }
8215#pragma omp target teams distribute
8216  for (int i = 0; i < 10; ++i) {
8217#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8218    for (int i = 0; i < 10; ++i)
8219      ;
8220  }
8221#pragma omp target teams distribute
8222  for (int i = 0; i < 10; ++i) {
8223#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8224    for (int i = 0; i < 10; ++i)
8225      ;
8226  }
8227#pragma omp target teams distribute
8228  for (int i = 0; i < 10; ++i) {
8229#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
8230    for (int i = 0; i < 10; ++i)
8231      ;
8232  }
8233
8234// TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
8235#pragma omp target teams distribute parallel for // OK
8236  for (int i = 0; i < 10; ++i)
8237    ;
8238#pragma omp target teams distribute parallel for
8239  for (int i = 0; i < 10; ++i) {
8240#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
8241    for (int i = 0; i < 10; ++i)
8242      ;
8243  }
8244#pragma omp target teams distribute parallel for
8245  for (int i = 0; i < 10; ++i) {
8246#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8247    for (int i = 0; i < 10; ++i)
8248      ;
8249  }
8250#pragma omp target teams distribute parallel for
8251  for (int i = 0; i < 10; ++i) {
8252#pragma omp for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
8253    for (int i = 0; i < 10; ++i)
8254      ;
8255  }
8256#pragma omp target teams distribute parallel for
8257  for (int i = 0; i < 10; ++i) {
8258#pragma omp simd // OK
8259    for (int i = 0; i < 10; ++i)
8260      ;
8261  }
8262#pragma omp target teams distribute parallel for
8263  for (int i = 0; i < 10; ++i) {
8264#pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8265    for (int i = 0; i < 10; ++i)
8266      ;
8267  }
8268#pragma omp target teams distribute parallel for
8269  for (int i = 0; i < 10; ++i) {
8270#pragma omp parallel // OK
8271    for (int i = 0; i < 10; ++i)
8272      ;
8273  }
8274#pragma omp target teams distribute parallel for
8275  for (int i = 0; i < 10; ++i) {
8276#pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8277    {
8278      bar();
8279    }
8280  }
8281#pragma omp target teams distribute parallel for
8282  for (int i = 0; i < 10; ++i) {
8283#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
8284    {
8285      bar();
8286    }
8287  }
8288#pragma omp target teams distribute parallel for
8289  for (int i = 0; i < 10; ++i) {
8290#pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8291    {
8292      bar();
8293    }
8294  }
8295#pragma omp target teams distribute parallel for
8296  for (int i = 0; i < 10; ++i) {
8297#pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8298    {
8299      bar();
8300    }
8301  }
8302#pragma omp target teams distribute parallel for
8303  for (int i = 0; i < 10; ++i) {
8304#pragma omp critical // OK
8305    {
8306      bar();
8307    }
8308  }
8309#pragma omp target teams distribute parallel for
8310  for (int i = 0; i < 10; ++i) {
8311#pragma omp parallel // OK
8312    {
8313#pragma omp single
8314      {
8315 bar();
8316      }
8317    }
8318  }
8319#pragma omp target teams distribute parallel for
8320  for (int i = 0; i < 10; ++i) {
8321#pragma omp parallel for // OK
8322    for (int i = 0; i < 10; ++i)
8323      ;
8324  }
8325#pragma omp target teams distribute parallel for
8326  for (int i = 0; i < 10; ++i) {
8327#pragma omp parallel for simd // OK
8328    for (int i = 0; i < 10; ++i)
8329      ;
8330  }
8331#pragma omp target teams distribute parallel for
8332  for (int i = 0; i < 10; ++i) {
8333#pragma omp parallel sections // OK
8334    {
8335      bar();
8336    }
8337  }
8338#pragma omp target teams distribute parallel for
8339  for (int i = 0; i < 10; ++i) {
8340#pragma omp task // OK
8341    {
8342      bar();
8343    }
8344  }
8345#pragma omp target teams distribute parallel for
8346  for (int i = 0; i < 10; ++i) {
8347#pragma omp taskyield // OK
8348    bar();
8349  }
8350#pragma omp target teams distribute parallel for
8351  for (int i = 0; i < 10; ++i) {
8352#pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
8353    bar();
8354  }
8355#pragma omp target teams distribute parallel for
8356  for (int i = 0; i < 10; ++i) {
8357#pragma omp taskwait // OK
8358    bar();
8359  }
8360#pragma omp target teams distribute parallel for
8361  for (int i = 0; i < 10; ++i) {
8362#pragma omp flush // OK
8363    bar();
8364  }
8365#pragma omp target teams distribute parallel for
8366  for (int i = 0; i < 10; ++i) {
8367#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8368    bar();
8369  }
8370#pragma omp target teams distribute parallel for
8371  for (int i = 0; i < 10; ++i) {
8372#pragma omp atomic // OK
8373    ++a;
8374  }
8375#pragma omp target teams distribute parallel for
8376  for (int i = 0; i < 10; ++i) {
8377#pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8378    ++a;
8379  }
8380#pragma omp target teams distribute parallel for
8381  for (int i = 0; i < 10; ++i) {
8382#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8383    ++a;
8384  }
8385#pragma omp target teams distribute parallel for
8386  for (int i = 0; i < 10; ++i) {
8387#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8388    for (int i = 0; i < 10; ++i)
8389      ;
8390  }
8391#pragma omp target teams distribute parallel for
8392  for (int i = 0; i < 10; ++i) {
8393#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8394    ++a;
8395  }
8396#pragma omp target teams distribute parallel for
8397  for (int i = 0; i < 10; ++i) {
8398#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8399    ++a;
8400  }
8401#pragma omp target teams distribute parallel for
8402  for (int i = 0; i < 10; ++i) {
8403#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8404    ++a;
8405  }
8406#pragma omp target teams distribute parallel for
8407  for (int i = 0; i < 10; ++i) {
8408#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8409    ++a;
8410  }
8411#pragma omp target teams distribute parallel for
8412  for (int i = 0; i < 10; ++i) {
8413#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8414    for (int i = 0; i < 10; ++i)
8415      ++a;
8416  }
8417#pragma omp target teams distribute parallel for
8418  for (int i = 0; i < 10; ++i) {
8419#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8420    for (int i = 0; i < 10; ++i)
8421      ++a;
8422  }
8423#pragma omp target teams distribute parallel for
8424  for (int i = 0; i < 10; ++i) {
8425#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
8426    for (int i = 0; i < 10; ++i)
8427      ++a;
8428  }
8429#pragma omp target teams distribute parallel for
8430  for (int i = 0; i < 10; ++i) {
8431#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
8432    for (int i = 0; i < 10; ++i)
8433      ++a;
8434  }
8435#pragma omp target teams distribute parallel for
8436  for (int i = 0; i < 10; ++i) {
8437#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
8438    for (int i = 0; i < 10; ++i)
8439      ++a;
8440  }
8441#pragma omp target teams distribute parallel for
8442  for (int i = 0; i < 10; ++i) {
8443#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
8444    for (int i = 0; i < 10; ++i)
8445      ;
8446  }
8447#pragma omp target teams distribute parallel for
8448  for (int i = 0; i < 10; ++i) {
8449#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8450    a++;
8451  }
8452#pragma omp target teams distribute parallel for
8453  for (int i = 0; i < 10; ++i) {
8454#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8455    for (int i = 0; i < 10; ++i)
8456      ;
8457  }
8458#pragma omp target teams distribute parallel for
8459  for (int i = 0; i < 10; ++i) {
8460#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8461    for (int i = 0; i < 10; ++i)
8462      ;
8463  }
8464#pragma omp target teams distribute parallel for
8465  for (int i = 0; i < 10; ++i) {
8466#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8467    for (int i = 0; i < 10; ++i)
8468      ;
8469  }
8470#pragma omp target teams distribute parallel for
8471  for (int i = 0; i < 10; ++i) {
8472#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
8473    for (int i = 0; i < 10; ++i)
8474      ;
8475  }
8476
8477// TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
8478#pragma omp target teams distribute parallel for simd // OK
8479  for (int i = 0; i < 10; ++i)
8480    ;
8481#pragma omp target teams distribute parallel for simd
8482  for (int i = 0; i < 10; ++i) {
8483#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8484    for (int i = 0; i < 10; ++i)
8485      ;
8486  }
8487#pragma omp target teams distribute parallel for simd
8488  for (int i = 0; i < 10; ++i) {
8489#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8490    for (int i = 0; i < 10; ++i)
8491      ;
8492  }
8493#pragma omp target teams distribute parallel for simd
8494  for (int i = 0; i < 10; ++i) {
8495#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8496    for (int i = 0; i < 10; ++i)
8497      ;
8498  }
8499#pragma omp target teams distribute parallel for simd
8500  for (int i = 0; i < 10; ++i) {
8501#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8502    for (int i = 0; i < 10; ++i)
8503      ;
8504  }
8505#pragma omp target teams distribute parallel for simd
8506  for (int i = 0; i < 10; ++i) {
8507#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8508    for (int i = 0; i < 10; ++i)
8509      ;
8510  }
8511#pragma omp target teams distribute parallel for simd
8512  for (int i = 0; i < 10; ++i) {
8513#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8514    for (int i = 0; i < 10; ++i)
8515      ;
8516  }
8517#pragma omp target teams distribute parallel for simd
8518  for (int i = 0; i < 10; ++i) {
8519#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8520    {
8521      bar();
8522    }
8523  }
8524#pragma omp target teams distribute parallel for simd
8525  for (int i = 0; i < 10; ++i) {
8526#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8527    {
8528      bar();
8529    }
8530  }
8531#pragma omp target teams distribute parallel for simd
8532  for (int i = 0; i < 10; ++i) {
8533#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8534    {
8535      bar();
8536    }
8537  }
8538#pragma omp target teams distribute parallel for simd
8539  for (int i = 0; i < 10; ++i) {
8540#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8541    {
8542      bar();
8543    }
8544  }
8545#pragma omp target teams distribute parallel for simd
8546  for (int i = 0; i < 10; ++i) {
8547#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8548    {
8549      bar();
8550    }
8551  }
8552#pragma omp target teams distribute parallel for simd
8553  for (int i = 0; i < 10; ++i) {
8554#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8555    {
8556#pragma omp single
8557      {
8558 bar();
8559      }
8560    }
8561  }
8562#pragma omp target teams distribute parallel for simd
8563  for (int i = 0; i < 10; ++i) {
8564#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8565    for (int i = 0; i < 10; ++i)
8566      ;
8567  }
8568#pragma omp target teams distribute parallel for simd
8569  for (int i = 0; i < 10; ++i) {
8570#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8571    for (int i = 0; i < 10; ++i)
8572      ;
8573  }
8574#pragma omp target teams distribute parallel for simd
8575  for (int i = 0; i < 10; ++i) {
8576#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8577    {
8578      bar();
8579    }
8580  }
8581#pragma omp target teams distribute parallel for simd
8582  for (int i = 0; i < 10; ++i) {
8583#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8584    {
8585      bar();
8586    }
8587  }
8588#pragma omp target teams distribute parallel for simd
8589  for (int i = 0; i < 10; ++i) {
8590#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8591    bar();
8592  }
8593#pragma omp target teams distribute parallel for simd
8594  for (int i = 0; i < 10; ++i) {
8595#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8596    bar();
8597  }
8598#pragma omp target teams distribute parallel for simd
8599  for (int i = 0; i < 10; ++i) {
8600#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8601    bar();
8602  }
8603#pragma omp target teams distribute parallel for simd
8604  for (int i = 0; i < 10; ++i) {
8605#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8606    bar();
8607  }
8608#pragma omp target teams distribute parallel for simd
8609  for (int i = 0; i < 10; ++i) {
8610#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8611    bar();
8612  }
8613#pragma omp target teams distribute parallel for simd
8614  for (int i = 0; i < 10; ++i) {
8615#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
8616    ++a;
8617  }
8618#pragma omp target teams distribute parallel for simd
8619  for (int i = 0; i < 10; ++i) {
8620#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8621    ++a;
8622  }
8623#pragma omp target teams distribute parallel for simd
8624  for (int i = 0; i < 10; ++i) {
8625#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8626    ++a;
8627  }
8628#pragma omp target teams distribute parallel for simd
8629  for (int i = 0; i < 10; ++i) {
8630#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8631    for (int i = 0; i < 10; ++i)
8632      ;
8633  }
8634#pragma omp target teams distribute parallel for simd
8635  for (int i = 0; i < 10; ++i) {
8636#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8637    ++a;
8638  }
8639#pragma omp target teams distribute parallel for simd
8640  for (int i = 0; i < 10; ++i) {
8641#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8642    ++a;
8643  }
8644#pragma omp target teams distribute parallel for simd
8645  for (int i = 0; i < 10; ++i) {
8646#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8647    ++a;
8648  }
8649#pragma omp target teams distribute parallel for simd
8650  for (int i = 0; i < 10; ++i) {
8651#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8652    ++a;
8653  }
8654#pragma omp target teams distribute parallel for simd
8655  for (int i = 0; i < 10; ++i) {
8656#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8657    for (int i = 0; i < 10; ++i)
8658      ++a;
8659  }
8660#pragma omp target teams distribute parallel for simd
8661  for (int i = 0; i < 10; ++i) {
8662#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8663    for (int i = 0; i < 10; ++i)
8664      ++a;
8665  }
8666#pragma omp target teams distribute parallel for simd
8667  for (int i = 0; i < 10; ++i) {
8668#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8669    for (int i = 0; i < 10; ++i)
8670      ++a;
8671  }
8672#pragma omp target teams distribute parallel for simd
8673  for (int i = 0; i < 10; ++i) {
8674#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8675    for (int i = 0; i < 10; ++i)
8676      ++a;
8677  }
8678#pragma omp target teams distribute parallel for simd
8679  for (int i = 0; i < 10; ++i) {
8680#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8681    for (int i = 0; i < 10; ++i)
8682      ++a;
8683  }
8684#pragma omp target teams distribute parallel for simd
8685  for (int i = 0; i < 10; ++i) {
8686#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8687    for (int i = 0; i < 10; ++i)
8688      ;
8689  }
8690#pragma omp target teams distribute parallel for simd
8691  for (int i = 0; i < 10; ++i) {
8692#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8693    a++;
8694  }
8695#pragma omp target teams distribute parallel for simd
8696  for (int i = 0; i < 10; ++i) {
8697#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8698    for (int i = 0; i < 10; ++i)
8699      ;
8700  }
8701#pragma omp target teams distribute parallel for simd
8702  for (int i = 0; i < 10; ++i) {
8703#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8704    for (int i = 0; i < 10; ++i)
8705      ;
8706  }
8707#pragma omp target teams distribute parallel for simd
8708  for (int i = 0; i < 10; ++i) {
8709#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8710    for (int i = 0; i < 10; ++i)
8711      ;
8712  }
8713#pragma omp target teams distribute parallel for simd
8714  for (int i = 0; i < 10; ++i) {
8715#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8716    for (int i = 0; i < 10; ++i)
8717      ;
8718  }
8719
8720// TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
8721#pragma omp target teams distribute simd // OK
8722  for (int i = 0; i < 10; ++i)
8723    ;
8724#pragma omp target teams distribute simd
8725  for (int i = 0; i < 10; ++i) {
8726#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8727    for (int i = 0; i < 10; ++i)
8728      ;
8729  }
8730#pragma omp target teams distribute simd
8731  for (int i = 0; i < 10; ++i) {
8732#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8733    for (int i = 0; i < 10; ++i)
8734      ;
8735  }
8736#pragma omp target teams distribute simd
8737  for (int i = 0; i < 10; ++i) {
8738#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8739    for (int i = 0; i < 10; ++i)
8740      ;
8741  }
8742#pragma omp target teams distribute simd
8743  for (int i = 0; i < 10; ++i) {
8744#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8745    for (int i = 0; i < 10; ++i)
8746      ;
8747  }
8748#pragma omp target teams distribute simd
8749  for (int i = 0; i < 10; ++i) {
8750#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8751    for (int i = 0; i < 10; ++i)
8752      ;
8753  }
8754#pragma omp target teams distribute simd
8755  for (int i = 0; i < 10; ++i) {
8756#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8757    for (int i = 0; i < 10; ++i)
8758      ;
8759  }
8760#pragma omp target teams distribute simd
8761  for (int i = 0; i < 10; ++i) {
8762#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8763    {
8764      bar();
8765    }
8766  }
8767#pragma omp target teams distribute simd
8768  for (int i = 0; i < 10; ++i) {
8769#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8770    {
8771      bar();
8772    }
8773  }
8774#pragma omp target teams distribute simd
8775  for (int i = 0; i < 10; ++i) {
8776#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8777    {
8778      bar();
8779    }
8780  }
8781#pragma omp target teams distribute simd
8782  for (int i = 0; i < 10; ++i) {
8783#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8784    {
8785      bar();
8786    }
8787  }
8788#pragma omp target teams distribute simd
8789  for (int i = 0; i < 10; ++i) {
8790#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8791    {
8792      bar();
8793    }
8794  }
8795#pragma omp target teams distribute simd
8796  for (int i = 0; i < 10; ++i) {
8797#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8798    {
8799#pragma omp single
8800      {
8801 bar();
8802      }
8803    }
8804  }
8805#pragma omp target teams distribute simd
8806  for (int i = 0; i < 10; ++i) {
8807#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8808    for (int i = 0; i < 10; ++i)
8809      ;
8810  }
8811#pragma omp target teams distribute simd
8812  for (int i = 0; i < 10; ++i) {
8813#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8814    for (int i = 0; i < 10; ++i)
8815      ;
8816  }
8817#pragma omp target teams distribute simd
8818  for (int i = 0; i < 10; ++i) {
8819#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8820    {
8821      bar();
8822    }
8823  }
8824#pragma omp target teams distribute simd
8825  for (int i = 0; i < 10; ++i) {
8826#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8827    {
8828      bar();
8829    }
8830  }
8831#pragma omp target teams distribute simd
8832  for (int i = 0; i < 10; ++i) {
8833#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8834    bar();
8835  }
8836#pragma omp target teams distribute simd
8837  for (int i = 0; i < 10; ++i) {
8838#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8839    bar();
8840  }
8841#pragma omp target teams distribute simd
8842  for (int i = 0; i < 10; ++i) {
8843#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8844    bar();
8845  }
8846#pragma omp target teams distribute simd
8847  for (int i = 0; i < 10; ++i) {
8848#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8849    bar();
8850  }
8851#pragma omp target teams distribute simd
8852  for (int i = 0; i < 10; ++i) {
8853#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8854    bar();
8855  }
8856#pragma omp target teams distribute simd
8857  for (int i = 0; i < 10; ++i) {
8858#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
8859    ++a;
8860  }
8861#pragma omp target teams distribute simd
8862  for (int i = 0; i < 10; ++i) {
8863#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8864    ++a;
8865  }
8866#pragma omp target teams distribute simd
8867  for (int i = 0; i < 10; ++i) {
8868#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8869    ++a;
8870  }
8871#pragma omp target teams distribute simd
8872  for (int i = 0; i < 10; ++i) {
8873#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8874    for (int i = 0; i < 10; ++i)
8875      ;
8876  }
8877#pragma omp target teams distribute simd
8878  for (int i = 0; i < 10; ++i) {
8879#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8880    ++a;
8881  }
8882#pragma omp target teams distribute simd
8883  for (int i = 0; i < 10; ++i) {
8884#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8885    ++a;
8886  }
8887#pragma omp target teams distribute simd
8888  for (int i = 0; i < 10; ++i) {
8889#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8890    ++a;
8891  }
8892#pragma omp target teams distribute simd
8893  for (int i = 0; i < 10; ++i) {
8894#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8895    ++a;
8896  }
8897#pragma omp target teams distribute simd
8898  for (int i = 0; i < 10; ++i) {
8899#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8900    for (int i = 0; i < 10; ++i)
8901      ++a;
8902  }
8903#pragma omp target teams distribute simd
8904  for (int i = 0; i < 10; ++i) {
8905#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8906    for (int i = 0; i < 10; ++i)
8907      ++a;
8908  }
8909#pragma omp target teams distribute simd
8910  for (int i = 0; i < 10; ++i) {
8911#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8912    for (int i = 0; i < 10; ++i)
8913      ++a;
8914  }
8915#pragma omp target teams distribute simd
8916  for (int i = 0; i < 10; ++i) {
8917#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8918    for (int i = 0; i < 10; ++i)
8919      ++a;
8920  }
8921#pragma omp target teams distribute simd
8922  for (int i = 0; i < 10; ++i) {
8923#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8924    for (int i = 0; i < 10; ++i)
8925      ++a;
8926  }
8927#pragma omp target teams distribute simd
8928  for (int i = 0; i < 10; ++i) {
8929#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8930    for (int i = 0; i < 10; ++i)
8931      ;
8932  }
8933#pragma omp target teams distribute simd
8934  for (int i = 0; i < 10; ++i) {
8935#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8936    a++;
8937  }
8938#pragma omp target teams distribute simd
8939  for (int i = 0; i < 10; ++i) {
8940#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8941    for (int i = 0; i < 10; ++i)
8942      ;
8943  }
8944#pragma omp target teams distribute simd
8945  for (int i = 0; i < 10; ++i) {
8946#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8947    for (int i = 0; i < 10; ++i)
8948      ;
8949  }
8950#pragma omp target teams distribute simd
8951  for (int i = 0; i < 10; ++i) {
8952#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8953    for (int i = 0; i < 10; ++i)
8954      ;
8955  }
8956#pragma omp target teams distribute simd
8957  for (int i = 0; i < 10; ++i) {
8958#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8959    for (int i = 0; i < 10; ++i)
8960      ;
8961  }
8962
8963}
8964
8965void foo() {
8966  int a = 0;
8967// PARALLEL DIRECTIVE
8968#pragma omp parallel
8969#pragma omp for
8970  for (int i = 0; i < 10; ++i)
8971    ;
8972#pragma omp parallel
8973#pragma omp simd
8974  for (int i = 0; i < 10; ++i)
8975    ;
8976#pragma omp parallel
8977#pragma omp for simd
8978  for (int i = 0; i < 10; ++i)
8979    ;
8980#pragma omp parallel
8981#pragma omp sections
8982  {
8983    bar();
8984  }
8985#pragma omp parallel
8986#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
8987  {
8988    bar();
8989  }
8990#pragma omp parallel
8991#pragma omp sections
8992  {
8993    bar();
8994  }
8995#pragma omp parallel
8996#pragma omp single
8997  bar();
8998#pragma omp parallel
8999#pragma omp master
9000  bar();
9001#pragma omp parallel
9002#pragma omp critical
9003  bar();
9004#pragma omp parallel
9005#pragma omp parallel for
9006  for (int i = 0; i < 10; ++i)
9007    ;
9008#pragma omp parallel
9009#pragma omp parallel for simd
9010  for (int i = 0; i < 10; ++i)
9011    ;
9012#pragma omp parallel
9013#pragma omp parallel sections
9014  {
9015    bar();
9016  }
9017#pragma omp parallel
9018#pragma omp task
9019  {
9020    bar();
9021  }
9022#pragma omp parallel
9023  {
9024#pragma omp taskyield
9025    bar();
9026  }
9027#pragma omp parallel
9028  {
9029#pragma omp barrier
9030    bar();
9031  }
9032#pragma omp parallel
9033  {
9034#pragma omp taskwait
9035    bar();
9036  }
9037#pragma omp parallel
9038  {
9039#pragma omp flush
9040    bar();
9041  }
9042#pragma omp parallel
9043  {
9044#pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
9045    bar();
9046  }
9047#pragma omp parallel
9048  {
9049#pragma omp atomic
9050    ++a;
9051  }
9052#pragma omp parallel
9053  {
9054#pragma omp target
9055    ++a;
9056  }
9057#pragma omp parallel
9058  {
9059#pragma omp target parallel
9060    ++a;
9061  }
9062#pragma omp parallel
9063#pragma omp target parallel for
9064  for (int i = 0; i < 10; ++i)
9065    ;
9066#pragma omp parallel
9067  {
9068#pragma omp target enter data map(to: a)
9069    ++a;
9070  }
9071#pragma omp parallel
9072  {
9073#pragma omp target exit data map(from: a)
9074    ++a;
9075  }
9076#pragma omp parallel
9077  {
9078#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
9079    ++a;
9080  }
9081#pragma omp parallel
9082  {
9083#pragma omp taskloop
9084  for (int i = 0; i < 10; ++i)
9085    ++a;
9086  }
9087#pragma omp parallel
9088  {
9089#pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
9090    for (int i = 0; i < 10; ++i)
9091      ;
9092  }
9093#pragma omp parallel
9094  {
9095#pragma omp target update to(a)
9096    a++;
9097  }
9098#pragma omp parallel
9099  {
9100#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
9101    for (int i = 0; i < 10; ++i)
9102      ;
9103  }
9104#pragma omp parallel
9105  {
9106#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
9107    for (int i = 0; i < 10; ++i)
9108      ;
9109  }
9110#pragma omp parallel
9111  {
9112#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
9113    for (int i = 0; i < 10; ++i)
9114      ;
9115  }
9116#pragma omp parallel
9117  {
9118#pragma omp target simd // OK
9119    for (int i = 0; i < 10; ++i)
9120      ;
9121  }
9122#pragma omp parallel
9123  {
9124#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
9125    for (int i = 0; i < 10; ++i)
9126      ;
9127  }
9128#pragma omp parallel
9129  {
9130#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
9131    for (int i = 0; i < 10; ++i)
9132      ;
9133  }
9134#pragma omp parallel
9135  {
9136#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
9137    for (int i = 0; i < 10; ++i)
9138      ;
9139  }
9140#pragma omp parallel
9141  {
9142#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
9143    for (int i = 0; i < 10; ++i)
9144      ;
9145  }
9146#pragma omp parallel
9147  {
9148#pragma omp target teams // OK
9149    a++;
9150  }
9151#pragma omp parallel
9152  {
9153#pragma omp target teams distribute // OK
9154    for (int i = 0; i < 10; ++i)
9155      ;
9156  }
9157#pragma omp parallel
9158  {
9159#pragma omp target teams distribute parallel for // OK
9160    for (int i = 0; i < 10; ++i)
9161      ;
9162  }
9163#pragma omp parallel
9164  {
9165#pragma omp target teams distribute parallel for simd // OK
9166    for (int i = 0; i < 10; ++i)
9167      ;
9168  }
9169#pragma omp parallel
9170  {
9171#pragma omp target teams distribute simd // OK
9172    for (int i = 0; i < 10; ++i)
9173      ;
9174  }
9175
9176// SIMD DIRECTIVE
9177#pragma omp simd
9178  for (int i = 0; i < 10; ++i) {
9179#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9180    for (int i = 0; i < 10; ++i)
9181      ;
9182  }
9183#pragma omp simd
9184  for (int i = 0; i < 10; ++i) {
9185#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9186    for (int i = 0; i < 10; ++i)
9187      ;
9188  }
9189#pragma omp simd
9190  for (int i = 0; i < 10; ++i) {
9191#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9192    for (int i = 0; i < 10; ++i)
9193      ;
9194  }
9195#pragma omp simd
9196  for (int i = 0; i < 10; ++i) {
9197#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9198    for (int i = 0; i < 10; ++i)
9199      ;
9200  }
9201#pragma omp simd
9202  for (int i = 0; i < 10; ++i) {
9203#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9204    {
9205      bar();
9206    }
9207  }
9208#pragma omp simd
9209  for (int i = 0; i < 10; ++i) {
9210#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9211    {
9212      bar();
9213    }
9214  }
9215#pragma omp simd
9216  for (int i = 0; i < 10; ++i) {
9217#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9218    bar();
9219#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9220    bar();
9221  }
9222#pragma omp simd
9223  for (int i = 0; i < 10; ++i) {
9224#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9225    bar();
9226#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9227    bar();
9228  }
9229#pragma omp simd
9230  for (int i = 0; i < 10; ++i) {
9231#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9232    for (int i = 0; i < 10; ++i)
9233      ;
9234  }
9235#pragma omp simd
9236  for (int i = 0; i < 10; ++i) {
9237#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9238    for (int i = 0; i < 10; ++i)
9239      ;
9240  }
9241#pragma omp simd
9242  for (int i = 0; i < 10; ++i) {
9243#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9244    {
9245      bar();
9246    }
9247  }
9248#pragma omp simd
9249  for (int i = 0; i < 10; ++i) {
9250#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9251    {
9252      bar();
9253    }
9254  }
9255#pragma omp simd
9256  for (int i = 0; i < 10; ++i) {
9257#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9258    bar();
9259  }
9260#pragma omp simd
9261  for (int i = 0; i < 10; ++i) {
9262#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9263    bar();
9264  }
9265#pragma omp simd
9266  for (int i = 0; i < 10; ++i) {
9267#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9268    bar();
9269  }
9270#pragma omp simd
9271  for (int i = 0; i < 10; ++i) {
9272#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9273    bar();
9274  }
9275#pragma omp simd
9276  for (int i = 0; i < 10; ++i) {
9277#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9278    bar();
9279  }
9280#pragma omp simd
9281  for (int i = 0; i < 10; ++i) {
9282#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9283    ++a;
9284  }
9285#pragma omp simd
9286  for (int i = 0; i < 10; ++i) {
9287#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9288    ++a;
9289  }
9290#pragma omp simd
9291  for (int i = 0; i < 10; ++i) {
9292#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9293    ++a;
9294  }
9295#pragma omp simd
9296  for (int i = 0; i < 10; ++i) {
9297#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9298    for (int i = 0; i < 10; ++i)
9299      ;
9300  }
9301#pragma omp simd
9302  for (int i = 0; i < 10; ++i) {
9303#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9304    ++a;
9305  }
9306#pragma omp simd
9307  for (int i = 0; i < 10; ++i) {
9308#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9309    ++a;
9310  }
9311#pragma omp simd
9312  for (int i = 0; i < 10; ++i) {
9313#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9314    ++a;
9315  }
9316#pragma omp simd
9317  for (int i = 0; i < 10; ++i) {
9318#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9319  for (int i = 0; i < 10; ++i)
9320    ++a;
9321  }
9322#pragma omp simd
9323  for (int i = 0; i < 10; ++i) {
9324#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9325    for (int j = 0; j < 10; ++j)
9326      ;
9327  }
9328#pragma omp simd
9329  for (int i = 0; i < 10; ++i) {
9330#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9331    a++;
9332  }
9333#pragma omp simd
9334  for (int i = 0; i < 10; ++i) {
9335#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9336    for (int j = 0; j < 10; ++j)
9337      ;
9338  }
9339#pragma omp simd
9340  for (int i = 0; i < 10; ++i) {
9341#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9342    for (int j = 0; j < 10; ++j)
9343      ;
9344  }
9345#pragma omp simd
9346  for (int i = 0; i < 10; ++i) {
9347#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9348    for (int j = 0; j < 10; ++j)
9349      ;
9350  }
9351#pragma omp simd
9352  for (int i = 0; i < 10; ++i) {
9353#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9354    for (int j = 0; j < 10; ++j)
9355      ;
9356  }
9357#pragma omp simd
9358  for (int i = 0; i < 10; ++i) {
9359#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9360    for (int j = 0; j < 10; ++j)
9361      ;
9362  }
9363#pragma omp simd
9364  for (int i = 0; i < 10; ++i) {
9365#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9366    for (int j = 0; j < 10; ++j)
9367      ;
9368  }
9369#pragma omp simd
9370  for (int i = 0; i < 10; ++i) {
9371#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9372    for (int j = 0; j < 10; ++j)
9373      ;
9374  }
9375#pragma omp simd
9376  for (int i = 0; i < 10; ++i) {
9377#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9378    for (int j = 0; j < 10; ++j)
9379      ;
9380  }
9381#pragma omp simd
9382  for (int i = 0; i < 10; ++i) {
9383#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9384    a++;
9385  }
9386#pragma omp simd
9387  for (int i = 0; i < 10; ++i) {
9388#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9389    for (int j = 0; j < 10; ++j)
9390      ;
9391  }
9392#pragma omp simd
9393  for (int i = 0; i < 10; ++i) {
9394#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9395    for (int j = 0; j < 10; ++j)
9396      ;
9397  }
9398#pragma omp simd
9399  for (int i = 0; i < 10; ++i) {
9400#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9401    for (int j = 0; j < 10; ++j)
9402      ;
9403  }
9404#pragma omp simd
9405  for (int i = 0; i < 10; ++i) {
9406#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9407    for (int j = 0; j < 10; ++j)
9408      ;
9409  }
9410
9411// FOR DIRECTIVE
9412#pragma omp for
9413  for (int i = 0; i < 10; ++i) {
9414#pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
9415    for (int i = 0; i < 10; ++i)
9416      ;
9417  }
9418#pragma omp for
9419  for (int i = 0; i < 10; ++i) {
9420#pragma omp simd
9421    for (int i = 0; i < 10; ++i)
9422      ;
9423  }
9424#pragma omp for
9425  for (int i = 0; i < 10; ++i) {
9426#pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
9427    for (int i = 0; i < 10; ++i)
9428      ;
9429  }
9430#pragma omp for
9431  for (int i = 0; i < 10; ++i) {
9432#pragma omp parallel
9433    for (int i = 0; i < 10; ++i)
9434      ;
9435  }
9436#pragma omp for
9437  for (int i = 0; i < 10; ++i) {
9438#pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
9439    {
9440      bar();
9441    }
9442  }
9443#pragma omp for
9444  for (int i = 0; i < 10; ++i) {
9445#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
9446    {
9447      bar();
9448    }
9449  }
9450#pragma omp for
9451  for (int i = 0; i < 10; ++i) {
9452#pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
9453    bar();
9454#pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
9455    bar();
9456#pragma omp critical
9457    bar();
9458  }
9459#pragma omp for
9460  for (int i = 0; i < 10; ++i) {
9461#pragma omp parallel
9462    {
9463#pragma omp single // OK
9464      {
9465        bar();
9466      }
9467#pragma omp for // OK
9468      for (int i = 0; i < 10; ++i)
9469        ;
9470#pragma omp for simd // OK
9471      for (int i = 0; i < 10; ++i)
9472        ;
9473#pragma omp sections // OK
9474      {
9475        bar();
9476      }
9477    }
9478  }
9479#pragma omp for
9480  for (int i = 0; i < 10; ++i) {
9481#pragma omp parallel for
9482    for (int i = 0; i < 10; ++i)
9483      ;
9484  }
9485#pragma omp for
9486  for (int i = 0; i < 10; ++i) {
9487#pragma omp parallel for simd
9488    for (int i = 0; i < 10; ++i)
9489      ;
9490  }
9491#pragma omp for
9492  for (int i = 0; i < 10; ++i) {
9493#pragma omp parallel sections
9494    {
9495      bar();
9496    }
9497  }
9498#pragma omp for
9499  for (int i = 0; i < 10; ++i) {
9500#pragma omp task
9501    {
9502      bar();
9503    }
9504  }
9505#pragma omp for
9506  for (int i = 0; i < 10; ++i) {
9507#pragma omp taskyield
9508    bar();
9509  }
9510#pragma omp for
9511  for (int i = 0; i < 10; ++i) {
9512#pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
9513    bar();
9514  }
9515#pragma omp for
9516  for (int i = 0; i < 10; ++i) {
9517#pragma omp taskwait
9518    bar();
9519  }
9520#pragma omp for
9521  for (int i = 0; i < 10; ++i) {
9522#pragma omp flush
9523    bar();
9524  }
9525#pragma omp for
9526  for (int i = 0; i < 10; ++i) {
9527#pragma omp ordered // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
9528    bar();
9529  }
9530#pragma omp for ordered
9531  for (int i = 0; i < 10; ++i) {
9532#pragma omp ordered // OK
9533    bar();
9534  }
9535#pragma omp for
9536  for (int i = 0; i < 10; ++i) {
9537#pragma omp atomic
9538    ++a;
9539  }
9540#pragma omp for
9541  for (int i = 0; i < 10; ++i) {
9542#pragma omp target
9543    ++a;
9544  }
9545#pragma omp for
9546  for (int i = 0; i < 10; ++i) {
9547#pragma omp target parallel
9548    ++a;
9549  }
9550#pragma omp for
9551  for (int i = 0; i < 10; ++i) {
9552#pragma omp target parallel for
9553    for (int i = 0; i < 10; ++i)
9554      ;
9555  }
9556#pragma omp for
9557  for (int i = 0; i < 10; ++i) {
9558#pragma omp target enter data map(to: a)
9559    ++a;
9560  }
9561#pragma omp for
9562  for (int i = 0; i < 10; ++i) {
9563#pragma omp target exit data map(from: a)
9564    ++a;
9565  }
9566#pragma omp for
9567  for (int i = 0; i < 10; ++i) {
9568#pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
9569    ++a;
9570  }
9571#pragma omp for
9572  for (int i = 0; i < 10; ++i) {
9573#pragma omp taskloop
9574  for (int i = 0; i < 10; ++i)
9575    ++a;
9576  }
9577#pragma omp for
9578  for (int i = 0; i < 10; ++i) {
9579#pragma omp distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
9580    for (int j = 0; j < 10; ++j)
9581      ;
9582  }
9583#pragma omp for
9584  for (int i = 0; i < 10; ++i) {
9585#pragma omp target update to(a)
9586    ++a;
9587  }
9588#pragma omp for
9589  for (int i = 0; i < 10; ++i) {
9590#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
9591    for (int j = 0; j < 10; ++j)
9592      ;
9593  }
9594#pragma omp for
9595  for (int i = 0; i < 10; ++i) {
9596#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
9597    for (int j = 0; j < 10; ++j)
9598      ;
9599  }
9600#pragma omp for
9601  for (int i = 0; i < 10; ++i) {
9602#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
9603    for (int j = 0; j < 10; ++j)
9604      ;
9605  }
9606#pragma omp for
9607  for (int i = 0; i < 10; ++i) {
9608#pragma omp target simd // OK
9609    for (int j = 0; j < 10; ++j)
9610      ;
9611  }
9612#pragma omp for
9613  for (int i = 0; i < 10; ++i) {
9614#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
9615    for (int j = 0; j < 10; ++j)
9616      ;
9617  }
9618#pragma omp for
9619  for (int i = 0; i < 10; ++i) {
9620#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
9621    for (int j = 0; j < 10; ++j)
9622      ;
9623  }
9624#pragma omp for
9625  for (int i = 0; i < 10; ++i) {
9626#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
9627    for (int j = 0; j < 10; ++j)
9628      ;
9629  }
9630#pragma omp for
9631  for (int i = 0; i < 10; ++i) {
9632#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
9633    for (int j = 0; j < 10; ++j)
9634      ;
9635  }
9636#pragma omp for
9637  for (int i = 0; i < 10; ++i) {
9638#pragma omp target teams // OK
9639    a++;
9640  }
9641#pragma omp for
9642  for (int i = 0; i < 10; ++i) {
9643#pragma omp target teams distribute // OK
9644    for (int j = 0; j < 10; ++j)
9645      ;
9646  }
9647#pragma omp for
9648  for (int i = 0; i < 10; ++i) {
9649#pragma omp target teams distribute parallel for // OK
9650    for (int j = 0; j < 10; ++j)
9651      ;
9652  }
9653#pragma omp for
9654  for (int i = 0; i < 10; ++i) {
9655#pragma omp target teams distribute parallel for simd // OK
9656    for (int j = 0; j < 10; ++j)
9657      ;
9658  }
9659#pragma omp for
9660  for (int i = 0; i < 10; ++i) {
9661#pragma omp target teams distribute simd // OK
9662    for (int j = 0; j < 10; ++j)
9663      ;
9664  }
9665
9666// FOR SIMD DIRECTIVE
9667#pragma omp for simd
9668  for (int i = 0; i < 10; ++i) {
9669#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9670    for (int i = 0; i < 10; ++i)
9671      ;
9672  }
9673#pragma omp for simd
9674  for (int i = 0; i < 10; ++i) {
9675#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9676    for (int i = 0; i < 10; ++i)
9677      ;
9678  }
9679#pragma omp for simd
9680  for (int i = 0; i < 10; ++i) {
9681#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9682    for (int i = 0; i < 10; ++i)
9683      ;
9684  }
9685#pragma omp for simd
9686  for (int i = 0; i < 10; ++i) {
9687#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9688    for (int i = 0; i < 10; ++i)
9689      ;
9690  }
9691#pragma omp for simd
9692  for (int i = 0; i < 10; ++i) {
9693#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9694    {
9695      bar();
9696    }
9697  }
9698#pragma omp for simd
9699  for (int i = 0; i < 10; ++i) {
9700#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9701    {
9702      bar();
9703    }
9704  }
9705#pragma omp for simd
9706  for (int i = 0; i < 10; ++i) {
9707#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9708    bar();
9709#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9710    bar();
9711  }
9712#pragma omp for simd
9713  for (int i = 0; i < 10; ++i) {
9714#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9715    bar();
9716#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9717    bar();
9718  }
9719#pragma omp for simd
9720  for (int i = 0; i < 10; ++i) {
9721#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9722    for (int i = 0; i < 10; ++i)
9723      ;
9724  }
9725#pragma omp for simd
9726  for (int i = 0; i < 10; ++i) {
9727#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9728    for (int i = 0; i < 10; ++i)
9729      ;
9730  }
9731#pragma omp for simd
9732  for (int i = 0; i < 10; ++i) {
9733#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9734    {
9735      bar();
9736    }
9737  }
9738#pragma omp for simd
9739  for (int i = 0; i < 10; ++i) {
9740#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9741    {
9742      bar();
9743    }
9744  }
9745#pragma omp for simd
9746  for (int i = 0; i < 10; ++i) {
9747#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9748    bar();
9749  }
9750#pragma omp for simd
9751  for (int i = 0; i < 10; ++i) {
9752#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9753    bar();
9754  }
9755#pragma omp for simd
9756  for (int i = 0; i < 10; ++i) {
9757#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9758    bar();
9759  }
9760#pragma omp for simd
9761  for (int i = 0; i < 10; ++i) {
9762#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9763    bar();
9764  }
9765#pragma omp for simd
9766  for (int i = 0; i < 10; ++i) {
9767#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9768    bar();
9769  }
9770#pragma omp for simd
9771  for (int i = 0; i < 10; ++i) {
9772#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9773    ++a;
9774  }
9775#pragma omp for simd
9776  for (int i = 0; i < 10; ++i) {
9777#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9778    ++a;
9779  }
9780#pragma omp for simd
9781  for (int i = 0; i < 10; ++i) {
9782#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9783    ++a;
9784  }
9785#pragma omp for simd
9786  for (int i = 0; i < 10; ++i) {
9787#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9788    for (int i = 0; i < 10; ++i)
9789      ;
9790  }
9791#pragma omp for simd
9792  for (int i = 0; i < 10; ++i) {
9793#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9794    ++a;
9795  }
9796#pragma omp for simd
9797  for (int i = 0; i < 10; ++i) {
9798#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9799    ++a;
9800  }
9801#pragma omp for simd
9802  for (int i = 0; i < 10; ++i) {
9803#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9804    ++a;
9805  }
9806#pragma omp for simd
9807  for (int i = 0; i < 10; ++i) {
9808#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9809  for (int i = 0; i < 10; ++i)
9810    ++a;
9811  }
9812#pragma omp for simd
9813  for (int i = 0; i < 10; ++i) {
9814#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9815    for (int j = 0; j < 10; ++j)
9816      ;
9817  }
9818#pragma omp for simd
9819  for (int i = 0; i < 10; ++i) {
9820#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9821    ++a;
9822  }
9823#pragma omp for simd
9824  for (int i = 0; i < 10; ++i) {
9825#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9826    for (int j = 0; j < 10; ++j)
9827      ;
9828  }
9829#pragma omp for simd
9830  for (int i = 0; i < 10; ++i) {
9831#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9832    for (int j = 0; j < 10; ++j)
9833      ;
9834  }
9835#pragma omp for simd
9836  for (int i = 0; i < 10; ++i) {
9837#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9838    for (int j = 0; j < 10; ++j)
9839      ;
9840  }
9841#pragma omp for simd
9842  for (int i = 0; i < 10; ++i) {
9843#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9844    for (int j = 0; j < 10; ++j)
9845      ;
9846  }
9847#pragma omp for simd
9848  for (int i = 0; i < 10; ++i) {
9849#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9850    for (int j = 0; j < 10; ++j)
9851      ;
9852  }
9853#pragma omp for simd
9854  for (int i = 0; i < 10; ++i) {
9855#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9856    for (int j = 0; j < 10; ++j)
9857      ;
9858  }
9859#pragma omp for simd
9860  for (int i = 0; i < 10; ++i) {
9861#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9862    for (int j = 0; j < 10; ++j)
9863      ;
9864  }
9865#pragma omp for simd
9866  for (int i = 0; i < 10; ++i) {
9867#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9868    for (int j = 0; j < 10; ++j)
9869      ;
9870  }
9871#pragma omp for simd
9872  for (int i = 0; i < 10; ++i) {
9873#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9874    a++;
9875  }
9876#pragma omp for simd
9877  for (int i = 0; i < 10; ++i) {
9878#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9879    for (int j = 0; j < 10; ++j)
9880      ;
9881  }
9882#pragma omp for simd
9883  for (int i = 0; i < 10; ++i) {
9884#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9885    for (int j = 0; j < 10; ++j)
9886      ;
9887  }
9888#pragma omp for simd
9889  for (int i = 0; i < 10; ++i) {
9890#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9891    for (int j = 0; j < 10; ++j)
9892      ;
9893  }
9894#pragma omp for simd
9895  for (int i = 0; i < 10; ++i) {
9896#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9897    for (int j = 0; j < 10; ++j)
9898      ;
9899  }
9900
9901// SECTIONS DIRECTIVE
9902#pragma omp sections
9903  {
9904#pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
9905    for (int i = 0; i < 10; ++i)
9906      ;
9907  }
9908#pragma omp sections
9909  {
9910#pragma omp simd
9911    for (int i = 0; i < 10; ++i)
9912      ;
9913  }
9914#pragma omp sections
9915  {
9916#pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
9917    for (int i = 0; i < 10; ++i)
9918      ;
9919  }
9920#pragma omp sections
9921  {
9922#pragma omp parallel
9923    for (int i = 0; i < 10; ++i)
9924      ;
9925  }
9926#pragma omp sections
9927  {
9928#pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
9929    {
9930      bar();
9931    }
9932  }
9933#pragma omp sections
9934  {
9935#pragma omp section
9936    {
9937      bar();
9938    }
9939  }
9940#pragma omp sections
9941  {
9942#pragma omp critical
9943    bar();
9944#pragma omp single // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
9945    bar();
9946#pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
9947    bar();
9948  }
9949#pragma omp sections
9950  {
9951#pragma omp parallel
9952    {
9953#pragma omp single // OK
9954      {
9955        bar();
9956      }
9957#pragma omp for // OK
9958      for (int i = 0; i < 10; ++i)
9959        ;
9960#pragma omp for simd // OK
9961      for (int i = 0; i < 10; ++i)
9962        ;
9963#pragma omp sections // OK
9964      {
9965        bar();
9966      }
9967    }
9968  }
9969#pragma omp sections
9970  {
9971#pragma omp parallel for
9972    for (int i = 0; i < 10; ++i)
9973      ;
9974  }
9975#pragma omp sections
9976  {
9977#pragma omp parallel for simd
9978    for (int i = 0; i < 10; ++i)
9979      ;
9980  }
9981#pragma omp sections
9982  {
9983#pragma omp parallel sections
9984    {
9985      bar();
9986    }
9987  }
9988#pragma omp sections
9989  {
9990#pragma omp task
9991    {
9992      bar();
9993    }
9994  }
9995#pragma omp sections
9996  {
9997#pragma omp taskyield
9998  }
9999#pragma omp sections
10000  {
10001#pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
10002    bar();
10003  }
10004#pragma omp sections
10005  {
10006#pragma omp taskwait
10007  }
10008#pragma omp sections
10009  {
10010#pragma omp flush
10011  }
10012#pragma omp sections
10013  {
10014#pragma omp ordered // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
10015    bar();
10016  }
10017#pragma omp sections
10018  {
10019#pragma omp atomic
10020    ++a;
10021  }
10022#pragma omp sections
10023  {
10024#pragma omp target
10025    ++a;
10026  }
10027#pragma omp sections
10028  {
10029#pragma omp target parallel
10030    ++a;
10031  }
10032#pragma omp sections
10033  {
10034#pragma omp target parallel for
10035    for (int i = 0; i < 10; ++i)
10036      ;
10037  }
10038#pragma omp sections
10039  {
10040#pragma omp target enter data map(to: a)
10041  }
10042#pragma omp sections
10043  {
10044#pragma omp target exit data map(from: a)
10045  }
10046#pragma omp sections
10047  {
10048#pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
10049    ++a;
10050  }
10051#pragma omp sections
10052  {
10053#pragma omp taskloop
10054  for (int i = 0; i < 10; ++i)
10055    ++a;
10056  }
10057#pragma omp sections
10058  {
10059#pragma omp distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
10060    for (int i = 0; i < 10; ++i)
10061      ;
10062  }
10063#pragma omp sections
10064  {
10065#pragma omp target update to(a)
10066  }
10067#pragma omp sections
10068  {
10069#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
10070    for (int i = 0; i < 10; ++i)
10071      ;
10072  }
10073#pragma omp sections
10074  {
10075#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
10076    for (int i = 0; i < 10; ++i)
10077      ;
10078  }
10079#pragma omp sections
10080  {
10081#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
10082    for (int i = 0; i < 10; ++i)
10083      ;
10084  }
10085#pragma omp sections
10086  {
10087#pragma omp target simd // OK
10088    for (int i = 0; i < 10; ++i)
10089      ;
10090  }
10091#pragma omp sections
10092  {
10093#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10094    for (int i = 0; i < 10; ++i)
10095      ;
10096  }
10097#pragma omp sections
10098  {
10099#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10100    for (int i = 0; i < 10; ++i)
10101      ;
10102  }
10103#pragma omp sections
10104  {
10105#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10106    for (int i = 0; i < 10; ++i)
10107      ;
10108  }
10109#pragma omp sections
10110  {
10111#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10112    for (int i = 0; i < 10; ++i)
10113      ;
10114  }
10115#pragma omp sections
10116  {
10117#pragma omp target teams // OK
10118    a++;
10119  }
10120#pragma omp sections
10121  {
10122#pragma omp target teams distribute // OK
10123    for (int i = 0; i < 10; ++i)
10124      ;
10125  }
10126#pragma omp sections
10127  {
10128#pragma omp target teams distribute parallel for // OK
10129    for (int i = 0; i < 10; ++i)
10130      ;
10131  }
10132#pragma omp sections
10133  {
10134#pragma omp target teams distribute parallel for simd // OK
10135    for (int i = 0; i < 10; ++i)
10136      ;
10137  }
10138#pragma omp sections
10139  {
10140#pragma omp target teams distribute simd // OK
10141    for (int i = 0; i < 10; ++i)
10142      ;
10143  }
10144
10145// SECTION DIRECTIVE
10146#pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
10147  {
10148    bar();
10149  }
10150#pragma omp sections
10151  {
10152#pragma omp section
10153    {
10154#pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
10155      for (int i = 0; i < 10; ++i)
10156        ;
10157    }
10158  }
10159#pragma omp sections
10160  {
10161#pragma omp section
10162    {
10163#pragma omp simd
10164      for (int i = 0; i < 10; ++i)
10165        ;
10166    }
10167  }
10168#pragma omp sections
10169  {
10170#pragma omp section
10171    {
10172#pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
10173      for (int i = 0; i < 10; ++i)
10174        ;
10175    }
10176  }
10177#pragma omp sections
10178  {
10179#pragma omp section
10180    {
10181#pragma omp parallel
10182      for (int i = 0; i < 10; ++i)
10183        ;
10184    }
10185  }
10186#pragma omp sections
10187  {
10188#pragma omp section
10189    {
10190#pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
10191      {
10192        bar();
10193      }
10194    }
10195  }
10196#pragma omp sections
10197  {
10198#pragma omp section
10199    {
10200#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
10201      {
10202        bar();
10203      }
10204    }
10205  }
10206#pragma omp sections
10207  {
10208#pragma omp section
10209    {
10210#pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
10211      bar();
10212#pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
10213      bar();
10214#pragma omp critical
10215      bar();
10216    }
10217  }
10218#pragma omp sections
10219  {
10220#pragma omp section
10221    {
10222#pragma omp parallel
10223      {
10224#pragma omp single // OK
10225        {
10226          bar();
10227        }
10228#pragma omp for // OK
10229        for (int i = 0; i < 10; ++i)
10230          ;
10231#pragma omp for simd // OK
10232        for (int i = 0; i < 10; ++i)
10233          ;
10234#pragma omp sections // OK
10235        {
10236          bar();
10237        }
10238      }
10239    }
10240  }
10241#pragma omp sections
10242  {
10243#pragma omp section
10244    {
10245#pragma omp parallel for
10246      for (int i = 0; i < 10; ++i)
10247        ;
10248    }
10249  }
10250#pragma omp sections
10251  {
10252#pragma omp section
10253    {
10254#pragma omp parallel for simd
10255      for (int i = 0; i < 10; ++i)
10256        ;
10257    }
10258  }
10259#pragma omp sections
10260  {
10261#pragma omp section
10262    {
10263#pragma omp parallel sections
10264      {
10265        bar();
10266      }
10267    }
10268  }
10269#pragma omp sections
10270  {
10271#pragma omp section
10272    {
10273#pragma omp task
10274      {
10275        bar();
10276      }
10277    }
10278  }
10279#pragma omp sections
10280  {
10281#pragma omp section
10282    {
10283#pragma omp taskyield
10284      bar();
10285    }
10286  }
10287#pragma omp sections
10288  {
10289#pragma omp section
10290    {
10291#pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
10292      bar();
10293    }
10294  }
10295#pragma omp sections
10296  {
10297#pragma omp section
10298    {
10299#pragma omp taskwait
10300      bar();
10301    }
10302  }
10303#pragma omp sections
10304  {
10305#pragma omp section
10306    {
10307#pragma omp flush
10308      bar();
10309    }
10310  }
10311#pragma omp sections
10312  {
10313#pragma omp section
10314    {
10315#pragma omp ordered // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
10316      bar();
10317    }
10318  }
10319#pragma omp sections
10320  {
10321#pragma omp section
10322    {
10323#pragma omp atomic
10324      ++a;
10325    }
10326  }
10327#pragma omp sections
10328  {
10329#pragma omp section
10330    {
10331#pragma omp target
10332      ++a;
10333    }
10334  }
10335#pragma omp sections
10336  {
10337#pragma omp section
10338    {
10339#pragma omp target parallel
10340      ++a;
10341    }
10342  }
10343#pragma omp sections
10344  {
10345#pragma omp section
10346    {
10347#pragma omp target parallel for
10348      for (int i = 0; i < 10; ++i)
10349        ;
10350    }
10351  }
10352#pragma omp sections
10353  {
10354#pragma omp section
10355    {
10356#pragma omp target enter data map(to: a)
10357      ++a;
10358    }
10359  }
10360#pragma omp sections
10361  {
10362#pragma omp section
10363    {
10364#pragma omp target exit data map(from: a)
10365      ++a;
10366    }
10367  }
10368#pragma omp sections
10369  {
10370#pragma omp section
10371    {
10372#pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
10373      ++a;
10374    }
10375  }
10376#pragma omp sections
10377  {
10378#pragma omp section
10379    {
10380#pragma omp taskloop
10381  for (int i = 0; i < 10; ++i)
10382      ++a;
10383    }
10384  }
10385#pragma omp sections
10386  {
10387#pragma omp section
10388#pragma omp distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
10389    for (int i = 0; i < 10; ++i)
10390      ;
10391  }
10392#pragma omp sections
10393  {
10394#pragma omp section
10395    {
10396#pragma omp target update to(a)
10397      a++;
10398    }
10399  }
10400#pragma omp sections
10401  {
10402#pragma omp section
10403#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
10404    for (int i = 0; i < 10; ++i)
10405      ;
10406  }
10407#pragma omp sections
10408  {
10409#pragma omp section
10410#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
10411    for (int i = 0; i < 10; ++i)
10412      ;
10413  }
10414#pragma omp sections
10415  {
10416#pragma omp section
10417#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
10418    for (int i = 0; i < 10; ++i)
10419      ;
10420  }
10421#pragma omp sections
10422  {
10423#pragma omp section
10424#pragma omp target simd // OK
10425    for (int i = 0; i < 10; ++i)
10426      ;
10427  }
10428#pragma omp sections
10429  {
10430#pragma omp section
10431#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10432    for (int i = 0; i < 10; ++i)
10433      ;
10434  }
10435#pragma omp sections
10436  {
10437#pragma omp section
10438#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10439    for (int i = 0; i < 10; ++i)
10440      ;
10441  }
10442#pragma omp sections
10443  {
10444#pragma omp section
10445#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10446    for (int i = 0; i < 10; ++i)
10447      ;
10448  }
10449#pragma omp sections
10450  {
10451#pragma omp section
10452#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10453    for (int i = 0; i < 10; ++i)
10454      ;
10455  }
10456#pragma omp sections
10457  {
10458#pragma omp section
10459#pragma omp target teams // OK
10460    a++;
10461  }
10462#pragma omp sections
10463  {
10464#pragma omp section
10465#pragma omp target teams distribute // OK
10466    for (int i = 0; i < 10; ++i)
10467      ;
10468  }
10469#pragma omp sections
10470  {
10471#pragma omp section
10472#pragma omp target teams distribute parallel for // OK
10473    for (int i = 0; i < 10; ++i)
10474      ;
10475  }
10476#pragma omp sections
10477  {
10478#pragma omp section
10479#pragma omp target teams distribute parallel for simd // OK
10480    for (int i = 0; i < 10; ++i)
10481      ;
10482  }
10483#pragma omp sections
10484  {
10485#pragma omp section
10486#pragma omp target teams distribute simd // OK
10487    for (int i = 0; i < 10; ++i)
10488      ;
10489  }
10490
10491// SINGLE DIRECTIVE
10492#pragma omp single
10493  {
10494#pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
10495    for (int i = 0; i < 10; ++i)
10496      ;
10497  }
10498#pragma omp single
10499  {
10500#pragma omp simd
10501    for (int i = 0; i < 10; ++i)
10502      ;
10503  }
10504#pragma omp single
10505  {
10506#pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
10507    for (int i = 0; i < 10; ++i)
10508      ;
10509  }
10510#pragma omp single
10511  {
10512#pragma omp parallel
10513    for (int i = 0; i < 10; ++i)
10514      ;
10515  }
10516#pragma omp single
10517  {
10518#pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
10519    {
10520      bar();
10521    }
10522#pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
10523    bar();
10524#pragma omp critical
10525    bar();
10526  }
10527#pragma omp single
10528  {
10529#pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
10530    {
10531      bar();
10532    }
10533  }
10534#pragma omp single
10535  {
10536#pragma omp parallel
10537    {
10538#pragma omp single // OK
10539      {
10540        bar();
10541      }
10542#pragma omp for // OK
10543      for (int i = 0; i < 10; ++i)
10544        ;
10545#pragma omp for simd // OK
10546      for (int i = 0; i < 10; ++i)
10547        ;
10548#pragma omp sections // OK
10549      {
10550        bar();
10551      }
10552    }
10553  }
10554#pragma omp single
10555  {
10556#pragma omp parallel for
10557    for (int i = 0; i < 10; ++i)
10558      ;
10559  }
10560#pragma omp single
10561  {
10562#pragma omp parallel for simd
10563    for (int i = 0; i < 10; ++i)
10564      ;
10565  }
10566#pragma omp single
10567  {
10568#pragma omp parallel sections
10569    {
10570      bar();
10571    }
10572  }
10573#pragma omp single
10574  {
10575#pragma omp task
10576    {
10577      bar();
10578    }
10579  }
10580#pragma omp single
10581  {
10582#pragma omp taskyield
10583    bar();
10584  }
10585#pragma omp single
10586  {
10587#pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
10588    bar();
10589  }
10590#pragma omp single
10591  {
10592#pragma omp taskwait
10593    bar();
10594  }
10595#pragma omp single
10596  {
10597#pragma omp flush
10598    bar();
10599  }
10600#pragma omp single
10601  {
10602#pragma omp ordered // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
10603    bar();
10604  }
10605#pragma omp single
10606  {
10607#pragma omp atomic
10608    ++a;
10609  }
10610#pragma omp single
10611  {
10612#pragma omp target
10613    ++a;
10614  }
10615#pragma omp single
10616  {
10617#pragma omp target parallel
10618    ++a;
10619  }
10620#pragma omp single
10621  {
10622#pragma omp target parallel for
10623    for (int i = 0; i < 10; ++i)
10624      ;
10625  }
10626#pragma omp single
10627  {
10628#pragma omp target enter data map(to: a)
10629    ++a;
10630  }
10631#pragma omp single
10632  {
10633#pragma omp target exit data map(from: a)
10634    ++a;
10635  }
10636#pragma omp single
10637  {
10638#pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
10639    ++a;
10640  }
10641#pragma omp single
10642  {
10643#pragma omp taskloop
10644  for (int i = 0; i < 10; ++i)
10645    ++a;
10646  }
10647#pragma omp single
10648  {
10649#pragma omp distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
10650    for (int i = 0; i < 10; ++i)
10651      ;
10652  }
10653#pragma omp single
10654  {
10655#pragma omp target update to(a)
10656    a++;
10657  }
10658#pragma omp single
10659  {
10660#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
10661    for (int i = 0; i < 10; ++i)
10662      ;
10663  }
10664#pragma omp single
10665  {
10666#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
10667    for (int i = 0; i < 10; ++i)
10668      ;
10669  }
10670#pragma omp single
10671  {
10672#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
10673    for (int i = 0; i < 10; ++i)
10674      ;
10675  }
10676#pragma omp single
10677  {
10678#pragma omp target simd // OK
10679    for (int i = 0; i < 10; ++i)
10680      ;
10681  }
10682#pragma omp single
10683  {
10684#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10685    for (int i = 0; i < 10; ++i)
10686      ;
10687  }
10688#pragma omp single
10689  {
10690#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10691    for (int i = 0; i < 10; ++i)
10692      ;
10693  }
10694#pragma omp single
10695  {
10696#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10697    for (int i = 0; i < 10; ++i)
10698      ;
10699  }
10700#pragma omp single
10701  {
10702#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10703    for (int i = 0; i < 10; ++i)
10704      ;
10705  }
10706#pragma omp single
10707  {
10708#pragma omp target teams // oK
10709    a++;
10710  }
10711#pragma omp single
10712  {
10713#pragma omp target teams distribute // OK
10714    for (int i = 0; i < 10; ++i)
10715      ;
10716  }
10717#pragma omp single
10718  {
10719#pragma omp target teams distribute parallel for // OK
10720    for (int i = 0; i < 10; ++i)
10721      ;
10722  }
10723#pragma omp single
10724  {
10725#pragma omp target teams distribute parallel for simd // OK
10726    for (int i = 0; i < 10; ++i)
10727      ;
10728  }
10729#pragma omp single
10730  {
10731#pragma omp target teams distribute simd // OK
10732    for (int i = 0; i < 10; ++i)
10733      ;
10734  }
10735
10736// MASTER DIRECTIVE
10737#pragma omp master
10738  {
10739#pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
10740    for (int i = 0; i < 10; ++i)
10741      ;
10742  }
10743#pragma omp master
10744  {
10745#pragma omp simd
10746    for (int i = 0; i < 10; ++i)
10747      ;
10748  }
10749#pragma omp master
10750  {
10751#pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
10752    for (int i = 0; i < 10; ++i)
10753      ;
10754  }
10755#pragma omp master
10756  {
10757#pragma omp parallel
10758    for (int i = 0; i < 10; ++i)
10759      ;
10760  }
10761#pragma omp master
10762  {
10763#pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
10764    {
10765      bar();
10766    }
10767  }
10768#pragma omp master
10769  {
10770#pragma omp master // OK, though second 'master' is redundant
10771    {
10772      bar();
10773    }
10774  }
10775#pragma omp master
10776  {
10777#pragma omp critical
10778    {
10779      bar();
10780    }
10781  }
10782#pragma omp master
10783  {
10784#pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
10785    {
10786      bar();
10787    }
10788  }
10789#pragma omp master
10790  {
10791#pragma omp parallel
10792    {
10793#pragma omp master // OK
10794      {
10795        bar();
10796      }
10797#pragma omp for // OK
10798      for (int i = 0; i < 10; ++i)
10799        ;
10800#pragma omp for simd // OK
10801      for (int i = 0; i < 10; ++i)
10802        ;
10803#pragma omp sections // OK
10804      {
10805        bar();
10806      }
10807    }
10808  }
10809#pragma omp master
10810  {
10811#pragma omp parallel for
10812    for (int i = 0; i < 10; ++i)
10813      ;
10814  }
10815#pragma omp master
10816  {
10817#pragma omp parallel for simd
10818    for (int i = 0; i < 10; ++i)
10819      ;
10820  }
10821#pragma omp master
10822  {
10823#pragma omp parallel sections
10824    {
10825      bar();
10826    }
10827  }
10828#pragma omp master
10829  {
10830#pragma omp task
10831    {
10832      bar();
10833    }
10834  }
10835#pragma omp master
10836  {
10837#pragma omp taskyield
10838    bar();
10839  }
10840#pragma omp master
10841  {
10842#pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
10843    bar();
10844  }
10845#pragma omp master
10846  {
10847#pragma omp taskwait
10848    bar();
10849  }
10850#pragma omp master
10851  {
10852#pragma omp flush
10853    bar();
10854  }
10855#pragma omp master
10856  {
10857#pragma omp ordered // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
10858    bar();
10859  }
10860#pragma omp master
10861  {
10862#pragma omp atomic
10863    ++a;
10864  }
10865#pragma omp master
10866  {
10867#pragma omp target
10868    ++a;
10869  }
10870#pragma omp master
10871  {
10872#pragma omp target parallel
10873    ++a;
10874  }
10875#pragma omp master
10876  {
10877#pragma omp target parallel for
10878    for (int i = 0; i < 10; ++i)
10879      ;
10880  }
10881#pragma omp master
10882  {
10883#pragma omp target enter data map(to: a)
10884    ++a;
10885  }
10886#pragma omp master
10887  {
10888#pragma omp target exit data map(from: a)
10889    ++a;
10890  }
10891#pragma omp master
10892  {
10893#pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
10894    ++a;
10895  }
10896#pragma omp master
10897  {
10898#pragma omp taskloop
10899  for (int i = 0; i < 10; ++i)
10900    ++a;
10901  }
10902#pragma omp master
10903  {
10904#pragma omp distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
10905    for (int i = 0; i < 10; ++i)
10906      ;
10907  }
10908#pragma omp master
10909  {
10910#pragma omp target update to(a)
10911    ++a;
10912  }
10913#pragma omp master
10914  {
10915#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
10916    for (int i = 0; i < 10; ++i)
10917      ;
10918  }
10919#pragma omp master
10920  {
10921#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
10922    for (int i = 0; i < 10; ++i)
10923      ;
10924  }
10925#pragma omp master
10926  {
10927#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
10928    for (int i = 0; i < 10; ++i)
10929      ;
10930  }
10931#pragma omp master
10932  {
10933#pragma omp target simd // OK
10934    for (int i = 0; i < 10; ++i)
10935      ;
10936  }
10937#pragma omp master
10938  {
10939#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
10940    for (int i = 0; i < 10; ++i)
10941      ;
10942  }
10943#pragma omp master
10944  {
10945#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
10946    for (int i = 0; i < 10; ++i)
10947      ;
10948  }
10949#pragma omp master
10950  {
10951#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
10952    for (int i = 0; i < 10; ++i)
10953      ;
10954  }
10955#pragma omp master
10956  {
10957#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
10958    for (int i = 0; i < 10; ++i)
10959      ;
10960  }
10961#pragma omp master
10962  {
10963#pragma omp target teams // OK
10964    a++;
10965  }
10966#pragma omp master
10967  {
10968#pragma omp target teams distribute // OK
10969    for (int i = 0; i < 10; ++i)
10970      ;
10971  }
10972#pragma omp master
10973  {
10974#pragma omp target teams distribute parallel for // OK
10975    for (int i = 0; i < 10; ++i)
10976      ;
10977  }
10978#pragma omp master
10979  {
10980#pragma omp target teams distribute parallel for simd // OK
10981    for (int i = 0; i < 10; ++i)
10982      ;
10983  }
10984#pragma omp master
10985  {
10986#pragma omp target teams distribute simd // OK
10987    for (int i = 0; i < 10; ++i)
10988      ;
10989  }
10990
10991// CRITICAL DIRECTIVE
10992#pragma omp critical
10993  {
10994#pragma omp for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
10995    for (int i = 0; i < 10; ++i)
10996      ;
10997  }
10998#pragma omp critical
10999  {
11000#pragma omp simd
11001    for (int i = 0; i < 10; ++i)
11002      ;
11003  }
11004#pragma omp critical
11005  {
11006#pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
11007    for (int i = 0; i < 10; ++i)
11008      ;
11009  }
11010#pragma omp critical
11011  {
11012#pragma omp parallel
11013    for (int i = 0; i < 10; ++i)
11014      ;
11015  }
11016#pragma omp critical
11017  {
11018#pragma omp single // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
11019    {
11020      bar();
11021    }
11022  }
11023#pragma omp critical
11024  {
11025#pragma omp master // OK, though second 'master' is redundant
11026    {
11027      bar();
11028    }
11029  }
11030#pragma omp critical
11031  {
11032#pragma omp critical
11033    {
11034      bar();
11035    }
11036  }
11037#pragma omp critical
11038  {
11039#pragma omp sections // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
11040    {
11041      bar();
11042    }
11043  }
11044#pragma omp critical
11045  {
11046#pragma omp parallel
11047    {
11048#pragma omp master // OK
11049      {
11050        bar();
11051      }
11052#pragma omp for // OK
11053      for (int i = 0; i < 10; ++i)
11054        ;
11055#pragma omp for simd // OK
11056      for (int i = 0; i < 10; ++i)
11057        ;
11058#pragma omp sections // OK
11059      {
11060        bar();
11061      }
11062    }
11063  }
11064#pragma omp critical
11065  {
11066#pragma omp parallel for
11067    for (int i = 0; i < 10; ++i)
11068      ;
11069  }
11070#pragma omp critical
11071  {
11072#pragma omp parallel for simd
11073    for (int i = 0; i < 10; ++i)
11074      ;
11075  }
11076#pragma omp critical
11077  {
11078#pragma omp parallel sections
11079    {
11080      bar();
11081    }
11082  }
11083#pragma omp critical
11084  {
11085#pragma omp task
11086    {
11087      bar();
11088    }
11089  }
11090#pragma omp critical
11091  {
11092#pragma omp taskyield
11093    bar();
11094  }
11095#pragma omp critical
11096  {
11097#pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
11098    bar();
11099  }
11100#pragma omp critical
11101  {
11102#pragma omp taskwait
11103    bar();
11104  }
11105#pragma omp critical(Belka)
11106  {
11107#pragma omp critical(Strelka)
11108    bar();
11109  }
11110#pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
11111  {
11112#pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
11113    {
11114#pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
11115      {
11116#pragma omp parallel
11117#pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
11118        {
11119          bar();
11120        }
11121      }
11122    }
11123  }
11124#pragma omp critical
11125  {
11126#pragma omp flush
11127    bar();
11128  }
11129#pragma omp critical
11130  {
11131#pragma omp ordered // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
11132    bar();
11133  }
11134#pragma omp critical
11135  {
11136#pragma omp atomic
11137    ++a;
11138  }
11139#pragma omp critical
11140  {
11141#pragma omp target
11142    ++a;
11143  }
11144#pragma omp critical
11145  {
11146#pragma omp target parallel
11147    ++a;
11148  }
11149#pragma omp critical
11150  {
11151#pragma omp target parallel for
11152    for (int i = 0; i < 10; ++i)
11153      ;
11154  }
11155#pragma omp critical
11156  {
11157#pragma omp target enter data map(to: a)
11158    ++a;
11159  }
11160#pragma omp critical
11161  {
11162#pragma omp target exit data map(from: a)
11163    ++a;
11164  }
11165#pragma omp critical
11166  {
11167#pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
11168    ++a;
11169  }
11170#pragma omp critical
11171  {
11172#pragma omp taskloop
11173  for (int i = 0; i < 10; ++i)
11174    ++a;
11175  }
11176#pragma omp critical
11177  {
11178#pragma omp distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
11179    for (int i = 0; i < 10; ++i)
11180      ;
11181  }
11182#pragma omp critical
11183  {
11184#pragma omp target update to(a)
11185    a++;
11186  }
11187#pragma omp critical
11188  {
11189#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
11190    for (int i = 0; i < 10; ++i)
11191      ;
11192  }
11193#pragma omp critical
11194  {
11195#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
11196    for (int i = 0; i < 10; ++i)
11197      ;
11198  }
11199#pragma omp critical
11200  {
11201#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
11202    for (int i = 0; i < 10; ++i)
11203      ;
11204  }
11205#pragma omp critical
11206  {
11207#pragma omp target simd // OK
11208    for (int i = 0; i < 10; ++i)
11209      ;
11210  }
11211#pragma omp critical
11212  {
11213#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
11214    for (int i = 0; i < 10; ++i)
11215      ;
11216  }
11217#pragma omp critical
11218  {
11219#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
11220    for (int i = 0; i < 10; ++i)
11221      ;
11222  }
11223#pragma omp critical
11224  {
11225#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11226    for (int i = 0; i < 10; ++i)
11227      ;
11228  }
11229#pragma omp critical
11230  {
11231#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11232    for (int i = 0; i < 10; ++i)
11233      ;
11234  }
11235#pragma omp critical
11236  {
11237#pragma omp target teams // OK
11238    a++;
11239  }
11240#pragma omp critical
11241  {
11242#pragma omp target teams distribute // OK
11243    for (int i = 0; i < 10; ++i)
11244      ;
11245  }
11246#pragma omp critical
11247  {
11248#pragma omp target teams distribute parallel for // OK
11249    for (int i = 0; i < 10; ++i)
11250      ;
11251  }
11252#pragma omp critical
11253  {
11254#pragma omp target teams distribute parallel for simd // OK
11255    for (int i = 0; i < 10; ++i)
11256      ;
11257  }
11258#pragma omp critical
11259  {
11260#pragma omp target teams distribute simd // OK
11261    for (int i = 0; i < 10; ++i)
11262      ;
11263  }
11264
11265// PARALLEL FOR DIRECTIVE
11266#pragma omp parallel for
11267  for (int i = 0; i < 10; ++i) {
11268#pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
11269    for (int i = 0; i < 10; ++i)
11270      ;
11271  }
11272#pragma omp parallel for
11273  for (int i = 0; i < 10; ++i) {
11274#pragma omp simd
11275    for (int i = 0; i < 10; ++i)
11276      ;
11277  }
11278#pragma omp parallel for
11279  for (int i = 0; i < 10; ++i) {
11280#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
11281    for (int i = 0; i < 10; ++i)
11282      ;
11283  }
11284
11285#pragma omp parallel for
11286  for (int i = 0; i < 10; ++i) {
11287#pragma omp parallel
11288    for (int i = 0; i < 10; ++i)
11289      ;
11290  }
11291#pragma omp parallel for
11292  for (int i = 0; i < 10; ++i) {
11293#pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
11294    {
11295      bar();
11296    }
11297  }
11298#pragma omp parallel for
11299  for (int i = 0; i < 10; ++i) {
11300#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
11301    {
11302      bar();
11303    }
11304  }
11305#pragma omp parallel for
11306  for (int i = 0; i < 10; ++i) {
11307#pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
11308    {
11309      bar();
11310    }
11311#pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11312    {
11313      bar();
11314    }
11315#pragma omp critical
11316    {
11317      bar();
11318    }
11319  }
11320#pragma omp parallel for
11321  for (int i = 0; i < 10; ++i) {
11322#pragma omp parallel
11323    {
11324#pragma omp single // OK
11325      {
11326        bar();
11327      }
11328#pragma omp master // OK
11329      {
11330        bar();
11331      }
11332#pragma omp critical // OK
11333      {
11334        bar();
11335      }
11336#pragma omp for // OK
11337      for (int i = 0; i < 10; ++i)
11338        ;
11339#pragma omp for simd // OK
11340      for (int i = 0; i < 10; ++i)
11341        ;
11342#pragma omp sections // OK
11343      {
11344        bar();
11345      }
11346    }
11347  }
11348#pragma omp parallel for
11349  for (int i = 0; i < 10; ++i) {
11350#pragma omp parallel for
11351    for (int i = 0; i < 10; ++i)
11352      ;
11353  }
11354#pragma omp parallel for
11355  for (int i = 0; i < 10; ++i) {
11356#pragma omp parallel for simd
11357    for (int i = 0; i < 10; ++i)
11358      ;
11359  }
11360#pragma omp parallel for
11361  for (int i = 0; i < 10; ++i) {
11362#pragma omp parallel sections
11363    {
11364      bar();
11365    }
11366  }
11367#pragma omp parallel for
11368  for (int i = 0; i < 10; ++i) {
11369#pragma omp task
11370    {
11371      bar();
11372    }
11373  }
11374#pragma omp parallel for
11375  for (int i = 0; i < 10; ++i) {
11376#pragma omp taskyield
11377    bar();
11378  }
11379#pragma omp parallel for
11380  for (int i = 0; i < 10; ++i) {
11381#pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
11382    bar();
11383  }
11384#pragma omp parallel for
11385  for (int i = 0; i < 10; ++i) {
11386#pragma omp taskwait
11387    bar();
11388  }
11389#pragma omp parallel for
11390  for (int i = 0; i < 10; ++i) {
11391#pragma omp flush
11392    bar();
11393  }
11394#pragma omp parallel for
11395  for (int i = 0; i < 10; ++i) {
11396#pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
11397    bar();
11398  }
11399#pragma omp parallel for ordered
11400  for (int i = 0; i < 10; ++i) {
11401#pragma omp ordered // OK
11402    bar();
11403  }
11404#pragma omp parallel for
11405  for (int i = 0; i < 10; ++i) {
11406#pragma omp atomic
11407    ++a;
11408  }
11409#pragma omp parallel for
11410  for (int i = 0; i < 10; ++i) {
11411#pragma omp target
11412    ++a;
11413  }
11414#pragma omp parallel for
11415  for (int i = 0; i < 10; ++i) {
11416#pragma omp target parallel
11417    ++a;
11418  }
11419#pragma omp parallel for
11420  for (int i = 0; i < 10; ++i) {
11421#pragma omp target parallel for
11422    for (int i = 0; i < 10; ++i)
11423      ;
11424  }
11425#pragma omp parallel for
11426  for (int i = 0; i < 10; ++i) {
11427#pragma omp target enter data map(to: a)
11428    ++a;
11429  }
11430#pragma omp parallel for
11431  for (int i = 0; i < 10; ++i) {
11432#pragma omp target exit data map(from: a)
11433    ++a;
11434  }
11435#pragma omp parallel for
11436  for (int i = 0; i < 10; ++i) {
11437#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
11438    ++a;
11439  }
11440#pragma omp parallel for
11441  for (int i = 0; i < 10; ++i) {
11442#pragma omp taskloop
11443  for (int i = 0; i < 10; ++i)
11444    ++a;
11445  }
11446#pragma omp parallel for
11447  for (int i = 0; i < 10; ++i) {
11448#pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
11449    for (int j = 0; j < 10; ++j)
11450      ;
11451  }
11452#pragma omp parallel for
11453  for (int i = 0; i < 10; ++i) {
11454#pragma omp target update to(a)
11455    a++;
11456  }
11457#pragma omp parallel for
11458  for (int i = 0; i < 10; ++i) {
11459#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
11460    for (int j = 0; j < 10; ++j)
11461      ;
11462  }
11463#pragma omp parallel for
11464  for (int i = 0; i < 10; ++i) {
11465#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
11466    for (int j = 0; j < 10; ++j)
11467      ;
11468  }
11469#pragma omp parallel for
11470  for (int i = 0; i < 10; ++i) {
11471#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
11472    for (int j = 0; j < 10; ++j)
11473      ;
11474  }
11475#pragma omp parallel for
11476  for (int i = 0; i < 10; ++i) {
11477#pragma omp target simd // OK
11478    for (int j = 0; j < 10; ++j)
11479      ;
11480  }
11481#pragma omp parallel for
11482  for (int i = 0; i < 10; ++i) {
11483#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
11484    for (int j = 0; j < 10; ++j)
11485      ;
11486  }
11487#pragma omp parallel for
11488  for (int i = 0; i < 10; ++i) {
11489#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
11490    for (int j = 0; j < 10; ++j)
11491      ;
11492  }
11493#pragma omp parallel for
11494  for (int i = 0; i < 10; ++i) {
11495#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
11496    for (int j = 0; j < 10; ++j)
11497      ;
11498  }
11499#pragma omp parallel for
11500  for (int i = 0; i < 10; ++i) {
11501#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
11502    for (int j = 0; j < 10; ++j)
11503      ;
11504  }
11505#pragma omp parallel for
11506  for (int i = 0; i < 10; ++i) {
11507#pragma omp target teams // OK
11508    a++;
11509  }
11510#pragma omp parallel for
11511  for (int i = 0; i < 10; ++i) {
11512#pragma omp target teams distribute // OK
11513    for (int j = 0; j < 10; ++j)
11514      ;
11515  }
11516#pragma omp parallel for
11517  for (int i = 0; i < 10; ++i) {
11518#pragma omp target teams distribute parallel for // OK
11519    for (int j = 0; j < 10; ++j)
11520      ;
11521  }
11522#pragma omp parallel for
11523  for (int i = 0; i < 10; ++i) {
11524#pragma omp target teams distribute parallel for simd // OK
11525    for (int j = 0; j < 10; ++j)
11526      ;
11527  }
11528#pragma omp parallel for
11529  for (int i = 0; i < 10; ++i) {
11530#pragma omp target teams distribute simd // OK
11531    for (int j = 0; j < 10; ++j)
11532      ;
11533  }
11534
11535// PARALLEL FOR SIMD DIRECTIVE
11536#pragma omp parallel for simd
11537  for (int i = 0; i < 10; ++i) {
11538#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11539    for (int i = 0; i < 10; ++i)
11540      ;
11541  }
11542#pragma omp parallel for simd
11543  for (int i = 0; i < 10; ++i) {
11544#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
11545    for (int i = 0; i < 10; ++i)
11546      ;
11547  }
11548#pragma omp parallel for simd
11549  for (int i = 0; i < 10; ++i) {
11550#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11551    for (int i = 0; i < 10; ++i)
11552      ;
11553  }
11554#pragma omp parallel for simd
11555  for (int i = 0; i < 10; ++i) {
11556#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11557    for (int i = 0; i < 10; ++i)
11558      ;
11559  }
11560#pragma omp parallel for simd
11561  for (int i = 0; i < 10; ++i) {
11562#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11563    {
11564      bar();
11565    }
11566  }
11567#pragma omp parallel for simd
11568  for (int i = 0; i < 10; ++i) {
11569#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11570    {
11571      bar();
11572    }
11573  }
11574#pragma omp parallel for simd
11575  for (int i = 0; i < 10; ++i) {
11576#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11577    {
11578      bar();
11579    }
11580  }
11581
11582#pragma omp parallel for simd
11583  for (int i = 0; i < 10; ++i) {
11584#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11585    {
11586      bar();
11587    }
11588  }
11589
11590#pragma omp parallel for simd
11591  for (int i = 0; i < 10; ++i) {
11592#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11593    {
11594      bar();
11595    }
11596  }
11597
11598#pragma omp parallel for simd
11599  for (int i = 0; i < 10; ++i) {
11600#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11601    {
11602#pragma omp single
11603      {
11604        bar();
11605      }
11606#pragma omp for
11607      for (int i = 0; i < 10; ++i)
11608        ;
11609#pragma omp for simd
11610      for (int i = 0; i < 10; ++i)
11611        ;
11612#pragma omp sections
11613      {
11614        bar();
11615      }
11616    }
11617  }
11618#pragma omp parallel for simd
11619  for (int i = 0; i < 10; ++i) {
11620#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11621    for (int i = 0; i < 10; ++i)
11622      ;
11623  }
11624#pragma omp parallel for simd
11625  for (int i = 0; i < 10; ++i) {
11626#pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
11627    for (int i = 0; i < 10; ++i)
11628      ;
11629  }
11630#pragma omp parallel for simd
11631  for (int i = 0; i < 10; ++i) {
11632#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11633    {
11634      bar();
11635    }
11636  }
11637#pragma omp parallel for simd
11638  for (int i = 0; i < 10; ++i) {
11639#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11640    {
11641      bar();
11642    }
11643  }
11644#pragma omp parallel for simd
11645  for (int i = 0; i < 10; ++i) {
11646#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11647    bar();
11648  }
11649#pragma omp parallel for simd
11650  for (int i = 0; i < 10; ++i) {
11651#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11652    bar();
11653  }
11654#pragma omp parallel for simd
11655  for (int i = 0; i < 10; ++i) {
11656#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11657    bar();
11658  }
11659#pragma omp parallel for simd
11660  for (int i = 0; i < 10; ++i) {
11661#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11662    bar();
11663  }
11664#pragma omp parallel for simd
11665  for (int i = 0; i < 10; ++i) {
11666#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11667    bar();
11668  }
11669#pragma omp parallel for simd
11670  for (int i = 0; i < 10; ++i) {
11671#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11672    bar();
11673  }
11674#pragma omp parallel for simd
11675  for (int i = 0; i < 10; ++i) {
11676#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11677    ++a;
11678  }
11679#pragma omp parallel for simd
11680  for (int i = 0; i < 10; ++i) {
11681#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11682    ++a;
11683  }
11684#pragma omp parallel for simd
11685  for (int i = 0; i < 10; ++i) {
11686#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11687    ++a;
11688  }
11689#pragma omp parallel for simd
11690  for (int i = 0; i < 10; ++i) {
11691#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11692    for (int i = 0; i < 10; ++i)
11693      ;
11694  }
11695#pragma omp parallel for simd
11696  for (int i = 0; i < 10; ++i) {
11697#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11698    ++a;
11699  }
11700#pragma omp parallel for simd
11701  for (int i = 0; i < 10; ++i) {
11702#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11703    ++a;
11704  }
11705#pragma omp parallel for simd
11706  for (int i = 0; i < 10; ++i) {
11707#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11708    ++a;
11709  }
11710#pragma omp parallel for simd
11711  for (int i = 0; i < 10; ++i) {
11712#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11713  for (int i = 0; i < 10; ++i)
11714    ++a;
11715  }
11716#pragma omp parallel for simd
11717  for (int i = 0; i < 10; ++i) {
11718#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11719    for (int j = 0; j < 10; ++j)
11720      ;
11721  }
11722#pragma omp parallel for simd
11723  for (int i = 0; i < 10; ++i) {
11724#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11725    a++;
11726  }
11727#pragma omp parallel for simd
11728  for (int i = 0; i < 10; ++i) {
11729#pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11730    for (int j = 0; j < 10; ++j)
11731      ;
11732  }
11733#pragma omp parallel for simd
11734  for (int i = 0; i < 10; ++i) {
11735#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11736    for (int j = 0; j < 10; ++j)
11737      ;
11738  }
11739#pragma omp parallel for simd
11740  for (int i = 0; i < 10; ++i) {
11741#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11742    for (int j = 0; j < 10; ++j)
11743      ;
11744  }
11745#pragma omp parallel for simd
11746  for (int i = 0; i < 10; ++i) {
11747#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11748    for (int j = 0; j < 10; ++j)
11749      ;
11750  }
11751#pragma omp parallel for simd
11752  for (int i = 0; i < 10; ++i) {
11753#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11754    for (int j = 0; j < 10; ++j)
11755      ;
11756  }
11757#pragma omp parallel for simd
11758  for (int i = 0; i < 10; ++i) {
11759#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11760    for (int j = 0; j < 10; ++j)
11761      ;
11762  }
11763#pragma omp parallel for simd
11764  for (int i = 0; i < 10; ++i) {
11765#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11766    for (int j = 0; j < 10; ++j)
11767      ;
11768  }
11769#pragma omp parallel for simd
11770  for (int i = 0; i < 10; ++i) {
11771#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11772    for (int j = 0; j < 10; ++j)
11773      ;
11774  }
11775#pragma omp parallel for simd
11776  for (int i = 0; i < 10; ++i) {
11777#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11778    a++;
11779  }
11780#pragma omp parallel for simd
11781  for (int i = 0; i < 10; ++i) {
11782#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11783    for (int j = 0; j < 10; ++j)
11784      ;
11785  }
11786#pragma omp parallel for simd
11787  for (int i = 0; i < 10; ++i) {
11788#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11789    for (int j = 0; j < 10; ++j)
11790      ;
11791  }
11792#pragma omp parallel for simd
11793  for (int i = 0; i < 10; ++i) {
11794#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11795    for (int j = 0; j < 10; ++j)
11796      ;
11797  }
11798#pragma omp parallel for simd
11799  for (int i = 0; i < 10; ++i) {
11800#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
11801    for (int j = 0; j < 10; ++j)
11802      ;
11803  }
11804
11805// PARALLEL SECTIONS DIRECTIVE
11806#pragma omp parallel sections
11807  {
11808#pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
11809    for (int i = 0; i < 10; ++i)
11810      ;
11811  }
11812#pragma omp parallel sections
11813  {
11814#pragma omp simd
11815    for (int i = 0; i < 10; ++i)
11816      ;
11817  }
11818#pragma omp parallel sections
11819  {
11820#pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
11821    for (int i = 0; i < 10; ++i)
11822      ;
11823  }
11824#pragma omp parallel sections
11825  {
11826#pragma omp parallel
11827    for (int i = 0; i < 10; ++i)
11828      ;
11829  }
11830#pragma omp parallel sections
11831  {
11832#pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
11833    {
11834      bar();
11835    }
11836  }
11837#pragma omp parallel sections
11838  {
11839#pragma omp section
11840    {
11841      bar();
11842    }
11843  }
11844#pragma omp parallel sections
11845  {
11846#pragma omp section
11847    {
11848#pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
11849      bar();
11850#pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
11851      bar();
11852#pragma omp critical
11853      bar();
11854    }
11855  }
11856#pragma omp parallel sections
11857  {
11858#pragma omp parallel
11859    {
11860#pragma omp single // OK
11861      {
11862        bar();
11863      }
11864#pragma omp master // OK
11865      {
11866        bar();
11867      }
11868#pragma omp critical // OK
11869      {
11870        bar();
11871      }
11872#pragma omp for // OK
11873      for (int i = 0; i < 10; ++i)
11874        ;
11875#pragma omp for simd // OK
11876      for (int i = 0; i < 10; ++i)
11877        ;
11878#pragma omp sections // OK
11879      {
11880        bar();
11881      }
11882    }
11883  }
11884#pragma omp parallel sections
11885  {
11886#pragma omp parallel for
11887    for (int i = 0; i < 10; ++i)
11888      ;
11889  }
11890#pragma omp parallel sections
11891  {
11892#pragma omp parallel for simd
11893    for (int i = 0; i < 10; ++i)
11894      ;
11895  }
11896#pragma omp parallel sections
11897  {
11898#pragma omp parallel sections
11899    {
11900      bar();
11901    }
11902  }
11903#pragma omp parallel sections
11904  {
11905#pragma omp task
11906    {
11907      bar();
11908    }
11909  }
11910#pragma omp parallel sections
11911  {
11912#pragma omp taskyield
11913  }
11914#pragma omp parallel sections
11915  {
11916#pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
11917  }
11918#pragma omp parallel sections
11919  {
11920#pragma omp taskwait
11921  }
11922#pragma omp parallel sections
11923  {
11924#pragma omp flush
11925  }
11926#pragma omp parallel sections
11927  {
11928#pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
11929    bar();
11930  }
11931#pragma omp parallel sections
11932  {
11933#pragma omp atomic
11934    ++a;
11935  }
11936#pragma omp parallel sections
11937  {
11938#pragma omp target
11939    ++a;
11940  }
11941#pragma omp parallel sections
11942  {
11943#pragma omp target parallel
11944    ++a;
11945  }
11946#pragma omp parallel sections
11947  {
11948#pragma omp target parallel for
11949    for (int i = 0; i < 10; ++i)
11950      ;
11951  }
11952#pragma omp parallel sections
11953  {
11954#pragma omp target enter data map(to: a)
11955  }
11956#pragma omp parallel sections
11957  {
11958#pragma omp target exit data map(from: a)
11959  }
11960#pragma omp parallel sections
11961  {
11962#pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
11963    ++a;
11964  }
11965#pragma omp parallel sections
11966  {
11967#pragma omp taskloop
11968  for (int i = 0; i < 10; ++i)
11969    ++a;
11970  }
11971#pragma omp parallel sections
11972  {
11973#pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
11974    for (int i = 0; i < 10; ++i)
11975      ;
11976  }
11977#pragma omp parallel sections
11978  {
11979#pragma omp target update to(a)
11980  }
11981#pragma omp parallel sections
11982  {
11983#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
11984    for (int i = 0; i < 10; ++i)
11985      ;
11986  }
11987#pragma omp parallel sections
11988  {
11989#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
11990    for (int i = 0; i < 10; ++i)
11991      ;
11992  }
11993#pragma omp parallel sections
11994  {
11995#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
11996    for (int i = 0; i < 10; ++i)
11997      ;
11998  }
11999#pragma omp parallel sections
12000  {
12001#pragma omp target simd // OK
12002    for (int i = 0; i < 10; ++i)
12003      ;
12004  }
12005#pragma omp parallel sections
12006  {
12007#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
12008    for (int i = 0; i < 10; ++i)
12009      ;
12010  }
12011#pragma omp parallel sections
12012  {
12013#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
12014    for (int i = 0; i < 10; ++i)
12015      ;
12016  }
12017#pragma omp parallel sections
12018  {
12019#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12020    for (int i = 0; i < 10; ++i)
12021      ;
12022  }
12023#pragma omp parallel sections
12024  {
12025#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12026    for (int i = 0; i < 10; ++i)
12027      ;
12028  }
12029#pragma omp parallel sections
12030  {
12031#pragma omp target teams // OK
12032    a++;
12033  }
12034#pragma omp parallel sections
12035  {
12036#pragma omp target teams distribute // OK
12037    for (int i = 0; i < 10; ++i)
12038      ;
12039  }
12040#pragma omp parallel sections
12041  {
12042#pragma omp target teams distribute parallel for // OK
12043    for (int i = 0; i < 10; ++i)
12044      ;
12045  }
12046#pragma omp parallel sections
12047  {
12048#pragma omp target teams distribute parallel for simd // OK
12049    for (int i = 0; i < 10; ++i)
12050      ;
12051  }
12052#pragma omp parallel sections
12053  {
12054#pragma omp target teams distribute simd // OK
12055    for (int i = 0; i < 10; ++i)
12056      ;
12057  }
12058
12059// TASK DIRECTIVE
12060#pragma omp task
12061#pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
12062  for (int i = 0; i < 10; ++i)
12063    ;
12064#pragma omp task
12065#pragma omp simd
12066  for (int i = 0; i < 10; ++i)
12067    ;
12068#pragma omp task
12069#pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
12070  for (int i = 0; i < 10; ++i)
12071    ;
12072#pragma omp task
12073#pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
12074  {
12075    bar();
12076  }
12077#pragma omp task
12078#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
12079  {
12080    bar();
12081  }
12082#pragma omp task
12083#pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
12084  bar();
12085#pragma omp task
12086#pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
12087  bar();
12088#pragma omp task
12089#pragma omp critical
12090  bar();
12091#pragma omp task
12092#pragma omp parallel for
12093  for (int i = 0; i < 10; ++i)
12094    ;
12095#pragma omp task
12096#pragma omp parallel for simd
12097  for (int i = 0; i < 10; ++i)
12098    ;
12099#pragma omp task
12100#pragma omp parallel sections
12101  {
12102    bar();
12103  }
12104#pragma omp task
12105#pragma omp task
12106  {
12107    bar();
12108  }
12109#pragma omp task
12110  {
12111#pragma omp taskyield
12112    bar();
12113  }
12114#pragma omp task
12115  {
12116#pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
12117    bar();
12118  }
12119#pragma omp task
12120  {
12121#pragma omp taskwait
12122    bar();
12123  }
12124#pragma omp task
12125  {
12126#pragma omp flush
12127    bar();
12128  }
12129#pragma omp task
12130  {
12131#pragma omp ordered // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
12132    bar();
12133  }
12134#pragma omp task
12135  {
12136#pragma omp atomic
12137    ++a;
12138  }
12139#pragma omp task
12140  {
12141#pragma omp target
12142    ++a;
12143  }
12144#pragma omp task
12145  {
12146#pragma omp target parallel
12147    ++a;
12148  }
12149#pragma omp task
12150#pragma omp target parallel for
12151  for (int i = 0; i < 10; ++i)
12152    ;
12153#pragma omp task
12154  {
12155#pragma omp target enter data map(to: a)
12156    ++a;
12157  }
12158#pragma omp task
12159  {
12160#pragma omp target exit data map(from: a)
12161    ++a;
12162  }
12163#pragma omp task
12164  {
12165#pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
12166    ++a;
12167  }
12168#pragma omp task
12169  {
12170#pragma omp taskloop
12171  for (int i = 0; i < 10; ++i)
12172    ++a;
12173  }
12174#pragma omp task
12175  {
12176#pragma omp distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
12177    for (int i = 0; i < 10; ++i)
12178      ;
12179  }
12180#pragma omp task
12181  {
12182#pragma omp target update to(a)
12183    a++;
12184  }
12185#pragma omp task
12186  {
12187#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
12188    for (int i = 0; i < 10; ++i)
12189      ;
12190  }
12191#pragma omp task
12192  {
12193#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
12194    for (int i = 0; i < 10; ++i)
12195      ;
12196  }
12197#pragma omp task
12198  {
12199#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
12200    for (int i = 0; i < 10; ++i)
12201      ;
12202  }
12203#pragma omp task
12204  {
12205#pragma omp target simd // OK
12206    for (int i = 0; i < 10; ++i)
12207      ;
12208  }
12209#pragma omp task
12210  {
12211#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
12212    for (int i = 0; i < 10; ++i)
12213      ;
12214  }
12215#pragma omp task
12216  {
12217#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
12218    for (int i = 0; i < 10; ++i)
12219      ;
12220  }
12221#pragma omp task
12222  {
12223#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12224    for (int i = 0; i < 10; ++i)
12225      ;
12226  }
12227#pragma omp task
12228  {
12229#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12230    for (int i = 0; i < 10; ++i)
12231      ;
12232  }
12233#pragma omp task
12234  {
12235#pragma omp target teams // OK
12236    a++;
12237  }
12238#pragma omp task
12239  {
12240#pragma omp target teams distribute // OK
12241    for (int i = 0; i < 10; ++i)
12242      ;
12243  }
12244#pragma omp task
12245  {
12246#pragma omp target teams distribute parallel for // OK
12247    for (int i = 0; i < 10; ++i)
12248      ;
12249  }
12250#pragma omp task
12251  {
12252#pragma omp target teams distribute parallel for simd // OK
12253    for (int i = 0; i < 10; ++i)
12254      ;
12255  }
12256#pragma omp task
12257  {
12258#pragma omp target teams distribute simd // OK
12259    for (int i = 0; i < 10; ++i)
12260      ;
12261  }
12262
12263// ATOMIC DIRECTIVE
12264#pragma omp atomic
12265  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12266  // expected-note@+1 {{expected an expression statement}}
12267  {
12268#pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12269    for (int i = 0; i < 10; ++i)
12270      ;
12271  }
12272#pragma omp atomic
12273  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12274  // expected-note@+1 {{expected an expression statement}}
12275  {
12276#pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12277    for (int i = 0; i < 10; ++i)
12278      ;
12279  }
12280#pragma omp atomic
12281  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12282  // expected-note@+1 {{expected an expression statement}}
12283  {
12284#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12285    for (int i = 0; i < 10; ++i)
12286      ;
12287  }
12288#pragma omp atomic
12289  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12290  // expected-note@+1 {{expected an expression statement}}
12291  {
12292#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12293    for (int i = 0; i < 10; ++i)
12294      ;
12295  }
12296#pragma omp atomic
12297  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12298  // expected-note@+1 {{expected an expression statement}}
12299  {
12300#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12301    {
12302      bar();
12303    }
12304  }
12305#pragma omp atomic
12306  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12307  // expected-note@+1 {{expected an expression statement}}
12308  {
12309#pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12310    {
12311      bar();
12312    }
12313  }
12314#pragma omp atomic
12315  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12316  // expected-note@+1 {{expected an expression statement}}
12317  {
12318#pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12319    {
12320      bar();
12321    }
12322  }
12323#pragma omp atomic
12324  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12325  // expected-note@+1 {{expected an expression statement}}
12326  {
12327#pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12328    {
12329      bar();
12330    }
12331  }
12332#pragma omp atomic
12333  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12334  // expected-note@+1 {{expected an expression statement}}
12335  {
12336#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12337    {
12338      bar();
12339    }
12340  }
12341#pragma omp atomic
12342  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12343  // expected-note@+1 {{expected an expression statement}}
12344  {
12345#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12346    for (int i = 0; i < 10; ++i)
12347      ;
12348  }
12349#pragma omp atomic
12350  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12351  // expected-note@+1 {{expected an expression statement}}
12352  {
12353#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12354    for (int i = 0; i < 10; ++i)
12355      ;
12356  }
12357#pragma omp atomic
12358  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12359  // expected-note@+1 {{expected an expression statement}}
12360  {
12361#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12362    {
12363      bar();
12364    }
12365  }
12366#pragma omp atomic
12367  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12368  // expected-note@+1 {{expected an expression statement}}
12369  {
12370#pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12371    {
12372      bar();
12373    }
12374  }
12375#pragma omp atomic
12376  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12377  // expected-note@+1 {{expected an expression statement}}
12378  {
12379#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12380    bar();
12381  }
12382#pragma omp atomic
12383  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12384  // expected-note@+1 {{expected an expression statement}}
12385  {
12386#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12387    bar();
12388  }
12389#pragma omp atomic
12390  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12391  // expected-note@+1 {{expected an expression statement}}
12392  {
12393#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12394    bar();
12395  }
12396#pragma omp atomic
12397  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12398  // expected-note@+1 {{expected an expression statement}}
12399  {
12400#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12401    bar();
12402  }
12403#pragma omp atomic
12404  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12405  // expected-note@+1 {{expected an expression statement}}
12406  {
12407#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12408    bar();
12409  }
12410#pragma omp atomic
12411  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12412  // expected-note@+1 {{expected an expression statement}}
12413  {
12414#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12415    ++a;
12416  }
12417#pragma omp atomic
12418  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12419  // expected-note@+1 {{expected an expression statement}}
12420  {
12421#pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12422    ++a;
12423  }
12424#pragma omp atomic
12425  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12426  // expected-note@+1 {{expected an expression statement}}
12427  {
12428#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12429    ++a;
12430  }
12431#pragma omp atomic
12432  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12433  // expected-note@+1 {{expected an expression statement}}
12434  {
12435#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12436    for (int i = 0; i < 10; ++i)
12437      ;
12438  }
12439#pragma omp atomic
12440  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12441  // expected-note@+1 {{expected an expression statement}}
12442  {
12443#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12444    ++a;
12445  }
12446#pragma omp atomic
12447  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12448  // expected-note@+1 {{expected an expression statement}}
12449  {
12450#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12451    ++a;
12452  }
12453#pragma omp atomic
12454  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12455  // expected-note@+1 {{expected an expression statement}}
12456  {
12457#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12458    ++a;
12459  }
12460#pragma omp atomic
12461  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12462  // expected-note@+1 {{expected an expression statement}}
12463  {
12464#pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12465  for (int i = 0; i < 10; ++i)
12466    ++a;
12467  }
12468#pragma omp atomic
12469  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12470  // expected-note@+1 {{expected an expression statement}}
12471  {
12472#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12473    for (int i = 0; i < 10; ++i)
12474      ;
12475  }
12476#pragma omp atomic
12477  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12478  // expected-note@+1 {{expected an expression statement}}
12479  {
12480#pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12481  }
12482#pragma omp atomic
12483  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12484  // expected-note@+1 {{expected an expression statement}}
12485  {
12486#pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12487    for (int i = 0; i < 10; ++i)
12488      ;
12489  }
12490#pragma omp atomic
12491  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12492  // expected-note@+1 {{expected an expression statement}}
12493  {
12494#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12495    for (int i = 0; i < 10; ++i)
12496      ;
12497  }
12498#pragma omp atomic
12499  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12500  // expected-note@+1 {{expected an expression statement}}
12501  {
12502#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12503    for (int i = 0; i < 10; ++i)
12504      ;
12505  }
12506#pragma omp atomic
12507  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12508  // expected-note@+1 {{expected an expression statement}}
12509  {
12510#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12511    for (int i = 0; i < 10; ++i)
12512      ;
12513  }
12514#pragma omp atomic
12515  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12516  // expected-note@+1 {{expected an expression statement}}
12517  {
12518#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12519    for (int i = 0; i < 10; ++i)
12520      ;
12521  }
12522#pragma omp atomic
12523  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12524  // expected-note@+1 {{expected an expression statement}}
12525  {
12526#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12527    for (int i = 0; i < 10; ++i)
12528      ;
12529  }
12530#pragma omp atomic
12531  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12532  // expected-note@+1 {{expected an expression statement}}
12533  {
12534#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12535    for (int i = 0; i < 10; ++i)
12536      ;
12537  }
12538#pragma omp atomic
12539  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12540  // expected-note@+1 {{expected an expression statement}}
12541  {
12542#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12543    for (int i = 0; i < 10; ++i)
12544      ;
12545  }
12546#pragma omp atomic
12547  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12548  // expected-note@+1 {{expected an expression statement}}
12549  {
12550#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12551    a++;
12552  }
12553#pragma omp atomic
12554  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12555  // expected-note@+1 {{expected an expression statement}}
12556  {
12557#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12558    for (int i = 0; i < 10; ++i)
12559      ;
12560  }
12561#pragma omp atomic
12562  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12563  // expected-note@+1 {{expected an expression statement}}
12564  {
12565#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12566    for (int i = 0; i < 10; ++i)
12567      ;
12568  }
12569#pragma omp atomic
12570  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12571  // expected-note@+1 {{expected an expression statement}}
12572  {
12573#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12574    for (int i = 0; i < 10; ++i)
12575      ;
12576  }
12577#pragma omp atomic
12578  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12579  // expected-note@+1 {{expected an expression statement}}
12580  {
12581#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12582    for (int i = 0; i < 10; ++i)
12583      ;
12584  }
12585
12586// TARGET DIRECTIVE
12587#pragma omp target
12588#pragma omp parallel
12589  bar();
12590#pragma omp target
12591#pragma omp for
12592  for (int i = 0; i < 10; ++i)
12593    ;
12594#pragma omp target
12595#pragma omp simd
12596  for (int i = 0; i < 10; ++i)
12597    ;
12598#pragma omp target
12599#pragma omp for simd
12600  for (int i = 0; i < 10; ++i)
12601    ;
12602#pragma omp target
12603#pragma omp sections
12604  {
12605    bar();
12606  }
12607#pragma omp target
12608#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
12609  {
12610    bar();
12611  }
12612#pragma omp target
12613#pragma omp single
12614  bar();
12615
12616#pragma omp target
12617#pragma omp master
12618  {
12619    bar();
12620  }
12621#pragma omp target
12622#pragma omp critical
12623  {
12624    bar();
12625  }
12626#pragma omp target
12627#pragma omp parallel for
12628  for (int i = 0; i < 10; ++i)
12629    ;
12630#pragma omp target
12631#pragma omp parallel for simd
12632  for (int i = 0; i < 10; ++i)
12633    ;
12634#pragma omp target
12635#pragma omp parallel sections
12636  {
12637    bar();
12638  }
12639#pragma omp target
12640#pragma omp task
12641  {
12642    bar();
12643  }
12644#pragma omp target
12645  {
12646#pragma omp taskyield
12647    bar();
12648  }
12649#pragma omp target
12650  {
12651#pragma omp barrier
12652    bar();
12653  }
12654#pragma omp target
12655  {
12656#pragma omp taskwait
12657    bar();
12658  }
12659#pragma omp target
12660  {
12661#pragma omp flush
12662    bar();
12663  }
12664#pragma omp target
12665  {
12666#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
12667    bar();
12668  }
12669#pragma omp target
12670  {
12671#pragma omp atomic
12672    ++a;
12673  }
12674#pragma omp target
12675  {
12676#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
12677    ++a;
12678  }
12679#pragma omp target
12680  {
12681#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
12682    ++a;
12683  }
12684#pragma omp target
12685#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
12686  for (int i = 0; i < 10; ++i)
12687    ;
12688#pragma omp target
12689  {
12690#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
12691  }
12692#pragma omp target
12693  {
12694#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
12695  }
12696#pragma omp target
12697  {
12698#pragma omp teams
12699    ++a;
12700  }
12701#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
12702  {
12703#pragma omp teams // expected-note {{directive outside teams construct here}}
12704    ++a;
12705#pragma omp teams // expected-note {{nested teams construct here}}
12706    ++a;
12707  }
12708#pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
12709  {
12710    ++a;          // expected-note {{statement outside teams construct here}}
12711#pragma omp teams // expected-note {{nested teams construct here}}
12712    ++a;
12713  }
12714#pragma omp target
12715  {
12716#pragma omp taskloop
12717  for (int i = 0; i < 10; ++i)
12718    ++a;
12719  }
12720#pragma omp target
12721  { 
12722#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
12723    for (int i = 0; i < 10; ++i)
12724      ;
12725  }
12726#pragma omp atomic
12727  // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
12728  // expected-note@+1 {{expected an expression statement}}
12729  {
12730#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
12731    a++;
12732  }
12733#pragma omp target
12734  { 
12735#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
12736    for (int i = 0; i < 10; ++i)
12737      ;
12738  }
12739#pragma omp target
12740  { 
12741#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
12742    for (int i = 0; i < 10; ++i)
12743      ;
12744  }
12745#pragma omp target
12746  { 
12747#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
12748    for (int i = 0; i < 10; ++i)
12749      ;
12750  }
12751#pragma omp target
12752  { 
12753#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
12754    for (int i = 0; i < 10; ++i)
12755      ;
12756  }
12757#pragma omp target
12758  { 
12759#pragma omp teams distribute // OK
12760    for (int i = 0; i < 10; ++i)
12761      ;
12762  }
12763#pragma omp target
12764  { 
12765#pragma omp teams distribute simd // OK
12766    for (int i = 0; i < 10; ++i)
12767      ;
12768  }
12769#pragma omp target
12770  { 
12771#pragma omp teams distribute parallel for simd // OK
12772    for (int i = 0; i < 10; ++i)
12773      ;
12774  }
12775#pragma omp target
12776  { 
12777#pragma omp teams distribute parallel for // OK
12778    for (int i = 0; i < 10; ++i)
12779      ;
12780  }
12781#pragma omp target
12782  { 
12783#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
12784    a++;
12785  }
12786#pragma omp target
12787  { 
12788#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
12789    for (int i = 0; i < 10; ++i)
12790      ;
12791  }
12792#pragma omp target
12793  { 
12794#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
12795    for (int i = 0; i < 10; ++i)
12796      ;
12797  }
12798#pragma omp target
12799  { 
12800#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
12801    for (int i = 0; i < 10; ++i)
12802      ;
12803  }
12804#pragma omp target
12805  { 
12806#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
12807    for (int i = 0; i < 10; ++i)
12808      ;
12809  }
12810
12811// TARGET PARALLEL DIRECTIVE
12812#pragma omp target parallel
12813#pragma omp parallel
12814  bar();
12815#pragma omp target parallel
12816#pragma omp for
12817  for (int i = 0; i < 10; ++i)
12818    ;
12819#pragma omp target parallel
12820#pragma omp simd
12821  for (int i = 0; i < 10; ++i)
12822    ;
12823#pragma omp target parallel
12824#pragma omp for simd
12825  for (int i = 0; i < 10; ++i)
12826    ;
12827#pragma omp target parallel
12828#pragma omp sections
12829  {
12830    bar();
12831  }
12832#pragma omp target parallel
12833#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
12834  {
12835    bar();
12836  }
12837#pragma omp target parallel
12838#pragma omp single
12839  bar();
12840
12841#pragma omp target parallel
12842#pragma omp master
12843  {
12844    bar();
12845  }
12846#pragma omp target parallel
12847#pragma omp critical
12848  {
12849    bar();
12850  }
12851#pragma omp target parallel
12852#pragma omp parallel for
12853  for (int i = 0; i < 10; ++i)
12854    ;
12855#pragma omp target parallel
12856#pragma omp parallel for simd
12857  for (int i = 0; i < 10; ++i)
12858    ;
12859#pragma omp target parallel
12860#pragma omp parallel sections
12861  {
12862    bar();
12863  }
12864#pragma omp target parallel
12865#pragma omp task
12866  {
12867    bar();
12868  }
12869#pragma omp target parallel
12870  {
12871#pragma omp taskyield
12872    bar();
12873  }
12874#pragma omp target parallel
12875  {
12876#pragma omp barrier
12877    bar();
12878  }
12879#pragma omp target parallel
12880  {
12881#pragma omp taskwait
12882    bar();
12883  }
12884#pragma omp target parallel
12885  {
12886#pragma omp flush
12887    bar();
12888  }
12889#pragma omp target parallel
12890  {
12891#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
12892    bar();
12893  }
12894#pragma omp target parallel
12895  {
12896#pragma omp atomic
12897    ++a;
12898  }
12899#pragma omp target parallel
12900  {
12901#pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
12902    ++a;
12903  }
12904#pragma omp target parallel
12905  {
12906#pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
12907    ++a;
12908  }
12909#pragma omp target parallel
12910#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
12911  for (int i = 0; i < 10; ++i)
12912    ;
12913#pragma omp target parallel
12914  {
12915#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
12916    ++a;
12917  }
12918#pragma omp target parallel
12919  {
12920    ++a;
12921#pragma omp teams  // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
12922    ++a;
12923  }
12924#pragma omp target parallel
12925  {
12926#pragma omp taskloop
12927  for (int i = 0; i < 10; ++i)
12928    ++a;
12929  }
12930#pragma omp target parallel
12931  { 
12932#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
12933    for (int i = 0; i < 10; ++i)
12934      ;
12935  }
12936#pragma omp target parallel
12937  {
12938#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12939  }
12940#pragma omp target parallel
12941  {
12942#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12943  }
12944#pragma omp target parallel
12945  {
12946#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
12947  }
12948#pragma omp target parallel
12949  { 
12950#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
12951    for (int i = 0; i < 10; ++i)
12952      ;
12953  }
12954#pragma omp target parallel
12955  { 
12956#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
12957    for (int i = 0; i < 10; ++i)
12958      ;
12959  }
12960#pragma omp target parallel
12961  { 
12962#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
12963    for (int i = 0; i < 10; ++i)
12964      ;
12965  }
12966#pragma omp target parallel
12967  { 
12968#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel' regio}}
12969    for (int i = 0; i < 10; ++i)
12970      ;
12971  }
12972#pragma omp target parallel
12973  { 
12974#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
12975    for (int i = 0; i < 10; ++i)
12976      ;
12977  }
12978#pragma omp target parallel
12979  { 
12980#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
12981    for (int i = 0; i < 10; ++i)
12982      ;
12983  }
12984#pragma omp target parallel
12985  { 
12986#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
12987    for (int i = 0; i < 10; ++i)
12988      ;
12989  }
12990#pragma omp target parallel
12991  { 
12992#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
12993    for (int i = 0; i < 10; ++i)
12994      ;
12995  }
12996#pragma omp target parallel
12997  { 
12998#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel' region}}
12999    a++;
13000  }
13001#pragma omp target parallel
13002  { 
13003#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel' region}}
13004    for (int i = 0; i < 10; ++i)
13005      ;
13006  }
13007#pragma omp target parallel
13008  { 
13009#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
13010    for (int i = 0; i < 10; ++i)
13011      ;
13012  }
13013#pragma omp target parallel
13014  { 
13015#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13016    for (int i = 0; i < 10; ++i)
13017      ;
13018  }
13019#pragma omp target parallel
13020  { 
13021#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel' region}}
13022    for (int i = 0; i < 10; ++i)
13023      ;
13024  }
13025
13026// TARGET PARALLEL FOR DIRECTIVE
13027#pragma omp target parallel for
13028  for (int i = 0; i < 10; ++i) {
13029#pragma omp for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
13030    for (int i = 0; i < 10; ++i)
13031      ;
13032  }
13033#pragma omp target parallel for
13034  for (int i = 0; i < 10; ++i) {
13035#pragma omp simd
13036    for (int i = 0; i < 10; ++i)
13037      ;
13038  }
13039#pragma omp target parallel for
13040  for (int i = 0; i < 10; ++i) {
13041#pragma omp for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
13042    for (int i = 0; i < 10; ++i)
13043      ;
13044  }
13045#pragma omp target parallel for
13046  for (int i = 0; i < 10; ++i) {
13047#pragma omp parallel
13048    for (int i = 0; i < 10; ++i)
13049      ;
13050  }
13051#pragma omp target parallel for
13052  for (int i = 0; i < 10; ++i) {
13053#pragma omp sections // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
13054    {
13055      bar();
13056    }
13057  }
13058#pragma omp target parallel for
13059  for (int i = 0; i < 10; ++i) {
13060#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
13061    {
13062      bar();
13063    }
13064  }
13065#pragma omp target parallel for
13066  for (int i = 0; i < 10; ++i) {
13067#pragma omp single // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
13068    {
13069      bar();
13070    }
13071  }
13072
13073#pragma omp target parallel for
13074  for (int i = 0; i < 10; ++i) {
13075#pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13076    {
13077      bar();
13078    }
13079  }
13080
13081#pragma omp target parallel for
13082  for (int i = 0; i < 10; ++i) {
13083#pragma omp critical
13084    {
13085      bar();
13086    }
13087  }
13088
13089#pragma omp target parallel for
13090  for (int i = 0; i < 10; ++i) {
13091#pragma omp parallel
13092    {
13093#pragma omp single // OK
13094      {
13095        bar();
13096      }
13097#pragma omp for // OK
13098      for (int i = 0; i < 10; ++i)
13099        ;
13100#pragma omp for simd // OK
13101      for (int i = 0; i < 10; ++i)
13102        ;
13103#pragma omp sections // OK
13104      {
13105        bar();
13106      }
13107    }
13108  }
13109#pragma omp target parallel for
13110  for (int i = 0; i < 10; ++i) {
13111#pragma omp parallel for
13112    for (int i = 0; i < 10; ++i)
13113      ;
13114  }
13115#pragma omp target parallel for
13116  for (int i = 0; i < 10; ++i) {
13117#pragma omp parallel for simd
13118    for (int i = 0; i < 10; ++i)
13119      ;
13120  }
13121#pragma omp target parallel for
13122  for (int i = 0; i < 10; ++i) {
13123#pragma omp parallel sections
13124    {
13125      bar();
13126    }
13127  }
13128#pragma omp target parallel for
13129  for (int i = 0; i < 10; ++i) {
13130#pragma omp task
13131    {
13132      bar();
13133    }
13134  }
13135#pragma omp target parallel for
13136  for (int i = 0; i < 10; ++i) {
13137#pragma omp taskyield
13138    bar();
13139  }
13140#pragma omp target parallel for
13141  for (int i = 0; i < 10; ++i) {
13142#pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
13143    bar();
13144  }
13145#pragma omp target parallel for
13146  for (int i = 0; i < 10; ++i) {
13147#pragma omp taskwait
13148    bar();
13149  }
13150#pragma omp target parallel for
13151  for (int i = 0; i < 10; ++i) {
13152#pragma omp flush
13153    bar();
13154  }
13155#pragma omp target parallel for
13156  for (int i = 0; i < 10; ++i) {
13157#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
13158    bar();
13159  }
13160#pragma omp target parallel for ordered
13161  for (int i = 0; i < 10; ++i) {
13162#pragma omp ordered // OK
13163    bar();
13164  }
13165#pragma omp target parallel for
13166  for (int i = 0; i < 10; ++i) {
13167#pragma omp atomic
13168    ++a;
13169  }
13170#pragma omp target parallel for
13171  for (int i = 0; i < 10; ++i) {
13172#pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
13173    ++a;
13174  }
13175#pragma omp target parallel for
13176  for (int i = 0; i < 10; ++i) {
13177#pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
13178    ++a;
13179  }
13180#pragma omp target parallel for
13181  for (int i = 0; i < 10; ++i) {
13182#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13183    for (int i = 0; i < 10; ++i)
13184      ;
13185  }
13186#pragma omp target parallel for
13187  for (int i = 0; i < 10; ++i) {
13188#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13189    ++a;
13190  }
13191#pragma omp target parallel for
13192  for (int i = 0; i < 10; ++i) {
13193#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13194    ++a;
13195  }
13196#pragma omp target parallel for
13197  for (int i = 0; i < 10; ++i) {
13198#pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
13199    ++a;
13200  }
13201#pragma omp target parallel for
13202  for (int i = 0; i < 10; ++i) {
13203#pragma omp taskloop
13204  for (int i = 0; i < 10; ++i)
13205    ++a;
13206  }
13207#pragma omp target parallel for
13208  for (int i = 0; i < 10; ++i) {
13209#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
13210    for (int j = 0; j < 10; ++j)
13211      ;
13212  }
13213#pragma omp target parallel for
13214  for (int i = 0; i < 10; ++i) {
13215#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
13216    a++;
13217  }
13218#pragma omp target parallel for
13219  for (int i = 0; i < 10; ++i) {
13220#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
13221    for (int j = 0; j < 10; ++j)
13222      ;
13223  }
13224#pragma omp target parallel for
13225  for (int i = 0; i < 10; ++i) {
13226#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
13227    for (int j = 0; j < 10; ++j)
13228      ;
13229  }
13230#pragma omp target parallel for
13231  for (int i = 0; i < 10; ++i) {
13232#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
13233    for (int j = 0; j < 10; ++j)
13234      ;
13235  }
13236#pragma omp target parallel for
13237  for (int i = 0; i < 10; ++i) {
13238#pragma omp target simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13239    for (int j = 0; j < 10; ++j)
13240      ;
13241  }
13242#pragma omp target parallel for
13243  for (int i = 0; i < 10; ++i) {
13244#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
13245    for (int j = 0; j < 10; ++j)
13246      ;
13247  }
13248#pragma omp target parallel for
13249  for (int i = 0; i < 10; ++i) {
13250#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
13251    for (int j = 0; j < 10; ++j)
13252      ;
13253  }
13254#pragma omp target parallel for
13255  for (int i = 0; i < 10; ++i) {
13256#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13257    for (int j = 0; j < 10; ++j)
13258      ;
13259  }
13260#pragma omp target parallel for
13261  for (int i = 0; i < 10; ++i) {
13262#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13263    for (int j = 0; j < 10; ++j)
13264      ;
13265  }
13266#pragma omp target parallel for
13267  for (int i = 0; i < 10; ++i) {
13268#pragma omp target teams // expected-error {{region cannot be nested inside 'target parallel for' region}}
13269    a++;
13270  }
13271#pragma omp target parallel for
13272  for (int i = 0; i < 10; ++i) {
13273#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target parallel for' region}}
13274    for (int j = 0; j < 10; ++j)
13275      ;
13276  }
13277#pragma omp target parallel for
13278  for (int i = 0; i < 10; ++i) {
13279#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
13280    for (int j = 0; j < 10; ++j)
13281      ;
13282  }
13283#pragma omp target parallel for
13284  for (int i = 0; i < 10; ++i) {
13285#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13286    for (int j = 0; j < 10; ++j)
13287      ;
13288  }
13289#pragma omp target parallel for
13290  for (int i = 0; i < 10; ++i) {
13291#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target parallel for' region}}
13292    for (int j = 0; j < 10; ++j)
13293      ;
13294  }
13295
13296// TEAMS DIRECTIVE
13297#pragma omp target
13298#pragma omp teams
13299#pragma omp parallel
13300  bar();
13301#pragma omp target
13302#pragma omp teams
13303#pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
13304  for (int i = 0; i < 10; ++i)
13305    ;
13306#pragma omp target
13307#pragma omp teams
13308#pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
13309  for (int i = 0; i < 10; ++i)
13310    ;
13311#pragma omp target
13312#pragma omp teams
13313#pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
13314  for (int i = 0; i < 10; ++i)
13315    ;
13316#pragma omp target
13317#pragma omp teams
13318#pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
13319  {
13320    bar();
13321  }
13322#pragma omp target
13323#pragma omp teams
13324#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
13325  {
13326    bar();
13327  }
13328#pragma omp target
13329#pragma omp teams
13330#pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
13331  bar();
13332
13333#pragma omp target
13334#pragma omp teams
13335#pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
13336  {
13337    bar();
13338  }
13339#pragma omp target
13340#pragma omp teams
13341#pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
13342  {
13343    bar();
13344  }
13345#pragma omp target
13346#pragma omp teams
13347#pragma omp parallel for
13348  for (int i = 0; i < 10; ++i)
13349    ;
13350#pragma omp target
13351#pragma omp teams
13352#pragma omp parallel for simd
13353  for (int i = 0; i < 10; ++i)
13354    ;
13355#pragma omp target
13356#pragma omp teams
13357#pragma omp parallel sections
13358  {
13359    bar();
13360  }
13361#pragma omp target
13362#pragma omp teams
13363#pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
13364  {
13365    bar();
13366  }
13367#pragma omp target
13368#pragma omp teams
13369  {
13370#pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
13371    bar();
13372  }
13373#pragma omp target
13374#pragma omp teams
13375  {
13376#pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
13377    bar();
13378  }
13379#pragma omp target
13380#pragma omp teams
13381  {
13382#pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
13383    bar();
13384  }
13385#pragma omp target
13386#pragma omp teams
13387  {
13388#pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
13389    bar();
13390  }
13391#pragma omp target
13392#pragma omp teams
13393  {
13394#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
13395    bar();
13396  }
13397#pragma omp target
13398#pragma omp teams
13399  {
13400#pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
13401    ++a;
13402  }
13403#pragma omp target
13404#pragma omp teams
13405  {
13406#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
13407    ++a;
13408  }
13409#pragma omp target
13410#pragma omp teams
13411  {
13412#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
13413    ++a;
13414  }
13415#pragma omp target
13416#pragma omp teams
13417#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
13418  for (int i = 0; i < 10; ++i)
13419    ;
13420#pragma omp target
13421#pragma omp teams
13422  {
13423#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
13424  }
13425#pragma omp target
13426#pragma omp teams
13427  {
13428#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
13429  }
13430#pragma omp target
13431#pragma omp teams
13432  {
13433#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
13434    ++a;
13435  }
13436#pragma omp target
13437#pragma omp teams
13438  {
13439#pragma omp taskloop // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
13440  for (int i = 0; i < 10; ++i)
13441    ++a;
13442  }
13443#pragma omp target
13444#pragma omp teams
13445#pragma omp distribute
13446  for (int i = 0; i < 10; ++i)
13447    ;
13448#pragma omp target
13449#pragma omp teams
13450#pragma omp distribute
13451  for (int i = 0; i < 10; ++i)
13452    ;
13453#pragma omp distribute
13454  for (int j = 0; j < 10; ++j)
13455    ;
13456#pragma omp target
13457#pragma omp teams
13458  {
13459#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
13460    ++a;
13461  }
13462#pragma omp target
13463#pragma omp teams
13464#pragma omp distribute parallel for
13465  for (int i = 0; i < 10; ++i)
13466    ;
13467#pragma omp target
13468#pragma omp teams
13469  {
13470#pragma omp distribute parallel for
13471  for (int i = 0; i < 10; ++i)
13472    ;
13473#pragma omp distribute parallel for
13474  for (int j = 0; j < 10; ++j)
13475    ;  
13476  }
13477#pragma omp target
13478#pragma omp teams
13479  {
13480#pragma omp distribute parallel for simd
13481  for (int i = 0; i < 10; ++i)
13482    ;
13483#pragma omp distribute parallel for simd
13484  for (int j = 0; j < 10; ++j)
13485    ;  
13486  }
13487#pragma omp target
13488#pragma omp teams
13489  {
13490#pragma omp distribute simd
13491  for (int i = 0; i < 10; ++i)
13492    ;
13493#pragma omp distribute simd
13494  for (int j = 0; j < 10; ++j)
13495    ;  
13496  }
13497#pragma omp target
13498#pragma omp teams
13499  {
13500#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
13501  for (int i = 0; i < 10; ++i)
13502    ;
13503  }
13504#pragma omp target
13505#pragma omp teams
13506  {
13507#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
13508  for (int i = 0; i < 10; ++i)
13509    ;
13510  }
13511#pragma omp target
13512#pragma omp teams
13513  {
13514#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
13515  for (int i = 0; i < 10; ++i)
13516    ;
13517  }
13518#pragma omp target
13519#pragma omp teams
13520  {
13521#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13522  for (int i = 0; i < 10; ++i)
13523    ;
13524  }
13525#pragma omp target
13526#pragma omp teams
13527  {
13528#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13529  for (int i = 0; i < 10; ++i)
13530    ;
13531  }
13532#pragma omp target
13533#pragma omp teams
13534  {
13535#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
13536    a++;
13537  }
13538#pragma omp target
13539#pragma omp teams
13540  {
13541#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
13542  for (int i = 0; i < 10; ++i)
13543    ;
13544  }
13545#pragma omp target
13546#pragma omp teams
13547  {
13548#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
13549  for (int i = 0; i < 10; ++i)
13550    ;
13551  }
13552#pragma omp target
13553#pragma omp teams
13554  {
13555#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
13556  for (int i = 0; i < 10; ++i)
13557    ;
13558  }
13559#pragma omp target
13560#pragma omp teams
13561  {
13562#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
13563  for (int i = 0; i < 10; ++i)
13564    ;
13565  }
13566
13567// TASKLOOP DIRECTIVE
13568#pragma omp taskloop
13569  for (int i = 0; i < 10; ++i) {
13570#pragma omp for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
13571    for (int i = 0; i < 10; ++i)
13572      ;
13573  }
13574#pragma omp taskloop
13575  for (int i = 0; i < 10; ++i) {
13576#pragma omp simd
13577    for (int i = 0; i < 10; ++i)
13578      ;
13579  }
13580#pragma omp taskloop
13581  for (int i = 0; i < 10; ++i) {
13582#pragma omp for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
13583    for (int i = 0; i < 10; ++i)
13584      ;
13585  }
13586#pragma omp taskloop
13587  for (int i = 0; i < 10; ++i) {
13588#pragma omp parallel
13589    for (int i = 0; i < 10; ++i)
13590      ;
13591  }
13592#pragma omp taskloop
13593  for (int i = 0; i < 10; ++i) {
13594#pragma omp sections // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
13595    {
13596      bar();
13597    }
13598  }
13599#pragma omp taskloop
13600  for (int i = 0; i < 10; ++i) {
13601#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
13602    {
13603      bar();
13604    }
13605  }
13606#pragma omp taskloop
13607  for (int i = 0; i < 10; ++i) {
13608#pragma omp single // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
13609    {
13610      bar();
13611    }
13612  }
13613
13614#pragma omp taskloop
13615  for (int i = 0; i < 10; ++i) {
13616#pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
13617    {
13618      bar();
13619    }
13620  }
13621#pragma omp taskloop
13622  for (int i = 0; i < 10; ++i) {
13623#pragma omp critical
13624    {
13625      bar();
13626    }
13627  }
13628#pragma omp taskloop
13629  for (int i = 0; i < 10; ++i) {
13630#pragma omp parallel
13631    {
13632#pragma omp single // OK
13633      {
13634        bar();
13635      }
13636#pragma omp for // OK
13637      for (int i = 0; i < 10; ++i)
13638        ;
13639#pragma omp sections // OK
13640      {
13641        bar();
13642      }
13643    }
13644  }
13645#pragma omp taskloop
13646  for (int i = 0; i < 10; ++i) {
13647#pragma omp parallel for
13648    for (int i = 0; i < 10; ++i)
13649      ;
13650  }
13651#pragma omp taskloop
13652  for (int i = 0; i < 10; ++i) {
13653#pragma omp parallel for simd
13654    for (int i = 0; i < 10; ++i)
13655      ;
13656  }
13657#pragma omp taskloop
13658  for (int i = 0; i < 10; ++i) {
13659#pragma omp parallel sections
13660    {
13661      bar();
13662    }
13663  }
13664#pragma omp taskloop
13665  for (int i = 0; i < 10; ++i) {
13666#pragma omp task
13667    {
13668      bar();
13669    }
13670  }
13671#pragma omp taskloop
13672  for (int i = 0; i < 10; ++i) {
13673#pragma omp taskyield
13674    bar();
13675  }
13676#pragma omp taskloop
13677  for (int i = 0; i < 10; ++i) {
13678#pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
13679    bar();
13680  }
13681#pragma omp taskloop
13682  for (int i = 0; i < 10; ++i) {
13683#pragma omp taskwait
13684    bar();
13685  }
13686#pragma omp taskloop
13687  for (int i = 0; i < 10; ++i) {
13688#pragma omp flush
13689    bar();
13690  }
13691#pragma omp taskloop
13692  for (int i = 0; i < 10; ++i) {
13693#pragma omp ordered // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
13694    bar();
13695  }
13696#pragma omp taskloop
13697  for (int i = 0; i < 10; ++i) {
13698#pragma omp atomic
13699    ++a;
13700  }
13701#pragma omp taskloop
13702  for (int i = 0; i < 10; ++i) {
13703#pragma omp target
13704    ++a;
13705  }
13706#pragma omp taskloop
13707  for (int i = 0; i < 10; ++i) {
13708#pragma omp target parallel
13709    ++a;
13710  }
13711#pragma omp taskloop
13712  for (int i = 0; i < 10; ++i) {
13713#pragma omp target parallel for
13714    for (int i = 0; i < 10; ++i)
13715      ;
13716  }
13717#pragma omp taskloop
13718  for (int i = 0; i < 10; ++i) {
13719#pragma omp target enter data map(to: a)
13720    ++a;
13721  }
13722#pragma omp taskloop
13723  for (int i = 0; i < 10; ++i) {
13724#pragma omp target exit data map(from: a)
13725    ++a;
13726  }
13727#pragma omp taskloop
13728  for (int i = 0; i < 10; ++i) {
13729#pragma omp teams // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
13730    ++a;
13731  }
13732#pragma omp taskloop
13733  for (int i = 0; i < 10; ++i) {
13734#pragma omp taskloop
13735  for (int i = 0; i < 10; ++i)
13736    ++a;
13737  }
13738#pragma omp taskloop
13739  for (int i = 0; i < 10; ++i) {
13740#pragma omp target update to(a)
13741    ++a;
13742  }
13743#pragma omp taskloop
13744  for (int i = 0; i < 10; ++i) {
13745#pragma omp distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
13746    for (int i = 0; i < 10; ++i)
13747      ;
13748  }
13749#pragma omp taskloop
13750  for (int i = 0; i < 10; ++i) {
13751#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
13752    for (int i = 0; i < 10; ++i)
13753      ;
13754  }
13755#pragma omp taskloop
13756  for (int i = 0; i < 10; ++i) {
13757#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
13758    for (int i = 0; i < 10; ++i)
13759      ;
13760  }
13761#pragma omp taskloop
13762  for (int i = 0; i < 10; ++i) {
13763#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
13764    for (int i = 0; i < 10; ++i)
13765      ;
13766  }
13767#pragma omp taskloop
13768  for (int i = 0; i < 10; ++i) {
13769#pragma omp target simd // OK
13770    for (int i = 0; i < 10; ++i)
13771      ;
13772  }
13773#pragma omp taskloop
13774  for (int i = 0; i < 10; ++i) {
13775#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
13776    for (int i = 0; i < 10; ++i)
13777      ;
13778  }
13779#pragma omp taskloop
13780  for (int i = 0; i < 10; ++i) {
13781#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
13782    for (int i = 0; i < 10; ++i)
13783      ;
13784  }
13785#pragma omp taskloop
13786  for (int i = 0; i < 10; ++i) {
13787#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
13788    for (int i = 0; i < 10; ++i)
13789      ;
13790  }
13791#pragma omp taskloop
13792  for (int i = 0; i < 10; ++i) {
13793#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
13794    for (int i = 0; i < 10; ++i)
13795      ;
13796  }
13797#pragma omp taskloop
13798  for (int i = 0; i < 10; ++i) {
13799#pragma omp target teams // OK
13800    a++;
13801  }
13802#pragma omp taskloop
13803  for (int i = 0; i < 10; ++i) {
13804#pragma omp target teams distribute // OK
13805    for (int i = 0; i < 10; ++i)
13806      ;
13807  }
13808#pragma omp taskloop
13809  for (int i = 0; i < 10; ++i) {
13810#pragma omp target teams distribute parallel for // OK
13811    for (int i = 0; i < 10; ++i)
13812      ;
13813  }
13814#pragma omp taskloop
13815  for (int i = 0; i < 10; ++i) {
13816#pragma omp target teams distribute parallel for simd // OK
13817    for (int i = 0; i < 10; ++i)
13818      ;
13819  }
13820#pragma omp taskloop
13821  for (int i = 0; i < 10; ++i) {
13822#pragma omp target teams distribute simd // OK
13823    for (int i = 0; i < 10; ++i)
13824      ;
13825  }
13826
13827// DISTRIBUTE DIRECTIVE
13828#pragma omp target
13829#pragma omp teams
13830#pragma omp distribute
13831  for (int i = 0; i < 10; ++i) {
13832#pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
13833    for (int i = 0; i < 10; ++i)
13834      ;
13835  }
13836#pragma omp target
13837#pragma omp teams
13838#pragma omp distribute
13839  for (int i = 0; i < 10; ++i) {
13840#pragma omp for
13841    for (int i = 0; i < 10; ++i)
13842      ;
13843  }
13844#pragma omp target
13845#pragma omp teams
13846#pragma omp distribute
13847  for (int i = 0; i < 10; ++i) {
13848#pragma omp simd
13849    for (int i = 0; i < 10; ++i)
13850      ;
13851  }
13852#pragma omp target
13853#pragma omp teams
13854#pragma omp distribute
13855  for (int i = 0; i < 10; ++i) {
13856#pragma omp for simd
13857    for (int i = 0; i < 10; ++i)
13858      ;
13859  }
13860#pragma omp target
13861#pragma omp teams  
13862#pragma omp distribute
13863  for (int i = 0; i < 10; ++i) {
13864#pragma omp parallel
13865    for (int i = 0; i < 10; ++i)
13866      ;
13867  }
13868#pragma omp target
13869#pragma omp teams
13870#pragma omp distribute
13871  for (int i = 0; i < 10; ++i) {
13872#pragma omp sections
13873    {
13874      bar();
13875    }
13876  }
13877#pragma omp target
13878#pragma omp teams
13879#pragma omp distribute
13880  for (int i = 0; i < 10; ++i) {
13881#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
13882    {
13883      bar();
13884    }
13885  }
13886#pragma omp target
13887#pragma omp teams
13888#pragma omp distribute
13889  for (int i = 0; i < 10; ++i) {
13890#pragma omp single
13891    {
13892      bar();
13893    }
13894  }
13895#pragma omp target
13896#pragma omp teams
13897#pragma omp distribute
13898  for (int i = 0; i < 10; ++i) {
13899#pragma omp master
13900    {
13901      bar();
13902    }
13903  }
13904#pragma omp target
13905#pragma omp teams
13906#pragma omp distribute
13907  for (int i = 0; i < 10; ++i) {
13908#pragma omp critical
13909    {
13910      bar();
13911    }
13912  }
13913#pragma omp target
13914#pragma omp teams
13915#pragma omp distribute
13916  for (int i = 0; i < 10; ++i) {
13917#pragma omp parallel
13918    {
13919#pragma omp single
13920      {
13921 bar();
13922      }
13923    }
13924  }
13925#pragma omp target
13926#pragma omp teams
13927#pragma omp distribute
13928  for (int i = 0; i < 10; ++i) {
13929#pragma omp parallel for
13930    for (int i = 0; i < 10; ++i)
13931      ;
13932  }
13933#pragma omp target
13934#pragma omp teams
13935#pragma omp distribute
13936  for (int i = 0; i < 10; ++i) {
13937#pragma omp parallel for simd
13938    for (int i = 0; i < 10; ++i)
13939      ;
13940  }
13941#pragma omp target
13942#pragma omp teams
13943#pragma omp distribute
13944  for (int i = 0; i < 10; ++i) {
13945#pragma omp parallel sections
13946    {
13947      bar();
13948    }
13949  }
13950#pragma omp target
13951#pragma omp teams
13952#pragma omp distribute
13953  for (int i = 0; i < 10; ++i) {
13954#pragma omp task
13955    {
13956      bar();
13957    }
13958  }
13959#pragma omp target
13960#pragma omp teams
13961#pragma omp distribute
13962  for (int i = 0; i < 10; ++i) {
13963#pragma omp taskyield
13964    bar();
13965  }
13966#pragma omp target
13967#pragma omp teams
13968#pragma omp distribute
13969  for (int i = 0; i < 10; ++i) {
13970#pragma omp barrier
13971    bar();
13972  }
13973#pragma omp target
13974#pragma omp teams
13975#pragma omp distribute
13976  for (int i = 0; i < 10; ++i) {
13977#pragma omp taskwait
13978    bar();
13979  }
13980#pragma omp target
13981#pragma omp teams
13982#pragma omp distribute
13983  for (int i = 0; i < 10; ++i) {
13984#pragma omp flush
13985    bar();
13986  }
13987#pragma omp target
13988#pragma omp teams
13989#pragma omp distribute
13990  for (int i = 0; i < 10; ++i) {
13991#pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
13992    bar();
13993  }
13994#pragma omp target
13995#pragma omp teams
13996#pragma omp distribute
13997  for (int i = 0; i < 10; ++i) {
13998#pragma omp atomic
13999    ++a;
14000  }
14001#pragma omp target
14002#pragma omp teams
14003#pragma omp distribute
14004  for (int i = 0; i < 10; ++i) {
14005#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14006    ++a;
14007  }
14008#pragma omp target
14009#pragma omp teams
14010#pragma omp distribute
14011  for (int i = 0; i < 10; ++i) {
14012#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14013    ++a;
14014  }
14015#pragma omp target
14016#pragma omp teams
14017#pragma omp distribute
14018  for (int i = 0; i < 10; ++i) {
14019#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14020    for (int i = 0; i < 10; ++i)
14021      ;
14022  }
14023#pragma omp target
14024#pragma omp teams
14025#pragma omp distribute
14026  for (int i = 0; i < 10; ++i) {
14027#pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
14028    ++a;
14029  }
14030#pragma omp target
14031#pragma omp teams
14032#pragma omp distribute
14033  for (int i = 0; i < 10; ++i) {
14034#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14035    ++a;
14036  }
14037#pragma omp target
14038#pragma omp teams
14039#pragma omp distribute
14040  for (int i = 0; i < 10; ++i) {
14041#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14042    ++a;
14043  }
14044#pragma omp target
14045#pragma omp teams
14046#pragma omp distribute
14047  for (int i = 0; i < 10; ++i) {
14048#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14049    ++a;
14050  }
14051#pragma omp target
14052#pragma omp teams
14053#pragma omp distribute
14054  for (int i = 0; i < 10; ++i) {
14055#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
14056  for (int i = 0; i < 10; ++i)
14057    ++a;
14058  }
14059#pragma omp target
14060#pragma omp teams
14061#pragma omp distribute
14062  for (int i = 0; i < 10; ++i) {
14063#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
14064  for (int i = 0; i < 10; ++i)
14065    ++a;
14066  }
14067#pragma omp target
14068#pragma omp teams
14069#pragma omp distribute
14070  for (int i = 0; i < 10; ++i) {
14071#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
14072  for (int i = 0; i < 10; ++i)
14073    ++a;
14074  }
14075#pragma omp target
14076#pragma omp teams
14077#pragma omp distribute
14078  for (int i = 0; i < 10; ++i) {
14079#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14080  for (int i = 0; i < 10; ++i)
14081    ++a;
14082  }
14083#pragma omp target
14084#pragma omp teams
14085#pragma omp distribute
14086  for (int i = 0; i < 10; ++i) {
14087#pragma omp target parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14088  for (int i = 0; i < 10; ++i)
14089    ++a;
14090  }
14091#pragma omp target
14092#pragma omp teams
14093#pragma omp distribute
14094  for (int i = 0; i < 10; ++i) {
14095#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14096  for (int i = 0; i < 10; ++i)
14097    ++a;
14098  }
14099#pragma omp target
14100#pragma omp teams
14101#pragma omp distribute
14102  for (int i = 0; i < 10; ++i) {
14103#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14104  for (int i = 0; i < 10; ++i)
14105    ++a;
14106  }
14107#pragma omp target
14108#pragma omp teams
14109#pragma omp distribute
14110  for (int i = 0; i < 10; ++i) {
14111#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14112  for (int i = 0; i < 10; ++i)
14113    ++a;
14114  }
14115#pragma omp target
14116#pragma omp teams
14117#pragma omp distribute
14118  for (int i = 0; i < 10; ++i) {
14119#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14120  for (int i = 0; i < 10; ++i)
14121    ++a;
14122  }
14123#pragma omp target
14124#pragma omp teams
14125#pragma omp distribute
14126  for (int i = 0; i < 10; ++i) {
14127#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14128  for (int i = 0; i < 10; ++i)
14129    ++a;
14130  }
14131#pragma omp target
14132#pragma omp teams
14133#pragma omp distribute
14134  for (int i = 0; i < 10; ++i) {
14135#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14136  for (int i = 0; i < 10; ++i)
14137    ++a;
14138  }
14139
14140// DISTRIBUTE PARALLEL FOR DIRECTIVE
14141#pragma omp target
14142#pragma omp teams
14143#pragma omp distribute parallel for
14144  for (int i = 0; i < 10; ++i) {
14145#pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
14146    for (int i = 0; i < 10; ++i)
14147      ;
14148  }
14149
14150#pragma omp target
14151#pragma omp teams
14152#pragma omp distribute parallel for
14153  for (int i = 0; i < 10; ++i) {
14154#pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
14155    for (int i = 0; i < 10; ++i)
14156      ;
14157  }
14158#pragma omp target
14159#pragma omp teams
14160#pragma omp distribute parallel for
14161  for (int i = 0; i < 10; ++i) {
14162#pragma omp for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
14163    for (int i = 0; i < 10; ++i)
14164      ;
14165  }
14166#pragma omp target
14167#pragma omp teams
14168#pragma omp distribute parallel for
14169  for (int i = 0; i < 10; ++i) {
14170#pragma omp simd
14171    for (int i = 0; i < 10; ++i)
14172      ;
14173  }
14174#pragma omp target
14175#pragma omp teams
14176#pragma omp distribute parallel for
14177  for (int i = 0; i < 10; ++i) {
14178#pragma omp for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
14179    for (int i = 0; i < 10; ++i)
14180      ;
14181  }
14182#pragma omp target
14183#pragma omp teams  
14184#pragma omp distribute parallel for
14185  for (int i = 0; i < 10; ++i) {
14186#pragma omp parallel
14187    for (int i = 0; i < 10; ++i)
14188      ;
14189  }
14190#pragma omp target
14191#pragma omp teams
14192#pragma omp distribute parallel for
14193  for (int i = 0; i < 10; ++i) {
14194#pragma omp sections // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
14195    {
14196      bar();
14197    }
14198  }
14199#pragma omp target
14200#pragma omp teams
14201#pragma omp distribute parallel for
14202  for (int i = 0; i < 10; ++i) {
14203#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
14204    {
14205      bar();
14206    }
14207  }
14208#pragma omp target
14209#pragma omp teams
14210#pragma omp distribute parallel for
14211  for (int i = 0; i < 10; ++i) {
14212#pragma omp single // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
14213    {
14214      bar();
14215    }
14216  }
14217#pragma omp target
14218#pragma omp teams
14219#pragma omp distribute parallel for
14220  for (int i = 0; i < 10; ++i) {
14221#pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14222    {
14223      bar();
14224    }
14225  }
14226#pragma omp target
14227#pragma omp teams
14228#pragma omp distribute parallel for
14229  for (int i = 0; i < 10; ++i) {
14230#pragma omp critical
14231    {
14232      bar();
14233    }
14234  }
14235#pragma omp target
14236#pragma omp teams
14237#pragma omp distribute parallel for
14238  for (int i = 0; i < 10; ++i) {
14239#pragma omp parallel
14240    {
14241#pragma omp single
14242      {
14243 bar();
14244      }
14245    }
14246  }
14247#pragma omp target
14248#pragma omp teams
14249#pragma omp distribute parallel for
14250  for (int i = 0; i < 10; ++i) {
14251#pragma omp parallel for
14252    for (int i = 0; i < 10; ++i)
14253      ;
14254  }
14255#pragma omp target
14256#pragma omp teams
14257#pragma omp distribute parallel for
14258  for (int i = 0; i < 10; ++i) {
14259#pragma omp parallel for simd
14260    for (int i = 0; i < 10; ++i)
14261      ;
14262  }
14263#pragma omp target
14264#pragma omp teams
14265#pragma omp distribute parallel for
14266  for (int i = 0; i < 10; ++i) {
14267#pragma omp parallel sections
14268    {
14269      bar();
14270    }
14271  }
14272#pragma omp target
14273#pragma omp teams
14274#pragma omp distribute parallel for
14275  for (int i = 0; i < 10; ++i) {
14276#pragma omp task
14277    {
14278      bar();
14279    }
14280  }
14281#pragma omp target
14282#pragma omp teams
14283#pragma omp distribute parallel for
14284  for (int i = 0; i < 10; ++i) {
14285#pragma omp taskyield
14286    bar();
14287  }
14288#pragma omp target
14289#pragma omp teams
14290#pragma omp distribute parallel for
14291  for (int i = 0; i < 10; ++i) {
14292#pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
14293    bar();
14294  }
14295#pragma omp target
14296#pragma omp teams
14297#pragma omp distribute parallel for
14298  for (int i = 0; i < 10; ++i) {
14299#pragma omp taskwait
14300    bar();
14301  }
14302#pragma omp target
14303#pragma omp teams
14304#pragma omp distribute parallel for
14305  for (int i = 0; i < 10; ++i) {
14306#pragma omp flush
14307    bar();
14308  }
14309#pragma omp target
14310#pragma omp teams
14311#pragma omp distribute parallel for
14312  for (int i = 0; i < 10; ++i) {
14313#pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
14314    bar();
14315  }
14316#pragma omp target
14317#pragma omp teams
14318#pragma omp distribute parallel for
14319  for (int i = 0; i < 10; ++i) {
14320#pragma omp atomic
14321    ++a;
14322  }
14323#pragma omp target
14324#pragma omp teams
14325#pragma omp distribute parallel for
14326  for (int i = 0; i < 10; ++i) {
14327#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
14328    ++a;
14329  }
14330#pragma omp target
14331#pragma omp teams
14332#pragma omp distribute parallel for
14333  for (int i = 0; i < 10; ++i) {
14334#pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
14335    ++a;
14336  }
14337#pragma omp target
14338#pragma omp teams
14339#pragma omp distribute parallel for
14340  for (int i = 0; i < 10; ++i) {
14341#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
14342    for (int i = 0; i < 10; ++i)
14343      ;
14344  }
14345#pragma omp target
14346#pragma omp teams
14347#pragma omp distribute parallel for
14348  for (int i = 0; i < 10; ++i) {
14349#pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
14350    ++a;
14351  }
14352#pragma omp target
14353#pragma omp teams
14354#pragma omp distribute parallel for
14355  for (int i = 0; i < 10; ++i) {
14356#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
14357    ++a;
14358  }
14359#pragma omp target
14360#pragma omp teams
14361#pragma omp distribute parallel for
14362  for (int i = 0; i < 10; ++i) {
14363#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
14364    ++a;
14365  }
14366#pragma omp target
14367#pragma omp teams
14368#pragma omp distribute parallel for
14369  for (int i = 0; i < 10; ++i) {
14370#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
14371    ++a;
14372  }
14373#pragma omp target
14374#pragma omp teams
14375#pragma omp distribute parallel for
14376  for (int i = 0; i < 10; ++i) {
14377#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
14378  for (int i = 0; i < 10; ++i)
14379    ++a;
14380  }
14381#pragma omp target
14382#pragma omp teams
14383#pragma omp distribute parallel for
14384  for (int i = 0; i < 10; ++i) {
14385#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
14386  for (int i = 0; i < 10; ++i)
14387    ++a;
14388  }
14389#pragma omp target
14390#pragma omp teams
14391#pragma omp distribute parallel for
14392  for (int i = 0; i < 10; ++i) {
14393#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
14394  for (int i = 0; i < 10; ++i)
14395    ++a;
14396  }
14397#pragma omp target
14398#pragma omp teams
14399#pragma omp distribute parallel for
14400  for (int i = 0; i < 10; ++i) {
14401#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
14402  for (int i = 0; i < 10; ++i)
14403    ++a;
14404  }
14405#pragma omp target
14406#pragma omp teams
14407#pragma omp distribute parallel for
14408  for (int i = 0; i < 10; ++i) {
14409#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
14410  for (int i = 0; i < 10; ++i)
14411    ++a;
14412  }
14413#pragma omp target
14414#pragma omp teams
14415#pragma omp distribute parallel for
14416  for (int i = 0; i < 10; ++i) {
14417#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
14418  for (int i = 0; i < 10; ++i)
14419    ++a;
14420  }
14421#pragma omp target
14422#pragma omp teams
14423#pragma omp distribute parallel for
14424  for (int i = 0; i < 10; ++i) {
14425#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
14426    ++a;
14427  }
14428#pragma omp target
14429#pragma omp teams
14430#pragma omp distribute parallel for
14431  for (int i = 0; i < 10; ++i) {
14432#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
14433  for (int i = 0; i < 10; ++i)
14434    ++a;
14435  }
14436#pragma omp target
14437#pragma omp teams
14438#pragma omp distribute parallel for
14439  for (int i = 0; i < 10; ++i) {
14440#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
14441  for (int i = 0; i < 10; ++i)
14442    ++a;
14443  }
14444#pragma omp target
14445#pragma omp teams
14446#pragma omp distribute parallel for
14447  for (int i = 0; i < 10; ++i) {
14448#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
14449  for (int i = 0; i < 10; ++i)
14450    ++a;
14451  }
14452#pragma omp target
14453#pragma omp teams
14454#pragma omp distribute parallel for
14455  for (int i = 0; i < 10; ++i) {
14456#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
14457  for (int i = 0; i < 10; ++i)
14458    ++a;
14459  }
14460
14461// DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
14462#pragma omp target
14463#pragma omp teams
14464#pragma omp distribute parallel for simd
14465  for (int i = 0; i < 10; ++i) {
14466#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14467    for (int i = 0; i < 10; ++i)
14468      ;
14469  }
14470#pragma omp target
14471#pragma omp teams
14472#pragma omp distribute parallel for simd
14473  for (int i = 0; i < 10; ++i) {
14474#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14475    for (int i = 0; i < 10; ++i)
14476      ;
14477  }
14478#pragma omp target
14479#pragma omp teams
14480#pragma omp distribute parallel for simd
14481  for (int i = 0; i < 10; ++i) {
14482#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14483    for (int i = 0; i < 10; ++i)
14484      ;
14485  }
14486#pragma omp target
14487#pragma omp teams
14488#pragma omp distribute parallel for simd
14489  for (int i = 0; i < 10; ++i) {
14490#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
14491    for (int i = 0; i < 10; ++i)
14492      ;
14493  }
14494#pragma omp target
14495#pragma omp teams
14496#pragma omp distribute parallel for simd
14497  for (int i = 0; i < 10; ++i) {
14498#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14499    for (int i = 0; i < 10; ++i)
14500      ;
14501  }
14502#pragma omp target
14503#pragma omp teams  
14504#pragma omp distribute parallel for simd
14505  for (int i = 0; i < 10; ++i) {
14506#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14507    for (int i = 0; i < 10; ++i)
14508      ;
14509  }
14510#pragma omp target
14511#pragma omp teams
14512#pragma omp distribute parallel for simd
14513  for (int i = 0; i < 10; ++i) {
14514#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14515    {
14516      bar();
14517    }
14518  }
14519#pragma omp target
14520#pragma omp teams
14521#pragma omp distribute parallel for simd
14522  for (int i = 0; i < 10; ++i) {
14523#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14524    {
14525      bar();
14526    }
14527  }
14528#pragma omp target
14529#pragma omp teams
14530#pragma omp distribute parallel for simd
14531  for (int i = 0; i < 10; ++i) {
14532#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14533    {
14534      bar();
14535    }
14536  }
14537#pragma omp target
14538#pragma omp teams
14539#pragma omp distribute parallel for simd
14540  for (int i = 0; i < 10; ++i) {
14541#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14542    {
14543      bar();
14544    }
14545  }
14546#pragma omp target
14547#pragma omp teams
14548#pragma omp distribute parallel for simd
14549  for (int i = 0; i < 10; ++i) {
14550#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14551    {
14552      bar();
14553    }
14554  }
14555#pragma omp target
14556#pragma omp teams
14557#pragma omp distribute parallel for simd
14558  for (int i = 0; i < 10; ++i) {
14559#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14560    {
14561#pragma omp single
14562      {
14563 bar();
14564      }
14565    }
14566  }
14567#pragma omp target
14568#pragma omp teams
14569#pragma omp distribute parallel for simd
14570  for (int i = 0; i < 10; ++i) {
14571#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14572    for (int i = 0; i < 10; ++i)
14573      ;
14574  }
14575#pragma omp target
14576#pragma omp teams
14577#pragma omp distribute parallel for simd
14578  for (int i = 0; i < 10; ++i) {
14579#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14580    for (int i = 0; i < 10; ++i)
14581      ;
14582  }
14583#pragma omp target
14584#pragma omp teams
14585#pragma omp distribute parallel for simd
14586  for (int i = 0; i < 10; ++i) {
14587#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14588    {
14589      bar();
14590    }
14591  }
14592#pragma omp target
14593#pragma omp teams
14594#pragma omp distribute parallel for simd
14595  for (int i = 0; i < 10; ++i) {
14596#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14597    {
14598      bar();
14599    }
14600  }
14601#pragma omp target
14602#pragma omp teams
14603#pragma omp distribute parallel for simd
14604  for (int i = 0; i < 10; ++i) {
14605#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14606    bar();
14607  }
14608#pragma omp target
14609#pragma omp teams
14610#pragma omp distribute parallel for simd
14611  for (int i = 0; i < 10; ++i) {
14612#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14613    bar();
14614  }
14615#pragma omp target
14616#pragma omp teams
14617#pragma omp distribute parallel for simd
14618  for (int i = 0; i < 10; ++i) {
14619#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14620    bar();
14621  }
14622#pragma omp target
14623#pragma omp teams
14624#pragma omp distribute parallel for simd
14625  for (int i = 0; i < 10; ++i) {
14626#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14627    bar();
14628  }
14629#pragma omp target
14630#pragma omp teams
14631#pragma omp distribute parallel for simd
14632  for (int i = 0; i < 10; ++i) {
14633#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14634    bar();
14635  }
14636#pragma omp target
14637#pragma omp teams
14638#pragma omp distribute parallel for simd
14639  for (int i = 0; i < 10; ++i) {
14640#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14641    ++a;
14642  }
14643#pragma omp target
14644#pragma omp teams
14645#pragma omp distribute parallel for simd
14646  for (int i = 0; i < 10; ++i) {
14647#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14648    ++a;
14649  }
14650#pragma omp target
14651#pragma omp teams
14652#pragma omp distribute parallel for simd
14653  for (int i = 0; i < 10; ++i) {
14654#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14655    ++a;
14656  }
14657#pragma omp target
14658#pragma omp teams
14659#pragma omp distribute parallel for simd
14660  for (int i = 0; i < 10; ++i) {
14661#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14662    ++a;
14663  }
14664#pragma omp target
14665#pragma omp teams
14666#pragma omp distribute parallel for simd
14667  for (int i = 0; i < 10; ++i) {
14668#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14669    ++a;
14670  }
14671#pragma omp target
14672#pragma omp teams
14673#pragma omp distribute parallel for simd
14674  for (int i = 0; i < 10; ++i) {
14675#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14676    ++a;
14677  }
14678#pragma omp target
14679#pragma omp teams
14680#pragma omp distribute parallel for simd
14681  for (int i = 0; i < 10; ++i) {
14682#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14683    ++a;
14684  }
14685#pragma omp target
14686#pragma omp teams
14687#pragma omp distribute parallel for simd
14688  for (int i = 0; i < 10; ++i) {
14689#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14690    for (int i = 0; i < 10; ++i)
14691      ;
14692  }
14693#pragma omp target
14694#pragma omp teams
14695#pragma omp distribute parallel for simd
14696  for (int i = 0; i < 10; ++i) {
14697#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14698    for (int i = 0; i < 10; ++i)
14699      ;
14700  }
14701#pragma omp target
14702#pragma omp teams
14703#pragma omp distribute parallel for simd
14704  for (int i = 0; i < 10; ++i) {
14705#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14706    for (int i = 0; i < 10; ++i)
14707      ;
14708  }
14709#pragma omp target
14710#pragma omp teams
14711#pragma omp distribute parallel for simd
14712  for (int i = 0; i < 10; ++i) {
14713#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14714    for (int i = 0; i < 10; ++i)
14715      ;
14716  }
14717#pragma omp target
14718#pragma omp teams
14719#pragma omp distribute parallel for simd
14720  for (int i = 0; i < 10; ++i) {
14721#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14722    for (int i = 0; i < 10; ++i)
14723      ;
14724  }
14725#pragma omp target
14726#pragma omp teams
14727#pragma omp distribute parallel for simd
14728  for (int i = 0; i < 10; ++i) {
14729#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14730    for (int i = 0; i < 10; ++i)
14731      ;
14732  }
14733#pragma omp target
14734#pragma omp teams
14735#pragma omp distribute parallel for simd
14736  for (int i = 0; i < 10; ++i) {
14737#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14738    a++;
14739  }
14740#pragma omp target
14741#pragma omp teams
14742#pragma omp distribute parallel for simd
14743  for (int i = 0; i < 10; ++i) {
14744#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14745    for (int i = 0; i < 10; ++i)
14746      ;
14747  }
14748#pragma omp target
14749#pragma omp teams
14750#pragma omp distribute parallel for simd
14751  for (int i = 0; i < 10; ++i) {
14752#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14753    for (int i = 0; i < 10; ++i)
14754      ;
14755  }
14756#pragma omp target
14757#pragma omp teams
14758#pragma omp distribute parallel for simd
14759  for (int i = 0; i < 10; ++i) {
14760#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14761    for (int i = 0; i < 10; ++i)
14762      ;
14763  }
14764#pragma omp target
14765#pragma omp teams
14766#pragma omp distribute parallel for simd
14767  for (int i = 0; i < 10; ++i) {
14768#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14769    for (int i = 0; i < 10; ++i)
14770      ;
14771  }
14772
14773// DISTRIBUTE SIMD DIRECTIVE
14774#pragma omp target
14775#pragma omp teams
14776#pragma omp distribute simd
14777  for (int i = 0; i < 10; ++i) {
14778#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14779    for (int i = 0; i < 10; ++i)
14780      ;
14781  }
14782#pragma omp target
14783#pragma omp teams
14784#pragma omp distribute simd
14785  for (int i = 0; i < 10; ++i) {
14786#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14787    for (int i = 0; i < 10; ++i)
14788      ;
14789  }
14790#pragma omp target
14791#pragma omp teams
14792#pragma omp distribute simd
14793  for (int i = 0; i < 10; ++i) {
14794#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14795    for (int i = 0; i < 10; ++i)
14796      ;
14797  }
14798#pragma omp target
14799#pragma omp teams
14800#pragma omp distribute simd
14801  for (int i = 0; i < 10; ++i) {
14802#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
14803    for (int i = 0; i < 10; ++i)
14804      ;
14805  }
14806#pragma omp target
14807#pragma omp teams
14808#pragma omp distribute simd
14809  for (int i = 0; i < 10; ++i) {
14810#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14811    for (int i = 0; i < 10; ++i)
14812      ;
14813  }
14814#pragma omp target
14815#pragma omp teams  
14816#pragma omp distribute simd
14817  for (int i = 0; i < 10; ++i) {
14818#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14819    for (int i = 0; i < 10; ++i)
14820      ;
14821  }
14822#pragma omp target
14823#pragma omp teams
14824#pragma omp distribute simd
14825  for (int i = 0; i < 10; ++i) {
14826#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14827    {
14828      bar();
14829    }
14830  }
14831#pragma omp target
14832#pragma omp teams
14833#pragma omp distribute simd
14834  for (int i = 0; i < 10; ++i) {
14835#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14836    {
14837      bar();
14838    }
14839  }
14840#pragma omp target
14841#pragma omp teams
14842#pragma omp distribute simd
14843  for (int i = 0; i < 10; ++i) {
14844#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14845    {
14846      bar();
14847    }
14848  }
14849#pragma omp target
14850#pragma omp teams
14851#pragma omp distribute simd
14852  for (int i = 0; i < 10; ++i) {
14853#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14854    {
14855      bar();
14856    }
14857  }
14858#pragma omp target
14859#pragma omp teams
14860#pragma omp distribute simd
14861  for (int i = 0; i < 10; ++i) {
14862#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14863    {
14864      bar();
14865    }
14866  }
14867#pragma omp target
14868#pragma omp teams
14869#pragma omp distribute simd
14870  for (int i = 0; i < 10; ++i) {
14871#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14872    {
14873#pragma omp single
14874      {
14875 bar();
14876      }
14877    }
14878  }
14879#pragma omp target
14880#pragma omp teams
14881#pragma omp distribute simd
14882  for (int i = 0; i < 10; ++i) {
14883#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14884    for (int i = 0; i < 10; ++i)
14885      ;
14886  }
14887#pragma omp target
14888#pragma omp teams
14889#pragma omp distribute simd
14890  for (int i = 0; i < 10; ++i) {
14891#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14892    for (int i = 0; i < 10; ++i)
14893      ;
14894  }
14895#pragma omp target
14896#pragma omp teams
14897#pragma omp distribute simd
14898  for (int i = 0; i < 10; ++i) {
14899#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14900    {
14901      bar();
14902    }
14903  }
14904#pragma omp target
14905#pragma omp teams
14906#pragma omp distribute simd
14907  for (int i = 0; i < 10; ++i) {
14908#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14909    {
14910      bar();
14911    }
14912  }
14913#pragma omp target
14914#pragma omp teams
14915#pragma omp distribute simd
14916  for (int i = 0; i < 10; ++i) {
14917#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14918    bar();
14919  }
14920#pragma omp target
14921#pragma omp teams
14922#pragma omp distribute simd
14923  for (int i = 0; i < 10; ++i) {
14924#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14925    bar();
14926  }
14927#pragma omp target
14928#pragma omp teams
14929#pragma omp distribute simd
14930  for (int i = 0; i < 10; ++i) {
14931#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14932    bar();
14933  }
14934#pragma omp target
14935#pragma omp teams
14936#pragma omp distribute simd
14937  for (int i = 0; i < 10; ++i) {
14938#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14939    bar();
14940  }
14941#pragma omp target
14942#pragma omp teams
14943#pragma omp distribute simd
14944  for (int i = 0; i < 10; ++i) {
14945#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14946    bar();
14947  }
14948#pragma omp target
14949#pragma omp teams
14950#pragma omp distribute simd
14951  for (int i = 0; i < 10; ++i) {
14952#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14953    ++a;
14954  }
14955#pragma omp target
14956#pragma omp teams
14957#pragma omp distribute simd
14958  for (int i = 0; i < 10; ++i) {
14959#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14960    ++a;
14961  }
14962#pragma omp target
14963#pragma omp teams
14964#pragma omp distribute simd
14965  for (int i = 0; i < 10; ++i) {
14966#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14967    ++a;
14968  }
14969#pragma omp target
14970#pragma omp teams
14971#pragma omp distribute simd
14972  for (int i = 0; i < 10; ++i) {
14973#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14974    ++a;
14975  }
14976#pragma omp target
14977#pragma omp teams
14978#pragma omp distribute simd
14979  for (int i = 0; i < 10; ++i) {
14980#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14981    ++a;
14982  }
14983#pragma omp target
14984#pragma omp teams
14985#pragma omp distribute simd
14986  for (int i = 0; i < 10; ++i) {
14987#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14988    ++a;
14989  }
14990#pragma omp target
14991#pragma omp teams
14992#pragma omp distribute simd
14993  for (int i = 0; i < 10; ++i) {
14994#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
14995    ++a;
14996  }
14997#pragma omp target
14998#pragma omp teams
14999#pragma omp distribute simd
15000  for (int i = 0; i < 10; ++i) {
15001#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15002    for (int i = 0; i < 10; ++i)
15003      ;
15004  }
15005#pragma omp target
15006#pragma omp teams
15007#pragma omp distribute simd
15008  for (int i = 0; i < 10; ++i) {
15009#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15010    for (int i = 0; i < 10; ++i)
15011      ;
15012  }
15013#pragma omp target
15014#pragma omp teams
15015#pragma omp distribute simd
15016  for (int i = 0; i < 10; ++i) {
15017#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15018    for (int i = 0; i < 10; ++i)
15019      ;
15020  }
15021#pragma omp target
15022#pragma omp teams
15023#pragma omp distribute simd
15024  for (int i = 0; i < 10; ++i) {
15025#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15026    for (int i = 0; i < 10; ++i)
15027      ;
15028  }
15029#pragma omp target
15030#pragma omp teams
15031#pragma omp distribute simd
15032  for (int i = 0; i < 10; ++i) {
15033#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15034    for (int i = 0; i < 10; ++i)
15035      ;
15036  }
15037#pragma omp target
15038#pragma omp teams
15039#pragma omp distribute simd
15040  for (int i = 0; i < 10; ++i) {
15041#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15042    for (int i = 0; i < 10; ++i)
15043      ;
15044  }
15045#pragma omp target
15046#pragma omp teams
15047#pragma omp distribute simd
15048  for (int i = 0; i < 10; ++i) {
15049#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15050    a++;
15051  }
15052#pragma omp target
15053#pragma omp teams
15054#pragma omp distribute simd
15055  for (int i = 0; i < 10; ++i) {
15056#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15057    for (int i = 0; i < 10; ++i)
15058      ;
15059  }
15060#pragma omp target
15061#pragma omp teams
15062#pragma omp distribute simd
15063  for (int i = 0; i < 10; ++i) {
15064#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15065    for (int i = 0; i < 10; ++i)
15066      ;
15067  }
15068#pragma omp target
15069#pragma omp teams
15070#pragma omp distribute simd
15071  for (int i = 0; i < 10; ++i) {
15072#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15073    for (int i = 0; i < 10; ++i)
15074      ;
15075  }
15076#pragma omp target
15077#pragma omp teams
15078#pragma omp distribute simd
15079  for (int i = 0; i < 10; ++i) {
15080#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15081    for (int i = 0; i < 10; ++i)
15082      ;
15083  }
15084
15085// TARGET SIMD DIRECTIVE
15086#pragma omp target simd
15087  for (int i = 0; i < 10; ++i) {
15088#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15089    for (int i = 0; i < 10; ++i)
15090      ;
15091  }
15092#pragma omp target simd
15093  for (int i = 0; i < 10; ++i) {
15094#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15095    for (int i = 0; i < 10; ++i)
15096      ;
15097  }
15098#pragma omp target simd
15099  for (int i = 0; i < 10; ++i) {
15100#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15101    for (int i = 0; i < 10; ++i)
15102      ;
15103  }
15104#pragma omp target simd
15105  for (int i = 0; i < 10; ++i) {
15106#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15107    for (int i = 0; i < 10; ++i)
15108      ;
15109  }
15110#pragma omp target simd
15111  for (int i = 0; i < 10; ++i) {
15112#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15113    for (int i = 0; i < 10; ++i)
15114      ;
15115  }
15116#pragma omp target simd
15117  for (int i = 0; i < 10; ++i) {
15118#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15119    for (int i = 0; i < 10; ++i)
15120      ;
15121  }
15122#pragma omp target simd
15123  for (int i = 0; i < 10; ++i) {
15124#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15125    {
15126      bar();
15127    }
15128  }
15129#pragma omp target simd
15130  for (int i = 0; i < 10; ++i) {
15131#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15132    {
15133      bar();
15134    }
15135  }
15136#pragma omp target simd
15137  for (int i = 0; i < 10; ++i) {
15138#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15139    {
15140      bar();
15141    }
15142  }
15143#pragma omp target simd
15144  for (int i = 0; i < 10; ++i) {
15145#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15146    {
15147      bar();
15148    }
15149  }
15150#pragma omp target simd
15151  for (int i = 0; i < 10; ++i) {
15152#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15153    {
15154      bar();
15155    }
15156  }
15157#pragma omp target simd
15158  for (int i = 0; i < 10; ++i) {
15159#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15160    {
15161#pragma omp single
15162      {
15163 bar();
15164      }
15165    }
15166  }
15167#pragma omp target simd
15168  for (int i = 0; i < 10; ++i) {
15169#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15170    for (int i = 0; i < 10; ++i)
15171      ;
15172  }
15173#pragma omp target simd
15174  for (int i = 0; i < 10; ++i) {
15175#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15176    for (int i = 0; i < 10; ++i)
15177      ;
15178  }
15179#pragma omp target simd
15180  for (int i = 0; i < 10; ++i) {
15181#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15182    {
15183      bar();
15184    }
15185  }
15186#pragma omp target simd
15187  for (int i = 0; i < 10; ++i) {
15188#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15189    {
15190      bar();
15191    }
15192  }
15193#pragma omp target simd
15194  for (int i = 0; i < 10; ++i) {
15195#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15196    bar();
15197  }
15198#pragma omp target simd
15199  for (int i = 0; i < 10; ++i) {
15200#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15201    bar();
15202  }
15203#pragma omp target simd
15204  for (int i = 0; i < 10; ++i) {
15205#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15206    bar();
15207  }
15208#pragma omp target simd
15209  for (int i = 0; i < 10; ++i) {
15210#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15211    bar();
15212  }
15213#pragma omp target simd
15214  for (int i = 0; i < 10; ++i) {
15215#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15216    bar();
15217  }
15218#pragma omp target simd
15219  for (int i = 0; i < 10; ++i) {
15220#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15221    ++a;
15222  }
15223#pragma omp target simd
15224  for (int i = 0; i < 10; ++i) {
15225#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15226    ++a;
15227  }
15228#pragma omp target simd
15229  for (int i = 0; i < 10; ++i) {
15230#pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15231    ++a;
15232  }
15233#pragma omp target simd
15234  for (int i = 0; i < 10; ++i) {
15235#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15236    ++a;
15237  }
15238#pragma omp target simd
15239  for (int i = 0; i < 10; ++i) {
15240#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15241    ++a;
15242  }
15243#pragma omp target simd
15244  for (int i = 0; i < 10; ++i) {
15245#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15246    ++a;
15247  }
15248#pragma omp target simd
15249  for (int i = 0; i < 10; ++i) {
15250#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15251    ++a;
15252  }
15253#pragma omp target simd
15254  for (int i = 0; i < 10; ++i) {
15255#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15256    for (int i = 0; i < 10; ++i)
15257      ;
15258  }
15259#pragma omp target simd
15260  for (int i = 0; i < 10; ++i) {
15261#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15262    for (int i = 0; i < 10; ++i)
15263      ;
15264  }
15265#pragma omp target simd
15266  for (int i = 0; i < 10; ++i) {
15267#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15268    for (int i = 0; i < 10; ++i)
15269      ;
15270  }
15271#pragma omp target simd
15272  for (int i = 0; i < 10; ++i) {
15273#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15274    for (int i = 0; i < 10; ++i)
15275      ;
15276  }
15277#pragma omp target simd
15278  for (int i = 0; i < 10; ++i) {
15279#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15280    for (int i = 0; i < 10; ++i)
15281      ;
15282  }
15283#pragma omp target simd
15284  for (int i = 0; i < 10; ++i) {
15285#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15286    for (int i = 0; i < 10; ++i)
15287      ;
15288  }
15289#pragma omp target simd
15290  for (int i = 0; i < 10; ++i) {
15291#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15292    a++;
15293  }
15294#pragma omp target simd
15295  for (int i = 0; i < 10; ++i) {
15296#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15297    for (int i = 0; i < 10; ++i)
15298      ;
15299  }
15300#pragma omp target simd
15301  for (int i = 0; i < 10; ++i) {
15302#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15303    for (int i = 0; i < 10; ++i)
15304      ;
15305  }
15306#pragma omp target simd
15307  for (int i = 0; i < 10; ++i) {
15308#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15309    for (int i = 0; i < 10; ++i)
15310      ;
15311  }
15312#pragma omp target simd
15313  for (int i = 0; i < 10; ++i) {
15314#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15315    for (int i = 0; i < 10; ++i)
15316      ;
15317  }
15318
15319// TEAMS DISTRIBUTE DIRECTIVE
15320#pragma omp teams distribute // expected-error {{orphaned 'omp teams distribute' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15321  for (int i = 0; i < 10; ++i)
15322    ;
15323#pragma omp target
15324#pragma omp teams distribute
15325  for (int i = 0; i < 10; ++i) {
15326#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
15327    for (int i = 0; i < 10; ++i)
15328      ;
15329  }
15330#pragma omp target
15331#pragma omp teams distribute
15332  for (int i = 0; i < 10; ++i) {
15333#pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
15334    for (int i = 0; i < 10; ++i)
15335      ;
15336  }
15337#pragma omp target
15338#pragma omp teams distribute
15339  for (int i = 0; i < 10; ++i) {
15340#pragma omp for // OK
15341    for (int i = 0; i < 10; ++i)
15342      ;
15343  }
15344#pragma omp target
15345#pragma omp teams distribute
15346  for (int i = 0; i < 10; ++i) {
15347#pragma omp simd // OK
15348    for (int i = 0; i < 10; ++i)
15349      ;
15350  }
15351#pragma omp target
15352#pragma omp teams distribute
15353  for (int i = 0; i < 10; ++i) {
15354#pragma omp for simd // OK
15355    for (int i = 0; i < 10; ++i)
15356      ;
15357  }
15358#pragma omp target
15359#pragma omp teams distribute
15360  for (int i = 0; i < 10; ++i) {
15361#pragma omp parallel // OK
15362    for (int i = 0; i < 10; ++i)
15363      ;
15364  }
15365#pragma omp target
15366#pragma omp teams distribute
15367  for (int i = 0; i < 10; ++i) {
15368#pragma omp sections // OK
15369    {
15370      bar();
15371    }
15372  }
15373#pragma omp target
15374#pragma omp teams distribute
15375  for (int i = 0; i < 10; ++i) {
15376#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute region}}
15377    {
15378      bar();
15379    }
15380  }
15381#pragma omp target
15382#pragma omp teams distribute
15383  for (int i = 0; i < 10; ++i) {
15384#pragma omp single // OK
15385    {
15386      bar();
15387    }
15388  }
15389#pragma omp target
15390#pragma omp teams distribute
15391  for (int i = 0; i < 10; ++i) {
15392#pragma omp master // OK
15393    {
15394      bar();
15395    }
15396  }
15397#pragma omp target
15398#pragma omp teams distribute
15399  for (int i = 0; i < 10; ++i) {
15400#pragma omp critical // OK
15401    {
15402      bar();
15403    }
15404  }
15405#pragma omp target
15406#pragma omp teams distribute
15407  for (int i = 0; i < 10; ++i) {
15408#pragma omp parallel // OK
15409    {
15410#pragma omp single
15411      {
15412 bar();
15413      }
15414    }
15415  }
15416#pragma omp target
15417#pragma omp teams distribute
15418  for (int i = 0; i < 10; ++i) {
15419#pragma omp parallel for // OK
15420    for (int i = 0; i < 10; ++i)
15421      ;
15422  }
15423#pragma omp target
15424#pragma omp teams distribute
15425  for (int i = 0; i < 10; ++i) {
15426#pragma omp parallel for simd // OK
15427    for (int i = 0; i < 10; ++i)
15428      ;
15429  }
15430#pragma omp target
15431#pragma omp teams distribute
15432  for (int i = 0; i < 10; ++i) {
15433#pragma omp parallel sections // OK
15434    {
15435      bar();
15436    }
15437  }
15438#pragma omp target
15439#pragma omp teams distribute
15440  for (int i = 0; i < 10; ++i) {
15441#pragma omp task // OK
15442    {
15443      bar();
15444    }
15445  }
15446#pragma omp target
15447#pragma omp teams distribute
15448  for (int i = 0; i < 10; ++i) {
15449#pragma omp taskyield // OK
15450    bar();
15451  }
15452#pragma omp target
15453#pragma omp teams distribute
15454  for (int i = 0; i < 10; ++i) {
15455#pragma omp barrier // OK
15456    bar();
15457  }
15458#pragma omp target
15459#pragma omp teams distribute
15460  for (int i = 0; i < 10; ++i) {
15461#pragma omp taskwait // OK
15462    bar();
15463  }
15464#pragma omp target
15465#pragma omp teams distribute
15466  for (int i = 0; i < 10; ++i) {
15467#pragma omp flush // OK
15468    bar();
15469  }
15470#pragma omp target
15471#pragma omp teams distribute
15472  for (int i = 0; i < 10; ++i) {
15473#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
15474    bar();
15475  }
15476#pragma omp target
15477#pragma omp teams distribute
15478  for (int i = 0; i < 10; ++i) {
15479#pragma omp atomic // OK
15480    ++a;
15481  }
15482#pragma omp target
15483#pragma omp teams distribute
15484  for (int i = 0; i < 10; ++i) {
15485#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
15486    ++a;
15487  }
15488#pragma omp target
15489#pragma omp teams distribute
15490  for (int i = 0; i < 10; ++i) {
15491#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
15492    ++a;
15493  }
15494#pragma omp target
15495#pragma omp teams distribute
15496  for (int i = 0; i < 10; ++i) {
15497#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
15498    for (int i = 0; i < 10; ++i)
15499      ;
15500  }
15501#pragma omp target
15502#pragma omp teams distribute
15503  for (int i = 0; i < 10; ++i) {
15504#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
15505    ++a;
15506  }
15507#pragma omp target
15508#pragma omp teams distribute
15509  for (int i = 0; i < 10; ++i) {
15510#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
15511    ++a;
15512  }
15513#pragma omp target
15514#pragma omp teams distribute
15515  for (int i = 0; i < 10; ++i) {
15516#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
15517    ++a;
15518  }
15519#pragma omp target
15520#pragma omp teams distribute
15521  for (int i = 0; i < 10; ++i) {
15522#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
15523    ++a;
15524  }
15525#pragma omp target
15526#pragma omp teams distribute
15527  for (int i = 0; i < 10; ++i) {
15528#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
15529    for (int i = 0; i < 10; ++i)
15530      ++a;
15531  }
15532#pragma omp target
15533#pragma omp teams distribute
15534  for (int i = 0; i < 10; ++i) {
15535#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
15536    for (int i = 0; i < 10; ++i)
15537      ++a;
15538  }
15539#pragma omp target
15540#pragma omp teams distribute
15541  for (int i = 0; i < 10; ++i) {
15542#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
15543    for (int i = 0; i < 10; ++i)
15544      ++a;
15545  }
15546#pragma omp target
15547#pragma omp teams distribute
15548  for (int i = 0; i < 10; ++i) {
15549#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
15550    for (int i = 0; i < 10; ++i)
15551      ++a;
15552  }
15553#pragma omp target
15554#pragma omp teams distribute
15555  for (int i = 0; i < 10; ++i) {
15556#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
15557    for (int i = 0; i < 10; ++i)
15558      ++a;
15559  }
15560#pragma omp target
15561#pragma omp teams distribute
15562  for (int i = 0; i < 10; ++i) {
15563#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
15564    for (int i = 0; i < 10; ++i)
15565      ++a;
15566  }
15567#pragma omp target
15568#pragma omp teams distribute
15569  for (int i = 0; i < 10; ++i) {
15570#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
15571    ++a;
15572  }
15573#pragma omp target
15574#pragma omp teams distribute
15575  for (int i = 0; i < 10; ++i) {
15576#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
15577    for (int i = 0; i < 10; ++i)
15578      ++a;
15579  }
15580#pragma omp target
15581#pragma omp teams distribute
15582  for (int i = 0; i < 10; ++i) {
15583#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
15584    for (int i = 0; i < 10; ++i)
15585      ++a;
15586  }
15587#pragma omp target
15588#pragma omp teams distribute
15589  for (int i = 0; i < 10; ++i) {
15590#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
15591    for (int i = 0; i < 10; ++i)
15592      ++a;
15593  }
15594#pragma omp target
15595#pragma omp teams distribute
15596  for (int i = 0; i < 10; ++i) {
15597#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
15598    for (int i = 0; i < 10; ++i)
15599      ++a;
15600  }
15601
15602// TEAMS DISTRIBUTE SIMD DIRECTIVE
15603#pragma omp teams distribute simd // expected-error {{orphaned 'omp teams distribute simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15604  for (int i = 0; i < 10; ++i)
15605    ;
15606#pragma omp target
15607#pragma omp teams distribute simd
15608  for (int i = 0; i < 10; ++i) {
15609#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15610    for (int i = 0; i < 10; ++i)
15611      ;
15612  }
15613#pragma omp target
15614#pragma omp teams distribute simd
15615  for (int i = 0; i < 10; ++i) {
15616#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15617    for (int i = 0; i < 10; ++i)
15618      ;
15619  }
15620#pragma omp target
15621#pragma omp teams distribute simd
15622  for (int i = 0; i < 10; ++i) {
15623#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15624    for (int i = 0; i < 10; ++i)
15625      ;
15626  }
15627#pragma omp target
15628#pragma omp teams distribute simd
15629  for (int i = 0; i < 10; ++i) {
15630#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15631    for (int i = 0; i < 10; ++i)
15632      ;
15633  }
15634#pragma omp target
15635#pragma omp teams distribute simd
15636  for (int i = 0; i < 10; ++i) {
15637#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15638    for (int i = 0; i < 10; ++i)
15639      ;
15640  }
15641#pragma omp target
15642#pragma omp teams distribute simd
15643  for (int i = 0; i < 10; ++i) {
15644#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15645    for (int i = 0; i < 10; ++i)
15646      ;
15647  }
15648#pragma omp target
15649#pragma omp teams distribute simd
15650  for (int i = 0; i < 10; ++i) {
15651#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15652    {
15653      bar();
15654    }
15655  }
15656#pragma omp target
15657#pragma omp teams distribute simd
15658  for (int i = 0; i < 10; ++i) {
15659#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15660    {
15661      bar();
15662    }
15663  }
15664#pragma omp target
15665#pragma omp teams distribute simd
15666  for (int i = 0; i < 10; ++i) {
15667#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15668    {
15669      bar();
15670    }
15671  }
15672#pragma omp target
15673#pragma omp teams distribute simd
15674  for (int i = 0; i < 10; ++i) {
15675#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15676    {
15677      bar();
15678    }
15679  }
15680#pragma omp target
15681#pragma omp teams distribute simd
15682  for (int i = 0; i < 10; ++i) {
15683#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15684    {
15685      bar();
15686    }
15687  }
15688#pragma omp target
15689#pragma omp teams distribute simd
15690  for (int i = 0; i < 10; ++i) {
15691#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15692    {
15693#pragma omp single
15694      {
15695 bar();
15696      }
15697    }
15698  }
15699#pragma omp target
15700#pragma omp teams distribute simd
15701  for (int i = 0; i < 10; ++i) {
15702#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15703    for (int i = 0; i < 10; ++i)
15704      ;
15705  }
15706#pragma omp target
15707#pragma omp teams distribute simd
15708  for (int i = 0; i < 10; ++i) {
15709#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15710    for (int i = 0; i < 10; ++i)
15711      ;
15712  }
15713#pragma omp target
15714#pragma omp teams distribute simd
15715  for (int i = 0; i < 10; ++i) {
15716#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15717    {
15718      bar();
15719    }
15720  }
15721#pragma omp target
15722#pragma omp teams distribute simd
15723  for (int i = 0; i < 10; ++i) {
15724#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15725    {
15726      bar();
15727    }
15728  }
15729#pragma omp target
15730#pragma omp teams distribute simd
15731  for (int i = 0; i < 10; ++i) {
15732#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15733    bar();
15734  }
15735#pragma omp target
15736#pragma omp teams distribute simd
15737  for (int i = 0; i < 10; ++i) {
15738#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15739    bar();
15740  }
15741#pragma omp target
15742#pragma omp teams distribute simd
15743  for (int i = 0; i < 10; ++i) {
15744#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15745    bar();
15746  }
15747#pragma omp target
15748#pragma omp teams distribute simd
15749  for (int i = 0; i < 10; ++i) {
15750#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15751    bar();
15752  }
15753#pragma omp target
15754#pragma omp teams distribute simd
15755  for (int i = 0; i < 10; ++i) {
15756#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15757    bar();
15758  }
15759#pragma omp target
15760#pragma omp teams distribute simd
15761  for (int i = 0; i < 10; ++i) {
15762#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15763    ++a;
15764  }
15765#pragma omp target
15766#pragma omp teams distribute simd
15767  for (int i = 0; i < 10; ++i) {
15768#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15769    ++a;
15770  }
15771#pragma omp target
15772#pragma omp teams distribute simd
15773  for (int i = 0; i < 10; ++i) {
15774#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15775    ++a;
15776  }
15777#pragma omp target
15778#pragma omp teams distribute simd
15779  for (int i = 0; i < 10; ++i) {
15780#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15781    for (int i = 0; i < 10; ++i)
15782      ;
15783  }
15784#pragma omp target
15785#pragma omp teams distribute simd
15786  for (int i = 0; i < 10; ++i) {
15787#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15788    ++a;
15789  }
15790#pragma omp target
15791#pragma omp teams distribute simd
15792  for (int i = 0; i < 10; ++i) {
15793#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15794    ++a;
15795  }
15796#pragma omp target
15797#pragma omp teams distribute simd
15798  for (int i = 0; i < 10; ++i) {
15799#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15800    ++a;
15801  }
15802#pragma omp target
15803#pragma omp teams distribute simd
15804  for (int i = 0; i < 10; ++i) {
15805#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15806    ++a;
15807  }
15808#pragma omp target
15809#pragma omp teams distribute simd
15810  for (int i = 0; i < 10; ++i) {
15811#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15812    for (int i = 0; i < 10; ++i)
15813      ++a;
15814  }
15815#pragma omp target
15816#pragma omp teams distribute simd
15817  for (int i = 0; i < 10; ++i) {
15818#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15819    for (int i = 0; i < 10; ++i)
15820      ++a;
15821  }
15822#pragma omp target
15823#pragma omp teams distribute simd
15824  for (int i = 0; i < 10; ++i) {
15825#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15826    for (int i = 0; i < 10; ++i)
15827      ++a;
15828  }
15829#pragma omp target
15830#pragma omp teams distribute simd
15831  for (int i = 0; i < 10; ++i) {
15832#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15833    for (int i = 0; i < 10; ++i)
15834      ++a;
15835  }
15836#pragma omp target
15837#pragma omp teams distribute simd
15838  for (int i = 0; i < 10; ++i) {
15839#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15840    for (int i = 0; i < 10; ++i)
15841      ++a;
15842  }
15843#pragma omp target
15844#pragma omp teams distribute simd
15845  for (int i = 0; i < 10; ++i) {
15846#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15847    for (int i = 0; i < 10; ++i)
15848      ++a;
15849  }
15850#pragma omp target
15851#pragma omp teams distribute simd
15852  for (int i = 0; i < 10; ++i) {
15853#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15854    ++a;
15855  }
15856#pragma omp target
15857#pragma omp teams distribute simd
15858  for (int i = 0; i < 10; ++i) {
15859#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15860    for (int i = 0; i < 10; ++i)
15861      ++a;
15862  }
15863#pragma omp target
15864#pragma omp teams distribute simd
15865  for (int i = 0; i < 10; ++i) {
15866#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15867    for (int i = 0; i < 10; ++i)
15868      ++a;
15869  }
15870#pragma omp target
15871#pragma omp teams distribute simd
15872  for (int i = 0; i < 10; ++i) {
15873#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15874    for (int i = 0; i < 10; ++i)
15875      ++a;
15876  }
15877#pragma omp target
15878#pragma omp teams distribute simd
15879  for (int i = 0; i < 10; ++i) {
15880#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15881    for (int i = 0; i < 10; ++i)
15882      ++a;
15883  }
15884
15885// TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
15886#pragma omp teams distribute parallel for simd // expected-error {{orphaned 'omp teams distribute parallel for simd' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
15887  for (int i = 0; i < 10; ++i)
15888    ;
15889#pragma omp target
15890#pragma omp teams distribute parallel for simd
15891  for (int i = 0; i < 10; ++i) {
15892#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15893    for (int i = 0; i < 10; ++i)
15894      ;
15895  }
15896#pragma omp target
15897#pragma omp teams distribute parallel for simd
15898  for (int i = 0; i < 10; ++i) {
15899#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15900    for (int i = 0; i < 10; ++i)
15901      ;
15902  }
15903#pragma omp target
15904#pragma omp teams distribute parallel for simd
15905  for (int i = 0; i < 10; ++i) {
15906#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15907    for (int i = 0; i < 10; ++i)
15908      ;
15909  }
15910#pragma omp target
15911#pragma omp teams distribute parallel for simd
15912  for (int i = 0; i < 10; ++i) {
15913#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
15914    for (int i = 0; i < 10; ++i)
15915      ;
15916  }
15917#pragma omp target
15918#pragma omp teams distribute parallel for simd
15919  for (int i = 0; i < 10; ++i) {
15920#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15921    for (int i = 0; i < 10; ++i)
15922      ;
15923  }
15924#pragma omp target
15925#pragma omp teams distribute parallel for simd
15926  for (int i = 0; i < 10; ++i) {
15927#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15928    for (int i = 0; i < 10; ++i)
15929      ;
15930  }
15931#pragma omp target
15932#pragma omp teams distribute parallel for simd
15933  for (int i = 0; i < 10; ++i) {
15934#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15935    {
15936      bar();
15937    }
15938  }
15939#pragma omp target
15940#pragma omp teams distribute parallel for simd
15941  for (int i = 0; i < 10; ++i) {
15942#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15943    {
15944      bar();
15945    }
15946  }
15947#pragma omp target
15948#pragma omp teams distribute parallel for simd
15949  for (int i = 0; i < 10; ++i) {
15950#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15951    {
15952      bar();
15953    }
15954  }
15955#pragma omp target
15956#pragma omp teams distribute parallel for simd
15957  for (int i = 0; i < 10; ++i) {
15958#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15959    {
15960      bar();
15961    }
15962  }
15963#pragma omp target
15964#pragma omp teams distribute parallel for simd
15965  for (int i = 0; i < 10; ++i) {
15966#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15967    {
15968      bar();
15969    }
15970  }
15971#pragma omp target
15972#pragma omp teams distribute parallel for simd
15973  for (int i = 0; i < 10; ++i) {
15974#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15975    {
15976#pragma omp single
15977      {
15978 bar();
15979      }
15980    }
15981  }
15982#pragma omp target
15983#pragma omp teams distribute parallel for simd
15984  for (int i = 0; i < 10; ++i) {
15985#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15986    for (int i = 0; i < 10; ++i)
15987      ;
15988  }
15989#pragma omp target
15990#pragma omp teams distribute parallel for simd
15991  for (int i = 0; i < 10; ++i) {
15992#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
15993    for (int i = 0; i < 10; ++i)
15994      ;
15995  }
15996#pragma omp target
15997#pragma omp teams distribute parallel for simd
15998  for (int i = 0; i < 10; ++i) {
15999#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16000    {
16001      bar();
16002    }
16003  }
16004#pragma omp target
16005#pragma omp teams distribute parallel for simd
16006  for (int i = 0; i < 10; ++i) {
16007#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16008    {
16009      bar();
16010    }
16011  }
16012#pragma omp target
16013#pragma omp teams distribute parallel for simd
16014  for (int i = 0; i < 10; ++i) {
16015#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16016    bar();
16017  }
16018#pragma omp target
16019#pragma omp teams distribute parallel for simd
16020  for (int i = 0; i < 10; ++i) {
16021#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16022    bar();
16023  }
16024#pragma omp target
16025#pragma omp teams distribute parallel for simd
16026  for (int i = 0; i < 10; ++i) {
16027#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16028    bar();
16029  }
16030#pragma omp target
16031#pragma omp teams distribute parallel for simd
16032  for (int i = 0; i < 10; ++i) {
16033#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16034    bar();
16035  }
16036#pragma omp target
16037#pragma omp teams distribute parallel for simd
16038  for (int i = 0; i < 10; ++i) {
16039#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16040    bar();
16041  }
16042#pragma omp target
16043#pragma omp teams distribute parallel for simd
16044  for (int i = 0; i < 10; ++i) {
16045#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16046    ++a;
16047  }
16048#pragma omp target
16049#pragma omp teams distribute parallel for simd
16050  for (int i = 0; i < 10; ++i) {
16051#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16052    ++a;
16053  }
16054#pragma omp target
16055#pragma omp teams distribute parallel for simd
16056  for (int i = 0; i < 10; ++i) {
16057#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16058    ++a;
16059  }
16060#pragma omp target
16061#pragma omp teams distribute parallel for simd
16062  for (int i = 0; i < 10; ++i) {
16063#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16064    for (int i = 0; i < 10; ++i)
16065      ;
16066  }
16067#pragma omp target
16068#pragma omp teams distribute parallel for simd
16069  for (int i = 0; i < 10; ++i) {
16070#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16071    ++a;
16072  }
16073#pragma omp target
16074#pragma omp teams distribute parallel for simd
16075  for (int i = 0; i < 10; ++i) {
16076#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16077    ++a;
16078  }
16079#pragma omp target
16080#pragma omp teams distribute parallel for simd
16081  for (int i = 0; i < 10; ++i) {
16082#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16083    ++a;
16084  }
16085#pragma omp target
16086#pragma omp teams distribute parallel for simd
16087  for (int i = 0; i < 10; ++i) {
16088#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16089    ++a;
16090  }
16091#pragma omp target
16092#pragma omp teams distribute parallel for simd
16093  for (int i = 0; i < 10; ++i) {
16094#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16095    for (int i = 0; i < 10; ++i)
16096      ++a;
16097  }
16098#pragma omp target
16099#pragma omp teams distribute parallel for simd
16100  for (int i = 0; i < 10; ++i) {
16101#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16102    for (int i = 0; i < 10; ++i)
16103      ++a;
16104  }
16105#pragma omp target
16106#pragma omp teams distribute parallel for simd
16107  for (int i = 0; i < 10; ++i) {
16108#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16109    for (int i = 0; i < 10; ++i)
16110      ++a;
16111  }
16112#pragma omp target
16113#pragma omp teams distribute parallel for simd
16114  for (int i = 0; i < 10; ++i) {
16115#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16116    for (int i = 0; i < 10; ++i)
16117      ++a;
16118  }
16119#pragma omp target
16120#pragma omp teams distribute parallel for simd
16121  for (int i = 0; i < 10; ++i) {
16122#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16123    for (int i = 0; i < 10; ++i)
16124      ++a;
16125  }
16126#pragma omp target
16127#pragma omp teams distribute parallel for simd
16128  for (int i = 0; i < 10; ++i) {
16129#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16130    for (int i = 0; i < 10; ++i)
16131      ++a;
16132  }
16133#pragma omp target
16134#pragma omp teams distribute parallel for simd
16135  for (int i = 0; i < 10; ++i) {
16136#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16137    ++a;
16138  }
16139#pragma omp target
16140#pragma omp teams distribute parallel for simd
16141  for (int i = 0; i < 10; ++i) {
16142#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16143    for (int i = 0; i < 10; ++i)
16144      ++a;
16145  }
16146#pragma omp target
16147#pragma omp teams distribute parallel for simd
16148  for (int i = 0; i < 10; ++i) {
16149#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16150    for (int i = 0; i < 10; ++i)
16151      ++a;
16152  }
16153#pragma omp target
16154#pragma omp teams distribute parallel for simd
16155  for (int i = 0; i < 10; ++i) {
16156#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16157    for (int i = 0; i < 10; ++i)
16158      ++a;
16159  }
16160#pragma omp target
16161#pragma omp teams distribute parallel for simd
16162  for (int i = 0; i < 10; ++i) {
16163#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
16164    for (int i = 0; i < 10; ++i)
16165      ++a;
16166  }
16167
16168// TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16169#pragma omp teams distribute parallel for // expected-error {{orphaned 'omp teams distribute parallel for' directives are prohibited; perhaps you forget to enclose the directive into a target region?}}
16170  for (int i = 0; i < 10; ++i)
16171    ;
16172#pragma omp target
16173#pragma omp teams distribute parallel for
16174  for (int i = 0; i < 10; ++i) {
16175#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
16176    for (int i = 0; i < 10; ++i)
16177      ;
16178  }
16179#pragma omp target
16180#pragma omp teams distribute parallel for
16181  for (int i = 0; i < 10; ++i) {
16182#pragma omp distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
16183    for (int i = 0; i < 10; ++i)
16184      ;
16185  }
16186#pragma omp target
16187#pragma omp teams distribute parallel for
16188  for (int i = 0; i < 10; ++i) {
16189#pragma omp for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
16190    for (int i = 0; i < 10; ++i)
16191      ;
16192  }
16193#pragma omp target
16194#pragma omp teams distribute parallel for
16195  for (int i = 0; i < 10; ++i) {
16196#pragma omp simd // OK
16197    for (int i = 0; i < 10; ++i)
16198      ;
16199  }
16200#pragma omp target
16201#pragma omp teams distribute parallel for
16202  for (int i = 0; i < 10; ++i) {
16203#pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
16204    for (int i = 0; i < 10; ++i)
16205      ;
16206  }
16207#pragma omp target
16208#pragma omp teams distribute parallel for
16209  for (int i = 0; i < 10; ++i) {
16210#pragma omp parallel // OK
16211    for (int i = 0; i < 10; ++i)
16212      ;
16213  }
16214#pragma omp target
16215#pragma omp teams distribute parallel for
16216  for (int i = 0; i < 10; ++i) {
16217#pragma omp sections // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
16218    {
16219      bar();
16220    }
16221  }
16222#pragma omp target
16223#pragma omp teams distribute parallel for
16224  for (int i = 0; i < 10; ++i) {
16225#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams distribute parallel for region}}
16226    {
16227      bar();
16228    }
16229  }
16230#pragma omp target
16231#pragma omp teams distribute parallel for
16232  for (int i = 0; i < 10; ++i) {
16233#pragma omp single // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
16234    {
16235      bar();
16236    }
16237  }
16238#pragma omp target
16239#pragma omp teams distribute parallel for
16240  for (int i = 0; i < 10; ++i) {
16241#pragma omp master // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16242    {
16243      bar();
16244    }
16245  }
16246#pragma omp target
16247#pragma omp teams distribute parallel for
16248  for (int i = 0; i < 10; ++i) {
16249#pragma omp critical // OK
16250    {
16251      bar();
16252    }
16253  }
16254#pragma omp target
16255#pragma omp teams distribute parallel for
16256  for (int i = 0; i < 10; ++i) {
16257#pragma omp parallel // OK
16258    {
16259#pragma omp single
16260      {
16261 bar();
16262      }
16263    }
16264  }
16265#pragma omp target
16266#pragma omp teams distribute parallel for
16267  for (int i = 0; i < 10; ++i) {
16268#pragma omp parallel for // OK
16269    for (int i = 0; i < 10; ++i)
16270      ;
16271  }
16272#pragma omp target
16273#pragma omp teams distribute parallel for
16274  for (int i = 0; i < 10; ++i) {
16275#pragma omp parallel for simd // OK
16276    for (int i = 0; i < 10; ++i)
16277      ;
16278  }
16279#pragma omp target
16280#pragma omp teams distribute parallel for
16281  for (int i = 0; i < 10; ++i) {
16282#pragma omp parallel sections // OK
16283    {
16284      bar();
16285    }
16286  }
16287#pragma omp target
16288#pragma omp teams distribute parallel for
16289  for (int i = 0; i < 10; ++i) {
16290#pragma omp task // OK
16291    {
16292      bar();
16293    }
16294  }
16295#pragma omp target
16296#pragma omp teams distribute parallel for
16297  for (int i = 0; i < 10; ++i) {
16298#pragma omp taskyield // OK
16299    bar();
16300  }
16301#pragma omp target
16302#pragma omp teams distribute parallel for
16303  for (int i = 0; i < 10; ++i) {
16304#pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region}}
16305    bar();
16306  }
16307#pragma omp target
16308#pragma omp teams distribute parallel for
16309  for (int i = 0; i < 10; ++i) {
16310#pragma omp taskwait // OK
16311    bar();
16312  }
16313#pragma omp target
16314#pragma omp teams distribute parallel for
16315  for (int i = 0; i < 10; ++i) {
16316#pragma omp flush // OK
16317    bar();
16318  }
16319#pragma omp target
16320#pragma omp teams distribute parallel for
16321  for (int i = 0; i < 10; ++i) {
16322#pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
16323    bar();
16324  }
16325#pragma omp target
16326#pragma omp teams distribute parallel for
16327  for (int i = 0; i < 10; ++i) {
16328#pragma omp atomic // OK
16329    ++a;
16330  }
16331#pragma omp target
16332#pragma omp teams distribute parallel for
16333  for (int i = 0; i < 10; ++i) {
16334#pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
16335    ++a;
16336  }
16337#pragma omp target
16338#pragma omp teams distribute parallel for
16339  for (int i = 0; i < 10; ++i) {
16340#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target' region}}
16341    ++a;
16342  }
16343#pragma omp target
16344#pragma omp teams distribute parallel for
16345  for (int i = 0; i < 10; ++i) {
16346#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
16347    for (int i = 0; i < 10; ++i)
16348      ;
16349  }
16350#pragma omp target
16351#pragma omp teams distribute parallel for
16352  for (int i = 0; i < 10; ++i) {
16353#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
16354    ++a;
16355  }
16356#pragma omp target
16357#pragma omp teams distribute parallel for
16358  for (int i = 0; i < 10; ++i) {
16359#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
16360    ++a;
16361  }
16362#pragma omp target
16363#pragma omp teams distribute parallel for
16364  for (int i = 0; i < 10; ++i) {
16365#pragma omp teams // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
16366    ++a;
16367  }
16368#pragma omp target
16369#pragma omp teams distribute parallel for
16370  for (int i = 0; i < 10; ++i) {
16371#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
16372    ++a;
16373  }
16374#pragma omp target
16375#pragma omp teams distribute parallel for
16376  for (int i = 0; i < 10; ++i) {
16377#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
16378    for (int i = 0; i < 10; ++i)
16379      ++a;
16380  }
16381#pragma omp target
16382#pragma omp teams distribute parallel for
16383  for (int i = 0; i < 10; ++i) {
16384#pragma omp target simd // expected-error {{region cannot be nested inside 'target' region}}
16385    for (int i = 0; i < 10; ++i)
16386      ++a;
16387  }
16388#pragma omp target
16389#pragma omp teams distribute parallel for
16390  for (int i = 0; i < 10; ++i) {
16391#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
16392    for (int i = 0; i < 10; ++i)
16393      ++a;
16394  }
16395#pragma omp target
16396#pragma omp teams distribute parallel for
16397  for (int i = 0; i < 10; ++i) {
16398#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
16399    for (int i = 0; i < 10; ++i)
16400      ++a;
16401  }
16402#pragma omp target
16403#pragma omp teams distribute parallel for
16404  for (int i = 0; i < 10; ++i) {
16405#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
16406    for (int i = 0; i < 10; ++i)
16407      ++a;
16408  }
16409#pragma omp target
16410#pragma omp teams distribute parallel for
16411  for (int i = 0; i < 10; ++i) {
16412#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
16413    for (int i = 0; i < 10; ++i)
16414      ++a;
16415  }
16416#pragma omp target
16417#pragma omp teams distribute parallel for
16418  for (int i = 0; i < 10; ++i) {
16419#pragma omp target teams // expected-error {{region cannot be nested inside 'target' region}}
16420    ++a;
16421  }
16422#pragma omp target
16423#pragma omp teams distribute parallel for
16424  for (int i = 0; i < 10; ++i) {
16425#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target' region}}
16426    for (int i = 0; i < 10; ++i)
16427      ++a;
16428  }
16429#pragma omp target
16430#pragma omp teams distribute parallel for
16431  for (int i = 0; i < 10; ++i) {
16432#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target' region}}
16433    for (int i = 0; i < 10; ++i)
16434      ++a;
16435  }
16436#pragma omp target
16437#pragma omp teams distribute parallel for
16438  for (int i = 0; i < 10; ++i) {
16439#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target' region}}
16440    for (int i = 0; i < 10; ++i)
16441      ++a;
16442  }
16443#pragma omp target
16444#pragma omp teams distribute parallel for
16445  for (int i = 0; i < 10; ++i) {
16446#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target' region}}
16447    for (int i = 0; i < 10; ++i)
16448      ++a;
16449  }
16450
16451// TARGET TEAMS DIRECTIVE
16452#pragma omp target teams
16453#pragma omp parallel
16454  bar();
16455#pragma omp target teams
16456#pragma omp for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
16457  for (int i = 0; i < 10; ++i)
16458    ;
16459#pragma omp target teams
16460#pragma omp simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
16461  for (int i = 0; i < 10; ++i)
16462    ;
16463#pragma omp target teams
16464#pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
16465  for (int i = 0; i < 10; ++i)
16466    ;
16467#pragma omp target teams
16468#pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
16469  {
16470    bar();
16471  }
16472#pragma omp target teams
16473#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams region}}
16474  {
16475    bar();
16476  }
16477#pragma omp target teams
16478#pragma omp single // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
16479  bar();
16480
16481#pragma omp target teams
16482#pragma omp master // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
16483  {
16484    bar();
16485  }
16486#pragma omp target teams
16487#pragma omp critical // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
16488  {
16489    bar();
16490  }
16491#pragma omp target teams
16492#pragma omp parallel for
16493  for (int i = 0; i < 10; ++i)
16494    ;
16495#pragma omp target teams
16496#pragma omp parallel for simd
16497  for (int i = 0; i < 10; ++i)
16498    ;
16499#pragma omp target teams
16500#pragma omp parallel sections
16501  {
16502    bar();
16503  }
16504#pragma omp target teams
16505#pragma omp task // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
16506  {
16507    bar();
16508  }
16509#pragma omp target teams
16510  {
16511#pragma omp taskyield // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
16512    bar();
16513  }
16514#pragma omp target teams
16515  {
16516#pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
16517    bar();
16518  }
16519#pragma omp target teams
16520  {
16521#pragma omp taskwait // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
16522    bar();
16523  }
16524#pragma omp target teams
16525  {
16526#pragma omp flush // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
16527    bar();
16528  }
16529#pragma omp target teams
16530  {
16531#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
16532    bar();
16533  }
16534#pragma omp target teams
16535  {
16536#pragma omp atomic // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
16537    ++a;
16538  }
16539#pragma omp target teams
16540  {
16541#pragma omp target // expected-error {{region cannot be nested inside 'target teams' region}}
16542    ++a;
16543  }
16544#pragma omp target teams
16545  {
16546#pragma omp target parallel // expected-error {{region cannot be nested inside 'target teams' region}}
16547    ++a;
16548  }
16549#pragma omp target teams
16550#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
16551  for (int i = 0; i < 10; ++i)
16552    ;
16553#pragma omp target teams
16554  {
16555#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16556  }
16557#pragma omp target teams
16558  {
16559#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams' region}}
16560  }
16561#pragma omp target teams
16562  {
16563#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
16564    ++a;
16565  }
16566#pragma omp target teams
16567  {
16568#pragma omp taskloop // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
16569  for (int i = 0; i < 10; ++i)
16570    ++a;
16571  }
16572#pragma omp target teams
16573#pragma omp distribute
16574  for (int i = 0; i < 10; ++i)
16575    ;
16576#pragma omp target teams
16577  {
16578#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams' region}}
16579    ++a;
16580  }
16581#pragma omp target teams
16582#pragma omp distribute parallel for
16583  for (int i = 0; i < 10; ++i)
16584    ;
16585#pragma omp target teams
16586  {
16587#pragma omp distribute parallel for
16588  for (int i = 0; i < 10; ++i)
16589    ;
16590#pragma omp distribute parallel for
16591  for (int j = 0; j < 10; ++j)
16592    ;  
16593  }
16594#pragma omp target teams
16595  {
16596#pragma omp distribute parallel for simd
16597  for (int i = 0; i < 10; ++i)
16598    ;
16599#pragma omp distribute parallel for simd
16600  for (int j = 0; j < 10; ++j)
16601    ;  
16602  }
16603#pragma omp target teams
16604  {
16605#pragma omp distribute simd
16606  for (int i = 0; i < 10; ++i)
16607    ;
16608#pragma omp distribute simd
16609  for (int j = 0; j < 10; ++j)
16610    ;  
16611  }
16612#pragma omp target teams
16613  {
16614#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams' region}}
16615  for (int i = 0; i < 10; ++i)
16616    ;
16617  }
16618#pragma omp target teams
16619  {
16620#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
16621  for (int i = 0; i < 10; ++i)
16622    ;
16623  }
16624#pragma omp target teams
16625  {
16626#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
16627  for (int i = 0; i < 10; ++i)
16628    ;
16629  }
16630#pragma omp target teams
16631  {
16632#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
16633  for (int i = 0; i < 10; ++i)
16634    ;
16635  }
16636#pragma omp target teams
16637  {
16638#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
16639  for (int i = 0; i < 10; ++i)
16640    ;
16641  }
16642#pragma omp target teams
16643  {
16644#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams' region}}
16645    a++;
16646  }
16647#pragma omp target teams
16648  {
16649#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams' region}}
16650  for (int i = 0; i < 10; ++i)
16651    ;
16652  }
16653#pragma omp target teams
16654  {
16655#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams' region}}
16656  for (int i = 0; i < 10; ++i)
16657    ;
16658  }
16659#pragma omp target teams
16660  {
16661#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams' region}}
16662  for (int i = 0; i < 10; ++i)
16663    ;
16664  }
16665#pragma omp target teams
16666  {
16667#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams' region}}
16668  for (int i = 0; i < 10; ++i)
16669    ;
16670  }
16671
16672// TARGET TEAMS DISTRIBUTE DIRECTIVE
16673#pragma omp target teams distribute // OK
16674  for (int i = 0; i < 10; ++i)
16675    ;
16676#pragma omp target teams distribute
16677  for (int i = 0; i < 10; ++i) {
16678#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
16679    for (int i = 0; i < 10; ++i)
16680      ;
16681  }
16682#pragma omp target teams distribute
16683  for (int i = 0; i < 10; ++i) {
16684#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
16685    for (int i = 0; i < 10; ++i)
16686      ;
16687  }
16688#pragma omp target teams distribute
16689  for (int i = 0; i < 10; ++i) {
16690#pragma omp for // OK
16691    for (int i = 0; i < 10; ++i)
16692      ;
16693  }
16694#pragma omp target teams distribute
16695  for (int i = 0; i < 10; ++i) {
16696#pragma omp simd // OK
16697    for (int i = 0; i < 10; ++i)
16698      ;
16699  }
16700#pragma omp target teams distribute
16701  for (int i = 0; i < 10; ++i) {
16702#pragma omp for simd // OK
16703    for (int i = 0; i < 10; ++i)
16704      ;
16705  }
16706#pragma omp target teams distribute
16707  for (int i = 0; i < 10; ++i) {
16708#pragma omp parallel // OK
16709    for (int i = 0; i < 10; ++i)
16710      ;
16711  }
16712#pragma omp target teams distribute
16713  for (int i = 0; i < 10; ++i) {
16714#pragma omp sections // OK
16715    {
16716      bar();
16717    }
16718  }
16719#pragma omp target teams distribute
16720  for (int i = 0; i < 10; ++i) {
16721#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute region}}
16722    {
16723      bar();
16724    }
16725  }
16726#pragma omp target teams distribute
16727  for (int i = 0; i < 10; ++i) {
16728#pragma omp single // OK
16729    {
16730      bar();
16731    }
16732  }
16733#pragma omp target teams distribute
16734  for (int i = 0; i < 10; ++i) {
16735#pragma omp master // OK
16736    {
16737      bar();
16738    }
16739  }
16740#pragma omp target teams distribute
16741  for (int i = 0; i < 10; ++i) {
16742#pragma omp critical // OK
16743    {
16744      bar();
16745    }
16746  }
16747#pragma omp target teams distribute
16748  for (int i = 0; i < 10; ++i) {
16749#pragma omp parallel // OK
16750    {
16751#pragma omp single
16752      {
16753 bar();
16754      }
16755    }
16756  }
16757#pragma omp target teams distribute
16758  for (int i = 0; i < 10; ++i) {
16759#pragma omp parallel for // OK
16760    for (int i = 0; i < 10; ++i)
16761      ;
16762  }
16763#pragma omp target teams distribute
16764  for (int i = 0; i < 10; ++i) {
16765#pragma omp parallel for simd // OK
16766    for (int i = 0; i < 10; ++i)
16767      ;
16768  }
16769#pragma omp target teams distribute
16770  for (int i = 0; i < 10; ++i) {
16771#pragma omp parallel sections // OK
16772    {
16773      bar();
16774    }
16775  }
16776#pragma omp target teams distribute
16777  for (int i = 0; i < 10; ++i) {
16778#pragma omp task // OK
16779    {
16780      bar();
16781    }
16782  }
16783#pragma omp target teams distribute
16784  for (int i = 0; i < 10; ++i) {
16785#pragma omp taskyield // OK
16786    bar();
16787  }
16788#pragma omp target teams distribute
16789  for (int i = 0; i < 10; ++i) {
16790#pragma omp barrier // OK
16791    bar();
16792  }
16793#pragma omp target teams distribute
16794  for (int i = 0; i < 10; ++i) {
16795#pragma omp taskwait // OK
16796    bar();
16797  }
16798#pragma omp target teams distribute
16799  for (int i = 0; i < 10; ++i) {
16800#pragma omp flush // OK
16801    bar();
16802  }
16803#pragma omp target teams distribute
16804  for (int i = 0; i < 10; ++i) {
16805#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
16806    bar();
16807  }
16808#pragma omp target teams distribute
16809  for (int i = 0; i < 10; ++i) {
16810#pragma omp atomic // OK
16811    ++a;
16812  }
16813#pragma omp target teams distribute
16814  for (int i = 0; i < 10; ++i) {
16815#pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16816    ++a;
16817  }
16818#pragma omp target teams distribute
16819  for (int i = 0; i < 10; ++i) {
16820#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16821    ++a;
16822  }
16823#pragma omp target teams distribute
16824  for (int i = 0; i < 10; ++i) {
16825#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16826    for (int i = 0; i < 10; ++i)
16827      ;
16828  }
16829#pragma omp target teams distribute
16830  for (int i = 0; i < 10; ++i) {
16831#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16832    ++a;
16833  }
16834#pragma omp target teams distribute
16835  for (int i = 0; i < 10; ++i) {
16836#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16837    ++a;
16838  }
16839#pragma omp target teams distribute
16840  for (int i = 0; i < 10; ++i) {
16841#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
16842    ++a;
16843  }
16844#pragma omp target teams distribute
16845  for (int i = 0; i < 10; ++i) {
16846#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16847    ++a;
16848  }
16849#pragma omp target teams distribute
16850  for (int i = 0; i < 10; ++i) {
16851#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
16852    for (int i = 0; i < 10; ++i)
16853      ++a;
16854  }
16855#pragma omp target teams distribute
16856  for (int i = 0; i < 10; ++i) {
16857#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16858    for (int i = 0; i < 10; ++i)
16859      ++a;
16860  }
16861#pragma omp target teams distribute
16862  for (int i = 0; i < 10; ++i) {
16863#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
16864    for (int i = 0; i < 10; ++i)
16865      ++a;
16866  }
16867#pragma omp target teams distribute
16868  for (int i = 0; i < 10; ++i) {
16869#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
16870    for (int i = 0; i < 10; ++i)
16871      ++a;
16872  }
16873#pragma omp target teams distribute
16874  for (int i = 0; i < 10; ++i) {
16875#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
16876    for (int i = 0; i < 10; ++i)
16877      ++a;
16878  }
16879#pragma omp target teams distribute
16880  for (int i = 0; i < 10; ++i) {
16881#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
16882    for (int i = 0; i < 10; ++i)
16883      ++a;
16884  }
16885#pragma omp target teams distribute
16886  for (int i = 0; i < 10; ++i) {
16887#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16888    ++a;
16889  }
16890#pragma omp target teams distribute
16891  for (int i = 0; i < 10; ++i) {
16892#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16893    for (int i = 0; i < 10; ++i)
16894      ++a;
16895  }
16896#pragma omp target teams distribute
16897  for (int i = 0; i < 10; ++i) {
16898#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16899    for (int i = 0; i < 10; ++i)
16900      ++a;
16901  }
16902#pragma omp target teams distribute
16903  for (int i = 0; i < 10; ++i) {
16904#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16905    for (int i = 0; i < 10; ++i)
16906      ++a;
16907  }
16908#pragma omp target teams distribute
16909  for (int i = 0; i < 10; ++i) {
16910#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute' region}}
16911    for (int i = 0; i < 10; ++i)
16912      ++a;
16913  }
16914
16915// TARGET TEAMS DISTRIBUTE PARALLEL FOR DIRECTIVE
16916#pragma omp target teams distribute parallel for // OK
16917  for (int i = 0; i < 10; ++i)
16918    ;
16919#pragma omp target teams distribute parallel for
16920  for (int i = 0; i < 10; ++i) {
16921#pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
16922    for (int i = 0; i < 10; ++i)
16923      ;
16924  }
16925#pragma omp target teams distribute parallel for
16926  for (int i = 0; i < 10; ++i) {
16927#pragma omp distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
16928    for (int i = 0; i < 10; ++i)
16929      ;
16930  }
16931#pragma omp target teams distribute parallel for
16932  for (int i = 0; i < 10; ++i) {
16933#pragma omp for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
16934    for (int i = 0; i < 10; ++i)
16935      ;
16936  }
16937#pragma omp target teams distribute parallel for
16938  for (int i = 0; i < 10; ++i) {
16939#pragma omp simd // OK
16940    for (int i = 0; i < 10; ++i)
16941      ;
16942  }
16943#pragma omp target teams distribute parallel for
16944  for (int i = 0; i < 10; ++i) {
16945#pragma omp for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
16946    for (int i = 0; i < 10; ++i)
16947      ;
16948  }
16949#pragma omp target teams distribute parallel for
16950  for (int i = 0; i < 10; ++i) {
16951#pragma omp parallel // OK
16952    for (int i = 0; i < 10; ++i)
16953      ;
16954  }
16955#pragma omp target teams distribute parallel for
16956  for (int i = 0; i < 10; ++i) {
16957#pragma omp sections // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
16958    {
16959      bar();
16960    }
16961  }
16962#pragma omp target teams distribute parallel for
16963  for (int i = 0; i < 10; ++i) {
16964#pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target teams distribute parallel for region}}
16965    {
16966      bar();
16967    }
16968  }
16969#pragma omp target teams distribute parallel for
16970  for (int i = 0; i < 10; ++i) {
16971#pragma omp single // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
16972    {
16973      bar();
16974    }
16975  }
16976#pragma omp target teams distribute parallel for
16977  for (int i = 0; i < 10; ++i) {
16978#pragma omp master // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
16979    {
16980      bar();
16981    }
16982  }
16983#pragma omp target teams distribute parallel for
16984  for (int i = 0; i < 10; ++i) {
16985#pragma omp critical // OK
16986    {
16987      bar();
16988    }
16989  }
16990#pragma omp target teams distribute parallel for
16991  for (int i = 0; i < 10; ++i) {
16992#pragma omp parallel // OK
16993    {
16994#pragma omp single
16995      {
16996 bar();
16997      }
16998    }
16999  }
17000#pragma omp target teams distribute parallel for
17001  for (int i = 0; i < 10; ++i) {
17002#pragma omp parallel for // OK
17003    for (int i = 0; i < 10; ++i)
17004      ;
17005  }
17006#pragma omp target teams distribute parallel for
17007  for (int i = 0; i < 10; ++i) {
17008#pragma omp parallel for simd // OK
17009    for (int i = 0; i < 10; ++i)
17010      ;
17011  }
17012#pragma omp target teams distribute parallel for
17013  for (int i = 0; i < 10; ++i) {
17014#pragma omp parallel sections // OK
17015    {
17016      bar();
17017    }
17018  }
17019#pragma omp target teams distribute parallel for
17020  for (int i = 0; i < 10; ++i) {
17021#pragma omp task // OK
17022    {
17023      bar();
17024    }
17025  }
17026#pragma omp target teams distribute parallel for
17027  for (int i = 0; i < 10; ++i) {
17028#pragma omp taskyield // OK
17029    bar();
17030  }
17031#pragma omp target teams distribute parallel for
17032  for (int i = 0; i < 10; ++i) {
17033#pragma omp barrier // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region}}
17034    bar();
17035  }
17036#pragma omp target teams distribute parallel for
17037  for (int i = 0; i < 10; ++i) {
17038#pragma omp taskwait // OK
17039    bar();
17040  }
17041#pragma omp target teams distribute parallel for
17042  for (int i = 0; i < 10; ++i) {
17043#pragma omp flush // OK
17044    bar();
17045  }
17046#pragma omp target teams distribute parallel for
17047  for (int i = 0; i < 10; ++i) {
17048#pragma omp ordered // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
17049    bar();
17050  }
17051#pragma omp target teams distribute parallel for
17052  for (int i = 0; i < 10; ++i) {
17053#pragma omp atomic // OK
17054    ++a;
17055  }
17056#pragma omp target teams distribute parallel for
17057  for (int i = 0; i < 10; ++i) {
17058#pragma omp target // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17059    ++a;
17060  }
17061#pragma omp target teams distribute parallel for
17062  for (int i = 0; i < 10; ++i) {
17063#pragma omp target parallel  // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17064    ++a;
17065  }
17066#pragma omp target teams distribute parallel for
17067  for (int i = 0; i < 10; ++i) {
17068#pragma omp target parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17069    for (int i = 0; i < 10; ++i)
17070      ;
17071  }
17072#pragma omp target teams distribute parallel for
17073  for (int i = 0; i < 10; ++i) {
17074#pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17075    ++a;
17076  }
17077#pragma omp target teams distribute parallel for
17078  for (int i = 0; i < 10; ++i) {
17079#pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17080    ++a;
17081  }
17082#pragma omp target teams distribute parallel for
17083  for (int i = 0; i < 10; ++i) {
17084#pragma omp teams // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
17085    ++a;
17086  }
17087#pragma omp target teams distribute parallel for
17088  for (int i = 0; i < 10; ++i) {
17089#pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17090    ++a;
17091  }
17092#pragma omp target teams distribute parallel for
17093  for (int i = 0; i < 10; ++i) {
17094#pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
17095    for (int i = 0; i < 10; ++i)
17096      ++a;
17097  }
17098#pragma omp target teams distribute parallel for
17099  for (int i = 0; i < 10; ++i) {
17100#pragma omp target simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17101    for (int i = 0; i < 10; ++i)
17102      ++a;
17103  }
17104#pragma omp target teams distribute parallel for
17105  for (int i = 0; i < 10; ++i) {
17106#pragma omp teams distribute // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute' directive into a target region?}}
17107    for (int i = 0; i < 10; ++i)
17108      ++a;
17109  }
17110#pragma omp target teams distribute parallel for
17111  for (int i = 0; i < 10; ++i) {
17112#pragma omp teams distribute simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute simd' directive into a target region?}}
17113    for (int i = 0; i < 10; ++i)
17114      ++a;
17115  }
17116#pragma omp target teams distribute parallel for
17117  for (int i = 0; i < 10; ++i) {
17118#pragma omp teams distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for simd' directive into a target region?}}
17119    for (int i = 0; i < 10; ++i)
17120      ++a;
17121  }
17122#pragma omp target teams distribute parallel for
17123  for (int i = 0; i < 10; ++i) {
17124#pragma omp teams distribute parallel for // expected-error {{region cannot be closely nested inside 'target teams distribute parallel for' region; perhaps you forget to enclose 'omp teams distribute parallel for' directive into a target region?}}
17125    for (int i = 0; i < 10; ++i)
17126      ++a;
17127  }
17128#pragma omp target teams distribute parallel for
17129  for (int i = 0; i < 10; ++i) {
17130#pragma omp target teams // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17131    ++a;
17132  }
17133#pragma omp target teams distribute parallel for
17134  for (int i = 0; i < 10; ++i) {
17135#pragma omp target teams distribute // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17136    for (int i = 0; i < 10; ++i)
17137      ++a;
17138  }
17139#pragma omp target teams distribute parallel for
17140  for (int i = 0; i < 10; ++i) {
17141#pragma omp target teams distribute parallel for // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17142    for (int i = 0; i < 10; ++i)
17143      ++a;
17144  }
17145#pragma omp target teams distribute parallel for
17146  for (int i = 0; i < 10; ++i) {
17147#pragma omp target teams distribute parallel for simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17148    for (int i = 0; i < 10; ++i)
17149      ++a;
17150  }
17151#pragma omp target teams distribute parallel for
17152  for (int i = 0; i < 10; ++i) {
17153#pragma omp target teams distribute simd // expected-error {{region cannot be nested inside 'target teams distribute parallel for' region}}
17154    for (int i = 0; i < 10; ++i)
17155      ++a;
17156  }
17157
17158// TARGET TEAMS DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
17159#pragma omp target teams distribute parallel for simd // OK
17160  for (int i = 0; i < 10; ++i)
17161    ;
17162#pragma omp target teams distribute parallel for simd
17163  for (int i = 0; i < 10; ++i) {
17164#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17165    for (int i = 0; i < 10; ++i)
17166      ;
17167  }
17168#pragma omp target teams distribute parallel for simd
17169  for (int i = 0; i < 10; ++i) {
17170#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17171    for (int i = 0; i < 10; ++i)
17172      ;
17173  }
17174#pragma omp target teams distribute parallel for simd
17175  for (int i = 0; i < 10; ++i) {
17176#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17177    for (int i = 0; i < 10; ++i)
17178      ;
17179  }
17180#pragma omp target teams distribute parallel for simd
17181  for (int i = 0; i < 10; ++i) {
17182#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17183    for (int i = 0; i < 10; ++i)
17184      ;
17185  }
17186#pragma omp target teams distribute parallel for simd
17187  for (int i = 0; i < 10; ++i) {
17188#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17189    for (int i = 0; i < 10; ++i)
17190      ;
17191  }
17192#pragma omp target teams distribute parallel for simd
17193  for (int i = 0; i < 10; ++i) {
17194#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17195    for (int i = 0; i < 10; ++i)
17196      ;
17197  }
17198#pragma omp target teams distribute parallel for simd
17199  for (int i = 0; i < 10; ++i) {
17200#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17201    {
17202      bar();
17203    }
17204  }
17205#pragma omp target teams distribute parallel for simd
17206  for (int i = 0; i < 10; ++i) {
17207#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17208    {
17209      bar();
17210    }
17211  }
17212#pragma omp target teams distribute parallel for simd
17213  for (int i = 0; i < 10; ++i) {
17214#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17215    {
17216      bar();
17217    }
17218  }
17219#pragma omp target teams distribute parallel for simd
17220  for (int i = 0; i < 10; ++i) {
17221#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17222    {
17223      bar();
17224    }
17225  }
17226#pragma omp target teams distribute parallel for simd
17227  for (int i = 0; i < 10; ++i) {
17228#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17229    {
17230      bar();
17231    }
17232  }
17233#pragma omp target teams distribute parallel for simd
17234  for (int i = 0; i < 10; ++i) {
17235#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17236    {
17237#pragma omp single
17238      {
17239 bar();
17240      }
17241    }
17242  }
17243#pragma omp target teams distribute parallel for simd
17244  for (int i = 0; i < 10; ++i) {
17245#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17246    for (int i = 0; i < 10; ++i)
17247      ;
17248  }
17249#pragma omp target teams distribute parallel for simd
17250  for (int i = 0; i < 10; ++i) {
17251#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17252    for (int i = 0; i < 10; ++i)
17253      ;
17254  }
17255#pragma omp target teams distribute parallel for simd
17256  for (int i = 0; i < 10; ++i) {
17257#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17258    {
17259      bar();
17260    }
17261  }
17262#pragma omp target teams distribute parallel for simd
17263  for (int i = 0; i < 10; ++i) {
17264#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17265    {
17266      bar();
17267    }
17268  }
17269#pragma omp target teams distribute parallel for simd
17270  for (int i = 0; i < 10; ++i) {
17271#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17272    bar();
17273  }
17274#pragma omp target teams distribute parallel for simd
17275  for (int i = 0; i < 10; ++i) {
17276#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17277    bar();
17278  }
17279#pragma omp target teams distribute parallel for simd
17280  for (int i = 0; i < 10; ++i) {
17281#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17282    bar();
17283  }
17284#pragma omp target teams distribute parallel for simd
17285  for (int i = 0; i < 10; ++i) {
17286#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17287    bar();
17288  }
17289#pragma omp target teams distribute parallel for simd
17290  for (int i = 0; i < 10; ++i) {
17291#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17292    bar();
17293  }
17294#pragma omp target teams distribute parallel for simd
17295  for (int i = 0; i < 10; ++i) {
17296#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
17297    ++a;
17298  }
17299#pragma omp target teams distribute parallel for simd
17300  for (int i = 0; i < 10; ++i) {
17301#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17302    ++a;
17303  }
17304#pragma omp target teams distribute parallel for simd
17305  for (int i = 0; i < 10; ++i) {
17306#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17307    ++a;
17308  }
17309#pragma omp target teams distribute parallel for simd
17310  for (int i = 0; i < 10; ++i) {
17311#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17312    for (int i = 0; i < 10; ++i)
17313      ;
17314  }
17315#pragma omp target teams distribute parallel for simd
17316  for (int i = 0; i < 10; ++i) {
17317#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17318    ++a;
17319  }
17320#pragma omp target teams distribute parallel for simd
17321  for (int i = 0; i < 10; ++i) {
17322#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17323    ++a;
17324  }
17325#pragma omp target teams distribute parallel for simd
17326  for (int i = 0; i < 10; ++i) {
17327#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17328    ++a;
17329  }
17330#pragma omp target teams distribute parallel for simd
17331  for (int i = 0; i < 10; ++i) {
17332#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17333    ++a;
17334  }
17335#pragma omp target teams distribute parallel for simd
17336  for (int i = 0; i < 10; ++i) {
17337#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17338    for (int i = 0; i < 10; ++i)
17339      ++a;
17340  }
17341#pragma omp target teams distribute parallel for simd
17342  for (int i = 0; i < 10; ++i) {
17343#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17344    for (int i = 0; i < 10; ++i)
17345      ++a;
17346  }
17347#pragma omp target teams distribute parallel for simd
17348  for (int i = 0; i < 10; ++i) {
17349#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17350    for (int i = 0; i < 10; ++i)
17351      ++a;
17352  }
17353#pragma omp target teams distribute parallel for simd
17354  for (int i = 0; i < 10; ++i) {
17355#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17356    for (int i = 0; i < 10; ++i)
17357      ++a;
17358  }
17359#pragma omp target teams distribute parallel for simd
17360  for (int i = 0; i < 10; ++i) {
17361#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17362    for (int i = 0; i < 10; ++i)
17363      ++a;
17364  }
17365#pragma omp target teams distribute parallel for simd
17366  for (int i = 0; i < 10; ++i) {
17367#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17368    for (int i = 0; i < 10; ++i)
17369      ;
17370  }
17371#pragma omp target teams distribute parallel for simd
17372  for (int i = 0; i < 10; ++i) {
17373#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17374    a++;
17375  }
17376#pragma omp target teams distribute parallel for simd
17377  for (int i = 0; i < 10; ++i) {
17378#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17379    for (int i = 0; i < 10; ++i)
17380      ;
17381  }
17382#pragma omp target teams distribute parallel for simd
17383  for (int i = 0; i < 10; ++i) {
17384#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17385    for (int i = 0; i < 10; ++i)
17386      ;
17387  }
17388#pragma omp target teams distribute parallel for simd
17389  for (int i = 0; i < 10; ++i) {
17390#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17391    for (int i = 0; i < 10; ++i)
17392      ;
17393  }
17394#pragma omp target teams distribute parallel for simd
17395  for (int i = 0; i < 10; ++i) {
17396#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17397    for (int i = 0; i < 10; ++i)
17398      ;
17399  }
17400
17401// TARGET TEAMS DISTRIBUTE SIMD DIRECTIVE
17402#pragma omp target teams distribute simd // OK
17403  for (int i = 0; i < 10; ++i)
17404    ;
17405#pragma omp target teams distribute simd
17406  for (int i = 0; i < 10; ++i) {
17407#pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17408    for (int i = 0; i < 10; ++i)
17409      ;
17410  }
17411#pragma omp target teams distribute simd
17412  for (int i = 0; i < 10; ++i) {
17413#pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17414    for (int i = 0; i < 10; ++i)
17415      ;
17416  }
17417#pragma omp target teams distribute simd
17418  for (int i = 0; i < 10; ++i) {
17419#pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17420    for (int i = 0; i < 10; ++i)
17421      ;
17422  }
17423#pragma omp target teams distribute simd
17424  for (int i = 0; i < 10; ++i) {
17425#pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
17426    for (int i = 0; i < 10; ++i)
17427      ;
17428  }
17429#pragma omp target teams distribute simd
17430  for (int i = 0; i < 10; ++i) {
17431#pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17432    for (int i = 0; i < 10; ++i)
17433      ;
17434  }
17435#pragma omp target teams distribute simd
17436  for (int i = 0; i < 10; ++i) {
17437#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17438    for (int i = 0; i < 10; ++i)
17439      ;
17440  }
17441#pragma omp target teams distribute simd
17442  for (int i = 0; i < 10; ++i) {
17443#pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17444    {
17445      bar();
17446    }
17447  }
17448#pragma omp target teams distribute simd
17449  for (int i = 0; i < 10; ++i) {
17450#pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17451    {
17452      bar();
17453    }
17454  }
17455#pragma omp target teams distribute simd
17456  for (int i = 0; i < 10; ++i) {
17457#pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17458    {
17459      bar();
17460    }
17461  }
17462#pragma omp target teams distribute simd
17463  for (int i = 0; i < 10; ++i) {
17464#pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17465    {
17466      bar();
17467    }
17468  }
17469#pragma omp target teams distribute simd
17470  for (int i = 0; i < 10; ++i) {
17471#pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17472    {
17473      bar();
17474    }
17475  }
17476#pragma omp target teams distribute simd
17477  for (int i = 0; i < 10; ++i) {
17478#pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17479    {
17480#pragma omp single
17481      {
17482 bar();
17483      }
17484    }
17485  }
17486#pragma omp target teams distribute simd
17487  for (int i = 0; i < 10; ++i) {
17488#pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17489    for (int i = 0; i < 10; ++i)
17490      ;
17491  }
17492#pragma omp target teams distribute simd
17493  for (int i = 0; i < 10; ++i) {
17494#pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17495    for (int i = 0; i < 10; ++i)
17496      ;
17497  }
17498#pragma omp target teams distribute simd
17499  for (int i = 0; i < 10; ++i) {
17500#pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17501    {
17502      bar();
17503    }
17504  }
17505#pragma omp target teams distribute simd
17506  for (int i = 0; i < 10; ++i) {
17507#pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17508    {
17509      bar();
17510    }
17511  }
17512#pragma omp target teams distribute simd
17513  for (int i = 0; i < 10; ++i) {
17514#pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17515    bar();
17516  }
17517#pragma omp target teams distribute simd
17518  for (int i = 0; i < 10; ++i) {
17519#pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17520    bar();
17521  }
17522#pragma omp target teams distribute simd
17523  for (int i = 0; i < 10; ++i) {
17524#pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17525    bar();
17526  }
17527#pragma omp target teams distribute simd
17528  for (int i = 0; i < 10; ++i) {
17529#pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17530    bar();
17531  }
17532#pragma omp target teams distribute simd
17533  for (int i = 0; i < 10; ++i) {
17534#pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17535    bar();
17536  }
17537#pragma omp target teams distribute simd
17538  for (int i = 0; i < 10; ++i) {
17539#pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}OK
17540    ++a;
17541  }
17542#pragma omp target teams distribute simd
17543  for (int i = 0; i < 10; ++i) {
17544#pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17545    ++a;
17546  }
17547#pragma omp target teams distribute simd
17548  for (int i = 0; i < 10; ++i) {
17549#pragma omp target parallel  // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17550    ++a;
17551  }
17552#pragma omp target teams distribute simd
17553  for (int i = 0; i < 10; ++i) {
17554#pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17555    for (int i = 0; i < 10; ++i)
17556      ;
17557  }
17558#pragma omp target teams distribute simd
17559  for (int i = 0; i < 10; ++i) {
17560#pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17561    ++a;
17562  }
17563#pragma omp target teams distribute simd
17564  for (int i = 0; i < 10; ++i) {
17565#pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17566    ++a;
17567  }
17568#pragma omp target teams distribute simd
17569  for (int i = 0; i < 10; ++i) {
17570#pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17571    ++a;
17572  }
17573#pragma omp target teams distribute simd
17574  for (int i = 0; i < 10; ++i) {
17575#pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17576    ++a;
17577  }
17578#pragma omp target teams distribute simd
17579  for (int i = 0; i < 10; ++i) {
17580#pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17581    for (int i = 0; i < 10; ++i)
17582      ++a;
17583  }
17584#pragma omp target teams distribute simd
17585  for (int i = 0; i < 10; ++i) {
17586#pragma omp target simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17587    for (int i = 0; i < 10; ++i)
17588      ++a;
17589  }
17590#pragma omp target teams distribute simd
17591  for (int i = 0; i < 10; ++i) {
17592#pragma omp teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17593    for (int i = 0; i < 10; ++i)
17594      ++a;
17595  }
17596#pragma omp target teams distribute simd
17597  for (int i = 0; i < 10; ++i) {
17598#pragma omp teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17599    for (int i = 0; i < 10; ++i)
17600      ++a;
17601  }
17602#pragma omp target teams distribute simd
17603  for (int i = 0; i < 10; ++i) {
17604#pragma omp teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17605    for (int i = 0; i < 10; ++i)
17606      ++a;
17607  }
17608#pragma omp target teams distribute simd
17609  for (int i = 0; i < 10; ++i) {
17610#pragma omp teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17611    for (int i = 0; i < 10; ++i)
17612      ;
17613  }
17614#pragma omp target teams distribute simd
17615  for (int i = 0; i < 10; ++i) {
17616#pragma omp target teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17617    a++;
17618  }
17619#pragma omp target teams distribute simd
17620  for (int i = 0; i < 10; ++i) {
17621#pragma omp target teams distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17622    for (int i = 0; i < 10; ++i)
17623      ;
17624  }
17625#pragma omp target teams distribute simd
17626  for (int i = 0; i < 10; ++i) {
17627#pragma omp target teams distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17628    for (int i = 0; i < 10; ++i)
17629      ;
17630  }
17631#pragma omp target teams distribute simd
17632  for (int i = 0; i < 10; ++i) {
17633#pragma omp target teams distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17634    for (int i = 0; i < 10; ++i)
17635      ;
17636  }
17637#pragma omp target teams distribute simd
17638  for (int i = 0; i < 10; ++i) {
17639#pragma omp target teams distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
17640    for (int i = 0; i < 10; ++i)
17641      ;
17642  }
17643
17644  return foo<int>();
17645}
17646
17647