1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2*67e74705SXin Li
3*67e74705SXin Li void bar();
4*67e74705SXin Li
5*67e74705SXin Li template <class T>
foo()6*67e74705SXin Li void foo() {
7*67e74705SXin Li T a = T();
8*67e74705SXin Li // PARALLEL DIRECTIVE
9*67e74705SXin Li #pragma omp parallel
10*67e74705SXin Li #pragma omp for
11*67e74705SXin Li for (int i = 0; i < 10; ++i)
12*67e74705SXin Li ;
13*67e74705SXin Li #pragma omp parallel
14*67e74705SXin Li #pragma omp simd
15*67e74705SXin Li for (int i = 0; i < 10; ++i)
16*67e74705SXin Li ;
17*67e74705SXin Li #pragma omp parallel
18*67e74705SXin Li #pragma omp for simd
19*67e74705SXin Li for (int i = 0; i < 10; ++i)
20*67e74705SXin Li ;
21*67e74705SXin Li #pragma omp parallel
22*67e74705SXin Li #pragma omp sections
23*67e74705SXin Li {
24*67e74705SXin Li bar();
25*67e74705SXin Li }
26*67e74705SXin Li #pragma omp parallel
27*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
28*67e74705SXin Li {
29*67e74705SXin Li bar();
30*67e74705SXin Li }
31*67e74705SXin Li #pragma omp parallel
32*67e74705SXin Li #pragma omp single
33*67e74705SXin Li bar();
34*67e74705SXin Li
35*67e74705SXin Li #pragma omp parallel
36*67e74705SXin Li #pragma omp master
37*67e74705SXin Li {
38*67e74705SXin Li bar();
39*67e74705SXin Li }
40*67e74705SXin Li #pragma omp parallel
41*67e74705SXin Li #pragma omp critical
42*67e74705SXin Li {
43*67e74705SXin Li bar();
44*67e74705SXin Li }
45*67e74705SXin Li #pragma omp parallel
46*67e74705SXin Li #pragma omp parallel for
47*67e74705SXin Li for (int i = 0; i < 10; ++i)
48*67e74705SXin Li ;
49*67e74705SXin Li #pragma omp parallel
50*67e74705SXin Li #pragma omp parallel for simd
51*67e74705SXin Li for (int i = 0; i < 10; ++i)
52*67e74705SXin Li ;
53*67e74705SXin Li #pragma omp parallel
54*67e74705SXin Li #pragma omp parallel sections
55*67e74705SXin Li {
56*67e74705SXin Li bar();
57*67e74705SXin Li }
58*67e74705SXin Li #pragma omp parallel
59*67e74705SXin Li #pragma omp task
60*67e74705SXin Li {
61*67e74705SXin Li bar();
62*67e74705SXin Li }
63*67e74705SXin Li #pragma omp parallel
64*67e74705SXin Li {
65*67e74705SXin Li #pragma omp taskyield
66*67e74705SXin Li bar();
67*67e74705SXin Li }
68*67e74705SXin Li #pragma omp parallel
69*67e74705SXin Li {
70*67e74705SXin Li #pragma omp barrier
71*67e74705SXin Li bar();
72*67e74705SXin Li }
73*67e74705SXin Li #pragma omp parallel
74*67e74705SXin Li {
75*67e74705SXin Li #pragma omp taskwait
76*67e74705SXin Li bar();
77*67e74705SXin Li }
78*67e74705SXin Li #pragma omp parallel
79*67e74705SXin Li {
80*67e74705SXin Li #pragma omp flush
81*67e74705SXin Li bar();
82*67e74705SXin Li }
83*67e74705SXin Li #pragma omp parallel
84*67e74705SXin Li {
85*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
86*67e74705SXin Li bar();
87*67e74705SXin Li }
88*67e74705SXin Li #pragma omp parallel
89*67e74705SXin Li {
90*67e74705SXin Li #pragma omp atomic
91*67e74705SXin Li ++a;
92*67e74705SXin Li }
93*67e74705SXin Li #pragma omp parallel
94*67e74705SXin Li {
95*67e74705SXin Li #pragma omp target
96*67e74705SXin Li ++a;
97*67e74705SXin Li }
98*67e74705SXin Li #pragma omp parallel
99*67e74705SXin Li {
100*67e74705SXin Li #pragma omp target parallel
101*67e74705SXin Li ++a;
102*67e74705SXin Li }
103*67e74705SXin Li #pragma omp parallel
104*67e74705SXin Li {
105*67e74705SXin Li #pragma omp target parallel for
106*67e74705SXin Li for (int i = 0; i < 10; ++i)
107*67e74705SXin Li ;
108*67e74705SXin Li }
109*67e74705SXin Li #pragma omp parallel
110*67e74705SXin Li {
111*67e74705SXin Li #pragma omp target enter data map(to: a)
112*67e74705SXin Li ++a;
113*67e74705SXin Li }
114*67e74705SXin Li #pragma omp parallel
115*67e74705SXin Li {
116*67e74705SXin Li #pragma omp target exit data map(from: a)
117*67e74705SXin Li ++a;
118*67e74705SXin Li }
119*67e74705SXin Li #pragma omp parallel
120*67e74705SXin Li {
121*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
122*67e74705SXin Li ++a;
123*67e74705SXin Li }
124*67e74705SXin Li #pragma omp parallel
125*67e74705SXin Li {
126*67e74705SXin Li #pragma omp taskloop
127*67e74705SXin Li for (int i = 0; i < 10; ++i)
128*67e74705SXin Li ++a;
129*67e74705SXin Li }
130*67e74705SXin Li #pragma omp parallel
131*67e74705SXin Li {
132*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
133*67e74705SXin Li for (int i = 0; i < 10; ++i)
134*67e74705SXin Li ;
135*67e74705SXin Li }
136*67e74705SXin Li #pragma omp parallel
137*67e74705SXin Li {
138*67e74705SXin Li #pragma omp target update to(a)
139*67e74705SXin Li }
140*67e74705SXin Li #pragma omp parallel
141*67e74705SXin Li {
142*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
143*67e74705SXin Li for (int i = 0; i < 10; ++i)
144*67e74705SXin Li ;
145*67e74705SXin Li }
146*67e74705SXin Li #pragma omp parallel
147*67e74705SXin Li {
148*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
149*67e74705SXin Li for (int i = 0; i < 10; ++i)
150*67e74705SXin Li ;
151*67e74705SXin Li }
152*67e74705SXin Li #pragma omp parallel
153*67e74705SXin Li {
154*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
155*67e74705SXin Li for (int i = 0; i < 10; ++i)
156*67e74705SXin Li ;
157*67e74705SXin Li }
158*67e74705SXin Li
159*67e74705SXin Li // SIMD DIRECTIVE
160*67e74705SXin Li #pragma omp simd
161*67e74705SXin Li for (int i = 0; i < 10; ++i) {
162*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
163*67e74705SXin Li for (int i = 0; i < 10; ++i)
164*67e74705SXin Li ;
165*67e74705SXin Li }
166*67e74705SXin Li #pragma omp simd
167*67e74705SXin Li for (int i = 0; i < 10; ++i) {
168*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
169*67e74705SXin Li for (int i = 0; i < 10; ++i)
170*67e74705SXin Li ;
171*67e74705SXin Li }
172*67e74705SXin Li #pragma omp simd
173*67e74705SXin Li for (int i = 0; i < 10; ++i) {
174*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
175*67e74705SXin Li for (int i = 0; i < 10; ++i)
176*67e74705SXin Li ;
177*67e74705SXin Li }
178*67e74705SXin Li #pragma omp simd
179*67e74705SXin Li for (int i = 0; i < 10; ++i) {
180*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
181*67e74705SXin Li for (int i = 0; i < 10; ++i)
182*67e74705SXin Li ;
183*67e74705SXin Li }
184*67e74705SXin Li #pragma omp simd
185*67e74705SXin Li for (int i = 0; i < 10; ++i) {
186*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
187*67e74705SXin Li {
188*67e74705SXin Li bar();
189*67e74705SXin Li }
190*67e74705SXin Li }
191*67e74705SXin Li #pragma omp simd
192*67e74705SXin Li for (int i = 0; i < 10; ++i) {
193*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
194*67e74705SXin Li {
195*67e74705SXin Li bar();
196*67e74705SXin Li }
197*67e74705SXin Li }
198*67e74705SXin Li #pragma omp simd
199*67e74705SXin Li for (int i = 0; i < 10; ++i) {
200*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
201*67e74705SXin Li {
202*67e74705SXin Li bar();
203*67e74705SXin Li }
204*67e74705SXin Li }
205*67e74705SXin Li #pragma omp simd
206*67e74705SXin Li for (int i = 0; i < 10; ++i) {
207*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
208*67e74705SXin Li {
209*67e74705SXin Li bar();
210*67e74705SXin Li }
211*67e74705SXin Li }
212*67e74705SXin Li #pragma omp simd
213*67e74705SXin Li for (int i = 0; i < 10; ++i) {
214*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
215*67e74705SXin Li {
216*67e74705SXin Li bar();
217*67e74705SXin Li }
218*67e74705SXin Li }
219*67e74705SXin Li #pragma omp simd
220*67e74705SXin Li for (int i = 0; i < 10; ++i) {
221*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
222*67e74705SXin Li for (int i = 0; i < 10; ++i)
223*67e74705SXin Li ;
224*67e74705SXin Li }
225*67e74705SXin Li #pragma omp simd
226*67e74705SXin Li for (int i = 0; i < 10; ++i) {
227*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
228*67e74705SXin Li for (int i = 0; i < 10; ++i)
229*67e74705SXin Li ;
230*67e74705SXin Li }
231*67e74705SXin Li #pragma omp simd
232*67e74705SXin Li for (int i = 0; i < 10; ++i) {
233*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
234*67e74705SXin Li {
235*67e74705SXin Li bar();
236*67e74705SXin Li }
237*67e74705SXin Li }
238*67e74705SXin Li #pragma omp simd
239*67e74705SXin Li for (int i = 0; i < 10; ++i) {
240*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
241*67e74705SXin Li {
242*67e74705SXin Li bar();
243*67e74705SXin Li }
244*67e74705SXin Li }
245*67e74705SXin Li #pragma omp simd
246*67e74705SXin Li for (int i = 0; i < 10; ++i) {
247*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
248*67e74705SXin Li bar();
249*67e74705SXin Li }
250*67e74705SXin Li #pragma omp simd
251*67e74705SXin Li for (int i = 0; i < 10; ++i) {
252*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
253*67e74705SXin Li bar();
254*67e74705SXin Li }
255*67e74705SXin Li #pragma omp simd
256*67e74705SXin Li for (int i = 0; i < 10; ++i) {
257*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
258*67e74705SXin Li bar();
259*67e74705SXin Li }
260*67e74705SXin Li #pragma omp simd
261*67e74705SXin Li for (int i = 0; i < 10; ++i) {
262*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
263*67e74705SXin Li bar();
264*67e74705SXin Li }
265*67e74705SXin Li #pragma omp simd
266*67e74705SXin Li for (int i = 0; i < 10; ++i) {
267*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
268*67e74705SXin Li bar();
269*67e74705SXin Li }
270*67e74705SXin Li #pragma omp simd
271*67e74705SXin Li for (int i = 0; i < 10; ++i) {
272*67e74705SXin Li #pragma omp ordered simd // OK
273*67e74705SXin Li bar();
274*67e74705SXin Li }
275*67e74705SXin Li #pragma omp simd
276*67e74705SXin Li for (int i = 0; i < 10; ++i) {
277*67e74705SXin Li #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
278*67e74705SXin Li bar();
279*67e74705SXin Li }
280*67e74705SXin Li #pragma omp simd
281*67e74705SXin Li for (int i = 0; i < 10; ++i) {
282*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
283*67e74705SXin Li ++a;
284*67e74705SXin Li }
285*67e74705SXin Li #pragma omp simd
286*67e74705SXin Li for (int i = 0; i < 10; ++i) {
287*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
288*67e74705SXin Li ++a;
289*67e74705SXin Li }
290*67e74705SXin Li #pragma omp simd
291*67e74705SXin Li for (int i = 0; i < 10; ++i) {
292*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
293*67e74705SXin Li ++a;
294*67e74705SXin Li }
295*67e74705SXin Li #pragma omp simd
296*67e74705SXin Li for (int i = 0; i < 10; ++i) {
297*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
298*67e74705SXin Li for (int i = 0; i < 10; ++i)
299*67e74705SXin Li ;
300*67e74705SXin Li }
301*67e74705SXin Li #pragma omp simd
302*67e74705SXin Li for (int i = 0; i < 10; ++i) {
303*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
304*67e74705SXin Li ++a;
305*67e74705SXin Li }
306*67e74705SXin Li #pragma omp simd
307*67e74705SXin Li for (int i = 0; i < 10; ++i) {
308*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
309*67e74705SXin Li ++a;
310*67e74705SXin Li }
311*67e74705SXin Li #pragma omp simd
312*67e74705SXin Li for (int i = 0; i < 10; ++i) {
313*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
314*67e74705SXin Li ++a;
315*67e74705SXin Li }
316*67e74705SXin Li #pragma omp simd
317*67e74705SXin Li for (int i = 0; i < 10; ++i) {
318*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
319*67e74705SXin Li for (int i = 0; i < 10; ++i)
320*67e74705SXin Li ++a;
321*67e74705SXin Li }
322*67e74705SXin Li #pragma omp simd
323*67e74705SXin Li for (int i = 0; i < 10; ++i) {
324*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
325*67e74705SXin Li for (int j = 0; j < 10; ++j)
326*67e74705SXin Li ;
327*67e74705SXin Li }
328*67e74705SXin Li #pragma omp simd
329*67e74705SXin Li for (int i = 0; i < 10; ++i) {
330*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
331*67e74705SXin Li }
332*67e74705SXin Li #pragma omp simd
333*67e74705SXin Li for (int i = 0; i < 10; ++i) {
334*67e74705SXin Li #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside a simd region}}
335*67e74705SXin Li for (int j = 0; j < 10; ++j)
336*67e74705SXin Li ;
337*67e74705SXin Li }
338*67e74705SXin Li #pragma omp simd
339*67e74705SXin Li for (int i = 0; i < 10; ++i) {
340*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
341*67e74705SXin Li for (int j = 0; j < 10; ++j)
342*67e74705SXin Li ;
343*67e74705SXin Li }
344*67e74705SXin Li #pragma omp simd
345*67e74705SXin Li for (int i = 0; i < 10; ++i) {
346*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
347*67e74705SXin Li for (int j = 0; j < 10; ++j)
348*67e74705SXin Li ;
349*67e74705SXin Li }
350*67e74705SXin Li
351*67e74705SXin Li // FOR DIRECTIVE
352*67e74705SXin Li #pragma omp for
353*67e74705SXin Li for (int i = 0; i < 10; ++i) {
354*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
355*67e74705SXin Li for (int i = 0; i < 10; ++i)
356*67e74705SXin Li ;
357*67e74705SXin Li }
358*67e74705SXin Li #pragma omp for
359*67e74705SXin Li for (int i = 0; i < 10; ++i) {
360*67e74705SXin Li #pragma omp simd
361*67e74705SXin Li for (int i = 0; i < 10; ++i)
362*67e74705SXin Li ;
363*67e74705SXin Li }
364*67e74705SXin Li #pragma omp for
365*67e74705SXin Li for (int i = 0; i < 10; ++i) {
366*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
367*67e74705SXin Li for (int i = 0; i < 10; ++i)
368*67e74705SXin Li ;
369*67e74705SXin Li }
370*67e74705SXin Li #pragma omp for
371*67e74705SXin Li for (int i = 0; i < 10; ++i) {
372*67e74705SXin Li #pragma omp parallel
373*67e74705SXin Li for (int i = 0; i < 10; ++i)
374*67e74705SXin Li ;
375*67e74705SXin Li }
376*67e74705SXin Li #pragma omp for
377*67e74705SXin Li for (int i = 0; i < 10; ++i) {
378*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
379*67e74705SXin Li {
380*67e74705SXin Li bar();
381*67e74705SXin Li }
382*67e74705SXin Li }
383*67e74705SXin Li #pragma omp for
384*67e74705SXin Li for (int i = 0; i < 10; ++i) {
385*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
386*67e74705SXin Li {
387*67e74705SXin Li bar();
388*67e74705SXin Li }
389*67e74705SXin Li }
390*67e74705SXin Li #pragma omp for
391*67e74705SXin Li for (int i = 0; i < 10; ++i) {
392*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
393*67e74705SXin Li {
394*67e74705SXin Li bar();
395*67e74705SXin Li }
396*67e74705SXin Li }
397*67e74705SXin Li
398*67e74705SXin Li #pragma omp for
399*67e74705SXin Li for (int i = 0; i < 10; ++i) {
400*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
401*67e74705SXin Li {
402*67e74705SXin Li bar();
403*67e74705SXin Li }
404*67e74705SXin Li }
405*67e74705SXin Li #pragma omp for
406*67e74705SXin Li for (int i = 0; i < 10; ++i) {
407*67e74705SXin Li #pragma omp critical
408*67e74705SXin Li {
409*67e74705SXin Li bar();
410*67e74705SXin Li }
411*67e74705SXin Li }
412*67e74705SXin Li #pragma omp for
413*67e74705SXin Li for (int i = 0; i < 10; ++i) {
414*67e74705SXin Li #pragma omp parallel
415*67e74705SXin Li {
416*67e74705SXin Li #pragma omp single // OK
417*67e74705SXin Li {
418*67e74705SXin Li bar();
419*67e74705SXin Li }
420*67e74705SXin Li #pragma omp for // OK
421*67e74705SXin Li for (int i = 0; i < 10; ++i)
422*67e74705SXin Li ;
423*67e74705SXin Li #pragma omp sections // OK
424*67e74705SXin Li {
425*67e74705SXin Li bar();
426*67e74705SXin Li }
427*67e74705SXin Li }
428*67e74705SXin Li }
429*67e74705SXin Li #pragma omp for
430*67e74705SXin Li for (int i = 0; i < 10; ++i) {
431*67e74705SXin Li #pragma omp parallel for
432*67e74705SXin Li for (int i = 0; i < 10; ++i)
433*67e74705SXin Li ;
434*67e74705SXin Li }
435*67e74705SXin Li #pragma omp for
436*67e74705SXin Li for (int i = 0; i < 10; ++i) {
437*67e74705SXin Li #pragma omp parallel for simd
438*67e74705SXin Li for (int i = 0; i < 10; ++i)
439*67e74705SXin Li ;
440*67e74705SXin Li }
441*67e74705SXin Li #pragma omp for
442*67e74705SXin Li for (int i = 0; i < 10; ++i) {
443*67e74705SXin Li #pragma omp parallel sections
444*67e74705SXin Li {
445*67e74705SXin Li bar();
446*67e74705SXin Li }
447*67e74705SXin Li }
448*67e74705SXin Li #pragma omp for
449*67e74705SXin Li for (int i = 0; i < 10; ++i) {
450*67e74705SXin Li #pragma omp task
451*67e74705SXin Li {
452*67e74705SXin Li bar();
453*67e74705SXin Li }
454*67e74705SXin Li }
455*67e74705SXin Li #pragma omp for
456*67e74705SXin Li for (int i = 0; i < 10; ++i) {
457*67e74705SXin Li #pragma omp taskyield
458*67e74705SXin Li bar();
459*67e74705SXin Li }
460*67e74705SXin Li #pragma omp for
461*67e74705SXin Li for (int i = 0; i < 10; ++i) {
462*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
463*67e74705SXin Li bar();
464*67e74705SXin Li }
465*67e74705SXin Li #pragma omp for
466*67e74705SXin Li for (int i = 0; i < 10; ++i) {
467*67e74705SXin Li #pragma omp taskwait
468*67e74705SXin Li bar();
469*67e74705SXin Li }
470*67e74705SXin Li #pragma omp for
471*67e74705SXin Li for (int i = 0; i < 10; ++i) {
472*67e74705SXin Li #pragma omp flush
473*67e74705SXin Li bar();
474*67e74705SXin Li }
475*67e74705SXin Li #pragma omp for
476*67e74705SXin Li for (int i = 0; i < 10; ++i) {
477*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
478*67e74705SXin Li bar();
479*67e74705SXin Li }
480*67e74705SXin Li #pragma omp for ordered
481*67e74705SXin Li for (int i = 0; i < 10; ++i) {
482*67e74705SXin Li #pragma omp ordered // OK
483*67e74705SXin Li bar();
484*67e74705SXin Li }
485*67e74705SXin Li #pragma omp for
486*67e74705SXin Li for (int i = 0; i < 10; ++i) {
487*67e74705SXin Li #pragma omp atomic
488*67e74705SXin Li ++a;
489*67e74705SXin Li }
490*67e74705SXin Li #pragma omp for
491*67e74705SXin Li for (int i = 0; i < 10; ++i) {
492*67e74705SXin Li #pragma omp target
493*67e74705SXin Li ++a;
494*67e74705SXin Li }
495*67e74705SXin Li #pragma omp for
496*67e74705SXin Li for (int i = 0; i < 10; ++i) {
497*67e74705SXin Li #pragma omp target parallel
498*67e74705SXin Li ++a;
499*67e74705SXin Li }
500*67e74705SXin Li #pragma omp for
501*67e74705SXin Li for (int i = 0; i < 10; ++i) {
502*67e74705SXin Li #pragma omp target parallel for
503*67e74705SXin Li for (int i = 0; i < 10; ++i)
504*67e74705SXin Li ;
505*67e74705SXin Li }
506*67e74705SXin Li #pragma omp for
507*67e74705SXin Li for (int i = 0; i < 10; ++i) {
508*67e74705SXin Li #pragma omp target enter data map(to: a)
509*67e74705SXin Li ++a;
510*67e74705SXin Li }
511*67e74705SXin Li #pragma omp for
512*67e74705SXin Li for (int i = 0; i < 10; ++i) {
513*67e74705SXin Li #pragma omp target exit data map(from: a)
514*67e74705SXin Li ++a;
515*67e74705SXin Li }
516*67e74705SXin Li #pragma omp for
517*67e74705SXin Li for (int i = 0; i < 10; ++i) {
518*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
519*67e74705SXin Li ++a;
520*67e74705SXin Li }
521*67e74705SXin Li #pragma omp for
522*67e74705SXin Li for (int i = 0; i < 10; ++i) {
523*67e74705SXin Li #pragma omp taskloop
524*67e74705SXin Li for (int i = 0; i < 10; ++i)
525*67e74705SXin Li ++a;
526*67e74705SXin Li }
527*67e74705SXin Li #pragma omp for
528*67e74705SXin Li for (int i = 0; i < 10; ++i) {
529*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
530*67e74705SXin Li for (int j = 0; j < 10; ++j)
531*67e74705SXin Li ;
532*67e74705SXin Li }
533*67e74705SXin Li #pragma omp for
534*67e74705SXin Li for (int i = 0; i < 10; ++i) {
535*67e74705SXin Li #pragma omp target update to(a)
536*67e74705SXin Li }
537*67e74705SXin Li #pragma omp for
538*67e74705SXin Li for (int i = 0; i < 10; ++i) {
539*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
540*67e74705SXin Li for (int j = 0; j < 10; ++j)
541*67e74705SXin Li ;
542*67e74705SXin Li }
543*67e74705SXin Li #pragma omp for
544*67e74705SXin Li for (int i = 0; i < 10; ++i) {
545*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
546*67e74705SXin Li for (int j = 0; j < 10; ++j)
547*67e74705SXin Li ;
548*67e74705SXin Li }
549*67e74705SXin Li #pragma omp for
550*67e74705SXin Li for (int i = 0; i < 10; ++i) {
551*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
552*67e74705SXin Li for (int j = 0; j < 10; ++j)
553*67e74705SXin Li ;
554*67e74705SXin Li }
555*67e74705SXin Li
556*67e74705SXin Li // FOR SIMD DIRECTIVE
557*67e74705SXin Li #pragma omp for simd
558*67e74705SXin Li for (int i = 0; i < 10; ++i) {
559*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
560*67e74705SXin Li for (int i = 0; i < 10; ++i)
561*67e74705SXin Li ;
562*67e74705SXin Li }
563*67e74705SXin Li #pragma omp for simd
564*67e74705SXin Li for (int i = 0; i < 10; ++i) {
565*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
566*67e74705SXin Li for (int i = 0; i < 10; ++i)
567*67e74705SXin Li ;
568*67e74705SXin Li }
569*67e74705SXin Li #pragma omp for simd
570*67e74705SXin Li for (int i = 0; i < 10; ++i) {
571*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
572*67e74705SXin Li for (int i = 0; i < 10; ++i)
573*67e74705SXin Li ;
574*67e74705SXin Li }
575*67e74705SXin Li #pragma omp for simd
576*67e74705SXin Li for (int i = 0; i < 10; ++i) {
577*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
578*67e74705SXin Li for (int i = 0; i < 10; ++i)
579*67e74705SXin Li ;
580*67e74705SXin Li }
581*67e74705SXin Li #pragma omp for simd
582*67e74705SXin Li for (int i = 0; i < 10; ++i) {
583*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
584*67e74705SXin Li {
585*67e74705SXin Li bar();
586*67e74705SXin Li }
587*67e74705SXin Li }
588*67e74705SXin Li #pragma omp for simd
589*67e74705SXin Li for (int i = 0; i < 10; ++i) {
590*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
591*67e74705SXin Li {
592*67e74705SXin Li bar();
593*67e74705SXin Li }
594*67e74705SXin Li }
595*67e74705SXin Li #pragma omp for simd
596*67e74705SXin Li for (int i = 0; i < 10; ++i) {
597*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
598*67e74705SXin Li {
599*67e74705SXin Li bar();
600*67e74705SXin Li }
601*67e74705SXin Li }
602*67e74705SXin Li #pragma omp for simd
603*67e74705SXin Li for (int i = 0; i < 10; ++i) {
604*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
605*67e74705SXin Li {
606*67e74705SXin Li bar();
607*67e74705SXin Li }
608*67e74705SXin Li }
609*67e74705SXin Li #pragma omp for simd
610*67e74705SXin Li for (int i = 0; i < 10; ++i) {
611*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
612*67e74705SXin Li {
613*67e74705SXin Li bar();
614*67e74705SXin Li }
615*67e74705SXin Li }
616*67e74705SXin Li #pragma omp for simd
617*67e74705SXin Li for (int i = 0; i < 10; ++i) {
618*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
619*67e74705SXin Li for (int i = 0; i < 10; ++i)
620*67e74705SXin Li ;
621*67e74705SXin Li }
622*67e74705SXin Li #pragma omp for simd
623*67e74705SXin Li for (int i = 0; i < 10; ++i) {
624*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
625*67e74705SXin Li for (int i = 0; i < 10; ++i)
626*67e74705SXin Li ;
627*67e74705SXin Li }
628*67e74705SXin Li #pragma omp for simd
629*67e74705SXin Li for (int i = 0; i < 10; ++i) {
630*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
631*67e74705SXin Li {
632*67e74705SXin Li bar();
633*67e74705SXin Li }
634*67e74705SXin Li }
635*67e74705SXin Li #pragma omp for simd
636*67e74705SXin Li for (int i = 0; i < 10; ++i) {
637*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
638*67e74705SXin Li {
639*67e74705SXin Li bar();
640*67e74705SXin Li }
641*67e74705SXin Li }
642*67e74705SXin Li #pragma omp for simd
643*67e74705SXin Li for (int i = 0; i < 10; ++i) {
644*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
645*67e74705SXin Li bar();
646*67e74705SXin Li }
647*67e74705SXin Li #pragma omp for simd
648*67e74705SXin Li for (int i = 0; i < 10; ++i) {
649*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
650*67e74705SXin Li bar();
651*67e74705SXin Li }
652*67e74705SXin Li #pragma omp for simd
653*67e74705SXin Li for (int i = 0; i < 10; ++i) {
654*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
655*67e74705SXin Li bar();
656*67e74705SXin Li }
657*67e74705SXin Li #pragma omp for simd
658*67e74705SXin Li for (int i = 0; i < 10; ++i) {
659*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
660*67e74705SXin Li bar();
661*67e74705SXin Li }
662*67e74705SXin Li #pragma omp for simd
663*67e74705SXin Li for (int i = 0; i < 10; ++i) {
664*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
665*67e74705SXin Li bar();
666*67e74705SXin Li }
667*67e74705SXin Li #pragma omp for simd
668*67e74705SXin Li for (int i = 0; i < 10; ++i) {
669*67e74705SXin Li #pragma omp ordered simd // OK
670*67e74705SXin Li bar();
671*67e74705SXin Li }
672*67e74705SXin Li #pragma omp for simd
673*67e74705SXin Li for (int i = 0; i < 10; ++i) {
674*67e74705SXin Li #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
675*67e74705SXin Li bar();
676*67e74705SXin Li }
677*67e74705SXin Li #pragma omp for simd
678*67e74705SXin Li for (int i = 0; i < 10; ++i) {
679*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
680*67e74705SXin Li ++a;
681*67e74705SXin Li }
682*67e74705SXin Li #pragma omp for simd
683*67e74705SXin Li for (int i = 0; i < 10; ++i) {
684*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
685*67e74705SXin Li ++a;
686*67e74705SXin Li }
687*67e74705SXin Li #pragma omp for simd
688*67e74705SXin Li for (int i = 0; i < 10; ++i) {
689*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
690*67e74705SXin Li ++a;
691*67e74705SXin Li }
692*67e74705SXin Li #pragma omp for simd
693*67e74705SXin Li for (int i = 0; i < 10; ++i) {
694*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
695*67e74705SXin Li for (int i = 0; i < 10; ++i)
696*67e74705SXin Li ;
697*67e74705SXin Li }
698*67e74705SXin Li #pragma omp for simd
699*67e74705SXin Li for (int i = 0; i < 10; ++i) {
700*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
701*67e74705SXin Li ++a;
702*67e74705SXin Li }
703*67e74705SXin Li #pragma omp for simd
704*67e74705SXin Li for (int i = 0; i < 10; ++i) {
705*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
706*67e74705SXin Li ++a;
707*67e74705SXin Li }
708*67e74705SXin Li #pragma omp for simd
709*67e74705SXin Li for (int i = 0; i < 10; ++i) {
710*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
711*67e74705SXin Li ++a;
712*67e74705SXin Li }
713*67e74705SXin Li #pragma omp for simd
714*67e74705SXin Li for (int i = 0; i < 10; ++i) {
715*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
716*67e74705SXin Li for (int i = 0; i < 10; ++i)
717*67e74705SXin Li ++a;
718*67e74705SXin Li }
719*67e74705SXin Li #pragma omp for simd
720*67e74705SXin Li for (int i = 0; i < 10; ++i) {
721*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
722*67e74705SXin Li for (int j = 0; j < 10; ++j)
723*67e74705SXin Li ;
724*67e74705SXin Li }
725*67e74705SXin Li #pragma omp for simd
726*67e74705SXin Li for (int i = 0; i < 10; ++i) {
727*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
728*67e74705SXin Li bar();
729*67e74705SXin Li }
730*67e74705SXin Li #pragma omp for simd
731*67e74705SXin Li for (int i = 0; i < 10; ++i) {
732*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
733*67e74705SXin Li for (int j = 0; j < 10; ++j)
734*67e74705SXin Li ;
735*67e74705SXin Li }
736*67e74705SXin Li #pragma omp for simd
737*67e74705SXin Li for (int i = 0; i < 10; ++i) {
738*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
739*67e74705SXin Li for (int j = 0; j < 10; ++j)
740*67e74705SXin Li ;
741*67e74705SXin Li }
742*67e74705SXin Li #pragma omp for simd
743*67e74705SXin Li for (int i = 0; i < 10; ++i) {
744*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
745*67e74705SXin Li for (int j = 0; j < 10; ++j)
746*67e74705SXin Li ;
747*67e74705SXin Li }
748*67e74705SXin Li
749*67e74705SXin Li // SECTIONS DIRECTIVE
750*67e74705SXin Li #pragma omp sections
751*67e74705SXin Li {
752*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
753*67e74705SXin Li for (int i = 0; i < 10; ++i)
754*67e74705SXin Li ;
755*67e74705SXin Li }
756*67e74705SXin Li #pragma omp sections
757*67e74705SXin Li {
758*67e74705SXin Li #pragma omp simd
759*67e74705SXin Li for (int i = 0; i < 10; ++i)
760*67e74705SXin Li ;
761*67e74705SXin Li }
762*67e74705SXin Li #pragma omp sections
763*67e74705SXin Li {
764*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
765*67e74705SXin Li for (int i = 0; i < 10; ++i)
766*67e74705SXin Li ;
767*67e74705SXin Li }
768*67e74705SXin Li #pragma omp sections
769*67e74705SXin Li {
770*67e74705SXin Li #pragma omp parallel
771*67e74705SXin Li for (int i = 0; i < 10; ++i)
772*67e74705SXin Li ;
773*67e74705SXin Li }
774*67e74705SXin Li #pragma omp sections
775*67e74705SXin Li {
776*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
777*67e74705SXin Li {
778*67e74705SXin Li bar();
779*67e74705SXin Li }
780*67e74705SXin Li }
781*67e74705SXin Li #pragma omp sections
782*67e74705SXin Li {
783*67e74705SXin Li #pragma omp section
784*67e74705SXin Li {
785*67e74705SXin Li bar();
786*67e74705SXin Li }
787*67e74705SXin Li }
788*67e74705SXin Li #pragma omp sections
789*67e74705SXin Li {
790*67e74705SXin Li #pragma omp parallel
791*67e74705SXin Li {
792*67e74705SXin Li #pragma omp single // OK
793*67e74705SXin Li {
794*67e74705SXin Li bar();
795*67e74705SXin Li }
796*67e74705SXin Li #pragma omp for // OK
797*67e74705SXin Li for (int i = 0; i < 10; ++i)
798*67e74705SXin Li ;
799*67e74705SXin Li #pragma omp sections // OK
800*67e74705SXin Li {
801*67e74705SXin Li bar();
802*67e74705SXin Li }
803*67e74705SXin Li }
804*67e74705SXin Li }
805*67e74705SXin Li #pragma omp sections
806*67e74705SXin Li {
807*67e74705SXin Li #pragma omp parallel
808*67e74705SXin Li {
809*67e74705SXin Li #pragma omp master // OK
810*67e74705SXin Li {
811*67e74705SXin Li bar();
812*67e74705SXin Li }
813*67e74705SXin Li #pragma omp for // OK
814*67e74705SXin Li for (int i = 0; i < 10; ++i)
815*67e74705SXin Li ;
816*67e74705SXin Li #pragma omp master // OK
817*67e74705SXin Li {
818*67e74705SXin Li bar();
819*67e74705SXin Li }
820*67e74705SXin Li }
821*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
822*67e74705SXin Li bar();
823*67e74705SXin Li }
824*67e74705SXin Li #pragma omp sections
825*67e74705SXin Li {
826*67e74705SXin Li #pragma omp parallel
827*67e74705SXin Li {
828*67e74705SXin Li #pragma omp critical(A) // OK
829*67e74705SXin Li {
830*67e74705SXin Li bar();
831*67e74705SXin Li }
832*67e74705SXin Li #pragma omp for // OK
833*67e74705SXin Li for (int i = 0; i < 10; ++i)
834*67e74705SXin Li ;
835*67e74705SXin Li #pragma omp critical // OK
836*67e74705SXin Li {
837*67e74705SXin Li bar();
838*67e74705SXin Li }
839*67e74705SXin Li }
840*67e74705SXin Li #pragma omp critical(A) // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
841*67e74705SXin Li bar();
842*67e74705SXin Li }
843*67e74705SXin Li #pragma omp sections
844*67e74705SXin Li {
845*67e74705SXin Li #pragma omp parallel for
846*67e74705SXin Li for (int i = 0; i < 10; ++i)
847*67e74705SXin Li ;
848*67e74705SXin Li }
849*67e74705SXin Li #pragma omp sections
850*67e74705SXin Li {
851*67e74705SXin Li #pragma omp parallel for simd
852*67e74705SXin Li for (int i = 0; i < 10; ++i)
853*67e74705SXin Li ;
854*67e74705SXin Li }
855*67e74705SXin Li #pragma omp sections
856*67e74705SXin Li {
857*67e74705SXin Li #pragma omp parallel sections
858*67e74705SXin Li {
859*67e74705SXin Li bar();
860*67e74705SXin Li }
861*67e74705SXin Li }
862*67e74705SXin Li #pragma omp sections
863*67e74705SXin Li {
864*67e74705SXin Li #pragma omp task
865*67e74705SXin Li {
866*67e74705SXin Li bar();
867*67e74705SXin Li }
868*67e74705SXin Li }
869*67e74705SXin Li #pragma omp sections
870*67e74705SXin Li {
871*67e74705SXin Li #pragma omp taskyield
872*67e74705SXin Li }
873*67e74705SXin Li #pragma omp sections
874*67e74705SXin Li {
875*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
876*67e74705SXin Li }
877*67e74705SXin Li #pragma omp sections
878*67e74705SXin Li {
879*67e74705SXin Li #pragma omp taskwait
880*67e74705SXin Li }
881*67e74705SXin Li #pragma omp sections
882*67e74705SXin Li {
883*67e74705SXin Li #pragma omp flush
884*67e74705SXin Li }
885*67e74705SXin Li #pragma omp sections
886*67e74705SXin Li {
887*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
888*67e74705SXin Li bar();
889*67e74705SXin Li }
890*67e74705SXin Li #pragma omp sections
891*67e74705SXin Li {
892*67e74705SXin Li #pragma omp atomic
893*67e74705SXin Li ++a;
894*67e74705SXin Li }
895*67e74705SXin Li #pragma omp sections
896*67e74705SXin Li {
897*67e74705SXin Li #pragma omp target
898*67e74705SXin Li ++a;
899*67e74705SXin Li }
900*67e74705SXin Li #pragma omp sections
901*67e74705SXin Li {
902*67e74705SXin Li #pragma omp target parallel
903*67e74705SXin Li ++a;
904*67e74705SXin Li }
905*67e74705SXin Li #pragma omp sections
906*67e74705SXin Li {
907*67e74705SXin Li #pragma omp target parallel for
908*67e74705SXin Li for (int i = 0; i < 10; ++i)
909*67e74705SXin Li ;
910*67e74705SXin Li }
911*67e74705SXin Li #pragma omp sections
912*67e74705SXin Li {
913*67e74705SXin Li #pragma omp target enter data map(to: a)
914*67e74705SXin Li }
915*67e74705SXin Li #pragma omp sections
916*67e74705SXin Li {
917*67e74705SXin Li #pragma omp target exit data map(from: a)
918*67e74705SXin Li }
919*67e74705SXin Li #pragma omp sections
920*67e74705SXin Li {
921*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
922*67e74705SXin Li ++a;
923*67e74705SXin Li }
924*67e74705SXin Li #pragma omp sections
925*67e74705SXin Li {
926*67e74705SXin Li #pragma omp taskloop
927*67e74705SXin Li for (int i = 0; i < 10; ++i)
928*67e74705SXin Li ++a;
929*67e74705SXin Li }
930*67e74705SXin Li #pragma omp sections
931*67e74705SXin Li {
932*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
933*67e74705SXin Li for (int i = 0; i < 10; ++i)
934*67e74705SXin Li ;
935*67e74705SXin Li }
936*67e74705SXin Li #pragma omp sections
937*67e74705SXin Li {
938*67e74705SXin Li #pragma omp target update to(a)
939*67e74705SXin Li }
940*67e74705SXin Li #pragma omp sections
941*67e74705SXin Li {
942*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
943*67e74705SXin Li for (int i = 0; i < 10; ++i)
944*67e74705SXin Li ;
945*67e74705SXin Li }
946*67e74705SXin Li #pragma omp sections
947*67e74705SXin Li {
948*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
949*67e74705SXin Li for (int i = 0; i < 10; ++i)
950*67e74705SXin Li ;
951*67e74705SXin Li }
952*67e74705SXin Li #pragma omp sections
953*67e74705SXin Li {
954*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
955*67e74705SXin Li for (int i = 0; i < 10; ++i)
956*67e74705SXin Li ;
957*67e74705SXin Li }
958*67e74705SXin Li
959*67e74705SXin Li // SECTION DIRECTIVE
960*67e74705SXin Li #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
961*67e74705SXin Li {
962*67e74705SXin Li bar();
963*67e74705SXin Li }
964*67e74705SXin Li #pragma omp sections
965*67e74705SXin Li {
966*67e74705SXin Li #pragma omp section
967*67e74705SXin Li {
968*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
969*67e74705SXin Li for (int i = 0; i < 10; ++i)
970*67e74705SXin Li ;
971*67e74705SXin Li }
972*67e74705SXin Li }
973*67e74705SXin Li #pragma omp sections
974*67e74705SXin Li {
975*67e74705SXin Li #pragma omp section
976*67e74705SXin Li {
977*67e74705SXin Li #pragma omp simd
978*67e74705SXin Li for (int i = 0; i < 10; ++i)
979*67e74705SXin Li ;
980*67e74705SXin Li }
981*67e74705SXin Li }
982*67e74705SXin Li #pragma omp sections
983*67e74705SXin Li {
984*67e74705SXin Li #pragma omp section
985*67e74705SXin Li {
986*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
987*67e74705SXin Li for (int i = 0; i < 10; ++i)
988*67e74705SXin Li ;
989*67e74705SXin Li }
990*67e74705SXin Li }
991*67e74705SXin Li #pragma omp sections
992*67e74705SXin Li {
993*67e74705SXin Li #pragma omp section
994*67e74705SXin Li {
995*67e74705SXin Li #pragma omp parallel
996*67e74705SXin Li for (int i = 0; i < 10; ++i)
997*67e74705SXin Li ;
998*67e74705SXin Li }
999*67e74705SXin Li }
1000*67e74705SXin Li #pragma omp sections
1001*67e74705SXin Li {
1002*67e74705SXin Li #pragma omp section
1003*67e74705SXin Li {
1004*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1005*67e74705SXin Li {
1006*67e74705SXin Li bar();
1007*67e74705SXin Li }
1008*67e74705SXin Li }
1009*67e74705SXin Li }
1010*67e74705SXin Li #pragma omp sections
1011*67e74705SXin Li {
1012*67e74705SXin Li #pragma omp section
1013*67e74705SXin Li {
1014*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
1015*67e74705SXin Li {
1016*67e74705SXin Li bar();
1017*67e74705SXin Li }
1018*67e74705SXin Li }
1019*67e74705SXin Li }
1020*67e74705SXin Li #pragma omp sections
1021*67e74705SXin Li {
1022*67e74705SXin Li #pragma omp section
1023*67e74705SXin Li {
1024*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1025*67e74705SXin Li bar();
1026*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
1027*67e74705SXin Li bar();
1028*67e74705SXin Li #pragma omp critical
1029*67e74705SXin Li bar();
1030*67e74705SXin Li }
1031*67e74705SXin Li }
1032*67e74705SXin Li #pragma omp sections
1033*67e74705SXin Li {
1034*67e74705SXin Li #pragma omp section
1035*67e74705SXin Li {
1036*67e74705SXin Li #pragma omp parallel
1037*67e74705SXin Li {
1038*67e74705SXin Li #pragma omp single // OK
1039*67e74705SXin Li {
1040*67e74705SXin Li bar();
1041*67e74705SXin Li }
1042*67e74705SXin Li #pragma omp for // OK
1043*67e74705SXin Li for (int i = 0; i < 10; ++i)
1044*67e74705SXin Li ;
1045*67e74705SXin Li #pragma omp for simd // OK
1046*67e74705SXin Li for (int i = 0; i < 10; ++i)
1047*67e74705SXin Li ;
1048*67e74705SXin Li #pragma omp sections // OK
1049*67e74705SXin Li {
1050*67e74705SXin Li bar();
1051*67e74705SXin Li }
1052*67e74705SXin Li }
1053*67e74705SXin Li }
1054*67e74705SXin Li }
1055*67e74705SXin Li #pragma omp sections
1056*67e74705SXin Li {
1057*67e74705SXin Li #pragma omp section
1058*67e74705SXin Li {
1059*67e74705SXin Li #pragma omp parallel for
1060*67e74705SXin Li for (int i = 0; i < 10; ++i)
1061*67e74705SXin Li ;
1062*67e74705SXin Li }
1063*67e74705SXin Li }
1064*67e74705SXin Li #pragma omp sections
1065*67e74705SXin Li {
1066*67e74705SXin Li #pragma omp section
1067*67e74705SXin Li {
1068*67e74705SXin Li #pragma omp parallel for simd
1069*67e74705SXin Li for (int i = 0; i < 10; ++i)
1070*67e74705SXin Li ;
1071*67e74705SXin Li }
1072*67e74705SXin Li }
1073*67e74705SXin Li #pragma omp sections
1074*67e74705SXin Li {
1075*67e74705SXin Li #pragma omp section
1076*67e74705SXin Li {
1077*67e74705SXin Li #pragma omp parallel sections
1078*67e74705SXin Li {
1079*67e74705SXin Li bar();
1080*67e74705SXin Li }
1081*67e74705SXin Li }
1082*67e74705SXin Li }
1083*67e74705SXin Li #pragma omp sections
1084*67e74705SXin Li {
1085*67e74705SXin Li #pragma omp section
1086*67e74705SXin Li {
1087*67e74705SXin Li #pragma omp task
1088*67e74705SXin Li {
1089*67e74705SXin Li bar();
1090*67e74705SXin Li }
1091*67e74705SXin Li }
1092*67e74705SXin Li }
1093*67e74705SXin Li #pragma omp sections
1094*67e74705SXin Li {
1095*67e74705SXin Li #pragma omp section
1096*67e74705SXin Li {
1097*67e74705SXin Li #pragma omp taskyield
1098*67e74705SXin Li bar();
1099*67e74705SXin Li }
1100*67e74705SXin Li }
1101*67e74705SXin Li #pragma omp sections
1102*67e74705SXin Li {
1103*67e74705SXin Li #pragma omp section
1104*67e74705SXin Li {
1105*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
1106*67e74705SXin Li bar();
1107*67e74705SXin Li }
1108*67e74705SXin Li }
1109*67e74705SXin Li #pragma omp sections
1110*67e74705SXin Li {
1111*67e74705SXin Li #pragma omp section
1112*67e74705SXin Li {
1113*67e74705SXin Li #pragma omp taskwait
1114*67e74705SXin Li bar();
1115*67e74705SXin Li }
1116*67e74705SXin Li }
1117*67e74705SXin Li #pragma omp sections
1118*67e74705SXin Li {
1119*67e74705SXin Li #pragma omp section
1120*67e74705SXin Li {
1121*67e74705SXin Li #pragma omp flush
1122*67e74705SXin Li bar();
1123*67e74705SXin Li }
1124*67e74705SXin Li }
1125*67e74705SXin Li #pragma omp sections
1126*67e74705SXin Li {
1127*67e74705SXin Li #pragma omp section
1128*67e74705SXin Li {
1129*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1130*67e74705SXin Li bar();
1131*67e74705SXin Li }
1132*67e74705SXin Li }
1133*67e74705SXin Li #pragma omp sections
1134*67e74705SXin Li {
1135*67e74705SXin Li #pragma omp section
1136*67e74705SXin Li #pragma omp atomic
1137*67e74705SXin Li ++a;
1138*67e74705SXin Li }
1139*67e74705SXin Li #pragma omp sections
1140*67e74705SXin Li {
1141*67e74705SXin Li #pragma omp section
1142*67e74705SXin Li #pragma omp target
1143*67e74705SXin Li ++a;
1144*67e74705SXin Li }
1145*67e74705SXin Li #pragma omp sections
1146*67e74705SXin Li {
1147*67e74705SXin Li #pragma omp section
1148*67e74705SXin Li #pragma omp target parallel
1149*67e74705SXin Li ++a;
1150*67e74705SXin Li }
1151*67e74705SXin Li #pragma omp sections
1152*67e74705SXin Li {
1153*67e74705SXin Li #pragma omp section
1154*67e74705SXin Li {
1155*67e74705SXin Li #pragma omp target parallel for
1156*67e74705SXin Li for (int i = 0; i < 10; ++i)
1157*67e74705SXin Li ;
1158*67e74705SXin Li }
1159*67e74705SXin Li }
1160*67e74705SXin Li #pragma omp sections
1161*67e74705SXin Li {
1162*67e74705SXin Li #pragma omp section
1163*67e74705SXin Li {
1164*67e74705SXin Li #pragma omp target enter data map(to: a)
1165*67e74705SXin Li ++a;
1166*67e74705SXin Li }
1167*67e74705SXin Li }
1168*67e74705SXin Li #pragma omp sections
1169*67e74705SXin Li {
1170*67e74705SXin Li #pragma omp section
1171*67e74705SXin Li {
1172*67e74705SXin Li #pragma omp target exit data map(from: a)
1173*67e74705SXin Li ++a;
1174*67e74705SXin Li }
1175*67e74705SXin Li }
1176*67e74705SXin Li #pragma omp sections
1177*67e74705SXin Li {
1178*67e74705SXin Li #pragma omp section
1179*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
1180*67e74705SXin Li ++a;
1181*67e74705SXin Li }
1182*67e74705SXin Li #pragma omp sections
1183*67e74705SXin Li {
1184*67e74705SXin Li #pragma omp section
1185*67e74705SXin Li #pragma omp taskloop
1186*67e74705SXin Li for (int i = 0; i < 10; ++i)
1187*67e74705SXin Li ++a;
1188*67e74705SXin Li }
1189*67e74705SXin Li #pragma omp sections
1190*67e74705SXin Li {
1191*67e74705SXin Li #pragma omp section
1192*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
1193*67e74705SXin Li for (int i = 0; i < 10; ++i)
1194*67e74705SXin Li ;
1195*67e74705SXin Li }
1196*67e74705SXin Li #pragma omp sections
1197*67e74705SXin Li {
1198*67e74705SXin Li #pragma omp section
1199*67e74705SXin Li {
1200*67e74705SXin Li bar();
1201*67e74705SXin Li #pragma omp target update to(a)
1202*67e74705SXin Li }
1203*67e74705SXin Li }
1204*67e74705SXin Li #pragma omp sections
1205*67e74705SXin Li {
1206*67e74705SXin Li #pragma omp section
1207*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
1208*67e74705SXin Li for (int i = 0; i < 10; ++i)
1209*67e74705SXin Li ;
1210*67e74705SXin Li }
1211*67e74705SXin Li #pragma omp sections
1212*67e74705SXin Li {
1213*67e74705SXin Li #pragma omp section
1214*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
1215*67e74705SXin Li for (int i = 0; i < 10; ++i)
1216*67e74705SXin Li ;
1217*67e74705SXin Li }
1218*67e74705SXin Li #pragma omp sections
1219*67e74705SXin Li {
1220*67e74705SXin Li #pragma omp section
1221*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
1222*67e74705SXin Li for (int i = 0; i < 10; ++i)
1223*67e74705SXin Li ;
1224*67e74705SXin Li }
1225*67e74705SXin Li
1226*67e74705SXin Li // SINGLE DIRECTIVE
1227*67e74705SXin Li #pragma omp single
1228*67e74705SXin Li {
1229*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
1230*67e74705SXin Li for (int i = 0; i < 10; ++i)
1231*67e74705SXin Li ;
1232*67e74705SXin Li }
1233*67e74705SXin Li #pragma omp single
1234*67e74705SXin Li {
1235*67e74705SXin Li #pragma omp simd
1236*67e74705SXin Li for (int i = 0; i < 10; ++i)
1237*67e74705SXin Li ;
1238*67e74705SXin Li }
1239*67e74705SXin Li #pragma omp single
1240*67e74705SXin Li {
1241*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1242*67e74705SXin Li for (int i = 0; i < 10; ++i)
1243*67e74705SXin Li ;
1244*67e74705SXin Li }
1245*67e74705SXin Li #pragma omp single
1246*67e74705SXin Li {
1247*67e74705SXin Li #pragma omp parallel
1248*67e74705SXin Li for (int i = 0; i < 10; ++i)
1249*67e74705SXin Li ;
1250*67e74705SXin Li }
1251*67e74705SXin Li #pragma omp single
1252*67e74705SXin Li {
1253*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1254*67e74705SXin Li {
1255*67e74705SXin Li bar();
1256*67e74705SXin Li }
1257*67e74705SXin Li }
1258*67e74705SXin Li #pragma omp single
1259*67e74705SXin Li {
1260*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
1261*67e74705SXin Li {
1262*67e74705SXin Li bar();
1263*67e74705SXin Li }
1264*67e74705SXin Li }
1265*67e74705SXin Li #pragma omp single
1266*67e74705SXin Li {
1267*67e74705SXin Li #pragma omp critical
1268*67e74705SXin Li {
1269*67e74705SXin Li bar();
1270*67e74705SXin Li }
1271*67e74705SXin Li }
1272*67e74705SXin Li #pragma omp single
1273*67e74705SXin Li {
1274*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1275*67e74705SXin Li {
1276*67e74705SXin Li bar();
1277*67e74705SXin Li }
1278*67e74705SXin Li }
1279*67e74705SXin Li #pragma omp single
1280*67e74705SXin Li {
1281*67e74705SXin Li #pragma omp parallel
1282*67e74705SXin Li {
1283*67e74705SXin Li #pragma omp single // OK
1284*67e74705SXin Li {
1285*67e74705SXin Li bar();
1286*67e74705SXin Li }
1287*67e74705SXin Li #pragma omp for // OK
1288*67e74705SXin Li for (int i = 0; i < 10; ++i)
1289*67e74705SXin Li ;
1290*67e74705SXin Li #pragma omp for simd // OK
1291*67e74705SXin Li for (int i = 0; i < 10; ++i)
1292*67e74705SXin Li ;
1293*67e74705SXin Li #pragma omp sections // OK
1294*67e74705SXin Li {
1295*67e74705SXin Li bar();
1296*67e74705SXin Li }
1297*67e74705SXin Li }
1298*67e74705SXin Li }
1299*67e74705SXin Li #pragma omp single
1300*67e74705SXin Li {
1301*67e74705SXin Li #pragma omp parallel for
1302*67e74705SXin Li for (int i = 0; i < 10; ++i)
1303*67e74705SXin Li ;
1304*67e74705SXin Li }
1305*67e74705SXin Li #pragma omp single
1306*67e74705SXin Li {
1307*67e74705SXin Li #pragma omp parallel for simd
1308*67e74705SXin Li for (int i = 0; i < 10; ++i)
1309*67e74705SXin Li ;
1310*67e74705SXin Li }
1311*67e74705SXin Li #pragma omp single
1312*67e74705SXin Li {
1313*67e74705SXin Li #pragma omp parallel sections
1314*67e74705SXin Li {
1315*67e74705SXin Li bar();
1316*67e74705SXin Li }
1317*67e74705SXin Li }
1318*67e74705SXin Li #pragma omp single
1319*67e74705SXin Li {
1320*67e74705SXin Li #pragma omp task
1321*67e74705SXin Li {
1322*67e74705SXin Li bar();
1323*67e74705SXin Li }
1324*67e74705SXin Li }
1325*67e74705SXin Li #pragma omp single
1326*67e74705SXin Li {
1327*67e74705SXin Li #pragma omp taskyield
1328*67e74705SXin Li bar();
1329*67e74705SXin Li }
1330*67e74705SXin Li #pragma omp single
1331*67e74705SXin Li {
1332*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
1333*67e74705SXin Li bar();
1334*67e74705SXin Li }
1335*67e74705SXin Li #pragma omp single
1336*67e74705SXin Li {
1337*67e74705SXin Li #pragma omp taskwait
1338*67e74705SXin Li bar();
1339*67e74705SXin Li }
1340*67e74705SXin Li #pragma omp single
1341*67e74705SXin Li {
1342*67e74705SXin Li #pragma omp flush
1343*67e74705SXin Li bar();
1344*67e74705SXin Li }
1345*67e74705SXin Li #pragma omp single
1346*67e74705SXin Li {
1347*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1348*67e74705SXin Li bar();
1349*67e74705SXin Li }
1350*67e74705SXin Li #pragma omp single
1351*67e74705SXin Li {
1352*67e74705SXin Li #pragma omp atomic
1353*67e74705SXin Li ++a;
1354*67e74705SXin Li }
1355*67e74705SXin Li #pragma omp single
1356*67e74705SXin Li {
1357*67e74705SXin Li #pragma omp target
1358*67e74705SXin Li ++a;
1359*67e74705SXin Li }
1360*67e74705SXin Li #pragma omp single
1361*67e74705SXin Li {
1362*67e74705SXin Li #pragma omp target parallel
1363*67e74705SXin Li ++a;
1364*67e74705SXin Li }
1365*67e74705SXin Li #pragma omp single
1366*67e74705SXin Li {
1367*67e74705SXin Li #pragma omp target parallel for
1368*67e74705SXin Li for (int i = 0; i < 10; ++i)
1369*67e74705SXin Li ;
1370*67e74705SXin Li }
1371*67e74705SXin Li #pragma omp single
1372*67e74705SXin Li {
1373*67e74705SXin Li #pragma omp target enter data map(to: a)
1374*67e74705SXin Li ++a;
1375*67e74705SXin Li }
1376*67e74705SXin Li #pragma omp single
1377*67e74705SXin Li {
1378*67e74705SXin Li #pragma omp target exit data map(from: a)
1379*67e74705SXin Li ++a;
1380*67e74705SXin Li }
1381*67e74705SXin Li #pragma omp single
1382*67e74705SXin Li {
1383*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
1384*67e74705SXin Li ++a;
1385*67e74705SXin Li }
1386*67e74705SXin Li #pragma omp single
1387*67e74705SXin Li {
1388*67e74705SXin Li #pragma omp taskloop
1389*67e74705SXin Li for (int i = 0; i < 10; ++i)
1390*67e74705SXin Li ++a;
1391*67e74705SXin Li }
1392*67e74705SXin Li #pragma omp single
1393*67e74705SXin Li {
1394*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
1395*67e74705SXin Li for (int i = 0; i < 10; ++i)
1396*67e74705SXin Li ;
1397*67e74705SXin Li }
1398*67e74705SXin Li #pragma omp single
1399*67e74705SXin Li {
1400*67e74705SXin Li #pragma omp target update to(a)
1401*67e74705SXin Li bar();
1402*67e74705SXin Li }
1403*67e74705SXin Li #pragma omp single
1404*67e74705SXin Li {
1405*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
1406*67e74705SXin Li for (int i = 0; i < 10; ++i)
1407*67e74705SXin Li ;
1408*67e74705SXin Li }
1409*67e74705SXin Li #pragma omp single
1410*67e74705SXin Li {
1411*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
1412*67e74705SXin Li for (int i = 0; i < 10; ++i)
1413*67e74705SXin Li ;
1414*67e74705SXin Li }
1415*67e74705SXin Li #pragma omp single
1416*67e74705SXin Li {
1417*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
1418*67e74705SXin Li for (int i = 0; i < 10; ++i)
1419*67e74705SXin Li ;
1420*67e74705SXin Li }
1421*67e74705SXin Li
1422*67e74705SXin Li // MASTER DIRECTIVE
1423*67e74705SXin Li #pragma omp master
1424*67e74705SXin Li {
1425*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
1426*67e74705SXin Li for (int i = 0; i < 10; ++i)
1427*67e74705SXin Li ;
1428*67e74705SXin Li }
1429*67e74705SXin Li #pragma omp master
1430*67e74705SXin Li {
1431*67e74705SXin Li #pragma omp simd
1432*67e74705SXin Li for (int i = 0; i < 10; ++i)
1433*67e74705SXin Li ;
1434*67e74705SXin Li }
1435*67e74705SXin Li #pragma omp master
1436*67e74705SXin Li {
1437*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1438*67e74705SXin Li for (int i = 0; i < 10; ++i)
1439*67e74705SXin Li ;
1440*67e74705SXin Li }
1441*67e74705SXin Li #pragma omp master
1442*67e74705SXin Li {
1443*67e74705SXin Li #pragma omp parallel
1444*67e74705SXin Li for (int i = 0; i < 10; ++i)
1445*67e74705SXin Li ;
1446*67e74705SXin Li }
1447*67e74705SXin Li #pragma omp master
1448*67e74705SXin Li {
1449*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1450*67e74705SXin Li {
1451*67e74705SXin Li bar();
1452*67e74705SXin Li }
1453*67e74705SXin Li }
1454*67e74705SXin Li #pragma omp master
1455*67e74705SXin Li {
1456*67e74705SXin Li #pragma omp master // OK, though second 'master' is redundant
1457*67e74705SXin Li {
1458*67e74705SXin Li bar();
1459*67e74705SXin Li }
1460*67e74705SXin Li }
1461*67e74705SXin Li #pragma omp master
1462*67e74705SXin Li {
1463*67e74705SXin Li #pragma omp critical
1464*67e74705SXin Li {
1465*67e74705SXin Li bar();
1466*67e74705SXin Li }
1467*67e74705SXin Li }
1468*67e74705SXin Li #pragma omp master
1469*67e74705SXin Li {
1470*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1471*67e74705SXin Li {
1472*67e74705SXin Li bar();
1473*67e74705SXin Li }
1474*67e74705SXin Li }
1475*67e74705SXin Li #pragma omp master
1476*67e74705SXin Li {
1477*67e74705SXin Li #pragma omp parallel
1478*67e74705SXin Li {
1479*67e74705SXin Li #pragma omp master // OK
1480*67e74705SXin Li {
1481*67e74705SXin Li bar();
1482*67e74705SXin Li }
1483*67e74705SXin Li #pragma omp for // OK
1484*67e74705SXin Li for (int i = 0; i < 10; ++i)
1485*67e74705SXin Li ;
1486*67e74705SXin Li #pragma omp for simd // OK
1487*67e74705SXin Li for (int i = 0; i < 10; ++i)
1488*67e74705SXin Li ;
1489*67e74705SXin Li #pragma omp sections // OK
1490*67e74705SXin Li {
1491*67e74705SXin Li bar();
1492*67e74705SXin Li }
1493*67e74705SXin Li }
1494*67e74705SXin Li }
1495*67e74705SXin Li #pragma omp master
1496*67e74705SXin Li {
1497*67e74705SXin Li #pragma omp parallel for
1498*67e74705SXin Li for (int i = 0; i < 10; ++i)
1499*67e74705SXin Li ;
1500*67e74705SXin Li }
1501*67e74705SXin Li #pragma omp master
1502*67e74705SXin Li {
1503*67e74705SXin Li #pragma omp parallel for simd
1504*67e74705SXin Li for (int i = 0; i < 10; ++i)
1505*67e74705SXin Li ;
1506*67e74705SXin Li }
1507*67e74705SXin Li #pragma omp master
1508*67e74705SXin Li {
1509*67e74705SXin Li #pragma omp parallel sections
1510*67e74705SXin Li {
1511*67e74705SXin Li bar();
1512*67e74705SXin Li }
1513*67e74705SXin Li }
1514*67e74705SXin Li #pragma omp master
1515*67e74705SXin Li {
1516*67e74705SXin Li #pragma omp task
1517*67e74705SXin Li {
1518*67e74705SXin Li bar();
1519*67e74705SXin Li }
1520*67e74705SXin Li }
1521*67e74705SXin Li #pragma omp master
1522*67e74705SXin Li {
1523*67e74705SXin Li #pragma omp taskyield
1524*67e74705SXin Li bar();
1525*67e74705SXin Li }
1526*67e74705SXin Li #pragma omp master
1527*67e74705SXin Li {
1528*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
1529*67e74705SXin Li bar();
1530*67e74705SXin Li }
1531*67e74705SXin Li #pragma omp master
1532*67e74705SXin Li {
1533*67e74705SXin Li #pragma omp taskwait
1534*67e74705SXin Li bar();
1535*67e74705SXin Li }
1536*67e74705SXin Li #pragma omp master
1537*67e74705SXin Li {
1538*67e74705SXin Li #pragma omp flush
1539*67e74705SXin Li bar();
1540*67e74705SXin Li }
1541*67e74705SXin Li #pragma omp master
1542*67e74705SXin Li {
1543*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1544*67e74705SXin Li bar();
1545*67e74705SXin Li }
1546*67e74705SXin Li #pragma omp master
1547*67e74705SXin Li {
1548*67e74705SXin Li #pragma omp atomic
1549*67e74705SXin Li ++a;
1550*67e74705SXin Li }
1551*67e74705SXin Li #pragma omp master
1552*67e74705SXin Li {
1553*67e74705SXin Li #pragma omp target
1554*67e74705SXin Li ++a;
1555*67e74705SXin Li }
1556*67e74705SXin Li #pragma omp master
1557*67e74705SXin Li {
1558*67e74705SXin Li #pragma omp target parallel
1559*67e74705SXin Li ++a;
1560*67e74705SXin Li }
1561*67e74705SXin Li #pragma omp master
1562*67e74705SXin Li {
1563*67e74705SXin Li #pragma omp target parallel for
1564*67e74705SXin Li for (int i = 0; i < 10; ++i)
1565*67e74705SXin Li ;
1566*67e74705SXin Li }
1567*67e74705SXin Li #pragma omp master
1568*67e74705SXin Li {
1569*67e74705SXin Li #pragma omp target enter data map(to: a)
1570*67e74705SXin Li ++a;
1571*67e74705SXin Li }
1572*67e74705SXin Li #pragma omp master
1573*67e74705SXin Li {
1574*67e74705SXin Li #pragma omp target exit data map(from: a)
1575*67e74705SXin Li ++a;
1576*67e74705SXin Li }
1577*67e74705SXin Li #pragma omp master
1578*67e74705SXin Li {
1579*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
1580*67e74705SXin Li ++a;
1581*67e74705SXin Li }
1582*67e74705SXin Li #pragma omp master
1583*67e74705SXin Li {
1584*67e74705SXin Li #pragma omp taskloop
1585*67e74705SXin Li for (int i = 0; i < 10; ++i)
1586*67e74705SXin Li ++a;
1587*67e74705SXin Li }
1588*67e74705SXin Li #pragma omp master
1589*67e74705SXin Li {
1590*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
1591*67e74705SXin Li for (int i = 0; i < 10; ++i)
1592*67e74705SXin Li ;
1593*67e74705SXin Li }
1594*67e74705SXin Li #pragma omp master
1595*67e74705SXin Li {
1596*67e74705SXin Li #pragma omp target update to(a)
1597*67e74705SXin Li bar();
1598*67e74705SXin Li }
1599*67e74705SXin Li #pragma omp master
1600*67e74705SXin Li {
1601*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
1602*67e74705SXin Li for (int i = 0; i < 10; ++i)
1603*67e74705SXin Li ;
1604*67e74705SXin Li }
1605*67e74705SXin Li #pragma omp master
1606*67e74705SXin Li {
1607*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
1608*67e74705SXin Li for (int i = 0; i < 10; ++i)
1609*67e74705SXin Li ;
1610*67e74705SXin Li }
1611*67e74705SXin Li #pragma omp master
1612*67e74705SXin Li {
1613*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
1614*67e74705SXin Li for (int i = 0; i < 10; ++i)
1615*67e74705SXin Li ;
1616*67e74705SXin Li }
1617*67e74705SXin Li
1618*67e74705SXin Li // CRITICAL DIRECTIVE
1619*67e74705SXin Li #pragma omp critical
1620*67e74705SXin Li {
1621*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
1622*67e74705SXin Li for (int i = 0; i < 10; ++i)
1623*67e74705SXin Li ;
1624*67e74705SXin Li }
1625*67e74705SXin Li #pragma omp critical
1626*67e74705SXin Li {
1627*67e74705SXin Li #pragma omp simd
1628*67e74705SXin Li for (int i = 0; i < 10; ++i)
1629*67e74705SXin Li ;
1630*67e74705SXin Li }
1631*67e74705SXin Li #pragma omp critical
1632*67e74705SXin Li {
1633*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1634*67e74705SXin Li for (int i = 0; i < 10; ++i)
1635*67e74705SXin Li ;
1636*67e74705SXin Li }
1637*67e74705SXin Li #pragma omp critical
1638*67e74705SXin Li {
1639*67e74705SXin Li #pragma omp parallel
1640*67e74705SXin Li for (int i = 0; i < 10; ++i)
1641*67e74705SXin Li ;
1642*67e74705SXin Li }
1643*67e74705SXin Li #pragma omp critical
1644*67e74705SXin Li {
1645*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1646*67e74705SXin Li {
1647*67e74705SXin Li bar();
1648*67e74705SXin Li }
1649*67e74705SXin Li }
1650*67e74705SXin Li #pragma omp critical
1651*67e74705SXin Li {
1652*67e74705SXin Li #pragma omp master // OK, though second 'master' is redundant
1653*67e74705SXin Li {
1654*67e74705SXin Li bar();
1655*67e74705SXin Li }
1656*67e74705SXin Li }
1657*67e74705SXin Li #pragma omp critical
1658*67e74705SXin Li {
1659*67e74705SXin Li #pragma omp critical
1660*67e74705SXin Li {
1661*67e74705SXin Li bar();
1662*67e74705SXin Li }
1663*67e74705SXin Li }
1664*67e74705SXin Li #pragma omp critical
1665*67e74705SXin Li {
1666*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1667*67e74705SXin Li {
1668*67e74705SXin Li bar();
1669*67e74705SXin Li }
1670*67e74705SXin Li }
1671*67e74705SXin Li #pragma omp critical
1672*67e74705SXin Li {
1673*67e74705SXin Li #pragma omp parallel
1674*67e74705SXin Li {
1675*67e74705SXin Li #pragma omp master // OK
1676*67e74705SXin Li {
1677*67e74705SXin Li bar();
1678*67e74705SXin Li }
1679*67e74705SXin Li #pragma omp for // OK
1680*67e74705SXin Li for (int i = 0; i < 10; ++i)
1681*67e74705SXin Li ;
1682*67e74705SXin Li #pragma omp for simd // OK
1683*67e74705SXin Li for (int i = 0; i < 10; ++i)
1684*67e74705SXin Li ;
1685*67e74705SXin Li #pragma omp sections // OK
1686*67e74705SXin Li {
1687*67e74705SXin Li bar();
1688*67e74705SXin Li }
1689*67e74705SXin Li }
1690*67e74705SXin Li }
1691*67e74705SXin Li #pragma omp critical
1692*67e74705SXin Li {
1693*67e74705SXin Li #pragma omp parallel for
1694*67e74705SXin Li for (int i = 0; i < 10; ++i)
1695*67e74705SXin Li ;
1696*67e74705SXin Li }
1697*67e74705SXin Li #pragma omp critical
1698*67e74705SXin Li {
1699*67e74705SXin Li #pragma omp parallel for simd
1700*67e74705SXin Li for (int i = 0; i < 10; ++i)
1701*67e74705SXin Li ;
1702*67e74705SXin Li }
1703*67e74705SXin Li #pragma omp critical
1704*67e74705SXin Li {
1705*67e74705SXin Li #pragma omp parallel sections
1706*67e74705SXin Li {
1707*67e74705SXin Li bar();
1708*67e74705SXin Li }
1709*67e74705SXin Li }
1710*67e74705SXin Li #pragma omp critical
1711*67e74705SXin Li {
1712*67e74705SXin Li #pragma omp task
1713*67e74705SXin Li {
1714*67e74705SXin Li bar();
1715*67e74705SXin Li }
1716*67e74705SXin Li }
1717*67e74705SXin Li #pragma omp critical
1718*67e74705SXin Li {
1719*67e74705SXin Li #pragma omp taskyield
1720*67e74705SXin Li bar();
1721*67e74705SXin Li }
1722*67e74705SXin Li #pragma omp critical
1723*67e74705SXin Li {
1724*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
1725*67e74705SXin Li bar();
1726*67e74705SXin Li }
1727*67e74705SXin Li #pragma omp critical
1728*67e74705SXin Li {
1729*67e74705SXin Li #pragma omp taskwait
1730*67e74705SXin Li bar();
1731*67e74705SXin Li }
1732*67e74705SXin Li #pragma omp critical(Tuzik)
1733*67e74705SXin Li {
1734*67e74705SXin Li #pragma omp critical(grelka)
1735*67e74705SXin Li bar();
1736*67e74705SXin Li }
1737*67e74705SXin Li #pragma omp critical(Belka) // expected-note {{previous 'critical' region starts here}}
1738*67e74705SXin Li {
1739*67e74705SXin Li #pragma omp critical(Belka) // expected-error {{cannot nest 'critical' regions having the same name 'Belka'}}
1740*67e74705SXin Li {
1741*67e74705SXin Li #pragma omp critical(Tuzik)
1742*67e74705SXin Li {
1743*67e74705SXin Li #pragma omp parallel
1744*67e74705SXin Li #pragma omp critical(grelka)
1745*67e74705SXin Li {
1746*67e74705SXin Li bar();
1747*67e74705SXin Li }
1748*67e74705SXin Li }
1749*67e74705SXin Li }
1750*67e74705SXin Li }
1751*67e74705SXin Li #pragma omp critical
1752*67e74705SXin Li {
1753*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1754*67e74705SXin Li bar();
1755*67e74705SXin Li }
1756*67e74705SXin Li #pragma omp critical
1757*67e74705SXin Li {
1758*67e74705SXin Li #pragma omp atomic
1759*67e74705SXin Li ++a;
1760*67e74705SXin Li }
1761*67e74705SXin Li #pragma omp critical
1762*67e74705SXin Li {
1763*67e74705SXin Li #pragma omp target
1764*67e74705SXin Li ++a;
1765*67e74705SXin Li }
1766*67e74705SXin Li #pragma omp critical
1767*67e74705SXin Li {
1768*67e74705SXin Li #pragma omp target parallel
1769*67e74705SXin Li ++a;
1770*67e74705SXin Li }
1771*67e74705SXin Li #pragma omp critical
1772*67e74705SXin Li {
1773*67e74705SXin Li #pragma omp target parallel for
1774*67e74705SXin Li for (int i = 0; i < 10; ++i)
1775*67e74705SXin Li ;
1776*67e74705SXin Li }
1777*67e74705SXin Li #pragma omp critical
1778*67e74705SXin Li {
1779*67e74705SXin Li #pragma omp target enter data map(to: a)
1780*67e74705SXin Li ++a;
1781*67e74705SXin Li }
1782*67e74705SXin Li #pragma omp critical
1783*67e74705SXin Li {
1784*67e74705SXin Li #pragma omp target exit data map(from: a)
1785*67e74705SXin Li ++a;
1786*67e74705SXin Li }
1787*67e74705SXin Li #pragma omp critical
1788*67e74705SXin Li {
1789*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
1790*67e74705SXin Li ++a;
1791*67e74705SXin Li }
1792*67e74705SXin Li #pragma omp critical
1793*67e74705SXin Li {
1794*67e74705SXin Li #pragma omp taskloop
1795*67e74705SXin Li for (int i = 0; i < 10; ++i)
1796*67e74705SXin Li ++a;
1797*67e74705SXin Li }
1798*67e74705SXin Li #pragma omp critical
1799*67e74705SXin Li {
1800*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
1801*67e74705SXin Li for (int i = 0; i < 10; ++i)
1802*67e74705SXin Li ;
1803*67e74705SXin Li }
1804*67e74705SXin Li #pragma omp critical
1805*67e74705SXin Li {
1806*67e74705SXin Li #pragma omp target update to(a)
1807*67e74705SXin Li bar();
1808*67e74705SXin Li }
1809*67e74705SXin Li #pragma omp critical
1810*67e74705SXin Li {
1811*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
1812*67e74705SXin Li for (int i = 0; i < 10; ++i)
1813*67e74705SXin Li ;
1814*67e74705SXin Li }
1815*67e74705SXin Li #pragma omp critical
1816*67e74705SXin Li {
1817*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
1818*67e74705SXin Li for (int i = 0; i < 10; ++i)
1819*67e74705SXin Li ;
1820*67e74705SXin Li }
1821*67e74705SXin Li #pragma omp critical
1822*67e74705SXin Li {
1823*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
1824*67e74705SXin Li for (int i = 0; i < 10; ++i)
1825*67e74705SXin Li ;
1826*67e74705SXin Li }
1827*67e74705SXin Li
1828*67e74705SXin Li // PARALLEL FOR DIRECTIVE
1829*67e74705SXin Li #pragma omp parallel for
1830*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1831*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
1832*67e74705SXin Li for (int i = 0; i < 10; ++i)
1833*67e74705SXin Li ;
1834*67e74705SXin Li }
1835*67e74705SXin Li #pragma omp parallel for
1836*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1837*67e74705SXin Li #pragma omp simd
1838*67e74705SXin Li for (int i = 0; i < 10; ++i)
1839*67e74705SXin Li ;
1840*67e74705SXin Li }
1841*67e74705SXin Li #pragma omp parallel for
1842*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1843*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
1844*67e74705SXin Li for (int i = 0; i < 10; ++i)
1845*67e74705SXin Li ;
1846*67e74705SXin Li }
1847*67e74705SXin Li #pragma omp parallel for
1848*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1849*67e74705SXin Li #pragma omp parallel
1850*67e74705SXin Li for (int i = 0; i < 10; ++i)
1851*67e74705SXin Li ;
1852*67e74705SXin Li }
1853*67e74705SXin Li #pragma omp parallel for
1854*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1855*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
1856*67e74705SXin Li {
1857*67e74705SXin Li bar();
1858*67e74705SXin Li }
1859*67e74705SXin Li }
1860*67e74705SXin Li #pragma omp parallel for
1861*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1862*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
1863*67e74705SXin Li {
1864*67e74705SXin Li bar();
1865*67e74705SXin Li }
1866*67e74705SXin Li }
1867*67e74705SXin Li #pragma omp parallel for
1868*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1869*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
1870*67e74705SXin Li {
1871*67e74705SXin Li bar();
1872*67e74705SXin Li }
1873*67e74705SXin Li }
1874*67e74705SXin Li
1875*67e74705SXin Li #pragma omp parallel for
1876*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1877*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
1878*67e74705SXin Li {
1879*67e74705SXin Li bar();
1880*67e74705SXin Li }
1881*67e74705SXin Li }
1882*67e74705SXin Li
1883*67e74705SXin Li #pragma omp parallel for
1884*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1885*67e74705SXin Li #pragma omp critical
1886*67e74705SXin Li {
1887*67e74705SXin Li bar();
1888*67e74705SXin Li }
1889*67e74705SXin Li }
1890*67e74705SXin Li
1891*67e74705SXin Li #pragma omp parallel for
1892*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1893*67e74705SXin Li #pragma omp parallel
1894*67e74705SXin Li {
1895*67e74705SXin Li #pragma omp single // OK
1896*67e74705SXin Li {
1897*67e74705SXin Li bar();
1898*67e74705SXin Li }
1899*67e74705SXin Li #pragma omp for // OK
1900*67e74705SXin Li for (int i = 0; i < 10; ++i)
1901*67e74705SXin Li ;
1902*67e74705SXin Li #pragma omp for simd // OK
1903*67e74705SXin Li for (int i = 0; i < 10; ++i)
1904*67e74705SXin Li ;
1905*67e74705SXin Li #pragma omp sections // OK
1906*67e74705SXin Li {
1907*67e74705SXin Li bar();
1908*67e74705SXin Li }
1909*67e74705SXin Li }
1910*67e74705SXin Li }
1911*67e74705SXin Li #pragma omp parallel for
1912*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1913*67e74705SXin Li #pragma omp parallel for
1914*67e74705SXin Li for (int i = 0; i < 10; ++i)
1915*67e74705SXin Li ;
1916*67e74705SXin Li }
1917*67e74705SXin Li #pragma omp parallel for
1918*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1919*67e74705SXin Li #pragma omp parallel for simd
1920*67e74705SXin Li for (int i = 0; i < 10; ++i)
1921*67e74705SXin Li ;
1922*67e74705SXin Li }
1923*67e74705SXin Li #pragma omp parallel for
1924*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1925*67e74705SXin Li #pragma omp parallel sections
1926*67e74705SXin Li {
1927*67e74705SXin Li bar();
1928*67e74705SXin Li }
1929*67e74705SXin Li }
1930*67e74705SXin Li #pragma omp parallel for
1931*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1932*67e74705SXin Li #pragma omp task
1933*67e74705SXin Li {
1934*67e74705SXin Li bar();
1935*67e74705SXin Li }
1936*67e74705SXin Li }
1937*67e74705SXin Li #pragma omp parallel for
1938*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1939*67e74705SXin Li #pragma omp taskyield
1940*67e74705SXin Li bar();
1941*67e74705SXin Li }
1942*67e74705SXin Li #pragma omp parallel for
1943*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1944*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
1945*67e74705SXin Li bar();
1946*67e74705SXin Li }
1947*67e74705SXin Li #pragma omp parallel for
1948*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1949*67e74705SXin Li #pragma omp taskwait
1950*67e74705SXin Li bar();
1951*67e74705SXin Li }
1952*67e74705SXin Li #pragma omp parallel for
1953*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1954*67e74705SXin Li #pragma omp flush
1955*67e74705SXin Li bar();
1956*67e74705SXin Li }
1957*67e74705SXin Li #pragma omp parallel for
1958*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1959*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
1960*67e74705SXin Li bar();
1961*67e74705SXin Li }
1962*67e74705SXin Li #pragma omp parallel for ordered
1963*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1964*67e74705SXin Li #pragma omp ordered // OK
1965*67e74705SXin Li bar();
1966*67e74705SXin Li }
1967*67e74705SXin Li #pragma omp parallel for
1968*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1969*67e74705SXin Li #pragma omp atomic
1970*67e74705SXin Li ++a;
1971*67e74705SXin Li }
1972*67e74705SXin Li #pragma omp parallel for
1973*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1974*67e74705SXin Li #pragma omp target
1975*67e74705SXin Li ++a;
1976*67e74705SXin Li }
1977*67e74705SXin Li #pragma omp parallel for
1978*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1979*67e74705SXin Li #pragma omp target parallel
1980*67e74705SXin Li ++a;
1981*67e74705SXin Li }
1982*67e74705SXin Li #pragma omp parallel for
1983*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1984*67e74705SXin Li #pragma omp target parallel for
1985*67e74705SXin Li for (int i = 0; i < 10; ++i)
1986*67e74705SXin Li ;
1987*67e74705SXin Li }
1988*67e74705SXin Li #pragma omp parallel for
1989*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1990*67e74705SXin Li #pragma omp target enter data map(to: a)
1991*67e74705SXin Li ++a;
1992*67e74705SXin Li }
1993*67e74705SXin Li #pragma omp parallel for
1994*67e74705SXin Li for (int i = 0; i < 10; ++i) {
1995*67e74705SXin Li #pragma omp target exit data map(from: a)
1996*67e74705SXin Li ++a;
1997*67e74705SXin Li }
1998*67e74705SXin Li #pragma omp parallel for
1999*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2000*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
2001*67e74705SXin Li ++a;
2002*67e74705SXin Li }
2003*67e74705SXin Li #pragma omp parallel for
2004*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2005*67e74705SXin Li #pragma omp taskloop
2006*67e74705SXin Li for (int i = 0; i < 10; ++i)
2007*67e74705SXin Li ++a;
2008*67e74705SXin Li }
2009*67e74705SXin Li #pragma omp parallel for
2010*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2011*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
2012*67e74705SXin Li for (int j = 0; j < 10; ++j)
2013*67e74705SXin Li ;
2014*67e74705SXin Li }
2015*67e74705SXin Li #pragma omp parallel for
2016*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2017*67e74705SXin Li #pragma omp target update to(a)
2018*67e74705SXin Li }
2019*67e74705SXin Li #pragma omp parallel for
2020*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2021*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
2022*67e74705SXin Li for (int j = 0; j < 10; ++j)
2023*67e74705SXin Li ;
2024*67e74705SXin Li }
2025*67e74705SXin Li #pragma omp parallel for
2026*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2027*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
2028*67e74705SXin Li for (int j = 0; j < 10; ++j)
2029*67e74705SXin Li ;
2030*67e74705SXin Li }
2031*67e74705SXin Li #pragma omp parallel for
2032*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2033*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
2034*67e74705SXin Li for (int j = 0; j < 10; ++j)
2035*67e74705SXin Li ;
2036*67e74705SXin Li }
2037*67e74705SXin Li
2038*67e74705SXin Li // PARALLEL FOR SIMD DIRECTIVE
2039*67e74705SXin Li #pragma omp parallel for simd
2040*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2041*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2042*67e74705SXin Li for (int i = 0; i < 10; ++i)
2043*67e74705SXin Li ;
2044*67e74705SXin Li }
2045*67e74705SXin Li #pragma omp parallel for simd
2046*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2047*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
2048*67e74705SXin Li for (int i = 0; i < 10; ++i)
2049*67e74705SXin Li ;
2050*67e74705SXin Li }
2051*67e74705SXin Li #pragma omp parallel for simd
2052*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2053*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2054*67e74705SXin Li for (int i = 0; i < 10; ++i)
2055*67e74705SXin Li ;
2056*67e74705SXin Li }
2057*67e74705SXin Li #pragma omp parallel for simd
2058*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2059*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2060*67e74705SXin Li for (int i = 0; i < 10; ++i)
2061*67e74705SXin Li ;
2062*67e74705SXin Li }
2063*67e74705SXin Li #pragma omp parallel for simd
2064*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2065*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2066*67e74705SXin Li {
2067*67e74705SXin Li bar();
2068*67e74705SXin Li }
2069*67e74705SXin Li }
2070*67e74705SXin Li #pragma omp parallel for simd
2071*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2072*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2073*67e74705SXin Li {
2074*67e74705SXin Li bar();
2075*67e74705SXin Li }
2076*67e74705SXin Li }
2077*67e74705SXin Li #pragma omp parallel for simd
2078*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2079*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2080*67e74705SXin Li {
2081*67e74705SXin Li bar();
2082*67e74705SXin Li }
2083*67e74705SXin Li }
2084*67e74705SXin Li
2085*67e74705SXin Li #pragma omp parallel for simd
2086*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2087*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2088*67e74705SXin Li {
2089*67e74705SXin Li bar();
2090*67e74705SXin Li }
2091*67e74705SXin Li }
2092*67e74705SXin Li
2093*67e74705SXin Li #pragma omp parallel for simd
2094*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2095*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2096*67e74705SXin Li {
2097*67e74705SXin Li bar();
2098*67e74705SXin Li }
2099*67e74705SXin Li }
2100*67e74705SXin Li
2101*67e74705SXin Li #pragma omp parallel for simd
2102*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2103*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2104*67e74705SXin Li {
2105*67e74705SXin Li #pragma omp single
2106*67e74705SXin Li {
2107*67e74705SXin Li bar();
2108*67e74705SXin Li }
2109*67e74705SXin Li #pragma omp for
2110*67e74705SXin Li for (int i = 0; i < 10; ++i)
2111*67e74705SXin Li ;
2112*67e74705SXin Li #pragma omp for simd
2113*67e74705SXin Li for (int i = 0; i < 10; ++i)
2114*67e74705SXin Li ;
2115*67e74705SXin Li #pragma omp sections
2116*67e74705SXin Li {
2117*67e74705SXin Li bar();
2118*67e74705SXin Li }
2119*67e74705SXin Li }
2120*67e74705SXin Li }
2121*67e74705SXin Li #pragma omp parallel for simd
2122*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2123*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2124*67e74705SXin Li for (int i = 0; i < 10; ++i)
2125*67e74705SXin Li ;
2126*67e74705SXin Li }
2127*67e74705SXin Li #pragma omp parallel for simd
2128*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2129*67e74705SXin Li #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
2130*67e74705SXin Li for (int i = 0; i < 10; ++i)
2131*67e74705SXin Li ;
2132*67e74705SXin Li }
2133*67e74705SXin Li #pragma omp parallel for simd
2134*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2135*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2136*67e74705SXin Li {
2137*67e74705SXin Li bar();
2138*67e74705SXin Li }
2139*67e74705SXin Li }
2140*67e74705SXin Li #pragma omp parallel for simd
2141*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2142*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2143*67e74705SXin Li {
2144*67e74705SXin Li bar();
2145*67e74705SXin Li }
2146*67e74705SXin Li }
2147*67e74705SXin Li #pragma omp parallel for simd
2148*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2149*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2150*67e74705SXin Li bar();
2151*67e74705SXin Li }
2152*67e74705SXin Li #pragma omp parallel for simd
2153*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2154*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2155*67e74705SXin Li bar();
2156*67e74705SXin Li }
2157*67e74705SXin Li #pragma omp parallel for simd
2158*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2159*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2160*67e74705SXin Li bar();
2161*67e74705SXin Li }
2162*67e74705SXin Li #pragma omp parallel for simd
2163*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2164*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2165*67e74705SXin Li bar();
2166*67e74705SXin Li }
2167*67e74705SXin Li #pragma omp parallel for simd
2168*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2169*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2170*67e74705SXin Li bar();
2171*67e74705SXin Li }
2172*67e74705SXin Li #pragma omp parallel for simd
2173*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2174*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2175*67e74705SXin Li bar();
2176*67e74705SXin Li }
2177*67e74705SXin Li #pragma omp parallel for simd
2178*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2179*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2180*67e74705SXin Li ++a;
2181*67e74705SXin Li }
2182*67e74705SXin Li #pragma omp parallel for simd
2183*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2184*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2185*67e74705SXin Li ++a;
2186*67e74705SXin Li }
2187*67e74705SXin Li #pragma omp parallel for simd
2188*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2189*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2190*67e74705SXin Li ++a;
2191*67e74705SXin Li }
2192*67e74705SXin Li #pragma omp parallel for simd
2193*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2194*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2195*67e74705SXin Li for (int i = 0; i < 10; ++i)
2196*67e74705SXin Li ;
2197*67e74705SXin Li }
2198*67e74705SXin Li #pragma omp parallel for simd
2199*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2200*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2201*67e74705SXin Li ++a;
2202*67e74705SXin Li }
2203*67e74705SXin Li #pragma omp parallel for simd
2204*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2205*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2206*67e74705SXin Li ++a;
2207*67e74705SXin Li }
2208*67e74705SXin Li #pragma omp parallel for simd
2209*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2210*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2211*67e74705SXin Li ++a;
2212*67e74705SXin Li }
2213*67e74705SXin Li #pragma omp parallel for simd
2214*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2215*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2216*67e74705SXin Li for (int i = 0; i < 10; ++i)
2217*67e74705SXin Li ++a;
2218*67e74705SXin Li }
2219*67e74705SXin Li #pragma omp parallel for simd
2220*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2221*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2222*67e74705SXin Li for (int j = 0; j < 10; ++j)
2223*67e74705SXin Li ;
2224*67e74705SXin Li }
2225*67e74705SXin Li #pragma omp parallel for simd
2226*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2227*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2228*67e74705SXin Li bar();
2229*67e74705SXin Li }
2230*67e74705SXin Li #pragma omp parallel for simd
2231*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2232*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2233*67e74705SXin Li for (int j = 0; j < 10; ++j)
2234*67e74705SXin Li ;
2235*67e74705SXin Li }
2236*67e74705SXin Li #pragma omp parallel for simd
2237*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2238*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2239*67e74705SXin Li for (int j = 0; j < 10; ++j)
2240*67e74705SXin Li ;
2241*67e74705SXin Li }
2242*67e74705SXin Li #pragma omp parallel for simd
2243*67e74705SXin Li for (int i = 0; i < 10; ++i) {
2244*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2245*67e74705SXin Li for (int j = 0; j < 10; ++j)
2246*67e74705SXin Li ;
2247*67e74705SXin Li }
2248*67e74705SXin Li
2249*67e74705SXin Li // PARALLEL SECTIONS DIRECTIVE
2250*67e74705SXin Li #pragma omp parallel sections
2251*67e74705SXin Li {
2252*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
2253*67e74705SXin Li for (int i = 0; i < 10; ++i)
2254*67e74705SXin Li ;
2255*67e74705SXin Li }
2256*67e74705SXin Li #pragma omp parallel sections
2257*67e74705SXin Li {
2258*67e74705SXin Li #pragma omp simd
2259*67e74705SXin Li for (int i = 0; i < 10; ++i)
2260*67e74705SXin Li ;
2261*67e74705SXin Li }
2262*67e74705SXin Li #pragma omp parallel sections
2263*67e74705SXin Li {
2264*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
2265*67e74705SXin Li for (int i = 0; i < 10; ++i)
2266*67e74705SXin Li ;
2267*67e74705SXin Li }
2268*67e74705SXin Li #pragma omp parallel sections
2269*67e74705SXin Li {
2270*67e74705SXin Li #pragma omp parallel
2271*67e74705SXin Li for (int i = 0; i < 10; ++i)
2272*67e74705SXin Li ;
2273*67e74705SXin Li }
2274*67e74705SXin Li #pragma omp parallel sections
2275*67e74705SXin Li {
2276*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
2277*67e74705SXin Li {
2278*67e74705SXin Li bar();
2279*67e74705SXin Li }
2280*67e74705SXin Li }
2281*67e74705SXin Li #pragma omp parallel sections
2282*67e74705SXin Li {
2283*67e74705SXin Li #pragma omp section
2284*67e74705SXin Li {
2285*67e74705SXin Li bar();
2286*67e74705SXin Li }
2287*67e74705SXin Li }
2288*67e74705SXin Li #pragma omp parallel sections
2289*67e74705SXin Li {
2290*67e74705SXin Li #pragma omp section
2291*67e74705SXin Li {
2292*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
2293*67e74705SXin Li bar();
2294*67e74705SXin Li }
2295*67e74705SXin Li }
2296*67e74705SXin Li #pragma omp parallel sections
2297*67e74705SXin Li {
2298*67e74705SXin Li #pragma omp section
2299*67e74705SXin Li {
2300*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
2301*67e74705SXin Li bar();
2302*67e74705SXin Li }
2303*67e74705SXin Li }
2304*67e74705SXin Li #pragma omp parallel sections
2305*67e74705SXin Li {
2306*67e74705SXin Li #pragma omp section
2307*67e74705SXin Li {
2308*67e74705SXin Li #pragma omp critical
2309*67e74705SXin Li bar();
2310*67e74705SXin Li }
2311*67e74705SXin Li }
2312*67e74705SXin Li #pragma omp parallel sections
2313*67e74705SXin Li {
2314*67e74705SXin Li #pragma omp parallel
2315*67e74705SXin Li {
2316*67e74705SXin Li #pragma omp single // OK
2317*67e74705SXin Li {
2318*67e74705SXin Li bar();
2319*67e74705SXin Li }
2320*67e74705SXin Li #pragma omp for // OK
2321*67e74705SXin Li for (int i = 0; i < 10; ++i)
2322*67e74705SXin Li ;
2323*67e74705SXin Li #pragma omp for simd // OK
2324*67e74705SXin Li for (int i = 0; i < 10; ++i)
2325*67e74705SXin Li ;
2326*67e74705SXin Li #pragma omp sections // OK
2327*67e74705SXin Li {
2328*67e74705SXin Li bar();
2329*67e74705SXin Li }
2330*67e74705SXin Li }
2331*67e74705SXin Li }
2332*67e74705SXin Li #pragma omp parallel sections
2333*67e74705SXin Li {
2334*67e74705SXin Li #pragma omp parallel for
2335*67e74705SXin Li for (int i = 0; i < 10; ++i)
2336*67e74705SXin Li ;
2337*67e74705SXin Li }
2338*67e74705SXin Li #pragma omp parallel sections
2339*67e74705SXin Li {
2340*67e74705SXin Li #pragma omp parallel for simd
2341*67e74705SXin Li for (int i = 0; i < 10; ++i)
2342*67e74705SXin Li ;
2343*67e74705SXin Li }
2344*67e74705SXin Li #pragma omp parallel sections
2345*67e74705SXin Li {
2346*67e74705SXin Li #pragma omp parallel sections
2347*67e74705SXin Li {
2348*67e74705SXin Li bar();
2349*67e74705SXin Li }
2350*67e74705SXin Li }
2351*67e74705SXin Li #pragma omp parallel sections
2352*67e74705SXin Li {
2353*67e74705SXin Li #pragma omp task
2354*67e74705SXin Li {
2355*67e74705SXin Li bar();
2356*67e74705SXin Li }
2357*67e74705SXin Li }
2358*67e74705SXin Li #pragma omp parallel sections
2359*67e74705SXin Li {
2360*67e74705SXin Li #pragma omp taskyield
2361*67e74705SXin Li }
2362*67e74705SXin Li #pragma omp parallel sections
2363*67e74705SXin Li {
2364*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
2365*67e74705SXin Li }
2366*67e74705SXin Li #pragma omp parallel sections
2367*67e74705SXin Li {
2368*67e74705SXin Li #pragma omp taskwait
2369*67e74705SXin Li }
2370*67e74705SXin Li #pragma omp parallel sections
2371*67e74705SXin Li {
2372*67e74705SXin Li #pragma omp flush
2373*67e74705SXin Li }
2374*67e74705SXin Li #pragma omp parallel sections
2375*67e74705SXin Li {
2376*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
2377*67e74705SXin Li bar();
2378*67e74705SXin Li }
2379*67e74705SXin Li #pragma omp parallel sections
2380*67e74705SXin Li {
2381*67e74705SXin Li #pragma omp atomic
2382*67e74705SXin Li ++a;
2383*67e74705SXin Li }
2384*67e74705SXin Li #pragma omp parallel sections
2385*67e74705SXin Li {
2386*67e74705SXin Li #pragma omp target
2387*67e74705SXin Li ++a;
2388*67e74705SXin Li }
2389*67e74705SXin Li #pragma omp parallel sections
2390*67e74705SXin Li {
2391*67e74705SXin Li #pragma omp target parallel
2392*67e74705SXin Li ++a;
2393*67e74705SXin Li }
2394*67e74705SXin Li #pragma omp parallel sections
2395*67e74705SXin Li {
2396*67e74705SXin Li #pragma omp target parallel for
2397*67e74705SXin Li for (int i = 0; i < 10; ++i)
2398*67e74705SXin Li ;
2399*67e74705SXin Li }
2400*67e74705SXin Li #pragma omp parallel sections
2401*67e74705SXin Li {
2402*67e74705SXin Li #pragma omp target enter data map(to: a)
2403*67e74705SXin Li }
2404*67e74705SXin Li #pragma omp parallel sections
2405*67e74705SXin Li {
2406*67e74705SXin Li #pragma omp target exit data map(from: a)
2407*67e74705SXin Li }
2408*67e74705SXin Li #pragma omp parallel sections
2409*67e74705SXin Li {
2410*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
2411*67e74705SXin Li ++a;
2412*67e74705SXin Li }
2413*67e74705SXin Li #pragma omp parallel sections
2414*67e74705SXin Li {
2415*67e74705SXin Li #pragma omp taskloop
2416*67e74705SXin Li for (int i = 0; i < 10; ++i)
2417*67e74705SXin Li ++a;
2418*67e74705SXin Li }
2419*67e74705SXin Li #pragma omp parallel sections
2420*67e74705SXin Li {
2421*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
2422*67e74705SXin Li for (int i = 0; i < 10; ++i)
2423*67e74705SXin Li ;
2424*67e74705SXin Li }
2425*67e74705SXin Li #pragma omp parallel sections
2426*67e74705SXin Li {
2427*67e74705SXin Li #pragma omp target update to(a)
2428*67e74705SXin Li }
2429*67e74705SXin Li #pragma omp parallel sections
2430*67e74705SXin Li {
2431*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
2432*67e74705SXin Li for (int i = 0; i < 10; ++i)
2433*67e74705SXin Li ;
2434*67e74705SXin Li }
2435*67e74705SXin Li #pragma omp parallel sections
2436*67e74705SXin Li {
2437*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
2438*67e74705SXin Li for (int i = 0; i < 10; ++i)
2439*67e74705SXin Li ;
2440*67e74705SXin Li }
2441*67e74705SXin Li #pragma omp parallel sections
2442*67e74705SXin Li {
2443*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
2444*67e74705SXin Li for (int i = 0; i < 10; ++i)
2445*67e74705SXin Li ;
2446*67e74705SXin Li }
2447*67e74705SXin Li
2448*67e74705SXin Li // TASK DIRECTIVE
2449*67e74705SXin Li #pragma omp task
2450*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
2451*67e74705SXin Li for (int i = 0; i < 10; ++i)
2452*67e74705SXin Li ;
2453*67e74705SXin Li #pragma omp task
2454*67e74705SXin Li #pragma omp simd
2455*67e74705SXin Li for (int i = 0; i < 10; ++i)
2456*67e74705SXin Li ;
2457*67e74705SXin Li #pragma omp task
2458*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
2459*67e74705SXin Li for (int i = 0; i < 10; ++i)
2460*67e74705SXin Li ;
2461*67e74705SXin Li #pragma omp task
2462*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
2463*67e74705SXin Li {
2464*67e74705SXin Li bar();
2465*67e74705SXin Li }
2466*67e74705SXin Li #pragma omp task
2467*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
2468*67e74705SXin Li {
2469*67e74705SXin Li bar();
2470*67e74705SXin Li }
2471*67e74705SXin Li #pragma omp task
2472*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
2473*67e74705SXin Li bar();
2474*67e74705SXin Li #pragma omp task
2475*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
2476*67e74705SXin Li bar();
2477*67e74705SXin Li #pragma omp task
2478*67e74705SXin Li #pragma omp critical
2479*67e74705SXin Li bar();
2480*67e74705SXin Li
2481*67e74705SXin Li #pragma omp task
2482*67e74705SXin Li #pragma omp parallel for
2483*67e74705SXin Li for (int i = 0; i < 10; ++i)
2484*67e74705SXin Li ;
2485*67e74705SXin Li #pragma omp task
2486*67e74705SXin Li #pragma omp parallel for simd
2487*67e74705SXin Li for (int i = 0; i < 10; ++i)
2488*67e74705SXin Li ;
2489*67e74705SXin Li #pragma omp task
2490*67e74705SXin Li #pragma omp parallel sections
2491*67e74705SXin Li {
2492*67e74705SXin Li bar();
2493*67e74705SXin Li }
2494*67e74705SXin Li #pragma omp task
2495*67e74705SXin Li #pragma omp task
2496*67e74705SXin Li {
2497*67e74705SXin Li bar();
2498*67e74705SXin Li }
2499*67e74705SXin Li #pragma omp task
2500*67e74705SXin Li {
2501*67e74705SXin Li #pragma omp taskyield
2502*67e74705SXin Li bar();
2503*67e74705SXin Li }
2504*67e74705SXin Li #pragma omp task
2505*67e74705SXin Li {
2506*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
2507*67e74705SXin Li bar();
2508*67e74705SXin Li }
2509*67e74705SXin Li #pragma omp task
2510*67e74705SXin Li {
2511*67e74705SXin Li #pragma omp taskwait
2512*67e74705SXin Li bar();
2513*67e74705SXin Li }
2514*67e74705SXin Li #pragma omp task
2515*67e74705SXin Li {
2516*67e74705SXin Li #pragma omp flush
2517*67e74705SXin Li bar();
2518*67e74705SXin Li }
2519*67e74705SXin Li #pragma omp task
2520*67e74705SXin Li {
2521*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
2522*67e74705SXin Li bar();
2523*67e74705SXin Li }
2524*67e74705SXin Li #pragma omp task
2525*67e74705SXin Li {
2526*67e74705SXin Li #pragma omp atomic
2527*67e74705SXin Li ++a;
2528*67e74705SXin Li }
2529*67e74705SXin Li #pragma omp task
2530*67e74705SXin Li {
2531*67e74705SXin Li #pragma omp target
2532*67e74705SXin Li ++a;
2533*67e74705SXin Li }
2534*67e74705SXin Li #pragma omp task
2535*67e74705SXin Li {
2536*67e74705SXin Li #pragma omp target parallel
2537*67e74705SXin Li ++a;
2538*67e74705SXin Li }
2539*67e74705SXin Li #pragma omp task
2540*67e74705SXin Li #pragma omp target parallel for
2541*67e74705SXin Li for (int i = 0; i < 10; ++i)
2542*67e74705SXin Li ;
2543*67e74705SXin Li #pragma omp task
2544*67e74705SXin Li {
2545*67e74705SXin Li #pragma omp target enter data map(to: a)
2546*67e74705SXin Li ++a;
2547*67e74705SXin Li }
2548*67e74705SXin Li #pragma omp task
2549*67e74705SXin Li {
2550*67e74705SXin Li #pragma omp target exit data map(from: a)
2551*67e74705SXin Li ++a;
2552*67e74705SXin Li }
2553*67e74705SXin Li #pragma omp task
2554*67e74705SXin Li {
2555*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
2556*67e74705SXin Li ++a;
2557*67e74705SXin Li }
2558*67e74705SXin Li #pragma omp task
2559*67e74705SXin Li {
2560*67e74705SXin Li #pragma omp taskloop
2561*67e74705SXin Li for (int i = 0; i < 10; ++i)
2562*67e74705SXin Li ++a;
2563*67e74705SXin Li }
2564*67e74705SXin Li #pragma omp task
2565*67e74705SXin Li {
2566*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
2567*67e74705SXin Li for (int i = 0; i < 10; ++i)
2568*67e74705SXin Li ;
2569*67e74705SXin Li }
2570*67e74705SXin Li #pragma omp task
2571*67e74705SXin Li {
2572*67e74705SXin Li #pragma omp target update to(a)
2573*67e74705SXin Li bar();
2574*67e74705SXin Li }
2575*67e74705SXin Li #pragma omp task
2576*67e74705SXin Li {
2577*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
2578*67e74705SXin Li for (int i = 0; i < 10; ++i)
2579*67e74705SXin Li ;
2580*67e74705SXin Li }
2581*67e74705SXin Li #pragma omp task
2582*67e74705SXin Li {
2583*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
2584*67e74705SXin Li for (int i = 0; i < 10; ++i)
2585*67e74705SXin Li ;
2586*67e74705SXin Li }
2587*67e74705SXin Li #pragma omp task
2588*67e74705SXin Li {
2589*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
2590*67e74705SXin Li for (int i = 0; i < 10; ++i)
2591*67e74705SXin Li ;
2592*67e74705SXin Li }
2593*67e74705SXin Li
2594*67e74705SXin Li // ORDERED DIRECTIVE
2595*67e74705SXin Li #pragma omp ordered
2596*67e74705SXin Li {
2597*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
2598*67e74705SXin Li for (int i = 0; i < 10; ++i)
2599*67e74705SXin Li ;
2600*67e74705SXin Li }
2601*67e74705SXin Li #pragma omp ordered
2602*67e74705SXin Li {
2603*67e74705SXin Li #pragma omp simd
2604*67e74705SXin Li for (int i = 0; i < 10; ++i)
2605*67e74705SXin Li ;
2606*67e74705SXin Li }
2607*67e74705SXin Li #pragma omp ordered
2608*67e74705SXin Li {
2609*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
2610*67e74705SXin Li for (int i = 0; i < 10; ++i)
2611*67e74705SXin Li ;
2612*67e74705SXin Li }
2613*67e74705SXin Li #pragma omp ordered
2614*67e74705SXin Li {
2615*67e74705SXin Li #pragma omp parallel
2616*67e74705SXin Li for (int i = 0; i < 10; ++i)
2617*67e74705SXin Li ;
2618*67e74705SXin Li }
2619*67e74705SXin Li #pragma omp ordered
2620*67e74705SXin Li {
2621*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
2622*67e74705SXin Li {
2623*67e74705SXin Li bar();
2624*67e74705SXin Li }
2625*67e74705SXin Li }
2626*67e74705SXin Li #pragma omp ordered
2627*67e74705SXin Li {
2628*67e74705SXin Li #pragma omp master // OK, though second 'ordered' is redundant
2629*67e74705SXin Li {
2630*67e74705SXin Li bar();
2631*67e74705SXin Li }
2632*67e74705SXin Li }
2633*67e74705SXin Li #pragma omp ordered
2634*67e74705SXin Li {
2635*67e74705SXin Li #pragma omp critical
2636*67e74705SXin Li {
2637*67e74705SXin Li bar();
2638*67e74705SXin Li }
2639*67e74705SXin Li }
2640*67e74705SXin Li #pragma omp ordered
2641*67e74705SXin Li {
2642*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
2643*67e74705SXin Li {
2644*67e74705SXin Li bar();
2645*67e74705SXin Li }
2646*67e74705SXin Li }
2647*67e74705SXin Li #pragma omp ordered
2648*67e74705SXin Li {
2649*67e74705SXin Li #pragma omp parallel for ordered
2650*67e74705SXin Li for (int j = 0; j < 10; ++j) {
2651*67e74705SXin Li #pragma omp ordered // OK
2652*67e74705SXin Li {
2653*67e74705SXin Li bar();
2654*67e74705SXin Li }
2655*67e74705SXin Li }
2656*67e74705SXin Li }
2657*67e74705SXin Li #pragma omp ordered
2658*67e74705SXin Li {
2659*67e74705SXin Li #pragma omp parallel for simd ordered
2660*67e74705SXin Li for (int j = 0; j < 10; ++j) {
2661*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
2662*67e74705SXin Li {
2663*67e74705SXin Li bar();
2664*67e74705SXin Li }
2665*67e74705SXin Li }
2666*67e74705SXin Li }
2667*67e74705SXin Li #pragma omp ordered
2668*67e74705SXin Li {
2669*67e74705SXin Li #pragma omp parallel for simd ordered
2670*67e74705SXin Li for (int j = 0; j < 10; ++j) {
2671*67e74705SXin Li #pragma omp ordered simd
2672*67e74705SXin Li {
2673*67e74705SXin Li bar();
2674*67e74705SXin Li }
2675*67e74705SXin Li }
2676*67e74705SXin Li }
2677*67e74705SXin Li #pragma omp ordered
2678*67e74705SXin Li {
2679*67e74705SXin Li #pragma omp parallel for
2680*67e74705SXin Li for (int i = 0; i < 10; ++i)
2681*67e74705SXin Li ;
2682*67e74705SXin Li }
2683*67e74705SXin Li #pragma omp ordered
2684*67e74705SXin Li {
2685*67e74705SXin Li #pragma omp parallel for simd
2686*67e74705SXin Li for (int i = 0; i < 10; ++i)
2687*67e74705SXin Li ;
2688*67e74705SXin Li }
2689*67e74705SXin Li #pragma omp ordered
2690*67e74705SXin Li {
2691*67e74705SXin Li #pragma omp parallel sections
2692*67e74705SXin Li {
2693*67e74705SXin Li bar();
2694*67e74705SXin Li }
2695*67e74705SXin Li }
2696*67e74705SXin Li #pragma omp ordered
2697*67e74705SXin Li {
2698*67e74705SXin Li #pragma omp task
2699*67e74705SXin Li {
2700*67e74705SXin Li bar();
2701*67e74705SXin Li }
2702*67e74705SXin Li }
2703*67e74705SXin Li #pragma omp ordered
2704*67e74705SXin Li {
2705*67e74705SXin Li #pragma omp taskyield
2706*67e74705SXin Li bar();
2707*67e74705SXin Li }
2708*67e74705SXin Li #pragma omp ordered
2709*67e74705SXin Li {
2710*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'ordered' region}}
2711*67e74705SXin Li bar();
2712*67e74705SXin Li }
2713*67e74705SXin Li #pragma omp ordered
2714*67e74705SXin Li {
2715*67e74705SXin Li #pragma omp taskwait
2716*67e74705SXin Li bar();
2717*67e74705SXin Li }
2718*67e74705SXin Li #pragma omp ordered
2719*67e74705SXin Li {
2720*67e74705SXin Li #pragma omp flush
2721*67e74705SXin Li bar();
2722*67e74705SXin Li }
2723*67e74705SXin Li #pragma omp ordered
2724*67e74705SXin Li {
2725*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
2726*67e74705SXin Li bar();
2727*67e74705SXin Li }
2728*67e74705SXin Li #pragma omp ordered
2729*67e74705SXin Li {
2730*67e74705SXin Li #pragma omp atomic
2731*67e74705SXin Li ++a;
2732*67e74705SXin Li }
2733*67e74705SXin Li #pragma omp ordered
2734*67e74705SXin Li {
2735*67e74705SXin Li #pragma omp target
2736*67e74705SXin Li ++a;
2737*67e74705SXin Li }
2738*67e74705SXin Li #pragma omp ordered
2739*67e74705SXin Li {
2740*67e74705SXin Li #pragma omp target parallel
2741*67e74705SXin Li ++a;
2742*67e74705SXin Li }
2743*67e74705SXin Li #pragma omp ordered
2744*67e74705SXin Li {
2745*67e74705SXin Li #pragma omp target parallel for ordered
2746*67e74705SXin Li for (int j = 0; j < 10; ++j) {
2747*67e74705SXin Li #pragma omp ordered // OK
2748*67e74705SXin Li {
2749*67e74705SXin Li bar();
2750*67e74705SXin Li }
2751*67e74705SXin Li }
2752*67e74705SXin Li }
2753*67e74705SXin Li #pragma omp ordered
2754*67e74705SXin Li {
2755*67e74705SXin Li #pragma omp target parallel for
2756*67e74705SXin Li for (int i = 0; i < 10; ++i)
2757*67e74705SXin Li ;
2758*67e74705SXin Li }
2759*67e74705SXin Li #pragma omp ordered
2760*67e74705SXin Li {
2761*67e74705SXin Li #pragma omp target enter data map(to: a)
2762*67e74705SXin Li ++a;
2763*67e74705SXin Li }
2764*67e74705SXin Li #pragma omp ordered
2765*67e74705SXin Li {
2766*67e74705SXin Li #pragma omp target exit data map(from: a)
2767*67e74705SXin Li ++a;
2768*67e74705SXin Li }
2769*67e74705SXin Li #pragma omp ordered
2770*67e74705SXin Li {
2771*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
2772*67e74705SXin Li ++a;
2773*67e74705SXin Li }
2774*67e74705SXin Li #pragma omp ordered
2775*67e74705SXin Li {
2776*67e74705SXin Li #pragma omp taskloop
2777*67e74705SXin Li for (int i = 0; i < 10; ++i)
2778*67e74705SXin Li ++a;
2779*67e74705SXin Li }
2780*67e74705SXin Li #pragma omp ordered
2781*67e74705SXin Li {
2782*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
2783*67e74705SXin Li for (int i = 0; i < 10; ++i)
2784*67e74705SXin Li ;
2785*67e74705SXin Li }
2786*67e74705SXin Li #pragma omp ordered
2787*67e74705SXin Li {
2788*67e74705SXin Li bar();
2789*67e74705SXin Li #pragma omp target update to(a)
2790*67e74705SXin Li bar();
2791*67e74705SXin Li }
2792*67e74705SXin Li #pragma omp ordered
2793*67e74705SXin Li {
2794*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
2795*67e74705SXin Li for (int i = 0; i < 10; ++i)
2796*67e74705SXin Li ;
2797*67e74705SXin Li }
2798*67e74705SXin Li #pragma omp ordered
2799*67e74705SXin Li {
2800*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
2801*67e74705SXin Li for (int i = 0; i < 10; ++i)
2802*67e74705SXin Li ;
2803*67e74705SXin Li }
2804*67e74705SXin Li #pragma omp ordered
2805*67e74705SXin Li {
2806*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'ordered' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
2807*67e74705SXin Li for (int i = 0; i < 10; ++i)
2808*67e74705SXin Li ;
2809*67e74705SXin Li }
2810*67e74705SXin Li
2811*67e74705SXin Li // ATOMIC DIRECTIVE
2812*67e74705SXin Li #pragma omp atomic
2813*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2814*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2815*67e74705SXin Li {
2816*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2817*67e74705SXin Li for (int i = 0; i < 10; ++i)
2818*67e74705SXin Li ;
2819*67e74705SXin Li }
2820*67e74705SXin Li #pragma omp atomic
2821*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2822*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2823*67e74705SXin Li {
2824*67e74705SXin Li #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2825*67e74705SXin Li for (int i = 0; i < 10; ++i)
2826*67e74705SXin Li ;
2827*67e74705SXin Li }
2828*67e74705SXin Li #pragma omp atomic
2829*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2830*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2831*67e74705SXin Li {
2832*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2833*67e74705SXin Li for (int i = 0; i < 10; ++i)
2834*67e74705SXin Li ;
2835*67e74705SXin Li }
2836*67e74705SXin Li #pragma omp atomic
2837*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2838*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2839*67e74705SXin Li {
2840*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2841*67e74705SXin Li for (int i = 0; i < 10; ++i)
2842*67e74705SXin Li ;
2843*67e74705SXin Li }
2844*67e74705SXin Li #pragma omp atomic
2845*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2846*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2847*67e74705SXin Li {
2848*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2849*67e74705SXin Li {
2850*67e74705SXin Li bar();
2851*67e74705SXin Li }
2852*67e74705SXin Li }
2853*67e74705SXin Li #pragma omp atomic
2854*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2855*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2856*67e74705SXin Li {
2857*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2858*67e74705SXin Li {
2859*67e74705SXin Li bar();
2860*67e74705SXin Li }
2861*67e74705SXin Li }
2862*67e74705SXin Li #pragma omp atomic
2863*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2864*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2865*67e74705SXin Li {
2866*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2867*67e74705SXin Li {
2868*67e74705SXin Li bar();
2869*67e74705SXin Li }
2870*67e74705SXin Li }
2871*67e74705SXin Li #pragma omp atomic
2872*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2873*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2874*67e74705SXin Li {
2875*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2876*67e74705SXin Li {
2877*67e74705SXin Li bar();
2878*67e74705SXin Li }
2879*67e74705SXin Li }
2880*67e74705SXin Li #pragma omp atomic
2881*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2882*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2883*67e74705SXin Li {
2884*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2885*67e74705SXin Li {
2886*67e74705SXin Li bar();
2887*67e74705SXin Li }
2888*67e74705SXin Li }
2889*67e74705SXin Li #pragma omp atomic
2890*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2891*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2892*67e74705SXin Li {
2893*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2894*67e74705SXin Li for (int i = 0; i < 10; ++i)
2895*67e74705SXin Li ;
2896*67e74705SXin Li }
2897*67e74705SXin Li #pragma omp atomic
2898*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2899*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2900*67e74705SXin Li {
2901*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2902*67e74705SXin Li for (int i = 0; i < 10; ++i)
2903*67e74705SXin Li ;
2904*67e74705SXin Li }
2905*67e74705SXin Li #pragma omp atomic
2906*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2907*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2908*67e74705SXin Li {
2909*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2910*67e74705SXin Li {
2911*67e74705SXin Li bar();
2912*67e74705SXin Li }
2913*67e74705SXin Li }
2914*67e74705SXin Li #pragma omp atomic
2915*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2916*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2917*67e74705SXin Li {
2918*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2919*67e74705SXin Li {
2920*67e74705SXin Li bar();
2921*67e74705SXin Li }
2922*67e74705SXin Li }
2923*67e74705SXin Li #pragma omp atomic
2924*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2925*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2926*67e74705SXin Li {
2927*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2928*67e74705SXin Li bar();
2929*67e74705SXin Li }
2930*67e74705SXin Li #pragma omp atomic
2931*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2932*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2933*67e74705SXin Li {
2934*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2935*67e74705SXin Li bar();
2936*67e74705SXin Li }
2937*67e74705SXin Li #pragma omp atomic
2938*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2939*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2940*67e74705SXin Li {
2941*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2942*67e74705SXin Li bar();
2943*67e74705SXin Li }
2944*67e74705SXin Li #pragma omp atomic
2945*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2946*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2947*67e74705SXin Li {
2948*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2949*67e74705SXin Li bar();
2950*67e74705SXin Li }
2951*67e74705SXin Li #pragma omp atomic
2952*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2953*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2954*67e74705SXin Li {
2955*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2956*67e74705SXin Li bar();
2957*67e74705SXin Li }
2958*67e74705SXin Li #pragma omp atomic
2959*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2960*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2961*67e74705SXin Li {
2962*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2963*67e74705SXin Li ++a;
2964*67e74705SXin Li }
2965*67e74705SXin Li #pragma omp atomic
2966*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2967*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2968*67e74705SXin Li {
2969*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2970*67e74705SXin Li ++a;
2971*67e74705SXin Li }
2972*67e74705SXin Li #pragma omp atomic
2973*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2974*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2975*67e74705SXin Li {
2976*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2977*67e74705SXin Li ++a;
2978*67e74705SXin Li }
2979*67e74705SXin Li #pragma omp atomic
2980*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2981*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2982*67e74705SXin Li {
2983*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2984*67e74705SXin Li for (int i = 0; i < 10; ++i)
2985*67e74705SXin Li ;
2986*67e74705SXin Li }
2987*67e74705SXin Li #pragma omp atomic
2988*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2989*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2990*67e74705SXin Li {
2991*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2992*67e74705SXin Li ++a;
2993*67e74705SXin Li }
2994*67e74705SXin Li #pragma omp atomic
2995*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
2996*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
2997*67e74705SXin Li {
2998*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
2999*67e74705SXin Li ++a;
3000*67e74705SXin Li }
3001*67e74705SXin Li #pragma omp atomic
3002*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3003*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
3004*67e74705SXin Li {
3005*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3006*67e74705SXin Li ++a;
3007*67e74705SXin Li }
3008*67e74705SXin Li #pragma omp atomic
3009*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3010*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
3011*67e74705SXin Li {
3012*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3013*67e74705SXin Li for (int i = 0; i < 10; ++i)
3014*67e74705SXin Li ++a;
3015*67e74705SXin Li }
3016*67e74705SXin Li #pragma omp atomic
3017*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3018*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
3019*67e74705SXin Li {
3020*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3021*67e74705SXin Li for (int i = 0; i < 10; ++i)
3022*67e74705SXin Li ;
3023*67e74705SXin Li }
3024*67e74705SXin Li #pragma omp atomic
3025*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3026*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
3027*67e74705SXin Li {
3028*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3029*67e74705SXin Li bar();
3030*67e74705SXin Li }
3031*67e74705SXin Li #pragma omp atomic
3032*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3033*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
3034*67e74705SXin Li {
3035*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3036*67e74705SXin Li for (int i = 0; i < 10; ++i)
3037*67e74705SXin Li ;
3038*67e74705SXin Li }
3039*67e74705SXin Li #pragma omp atomic
3040*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3041*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
3042*67e74705SXin Li {
3043*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3044*67e74705SXin Li for (int i = 0; i < 10; ++i)
3045*67e74705SXin Li ;
3046*67e74705SXin Li }
3047*67e74705SXin Li #pragma omp atomic
3048*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
3049*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
3050*67e74705SXin Li {
3051*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
3052*67e74705SXin Li for (int i = 0; i < 10; ++i)
3053*67e74705SXin Li ;
3054*67e74705SXin Li }
3055*67e74705SXin Li
3056*67e74705SXin Li // TARGET DIRECTIVE
3057*67e74705SXin Li #pragma omp target
3058*67e74705SXin Li #pragma omp parallel
3059*67e74705SXin Li bar();
3060*67e74705SXin Li #pragma omp target
3061*67e74705SXin Li #pragma omp for
3062*67e74705SXin Li for (int i = 0; i < 10; ++i)
3063*67e74705SXin Li ;
3064*67e74705SXin Li #pragma omp target
3065*67e74705SXin Li #pragma omp simd
3066*67e74705SXin Li for (int i = 0; i < 10; ++i)
3067*67e74705SXin Li ;
3068*67e74705SXin Li #pragma omp target
3069*67e74705SXin Li #pragma omp for simd
3070*67e74705SXin Li for (int i = 0; i < 10; ++i)
3071*67e74705SXin Li ;
3072*67e74705SXin Li #pragma omp target
3073*67e74705SXin Li #pragma omp sections
3074*67e74705SXin Li {
3075*67e74705SXin Li bar();
3076*67e74705SXin Li }
3077*67e74705SXin Li #pragma omp target
3078*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
3079*67e74705SXin Li {
3080*67e74705SXin Li bar();
3081*67e74705SXin Li }
3082*67e74705SXin Li #pragma omp target
3083*67e74705SXin Li #pragma omp single
3084*67e74705SXin Li bar();
3085*67e74705SXin Li
3086*67e74705SXin Li #pragma omp target
3087*67e74705SXin Li #pragma omp master
3088*67e74705SXin Li {
3089*67e74705SXin Li bar();
3090*67e74705SXin Li }
3091*67e74705SXin Li #pragma omp target
3092*67e74705SXin Li #pragma omp critical
3093*67e74705SXin Li {
3094*67e74705SXin Li bar();
3095*67e74705SXin Li }
3096*67e74705SXin Li #pragma omp target
3097*67e74705SXin Li #pragma omp parallel for
3098*67e74705SXin Li for (int i = 0; i < 10; ++i)
3099*67e74705SXin Li ;
3100*67e74705SXin Li #pragma omp target
3101*67e74705SXin Li #pragma omp parallel for simd
3102*67e74705SXin Li for (int i = 0; i < 10; ++i)
3103*67e74705SXin Li ;
3104*67e74705SXin Li #pragma omp target
3105*67e74705SXin Li #pragma omp parallel sections
3106*67e74705SXin Li {
3107*67e74705SXin Li bar();
3108*67e74705SXin Li }
3109*67e74705SXin Li #pragma omp target
3110*67e74705SXin Li #pragma omp task
3111*67e74705SXin Li {
3112*67e74705SXin Li bar();
3113*67e74705SXin Li }
3114*67e74705SXin Li #pragma omp target
3115*67e74705SXin Li {
3116*67e74705SXin Li #pragma omp taskyield
3117*67e74705SXin Li bar();
3118*67e74705SXin Li }
3119*67e74705SXin Li #pragma omp target
3120*67e74705SXin Li {
3121*67e74705SXin Li #pragma omp barrier
3122*67e74705SXin Li bar();
3123*67e74705SXin Li }
3124*67e74705SXin Li #pragma omp target
3125*67e74705SXin Li {
3126*67e74705SXin Li #pragma omp taskwait
3127*67e74705SXin Li bar();
3128*67e74705SXin Li }
3129*67e74705SXin Li #pragma omp target
3130*67e74705SXin Li {
3131*67e74705SXin Li #pragma omp flush
3132*67e74705SXin Li bar();
3133*67e74705SXin Li }
3134*67e74705SXin Li #pragma omp target
3135*67e74705SXin Li {
3136*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3137*67e74705SXin Li bar();
3138*67e74705SXin Li }
3139*67e74705SXin Li #pragma omp target
3140*67e74705SXin Li {
3141*67e74705SXin Li #pragma omp atomic
3142*67e74705SXin Li ++a;
3143*67e74705SXin Li }
3144*67e74705SXin Li #pragma omp target
3145*67e74705SXin Li {
3146*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
3147*67e74705SXin Li ++a;
3148*67e74705SXin Li }
3149*67e74705SXin Li #pragma omp target
3150*67e74705SXin Li {
3151*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
3152*67e74705SXin Li ++a;
3153*67e74705SXin Li }
3154*67e74705SXin Li #pragma omp target
3155*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
3156*67e74705SXin Li for (int i = 0; i < 10; ++i)
3157*67e74705SXin Li ;
3158*67e74705SXin Li #pragma omp target
3159*67e74705SXin Li {
3160*67e74705SXin Li #pragma omp teams
3161*67e74705SXin Li ++a;
3162*67e74705SXin Li }
3163*67e74705SXin Li #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3164*67e74705SXin Li {
3165*67e74705SXin Li ++a; // expected-note {{statement outside teams construct here}}
3166*67e74705SXin Li #pragma omp teams // expected-note {{nested teams construct here}}
3167*67e74705SXin Li ++a;
3168*67e74705SXin Li }
3169*67e74705SXin Li #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
3170*67e74705SXin Li {
3171*67e74705SXin Li while (0) // expected-note {{statement outside teams construct here}}
3172*67e74705SXin Li #pragma omp teams // expected-note {{nested teams construct here}}
3173*67e74705SXin Li ++a;
3174*67e74705SXin Li }
3175*67e74705SXin Li #pragma omp target
3176*67e74705SXin Li {
3177*67e74705SXin Li #pragma omp taskloop
3178*67e74705SXin Li for (int i = 0; i < 10; ++i)
3179*67e74705SXin Li ++a;
3180*67e74705SXin Li }
3181*67e74705SXin Li #pragma omp target
3182*67e74705SXin Li {
3183*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3184*67e74705SXin Li for (int i = 0; i < 10; ++i)
3185*67e74705SXin Li ;
3186*67e74705SXin Li }
3187*67e74705SXin Li #pragma omp target
3188*67e74705SXin Li {
3189*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
3190*67e74705SXin Li }
3191*67e74705SXin Li #pragma omp target
3192*67e74705SXin Li {
3193*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
3194*67e74705SXin Li }
3195*67e74705SXin Li #pragma omp target
3196*67e74705SXin Li {
3197*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
3198*67e74705SXin Li }
3199*67e74705SXin Li #pragma omp target
3200*67e74705SXin Li {
3201*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3202*67e74705SXin Li for (int i = 0; i < 10; ++i)
3203*67e74705SXin Li ;
3204*67e74705SXin Li }
3205*67e74705SXin Li #pragma omp target
3206*67e74705SXin Li {
3207*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3208*67e74705SXin Li for (int i = 0; i < 10; ++i)
3209*67e74705SXin Li ;
3210*67e74705SXin Li }
3211*67e74705SXin Li #pragma omp target
3212*67e74705SXin Li {
3213*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3214*67e74705SXin Li for (int i = 0; i < 10; ++i)
3215*67e74705SXin Li ;
3216*67e74705SXin Li }
3217*67e74705SXin Li
3218*67e74705SXin Li // TARGET PARALLEL DIRECTIVE
3219*67e74705SXin Li #pragma omp target parallel
3220*67e74705SXin Li #pragma omp parallel
3221*67e74705SXin Li bar();
3222*67e74705SXin Li #pragma omp target parallel
3223*67e74705SXin Li #pragma omp for
3224*67e74705SXin Li for (int i = 0; i < 10; ++i)
3225*67e74705SXin Li ;
3226*67e74705SXin Li #pragma omp target parallel
3227*67e74705SXin Li #pragma omp simd
3228*67e74705SXin Li for (int i = 0; i < 10; ++i)
3229*67e74705SXin Li ;
3230*67e74705SXin Li #pragma omp target parallel
3231*67e74705SXin Li #pragma omp for simd
3232*67e74705SXin Li for (int i = 0; i < 10; ++i)
3233*67e74705SXin Li ;
3234*67e74705SXin Li #pragma omp target parallel
3235*67e74705SXin Li #pragma omp sections
3236*67e74705SXin Li {
3237*67e74705SXin Li bar();
3238*67e74705SXin Li }
3239*67e74705SXin Li #pragma omp target parallel
3240*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
3241*67e74705SXin Li {
3242*67e74705SXin Li bar();
3243*67e74705SXin Li }
3244*67e74705SXin Li #pragma omp target parallel
3245*67e74705SXin Li #pragma omp single
3246*67e74705SXin Li bar();
3247*67e74705SXin Li
3248*67e74705SXin Li #pragma omp target parallel
3249*67e74705SXin Li #pragma omp master
3250*67e74705SXin Li {
3251*67e74705SXin Li bar();
3252*67e74705SXin Li }
3253*67e74705SXin Li #pragma omp target parallel
3254*67e74705SXin Li #pragma omp critical
3255*67e74705SXin Li {
3256*67e74705SXin Li bar();
3257*67e74705SXin Li }
3258*67e74705SXin Li #pragma omp target parallel
3259*67e74705SXin Li #pragma omp parallel for
3260*67e74705SXin Li for (int i = 0; i < 10; ++i)
3261*67e74705SXin Li ;
3262*67e74705SXin Li #pragma omp target parallel
3263*67e74705SXin Li #pragma omp parallel for simd
3264*67e74705SXin Li for (int i = 0; i < 10; ++i)
3265*67e74705SXin Li ;
3266*67e74705SXin Li #pragma omp target parallel
3267*67e74705SXin Li #pragma omp parallel sections
3268*67e74705SXin Li {
3269*67e74705SXin Li bar();
3270*67e74705SXin Li }
3271*67e74705SXin Li #pragma omp target parallel
3272*67e74705SXin Li #pragma omp task
3273*67e74705SXin Li {
3274*67e74705SXin Li bar();
3275*67e74705SXin Li }
3276*67e74705SXin Li #pragma omp target parallel
3277*67e74705SXin Li {
3278*67e74705SXin Li #pragma omp taskyield
3279*67e74705SXin Li bar();
3280*67e74705SXin Li }
3281*67e74705SXin Li #pragma omp target parallel
3282*67e74705SXin Li {
3283*67e74705SXin Li #pragma omp barrier
3284*67e74705SXin Li bar();
3285*67e74705SXin Li }
3286*67e74705SXin Li #pragma omp target parallel
3287*67e74705SXin Li {
3288*67e74705SXin Li #pragma omp taskwait
3289*67e74705SXin Li bar();
3290*67e74705SXin Li }
3291*67e74705SXin Li #pragma omp target parallel
3292*67e74705SXin Li {
3293*67e74705SXin Li #pragma omp flush
3294*67e74705SXin Li bar();
3295*67e74705SXin Li }
3296*67e74705SXin Li #pragma omp target parallel
3297*67e74705SXin Li {
3298*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3299*67e74705SXin Li bar();
3300*67e74705SXin Li }
3301*67e74705SXin Li #pragma omp target parallel
3302*67e74705SXin Li {
3303*67e74705SXin Li #pragma omp atomic
3304*67e74705SXin Li ++a;
3305*67e74705SXin Li }
3306*67e74705SXin Li #pragma omp target parallel
3307*67e74705SXin Li {
3308*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
3309*67e74705SXin Li ++a;
3310*67e74705SXin Li }
3311*67e74705SXin Li #pragma omp target parallel
3312*67e74705SXin Li {
3313*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
3314*67e74705SXin Li ++a;
3315*67e74705SXin Li }
3316*67e74705SXin Li #pragma omp target parallel
3317*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
3318*67e74705SXin Li for (int i = 0; i < 10; ++i)
3319*67e74705SXin Li ;
3320*67e74705SXin Li #pragma omp target parallel
3321*67e74705SXin Li {
3322*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3323*67e74705SXin Li ++a;
3324*67e74705SXin Li }
3325*67e74705SXin Li #pragma omp target parallel
3326*67e74705SXin Li {
3327*67e74705SXin Li ++a;
3328*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3329*67e74705SXin Li ++a;
3330*67e74705SXin Li }
3331*67e74705SXin Li #pragma omp target parallel
3332*67e74705SXin Li {
3333*67e74705SXin Li #pragma omp taskloop
3334*67e74705SXin Li for (int i = 0; i < 10; ++i)
3335*67e74705SXin Li ++a;
3336*67e74705SXin Li }
3337*67e74705SXin Li #pragma omp target parallel
3338*67e74705SXin Li {
3339*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3340*67e74705SXin Li for (int i = 0; i < 10; ++i)
3341*67e74705SXin Li ;
3342*67e74705SXin Li }
3343*67e74705SXin Li #pragma omp target parallel
3344*67e74705SXin Li {
3345*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3346*67e74705SXin Li }
3347*67e74705SXin Li #pragma omp target parallel
3348*67e74705SXin Li {
3349*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3350*67e74705SXin Li }
3351*67e74705SXin Li #pragma omp target parallel
3352*67e74705SXin Li {
3353*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
3354*67e74705SXin Li }
3355*67e74705SXin Li #pragma omp target parallel
3356*67e74705SXin Li {
3357*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3358*67e74705SXin Li for (int i = 0; i < 10; ++i)
3359*67e74705SXin Li ;
3360*67e74705SXin Li }
3361*67e74705SXin Li #pragma omp target parallel
3362*67e74705SXin Li {
3363*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3364*67e74705SXin Li for (int i = 0; i < 10; ++i)
3365*67e74705SXin Li ;
3366*67e74705SXin Li }
3367*67e74705SXin Li #pragma omp target parallel
3368*67e74705SXin Li {
3369*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3370*67e74705SXin Li for (int i = 0; i < 10; ++i)
3371*67e74705SXin Li ;
3372*67e74705SXin Li }
3373*67e74705SXin Li
3374*67e74705SXin Li // TARGET PARALLEL FOR DIRECTIVE
3375*67e74705SXin Li #pragma omp target parallel for
3376*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3377*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
3378*67e74705SXin Li for (int i = 0; i < 10; ++i)
3379*67e74705SXin Li ;
3380*67e74705SXin Li }
3381*67e74705SXin Li #pragma omp target parallel for
3382*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3383*67e74705SXin Li #pragma omp simd
3384*67e74705SXin Li for (int i = 0; i < 10; ++i)
3385*67e74705SXin Li ;
3386*67e74705SXin Li }
3387*67e74705SXin Li #pragma omp target parallel for
3388*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3389*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
3390*67e74705SXin Li for (int i = 0; i < 10; ++i)
3391*67e74705SXin Li ;
3392*67e74705SXin Li }
3393*67e74705SXin Li #pragma omp target parallel for
3394*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3395*67e74705SXin Li #pragma omp parallel
3396*67e74705SXin Li for (int i = 0; i < 10; ++i)
3397*67e74705SXin Li ;
3398*67e74705SXin Li }
3399*67e74705SXin Li #pragma omp target parallel for
3400*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3401*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
3402*67e74705SXin Li {
3403*67e74705SXin Li bar();
3404*67e74705SXin Li }
3405*67e74705SXin Li }
3406*67e74705SXin Li #pragma omp target parallel for
3407*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3408*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
3409*67e74705SXin Li {
3410*67e74705SXin Li bar();
3411*67e74705SXin Li }
3412*67e74705SXin Li }
3413*67e74705SXin Li #pragma omp target parallel for
3414*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3415*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
3416*67e74705SXin Li {
3417*67e74705SXin Li bar();
3418*67e74705SXin Li }
3419*67e74705SXin Li }
3420*67e74705SXin Li
3421*67e74705SXin Li #pragma omp target parallel for
3422*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3423*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
3424*67e74705SXin Li {
3425*67e74705SXin Li bar();
3426*67e74705SXin Li }
3427*67e74705SXin Li }
3428*67e74705SXin Li
3429*67e74705SXin Li #pragma omp target parallel for
3430*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3431*67e74705SXin Li #pragma omp critical
3432*67e74705SXin Li {
3433*67e74705SXin Li bar();
3434*67e74705SXin Li }
3435*67e74705SXin Li }
3436*67e74705SXin Li
3437*67e74705SXin Li #pragma omp target parallel for
3438*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3439*67e74705SXin Li #pragma omp parallel
3440*67e74705SXin Li {
3441*67e74705SXin Li #pragma omp single // OK
3442*67e74705SXin Li {
3443*67e74705SXin Li bar();
3444*67e74705SXin Li }
3445*67e74705SXin Li #pragma omp for // OK
3446*67e74705SXin Li for (int i = 0; i < 10; ++i)
3447*67e74705SXin Li ;
3448*67e74705SXin Li #pragma omp for simd // OK
3449*67e74705SXin Li for (int i = 0; i < 10; ++i)
3450*67e74705SXin Li ;
3451*67e74705SXin Li #pragma omp sections // OK
3452*67e74705SXin Li {
3453*67e74705SXin Li bar();
3454*67e74705SXin Li }
3455*67e74705SXin Li }
3456*67e74705SXin Li }
3457*67e74705SXin Li #pragma omp target parallel for
3458*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3459*67e74705SXin Li #pragma omp parallel for
3460*67e74705SXin Li for (int i = 0; i < 10; ++i)
3461*67e74705SXin Li ;
3462*67e74705SXin Li }
3463*67e74705SXin Li #pragma omp target parallel for
3464*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3465*67e74705SXin Li #pragma omp parallel for simd
3466*67e74705SXin Li for (int i = 0; i < 10; ++i)
3467*67e74705SXin Li ;
3468*67e74705SXin Li }
3469*67e74705SXin Li #pragma omp target parallel for
3470*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3471*67e74705SXin Li #pragma omp parallel sections
3472*67e74705SXin Li {
3473*67e74705SXin Li bar();
3474*67e74705SXin Li }
3475*67e74705SXin Li }
3476*67e74705SXin Li #pragma omp target parallel for
3477*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3478*67e74705SXin Li #pragma omp task
3479*67e74705SXin Li {
3480*67e74705SXin Li bar();
3481*67e74705SXin Li }
3482*67e74705SXin Li }
3483*67e74705SXin Li #pragma omp target parallel for
3484*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3485*67e74705SXin Li #pragma omp taskyield
3486*67e74705SXin Li bar();
3487*67e74705SXin Li }
3488*67e74705SXin Li #pragma omp target parallel for
3489*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3490*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
3491*67e74705SXin Li bar();
3492*67e74705SXin Li }
3493*67e74705SXin Li #pragma omp target parallel for
3494*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3495*67e74705SXin Li #pragma omp taskwait
3496*67e74705SXin Li bar();
3497*67e74705SXin Li }
3498*67e74705SXin Li #pragma omp target parallel for
3499*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3500*67e74705SXin Li #pragma omp flush
3501*67e74705SXin Li bar();
3502*67e74705SXin Li }
3503*67e74705SXin Li #pragma omp target parallel for
3504*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3505*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3506*67e74705SXin Li bar();
3507*67e74705SXin Li }
3508*67e74705SXin Li #pragma omp target parallel for ordered
3509*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3510*67e74705SXin Li #pragma omp ordered // OK
3511*67e74705SXin Li bar();
3512*67e74705SXin Li }
3513*67e74705SXin Li #pragma omp target parallel for
3514*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3515*67e74705SXin Li #pragma omp atomic
3516*67e74705SXin Li ++a;
3517*67e74705SXin Li }
3518*67e74705SXin Li #pragma omp target parallel for
3519*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3520*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
3521*67e74705SXin Li ++a;
3522*67e74705SXin Li }
3523*67e74705SXin Li #pragma omp target parallel for
3524*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3525*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
3526*67e74705SXin Li ++a;
3527*67e74705SXin Li }
3528*67e74705SXin Li #pragma omp target parallel for
3529*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3530*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
3531*67e74705SXin Li for (int i = 0; i < 10; ++i)
3532*67e74705SXin Li ;
3533*67e74705SXin Li }
3534*67e74705SXin Li #pragma omp target parallel for
3535*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3536*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3537*67e74705SXin Li ++a;
3538*67e74705SXin Li }
3539*67e74705SXin Li #pragma omp target parallel for
3540*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3541*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3542*67e74705SXin Li ++a;
3543*67e74705SXin Li }
3544*67e74705SXin Li #pragma omp target parallel for
3545*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3546*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3547*67e74705SXin Li ++a;
3548*67e74705SXin Li }
3549*67e74705SXin Li #pragma omp target parallel for
3550*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3551*67e74705SXin Li #pragma omp taskloop
3552*67e74705SXin Li for (int i = 0; i < 10; ++i)
3553*67e74705SXin Li ++a;
3554*67e74705SXin Li }
3555*67e74705SXin Li #pragma omp target parallel for
3556*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3557*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3558*67e74705SXin Li for (int j = 0; j < 10; ++j)
3559*67e74705SXin Li ;
3560*67e74705SXin Li }
3561*67e74705SXin Li #pragma omp target parallel for
3562*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3563*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
3564*67e74705SXin Li }
3565*67e74705SXin Li #pragma omp target parallel for
3566*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3567*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3568*67e74705SXin Li for (int j = 0; j < 10; ++j)
3569*67e74705SXin Li ;
3570*67e74705SXin Li }
3571*67e74705SXin Li #pragma omp target parallel for
3572*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3573*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3574*67e74705SXin Li for (int j = 0; j < 10; ++j)
3575*67e74705SXin Li ;
3576*67e74705SXin Li }
3577*67e74705SXin Li #pragma omp target parallel for
3578*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3579*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3580*67e74705SXin Li for (int j = 0; j < 10; ++j)
3581*67e74705SXin Li ;
3582*67e74705SXin Li }
3583*67e74705SXin Li
3584*67e74705SXin Li // TEAMS DIRECTIVE
3585*67e74705SXin Li #pragma omp target
3586*67e74705SXin Li #pragma omp teams
3587*67e74705SXin Li #pragma omp parallel
3588*67e74705SXin Li bar();
3589*67e74705SXin Li #pragma omp target
3590*67e74705SXin Li #pragma omp teams
3591*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
3592*67e74705SXin Li for (int i = 0; i < 10; ++i)
3593*67e74705SXin Li ;
3594*67e74705SXin Li #pragma omp target
3595*67e74705SXin Li #pragma omp teams
3596*67e74705SXin Li #pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
3597*67e74705SXin Li for (int i = 0; i < 10; ++i)
3598*67e74705SXin Li ;
3599*67e74705SXin Li #pragma omp target
3600*67e74705SXin Li #pragma omp teams
3601*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
3602*67e74705SXin Li for (int i = 0; i < 10; ++i)
3603*67e74705SXin Li ;
3604*67e74705SXin Li #pragma omp target
3605*67e74705SXin Li #pragma omp teams
3606*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
3607*67e74705SXin Li {
3608*67e74705SXin Li bar();
3609*67e74705SXin Li }
3610*67e74705SXin Li #pragma omp target
3611*67e74705SXin Li #pragma omp teams
3612*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
3613*67e74705SXin Li {
3614*67e74705SXin Li bar();
3615*67e74705SXin Li }
3616*67e74705SXin Li #pragma omp target
3617*67e74705SXin Li #pragma omp teams
3618*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
3619*67e74705SXin Li bar();
3620*67e74705SXin Li
3621*67e74705SXin Li #pragma omp target
3622*67e74705SXin Li #pragma omp teams
3623*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
3624*67e74705SXin Li {
3625*67e74705SXin Li bar();
3626*67e74705SXin Li }
3627*67e74705SXin Li #pragma omp target
3628*67e74705SXin Li #pragma omp teams
3629*67e74705SXin Li #pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
3630*67e74705SXin Li {
3631*67e74705SXin Li bar();
3632*67e74705SXin Li }
3633*67e74705SXin Li #pragma omp target
3634*67e74705SXin Li #pragma omp teams
3635*67e74705SXin Li #pragma omp parallel for
3636*67e74705SXin Li for (int i = 0; i < 10; ++i)
3637*67e74705SXin Li ;
3638*67e74705SXin Li #pragma omp target
3639*67e74705SXin Li #pragma omp teams
3640*67e74705SXin Li #pragma omp parallel for simd
3641*67e74705SXin Li for (int i = 0; i < 10; ++i)
3642*67e74705SXin Li ;
3643*67e74705SXin Li #pragma omp target
3644*67e74705SXin Li #pragma omp teams
3645*67e74705SXin Li #pragma omp parallel sections
3646*67e74705SXin Li {
3647*67e74705SXin Li bar();
3648*67e74705SXin Li }
3649*67e74705SXin Li #pragma omp target
3650*67e74705SXin Li #pragma omp teams
3651*67e74705SXin Li #pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
3652*67e74705SXin Li {
3653*67e74705SXin Li bar();
3654*67e74705SXin Li }
3655*67e74705SXin Li #pragma omp target
3656*67e74705SXin Li #pragma omp teams
3657*67e74705SXin Li {
3658*67e74705SXin Li #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
3659*67e74705SXin Li bar();
3660*67e74705SXin Li }
3661*67e74705SXin Li #pragma omp target
3662*67e74705SXin Li #pragma omp teams
3663*67e74705SXin Li {
3664*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
3665*67e74705SXin Li bar();
3666*67e74705SXin Li }
3667*67e74705SXin Li #pragma omp target
3668*67e74705SXin Li #pragma omp teams
3669*67e74705SXin Li {
3670*67e74705SXin Li #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
3671*67e74705SXin Li bar();
3672*67e74705SXin Li }
3673*67e74705SXin Li #pragma omp target
3674*67e74705SXin Li #pragma omp teams
3675*67e74705SXin Li {
3676*67e74705SXin Li #pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
3677*67e74705SXin Li bar();
3678*67e74705SXin Li }
3679*67e74705SXin Li #pragma omp target
3680*67e74705SXin Li #pragma omp teams
3681*67e74705SXin Li {
3682*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3683*67e74705SXin Li bar();
3684*67e74705SXin Li }
3685*67e74705SXin Li #pragma omp target
3686*67e74705SXin Li #pragma omp teams
3687*67e74705SXin Li {
3688*67e74705SXin Li #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
3689*67e74705SXin Li ++a;
3690*67e74705SXin Li }
3691*67e74705SXin Li #pragma omp target
3692*67e74705SXin Li #pragma omp teams
3693*67e74705SXin Li {
3694*67e74705SXin Li #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}}
3695*67e74705SXin Li ++a;
3696*67e74705SXin Li }
3697*67e74705SXin Li #pragma omp target
3698*67e74705SXin Li #pragma omp teams
3699*67e74705SXin Li {
3700*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
3701*67e74705SXin Li ++a;
3702*67e74705SXin Li }
3703*67e74705SXin Li #pragma omp target
3704*67e74705SXin Li #pragma omp teams
3705*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
3706*67e74705SXin Li for (int i = 0; i < 10; ++i)
3707*67e74705SXin Li ;
3708*67e74705SXin Li #pragma omp target
3709*67e74705SXin Li #pragma omp teams
3710*67e74705SXin Li {
3711*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
3712*67e74705SXin Li ++a;
3713*67e74705SXin Li }
3714*67e74705SXin Li #pragma omp target
3715*67e74705SXin Li #pragma omp teams
3716*67e74705SXin Li {
3717*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}}
3718*67e74705SXin Li ++a;
3719*67e74705SXin Li }
3720*67e74705SXin Li #pragma omp target
3721*67e74705SXin Li #pragma omp teams
3722*67e74705SXin Li {
3723*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3724*67e74705SXin Li ++a;
3725*67e74705SXin Li }
3726*67e74705SXin Li #pragma omp target
3727*67e74705SXin Li #pragma omp teams
3728*67e74705SXin Li {
3729*67e74705SXin Li #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
3730*67e74705SXin Li for (int i = 0; i < 10; ++i)
3731*67e74705SXin Li ++a;
3732*67e74705SXin Li }
3733*67e74705SXin Li #pragma omp target
3734*67e74705SXin Li #pragma omp teams
3735*67e74705SXin Li #pragma omp distribute
3736*67e74705SXin Li for (int i = 0; i < 10; ++i)
3737*67e74705SXin Li ;
3738*67e74705SXin Li #pragma omp target
3739*67e74705SXin Li #pragma omp teams
3740*67e74705SXin Li #pragma omp distribute
3741*67e74705SXin Li for (int i = 0; i < 10; ++i)
3742*67e74705SXin Li ;
3743*67e74705SXin Li #pragma omp distribute
3744*67e74705SXin Li for (int j = 0; j < 10; ++j)
3745*67e74705SXin Li ;
3746*67e74705SXin Li #pragma omp target
3747*67e74705SXin Li #pragma omp teams
3748*67e74705SXin Li {
3749*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}}
3750*67e74705SXin Li }
3751*67e74705SXin Li #pragma omp target
3752*67e74705SXin Li #pragma omp teams
3753*67e74705SXin Li {
3754*67e74705SXin Li #pragma omp distribute parallel for
3755*67e74705SXin Li for (int i = 0; i < 10; ++i)
3756*67e74705SXin Li ;
3757*67e74705SXin Li #pragma omp distribute parallel for
3758*67e74705SXin Li for (int j = 0; j < 10; ++j)
3759*67e74705SXin Li ;
3760*67e74705SXin Li }
3761*67e74705SXin Li #pragma omp target
3762*67e74705SXin Li #pragma omp teams
3763*67e74705SXin Li {
3764*67e74705SXin Li #pragma omp distribute parallel for simd
3765*67e74705SXin Li for (int i = 0; i < 10; ++i)
3766*67e74705SXin Li ;
3767*67e74705SXin Li #pragma omp distribute parallel for simd
3768*67e74705SXin Li for (int j = 0; j < 10; ++j)
3769*67e74705SXin Li ;
3770*67e74705SXin Li }
3771*67e74705SXin Li #pragma omp target
3772*67e74705SXin Li #pragma omp teams
3773*67e74705SXin Li {
3774*67e74705SXin Li #pragma omp distribute simd
3775*67e74705SXin Li for (int i = 0; i < 10; ++i)
3776*67e74705SXin Li ;
3777*67e74705SXin Li #pragma omp distribute simd
3778*67e74705SXin Li for (int j = 0; j < 10; ++j)
3779*67e74705SXin Li ;
3780*67e74705SXin Li }
3781*67e74705SXin Li
3782*67e74705SXin Li // TASKLOOP DIRECTIVE
3783*67e74705SXin Li #pragma omp taskloop
3784*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3785*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
3786*67e74705SXin Li for (int i = 0; i < 10; ++i)
3787*67e74705SXin Li ;
3788*67e74705SXin Li }
3789*67e74705SXin Li #pragma omp taskloop
3790*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3791*67e74705SXin Li #pragma omp simd
3792*67e74705SXin Li for (int i = 0; i < 10; ++i)
3793*67e74705SXin Li ;
3794*67e74705SXin Li }
3795*67e74705SXin Li #pragma omp taskloop
3796*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3797*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
3798*67e74705SXin Li for (int i = 0; i < 10; ++i)
3799*67e74705SXin Li ;
3800*67e74705SXin Li }
3801*67e74705SXin Li #pragma omp taskloop
3802*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3803*67e74705SXin Li #pragma omp parallel
3804*67e74705SXin Li for (int i = 0; i < 10; ++i)
3805*67e74705SXin Li ;
3806*67e74705SXin Li }
3807*67e74705SXin Li #pragma omp taskloop
3808*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3809*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
3810*67e74705SXin Li {
3811*67e74705SXin Li bar();
3812*67e74705SXin Li }
3813*67e74705SXin Li }
3814*67e74705SXin Li #pragma omp taskloop
3815*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3816*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
3817*67e74705SXin Li {
3818*67e74705SXin Li bar();
3819*67e74705SXin Li }
3820*67e74705SXin Li }
3821*67e74705SXin Li #pragma omp taskloop
3822*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3823*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
3824*67e74705SXin Li {
3825*67e74705SXin Li bar();
3826*67e74705SXin Li }
3827*67e74705SXin Li }
3828*67e74705SXin Li
3829*67e74705SXin Li #pragma omp taskloop
3830*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3831*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
3832*67e74705SXin Li {
3833*67e74705SXin Li bar();
3834*67e74705SXin Li }
3835*67e74705SXin Li }
3836*67e74705SXin Li #pragma omp taskloop
3837*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3838*67e74705SXin Li #pragma omp critical
3839*67e74705SXin Li {
3840*67e74705SXin Li bar();
3841*67e74705SXin Li }
3842*67e74705SXin Li }
3843*67e74705SXin Li #pragma omp taskloop
3844*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3845*67e74705SXin Li #pragma omp parallel
3846*67e74705SXin Li {
3847*67e74705SXin Li #pragma omp single // OK
3848*67e74705SXin Li {
3849*67e74705SXin Li bar();
3850*67e74705SXin Li }
3851*67e74705SXin Li #pragma omp for // OK
3852*67e74705SXin Li for (int i = 0; i < 10; ++i)
3853*67e74705SXin Li ;
3854*67e74705SXin Li #pragma omp sections // OK
3855*67e74705SXin Li {
3856*67e74705SXin Li bar();
3857*67e74705SXin Li }
3858*67e74705SXin Li }
3859*67e74705SXin Li }
3860*67e74705SXin Li #pragma omp taskloop
3861*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3862*67e74705SXin Li #pragma omp parallel for
3863*67e74705SXin Li for (int i = 0; i < 10; ++i)
3864*67e74705SXin Li ;
3865*67e74705SXin Li }
3866*67e74705SXin Li #pragma omp taskloop
3867*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3868*67e74705SXin Li #pragma omp parallel for simd
3869*67e74705SXin Li for (int i = 0; i < 10; ++i)
3870*67e74705SXin Li ;
3871*67e74705SXin Li }
3872*67e74705SXin Li #pragma omp taskloop
3873*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3874*67e74705SXin Li #pragma omp parallel sections
3875*67e74705SXin Li {
3876*67e74705SXin Li bar();
3877*67e74705SXin Li }
3878*67e74705SXin Li }
3879*67e74705SXin Li #pragma omp taskloop
3880*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3881*67e74705SXin Li #pragma omp task
3882*67e74705SXin Li {
3883*67e74705SXin Li bar();
3884*67e74705SXin Li }
3885*67e74705SXin Li }
3886*67e74705SXin Li #pragma omp taskloop
3887*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3888*67e74705SXin Li #pragma omp taskyield
3889*67e74705SXin Li bar();
3890*67e74705SXin Li }
3891*67e74705SXin Li #pragma omp taskloop
3892*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3893*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
3894*67e74705SXin Li bar();
3895*67e74705SXin Li }
3896*67e74705SXin Li #pragma omp taskloop
3897*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3898*67e74705SXin Li #pragma omp taskwait
3899*67e74705SXin Li bar();
3900*67e74705SXin Li }
3901*67e74705SXin Li #pragma omp taskloop
3902*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3903*67e74705SXin Li #pragma omp flush
3904*67e74705SXin Li bar();
3905*67e74705SXin Li }
3906*67e74705SXin Li #pragma omp taskloop
3907*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3908*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
3909*67e74705SXin Li bar();
3910*67e74705SXin Li }
3911*67e74705SXin Li #pragma omp taskloop
3912*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3913*67e74705SXin Li #pragma omp atomic
3914*67e74705SXin Li ++a;
3915*67e74705SXin Li }
3916*67e74705SXin Li #pragma omp taskloop
3917*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3918*67e74705SXin Li #pragma omp target
3919*67e74705SXin Li ++a;
3920*67e74705SXin Li }
3921*67e74705SXin Li #pragma omp taskloop
3922*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3923*67e74705SXin Li #pragma omp target parallel
3924*67e74705SXin Li ++a;
3925*67e74705SXin Li }
3926*67e74705SXin Li #pragma omp taskloop
3927*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3928*67e74705SXin Li #pragma omp target parallel for
3929*67e74705SXin Li for (int i = 0; i < 10; ++i)
3930*67e74705SXin Li ;
3931*67e74705SXin Li }
3932*67e74705SXin Li #pragma omp taskloop
3933*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3934*67e74705SXin Li #pragma omp target enter data map(to: a)
3935*67e74705SXin Li ++a;
3936*67e74705SXin Li }
3937*67e74705SXin Li #pragma omp taskloop
3938*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3939*67e74705SXin Li #pragma omp target exit data map(from: a)
3940*67e74705SXin Li ++a;
3941*67e74705SXin Li }
3942*67e74705SXin Li #pragma omp taskloop
3943*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3944*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
3945*67e74705SXin Li ++a;
3946*67e74705SXin Li }
3947*67e74705SXin Li #pragma omp taskloop
3948*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3949*67e74705SXin Li #pragma omp taskloop
3950*67e74705SXin Li for (int i = 0; i < 10; ++i)
3951*67e74705SXin Li ++a;
3952*67e74705SXin Li }
3953*67e74705SXin Li #pragma omp taskloop
3954*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3955*67e74705SXin Li #pragma omp target update to(a)
3956*67e74705SXin Li bar();
3957*67e74705SXin Li }
3958*67e74705SXin Li #pragma omp taskloop
3959*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3960*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3961*67e74705SXin Li for (int j = 0; j < 10; ++j)
3962*67e74705SXin Li ++a;
3963*67e74705SXin Li }
3964*67e74705SXin Li #pragma omp taskloop
3965*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3966*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
3967*67e74705SXin Li for (int j = 0; j < 10; ++j)
3968*67e74705SXin Li ++a;
3969*67e74705SXin Li }
3970*67e74705SXin Li #pragma omp taskloop
3971*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3972*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
3973*67e74705SXin Li for (int j = 0; j < 10; ++j)
3974*67e74705SXin Li ++a;
3975*67e74705SXin Li }
3976*67e74705SXin Li #pragma omp taskloop
3977*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3978*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
3979*67e74705SXin Li for (int j = 0; j < 10; ++j)
3980*67e74705SXin Li ++a;
3981*67e74705SXin Li }
3982*67e74705SXin Li
3983*67e74705SXin Li // DISTRIBUTE DIRECTIVE
3984*67e74705SXin Li #pragma omp target
3985*67e74705SXin Li #pragma omp teams
3986*67e74705SXin Li #pragma omp distribute
3987*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3988*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
3989*67e74705SXin Li for (int i = 0; i < 10; ++i)
3990*67e74705SXin Li ;
3991*67e74705SXin Li }
3992*67e74705SXin Li #pragma omp target
3993*67e74705SXin Li #pragma omp teams
3994*67e74705SXin Li #pragma omp distribute
3995*67e74705SXin Li for (int i = 0; i < 10; ++i) {
3996*67e74705SXin Li #pragma omp for
3997*67e74705SXin Li for (int i = 0; i < 10; ++i)
3998*67e74705SXin Li ;
3999*67e74705SXin Li }
4000*67e74705SXin Li #pragma omp target
4001*67e74705SXin Li #pragma omp teams
4002*67e74705SXin Li #pragma omp distribute
4003*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4004*67e74705SXin Li #pragma omp simd
4005*67e74705SXin Li for (int i = 0; i < 10; ++i)
4006*67e74705SXin Li ;
4007*67e74705SXin Li }
4008*67e74705SXin Li #pragma omp target
4009*67e74705SXin Li #pragma omp teams
4010*67e74705SXin Li #pragma omp distribute
4011*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4012*67e74705SXin Li #pragma omp for simd
4013*67e74705SXin Li for (int i = 0; i < 10; ++i)
4014*67e74705SXin Li ;
4015*67e74705SXin Li }
4016*67e74705SXin Li #pragma omp target
4017*67e74705SXin Li #pragma omp teams
4018*67e74705SXin Li #pragma omp distribute
4019*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4020*67e74705SXin Li #pragma omp parallel
4021*67e74705SXin Li for (int i = 0; i < 10; ++i)
4022*67e74705SXin Li ;
4023*67e74705SXin Li }
4024*67e74705SXin Li #pragma omp target
4025*67e74705SXin Li #pragma omp teams
4026*67e74705SXin Li #pragma omp distribute
4027*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4028*67e74705SXin Li #pragma omp sections
4029*67e74705SXin Li {
4030*67e74705SXin Li bar();
4031*67e74705SXin Li }
4032*67e74705SXin Li }
4033*67e74705SXin Li #pragma omp target
4034*67e74705SXin Li #pragma omp teams
4035*67e74705SXin Li #pragma omp distribute
4036*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4037*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
4038*67e74705SXin Li {
4039*67e74705SXin Li bar();
4040*67e74705SXin Li }
4041*67e74705SXin Li }
4042*67e74705SXin Li #pragma omp target
4043*67e74705SXin Li #pragma omp teams
4044*67e74705SXin Li #pragma omp distribute
4045*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4046*67e74705SXin Li #pragma omp single
4047*67e74705SXin Li {
4048*67e74705SXin Li bar();
4049*67e74705SXin Li }
4050*67e74705SXin Li }
4051*67e74705SXin Li #pragma omp target
4052*67e74705SXin Li #pragma omp teams
4053*67e74705SXin Li #pragma omp distribute
4054*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4055*67e74705SXin Li #pragma omp master
4056*67e74705SXin Li {
4057*67e74705SXin Li bar();
4058*67e74705SXin Li }
4059*67e74705SXin Li }
4060*67e74705SXin Li #pragma omp target
4061*67e74705SXin Li #pragma omp teams
4062*67e74705SXin Li #pragma omp distribute
4063*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4064*67e74705SXin Li #pragma omp critical
4065*67e74705SXin Li {
4066*67e74705SXin Li bar();
4067*67e74705SXin Li }
4068*67e74705SXin Li }
4069*67e74705SXin Li #pragma omp target
4070*67e74705SXin Li #pragma omp teams
4071*67e74705SXin Li #pragma omp distribute
4072*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4073*67e74705SXin Li #pragma omp parallel
4074*67e74705SXin Li {
4075*67e74705SXin Li #pragma omp single
4076*67e74705SXin Li {
4077*67e74705SXin Li bar();
4078*67e74705SXin Li }
4079*67e74705SXin Li }
4080*67e74705SXin Li }
4081*67e74705SXin Li #pragma omp target
4082*67e74705SXin Li #pragma omp teams
4083*67e74705SXin Li #pragma omp distribute
4084*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4085*67e74705SXin Li #pragma omp parallel for
4086*67e74705SXin Li for (int i = 0; i < 10; ++i)
4087*67e74705SXin Li ;
4088*67e74705SXin Li }
4089*67e74705SXin Li #pragma omp target
4090*67e74705SXin Li #pragma omp teams
4091*67e74705SXin Li #pragma omp distribute
4092*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4093*67e74705SXin Li #pragma omp parallel for simd
4094*67e74705SXin Li for (int i = 0; i < 10; ++i)
4095*67e74705SXin Li ;
4096*67e74705SXin Li }
4097*67e74705SXin Li #pragma omp target
4098*67e74705SXin Li #pragma omp teams
4099*67e74705SXin Li #pragma omp distribute
4100*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4101*67e74705SXin Li #pragma omp parallel sections
4102*67e74705SXin Li {
4103*67e74705SXin Li bar();
4104*67e74705SXin Li }
4105*67e74705SXin Li }
4106*67e74705SXin Li #pragma omp target
4107*67e74705SXin Li #pragma omp teams
4108*67e74705SXin Li #pragma omp distribute
4109*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4110*67e74705SXin Li #pragma omp task
4111*67e74705SXin Li {
4112*67e74705SXin Li bar();
4113*67e74705SXin Li }
4114*67e74705SXin Li }
4115*67e74705SXin Li #pragma omp target
4116*67e74705SXin Li #pragma omp teams
4117*67e74705SXin Li #pragma omp distribute
4118*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4119*67e74705SXin Li #pragma omp taskyield
4120*67e74705SXin Li bar();
4121*67e74705SXin Li }
4122*67e74705SXin Li #pragma omp target
4123*67e74705SXin Li #pragma omp teams
4124*67e74705SXin Li #pragma omp distribute
4125*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4126*67e74705SXin Li #pragma omp barrier
4127*67e74705SXin Li bar();
4128*67e74705SXin Li }
4129*67e74705SXin Li #pragma omp target
4130*67e74705SXin Li #pragma omp teams
4131*67e74705SXin Li #pragma omp distribute
4132*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4133*67e74705SXin Li #pragma omp taskwait
4134*67e74705SXin Li bar();
4135*67e74705SXin Li }
4136*67e74705SXin Li #pragma omp target
4137*67e74705SXin Li #pragma omp teams
4138*67e74705SXin Li #pragma omp distribute
4139*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4140*67e74705SXin Li #pragma omp flush
4141*67e74705SXin Li bar();
4142*67e74705SXin Li }
4143*67e74705SXin Li #pragma omp target
4144*67e74705SXin Li #pragma omp teams
4145*67e74705SXin Li #pragma omp distribute
4146*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4147*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
4148*67e74705SXin Li bar();
4149*67e74705SXin Li }
4150*67e74705SXin Li #pragma omp target
4151*67e74705SXin Li #pragma omp teams
4152*67e74705SXin Li #pragma omp distribute
4153*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4154*67e74705SXin Li #pragma omp atomic
4155*67e74705SXin Li ++a;
4156*67e74705SXin Li }
4157*67e74705SXin Li #pragma omp target
4158*67e74705SXin Li #pragma omp teams
4159*67e74705SXin Li #pragma omp distribute
4160*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4161*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4162*67e74705SXin Li ++a;
4163*67e74705SXin Li }
4164*67e74705SXin Li #pragma omp target
4165*67e74705SXin Li #pragma omp teams
4166*67e74705SXin Li #pragma omp distribute
4167*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4168*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4169*67e74705SXin Li ++a;
4170*67e74705SXin Li }
4171*67e74705SXin Li #pragma omp target
4172*67e74705SXin Li #pragma omp teams
4173*67e74705SXin Li #pragma omp distribute
4174*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4175*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4176*67e74705SXin Li for (int i = 0; i < 10; ++i)
4177*67e74705SXin Li ;
4178*67e74705SXin Li }
4179*67e74705SXin Li #pragma omp target
4180*67e74705SXin Li #pragma omp teams
4181*67e74705SXin Li #pragma omp distribute
4182*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4183*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4184*67e74705SXin Li ++a;
4185*67e74705SXin Li }
4186*67e74705SXin Li #pragma omp target
4187*67e74705SXin Li #pragma omp teams
4188*67e74705SXin Li #pragma omp distribute
4189*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4190*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4191*67e74705SXin Li ++a;
4192*67e74705SXin Li }
4193*67e74705SXin Li #pragma omp target
4194*67e74705SXin Li #pragma omp teams
4195*67e74705SXin Li #pragma omp distribute
4196*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4197*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
4198*67e74705SXin Li ++a;
4199*67e74705SXin Li }
4200*67e74705SXin Li #pragma omp target
4201*67e74705SXin Li #pragma omp teams
4202*67e74705SXin Li #pragma omp distribute
4203*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4204*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4205*67e74705SXin Li ++a;
4206*67e74705SXin Li }
4207*67e74705SXin Li
4208*67e74705SXin Li // DISTRIBUTE PARALLEL FOR DIRECTIVE
4209*67e74705SXin Li #pragma omp target
4210*67e74705SXin Li #pragma omp teams
4211*67e74705SXin Li #pragma omp distribute parallel for
4212*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4213*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
4214*67e74705SXin Li for (int i = 0; i < 10; ++i)
4215*67e74705SXin Li ;
4216*67e74705SXin Li }
4217*67e74705SXin Li #pragma omp target
4218*67e74705SXin Li #pragma omp teams
4219*67e74705SXin Li #pragma omp distribute parallel for
4220*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4221*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
4222*67e74705SXin Li for (int i = 0; i < 10; ++i)
4223*67e74705SXin Li ;
4224*67e74705SXin Li }
4225*67e74705SXin Li #pragma omp target
4226*67e74705SXin Li #pragma omp teams
4227*67e74705SXin Li #pragma omp distribute parallel for
4228*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4229*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
4230*67e74705SXin Li for (int i = 0; i < 10; ++i)
4231*67e74705SXin Li ;
4232*67e74705SXin Li }
4233*67e74705SXin Li #pragma omp target
4234*67e74705SXin Li #pragma omp teams
4235*67e74705SXin Li #pragma omp distribute parallel for
4236*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4237*67e74705SXin Li #pragma omp simd
4238*67e74705SXin Li for (int i = 0; i < 10; ++i)
4239*67e74705SXin Li ;
4240*67e74705SXin Li }
4241*67e74705SXin Li #pragma omp target
4242*67e74705SXin Li #pragma omp teams
4243*67e74705SXin Li #pragma omp distribute parallel for
4244*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4245*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
4246*67e74705SXin Li for (int i = 0; i < 10; ++i)
4247*67e74705SXin Li ;
4248*67e74705SXin Li }
4249*67e74705SXin Li #pragma omp target
4250*67e74705SXin Li #pragma omp teams
4251*67e74705SXin Li #pragma omp distribute parallel for
4252*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4253*67e74705SXin Li #pragma omp parallel
4254*67e74705SXin Li for (int i = 0; i < 10; ++i)
4255*67e74705SXin Li ;
4256*67e74705SXin Li }
4257*67e74705SXin Li #pragma omp target
4258*67e74705SXin Li #pragma omp teams
4259*67e74705SXin Li #pragma omp distribute parallel for
4260*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4261*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
4262*67e74705SXin Li {
4263*67e74705SXin Li bar();
4264*67e74705SXin Li }
4265*67e74705SXin Li }
4266*67e74705SXin Li #pragma omp target
4267*67e74705SXin Li #pragma omp teams
4268*67e74705SXin Li #pragma omp distribute parallel for
4269*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4270*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
4271*67e74705SXin Li {
4272*67e74705SXin Li bar();
4273*67e74705SXin Li }
4274*67e74705SXin Li }
4275*67e74705SXin Li #pragma omp target
4276*67e74705SXin Li #pragma omp teams
4277*67e74705SXin Li #pragma omp distribute parallel for
4278*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4279*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
4280*67e74705SXin Li {
4281*67e74705SXin Li bar();
4282*67e74705SXin Li }
4283*67e74705SXin Li }
4284*67e74705SXin Li #pragma omp target
4285*67e74705SXin Li #pragma omp teams
4286*67e74705SXin Li #pragma omp distribute parallel for
4287*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4288*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
4289*67e74705SXin Li {
4290*67e74705SXin Li bar();
4291*67e74705SXin Li }
4292*67e74705SXin Li }
4293*67e74705SXin Li #pragma omp target
4294*67e74705SXin Li #pragma omp teams
4295*67e74705SXin Li #pragma omp distribute parallel for
4296*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4297*67e74705SXin Li #pragma omp critical
4298*67e74705SXin Li {
4299*67e74705SXin Li bar();
4300*67e74705SXin Li }
4301*67e74705SXin Li }
4302*67e74705SXin Li #pragma omp target
4303*67e74705SXin Li #pragma omp teams
4304*67e74705SXin Li #pragma omp distribute parallel for
4305*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4306*67e74705SXin Li #pragma omp parallel
4307*67e74705SXin Li {
4308*67e74705SXin Li #pragma omp single
4309*67e74705SXin Li {
4310*67e74705SXin Li bar();
4311*67e74705SXin Li }
4312*67e74705SXin Li }
4313*67e74705SXin Li }
4314*67e74705SXin Li #pragma omp target
4315*67e74705SXin Li #pragma omp teams
4316*67e74705SXin Li #pragma omp distribute parallel for
4317*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4318*67e74705SXin Li #pragma omp parallel for
4319*67e74705SXin Li for (int i = 0; i < 10; ++i)
4320*67e74705SXin Li ;
4321*67e74705SXin Li }
4322*67e74705SXin Li #pragma omp target
4323*67e74705SXin Li #pragma omp teams
4324*67e74705SXin Li #pragma omp distribute parallel for
4325*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4326*67e74705SXin Li #pragma omp parallel for simd
4327*67e74705SXin Li for (int i = 0; i < 10; ++i)
4328*67e74705SXin Li ;
4329*67e74705SXin Li }
4330*67e74705SXin Li #pragma omp target
4331*67e74705SXin Li #pragma omp teams
4332*67e74705SXin Li #pragma omp distribute parallel for
4333*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4334*67e74705SXin Li #pragma omp parallel sections
4335*67e74705SXin Li {
4336*67e74705SXin Li bar();
4337*67e74705SXin Li }
4338*67e74705SXin Li }
4339*67e74705SXin Li #pragma omp target
4340*67e74705SXin Li #pragma omp teams
4341*67e74705SXin Li #pragma omp distribute parallel for
4342*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4343*67e74705SXin Li #pragma omp task
4344*67e74705SXin Li {
4345*67e74705SXin Li bar();
4346*67e74705SXin Li }
4347*67e74705SXin Li }
4348*67e74705SXin Li #pragma omp target
4349*67e74705SXin Li #pragma omp teams
4350*67e74705SXin Li #pragma omp distribute parallel for
4351*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4352*67e74705SXin Li #pragma omp taskyield
4353*67e74705SXin Li bar();
4354*67e74705SXin Li }
4355*67e74705SXin Li #pragma omp target
4356*67e74705SXin Li #pragma omp teams
4357*67e74705SXin Li #pragma omp distribute parallel for
4358*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4359*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
4360*67e74705SXin Li bar();
4361*67e74705SXin Li }
4362*67e74705SXin Li #pragma omp target
4363*67e74705SXin Li #pragma omp teams
4364*67e74705SXin Li #pragma omp distribute parallel for
4365*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4366*67e74705SXin Li #pragma omp taskwait
4367*67e74705SXin Li bar();
4368*67e74705SXin Li }
4369*67e74705SXin Li #pragma omp target
4370*67e74705SXin Li #pragma omp teams
4371*67e74705SXin Li #pragma omp distribute parallel for
4372*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4373*67e74705SXin Li #pragma omp flush
4374*67e74705SXin Li bar();
4375*67e74705SXin Li }
4376*67e74705SXin Li #pragma omp target
4377*67e74705SXin Li #pragma omp teams
4378*67e74705SXin Li #pragma omp distribute parallel for
4379*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4380*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
4381*67e74705SXin Li bar();
4382*67e74705SXin Li }
4383*67e74705SXin Li #pragma omp target
4384*67e74705SXin Li #pragma omp teams
4385*67e74705SXin Li #pragma omp distribute parallel for
4386*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4387*67e74705SXin Li #pragma omp atomic
4388*67e74705SXin Li ++a;
4389*67e74705SXin Li }
4390*67e74705SXin Li #pragma omp target
4391*67e74705SXin Li #pragma omp teams
4392*67e74705SXin Li #pragma omp distribute parallel for
4393*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4394*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
4395*67e74705SXin Li ++a;
4396*67e74705SXin Li }
4397*67e74705SXin Li #pragma omp target
4398*67e74705SXin Li #pragma omp teams
4399*67e74705SXin Li #pragma omp distribute parallel for
4400*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4401*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
4402*67e74705SXin Li ++a;
4403*67e74705SXin Li }
4404*67e74705SXin Li #pragma omp target
4405*67e74705SXin Li #pragma omp teams
4406*67e74705SXin Li #pragma omp distribute parallel for
4407*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4408*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
4409*67e74705SXin Li for (int i = 0; i < 10; ++i)
4410*67e74705SXin Li ;
4411*67e74705SXin Li }
4412*67e74705SXin Li #pragma omp target
4413*67e74705SXin Li #pragma omp teams
4414*67e74705SXin Li #pragma omp distribute parallel for
4415*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4416*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
4417*67e74705SXin Li ++a;
4418*67e74705SXin Li }
4419*67e74705SXin Li #pragma omp target
4420*67e74705SXin Li #pragma omp teams
4421*67e74705SXin Li #pragma omp distribute parallel for
4422*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4423*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
4424*67e74705SXin Li ++a;
4425*67e74705SXin Li }
4426*67e74705SXin Li #pragma omp target
4427*67e74705SXin Li #pragma omp teams
4428*67e74705SXin Li #pragma omp distribute parallel for
4429*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4430*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
4431*67e74705SXin Li ++a;
4432*67e74705SXin Li }
4433*67e74705SXin Li #pragma omp target
4434*67e74705SXin Li #pragma omp teams
4435*67e74705SXin Li #pragma omp distribute parallel for
4436*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4437*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
4438*67e74705SXin Li ++a;
4439*67e74705SXin Li }
4440*67e74705SXin Li #pragma omp target
4441*67e74705SXin Li #pragma omp teams
4442*67e74705SXin Li #pragma omp distribute parallel for
4443*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4444*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
4445*67e74705SXin Li for (int i = 0; i < 10; ++i)
4446*67e74705SXin Li ;
4447*67e74705SXin Li }
4448*67e74705SXin Li
4449*67e74705SXin Li // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
4450*67e74705SXin Li #pragma omp target
4451*67e74705SXin Li #pragma omp teams
4452*67e74705SXin Li #pragma omp distribute parallel for simd
4453*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4454*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4455*67e74705SXin Li for (int i = 0; i < 10; ++i)
4456*67e74705SXin Li ;
4457*67e74705SXin Li }
4458*67e74705SXin Li #pragma omp target
4459*67e74705SXin Li #pragma omp teams
4460*67e74705SXin Li #pragma omp distribute parallel for simd
4461*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4462*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4463*67e74705SXin Li for (int i = 0; i < 10; ++i)
4464*67e74705SXin Li ;
4465*67e74705SXin Li }
4466*67e74705SXin Li #pragma omp target
4467*67e74705SXin Li #pragma omp teams
4468*67e74705SXin Li #pragma omp distribute parallel for simd
4469*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4470*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4471*67e74705SXin Li for (int i = 0; i < 10; ++i)
4472*67e74705SXin Li ;
4473*67e74705SXin Li }
4474*67e74705SXin Li #pragma omp target
4475*67e74705SXin Li #pragma omp teams
4476*67e74705SXin Li #pragma omp distribute parallel for simd
4477*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4478*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
4479*67e74705SXin Li for (int i = 0; i < 10; ++i)
4480*67e74705SXin Li ;
4481*67e74705SXin Li }
4482*67e74705SXin Li #pragma omp target
4483*67e74705SXin Li #pragma omp teams
4484*67e74705SXin Li #pragma omp distribute parallel for simd
4485*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4486*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4487*67e74705SXin Li for (int i = 0; i < 10; ++i)
4488*67e74705SXin Li ;
4489*67e74705SXin Li }
4490*67e74705SXin Li #pragma omp target
4491*67e74705SXin Li #pragma omp teams
4492*67e74705SXin Li #pragma omp distribute parallel for simd
4493*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4494*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4495*67e74705SXin Li for (int i = 0; i < 10; ++i)
4496*67e74705SXin Li ;
4497*67e74705SXin Li }
4498*67e74705SXin Li #pragma omp target
4499*67e74705SXin Li #pragma omp teams
4500*67e74705SXin Li #pragma omp distribute parallel for simd
4501*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4502*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4503*67e74705SXin Li {
4504*67e74705SXin Li bar();
4505*67e74705SXin Li }
4506*67e74705SXin Li }
4507*67e74705SXin Li #pragma omp target
4508*67e74705SXin Li #pragma omp teams
4509*67e74705SXin Li #pragma omp distribute parallel for simd
4510*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4511*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4512*67e74705SXin Li {
4513*67e74705SXin Li bar();
4514*67e74705SXin Li }
4515*67e74705SXin Li }
4516*67e74705SXin Li #pragma omp target
4517*67e74705SXin Li #pragma omp teams
4518*67e74705SXin Li #pragma omp distribute parallel for simd
4519*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4520*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4521*67e74705SXin Li {
4522*67e74705SXin Li bar();
4523*67e74705SXin Li }
4524*67e74705SXin Li }
4525*67e74705SXin Li #pragma omp target
4526*67e74705SXin Li #pragma omp teams
4527*67e74705SXin Li #pragma omp distribute parallel for simd
4528*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4529*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4530*67e74705SXin Li {
4531*67e74705SXin Li bar();
4532*67e74705SXin Li }
4533*67e74705SXin Li }
4534*67e74705SXin Li #pragma omp target
4535*67e74705SXin Li #pragma omp teams
4536*67e74705SXin Li #pragma omp distribute parallel for simd
4537*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4538*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4539*67e74705SXin Li {
4540*67e74705SXin Li bar();
4541*67e74705SXin Li }
4542*67e74705SXin Li }
4543*67e74705SXin Li #pragma omp target
4544*67e74705SXin Li #pragma omp teams
4545*67e74705SXin Li #pragma omp distribute parallel for simd
4546*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4547*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4548*67e74705SXin Li {
4549*67e74705SXin Li #pragma omp single
4550*67e74705SXin Li {
4551*67e74705SXin Li bar();
4552*67e74705SXin Li }
4553*67e74705SXin Li }
4554*67e74705SXin Li }
4555*67e74705SXin Li #pragma omp target
4556*67e74705SXin Li #pragma omp teams
4557*67e74705SXin Li #pragma omp distribute parallel for simd
4558*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4559*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4560*67e74705SXin Li for (int i = 0; i < 10; ++i)
4561*67e74705SXin Li ;
4562*67e74705SXin Li }
4563*67e74705SXin Li #pragma omp target
4564*67e74705SXin Li #pragma omp teams
4565*67e74705SXin Li #pragma omp distribute parallel for simd
4566*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4567*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4568*67e74705SXin Li for (int i = 0; i < 10; ++i)
4569*67e74705SXin Li ;
4570*67e74705SXin Li }
4571*67e74705SXin Li #pragma omp target
4572*67e74705SXin Li #pragma omp teams
4573*67e74705SXin Li #pragma omp distribute parallel for simd
4574*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4575*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4576*67e74705SXin Li {
4577*67e74705SXin Li bar();
4578*67e74705SXin Li }
4579*67e74705SXin Li }
4580*67e74705SXin Li #pragma omp target
4581*67e74705SXin Li #pragma omp teams
4582*67e74705SXin Li #pragma omp distribute parallel for simd
4583*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4584*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4585*67e74705SXin Li {
4586*67e74705SXin Li bar();
4587*67e74705SXin Li }
4588*67e74705SXin Li }
4589*67e74705SXin Li #pragma omp target
4590*67e74705SXin Li #pragma omp teams
4591*67e74705SXin Li #pragma omp distribute parallel for simd
4592*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4593*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4594*67e74705SXin Li bar();
4595*67e74705SXin Li }
4596*67e74705SXin Li #pragma omp target
4597*67e74705SXin Li #pragma omp teams
4598*67e74705SXin Li #pragma omp distribute parallel for simd
4599*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4600*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4601*67e74705SXin Li bar();
4602*67e74705SXin Li }
4603*67e74705SXin Li #pragma omp target
4604*67e74705SXin Li #pragma omp teams
4605*67e74705SXin Li #pragma omp distribute parallel for simd
4606*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4607*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4608*67e74705SXin Li bar();
4609*67e74705SXin Li }
4610*67e74705SXin Li #pragma omp target
4611*67e74705SXin Li #pragma omp teams
4612*67e74705SXin Li #pragma omp distribute parallel for simd
4613*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4614*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4615*67e74705SXin Li bar();
4616*67e74705SXin Li }
4617*67e74705SXin Li #pragma omp target
4618*67e74705SXin Li #pragma omp teams
4619*67e74705SXin Li #pragma omp distribute parallel for simd
4620*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4621*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4622*67e74705SXin Li bar();
4623*67e74705SXin Li }
4624*67e74705SXin Li #pragma omp target
4625*67e74705SXin Li #pragma omp teams
4626*67e74705SXin Li #pragma omp distribute parallel for simd
4627*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4628*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4629*67e74705SXin Li ++a;
4630*67e74705SXin Li }
4631*67e74705SXin Li #pragma omp target
4632*67e74705SXin Li #pragma omp teams
4633*67e74705SXin Li #pragma omp distribute parallel for simd
4634*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4635*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4636*67e74705SXin Li ++a;
4637*67e74705SXin Li }
4638*67e74705SXin Li #pragma omp target
4639*67e74705SXin Li #pragma omp teams
4640*67e74705SXin Li #pragma omp distribute parallel for simd
4641*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4642*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4643*67e74705SXin Li ++a;
4644*67e74705SXin Li }
4645*67e74705SXin Li #pragma omp target
4646*67e74705SXin Li #pragma omp teams
4647*67e74705SXin Li #pragma omp distribute parallel for simd
4648*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4649*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4650*67e74705SXin Li for (int i = 0; i < 10; ++i)
4651*67e74705SXin Li ;
4652*67e74705SXin Li }
4653*67e74705SXin Li #pragma omp target
4654*67e74705SXin Li #pragma omp teams
4655*67e74705SXin Li #pragma omp distribute parallel for simd
4656*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4657*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4658*67e74705SXin Li ++a;
4659*67e74705SXin Li }
4660*67e74705SXin Li #pragma omp target
4661*67e74705SXin Li #pragma omp teams
4662*67e74705SXin Li #pragma omp distribute parallel for simd
4663*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4664*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4665*67e74705SXin Li ++a;
4666*67e74705SXin Li }
4667*67e74705SXin Li #pragma omp target
4668*67e74705SXin Li #pragma omp teams
4669*67e74705SXin Li #pragma omp distribute parallel for simd
4670*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4671*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4672*67e74705SXin Li ++a;
4673*67e74705SXin Li }
4674*67e74705SXin Li #pragma omp target
4675*67e74705SXin Li #pragma omp teams
4676*67e74705SXin Li #pragma omp distribute parallel for simd
4677*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4678*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4679*67e74705SXin Li ++a;
4680*67e74705SXin Li }
4681*67e74705SXin Li #pragma omp target
4682*67e74705SXin Li #pragma omp teams
4683*67e74705SXin Li #pragma omp distribute parallel for simd
4684*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4685*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4686*67e74705SXin Li for (int i = 0; i < 10; ++i)
4687*67e74705SXin Li ++a;
4688*67e74705SXin Li }
4689*67e74705SXin Li }
4690*67e74705SXin Li
foo()4691*67e74705SXin Li void foo() {
4692*67e74705SXin Li int a = 0;
4693*67e74705SXin Li // PARALLEL DIRECTIVE
4694*67e74705SXin Li #pragma omp parallel
4695*67e74705SXin Li #pragma omp for
4696*67e74705SXin Li for (int i = 0; i < 10; ++i)
4697*67e74705SXin Li ;
4698*67e74705SXin Li #pragma omp parallel
4699*67e74705SXin Li #pragma omp simd
4700*67e74705SXin Li for (int i = 0; i < 10; ++i)
4701*67e74705SXin Li ;
4702*67e74705SXin Li #pragma omp parallel
4703*67e74705SXin Li #pragma omp for simd
4704*67e74705SXin Li for (int i = 0; i < 10; ++i)
4705*67e74705SXin Li ;
4706*67e74705SXin Li #pragma omp parallel
4707*67e74705SXin Li #pragma omp sections
4708*67e74705SXin Li {
4709*67e74705SXin Li bar();
4710*67e74705SXin Li }
4711*67e74705SXin Li #pragma omp parallel
4712*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel region}}
4713*67e74705SXin Li {
4714*67e74705SXin Li bar();
4715*67e74705SXin Li }
4716*67e74705SXin Li #pragma omp parallel
4717*67e74705SXin Li #pragma omp sections
4718*67e74705SXin Li {
4719*67e74705SXin Li bar();
4720*67e74705SXin Li }
4721*67e74705SXin Li #pragma omp parallel
4722*67e74705SXin Li #pragma omp single
4723*67e74705SXin Li bar();
4724*67e74705SXin Li #pragma omp parallel
4725*67e74705SXin Li #pragma omp master
4726*67e74705SXin Li bar();
4727*67e74705SXin Li #pragma omp parallel
4728*67e74705SXin Li #pragma omp critical
4729*67e74705SXin Li bar();
4730*67e74705SXin Li #pragma omp parallel
4731*67e74705SXin Li #pragma omp parallel for
4732*67e74705SXin Li for (int i = 0; i < 10; ++i)
4733*67e74705SXin Li ;
4734*67e74705SXin Li #pragma omp parallel
4735*67e74705SXin Li #pragma omp parallel for simd
4736*67e74705SXin Li for (int i = 0; i < 10; ++i)
4737*67e74705SXin Li ;
4738*67e74705SXin Li #pragma omp parallel
4739*67e74705SXin Li #pragma omp parallel sections
4740*67e74705SXin Li {
4741*67e74705SXin Li bar();
4742*67e74705SXin Li }
4743*67e74705SXin Li #pragma omp parallel
4744*67e74705SXin Li #pragma omp task
4745*67e74705SXin Li {
4746*67e74705SXin Li bar();
4747*67e74705SXin Li }
4748*67e74705SXin Li #pragma omp parallel
4749*67e74705SXin Li {
4750*67e74705SXin Li #pragma omp taskyield
4751*67e74705SXin Li bar();
4752*67e74705SXin Li }
4753*67e74705SXin Li #pragma omp parallel
4754*67e74705SXin Li {
4755*67e74705SXin Li #pragma omp barrier
4756*67e74705SXin Li bar();
4757*67e74705SXin Li }
4758*67e74705SXin Li #pragma omp parallel
4759*67e74705SXin Li {
4760*67e74705SXin Li #pragma omp taskwait
4761*67e74705SXin Li bar();
4762*67e74705SXin Li }
4763*67e74705SXin Li #pragma omp parallel
4764*67e74705SXin Li {
4765*67e74705SXin Li #pragma omp flush
4766*67e74705SXin Li bar();
4767*67e74705SXin Li }
4768*67e74705SXin Li #pragma omp parallel
4769*67e74705SXin Li {
4770*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
4771*67e74705SXin Li bar();
4772*67e74705SXin Li }
4773*67e74705SXin Li #pragma omp parallel
4774*67e74705SXin Li {
4775*67e74705SXin Li #pragma omp atomic
4776*67e74705SXin Li ++a;
4777*67e74705SXin Li }
4778*67e74705SXin Li #pragma omp parallel
4779*67e74705SXin Li {
4780*67e74705SXin Li #pragma omp target
4781*67e74705SXin Li ++a;
4782*67e74705SXin Li }
4783*67e74705SXin Li #pragma omp parallel
4784*67e74705SXin Li {
4785*67e74705SXin Li #pragma omp target parallel
4786*67e74705SXin Li ++a;
4787*67e74705SXin Li }
4788*67e74705SXin Li #pragma omp parallel
4789*67e74705SXin Li #pragma omp target parallel for
4790*67e74705SXin Li for (int i = 0; i < 10; ++i)
4791*67e74705SXin Li ;
4792*67e74705SXin Li #pragma omp parallel
4793*67e74705SXin Li {
4794*67e74705SXin Li #pragma omp target enter data map(to: a)
4795*67e74705SXin Li ++a;
4796*67e74705SXin Li }
4797*67e74705SXin Li #pragma omp parallel
4798*67e74705SXin Li {
4799*67e74705SXin Li #pragma omp target exit data map(from: a)
4800*67e74705SXin Li ++a;
4801*67e74705SXin Li }
4802*67e74705SXin Li #pragma omp parallel
4803*67e74705SXin Li {
4804*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
4805*67e74705SXin Li ++a;
4806*67e74705SXin Li }
4807*67e74705SXin Li #pragma omp parallel
4808*67e74705SXin Li {
4809*67e74705SXin Li #pragma omp taskloop
4810*67e74705SXin Li for (int i = 0; i < 10; ++i)
4811*67e74705SXin Li ++a;
4812*67e74705SXin Li }
4813*67e74705SXin Li #pragma omp parallel
4814*67e74705SXin Li {
4815*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
4816*67e74705SXin Li for (int i = 0; i < 10; ++i)
4817*67e74705SXin Li ;
4818*67e74705SXin Li }
4819*67e74705SXin Li #pragma omp parallel
4820*67e74705SXin Li {
4821*67e74705SXin Li #pragma omp target update to(a)
4822*67e74705SXin Li a++;
4823*67e74705SXin Li }
4824*67e74705SXin Li #pragma omp parallel
4825*67e74705SXin Li {
4826*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
4827*67e74705SXin Li for (int i = 0; i < 10; ++i)
4828*67e74705SXin Li ;
4829*67e74705SXin Li }
4830*67e74705SXin Li #pragma omp parallel
4831*67e74705SXin Li {
4832*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
4833*67e74705SXin Li for (int i = 0; i < 10; ++i)
4834*67e74705SXin Li ;
4835*67e74705SXin Li }
4836*67e74705SXin Li #pragma omp parallel
4837*67e74705SXin Li {
4838*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
4839*67e74705SXin Li for (int i = 0; i < 10; ++i)
4840*67e74705SXin Li ;
4841*67e74705SXin Li }
4842*67e74705SXin Li
4843*67e74705SXin Li // SIMD DIRECTIVE
4844*67e74705SXin Li #pragma omp simd
4845*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4846*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4847*67e74705SXin Li for (int i = 0; i < 10; ++i)
4848*67e74705SXin Li ;
4849*67e74705SXin Li }
4850*67e74705SXin Li #pragma omp simd
4851*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4852*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
4853*67e74705SXin Li for (int i = 0; i < 10; ++i)
4854*67e74705SXin Li ;
4855*67e74705SXin Li }
4856*67e74705SXin Li #pragma omp simd
4857*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4858*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4859*67e74705SXin Li for (int i = 0; i < 10; ++i)
4860*67e74705SXin Li ;
4861*67e74705SXin Li }
4862*67e74705SXin Li #pragma omp simd
4863*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4864*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4865*67e74705SXin Li for (int i = 0; i < 10; ++i)
4866*67e74705SXin Li ;
4867*67e74705SXin Li }
4868*67e74705SXin Li #pragma omp simd
4869*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4870*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4871*67e74705SXin Li {
4872*67e74705SXin Li bar();
4873*67e74705SXin Li }
4874*67e74705SXin Li }
4875*67e74705SXin Li #pragma omp simd
4876*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4877*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4878*67e74705SXin Li {
4879*67e74705SXin Li bar();
4880*67e74705SXin Li }
4881*67e74705SXin Li }
4882*67e74705SXin Li #pragma omp simd
4883*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4884*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4885*67e74705SXin Li bar();
4886*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4887*67e74705SXin Li bar();
4888*67e74705SXin Li }
4889*67e74705SXin Li #pragma omp simd
4890*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4891*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4892*67e74705SXin Li bar();
4893*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4894*67e74705SXin Li bar();
4895*67e74705SXin Li }
4896*67e74705SXin Li #pragma omp simd
4897*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4898*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4899*67e74705SXin Li for (int i = 0; i < 10; ++i)
4900*67e74705SXin Li ;
4901*67e74705SXin Li }
4902*67e74705SXin Li #pragma omp simd
4903*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4904*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4905*67e74705SXin Li for (int i = 0; i < 10; ++i)
4906*67e74705SXin Li ;
4907*67e74705SXin Li }
4908*67e74705SXin Li #pragma omp simd
4909*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4910*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4911*67e74705SXin Li {
4912*67e74705SXin Li bar();
4913*67e74705SXin Li }
4914*67e74705SXin Li }
4915*67e74705SXin Li #pragma omp simd
4916*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4917*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4918*67e74705SXin Li {
4919*67e74705SXin Li bar();
4920*67e74705SXin Li }
4921*67e74705SXin Li }
4922*67e74705SXin Li #pragma omp simd
4923*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4924*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4925*67e74705SXin Li bar();
4926*67e74705SXin Li }
4927*67e74705SXin Li #pragma omp simd
4928*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4929*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4930*67e74705SXin Li bar();
4931*67e74705SXin Li }
4932*67e74705SXin Li #pragma omp simd
4933*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4934*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4935*67e74705SXin Li bar();
4936*67e74705SXin Li }
4937*67e74705SXin Li #pragma omp simd
4938*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4939*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4940*67e74705SXin Li bar();
4941*67e74705SXin Li }
4942*67e74705SXin Li #pragma omp simd
4943*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4944*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4945*67e74705SXin Li bar();
4946*67e74705SXin Li }
4947*67e74705SXin Li #pragma omp simd
4948*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4949*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4950*67e74705SXin Li ++a;
4951*67e74705SXin Li }
4952*67e74705SXin Li #pragma omp simd
4953*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4954*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4955*67e74705SXin Li ++a;
4956*67e74705SXin Li }
4957*67e74705SXin Li #pragma omp simd
4958*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4959*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4960*67e74705SXin Li ++a;
4961*67e74705SXin Li }
4962*67e74705SXin Li #pragma omp simd
4963*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4964*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4965*67e74705SXin Li for (int i = 0; i < 10; ++i)
4966*67e74705SXin Li ;
4967*67e74705SXin Li }
4968*67e74705SXin Li #pragma omp simd
4969*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4970*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4971*67e74705SXin Li ++a;
4972*67e74705SXin Li }
4973*67e74705SXin Li #pragma omp simd
4974*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4975*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4976*67e74705SXin Li ++a;
4977*67e74705SXin Li }
4978*67e74705SXin Li #pragma omp simd
4979*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4980*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4981*67e74705SXin Li ++a;
4982*67e74705SXin Li }
4983*67e74705SXin Li #pragma omp simd
4984*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4985*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4986*67e74705SXin Li for (int i = 0; i < 10; ++i)
4987*67e74705SXin Li ++a;
4988*67e74705SXin Li }
4989*67e74705SXin Li #pragma omp simd
4990*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4991*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4992*67e74705SXin Li for (int j = 0; j < 10; ++j)
4993*67e74705SXin Li ;
4994*67e74705SXin Li }
4995*67e74705SXin Li #pragma omp simd
4996*67e74705SXin Li for (int i = 0; i < 10; ++i) {
4997*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
4998*67e74705SXin Li a++;
4999*67e74705SXin Li }
5000*67e74705SXin Li #pragma omp simd
5001*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5002*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5003*67e74705SXin Li for (int j = 0; j < 10; ++j)
5004*67e74705SXin Li ;
5005*67e74705SXin Li }
5006*67e74705SXin Li #pragma omp simd
5007*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5008*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5009*67e74705SXin Li for (int j = 0; j < 10; ++j)
5010*67e74705SXin Li ;
5011*67e74705SXin Li }
5012*67e74705SXin Li #pragma omp simd
5013*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5014*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5015*67e74705SXin Li for (int j = 0; j < 10; ++j)
5016*67e74705SXin Li ;
5017*67e74705SXin Li }
5018*67e74705SXin Li
5019*67e74705SXin Li // FOR DIRECTIVE
5020*67e74705SXin Li #pragma omp for
5021*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5022*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
5023*67e74705SXin Li for (int i = 0; i < 10; ++i)
5024*67e74705SXin Li ;
5025*67e74705SXin Li }
5026*67e74705SXin Li #pragma omp for
5027*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5028*67e74705SXin Li #pragma omp simd
5029*67e74705SXin Li for (int i = 0; i < 10; ++i)
5030*67e74705SXin Li ;
5031*67e74705SXin Li }
5032*67e74705SXin Li #pragma omp for
5033*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5034*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
5035*67e74705SXin Li for (int i = 0; i < 10; ++i)
5036*67e74705SXin Li ;
5037*67e74705SXin Li }
5038*67e74705SXin Li #pragma omp for
5039*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5040*67e74705SXin Li #pragma omp parallel
5041*67e74705SXin Li for (int i = 0; i < 10; ++i)
5042*67e74705SXin Li ;
5043*67e74705SXin Li }
5044*67e74705SXin Li #pragma omp for
5045*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5046*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
5047*67e74705SXin Li {
5048*67e74705SXin Li bar();
5049*67e74705SXin Li }
5050*67e74705SXin Li }
5051*67e74705SXin Li #pragma omp for
5052*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5053*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a for region}}
5054*67e74705SXin Li {
5055*67e74705SXin Li bar();
5056*67e74705SXin Li }
5057*67e74705SXin Li }
5058*67e74705SXin Li #pragma omp for
5059*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5060*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
5061*67e74705SXin Li bar();
5062*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
5063*67e74705SXin Li bar();
5064*67e74705SXin Li #pragma omp critical
5065*67e74705SXin Li bar();
5066*67e74705SXin Li }
5067*67e74705SXin Li #pragma omp for
5068*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5069*67e74705SXin Li #pragma omp parallel
5070*67e74705SXin Li {
5071*67e74705SXin Li #pragma omp single // OK
5072*67e74705SXin Li {
5073*67e74705SXin Li bar();
5074*67e74705SXin Li }
5075*67e74705SXin Li #pragma omp for // OK
5076*67e74705SXin Li for (int i = 0; i < 10; ++i)
5077*67e74705SXin Li ;
5078*67e74705SXin Li #pragma omp for simd // OK
5079*67e74705SXin Li for (int i = 0; i < 10; ++i)
5080*67e74705SXin Li ;
5081*67e74705SXin Li #pragma omp sections // OK
5082*67e74705SXin Li {
5083*67e74705SXin Li bar();
5084*67e74705SXin Li }
5085*67e74705SXin Li }
5086*67e74705SXin Li }
5087*67e74705SXin Li #pragma omp for
5088*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5089*67e74705SXin Li #pragma omp parallel for
5090*67e74705SXin Li for (int i = 0; i < 10; ++i)
5091*67e74705SXin Li ;
5092*67e74705SXin Li }
5093*67e74705SXin Li #pragma omp for
5094*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5095*67e74705SXin Li #pragma omp parallel for simd
5096*67e74705SXin Li for (int i = 0; i < 10; ++i)
5097*67e74705SXin Li ;
5098*67e74705SXin Li }
5099*67e74705SXin Li #pragma omp for
5100*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5101*67e74705SXin Li #pragma omp parallel sections
5102*67e74705SXin Li {
5103*67e74705SXin Li bar();
5104*67e74705SXin Li }
5105*67e74705SXin Li }
5106*67e74705SXin Li #pragma omp for
5107*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5108*67e74705SXin Li #pragma omp task
5109*67e74705SXin Li {
5110*67e74705SXin Li bar();
5111*67e74705SXin Li }
5112*67e74705SXin Li }
5113*67e74705SXin Li #pragma omp for
5114*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5115*67e74705SXin Li #pragma omp taskyield
5116*67e74705SXin Li bar();
5117*67e74705SXin Li }
5118*67e74705SXin Li #pragma omp for
5119*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5120*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'for' region}}
5121*67e74705SXin Li bar();
5122*67e74705SXin Li }
5123*67e74705SXin Li #pragma omp for
5124*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5125*67e74705SXin Li #pragma omp taskwait
5126*67e74705SXin Li bar();
5127*67e74705SXin Li }
5128*67e74705SXin Li #pragma omp for
5129*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5130*67e74705SXin Li #pragma omp flush
5131*67e74705SXin Li bar();
5132*67e74705SXin Li }
5133*67e74705SXin Li #pragma omp for
5134*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5135*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
5136*67e74705SXin Li bar();
5137*67e74705SXin Li }
5138*67e74705SXin Li #pragma omp for ordered
5139*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5140*67e74705SXin Li #pragma omp ordered // OK
5141*67e74705SXin Li bar();
5142*67e74705SXin Li }
5143*67e74705SXin Li #pragma omp for
5144*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5145*67e74705SXin Li #pragma omp atomic
5146*67e74705SXin Li ++a;
5147*67e74705SXin Li }
5148*67e74705SXin Li #pragma omp for
5149*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5150*67e74705SXin Li #pragma omp target
5151*67e74705SXin Li ++a;
5152*67e74705SXin Li }
5153*67e74705SXin Li #pragma omp for
5154*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5155*67e74705SXin Li #pragma omp target parallel
5156*67e74705SXin Li ++a;
5157*67e74705SXin Li }
5158*67e74705SXin Li #pragma omp for
5159*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5160*67e74705SXin Li #pragma omp target parallel for
5161*67e74705SXin Li for (int i = 0; i < 10; ++i)
5162*67e74705SXin Li ;
5163*67e74705SXin Li }
5164*67e74705SXin Li #pragma omp for
5165*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5166*67e74705SXin Li #pragma omp target enter data map(to: a)
5167*67e74705SXin Li ++a;
5168*67e74705SXin Li }
5169*67e74705SXin Li #pragma omp for
5170*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5171*67e74705SXin Li #pragma omp target exit data map(from: a)
5172*67e74705SXin Li ++a;
5173*67e74705SXin Li }
5174*67e74705SXin Li #pragma omp for
5175*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5176*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
5177*67e74705SXin Li ++a;
5178*67e74705SXin Li }
5179*67e74705SXin Li #pragma omp for
5180*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5181*67e74705SXin Li #pragma omp taskloop
5182*67e74705SXin Li for (int i = 0; i < 10; ++i)
5183*67e74705SXin Li ++a;
5184*67e74705SXin Li }
5185*67e74705SXin Li #pragma omp for
5186*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5187*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
5188*67e74705SXin Li for (int j = 0; j < 10; ++j)
5189*67e74705SXin Li ;
5190*67e74705SXin Li }
5191*67e74705SXin Li #pragma omp for
5192*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5193*67e74705SXin Li #pragma omp target update to(a)
5194*67e74705SXin Li ++a;
5195*67e74705SXin Li }
5196*67e74705SXin Li #pragma omp for
5197*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5198*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
5199*67e74705SXin Li for (int j = 0; j < 10; ++j)
5200*67e74705SXin Li ;
5201*67e74705SXin Li }
5202*67e74705SXin Li #pragma omp for
5203*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5204*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
5205*67e74705SXin Li for (int j = 0; j < 10; ++j)
5206*67e74705SXin Li ;
5207*67e74705SXin Li }
5208*67e74705SXin Li #pragma omp for
5209*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5210*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
5211*67e74705SXin Li for (int j = 0; j < 10; ++j)
5212*67e74705SXin Li ;
5213*67e74705SXin Li }
5214*67e74705SXin Li
5215*67e74705SXin Li // FOR SIMD DIRECTIVE
5216*67e74705SXin Li #pragma omp for simd
5217*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5218*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5219*67e74705SXin Li for (int i = 0; i < 10; ++i)
5220*67e74705SXin Li ;
5221*67e74705SXin Li }
5222*67e74705SXin Li #pragma omp for simd
5223*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5224*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
5225*67e74705SXin Li for (int i = 0; i < 10; ++i)
5226*67e74705SXin Li ;
5227*67e74705SXin Li }
5228*67e74705SXin Li #pragma omp for simd
5229*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5230*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5231*67e74705SXin Li for (int i = 0; i < 10; ++i)
5232*67e74705SXin Li ;
5233*67e74705SXin Li }
5234*67e74705SXin Li #pragma omp for simd
5235*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5236*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5237*67e74705SXin Li for (int i = 0; i < 10; ++i)
5238*67e74705SXin Li ;
5239*67e74705SXin Li }
5240*67e74705SXin Li #pragma omp for simd
5241*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5242*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5243*67e74705SXin Li {
5244*67e74705SXin Li bar();
5245*67e74705SXin Li }
5246*67e74705SXin Li }
5247*67e74705SXin Li #pragma omp for simd
5248*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5249*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5250*67e74705SXin Li {
5251*67e74705SXin Li bar();
5252*67e74705SXin Li }
5253*67e74705SXin Li }
5254*67e74705SXin Li #pragma omp for simd
5255*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5256*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5257*67e74705SXin Li bar();
5258*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5259*67e74705SXin Li bar();
5260*67e74705SXin Li }
5261*67e74705SXin Li #pragma omp for simd
5262*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5263*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5264*67e74705SXin Li bar();
5265*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5266*67e74705SXin Li bar();
5267*67e74705SXin Li }
5268*67e74705SXin Li #pragma omp for simd
5269*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5270*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5271*67e74705SXin Li for (int i = 0; i < 10; ++i)
5272*67e74705SXin Li ;
5273*67e74705SXin Li }
5274*67e74705SXin Li #pragma omp for simd
5275*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5276*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5277*67e74705SXin Li for (int i = 0; i < 10; ++i)
5278*67e74705SXin Li ;
5279*67e74705SXin Li }
5280*67e74705SXin Li #pragma omp for simd
5281*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5282*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5283*67e74705SXin Li {
5284*67e74705SXin Li bar();
5285*67e74705SXin Li }
5286*67e74705SXin Li }
5287*67e74705SXin Li #pragma omp for simd
5288*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5289*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5290*67e74705SXin Li {
5291*67e74705SXin Li bar();
5292*67e74705SXin Li }
5293*67e74705SXin Li }
5294*67e74705SXin Li #pragma omp for simd
5295*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5296*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5297*67e74705SXin Li bar();
5298*67e74705SXin Li }
5299*67e74705SXin Li #pragma omp for simd
5300*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5301*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5302*67e74705SXin Li bar();
5303*67e74705SXin Li }
5304*67e74705SXin Li #pragma omp for simd
5305*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5306*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5307*67e74705SXin Li bar();
5308*67e74705SXin Li }
5309*67e74705SXin Li #pragma omp for simd
5310*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5311*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5312*67e74705SXin Li bar();
5313*67e74705SXin Li }
5314*67e74705SXin Li #pragma omp for simd
5315*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5316*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5317*67e74705SXin Li bar();
5318*67e74705SXin Li }
5319*67e74705SXin Li #pragma omp for simd
5320*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5321*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5322*67e74705SXin Li ++a;
5323*67e74705SXin Li }
5324*67e74705SXin Li #pragma omp for simd
5325*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5326*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5327*67e74705SXin Li ++a;
5328*67e74705SXin Li }
5329*67e74705SXin Li #pragma omp for simd
5330*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5331*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5332*67e74705SXin Li ++a;
5333*67e74705SXin Li }
5334*67e74705SXin Li #pragma omp for simd
5335*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5336*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5337*67e74705SXin Li for (int i = 0; i < 10; ++i)
5338*67e74705SXin Li ;
5339*67e74705SXin Li }
5340*67e74705SXin Li #pragma omp for simd
5341*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5342*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5343*67e74705SXin Li ++a;
5344*67e74705SXin Li }
5345*67e74705SXin Li #pragma omp for simd
5346*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5347*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5348*67e74705SXin Li ++a;
5349*67e74705SXin Li }
5350*67e74705SXin Li #pragma omp for simd
5351*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5352*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5353*67e74705SXin Li ++a;
5354*67e74705SXin Li }
5355*67e74705SXin Li #pragma omp for simd
5356*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5357*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5358*67e74705SXin Li for (int i = 0; i < 10; ++i)
5359*67e74705SXin Li ++a;
5360*67e74705SXin Li }
5361*67e74705SXin Li #pragma omp for simd
5362*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5363*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5364*67e74705SXin Li for (int j = 0; j < 10; ++j)
5365*67e74705SXin Li ;
5366*67e74705SXin Li }
5367*67e74705SXin Li #pragma omp for simd
5368*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5369*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5370*67e74705SXin Li ++a;
5371*67e74705SXin Li }
5372*67e74705SXin Li #pragma omp for simd
5373*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5374*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5375*67e74705SXin Li for (int j = 0; j < 10; ++j)
5376*67e74705SXin Li ;
5377*67e74705SXin Li }
5378*67e74705SXin Li #pragma omp for simd
5379*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5380*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5381*67e74705SXin Li for (int j = 0; j < 10; ++j)
5382*67e74705SXin Li ;
5383*67e74705SXin Li }
5384*67e74705SXin Li #pragma omp for simd
5385*67e74705SXin Li for (int i = 0; i < 10; ++i) {
5386*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
5387*67e74705SXin Li for (int j = 0; j < 10; ++j)
5388*67e74705SXin Li ;
5389*67e74705SXin Li }
5390*67e74705SXin Li
5391*67e74705SXin Li // SECTIONS DIRECTIVE
5392*67e74705SXin Li #pragma omp sections
5393*67e74705SXin Li {
5394*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
5395*67e74705SXin Li for (int i = 0; i < 10; ++i)
5396*67e74705SXin Li ;
5397*67e74705SXin Li }
5398*67e74705SXin Li #pragma omp sections
5399*67e74705SXin Li {
5400*67e74705SXin Li #pragma omp simd
5401*67e74705SXin Li for (int i = 0; i < 10; ++i)
5402*67e74705SXin Li ;
5403*67e74705SXin Li }
5404*67e74705SXin Li #pragma omp sections
5405*67e74705SXin Li {
5406*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
5407*67e74705SXin Li for (int i = 0; i < 10; ++i)
5408*67e74705SXin Li ;
5409*67e74705SXin Li }
5410*67e74705SXin Li #pragma omp sections
5411*67e74705SXin Li {
5412*67e74705SXin Li #pragma omp parallel
5413*67e74705SXin Li for (int i = 0; i < 10; ++i)
5414*67e74705SXin Li ;
5415*67e74705SXin Li }
5416*67e74705SXin Li #pragma omp sections
5417*67e74705SXin Li {
5418*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
5419*67e74705SXin Li {
5420*67e74705SXin Li bar();
5421*67e74705SXin Li }
5422*67e74705SXin Li }
5423*67e74705SXin Li #pragma omp sections
5424*67e74705SXin Li {
5425*67e74705SXin Li #pragma omp section
5426*67e74705SXin Li {
5427*67e74705SXin Li bar();
5428*67e74705SXin Li }
5429*67e74705SXin Li }
5430*67e74705SXin Li #pragma omp sections
5431*67e74705SXin Li {
5432*67e74705SXin Li #pragma omp critical
5433*67e74705SXin Li bar();
5434*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
5435*67e74705SXin Li bar();
5436*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
5437*67e74705SXin Li bar();
5438*67e74705SXin Li }
5439*67e74705SXin Li #pragma omp sections
5440*67e74705SXin Li {
5441*67e74705SXin Li #pragma omp parallel
5442*67e74705SXin Li {
5443*67e74705SXin Li #pragma omp single // OK
5444*67e74705SXin Li {
5445*67e74705SXin Li bar();
5446*67e74705SXin Li }
5447*67e74705SXin Li #pragma omp for // OK
5448*67e74705SXin Li for (int i = 0; i < 10; ++i)
5449*67e74705SXin Li ;
5450*67e74705SXin Li #pragma omp for simd // OK
5451*67e74705SXin Li for (int i = 0; i < 10; ++i)
5452*67e74705SXin Li ;
5453*67e74705SXin Li #pragma omp sections // OK
5454*67e74705SXin Li {
5455*67e74705SXin Li bar();
5456*67e74705SXin Li }
5457*67e74705SXin Li }
5458*67e74705SXin Li }
5459*67e74705SXin Li #pragma omp sections
5460*67e74705SXin Li {
5461*67e74705SXin Li #pragma omp parallel for
5462*67e74705SXin Li for (int i = 0; i < 10; ++i)
5463*67e74705SXin Li ;
5464*67e74705SXin Li }
5465*67e74705SXin Li #pragma omp sections
5466*67e74705SXin Li {
5467*67e74705SXin Li #pragma omp parallel for simd
5468*67e74705SXin Li for (int i = 0; i < 10; ++i)
5469*67e74705SXin Li ;
5470*67e74705SXin Li }
5471*67e74705SXin Li #pragma omp sections
5472*67e74705SXin Li {
5473*67e74705SXin Li #pragma omp parallel sections
5474*67e74705SXin Li {
5475*67e74705SXin Li bar();
5476*67e74705SXin Li }
5477*67e74705SXin Li }
5478*67e74705SXin Li #pragma omp sections
5479*67e74705SXin Li {
5480*67e74705SXin Li #pragma omp task
5481*67e74705SXin Li {
5482*67e74705SXin Li bar();
5483*67e74705SXin Li }
5484*67e74705SXin Li }
5485*67e74705SXin Li #pragma omp sections
5486*67e74705SXin Li {
5487*67e74705SXin Li #pragma omp taskyield
5488*67e74705SXin Li }
5489*67e74705SXin Li #pragma omp sections
5490*67e74705SXin Li {
5491*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'sections' region}}
5492*67e74705SXin Li bar();
5493*67e74705SXin Li }
5494*67e74705SXin Li #pragma omp sections
5495*67e74705SXin Li {
5496*67e74705SXin Li #pragma omp taskwait
5497*67e74705SXin Li }
5498*67e74705SXin Li #pragma omp sections
5499*67e74705SXin Li {
5500*67e74705SXin Li #pragma omp flush
5501*67e74705SXin Li }
5502*67e74705SXin Li #pragma omp sections
5503*67e74705SXin Li {
5504*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
5505*67e74705SXin Li bar();
5506*67e74705SXin Li }
5507*67e74705SXin Li #pragma omp sections
5508*67e74705SXin Li {
5509*67e74705SXin Li #pragma omp atomic
5510*67e74705SXin Li ++a;
5511*67e74705SXin Li }
5512*67e74705SXin Li #pragma omp sections
5513*67e74705SXin Li {
5514*67e74705SXin Li #pragma omp target
5515*67e74705SXin Li ++a;
5516*67e74705SXin Li }
5517*67e74705SXin Li #pragma omp sections
5518*67e74705SXin Li {
5519*67e74705SXin Li #pragma omp target parallel
5520*67e74705SXin Li ++a;
5521*67e74705SXin Li }
5522*67e74705SXin Li #pragma omp sections
5523*67e74705SXin Li {
5524*67e74705SXin Li #pragma omp target parallel for
5525*67e74705SXin Li for (int i = 0; i < 10; ++i)
5526*67e74705SXin Li ;
5527*67e74705SXin Li }
5528*67e74705SXin Li #pragma omp sections
5529*67e74705SXin Li {
5530*67e74705SXin Li #pragma omp target enter data map(to: a)
5531*67e74705SXin Li }
5532*67e74705SXin Li #pragma omp sections
5533*67e74705SXin Li {
5534*67e74705SXin Li #pragma omp target exit data map(from: a)
5535*67e74705SXin Li }
5536*67e74705SXin Li #pragma omp sections
5537*67e74705SXin Li {
5538*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
5539*67e74705SXin Li ++a;
5540*67e74705SXin Li }
5541*67e74705SXin Li #pragma omp sections
5542*67e74705SXin Li {
5543*67e74705SXin Li #pragma omp taskloop
5544*67e74705SXin Li for (int i = 0; i < 10; ++i)
5545*67e74705SXin Li ++a;
5546*67e74705SXin Li }
5547*67e74705SXin Li #pragma omp sections
5548*67e74705SXin Li {
5549*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
5550*67e74705SXin Li for (int i = 0; i < 10; ++i)
5551*67e74705SXin Li ;
5552*67e74705SXin Li }
5553*67e74705SXin Li #pragma omp sections
5554*67e74705SXin Li {
5555*67e74705SXin Li #pragma omp target update to(a)
5556*67e74705SXin Li }
5557*67e74705SXin Li #pragma omp sections
5558*67e74705SXin Li {
5559*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
5560*67e74705SXin Li for (int i = 0; i < 10; ++i)
5561*67e74705SXin Li ;
5562*67e74705SXin Li }
5563*67e74705SXin Li #pragma omp sections
5564*67e74705SXin Li {
5565*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
5566*67e74705SXin Li for (int i = 0; i < 10; ++i)
5567*67e74705SXin Li ;
5568*67e74705SXin Li }
5569*67e74705SXin Li #pragma omp sections
5570*67e74705SXin Li {
5571*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
5572*67e74705SXin Li for (int i = 0; i < 10; ++i)
5573*67e74705SXin Li ;
5574*67e74705SXin Li }
5575*67e74705SXin Li
5576*67e74705SXin Li // SECTION DIRECTIVE
5577*67e74705SXin Li #pragma omp section // expected-error {{orphaned 'omp section' directives are prohibited, it must be closely nested to a sections region}}
5578*67e74705SXin Li {
5579*67e74705SXin Li bar();
5580*67e74705SXin Li }
5581*67e74705SXin Li #pragma omp sections
5582*67e74705SXin Li {
5583*67e74705SXin Li #pragma omp section
5584*67e74705SXin Li {
5585*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
5586*67e74705SXin Li for (int i = 0; i < 10; ++i)
5587*67e74705SXin Li ;
5588*67e74705SXin Li }
5589*67e74705SXin Li }
5590*67e74705SXin Li #pragma omp sections
5591*67e74705SXin Li {
5592*67e74705SXin Li #pragma omp section
5593*67e74705SXin Li {
5594*67e74705SXin Li #pragma omp simd
5595*67e74705SXin Li for (int i = 0; i < 10; ++i)
5596*67e74705SXin Li ;
5597*67e74705SXin Li }
5598*67e74705SXin Li }
5599*67e74705SXin Li #pragma omp sections
5600*67e74705SXin Li {
5601*67e74705SXin Li #pragma omp section
5602*67e74705SXin Li {
5603*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
5604*67e74705SXin Li for (int i = 0; i < 10; ++i)
5605*67e74705SXin Li ;
5606*67e74705SXin Li }
5607*67e74705SXin Li }
5608*67e74705SXin Li #pragma omp sections
5609*67e74705SXin Li {
5610*67e74705SXin Li #pragma omp section
5611*67e74705SXin Li {
5612*67e74705SXin Li #pragma omp parallel
5613*67e74705SXin Li for (int i = 0; i < 10; ++i)
5614*67e74705SXin Li ;
5615*67e74705SXin Li }
5616*67e74705SXin Li }
5617*67e74705SXin Li #pragma omp sections
5618*67e74705SXin Li {
5619*67e74705SXin Li #pragma omp section
5620*67e74705SXin Li {
5621*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
5622*67e74705SXin Li {
5623*67e74705SXin Li bar();
5624*67e74705SXin Li }
5625*67e74705SXin Li }
5626*67e74705SXin Li }
5627*67e74705SXin Li #pragma omp sections
5628*67e74705SXin Li {
5629*67e74705SXin Li #pragma omp section
5630*67e74705SXin Li {
5631*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a section region}}
5632*67e74705SXin Li {
5633*67e74705SXin Li bar();
5634*67e74705SXin Li }
5635*67e74705SXin Li }
5636*67e74705SXin Li }
5637*67e74705SXin Li #pragma omp sections
5638*67e74705SXin Li {
5639*67e74705SXin Li #pragma omp section
5640*67e74705SXin Li {
5641*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
5642*67e74705SXin Li bar();
5643*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
5644*67e74705SXin Li bar();
5645*67e74705SXin Li #pragma omp critical
5646*67e74705SXin Li bar();
5647*67e74705SXin Li }
5648*67e74705SXin Li }
5649*67e74705SXin Li #pragma omp sections
5650*67e74705SXin Li {
5651*67e74705SXin Li #pragma omp section
5652*67e74705SXin Li {
5653*67e74705SXin Li #pragma omp parallel
5654*67e74705SXin Li {
5655*67e74705SXin Li #pragma omp single // OK
5656*67e74705SXin Li {
5657*67e74705SXin Li bar();
5658*67e74705SXin Li }
5659*67e74705SXin Li #pragma omp for // OK
5660*67e74705SXin Li for (int i = 0; i < 10; ++i)
5661*67e74705SXin Li ;
5662*67e74705SXin Li #pragma omp for simd // OK
5663*67e74705SXin Li for (int i = 0; i < 10; ++i)
5664*67e74705SXin Li ;
5665*67e74705SXin Li #pragma omp sections // OK
5666*67e74705SXin Li {
5667*67e74705SXin Li bar();
5668*67e74705SXin Li }
5669*67e74705SXin Li }
5670*67e74705SXin Li }
5671*67e74705SXin Li }
5672*67e74705SXin Li #pragma omp sections
5673*67e74705SXin Li {
5674*67e74705SXin Li #pragma omp section
5675*67e74705SXin Li {
5676*67e74705SXin Li #pragma omp parallel for
5677*67e74705SXin Li for (int i = 0; i < 10; ++i)
5678*67e74705SXin Li ;
5679*67e74705SXin Li }
5680*67e74705SXin Li }
5681*67e74705SXin Li #pragma omp sections
5682*67e74705SXin Li {
5683*67e74705SXin Li #pragma omp section
5684*67e74705SXin Li {
5685*67e74705SXin Li #pragma omp parallel for simd
5686*67e74705SXin Li for (int i = 0; i < 10; ++i)
5687*67e74705SXin Li ;
5688*67e74705SXin Li }
5689*67e74705SXin Li }
5690*67e74705SXin Li #pragma omp sections
5691*67e74705SXin Li {
5692*67e74705SXin Li #pragma omp section
5693*67e74705SXin Li {
5694*67e74705SXin Li #pragma omp parallel sections
5695*67e74705SXin Li {
5696*67e74705SXin Li bar();
5697*67e74705SXin Li }
5698*67e74705SXin Li }
5699*67e74705SXin Li }
5700*67e74705SXin Li #pragma omp sections
5701*67e74705SXin Li {
5702*67e74705SXin Li #pragma omp section
5703*67e74705SXin Li {
5704*67e74705SXin Li #pragma omp task
5705*67e74705SXin Li {
5706*67e74705SXin Li bar();
5707*67e74705SXin Li }
5708*67e74705SXin Li }
5709*67e74705SXin Li }
5710*67e74705SXin Li #pragma omp sections
5711*67e74705SXin Li {
5712*67e74705SXin Li #pragma omp section
5713*67e74705SXin Li {
5714*67e74705SXin Li #pragma omp taskyield
5715*67e74705SXin Li bar();
5716*67e74705SXin Li }
5717*67e74705SXin Li }
5718*67e74705SXin Li #pragma omp sections
5719*67e74705SXin Li {
5720*67e74705SXin Li #pragma omp section
5721*67e74705SXin Li {
5722*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'section' region}}
5723*67e74705SXin Li bar();
5724*67e74705SXin Li }
5725*67e74705SXin Li }
5726*67e74705SXin Li #pragma omp sections
5727*67e74705SXin Li {
5728*67e74705SXin Li #pragma omp section
5729*67e74705SXin Li {
5730*67e74705SXin Li #pragma omp taskwait
5731*67e74705SXin Li bar();
5732*67e74705SXin Li }
5733*67e74705SXin Li }
5734*67e74705SXin Li #pragma omp sections
5735*67e74705SXin Li {
5736*67e74705SXin Li #pragma omp section
5737*67e74705SXin Li {
5738*67e74705SXin Li #pragma omp flush
5739*67e74705SXin Li bar();
5740*67e74705SXin Li }
5741*67e74705SXin Li }
5742*67e74705SXin Li #pragma omp sections
5743*67e74705SXin Li {
5744*67e74705SXin Li #pragma omp section
5745*67e74705SXin Li {
5746*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
5747*67e74705SXin Li bar();
5748*67e74705SXin Li }
5749*67e74705SXin Li }
5750*67e74705SXin Li #pragma omp sections
5751*67e74705SXin Li {
5752*67e74705SXin Li #pragma omp section
5753*67e74705SXin Li {
5754*67e74705SXin Li #pragma omp atomic
5755*67e74705SXin Li ++a;
5756*67e74705SXin Li }
5757*67e74705SXin Li }
5758*67e74705SXin Li #pragma omp sections
5759*67e74705SXin Li {
5760*67e74705SXin Li #pragma omp section
5761*67e74705SXin Li {
5762*67e74705SXin Li #pragma omp target
5763*67e74705SXin Li ++a;
5764*67e74705SXin Li }
5765*67e74705SXin Li }
5766*67e74705SXin Li #pragma omp sections
5767*67e74705SXin Li {
5768*67e74705SXin Li #pragma omp section
5769*67e74705SXin Li {
5770*67e74705SXin Li #pragma omp target parallel
5771*67e74705SXin Li ++a;
5772*67e74705SXin Li }
5773*67e74705SXin Li }
5774*67e74705SXin Li #pragma omp sections
5775*67e74705SXin Li {
5776*67e74705SXin Li #pragma omp section
5777*67e74705SXin Li {
5778*67e74705SXin Li #pragma omp target parallel for
5779*67e74705SXin Li for (int i = 0; i < 10; ++i)
5780*67e74705SXin Li ;
5781*67e74705SXin Li }
5782*67e74705SXin Li }
5783*67e74705SXin Li #pragma omp sections
5784*67e74705SXin Li {
5785*67e74705SXin Li #pragma omp section
5786*67e74705SXin Li {
5787*67e74705SXin Li #pragma omp target enter data map(to: a)
5788*67e74705SXin Li ++a;
5789*67e74705SXin Li }
5790*67e74705SXin Li }
5791*67e74705SXin Li #pragma omp sections
5792*67e74705SXin Li {
5793*67e74705SXin Li #pragma omp section
5794*67e74705SXin Li {
5795*67e74705SXin Li #pragma omp target exit data map(from: a)
5796*67e74705SXin Li ++a;
5797*67e74705SXin Li }
5798*67e74705SXin Li }
5799*67e74705SXin Li #pragma omp sections
5800*67e74705SXin Li {
5801*67e74705SXin Li #pragma omp section
5802*67e74705SXin Li {
5803*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
5804*67e74705SXin Li ++a;
5805*67e74705SXin Li }
5806*67e74705SXin Li }
5807*67e74705SXin Li #pragma omp sections
5808*67e74705SXin Li {
5809*67e74705SXin Li #pragma omp section
5810*67e74705SXin Li {
5811*67e74705SXin Li #pragma omp taskloop
5812*67e74705SXin Li for (int i = 0; i < 10; ++i)
5813*67e74705SXin Li ++a;
5814*67e74705SXin Li }
5815*67e74705SXin Li }
5816*67e74705SXin Li #pragma omp sections
5817*67e74705SXin Li {
5818*67e74705SXin Li #pragma omp section
5819*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
5820*67e74705SXin Li for (int i = 0; i < 10; ++i)
5821*67e74705SXin Li ;
5822*67e74705SXin Li }
5823*67e74705SXin Li #pragma omp sections
5824*67e74705SXin Li {
5825*67e74705SXin Li #pragma omp section
5826*67e74705SXin Li {
5827*67e74705SXin Li #pragma omp target update to(a)
5828*67e74705SXin Li a++;
5829*67e74705SXin Li }
5830*67e74705SXin Li }
5831*67e74705SXin Li #pragma omp sections
5832*67e74705SXin Li {
5833*67e74705SXin Li #pragma omp section
5834*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
5835*67e74705SXin Li for (int i = 0; i < 10; ++i)
5836*67e74705SXin Li ;
5837*67e74705SXin Li }
5838*67e74705SXin Li #pragma omp sections
5839*67e74705SXin Li {
5840*67e74705SXin Li #pragma omp section
5841*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
5842*67e74705SXin Li for (int i = 0; i < 10; ++i)
5843*67e74705SXin Li ;
5844*67e74705SXin Li }
5845*67e74705SXin Li #pragma omp sections
5846*67e74705SXin Li {
5847*67e74705SXin Li #pragma omp section
5848*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
5849*67e74705SXin Li for (int i = 0; i < 10; ++i)
5850*67e74705SXin Li ;
5851*67e74705SXin Li }
5852*67e74705SXin Li
5853*67e74705SXin Li // SINGLE DIRECTIVE
5854*67e74705SXin Li #pragma omp single
5855*67e74705SXin Li {
5856*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
5857*67e74705SXin Li for (int i = 0; i < 10; ++i)
5858*67e74705SXin Li ;
5859*67e74705SXin Li }
5860*67e74705SXin Li #pragma omp single
5861*67e74705SXin Li {
5862*67e74705SXin Li #pragma omp simd
5863*67e74705SXin Li for (int i = 0; i < 10; ++i)
5864*67e74705SXin Li ;
5865*67e74705SXin Li }
5866*67e74705SXin Li #pragma omp single
5867*67e74705SXin Li {
5868*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
5869*67e74705SXin Li for (int i = 0; i < 10; ++i)
5870*67e74705SXin Li ;
5871*67e74705SXin Li }
5872*67e74705SXin Li #pragma omp single
5873*67e74705SXin Li {
5874*67e74705SXin Li #pragma omp parallel
5875*67e74705SXin Li for (int i = 0; i < 10; ++i)
5876*67e74705SXin Li ;
5877*67e74705SXin Li }
5878*67e74705SXin Li #pragma omp single
5879*67e74705SXin Li {
5880*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
5881*67e74705SXin Li {
5882*67e74705SXin Li bar();
5883*67e74705SXin Li }
5884*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
5885*67e74705SXin Li bar();
5886*67e74705SXin Li #pragma omp critical
5887*67e74705SXin Li bar();
5888*67e74705SXin Li }
5889*67e74705SXin Li #pragma omp single
5890*67e74705SXin Li {
5891*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
5892*67e74705SXin Li {
5893*67e74705SXin Li bar();
5894*67e74705SXin Li }
5895*67e74705SXin Li }
5896*67e74705SXin Li #pragma omp single
5897*67e74705SXin Li {
5898*67e74705SXin Li #pragma omp parallel
5899*67e74705SXin Li {
5900*67e74705SXin Li #pragma omp single // OK
5901*67e74705SXin Li {
5902*67e74705SXin Li bar();
5903*67e74705SXin Li }
5904*67e74705SXin Li #pragma omp for // OK
5905*67e74705SXin Li for (int i = 0; i < 10; ++i)
5906*67e74705SXin Li ;
5907*67e74705SXin Li #pragma omp for simd // OK
5908*67e74705SXin Li for (int i = 0; i < 10; ++i)
5909*67e74705SXin Li ;
5910*67e74705SXin Li #pragma omp sections // OK
5911*67e74705SXin Li {
5912*67e74705SXin Li bar();
5913*67e74705SXin Li }
5914*67e74705SXin Li }
5915*67e74705SXin Li }
5916*67e74705SXin Li #pragma omp single
5917*67e74705SXin Li {
5918*67e74705SXin Li #pragma omp parallel for
5919*67e74705SXin Li for (int i = 0; i < 10; ++i)
5920*67e74705SXin Li ;
5921*67e74705SXin Li }
5922*67e74705SXin Li #pragma omp single
5923*67e74705SXin Li {
5924*67e74705SXin Li #pragma omp parallel for simd
5925*67e74705SXin Li for (int i = 0; i < 10; ++i)
5926*67e74705SXin Li ;
5927*67e74705SXin Li }
5928*67e74705SXin Li #pragma omp single
5929*67e74705SXin Li {
5930*67e74705SXin Li #pragma omp parallel sections
5931*67e74705SXin Li {
5932*67e74705SXin Li bar();
5933*67e74705SXin Li }
5934*67e74705SXin Li }
5935*67e74705SXin Li #pragma omp single
5936*67e74705SXin Li {
5937*67e74705SXin Li #pragma omp task
5938*67e74705SXin Li {
5939*67e74705SXin Li bar();
5940*67e74705SXin Li }
5941*67e74705SXin Li }
5942*67e74705SXin Li #pragma omp single
5943*67e74705SXin Li {
5944*67e74705SXin Li #pragma omp taskyield
5945*67e74705SXin Li bar();
5946*67e74705SXin Li }
5947*67e74705SXin Li #pragma omp single
5948*67e74705SXin Li {
5949*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'single' region}}
5950*67e74705SXin Li bar();
5951*67e74705SXin Li }
5952*67e74705SXin Li #pragma omp single
5953*67e74705SXin Li {
5954*67e74705SXin Li #pragma omp taskwait
5955*67e74705SXin Li bar();
5956*67e74705SXin Li }
5957*67e74705SXin Li #pragma omp single
5958*67e74705SXin Li {
5959*67e74705SXin Li #pragma omp flush
5960*67e74705SXin Li bar();
5961*67e74705SXin Li }
5962*67e74705SXin Li #pragma omp single
5963*67e74705SXin Li {
5964*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
5965*67e74705SXin Li bar();
5966*67e74705SXin Li }
5967*67e74705SXin Li #pragma omp single
5968*67e74705SXin Li {
5969*67e74705SXin Li #pragma omp atomic
5970*67e74705SXin Li ++a;
5971*67e74705SXin Li }
5972*67e74705SXin Li #pragma omp single
5973*67e74705SXin Li {
5974*67e74705SXin Li #pragma omp target
5975*67e74705SXin Li ++a;
5976*67e74705SXin Li }
5977*67e74705SXin Li #pragma omp single
5978*67e74705SXin Li {
5979*67e74705SXin Li #pragma omp target parallel
5980*67e74705SXin Li ++a;
5981*67e74705SXin Li }
5982*67e74705SXin Li #pragma omp single
5983*67e74705SXin Li {
5984*67e74705SXin Li #pragma omp target parallel for
5985*67e74705SXin Li for (int i = 0; i < 10; ++i)
5986*67e74705SXin Li ;
5987*67e74705SXin Li }
5988*67e74705SXin Li #pragma omp single
5989*67e74705SXin Li {
5990*67e74705SXin Li #pragma omp target enter data map(to: a)
5991*67e74705SXin Li ++a;
5992*67e74705SXin Li }
5993*67e74705SXin Li #pragma omp single
5994*67e74705SXin Li {
5995*67e74705SXin Li #pragma omp target exit data map(from: a)
5996*67e74705SXin Li ++a;
5997*67e74705SXin Li }
5998*67e74705SXin Li #pragma omp single
5999*67e74705SXin Li {
6000*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6001*67e74705SXin Li ++a;
6002*67e74705SXin Li }
6003*67e74705SXin Li #pragma omp single
6004*67e74705SXin Li {
6005*67e74705SXin Li #pragma omp taskloop
6006*67e74705SXin Li for (int i = 0; i < 10; ++i)
6007*67e74705SXin Li ++a;
6008*67e74705SXin Li }
6009*67e74705SXin Li #pragma omp single
6010*67e74705SXin Li {
6011*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6012*67e74705SXin Li for (int i = 0; i < 10; ++i)
6013*67e74705SXin Li ;
6014*67e74705SXin Li }
6015*67e74705SXin Li #pragma omp single
6016*67e74705SXin Li {
6017*67e74705SXin Li #pragma omp target update to(a)
6018*67e74705SXin Li a++;
6019*67e74705SXin Li }
6020*67e74705SXin Li #pragma omp single
6021*67e74705SXin Li {
6022*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
6023*67e74705SXin Li for (int i = 0; i < 10; ++i)
6024*67e74705SXin Li ;
6025*67e74705SXin Li }
6026*67e74705SXin Li #pragma omp single
6027*67e74705SXin Li {
6028*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6029*67e74705SXin Li for (int i = 0; i < 10; ++i)
6030*67e74705SXin Li ;
6031*67e74705SXin Li }
6032*67e74705SXin Li #pragma omp single
6033*67e74705SXin Li {
6034*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'single' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6035*67e74705SXin Li for (int i = 0; i < 10; ++i)
6036*67e74705SXin Li ;
6037*67e74705SXin Li }
6038*67e74705SXin Li
6039*67e74705SXin Li // MASTER DIRECTIVE
6040*67e74705SXin Li #pragma omp master
6041*67e74705SXin Li {
6042*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
6043*67e74705SXin Li for (int i = 0; i < 10; ++i)
6044*67e74705SXin Li ;
6045*67e74705SXin Li }
6046*67e74705SXin Li #pragma omp master
6047*67e74705SXin Li {
6048*67e74705SXin Li #pragma omp simd
6049*67e74705SXin Li for (int i = 0; i < 10; ++i)
6050*67e74705SXin Li ;
6051*67e74705SXin Li }
6052*67e74705SXin Li #pragma omp master
6053*67e74705SXin Li {
6054*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
6055*67e74705SXin Li for (int i = 0; i < 10; ++i)
6056*67e74705SXin Li ;
6057*67e74705SXin Li }
6058*67e74705SXin Li #pragma omp master
6059*67e74705SXin Li {
6060*67e74705SXin Li #pragma omp parallel
6061*67e74705SXin Li for (int i = 0; i < 10; ++i)
6062*67e74705SXin Li ;
6063*67e74705SXin Li }
6064*67e74705SXin Li #pragma omp master
6065*67e74705SXin Li {
6066*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
6067*67e74705SXin Li {
6068*67e74705SXin Li bar();
6069*67e74705SXin Li }
6070*67e74705SXin Li }
6071*67e74705SXin Li #pragma omp master
6072*67e74705SXin Li {
6073*67e74705SXin Li #pragma omp master // OK, though second 'master' is redundant
6074*67e74705SXin Li {
6075*67e74705SXin Li bar();
6076*67e74705SXin Li }
6077*67e74705SXin Li }
6078*67e74705SXin Li #pragma omp master
6079*67e74705SXin Li {
6080*67e74705SXin Li #pragma omp critical
6081*67e74705SXin Li {
6082*67e74705SXin Li bar();
6083*67e74705SXin Li }
6084*67e74705SXin Li }
6085*67e74705SXin Li #pragma omp master
6086*67e74705SXin Li {
6087*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
6088*67e74705SXin Li {
6089*67e74705SXin Li bar();
6090*67e74705SXin Li }
6091*67e74705SXin Li }
6092*67e74705SXin Li #pragma omp master
6093*67e74705SXin Li {
6094*67e74705SXin Li #pragma omp parallel
6095*67e74705SXin Li {
6096*67e74705SXin Li #pragma omp master // OK
6097*67e74705SXin Li {
6098*67e74705SXin Li bar();
6099*67e74705SXin Li }
6100*67e74705SXin Li #pragma omp for // OK
6101*67e74705SXin Li for (int i = 0; i < 10; ++i)
6102*67e74705SXin Li ;
6103*67e74705SXin Li #pragma omp for simd // OK
6104*67e74705SXin Li for (int i = 0; i < 10; ++i)
6105*67e74705SXin Li ;
6106*67e74705SXin Li #pragma omp sections // OK
6107*67e74705SXin Li {
6108*67e74705SXin Li bar();
6109*67e74705SXin Li }
6110*67e74705SXin Li }
6111*67e74705SXin Li }
6112*67e74705SXin Li #pragma omp master
6113*67e74705SXin Li {
6114*67e74705SXin Li #pragma omp parallel for
6115*67e74705SXin Li for (int i = 0; i < 10; ++i)
6116*67e74705SXin Li ;
6117*67e74705SXin Li }
6118*67e74705SXin Li #pragma omp master
6119*67e74705SXin Li {
6120*67e74705SXin Li #pragma omp parallel for simd
6121*67e74705SXin Li for (int i = 0; i < 10; ++i)
6122*67e74705SXin Li ;
6123*67e74705SXin Li }
6124*67e74705SXin Li #pragma omp master
6125*67e74705SXin Li {
6126*67e74705SXin Li #pragma omp parallel sections
6127*67e74705SXin Li {
6128*67e74705SXin Li bar();
6129*67e74705SXin Li }
6130*67e74705SXin Li }
6131*67e74705SXin Li #pragma omp master
6132*67e74705SXin Li {
6133*67e74705SXin Li #pragma omp task
6134*67e74705SXin Li {
6135*67e74705SXin Li bar();
6136*67e74705SXin Li }
6137*67e74705SXin Li }
6138*67e74705SXin Li #pragma omp master
6139*67e74705SXin Li {
6140*67e74705SXin Li #pragma omp taskyield
6141*67e74705SXin Li bar();
6142*67e74705SXin Li }
6143*67e74705SXin Li #pragma omp master
6144*67e74705SXin Li {
6145*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'master' region}}
6146*67e74705SXin Li bar();
6147*67e74705SXin Li }
6148*67e74705SXin Li #pragma omp master
6149*67e74705SXin Li {
6150*67e74705SXin Li #pragma omp taskwait
6151*67e74705SXin Li bar();
6152*67e74705SXin Li }
6153*67e74705SXin Li #pragma omp master
6154*67e74705SXin Li {
6155*67e74705SXin Li #pragma omp flush
6156*67e74705SXin Li bar();
6157*67e74705SXin Li }
6158*67e74705SXin Li #pragma omp master
6159*67e74705SXin Li {
6160*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6161*67e74705SXin Li bar();
6162*67e74705SXin Li }
6163*67e74705SXin Li #pragma omp master
6164*67e74705SXin Li {
6165*67e74705SXin Li #pragma omp atomic
6166*67e74705SXin Li ++a;
6167*67e74705SXin Li }
6168*67e74705SXin Li #pragma omp master
6169*67e74705SXin Li {
6170*67e74705SXin Li #pragma omp target
6171*67e74705SXin Li ++a;
6172*67e74705SXin Li }
6173*67e74705SXin Li #pragma omp master
6174*67e74705SXin Li {
6175*67e74705SXin Li #pragma omp target parallel
6176*67e74705SXin Li ++a;
6177*67e74705SXin Li }
6178*67e74705SXin Li #pragma omp master
6179*67e74705SXin Li {
6180*67e74705SXin Li #pragma omp target parallel for
6181*67e74705SXin Li for (int i = 0; i < 10; ++i)
6182*67e74705SXin Li ;
6183*67e74705SXin Li }
6184*67e74705SXin Li #pragma omp master
6185*67e74705SXin Li {
6186*67e74705SXin Li #pragma omp target enter data map(to: a)
6187*67e74705SXin Li ++a;
6188*67e74705SXin Li }
6189*67e74705SXin Li #pragma omp master
6190*67e74705SXin Li {
6191*67e74705SXin Li #pragma omp target exit data map(from: a)
6192*67e74705SXin Li ++a;
6193*67e74705SXin Li }
6194*67e74705SXin Li #pragma omp master
6195*67e74705SXin Li {
6196*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6197*67e74705SXin Li ++a;
6198*67e74705SXin Li }
6199*67e74705SXin Li #pragma omp master
6200*67e74705SXin Li {
6201*67e74705SXin Li #pragma omp taskloop
6202*67e74705SXin Li for (int i = 0; i < 10; ++i)
6203*67e74705SXin Li ++a;
6204*67e74705SXin Li }
6205*67e74705SXin Li #pragma omp master
6206*67e74705SXin Li {
6207*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6208*67e74705SXin Li for (int i = 0; i < 10; ++i)
6209*67e74705SXin Li ;
6210*67e74705SXin Li }
6211*67e74705SXin Li #pragma omp master
6212*67e74705SXin Li {
6213*67e74705SXin Li #pragma omp target update to(a)
6214*67e74705SXin Li ++a;
6215*67e74705SXin Li }
6216*67e74705SXin Li #pragma omp master
6217*67e74705SXin Li {
6218*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
6219*67e74705SXin Li for (int i = 0; i < 10; ++i)
6220*67e74705SXin Li ;
6221*67e74705SXin Li }
6222*67e74705SXin Li #pragma omp master
6223*67e74705SXin Li {
6224*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6225*67e74705SXin Li for (int i = 0; i < 10; ++i)
6226*67e74705SXin Li ;
6227*67e74705SXin Li }
6228*67e74705SXin Li #pragma omp master
6229*67e74705SXin Li {
6230*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'master' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6231*67e74705SXin Li for (int i = 0; i < 10; ++i)
6232*67e74705SXin Li ;
6233*67e74705SXin Li }
6234*67e74705SXin Li
6235*67e74705SXin Li // CRITICAL DIRECTIVE
6236*67e74705SXin Li #pragma omp critical
6237*67e74705SXin Li {
6238*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
6239*67e74705SXin Li for (int i = 0; i < 10; ++i)
6240*67e74705SXin Li ;
6241*67e74705SXin Li }
6242*67e74705SXin Li #pragma omp critical
6243*67e74705SXin Li {
6244*67e74705SXin Li #pragma omp simd
6245*67e74705SXin Li for (int i = 0; i < 10; ++i)
6246*67e74705SXin Li ;
6247*67e74705SXin Li }
6248*67e74705SXin Li #pragma omp critical
6249*67e74705SXin Li {
6250*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
6251*67e74705SXin Li for (int i = 0; i < 10; ++i)
6252*67e74705SXin Li ;
6253*67e74705SXin Li }
6254*67e74705SXin Li #pragma omp critical
6255*67e74705SXin Li {
6256*67e74705SXin Li #pragma omp parallel
6257*67e74705SXin Li for (int i = 0; i < 10; ++i)
6258*67e74705SXin Li ;
6259*67e74705SXin Li }
6260*67e74705SXin Li #pragma omp critical
6261*67e74705SXin Li {
6262*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
6263*67e74705SXin Li {
6264*67e74705SXin Li bar();
6265*67e74705SXin Li }
6266*67e74705SXin Li }
6267*67e74705SXin Li #pragma omp critical
6268*67e74705SXin Li {
6269*67e74705SXin Li #pragma omp master // OK, though second 'master' is redundant
6270*67e74705SXin Li {
6271*67e74705SXin Li bar();
6272*67e74705SXin Li }
6273*67e74705SXin Li }
6274*67e74705SXin Li #pragma omp critical
6275*67e74705SXin Li {
6276*67e74705SXin Li #pragma omp critical
6277*67e74705SXin Li {
6278*67e74705SXin Li bar();
6279*67e74705SXin Li }
6280*67e74705SXin Li }
6281*67e74705SXin Li #pragma omp critical
6282*67e74705SXin Li {
6283*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
6284*67e74705SXin Li {
6285*67e74705SXin Li bar();
6286*67e74705SXin Li }
6287*67e74705SXin Li }
6288*67e74705SXin Li #pragma omp critical
6289*67e74705SXin Li {
6290*67e74705SXin Li #pragma omp parallel
6291*67e74705SXin Li {
6292*67e74705SXin Li #pragma omp master // OK
6293*67e74705SXin Li {
6294*67e74705SXin Li bar();
6295*67e74705SXin Li }
6296*67e74705SXin Li #pragma omp for // OK
6297*67e74705SXin Li for (int i = 0; i < 10; ++i)
6298*67e74705SXin Li ;
6299*67e74705SXin Li #pragma omp for simd // OK
6300*67e74705SXin Li for (int i = 0; i < 10; ++i)
6301*67e74705SXin Li ;
6302*67e74705SXin Li #pragma omp sections // OK
6303*67e74705SXin Li {
6304*67e74705SXin Li bar();
6305*67e74705SXin Li }
6306*67e74705SXin Li }
6307*67e74705SXin Li }
6308*67e74705SXin Li #pragma omp critical
6309*67e74705SXin Li {
6310*67e74705SXin Li #pragma omp parallel for
6311*67e74705SXin Li for (int i = 0; i < 10; ++i)
6312*67e74705SXin Li ;
6313*67e74705SXin Li }
6314*67e74705SXin Li #pragma omp critical
6315*67e74705SXin Li {
6316*67e74705SXin Li #pragma omp parallel for simd
6317*67e74705SXin Li for (int i = 0; i < 10; ++i)
6318*67e74705SXin Li ;
6319*67e74705SXin Li }
6320*67e74705SXin Li #pragma omp critical
6321*67e74705SXin Li {
6322*67e74705SXin Li #pragma omp parallel sections
6323*67e74705SXin Li {
6324*67e74705SXin Li bar();
6325*67e74705SXin Li }
6326*67e74705SXin Li }
6327*67e74705SXin Li #pragma omp critical
6328*67e74705SXin Li {
6329*67e74705SXin Li #pragma omp task
6330*67e74705SXin Li {
6331*67e74705SXin Li bar();
6332*67e74705SXin Li }
6333*67e74705SXin Li }
6334*67e74705SXin Li #pragma omp critical
6335*67e74705SXin Li {
6336*67e74705SXin Li #pragma omp taskyield
6337*67e74705SXin Li bar();
6338*67e74705SXin Li }
6339*67e74705SXin Li #pragma omp critical
6340*67e74705SXin Li {
6341*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'critical' region}}
6342*67e74705SXin Li bar();
6343*67e74705SXin Li }
6344*67e74705SXin Li #pragma omp critical
6345*67e74705SXin Li {
6346*67e74705SXin Li #pragma omp taskwait
6347*67e74705SXin Li bar();
6348*67e74705SXin Li }
6349*67e74705SXin Li #pragma omp critical(Belka)
6350*67e74705SXin Li {
6351*67e74705SXin Li #pragma omp critical(Strelka)
6352*67e74705SXin Li bar();
6353*67e74705SXin Li }
6354*67e74705SXin Li #pragma omp critical(Tuzik) // expected-note {{previous 'critical' region starts here}}
6355*67e74705SXin Li {
6356*67e74705SXin Li #pragma omp critical(grelka) // expected-note {{previous 'critical' region starts here}}
6357*67e74705SXin Li {
6358*67e74705SXin Li #pragma omp critical(Tuzik) // expected-error {{cannot nest 'critical' regions having the same name 'Tuzik'}}
6359*67e74705SXin Li {
6360*67e74705SXin Li #pragma omp parallel
6361*67e74705SXin Li #pragma omp critical(grelka) // expected-error {{cannot nest 'critical' regions having the same name 'grelka'}}
6362*67e74705SXin Li {
6363*67e74705SXin Li bar();
6364*67e74705SXin Li }
6365*67e74705SXin Li }
6366*67e74705SXin Li }
6367*67e74705SXin Li }
6368*67e74705SXin Li #pragma omp critical
6369*67e74705SXin Li {
6370*67e74705SXin Li #pragma omp flush
6371*67e74705SXin Li bar();
6372*67e74705SXin Li }
6373*67e74705SXin Li #pragma omp critical
6374*67e74705SXin Li {
6375*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6376*67e74705SXin Li bar();
6377*67e74705SXin Li }
6378*67e74705SXin Li #pragma omp critical
6379*67e74705SXin Li {
6380*67e74705SXin Li #pragma omp atomic
6381*67e74705SXin Li ++a;
6382*67e74705SXin Li }
6383*67e74705SXin Li #pragma omp critical
6384*67e74705SXin Li {
6385*67e74705SXin Li #pragma omp target
6386*67e74705SXin Li ++a;
6387*67e74705SXin Li }
6388*67e74705SXin Li #pragma omp critical
6389*67e74705SXin Li {
6390*67e74705SXin Li #pragma omp target parallel
6391*67e74705SXin Li ++a;
6392*67e74705SXin Li }
6393*67e74705SXin Li #pragma omp critical
6394*67e74705SXin Li {
6395*67e74705SXin Li #pragma omp target parallel for
6396*67e74705SXin Li for (int i = 0; i < 10; ++i)
6397*67e74705SXin Li ;
6398*67e74705SXin Li }
6399*67e74705SXin Li #pragma omp critical
6400*67e74705SXin Li {
6401*67e74705SXin Li #pragma omp target enter data map(to: a)
6402*67e74705SXin Li ++a;
6403*67e74705SXin Li }
6404*67e74705SXin Li #pragma omp critical
6405*67e74705SXin Li {
6406*67e74705SXin Li #pragma omp target exit data map(from: a)
6407*67e74705SXin Li ++a;
6408*67e74705SXin Li }
6409*67e74705SXin Li #pragma omp critical
6410*67e74705SXin Li {
6411*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6412*67e74705SXin Li ++a;
6413*67e74705SXin Li }
6414*67e74705SXin Li #pragma omp critical
6415*67e74705SXin Li {
6416*67e74705SXin Li #pragma omp taskloop
6417*67e74705SXin Li for (int i = 0; i < 10; ++i)
6418*67e74705SXin Li ++a;
6419*67e74705SXin Li }
6420*67e74705SXin Li #pragma omp critical
6421*67e74705SXin Li {
6422*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6423*67e74705SXin Li for (int i = 0; i < 10; ++i)
6424*67e74705SXin Li ;
6425*67e74705SXin Li }
6426*67e74705SXin Li #pragma omp critical
6427*67e74705SXin Li {
6428*67e74705SXin Li #pragma omp target update to(a)
6429*67e74705SXin Li a++;
6430*67e74705SXin Li }
6431*67e74705SXin Li #pragma omp critical
6432*67e74705SXin Li {
6433*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
6434*67e74705SXin Li for (int i = 0; i < 10; ++i)
6435*67e74705SXin Li ;
6436*67e74705SXin Li }
6437*67e74705SXin Li #pragma omp critical
6438*67e74705SXin Li {
6439*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6440*67e74705SXin Li for (int i = 0; i < 10; ++i)
6441*67e74705SXin Li ;
6442*67e74705SXin Li }
6443*67e74705SXin Li #pragma omp critical
6444*67e74705SXin Li {
6445*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'critical' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6446*67e74705SXin Li for (int i = 0; i < 10; ++i)
6447*67e74705SXin Li ;
6448*67e74705SXin Li }
6449*67e74705SXin Li
6450*67e74705SXin Li // PARALLEL FOR DIRECTIVE
6451*67e74705SXin Li #pragma omp parallel for
6452*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6453*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
6454*67e74705SXin Li for (int i = 0; i < 10; ++i)
6455*67e74705SXin Li ;
6456*67e74705SXin Li }
6457*67e74705SXin Li #pragma omp parallel for
6458*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6459*67e74705SXin Li #pragma omp simd
6460*67e74705SXin Li for (int i = 0; i < 10; ++i)
6461*67e74705SXin Li ;
6462*67e74705SXin Li }
6463*67e74705SXin Li #pragma omp parallel for
6464*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6465*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
6466*67e74705SXin Li for (int i = 0; i < 10; ++i)
6467*67e74705SXin Li ;
6468*67e74705SXin Li }
6469*67e74705SXin Li
6470*67e74705SXin Li #pragma omp parallel for
6471*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6472*67e74705SXin Li #pragma omp parallel
6473*67e74705SXin Li for (int i = 0; i < 10; ++i)
6474*67e74705SXin Li ;
6475*67e74705SXin Li }
6476*67e74705SXin Li #pragma omp parallel for
6477*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6478*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
6479*67e74705SXin Li {
6480*67e74705SXin Li bar();
6481*67e74705SXin Li }
6482*67e74705SXin Li }
6483*67e74705SXin Li #pragma omp parallel for
6484*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6485*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a parallel for region}}
6486*67e74705SXin Li {
6487*67e74705SXin Li bar();
6488*67e74705SXin Li }
6489*67e74705SXin Li }
6490*67e74705SXin Li #pragma omp parallel for
6491*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6492*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
6493*67e74705SXin Li {
6494*67e74705SXin Li bar();
6495*67e74705SXin Li }
6496*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'parallel for' region}}
6497*67e74705SXin Li {
6498*67e74705SXin Li bar();
6499*67e74705SXin Li }
6500*67e74705SXin Li #pragma omp critical
6501*67e74705SXin Li {
6502*67e74705SXin Li bar();
6503*67e74705SXin Li }
6504*67e74705SXin Li }
6505*67e74705SXin Li #pragma omp parallel for
6506*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6507*67e74705SXin Li #pragma omp parallel
6508*67e74705SXin Li {
6509*67e74705SXin Li #pragma omp single // OK
6510*67e74705SXin Li {
6511*67e74705SXin Li bar();
6512*67e74705SXin Li }
6513*67e74705SXin Li #pragma omp master // OK
6514*67e74705SXin Li {
6515*67e74705SXin Li bar();
6516*67e74705SXin Li }
6517*67e74705SXin Li #pragma omp critical // OK
6518*67e74705SXin Li {
6519*67e74705SXin Li bar();
6520*67e74705SXin Li }
6521*67e74705SXin Li #pragma omp for // OK
6522*67e74705SXin Li for (int i = 0; i < 10; ++i)
6523*67e74705SXin Li ;
6524*67e74705SXin Li #pragma omp for simd // OK
6525*67e74705SXin Li for (int i = 0; i < 10; ++i)
6526*67e74705SXin Li ;
6527*67e74705SXin Li #pragma omp sections // OK
6528*67e74705SXin Li {
6529*67e74705SXin Li bar();
6530*67e74705SXin Li }
6531*67e74705SXin Li }
6532*67e74705SXin Li }
6533*67e74705SXin Li #pragma omp parallel for
6534*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6535*67e74705SXin Li #pragma omp parallel for
6536*67e74705SXin Li for (int i = 0; i < 10; ++i)
6537*67e74705SXin Li ;
6538*67e74705SXin Li }
6539*67e74705SXin Li #pragma omp parallel for
6540*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6541*67e74705SXin Li #pragma omp parallel for simd
6542*67e74705SXin Li for (int i = 0; i < 10; ++i)
6543*67e74705SXin Li ;
6544*67e74705SXin Li }
6545*67e74705SXin Li #pragma omp parallel for
6546*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6547*67e74705SXin Li #pragma omp parallel sections
6548*67e74705SXin Li {
6549*67e74705SXin Li bar();
6550*67e74705SXin Li }
6551*67e74705SXin Li }
6552*67e74705SXin Li #pragma omp parallel for
6553*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6554*67e74705SXin Li #pragma omp task
6555*67e74705SXin Li {
6556*67e74705SXin Li bar();
6557*67e74705SXin Li }
6558*67e74705SXin Li }
6559*67e74705SXin Li #pragma omp parallel for
6560*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6561*67e74705SXin Li #pragma omp taskyield
6562*67e74705SXin Li bar();
6563*67e74705SXin Li }
6564*67e74705SXin Li #pragma omp parallel for
6565*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6566*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel for' region}}
6567*67e74705SXin Li bar();
6568*67e74705SXin Li }
6569*67e74705SXin Li #pragma omp parallel for
6570*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6571*67e74705SXin Li #pragma omp taskwait
6572*67e74705SXin Li bar();
6573*67e74705SXin Li }
6574*67e74705SXin Li #pragma omp parallel for
6575*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6576*67e74705SXin Li #pragma omp flush
6577*67e74705SXin Li bar();
6578*67e74705SXin Li }
6579*67e74705SXin Li #pragma omp parallel for
6580*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6581*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6582*67e74705SXin Li bar();
6583*67e74705SXin Li }
6584*67e74705SXin Li #pragma omp parallel for ordered
6585*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6586*67e74705SXin Li #pragma omp ordered // OK
6587*67e74705SXin Li bar();
6588*67e74705SXin Li }
6589*67e74705SXin Li #pragma omp parallel for
6590*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6591*67e74705SXin Li #pragma omp atomic
6592*67e74705SXin Li ++a;
6593*67e74705SXin Li }
6594*67e74705SXin Li #pragma omp parallel for
6595*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6596*67e74705SXin Li #pragma omp target
6597*67e74705SXin Li ++a;
6598*67e74705SXin Li }
6599*67e74705SXin Li #pragma omp parallel for
6600*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6601*67e74705SXin Li #pragma omp target parallel
6602*67e74705SXin Li ++a;
6603*67e74705SXin Li }
6604*67e74705SXin Li #pragma omp parallel for
6605*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6606*67e74705SXin Li #pragma omp target parallel for
6607*67e74705SXin Li for (int i = 0; i < 10; ++i)
6608*67e74705SXin Li ;
6609*67e74705SXin Li }
6610*67e74705SXin Li #pragma omp parallel for
6611*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6612*67e74705SXin Li #pragma omp target enter data map(to: a)
6613*67e74705SXin Li ++a;
6614*67e74705SXin Li }
6615*67e74705SXin Li #pragma omp parallel for
6616*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6617*67e74705SXin Li #pragma omp target exit data map(from: a)
6618*67e74705SXin Li ++a;
6619*67e74705SXin Li }
6620*67e74705SXin Li #pragma omp parallel for
6621*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6622*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
6623*67e74705SXin Li ++a;
6624*67e74705SXin Li }
6625*67e74705SXin Li #pragma omp parallel for
6626*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6627*67e74705SXin Li #pragma omp taskloop
6628*67e74705SXin Li for (int i = 0; i < 10; ++i)
6629*67e74705SXin Li ++a;
6630*67e74705SXin Li }
6631*67e74705SXin Li #pragma omp parallel for
6632*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6633*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
6634*67e74705SXin Li for (int j = 0; j < 10; ++j)
6635*67e74705SXin Li ;
6636*67e74705SXin Li }
6637*67e74705SXin Li #pragma omp parallel for
6638*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6639*67e74705SXin Li #pragma omp target update to(a)
6640*67e74705SXin Li a++;
6641*67e74705SXin Li }
6642*67e74705SXin Li #pragma omp parallel for
6643*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6644*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
6645*67e74705SXin Li for (int j = 0; j < 10; ++j)
6646*67e74705SXin Li ;
6647*67e74705SXin Li }
6648*67e74705SXin Li #pragma omp parallel for
6649*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6650*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
6651*67e74705SXin Li for (int j = 0; j < 10; ++j)
6652*67e74705SXin Li ;
6653*67e74705SXin Li }
6654*67e74705SXin Li #pragma omp parallel for
6655*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6656*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
6657*67e74705SXin Li for (int j = 0; j < 10; ++j)
6658*67e74705SXin Li ;
6659*67e74705SXin Li }
6660*67e74705SXin Li
6661*67e74705SXin Li // PARALLEL FOR SIMD DIRECTIVE
6662*67e74705SXin Li #pragma omp parallel for simd
6663*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6664*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6665*67e74705SXin Li for (int i = 0; i < 10; ++i)
6666*67e74705SXin Li ;
6667*67e74705SXin Li }
6668*67e74705SXin Li #pragma omp parallel for simd
6669*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6670*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
6671*67e74705SXin Li for (int i = 0; i < 10; ++i)
6672*67e74705SXin Li ;
6673*67e74705SXin Li }
6674*67e74705SXin Li #pragma omp parallel for simd
6675*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6676*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6677*67e74705SXin Li for (int i = 0; i < 10; ++i)
6678*67e74705SXin Li ;
6679*67e74705SXin Li }
6680*67e74705SXin Li #pragma omp parallel for simd
6681*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6682*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6683*67e74705SXin Li for (int i = 0; i < 10; ++i)
6684*67e74705SXin Li ;
6685*67e74705SXin Li }
6686*67e74705SXin Li #pragma omp parallel for simd
6687*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6688*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6689*67e74705SXin Li {
6690*67e74705SXin Li bar();
6691*67e74705SXin Li }
6692*67e74705SXin Li }
6693*67e74705SXin Li #pragma omp parallel for simd
6694*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6695*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6696*67e74705SXin Li {
6697*67e74705SXin Li bar();
6698*67e74705SXin Li }
6699*67e74705SXin Li }
6700*67e74705SXin Li #pragma omp parallel for simd
6701*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6702*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6703*67e74705SXin Li {
6704*67e74705SXin Li bar();
6705*67e74705SXin Li }
6706*67e74705SXin Li }
6707*67e74705SXin Li
6708*67e74705SXin Li #pragma omp parallel for simd
6709*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6710*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6711*67e74705SXin Li {
6712*67e74705SXin Li bar();
6713*67e74705SXin Li }
6714*67e74705SXin Li }
6715*67e74705SXin Li
6716*67e74705SXin Li #pragma omp parallel for simd
6717*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6718*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6719*67e74705SXin Li {
6720*67e74705SXin Li bar();
6721*67e74705SXin Li }
6722*67e74705SXin Li }
6723*67e74705SXin Li
6724*67e74705SXin Li #pragma omp parallel for simd
6725*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6726*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6727*67e74705SXin Li {
6728*67e74705SXin Li #pragma omp single
6729*67e74705SXin Li {
6730*67e74705SXin Li bar();
6731*67e74705SXin Li }
6732*67e74705SXin Li #pragma omp for
6733*67e74705SXin Li for (int i = 0; i < 10; ++i)
6734*67e74705SXin Li ;
6735*67e74705SXin Li #pragma omp for simd
6736*67e74705SXin Li for (int i = 0; i < 10; ++i)
6737*67e74705SXin Li ;
6738*67e74705SXin Li #pragma omp sections
6739*67e74705SXin Li {
6740*67e74705SXin Li bar();
6741*67e74705SXin Li }
6742*67e74705SXin Li }
6743*67e74705SXin Li }
6744*67e74705SXin Li #pragma omp parallel for simd
6745*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6746*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6747*67e74705SXin Li for (int i = 0; i < 10; ++i)
6748*67e74705SXin Li ;
6749*67e74705SXin Li }
6750*67e74705SXin Li #pragma omp parallel for simd
6751*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6752*67e74705SXin Li #pragma omp parallel for simd// expected-error {{OpenMP constructs may not be nested inside a simd region}}
6753*67e74705SXin Li for (int i = 0; i < 10; ++i)
6754*67e74705SXin Li ;
6755*67e74705SXin Li }
6756*67e74705SXin Li #pragma omp parallel for simd
6757*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6758*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6759*67e74705SXin Li {
6760*67e74705SXin Li bar();
6761*67e74705SXin Li }
6762*67e74705SXin Li }
6763*67e74705SXin Li #pragma omp parallel for simd
6764*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6765*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6766*67e74705SXin Li {
6767*67e74705SXin Li bar();
6768*67e74705SXin Li }
6769*67e74705SXin Li }
6770*67e74705SXin Li #pragma omp parallel for simd
6771*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6772*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6773*67e74705SXin Li bar();
6774*67e74705SXin Li }
6775*67e74705SXin Li #pragma omp parallel for simd
6776*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6777*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6778*67e74705SXin Li bar();
6779*67e74705SXin Li }
6780*67e74705SXin Li #pragma omp parallel for simd
6781*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6782*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6783*67e74705SXin Li bar();
6784*67e74705SXin Li }
6785*67e74705SXin Li #pragma omp parallel for simd
6786*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6787*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6788*67e74705SXin Li bar();
6789*67e74705SXin Li }
6790*67e74705SXin Li #pragma omp parallel for simd
6791*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6792*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6793*67e74705SXin Li bar();
6794*67e74705SXin Li }
6795*67e74705SXin Li #pragma omp parallel for simd
6796*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6797*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6798*67e74705SXin Li bar();
6799*67e74705SXin Li }
6800*67e74705SXin Li #pragma omp parallel for simd
6801*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6802*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6803*67e74705SXin Li ++a;
6804*67e74705SXin Li }
6805*67e74705SXin Li #pragma omp parallel for simd
6806*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6807*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6808*67e74705SXin Li ++a;
6809*67e74705SXin Li }
6810*67e74705SXin Li #pragma omp parallel for simd
6811*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6812*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6813*67e74705SXin Li ++a;
6814*67e74705SXin Li }
6815*67e74705SXin Li #pragma omp parallel for simd
6816*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6817*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6818*67e74705SXin Li for (int i = 0; i < 10; ++i)
6819*67e74705SXin Li ;
6820*67e74705SXin Li }
6821*67e74705SXin Li #pragma omp parallel for simd
6822*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6823*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6824*67e74705SXin Li ++a;
6825*67e74705SXin Li }
6826*67e74705SXin Li #pragma omp parallel for simd
6827*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6828*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6829*67e74705SXin Li ++a;
6830*67e74705SXin Li }
6831*67e74705SXin Li #pragma omp parallel for simd
6832*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6833*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6834*67e74705SXin Li ++a;
6835*67e74705SXin Li }
6836*67e74705SXin Li #pragma omp parallel for simd
6837*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6838*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6839*67e74705SXin Li for (int i = 0; i < 10; ++i)
6840*67e74705SXin Li ++a;
6841*67e74705SXin Li }
6842*67e74705SXin Li #pragma omp parallel for simd
6843*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6844*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6845*67e74705SXin Li for (int j = 0; j < 10; ++j)
6846*67e74705SXin Li ;
6847*67e74705SXin Li }
6848*67e74705SXin Li #pragma omp parallel for simd
6849*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6850*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6851*67e74705SXin Li a++;
6852*67e74705SXin Li }
6853*67e74705SXin Li #pragma omp parallel for simd
6854*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6855*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6856*67e74705SXin Li for (int j = 0; j < 10; ++j)
6857*67e74705SXin Li ;
6858*67e74705SXin Li }
6859*67e74705SXin Li #pragma omp parallel for simd
6860*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6861*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6862*67e74705SXin Li for (int j = 0; j < 10; ++j)
6863*67e74705SXin Li ;
6864*67e74705SXin Li }
6865*67e74705SXin Li #pragma omp parallel for simd
6866*67e74705SXin Li for (int i = 0; i < 10; ++i) {
6867*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
6868*67e74705SXin Li for (int j = 0; j < 10; ++j)
6869*67e74705SXin Li ;
6870*67e74705SXin Li }
6871*67e74705SXin Li
6872*67e74705SXin Li // PARALLEL SECTIONS DIRECTIVE
6873*67e74705SXin Li #pragma omp parallel sections
6874*67e74705SXin Li {
6875*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
6876*67e74705SXin Li for (int i = 0; i < 10; ++i)
6877*67e74705SXin Li ;
6878*67e74705SXin Li }
6879*67e74705SXin Li #pragma omp parallel sections
6880*67e74705SXin Li {
6881*67e74705SXin Li #pragma omp simd
6882*67e74705SXin Li for (int i = 0; i < 10; ++i)
6883*67e74705SXin Li ;
6884*67e74705SXin Li }
6885*67e74705SXin Li #pragma omp parallel sections
6886*67e74705SXin Li {
6887*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
6888*67e74705SXin Li for (int i = 0; i < 10; ++i)
6889*67e74705SXin Li ;
6890*67e74705SXin Li }
6891*67e74705SXin Li #pragma omp parallel sections
6892*67e74705SXin Li {
6893*67e74705SXin Li #pragma omp parallel
6894*67e74705SXin Li for (int i = 0; i < 10; ++i)
6895*67e74705SXin Li ;
6896*67e74705SXin Li }
6897*67e74705SXin Li #pragma omp parallel sections
6898*67e74705SXin Li {
6899*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
6900*67e74705SXin Li {
6901*67e74705SXin Li bar();
6902*67e74705SXin Li }
6903*67e74705SXin Li }
6904*67e74705SXin Li #pragma omp parallel sections
6905*67e74705SXin Li {
6906*67e74705SXin Li #pragma omp section
6907*67e74705SXin Li {
6908*67e74705SXin Li bar();
6909*67e74705SXin Li }
6910*67e74705SXin Li }
6911*67e74705SXin Li #pragma omp parallel sections
6912*67e74705SXin Li {
6913*67e74705SXin Li #pragma omp section
6914*67e74705SXin Li {
6915*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'section' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
6916*67e74705SXin Li bar();
6917*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'section' region}}
6918*67e74705SXin Li bar();
6919*67e74705SXin Li #pragma omp critical
6920*67e74705SXin Li bar();
6921*67e74705SXin Li }
6922*67e74705SXin Li }
6923*67e74705SXin Li #pragma omp parallel sections
6924*67e74705SXin Li {
6925*67e74705SXin Li #pragma omp parallel
6926*67e74705SXin Li {
6927*67e74705SXin Li #pragma omp single // OK
6928*67e74705SXin Li {
6929*67e74705SXin Li bar();
6930*67e74705SXin Li }
6931*67e74705SXin Li #pragma omp master // OK
6932*67e74705SXin Li {
6933*67e74705SXin Li bar();
6934*67e74705SXin Li }
6935*67e74705SXin Li #pragma omp critical // OK
6936*67e74705SXin Li {
6937*67e74705SXin Li bar();
6938*67e74705SXin Li }
6939*67e74705SXin Li #pragma omp for // OK
6940*67e74705SXin Li for (int i = 0; i < 10; ++i)
6941*67e74705SXin Li ;
6942*67e74705SXin Li #pragma omp for simd // OK
6943*67e74705SXin Li for (int i = 0; i < 10; ++i)
6944*67e74705SXin Li ;
6945*67e74705SXin Li #pragma omp sections // OK
6946*67e74705SXin Li {
6947*67e74705SXin Li bar();
6948*67e74705SXin Li }
6949*67e74705SXin Li }
6950*67e74705SXin Li }
6951*67e74705SXin Li #pragma omp parallel sections
6952*67e74705SXin Li {
6953*67e74705SXin Li #pragma omp parallel for
6954*67e74705SXin Li for (int i = 0; i < 10; ++i)
6955*67e74705SXin Li ;
6956*67e74705SXin Li }
6957*67e74705SXin Li #pragma omp parallel sections
6958*67e74705SXin Li {
6959*67e74705SXin Li #pragma omp parallel for simd
6960*67e74705SXin Li for (int i = 0; i < 10; ++i)
6961*67e74705SXin Li ;
6962*67e74705SXin Li }
6963*67e74705SXin Li #pragma omp parallel sections
6964*67e74705SXin Li {
6965*67e74705SXin Li #pragma omp parallel sections
6966*67e74705SXin Li {
6967*67e74705SXin Li bar();
6968*67e74705SXin Li }
6969*67e74705SXin Li }
6970*67e74705SXin Li #pragma omp parallel sections
6971*67e74705SXin Li {
6972*67e74705SXin Li #pragma omp task
6973*67e74705SXin Li {
6974*67e74705SXin Li bar();
6975*67e74705SXin Li }
6976*67e74705SXin Li }
6977*67e74705SXin Li #pragma omp parallel sections
6978*67e74705SXin Li {
6979*67e74705SXin Li #pragma omp taskyield
6980*67e74705SXin Li }
6981*67e74705SXin Li #pragma omp parallel sections
6982*67e74705SXin Li {
6983*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'parallel sections' region}}
6984*67e74705SXin Li }
6985*67e74705SXin Li #pragma omp parallel sections
6986*67e74705SXin Li {
6987*67e74705SXin Li #pragma omp taskwait
6988*67e74705SXin Li }
6989*67e74705SXin Li #pragma omp parallel sections
6990*67e74705SXin Li {
6991*67e74705SXin Li #pragma omp flush
6992*67e74705SXin Li }
6993*67e74705SXin Li #pragma omp parallel sections
6994*67e74705SXin Li {
6995*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
6996*67e74705SXin Li bar();
6997*67e74705SXin Li }
6998*67e74705SXin Li #pragma omp parallel sections
6999*67e74705SXin Li {
7000*67e74705SXin Li #pragma omp atomic
7001*67e74705SXin Li ++a;
7002*67e74705SXin Li }
7003*67e74705SXin Li #pragma omp parallel sections
7004*67e74705SXin Li {
7005*67e74705SXin Li #pragma omp target
7006*67e74705SXin Li ++a;
7007*67e74705SXin Li }
7008*67e74705SXin Li #pragma omp parallel sections
7009*67e74705SXin Li {
7010*67e74705SXin Li #pragma omp target parallel
7011*67e74705SXin Li ++a;
7012*67e74705SXin Li }
7013*67e74705SXin Li #pragma omp parallel sections
7014*67e74705SXin Li {
7015*67e74705SXin Li #pragma omp target parallel for
7016*67e74705SXin Li for (int i = 0; i < 10; ++i)
7017*67e74705SXin Li ;
7018*67e74705SXin Li }
7019*67e74705SXin Li #pragma omp parallel sections
7020*67e74705SXin Li {
7021*67e74705SXin Li #pragma omp target enter data map(to: a)
7022*67e74705SXin Li }
7023*67e74705SXin Li #pragma omp parallel sections
7024*67e74705SXin Li {
7025*67e74705SXin Li #pragma omp target exit data map(from: a)
7026*67e74705SXin Li }
7027*67e74705SXin Li #pragma omp parallel sections
7028*67e74705SXin Li {
7029*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7030*67e74705SXin Li ++a;
7031*67e74705SXin Li }
7032*67e74705SXin Li #pragma omp parallel sections
7033*67e74705SXin Li {
7034*67e74705SXin Li #pragma omp taskloop
7035*67e74705SXin Li for (int i = 0; i < 10; ++i)
7036*67e74705SXin Li ++a;
7037*67e74705SXin Li }
7038*67e74705SXin Li #pragma omp parallel sections
7039*67e74705SXin Li {
7040*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7041*67e74705SXin Li for (int i = 0; i < 10; ++i)
7042*67e74705SXin Li ;
7043*67e74705SXin Li }
7044*67e74705SXin Li #pragma omp parallel sections
7045*67e74705SXin Li {
7046*67e74705SXin Li #pragma omp target update to(a)
7047*67e74705SXin Li }
7048*67e74705SXin Li #pragma omp parallel sections
7049*67e74705SXin Li {
7050*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
7051*67e74705SXin Li for (int i = 0; i < 10; ++i)
7052*67e74705SXin Li ;
7053*67e74705SXin Li }
7054*67e74705SXin Li #pragma omp parallel sections
7055*67e74705SXin Li {
7056*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7057*67e74705SXin Li for (int i = 0; i < 10; ++i)
7058*67e74705SXin Li ;
7059*67e74705SXin Li }
7060*67e74705SXin Li #pragma omp parallel sections
7061*67e74705SXin Li {
7062*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'parallel sections' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
7063*67e74705SXin Li for (int i = 0; i < 10; ++i)
7064*67e74705SXin Li ;
7065*67e74705SXin Li }
7066*67e74705SXin Li
7067*67e74705SXin Li // TASK DIRECTIVE
7068*67e74705SXin Li #pragma omp task
7069*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
7070*67e74705SXin Li for (int i = 0; i < 10; ++i)
7071*67e74705SXin Li ;
7072*67e74705SXin Li #pragma omp task
7073*67e74705SXin Li #pragma omp simd
7074*67e74705SXin Li for (int i = 0; i < 10; ++i)
7075*67e74705SXin Li ;
7076*67e74705SXin Li #pragma omp task
7077*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
7078*67e74705SXin Li for (int i = 0; i < 10; ++i)
7079*67e74705SXin Li ;
7080*67e74705SXin Li #pragma omp task
7081*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
7082*67e74705SXin Li {
7083*67e74705SXin Li bar();
7084*67e74705SXin Li }
7085*67e74705SXin Li #pragma omp task
7086*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a task region}}
7087*67e74705SXin Li {
7088*67e74705SXin Li bar();
7089*67e74705SXin Li }
7090*67e74705SXin Li #pragma omp task
7091*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
7092*67e74705SXin Li bar();
7093*67e74705SXin Li #pragma omp task
7094*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'task' region}}
7095*67e74705SXin Li bar();
7096*67e74705SXin Li #pragma omp task
7097*67e74705SXin Li #pragma omp critical
7098*67e74705SXin Li bar();
7099*67e74705SXin Li #pragma omp task
7100*67e74705SXin Li #pragma omp parallel for
7101*67e74705SXin Li for (int i = 0; i < 10; ++i)
7102*67e74705SXin Li ;
7103*67e74705SXin Li #pragma omp task
7104*67e74705SXin Li #pragma omp parallel for simd
7105*67e74705SXin Li for (int i = 0; i < 10; ++i)
7106*67e74705SXin Li ;
7107*67e74705SXin Li #pragma omp task
7108*67e74705SXin Li #pragma omp parallel sections
7109*67e74705SXin Li {
7110*67e74705SXin Li bar();
7111*67e74705SXin Li }
7112*67e74705SXin Li #pragma omp task
7113*67e74705SXin Li #pragma omp task
7114*67e74705SXin Li {
7115*67e74705SXin Li bar();
7116*67e74705SXin Li }
7117*67e74705SXin Li #pragma omp task
7118*67e74705SXin Li {
7119*67e74705SXin Li #pragma omp taskyield
7120*67e74705SXin Li bar();
7121*67e74705SXin Li }
7122*67e74705SXin Li #pragma omp task
7123*67e74705SXin Li {
7124*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'task' region}}
7125*67e74705SXin Li bar();
7126*67e74705SXin Li }
7127*67e74705SXin Li #pragma omp task
7128*67e74705SXin Li {
7129*67e74705SXin Li #pragma omp taskwait
7130*67e74705SXin Li bar();
7131*67e74705SXin Li }
7132*67e74705SXin Li #pragma omp task
7133*67e74705SXin Li {
7134*67e74705SXin Li #pragma omp flush
7135*67e74705SXin Li bar();
7136*67e74705SXin Li }
7137*67e74705SXin Li #pragma omp task
7138*67e74705SXin Li {
7139*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7140*67e74705SXin Li bar();
7141*67e74705SXin Li }
7142*67e74705SXin Li #pragma omp task
7143*67e74705SXin Li {
7144*67e74705SXin Li #pragma omp atomic
7145*67e74705SXin Li ++a;
7146*67e74705SXin Li }
7147*67e74705SXin Li #pragma omp task
7148*67e74705SXin Li {
7149*67e74705SXin Li #pragma omp target
7150*67e74705SXin Li ++a;
7151*67e74705SXin Li }
7152*67e74705SXin Li #pragma omp task
7153*67e74705SXin Li {
7154*67e74705SXin Li #pragma omp target parallel
7155*67e74705SXin Li ++a;
7156*67e74705SXin Li }
7157*67e74705SXin Li #pragma omp task
7158*67e74705SXin Li #pragma omp target parallel for
7159*67e74705SXin Li for (int i = 0; i < 10; ++i)
7160*67e74705SXin Li ;
7161*67e74705SXin Li #pragma omp task
7162*67e74705SXin Li {
7163*67e74705SXin Li #pragma omp target enter data map(to: a)
7164*67e74705SXin Li ++a;
7165*67e74705SXin Li }
7166*67e74705SXin Li #pragma omp task
7167*67e74705SXin Li {
7168*67e74705SXin Li #pragma omp target exit data map(from: a)
7169*67e74705SXin Li ++a;
7170*67e74705SXin Li }
7171*67e74705SXin Li #pragma omp task
7172*67e74705SXin Li {
7173*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7174*67e74705SXin Li ++a;
7175*67e74705SXin Li }
7176*67e74705SXin Li #pragma omp task
7177*67e74705SXin Li {
7178*67e74705SXin Li #pragma omp taskloop
7179*67e74705SXin Li for (int i = 0; i < 10; ++i)
7180*67e74705SXin Li ++a;
7181*67e74705SXin Li }
7182*67e74705SXin Li #pragma omp task
7183*67e74705SXin Li {
7184*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7185*67e74705SXin Li for (int i = 0; i < 10; ++i)
7186*67e74705SXin Li ;
7187*67e74705SXin Li }
7188*67e74705SXin Li #pragma omp task
7189*67e74705SXin Li {
7190*67e74705SXin Li #pragma omp target update to(a)
7191*67e74705SXin Li a++;
7192*67e74705SXin Li }
7193*67e74705SXin Li #pragma omp task
7194*67e74705SXin Li {
7195*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
7196*67e74705SXin Li for (int i = 0; i < 10; ++i)
7197*67e74705SXin Li ;
7198*67e74705SXin Li }
7199*67e74705SXin Li #pragma omp task
7200*67e74705SXin Li {
7201*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7202*67e74705SXin Li for (int i = 0; i < 10; ++i)
7203*67e74705SXin Li ;
7204*67e74705SXin Li }
7205*67e74705SXin Li #pragma omp task
7206*67e74705SXin Li {
7207*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'task' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
7208*67e74705SXin Li for (int i = 0; i < 10; ++i)
7209*67e74705SXin Li ;
7210*67e74705SXin Li }
7211*67e74705SXin Li
7212*67e74705SXin Li // ATOMIC DIRECTIVE
7213*67e74705SXin Li #pragma omp atomic
7214*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7215*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7216*67e74705SXin Li {
7217*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7218*67e74705SXin Li for (int i = 0; i < 10; ++i)
7219*67e74705SXin Li ;
7220*67e74705SXin Li }
7221*67e74705SXin Li #pragma omp atomic
7222*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7223*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7224*67e74705SXin Li {
7225*67e74705SXin Li #pragma omp simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7226*67e74705SXin Li for (int i = 0; i < 10; ++i)
7227*67e74705SXin Li ;
7228*67e74705SXin Li }
7229*67e74705SXin Li #pragma omp atomic
7230*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7231*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7232*67e74705SXin Li {
7233*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7234*67e74705SXin Li for (int i = 0; i < 10; ++i)
7235*67e74705SXin Li ;
7236*67e74705SXin Li }
7237*67e74705SXin Li #pragma omp atomic
7238*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7239*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7240*67e74705SXin Li {
7241*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7242*67e74705SXin Li for (int i = 0; i < 10; ++i)
7243*67e74705SXin Li ;
7244*67e74705SXin Li }
7245*67e74705SXin Li #pragma omp atomic
7246*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7247*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7248*67e74705SXin Li {
7249*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7250*67e74705SXin Li {
7251*67e74705SXin Li bar();
7252*67e74705SXin Li }
7253*67e74705SXin Li }
7254*67e74705SXin Li #pragma omp atomic
7255*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7256*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7257*67e74705SXin Li {
7258*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7259*67e74705SXin Li {
7260*67e74705SXin Li bar();
7261*67e74705SXin Li }
7262*67e74705SXin Li }
7263*67e74705SXin Li #pragma omp atomic
7264*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7265*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7266*67e74705SXin Li {
7267*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7268*67e74705SXin Li {
7269*67e74705SXin Li bar();
7270*67e74705SXin Li }
7271*67e74705SXin Li }
7272*67e74705SXin Li #pragma omp atomic
7273*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7274*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7275*67e74705SXin Li {
7276*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7277*67e74705SXin Li {
7278*67e74705SXin Li bar();
7279*67e74705SXin Li }
7280*67e74705SXin Li }
7281*67e74705SXin Li #pragma omp atomic
7282*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7283*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7284*67e74705SXin Li {
7285*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7286*67e74705SXin Li {
7287*67e74705SXin Li bar();
7288*67e74705SXin Li }
7289*67e74705SXin Li }
7290*67e74705SXin Li #pragma omp atomic
7291*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7292*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7293*67e74705SXin Li {
7294*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7295*67e74705SXin Li for (int i = 0; i < 10; ++i)
7296*67e74705SXin Li ;
7297*67e74705SXin Li }
7298*67e74705SXin Li #pragma omp atomic
7299*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7300*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7301*67e74705SXin Li {
7302*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7303*67e74705SXin Li for (int i = 0; i < 10; ++i)
7304*67e74705SXin Li ;
7305*67e74705SXin Li }
7306*67e74705SXin Li #pragma omp atomic
7307*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7308*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7309*67e74705SXin Li {
7310*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7311*67e74705SXin Li {
7312*67e74705SXin Li bar();
7313*67e74705SXin Li }
7314*67e74705SXin Li }
7315*67e74705SXin Li #pragma omp atomic
7316*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7317*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7318*67e74705SXin Li {
7319*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7320*67e74705SXin Li {
7321*67e74705SXin Li bar();
7322*67e74705SXin Li }
7323*67e74705SXin Li }
7324*67e74705SXin Li #pragma omp atomic
7325*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7326*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7327*67e74705SXin Li {
7328*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7329*67e74705SXin Li bar();
7330*67e74705SXin Li }
7331*67e74705SXin Li #pragma omp atomic
7332*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7333*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7334*67e74705SXin Li {
7335*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7336*67e74705SXin Li bar();
7337*67e74705SXin Li }
7338*67e74705SXin Li #pragma omp atomic
7339*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7340*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7341*67e74705SXin Li {
7342*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7343*67e74705SXin Li bar();
7344*67e74705SXin Li }
7345*67e74705SXin Li #pragma omp atomic
7346*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7347*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7348*67e74705SXin Li {
7349*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7350*67e74705SXin Li bar();
7351*67e74705SXin Li }
7352*67e74705SXin Li #pragma omp atomic
7353*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7354*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7355*67e74705SXin Li {
7356*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7357*67e74705SXin Li bar();
7358*67e74705SXin Li }
7359*67e74705SXin Li #pragma omp atomic
7360*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7361*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7362*67e74705SXin Li {
7363*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7364*67e74705SXin Li ++a;
7365*67e74705SXin Li }
7366*67e74705SXin Li #pragma omp atomic
7367*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7368*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7369*67e74705SXin Li {
7370*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7371*67e74705SXin Li ++a;
7372*67e74705SXin Li }
7373*67e74705SXin Li #pragma omp atomic
7374*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7375*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7376*67e74705SXin Li {
7377*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7378*67e74705SXin Li ++a;
7379*67e74705SXin Li }
7380*67e74705SXin Li #pragma omp atomic
7381*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7382*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7383*67e74705SXin Li {
7384*67e74705SXin Li #pragma omp target parallel for // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7385*67e74705SXin Li for (int i = 0; i < 10; ++i)
7386*67e74705SXin Li ;
7387*67e74705SXin Li }
7388*67e74705SXin Li #pragma omp atomic
7389*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7390*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7391*67e74705SXin Li {
7392*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7393*67e74705SXin Li ++a;
7394*67e74705SXin Li }
7395*67e74705SXin Li #pragma omp atomic
7396*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7397*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7398*67e74705SXin Li {
7399*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7400*67e74705SXin Li ++a;
7401*67e74705SXin Li }
7402*67e74705SXin Li #pragma omp atomic
7403*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7404*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7405*67e74705SXin Li {
7406*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7407*67e74705SXin Li ++a;
7408*67e74705SXin Li }
7409*67e74705SXin Li #pragma omp atomic
7410*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7411*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7412*67e74705SXin Li {
7413*67e74705SXin Li #pragma omp taskloop // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7414*67e74705SXin Li for (int i = 0; i < 10; ++i)
7415*67e74705SXin Li ++a;
7416*67e74705SXin Li }
7417*67e74705SXin Li #pragma omp atomic
7418*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7419*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7420*67e74705SXin Li {
7421*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7422*67e74705SXin Li for (int i = 0; i < 10; ++i)
7423*67e74705SXin Li ;
7424*67e74705SXin Li }
7425*67e74705SXin Li #pragma omp atomic
7426*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7427*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7428*67e74705SXin Li {
7429*67e74705SXin Li #pragma omp target update // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7430*67e74705SXin Li }
7431*67e74705SXin Li #pragma omp atomic
7432*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7433*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7434*67e74705SXin Li {
7435*67e74705SXin Li #pragma omp distribute parallel for// expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7436*67e74705SXin Li for (int i = 0; i < 10; ++i)
7437*67e74705SXin Li ;
7438*67e74705SXin Li }
7439*67e74705SXin Li #pragma omp atomic
7440*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7441*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7442*67e74705SXin Li {
7443*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7444*67e74705SXin Li for (int i = 0; i < 10; ++i)
7445*67e74705SXin Li ;
7446*67e74705SXin Li }
7447*67e74705SXin Li #pragma omp atomic
7448*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7449*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7450*67e74705SXin Li {
7451*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7452*67e74705SXin Li for (int i = 0; i < 10; ++i)
7453*67e74705SXin Li ;
7454*67e74705SXin Li }
7455*67e74705SXin Li
7456*67e74705SXin Li // TARGET DIRECTIVE
7457*67e74705SXin Li #pragma omp target
7458*67e74705SXin Li #pragma omp parallel
7459*67e74705SXin Li bar();
7460*67e74705SXin Li #pragma omp target
7461*67e74705SXin Li #pragma omp for
7462*67e74705SXin Li for (int i = 0; i < 10; ++i)
7463*67e74705SXin Li ;
7464*67e74705SXin Li #pragma omp target
7465*67e74705SXin Li #pragma omp simd
7466*67e74705SXin Li for (int i = 0; i < 10; ++i)
7467*67e74705SXin Li ;
7468*67e74705SXin Li #pragma omp target
7469*67e74705SXin Li #pragma omp for simd
7470*67e74705SXin Li for (int i = 0; i < 10; ++i)
7471*67e74705SXin Li ;
7472*67e74705SXin Li #pragma omp target
7473*67e74705SXin Li #pragma omp sections
7474*67e74705SXin Li {
7475*67e74705SXin Li bar();
7476*67e74705SXin Li }
7477*67e74705SXin Li #pragma omp target
7478*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target region}}
7479*67e74705SXin Li {
7480*67e74705SXin Li bar();
7481*67e74705SXin Li }
7482*67e74705SXin Li #pragma omp target
7483*67e74705SXin Li #pragma omp single
7484*67e74705SXin Li bar();
7485*67e74705SXin Li
7486*67e74705SXin Li #pragma omp target
7487*67e74705SXin Li #pragma omp master
7488*67e74705SXin Li {
7489*67e74705SXin Li bar();
7490*67e74705SXin Li }
7491*67e74705SXin Li #pragma omp target
7492*67e74705SXin Li #pragma omp critical
7493*67e74705SXin Li {
7494*67e74705SXin Li bar();
7495*67e74705SXin Li }
7496*67e74705SXin Li #pragma omp target
7497*67e74705SXin Li #pragma omp parallel for
7498*67e74705SXin Li for (int i = 0; i < 10; ++i)
7499*67e74705SXin Li ;
7500*67e74705SXin Li #pragma omp target
7501*67e74705SXin Li #pragma omp parallel for simd
7502*67e74705SXin Li for (int i = 0; i < 10; ++i)
7503*67e74705SXin Li ;
7504*67e74705SXin Li #pragma omp target
7505*67e74705SXin Li #pragma omp parallel sections
7506*67e74705SXin Li {
7507*67e74705SXin Li bar();
7508*67e74705SXin Li }
7509*67e74705SXin Li #pragma omp target
7510*67e74705SXin Li #pragma omp task
7511*67e74705SXin Li {
7512*67e74705SXin Li bar();
7513*67e74705SXin Li }
7514*67e74705SXin Li #pragma omp target
7515*67e74705SXin Li {
7516*67e74705SXin Li #pragma omp taskyield
7517*67e74705SXin Li bar();
7518*67e74705SXin Li }
7519*67e74705SXin Li #pragma omp target
7520*67e74705SXin Li {
7521*67e74705SXin Li #pragma omp barrier
7522*67e74705SXin Li bar();
7523*67e74705SXin Li }
7524*67e74705SXin Li #pragma omp target
7525*67e74705SXin Li {
7526*67e74705SXin Li #pragma omp taskwait
7527*67e74705SXin Li bar();
7528*67e74705SXin Li }
7529*67e74705SXin Li #pragma omp target
7530*67e74705SXin Li {
7531*67e74705SXin Li #pragma omp flush
7532*67e74705SXin Li bar();
7533*67e74705SXin Li }
7534*67e74705SXin Li #pragma omp target
7535*67e74705SXin Li {
7536*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7537*67e74705SXin Li bar();
7538*67e74705SXin Li }
7539*67e74705SXin Li #pragma omp target
7540*67e74705SXin Li {
7541*67e74705SXin Li #pragma omp atomic
7542*67e74705SXin Li ++a;
7543*67e74705SXin Li }
7544*67e74705SXin Li #pragma omp target
7545*67e74705SXin Li {
7546*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
7547*67e74705SXin Li ++a;
7548*67e74705SXin Li }
7549*67e74705SXin Li #pragma omp target
7550*67e74705SXin Li {
7551*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
7552*67e74705SXin Li ++a;
7553*67e74705SXin Li }
7554*67e74705SXin Li #pragma omp target
7555*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
7556*67e74705SXin Li for (int i = 0; i < 10; ++i)
7557*67e74705SXin Li ;
7558*67e74705SXin Li #pragma omp target
7559*67e74705SXin Li {
7560*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
7561*67e74705SXin Li }
7562*67e74705SXin Li #pragma omp target
7563*67e74705SXin Li {
7564*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
7565*67e74705SXin Li }
7566*67e74705SXin Li #pragma omp target
7567*67e74705SXin Li {
7568*67e74705SXin Li #pragma omp teams
7569*67e74705SXin Li ++a;
7570*67e74705SXin Li }
7571*67e74705SXin Li #pragma omp target // expected-error {{target construct with nested teams region contains statements outside of the teams construct}}
7572*67e74705SXin Li {
7573*67e74705SXin Li ++a; // expected-note {{statement outside teams construct here}}
7574*67e74705SXin Li #pragma omp teams // expected-note {{nested teams construct here}}
7575*67e74705SXin Li ++a;
7576*67e74705SXin Li }
7577*67e74705SXin Li #pragma omp target
7578*67e74705SXin Li {
7579*67e74705SXin Li #pragma omp taskloop
7580*67e74705SXin Li for (int i = 0; i < 10; ++i)
7581*67e74705SXin Li ++a;
7582*67e74705SXin Li }
7583*67e74705SXin Li #pragma omp target
7584*67e74705SXin Li {
7585*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7586*67e74705SXin Li for (int i = 0; i < 10; ++i)
7587*67e74705SXin Li ;
7588*67e74705SXin Li }
7589*67e74705SXin Li #pragma omp atomic
7590*67e74705SXin Li // expected-error@+2 {{the statement for 'atomic' must be an expression statement of form '++x;', '--x;', 'x++;', 'x--;', 'x binop= expr;', 'x = x binop expr' or 'x = expr binop x', where x is an l-value expression with scalar type}}
7591*67e74705SXin Li // expected-note@+1 {{expected an expression statement}}
7592*67e74705SXin Li {
7593*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside an atomic region}}
7594*67e74705SXin Li a++;
7595*67e74705SXin Li }
7596*67e74705SXin Li #pragma omp target
7597*67e74705SXin Li {
7598*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
7599*67e74705SXin Li for (int i = 0; i < 10; ++i)
7600*67e74705SXin Li ;
7601*67e74705SXin Li }
7602*67e74705SXin Li #pragma omp target
7603*67e74705SXin Li {
7604*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7605*67e74705SXin Li for (int i = 0; i < 10; ++i)
7606*67e74705SXin Li ;
7607*67e74705SXin Li }
7608*67e74705SXin Li #pragma omp target
7609*67e74705SXin Li {
7610*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
7611*67e74705SXin Li for (int i = 0; i < 10; ++i)
7612*67e74705SXin Li ;
7613*67e74705SXin Li }
7614*67e74705SXin Li
7615*67e74705SXin Li // TARGET PARALLEL DIRECTIVE
7616*67e74705SXin Li #pragma omp target parallel
7617*67e74705SXin Li #pragma omp parallel
7618*67e74705SXin Li bar();
7619*67e74705SXin Li #pragma omp target parallel
7620*67e74705SXin Li #pragma omp for
7621*67e74705SXin Li for (int i = 0; i < 10; ++i)
7622*67e74705SXin Li ;
7623*67e74705SXin Li #pragma omp target parallel
7624*67e74705SXin Li #pragma omp simd
7625*67e74705SXin Li for (int i = 0; i < 10; ++i)
7626*67e74705SXin Li ;
7627*67e74705SXin Li #pragma omp target parallel
7628*67e74705SXin Li #pragma omp for simd
7629*67e74705SXin Li for (int i = 0; i < 10; ++i)
7630*67e74705SXin Li ;
7631*67e74705SXin Li #pragma omp target parallel
7632*67e74705SXin Li #pragma omp sections
7633*67e74705SXin Li {
7634*67e74705SXin Li bar();
7635*67e74705SXin Li }
7636*67e74705SXin Li #pragma omp target parallel
7637*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel region}}
7638*67e74705SXin Li {
7639*67e74705SXin Li bar();
7640*67e74705SXin Li }
7641*67e74705SXin Li #pragma omp target parallel
7642*67e74705SXin Li #pragma omp single
7643*67e74705SXin Li bar();
7644*67e74705SXin Li
7645*67e74705SXin Li #pragma omp target parallel
7646*67e74705SXin Li #pragma omp master
7647*67e74705SXin Li {
7648*67e74705SXin Li bar();
7649*67e74705SXin Li }
7650*67e74705SXin Li #pragma omp target parallel
7651*67e74705SXin Li #pragma omp critical
7652*67e74705SXin Li {
7653*67e74705SXin Li bar();
7654*67e74705SXin Li }
7655*67e74705SXin Li #pragma omp target parallel
7656*67e74705SXin Li #pragma omp parallel for
7657*67e74705SXin Li for (int i = 0; i < 10; ++i)
7658*67e74705SXin Li ;
7659*67e74705SXin Li #pragma omp target parallel
7660*67e74705SXin Li #pragma omp parallel for simd
7661*67e74705SXin Li for (int i = 0; i < 10; ++i)
7662*67e74705SXin Li ;
7663*67e74705SXin Li #pragma omp target parallel
7664*67e74705SXin Li #pragma omp parallel sections
7665*67e74705SXin Li {
7666*67e74705SXin Li bar();
7667*67e74705SXin Li }
7668*67e74705SXin Li #pragma omp target parallel
7669*67e74705SXin Li #pragma omp task
7670*67e74705SXin Li {
7671*67e74705SXin Li bar();
7672*67e74705SXin Li }
7673*67e74705SXin Li #pragma omp target parallel
7674*67e74705SXin Li {
7675*67e74705SXin Li #pragma omp taskyield
7676*67e74705SXin Li bar();
7677*67e74705SXin Li }
7678*67e74705SXin Li #pragma omp target parallel
7679*67e74705SXin Li {
7680*67e74705SXin Li #pragma omp barrier
7681*67e74705SXin Li bar();
7682*67e74705SXin Li }
7683*67e74705SXin Li #pragma omp target parallel
7684*67e74705SXin Li {
7685*67e74705SXin Li #pragma omp taskwait
7686*67e74705SXin Li bar();
7687*67e74705SXin Li }
7688*67e74705SXin Li #pragma omp target parallel
7689*67e74705SXin Li {
7690*67e74705SXin Li #pragma omp flush
7691*67e74705SXin Li bar();
7692*67e74705SXin Li }
7693*67e74705SXin Li #pragma omp target parallel
7694*67e74705SXin Li {
7695*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7696*67e74705SXin Li bar();
7697*67e74705SXin Li }
7698*67e74705SXin Li #pragma omp target parallel
7699*67e74705SXin Li {
7700*67e74705SXin Li #pragma omp atomic
7701*67e74705SXin Li ++a;
7702*67e74705SXin Li }
7703*67e74705SXin Li #pragma omp target parallel
7704*67e74705SXin Li {
7705*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target parallel' region}}
7706*67e74705SXin Li ++a;
7707*67e74705SXin Li }
7708*67e74705SXin Li #pragma omp target parallel
7709*67e74705SXin Li {
7710*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel' region}}
7711*67e74705SXin Li ++a;
7712*67e74705SXin Li }
7713*67e74705SXin Li #pragma omp target parallel
7714*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel' region}}
7715*67e74705SXin Li for (int i = 0; i < 10; ++i)
7716*67e74705SXin Li ;
7717*67e74705SXin Li #pragma omp target parallel
7718*67e74705SXin Li {
7719*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7720*67e74705SXin Li ++a;
7721*67e74705SXin Li }
7722*67e74705SXin Li #pragma omp target parallel
7723*67e74705SXin Li {
7724*67e74705SXin Li ++a;
7725*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7726*67e74705SXin Li ++a;
7727*67e74705SXin Li }
7728*67e74705SXin Li #pragma omp target parallel
7729*67e74705SXin Li {
7730*67e74705SXin Li #pragma omp taskloop
7731*67e74705SXin Li for (int i = 0; i < 10; ++i)
7732*67e74705SXin Li ++a;
7733*67e74705SXin Li }
7734*67e74705SXin Li #pragma omp target parallel
7735*67e74705SXin Li {
7736*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7737*67e74705SXin Li for (int i = 0; i < 10; ++i)
7738*67e74705SXin Li ;
7739*67e74705SXin Li }
7740*67e74705SXin Li #pragma omp target parallel
7741*67e74705SXin Li {
7742*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
7743*67e74705SXin Li }
7744*67e74705SXin Li #pragma omp target parallel
7745*67e74705SXin Li {
7746*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel' region}}
7747*67e74705SXin Li }
7748*67e74705SXin Li #pragma omp target parallel
7749*67e74705SXin Li {
7750*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel' region}}
7751*67e74705SXin Li }
7752*67e74705SXin Li #pragma omp target parallel
7753*67e74705SXin Li {
7754*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
7755*67e74705SXin Li for (int i = 0; i < 10; ++i)
7756*67e74705SXin Li ;
7757*67e74705SXin Li }
7758*67e74705SXin Li #pragma omp target parallel
7759*67e74705SXin Li {
7760*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7761*67e74705SXin Li for (int i = 0; i < 10; ++i)
7762*67e74705SXin Li ;
7763*67e74705SXin Li }
7764*67e74705SXin Li #pragma omp target parallel
7765*67e74705SXin Li {
7766*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
7767*67e74705SXin Li for (int i = 0; i < 10; ++i)
7768*67e74705SXin Li ;
7769*67e74705SXin Li }
7770*67e74705SXin Li
7771*67e74705SXin Li // TARGET PARALLEL FOR DIRECTIVE
7772*67e74705SXin Li #pragma omp target parallel for
7773*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7774*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
7775*67e74705SXin Li for (int i = 0; i < 10; ++i)
7776*67e74705SXin Li ;
7777*67e74705SXin Li }
7778*67e74705SXin Li #pragma omp target parallel for
7779*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7780*67e74705SXin Li #pragma omp simd
7781*67e74705SXin Li for (int i = 0; i < 10; ++i)
7782*67e74705SXin Li ;
7783*67e74705SXin Li }
7784*67e74705SXin Li #pragma omp target parallel for
7785*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7786*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
7787*67e74705SXin Li for (int i = 0; i < 10; ++i)
7788*67e74705SXin Li ;
7789*67e74705SXin Li }
7790*67e74705SXin Li #pragma omp target parallel for
7791*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7792*67e74705SXin Li #pragma omp parallel
7793*67e74705SXin Li for (int i = 0; i < 10; ++i)
7794*67e74705SXin Li ;
7795*67e74705SXin Li }
7796*67e74705SXin Li #pragma omp target parallel for
7797*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7798*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
7799*67e74705SXin Li {
7800*67e74705SXin Li bar();
7801*67e74705SXin Li }
7802*67e74705SXin Li }
7803*67e74705SXin Li #pragma omp target parallel for
7804*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7805*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a target parallel for region}}
7806*67e74705SXin Li {
7807*67e74705SXin Li bar();
7808*67e74705SXin Li }
7809*67e74705SXin Li }
7810*67e74705SXin Li #pragma omp target parallel for
7811*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7812*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
7813*67e74705SXin Li {
7814*67e74705SXin Li bar();
7815*67e74705SXin Li }
7816*67e74705SXin Li }
7817*67e74705SXin Li
7818*67e74705SXin Li #pragma omp target parallel for
7819*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7820*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
7821*67e74705SXin Li {
7822*67e74705SXin Li bar();
7823*67e74705SXin Li }
7824*67e74705SXin Li }
7825*67e74705SXin Li
7826*67e74705SXin Li #pragma omp target parallel for
7827*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7828*67e74705SXin Li #pragma omp critical
7829*67e74705SXin Li {
7830*67e74705SXin Li bar();
7831*67e74705SXin Li }
7832*67e74705SXin Li }
7833*67e74705SXin Li
7834*67e74705SXin Li #pragma omp target parallel for
7835*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7836*67e74705SXin Li #pragma omp parallel
7837*67e74705SXin Li {
7838*67e74705SXin Li #pragma omp single // OK
7839*67e74705SXin Li {
7840*67e74705SXin Li bar();
7841*67e74705SXin Li }
7842*67e74705SXin Li #pragma omp for // OK
7843*67e74705SXin Li for (int i = 0; i < 10; ++i)
7844*67e74705SXin Li ;
7845*67e74705SXin Li #pragma omp for simd // OK
7846*67e74705SXin Li for (int i = 0; i < 10; ++i)
7847*67e74705SXin Li ;
7848*67e74705SXin Li #pragma omp sections // OK
7849*67e74705SXin Li {
7850*67e74705SXin Li bar();
7851*67e74705SXin Li }
7852*67e74705SXin Li }
7853*67e74705SXin Li }
7854*67e74705SXin Li #pragma omp target parallel for
7855*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7856*67e74705SXin Li #pragma omp parallel for
7857*67e74705SXin Li for (int i = 0; i < 10; ++i)
7858*67e74705SXin Li ;
7859*67e74705SXin Li }
7860*67e74705SXin Li #pragma omp target parallel for
7861*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7862*67e74705SXin Li #pragma omp parallel for simd
7863*67e74705SXin Li for (int i = 0; i < 10; ++i)
7864*67e74705SXin Li ;
7865*67e74705SXin Li }
7866*67e74705SXin Li #pragma omp target parallel for
7867*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7868*67e74705SXin Li #pragma omp parallel sections
7869*67e74705SXin Li {
7870*67e74705SXin Li bar();
7871*67e74705SXin Li }
7872*67e74705SXin Li }
7873*67e74705SXin Li #pragma omp target parallel for
7874*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7875*67e74705SXin Li #pragma omp task
7876*67e74705SXin Li {
7877*67e74705SXin Li bar();
7878*67e74705SXin Li }
7879*67e74705SXin Li }
7880*67e74705SXin Li #pragma omp target parallel for
7881*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7882*67e74705SXin Li #pragma omp taskyield
7883*67e74705SXin Li bar();
7884*67e74705SXin Li }
7885*67e74705SXin Li #pragma omp target parallel for
7886*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7887*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'target parallel for' region}}
7888*67e74705SXin Li bar();
7889*67e74705SXin Li }
7890*67e74705SXin Li #pragma omp target parallel for
7891*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7892*67e74705SXin Li #pragma omp taskwait
7893*67e74705SXin Li bar();
7894*67e74705SXin Li }
7895*67e74705SXin Li #pragma omp target parallel for
7896*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7897*67e74705SXin Li #pragma omp flush
7898*67e74705SXin Li bar();
7899*67e74705SXin Li }
7900*67e74705SXin Li #pragma omp target parallel for
7901*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7902*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
7903*67e74705SXin Li bar();
7904*67e74705SXin Li }
7905*67e74705SXin Li #pragma omp target parallel for ordered
7906*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7907*67e74705SXin Li #pragma omp ordered // OK
7908*67e74705SXin Li bar();
7909*67e74705SXin Li }
7910*67e74705SXin Li #pragma omp target parallel for
7911*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7912*67e74705SXin Li #pragma omp atomic
7913*67e74705SXin Li ++a;
7914*67e74705SXin Li }
7915*67e74705SXin Li #pragma omp target parallel for
7916*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7917*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target parallel for' region}}
7918*67e74705SXin Li ++a;
7919*67e74705SXin Li }
7920*67e74705SXin Li #pragma omp target parallel for
7921*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7922*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target parallel for' region}}
7923*67e74705SXin Li ++a;
7924*67e74705SXin Li }
7925*67e74705SXin Li #pragma omp target parallel for
7926*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7927*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target parallel for' region}}
7928*67e74705SXin Li for (int i = 0; i < 10; ++i)
7929*67e74705SXin Li ;
7930*67e74705SXin Li }
7931*67e74705SXin Li #pragma omp target parallel for
7932*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7933*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
7934*67e74705SXin Li ++a;
7935*67e74705SXin Li }
7936*67e74705SXin Li #pragma omp target parallel for
7937*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7938*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
7939*67e74705SXin Li ++a;
7940*67e74705SXin Li }
7941*67e74705SXin Li #pragma omp target parallel for
7942*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7943*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
7944*67e74705SXin Li ++a;
7945*67e74705SXin Li }
7946*67e74705SXin Li #pragma omp target parallel for
7947*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7948*67e74705SXin Li #pragma omp taskloop
7949*67e74705SXin Li for (int i = 0; i < 10; ++i)
7950*67e74705SXin Li ++a;
7951*67e74705SXin Li }
7952*67e74705SXin Li #pragma omp target parallel for
7953*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7954*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
7955*67e74705SXin Li for (int j = 0; j < 10; ++j)
7956*67e74705SXin Li ;
7957*67e74705SXin Li }
7958*67e74705SXin Li #pragma omp target parallel for
7959*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7960*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target parallel for' region}}
7961*67e74705SXin Li a++;
7962*67e74705SXin Li }
7963*67e74705SXin Li #pragma omp target parallel for
7964*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7965*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
7966*67e74705SXin Li for (int j = 0; j < 10; ++j)
7967*67e74705SXin Li ;
7968*67e74705SXin Li }
7969*67e74705SXin Li #pragma omp target parallel for
7970*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7971*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
7972*67e74705SXin Li for (int j = 0; j < 10; ++j)
7973*67e74705SXin Li ;
7974*67e74705SXin Li }
7975*67e74705SXin Li #pragma omp target parallel for
7976*67e74705SXin Li for (int i = 0; i < 10; ++i) {
7977*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'target parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
7978*67e74705SXin Li for (int j = 0; j < 10; ++j)
7979*67e74705SXin Li ;
7980*67e74705SXin Li }
7981*67e74705SXin Li
7982*67e74705SXin Li // TEAMS DIRECTIVE
7983*67e74705SXin Li #pragma omp target
7984*67e74705SXin Li #pragma omp teams
7985*67e74705SXin Li #pragma omp parallel
7986*67e74705SXin Li bar();
7987*67e74705SXin Li #pragma omp target
7988*67e74705SXin Li #pragma omp teams
7989*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
7990*67e74705SXin Li for (int i = 0; i < 10; ++i)
7991*67e74705SXin Li ;
7992*67e74705SXin Li #pragma omp target
7993*67e74705SXin Li #pragma omp teams
7994*67e74705SXin Li #pragma omp simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp simd' directive into a parallel region?}}
7995*67e74705SXin Li for (int i = 0; i < 10; ++i)
7996*67e74705SXin Li ;
7997*67e74705SXin Li #pragma omp target
7998*67e74705SXin Li #pragma omp teams
7999*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8000*67e74705SXin Li for (int i = 0; i < 10; ++i)
8001*67e74705SXin Li ;
8002*67e74705SXin Li #pragma omp target
8003*67e74705SXin Li #pragma omp teams
8004*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8005*67e74705SXin Li {
8006*67e74705SXin Li bar();
8007*67e74705SXin Li }
8008*67e74705SXin Li #pragma omp target
8009*67e74705SXin Li #pragma omp teams
8010*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a teams region}}
8011*67e74705SXin Li {
8012*67e74705SXin Li bar();
8013*67e74705SXin Li }
8014*67e74705SXin Li #pragma omp target
8015*67e74705SXin Li #pragma omp teams
8016*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8017*67e74705SXin Li bar();
8018*67e74705SXin Li
8019*67e74705SXin Li #pragma omp target
8020*67e74705SXin Li #pragma omp teams
8021*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp master' directive into a parallel region?}}
8022*67e74705SXin Li {
8023*67e74705SXin Li bar();
8024*67e74705SXin Li }
8025*67e74705SXin Li #pragma omp target
8026*67e74705SXin Li #pragma omp teams
8027*67e74705SXin Li #pragma omp critical // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp critical' directive into a parallel region?}}
8028*67e74705SXin Li {
8029*67e74705SXin Li bar();
8030*67e74705SXin Li }
8031*67e74705SXin Li #pragma omp target
8032*67e74705SXin Li #pragma omp teams
8033*67e74705SXin Li #pragma omp parallel for
8034*67e74705SXin Li for (int i = 0; i < 10; ++i)
8035*67e74705SXin Li ;
8036*67e74705SXin Li #pragma omp target
8037*67e74705SXin Li #pragma omp teams
8038*67e74705SXin Li #pragma omp parallel for simd
8039*67e74705SXin Li for (int i = 0; i < 10; ++i)
8040*67e74705SXin Li ;
8041*67e74705SXin Li #pragma omp target
8042*67e74705SXin Li #pragma omp teams
8043*67e74705SXin Li #pragma omp parallel sections
8044*67e74705SXin Li {
8045*67e74705SXin Li bar();
8046*67e74705SXin Li }
8047*67e74705SXin Li #pragma omp target
8048*67e74705SXin Li #pragma omp teams
8049*67e74705SXin Li #pragma omp task // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp task' directive into a parallel region?}}
8050*67e74705SXin Li {
8051*67e74705SXin Li bar();
8052*67e74705SXin Li }
8053*67e74705SXin Li #pragma omp target
8054*67e74705SXin Li #pragma omp teams
8055*67e74705SXin Li {
8056*67e74705SXin Li #pragma omp taskyield // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskyield' directive into a parallel region?}}
8057*67e74705SXin Li bar();
8058*67e74705SXin Li }
8059*67e74705SXin Li #pragma omp target
8060*67e74705SXin Li #pragma omp teams
8061*67e74705SXin Li {
8062*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp barrier' directive into a parallel region?}}
8063*67e74705SXin Li bar();
8064*67e74705SXin Li }
8065*67e74705SXin Li #pragma omp target
8066*67e74705SXin Li #pragma omp teams
8067*67e74705SXin Li {
8068*67e74705SXin Li #pragma omp taskwait // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskwait' directive into a parallel region?}}
8069*67e74705SXin Li bar();
8070*67e74705SXin Li }
8071*67e74705SXin Li #pragma omp target
8072*67e74705SXin Li #pragma omp teams
8073*67e74705SXin Li {
8074*67e74705SXin Li #pragma omp flush // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp flush' directive into a parallel region?}}
8075*67e74705SXin Li bar();
8076*67e74705SXin Li }
8077*67e74705SXin Li #pragma omp target
8078*67e74705SXin Li #pragma omp teams
8079*67e74705SXin Li {
8080*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8081*67e74705SXin Li bar();
8082*67e74705SXin Li }
8083*67e74705SXin Li #pragma omp target
8084*67e74705SXin Li #pragma omp teams
8085*67e74705SXin Li {
8086*67e74705SXin Li #pragma omp atomic // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp atomic' directive into a parallel region?}}
8087*67e74705SXin Li ++a;
8088*67e74705SXin Li }
8089*67e74705SXin Li #pragma omp target
8090*67e74705SXin Li #pragma omp teams
8091*67e74705SXin Li {
8092*67e74705SXin Li #pragma omp target // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target' directive into a parallel region?}}
8093*67e74705SXin Li ++a;
8094*67e74705SXin Li }
8095*67e74705SXin Li #pragma omp target
8096*67e74705SXin Li #pragma omp teams
8097*67e74705SXin Li {
8098*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
8099*67e74705SXin Li ++a;
8100*67e74705SXin Li }
8101*67e74705SXin Li #pragma omp target
8102*67e74705SXin Li #pragma omp teams
8103*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8104*67e74705SXin Li for (int i = 0; i < 10; ++i)
8105*67e74705SXin Li ;
8106*67e74705SXin Li #pragma omp target
8107*67e74705SXin Li #pragma omp teams
8108*67e74705SXin Li {
8109*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target enter data' directive into a parallel region?}}
8110*67e74705SXin Li }
8111*67e74705SXin Li #pragma omp target
8112*67e74705SXin Li #pragma omp teams
8113*67e74705SXin Li {
8114*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target exit data' directive into a parallel region?}}
8115*67e74705SXin Li }
8116*67e74705SXin Li #pragma omp target
8117*67e74705SXin Li #pragma omp teams
8118*67e74705SXin Li {
8119*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8120*67e74705SXin Li ++a;
8121*67e74705SXin Li }
8122*67e74705SXin Li #pragma omp target
8123*67e74705SXin Li #pragma omp teams
8124*67e74705SXin Li {
8125*67e74705SXin Li #pragma omp taskloop // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp taskloop' directive into a parallel region?}}
8126*67e74705SXin Li for (int i = 0; i < 10; ++i)
8127*67e74705SXin Li ++a;
8128*67e74705SXin Li }
8129*67e74705SXin Li #pragma omp target
8130*67e74705SXin Li #pragma omp teams
8131*67e74705SXin Li #pragma omp distribute
8132*67e74705SXin Li for (int i = 0; i < 10; ++i)
8133*67e74705SXin Li ;
8134*67e74705SXin Li #pragma omp target
8135*67e74705SXin Li #pragma omp teams
8136*67e74705SXin Li #pragma omp distribute
8137*67e74705SXin Li for (int i = 0; i < 10; ++i)
8138*67e74705SXin Li ;
8139*67e74705SXin Li #pragma omp distribute
8140*67e74705SXin Li for (int j = 0; j < 10; ++j)
8141*67e74705SXin Li ;
8142*67e74705SXin Li #pragma omp target
8143*67e74705SXin Li #pragma omp teams
8144*67e74705SXin Li {
8145*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be closely nested inside 'teams' region; perhaps you forget to enclose 'omp target update' directive into a parallel region?}}
8146*67e74705SXin Li ++a;
8147*67e74705SXin Li }
8148*67e74705SXin Li #pragma omp target
8149*67e74705SXin Li #pragma omp teams
8150*67e74705SXin Li #pragma omp distribute parallel for
8151*67e74705SXin Li for (int i = 0; i < 10; ++i)
8152*67e74705SXin Li ;
8153*67e74705SXin Li #pragma omp target
8154*67e74705SXin Li #pragma omp teams
8155*67e74705SXin Li {
8156*67e74705SXin Li #pragma omp distribute parallel for
8157*67e74705SXin Li for (int i = 0; i < 10; ++i)
8158*67e74705SXin Li ;
8159*67e74705SXin Li #pragma omp distribute parallel for
8160*67e74705SXin Li for (int j = 0; j < 10; ++j)
8161*67e74705SXin Li ;
8162*67e74705SXin Li }
8163*67e74705SXin Li #pragma omp target
8164*67e74705SXin Li #pragma omp teams
8165*67e74705SXin Li {
8166*67e74705SXin Li #pragma omp distribute parallel for simd
8167*67e74705SXin Li for (int i = 0; i < 10; ++i)
8168*67e74705SXin Li ;
8169*67e74705SXin Li #pragma omp distribute parallel for simd
8170*67e74705SXin Li for (int j = 0; j < 10; ++j)
8171*67e74705SXin Li ;
8172*67e74705SXin Li }
8173*67e74705SXin Li #pragma omp target
8174*67e74705SXin Li #pragma omp teams
8175*67e74705SXin Li {
8176*67e74705SXin Li #pragma omp distribute simd
8177*67e74705SXin Li for (int i = 0; i < 10; ++i)
8178*67e74705SXin Li ;
8179*67e74705SXin Li #pragma omp distribute simd
8180*67e74705SXin Li for (int j = 0; j < 10; ++j)
8181*67e74705SXin Li ;
8182*67e74705SXin Li }
8183*67e74705SXin Li
8184*67e74705SXin Li // TASKLOOP DIRECTIVE
8185*67e74705SXin Li #pragma omp taskloop
8186*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8187*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
8188*67e74705SXin Li for (int i = 0; i < 10; ++i)
8189*67e74705SXin Li ;
8190*67e74705SXin Li }
8191*67e74705SXin Li #pragma omp taskloop
8192*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8193*67e74705SXin Li #pragma omp simd
8194*67e74705SXin Li for (int i = 0; i < 10; ++i)
8195*67e74705SXin Li ;
8196*67e74705SXin Li }
8197*67e74705SXin Li #pragma omp taskloop
8198*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8199*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8200*67e74705SXin Li for (int i = 0; i < 10; ++i)
8201*67e74705SXin Li ;
8202*67e74705SXin Li }
8203*67e74705SXin Li #pragma omp taskloop
8204*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8205*67e74705SXin Li #pragma omp parallel
8206*67e74705SXin Li for (int i = 0; i < 10; ++i)
8207*67e74705SXin Li ;
8208*67e74705SXin Li }
8209*67e74705SXin Li #pragma omp taskloop
8210*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8211*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8212*67e74705SXin Li {
8213*67e74705SXin Li bar();
8214*67e74705SXin Li }
8215*67e74705SXin Li }
8216*67e74705SXin Li #pragma omp taskloop
8217*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8218*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a taskloop region}}
8219*67e74705SXin Li {
8220*67e74705SXin Li bar();
8221*67e74705SXin Li }
8222*67e74705SXin Li }
8223*67e74705SXin Li #pragma omp taskloop
8224*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8225*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8226*67e74705SXin Li {
8227*67e74705SXin Li bar();
8228*67e74705SXin Li }
8229*67e74705SXin Li }
8230*67e74705SXin Li
8231*67e74705SXin Li #pragma omp taskloop
8232*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8233*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'taskloop' region}}
8234*67e74705SXin Li {
8235*67e74705SXin Li bar();
8236*67e74705SXin Li }
8237*67e74705SXin Li }
8238*67e74705SXin Li #pragma omp taskloop
8239*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8240*67e74705SXin Li #pragma omp critical
8241*67e74705SXin Li {
8242*67e74705SXin Li bar();
8243*67e74705SXin Li }
8244*67e74705SXin Li }
8245*67e74705SXin Li #pragma omp taskloop
8246*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8247*67e74705SXin Li #pragma omp parallel
8248*67e74705SXin Li {
8249*67e74705SXin Li #pragma omp single // OK
8250*67e74705SXin Li {
8251*67e74705SXin Li bar();
8252*67e74705SXin Li }
8253*67e74705SXin Li #pragma omp for // OK
8254*67e74705SXin Li for (int i = 0; i < 10; ++i)
8255*67e74705SXin Li ;
8256*67e74705SXin Li #pragma omp sections // OK
8257*67e74705SXin Li {
8258*67e74705SXin Li bar();
8259*67e74705SXin Li }
8260*67e74705SXin Li }
8261*67e74705SXin Li }
8262*67e74705SXin Li #pragma omp taskloop
8263*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8264*67e74705SXin Li #pragma omp parallel for
8265*67e74705SXin Li for (int i = 0; i < 10; ++i)
8266*67e74705SXin Li ;
8267*67e74705SXin Li }
8268*67e74705SXin Li #pragma omp taskloop
8269*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8270*67e74705SXin Li #pragma omp parallel for simd
8271*67e74705SXin Li for (int i = 0; i < 10; ++i)
8272*67e74705SXin Li ;
8273*67e74705SXin Li }
8274*67e74705SXin Li #pragma omp taskloop
8275*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8276*67e74705SXin Li #pragma omp parallel sections
8277*67e74705SXin Li {
8278*67e74705SXin Li bar();
8279*67e74705SXin Li }
8280*67e74705SXin Li }
8281*67e74705SXin Li #pragma omp taskloop
8282*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8283*67e74705SXin Li #pragma omp task
8284*67e74705SXin Li {
8285*67e74705SXin Li bar();
8286*67e74705SXin Li }
8287*67e74705SXin Li }
8288*67e74705SXin Li #pragma omp taskloop
8289*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8290*67e74705SXin Li #pragma omp taskyield
8291*67e74705SXin Li bar();
8292*67e74705SXin Li }
8293*67e74705SXin Li #pragma omp taskloop
8294*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8295*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'taskloop' region}}
8296*67e74705SXin Li bar();
8297*67e74705SXin Li }
8298*67e74705SXin Li #pragma omp taskloop
8299*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8300*67e74705SXin Li #pragma omp taskwait
8301*67e74705SXin Li bar();
8302*67e74705SXin Li }
8303*67e74705SXin Li #pragma omp taskloop
8304*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8305*67e74705SXin Li #pragma omp flush
8306*67e74705SXin Li bar();
8307*67e74705SXin Li }
8308*67e74705SXin Li #pragma omp taskloop
8309*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8310*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8311*67e74705SXin Li bar();
8312*67e74705SXin Li }
8313*67e74705SXin Li #pragma omp taskloop
8314*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8315*67e74705SXin Li #pragma omp atomic
8316*67e74705SXin Li ++a;
8317*67e74705SXin Li }
8318*67e74705SXin Li #pragma omp taskloop
8319*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8320*67e74705SXin Li #pragma omp target
8321*67e74705SXin Li ++a;
8322*67e74705SXin Li }
8323*67e74705SXin Li #pragma omp taskloop
8324*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8325*67e74705SXin Li #pragma omp target parallel
8326*67e74705SXin Li ++a;
8327*67e74705SXin Li }
8328*67e74705SXin Li #pragma omp taskloop
8329*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8330*67e74705SXin Li #pragma omp target parallel for
8331*67e74705SXin Li for (int i = 0; i < 10; ++i)
8332*67e74705SXin Li ;
8333*67e74705SXin Li }
8334*67e74705SXin Li #pragma omp taskloop
8335*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8336*67e74705SXin Li #pragma omp target enter data map(to: a)
8337*67e74705SXin Li ++a;
8338*67e74705SXin Li }
8339*67e74705SXin Li #pragma omp taskloop
8340*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8341*67e74705SXin Li #pragma omp target exit data map(from: a)
8342*67e74705SXin Li ++a;
8343*67e74705SXin Li }
8344*67e74705SXin Li #pragma omp taskloop
8345*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8346*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8347*67e74705SXin Li ++a;
8348*67e74705SXin Li }
8349*67e74705SXin Li #pragma omp taskloop
8350*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8351*67e74705SXin Li #pragma omp taskloop
8352*67e74705SXin Li for (int i = 0; i < 10; ++i)
8353*67e74705SXin Li ++a;
8354*67e74705SXin Li }
8355*67e74705SXin Li #pragma omp taskloop
8356*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8357*67e74705SXin Li #pragma omp target update to(a)
8358*67e74705SXin Li ++a;
8359*67e74705SXin Li }
8360*67e74705SXin Li #pragma omp taskloop
8361*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8362*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8363*67e74705SXin Li for (int i = 0; i < 10; ++i)
8364*67e74705SXin Li ;
8365*67e74705SXin Li }
8366*67e74705SXin Li #pragma omp taskloop
8367*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8368*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
8369*67e74705SXin Li for (int i = 0; i < 10; ++i)
8370*67e74705SXin Li ;
8371*67e74705SXin Li }
8372*67e74705SXin Li #pragma omp taskloop
8373*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8374*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
8375*67e74705SXin Li for (int i = 0; i < 10; ++i)
8376*67e74705SXin Li ;
8377*67e74705SXin Li }
8378*67e74705SXin Li #pragma omp taskloop
8379*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8380*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'taskloop' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8381*67e74705SXin Li for (int i = 0; i < 10; ++i)
8382*67e74705SXin Li ;
8383*67e74705SXin Li }
8384*67e74705SXin Li
8385*67e74705SXin Li // DISTRIBUTE DIRECTIVE
8386*67e74705SXin Li #pragma omp target
8387*67e74705SXin Li #pragma omp teams
8388*67e74705SXin Li #pragma omp distribute
8389*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8390*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8391*67e74705SXin Li for (int i = 0; i < 10; ++i)
8392*67e74705SXin Li ;
8393*67e74705SXin Li }
8394*67e74705SXin Li #pragma omp target
8395*67e74705SXin Li #pragma omp teams
8396*67e74705SXin Li #pragma omp distribute
8397*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8398*67e74705SXin Li #pragma omp for
8399*67e74705SXin Li for (int i = 0; i < 10; ++i)
8400*67e74705SXin Li ;
8401*67e74705SXin Li }
8402*67e74705SXin Li #pragma omp target
8403*67e74705SXin Li #pragma omp teams
8404*67e74705SXin Li #pragma omp distribute
8405*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8406*67e74705SXin Li #pragma omp simd
8407*67e74705SXin Li for (int i = 0; i < 10; ++i)
8408*67e74705SXin Li ;
8409*67e74705SXin Li }
8410*67e74705SXin Li #pragma omp target
8411*67e74705SXin Li #pragma omp teams
8412*67e74705SXin Li #pragma omp distribute
8413*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8414*67e74705SXin Li #pragma omp for simd
8415*67e74705SXin Li for (int i = 0; i < 10; ++i)
8416*67e74705SXin Li ;
8417*67e74705SXin Li }
8418*67e74705SXin Li #pragma omp target
8419*67e74705SXin Li #pragma omp teams
8420*67e74705SXin Li #pragma omp distribute
8421*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8422*67e74705SXin Li #pragma omp parallel
8423*67e74705SXin Li for (int i = 0; i < 10; ++i)
8424*67e74705SXin Li ;
8425*67e74705SXin Li }
8426*67e74705SXin Li #pragma omp target
8427*67e74705SXin Li #pragma omp teams
8428*67e74705SXin Li #pragma omp distribute
8429*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8430*67e74705SXin Li #pragma omp sections
8431*67e74705SXin Li {
8432*67e74705SXin Li bar();
8433*67e74705SXin Li }
8434*67e74705SXin Li }
8435*67e74705SXin Li #pragma omp target
8436*67e74705SXin Li #pragma omp teams
8437*67e74705SXin Li #pragma omp distribute
8438*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8439*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute region}}
8440*67e74705SXin Li {
8441*67e74705SXin Li bar();
8442*67e74705SXin Li }
8443*67e74705SXin Li }
8444*67e74705SXin Li #pragma omp target
8445*67e74705SXin Li #pragma omp teams
8446*67e74705SXin Li #pragma omp distribute
8447*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8448*67e74705SXin Li #pragma omp single
8449*67e74705SXin Li {
8450*67e74705SXin Li bar();
8451*67e74705SXin Li }
8452*67e74705SXin Li }
8453*67e74705SXin Li #pragma omp target
8454*67e74705SXin Li #pragma omp teams
8455*67e74705SXin Li #pragma omp distribute
8456*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8457*67e74705SXin Li #pragma omp master
8458*67e74705SXin Li {
8459*67e74705SXin Li bar();
8460*67e74705SXin Li }
8461*67e74705SXin Li }
8462*67e74705SXin Li #pragma omp target
8463*67e74705SXin Li #pragma omp teams
8464*67e74705SXin Li #pragma omp distribute
8465*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8466*67e74705SXin Li #pragma omp critical
8467*67e74705SXin Li {
8468*67e74705SXin Li bar();
8469*67e74705SXin Li }
8470*67e74705SXin Li }
8471*67e74705SXin Li #pragma omp target
8472*67e74705SXin Li #pragma omp teams
8473*67e74705SXin Li #pragma omp distribute
8474*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8475*67e74705SXin Li #pragma omp parallel
8476*67e74705SXin Li {
8477*67e74705SXin Li #pragma omp single
8478*67e74705SXin Li {
8479*67e74705SXin Li bar();
8480*67e74705SXin Li }
8481*67e74705SXin Li }
8482*67e74705SXin Li }
8483*67e74705SXin Li #pragma omp target
8484*67e74705SXin Li #pragma omp teams
8485*67e74705SXin Li #pragma omp distribute
8486*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8487*67e74705SXin Li #pragma omp parallel for
8488*67e74705SXin Li for (int i = 0; i < 10; ++i)
8489*67e74705SXin Li ;
8490*67e74705SXin Li }
8491*67e74705SXin Li #pragma omp target
8492*67e74705SXin Li #pragma omp teams
8493*67e74705SXin Li #pragma omp distribute
8494*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8495*67e74705SXin Li #pragma omp parallel for simd
8496*67e74705SXin Li for (int i = 0; i < 10; ++i)
8497*67e74705SXin Li ;
8498*67e74705SXin Li }
8499*67e74705SXin Li #pragma omp target
8500*67e74705SXin Li #pragma omp teams
8501*67e74705SXin Li #pragma omp distribute
8502*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8503*67e74705SXin Li #pragma omp parallel sections
8504*67e74705SXin Li {
8505*67e74705SXin Li bar();
8506*67e74705SXin Li }
8507*67e74705SXin Li }
8508*67e74705SXin Li #pragma omp target
8509*67e74705SXin Li #pragma omp teams
8510*67e74705SXin Li #pragma omp distribute
8511*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8512*67e74705SXin Li #pragma omp task
8513*67e74705SXin Li {
8514*67e74705SXin Li bar();
8515*67e74705SXin Li }
8516*67e74705SXin Li }
8517*67e74705SXin Li #pragma omp target
8518*67e74705SXin Li #pragma omp teams
8519*67e74705SXin Li #pragma omp distribute
8520*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8521*67e74705SXin Li #pragma omp taskyield
8522*67e74705SXin Li bar();
8523*67e74705SXin Li }
8524*67e74705SXin Li #pragma omp target
8525*67e74705SXin Li #pragma omp teams
8526*67e74705SXin Li #pragma omp distribute
8527*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8528*67e74705SXin Li #pragma omp barrier
8529*67e74705SXin Li bar();
8530*67e74705SXin Li }
8531*67e74705SXin Li #pragma omp target
8532*67e74705SXin Li #pragma omp teams
8533*67e74705SXin Li #pragma omp distribute
8534*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8535*67e74705SXin Li #pragma omp taskwait
8536*67e74705SXin Li bar();
8537*67e74705SXin Li }
8538*67e74705SXin Li #pragma omp target
8539*67e74705SXin Li #pragma omp teams
8540*67e74705SXin Li #pragma omp distribute
8541*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8542*67e74705SXin Li #pragma omp flush
8543*67e74705SXin Li bar();
8544*67e74705SXin Li }
8545*67e74705SXin Li #pragma omp target
8546*67e74705SXin Li #pragma omp teams
8547*67e74705SXin Li #pragma omp distribute
8548*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8549*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8550*67e74705SXin Li bar();
8551*67e74705SXin Li }
8552*67e74705SXin Li #pragma omp target
8553*67e74705SXin Li #pragma omp teams
8554*67e74705SXin Li #pragma omp distribute
8555*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8556*67e74705SXin Li #pragma omp atomic
8557*67e74705SXin Li ++a;
8558*67e74705SXin Li }
8559*67e74705SXin Li #pragma omp target
8560*67e74705SXin Li #pragma omp teams
8561*67e74705SXin Li #pragma omp distribute
8562*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8563*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8564*67e74705SXin Li ++a;
8565*67e74705SXin Li }
8566*67e74705SXin Li #pragma omp target
8567*67e74705SXin Li #pragma omp teams
8568*67e74705SXin Li #pragma omp distribute
8569*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8570*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
8571*67e74705SXin Li ++a;
8572*67e74705SXin Li }
8573*67e74705SXin Li #pragma omp target
8574*67e74705SXin Li #pragma omp teams
8575*67e74705SXin Li #pragma omp distribute
8576*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8577*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8578*67e74705SXin Li for (int i = 0; i < 10; ++i)
8579*67e74705SXin Li ;
8580*67e74705SXin Li }
8581*67e74705SXin Li #pragma omp target
8582*67e74705SXin Li #pragma omp teams
8583*67e74705SXin Li #pragma omp distribute
8584*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8585*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8586*67e74705SXin Li ++a;
8587*67e74705SXin Li }
8588*67e74705SXin Li return foo<int>();
8589*67e74705SXin Li #pragma omp target
8590*67e74705SXin Li #pragma omp teams
8591*67e74705SXin Li #pragma omp distribute
8592*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8593*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8594*67e74705SXin Li ++a;
8595*67e74705SXin Li }
8596*67e74705SXin Li #pragma omp target
8597*67e74705SXin Li #pragma omp teams
8598*67e74705SXin Li #pragma omp distribute
8599*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8600*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8601*67e74705SXin Li ++a;
8602*67e74705SXin Li }
8603*67e74705SXin Li #pragma omp target
8604*67e74705SXin Li #pragma omp teams
8605*67e74705SXin Li #pragma omp distribute
8606*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8607*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8608*67e74705SXin Li ++a;
8609*67e74705SXin Li }
8610*67e74705SXin Li #pragma omp target
8611*67e74705SXin Li #pragma omp teams
8612*67e74705SXin Li #pragma omp distribute
8613*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8614*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
8615*67e74705SXin Li for (int i = 0; i < 10; ++i)
8616*67e74705SXin Li ++a;
8617*67e74705SXin Li }
8618*67e74705SXin Li #pragma omp target
8619*67e74705SXin Li #pragma omp teams
8620*67e74705SXin Li #pragma omp distribute
8621*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8622*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute parallel for simd' directive into a teams region?}}
8623*67e74705SXin Li for (int i = 0; i < 10; ++i)
8624*67e74705SXin Li ++a;
8625*67e74705SXin Li }
8626*67e74705SXin Li #pragma omp target
8627*67e74705SXin Li #pragma omp teams
8628*67e74705SXin Li #pragma omp distribute
8629*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8630*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'distribute' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8631*67e74705SXin Li for (int i = 0; i < 10; ++i)
8632*67e74705SXin Li ++a;
8633*67e74705SXin Li }
8634*67e74705SXin Li
8635*67e74705SXin Li // DISTRIBUTE PARALLEL FOR DIRECTIVE
8636*67e74705SXin Li #pragma omp target
8637*67e74705SXin Li #pragma omp teams
8638*67e74705SXin Li #pragma omp distribute parallel for
8639*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8640*67e74705SXin Li #pragma omp distribute parallel for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute parallel for' directive into a teams region?}}
8641*67e74705SXin Li for (int i = 0; i < 10; ++i)
8642*67e74705SXin Li ;
8643*67e74705SXin Li }
8644*67e74705SXin Li
8645*67e74705SXin Li #pragma omp target
8646*67e74705SXin Li #pragma omp teams
8647*67e74705SXin Li #pragma omp distribute parallel for
8648*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8649*67e74705SXin Li #pragma omp distribute // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute' directive into a teams region?}}
8650*67e74705SXin Li for (int i = 0; i < 10; ++i)
8651*67e74705SXin Li ;
8652*67e74705SXin Li }
8653*67e74705SXin Li #pragma omp target
8654*67e74705SXin Li #pragma omp teams
8655*67e74705SXin Li #pragma omp distribute parallel for
8656*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8657*67e74705SXin Li #pragma omp for // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for' directive into a parallel region?}}
8658*67e74705SXin Li for (int i = 0; i < 10; ++i)
8659*67e74705SXin Li ;
8660*67e74705SXin Li }
8661*67e74705SXin Li #pragma omp target
8662*67e74705SXin Li #pragma omp teams
8663*67e74705SXin Li #pragma omp distribute parallel for
8664*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8665*67e74705SXin Li #pragma omp simd
8666*67e74705SXin Li for (int i = 0; i < 10; ++i)
8667*67e74705SXin Li ;
8668*67e74705SXin Li }
8669*67e74705SXin Li #pragma omp target
8670*67e74705SXin Li #pragma omp teams
8671*67e74705SXin Li #pragma omp distribute parallel for
8672*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8673*67e74705SXin Li #pragma omp for simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp for simd' directive into a parallel region?}}
8674*67e74705SXin Li for (int i = 0; i < 10; ++i)
8675*67e74705SXin Li ;
8676*67e74705SXin Li }
8677*67e74705SXin Li #pragma omp target
8678*67e74705SXin Li #pragma omp teams
8679*67e74705SXin Li #pragma omp distribute parallel for
8680*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8681*67e74705SXin Li #pragma omp parallel
8682*67e74705SXin Li for (int i = 0; i < 10; ++i)
8683*67e74705SXin Li ;
8684*67e74705SXin Li }
8685*67e74705SXin Li #pragma omp target
8686*67e74705SXin Li #pragma omp teams
8687*67e74705SXin Li #pragma omp distribute parallel for
8688*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8689*67e74705SXin Li #pragma omp sections // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp sections' directive into a parallel region?}}
8690*67e74705SXin Li {
8691*67e74705SXin Li bar();
8692*67e74705SXin Li }
8693*67e74705SXin Li }
8694*67e74705SXin Li #pragma omp target
8695*67e74705SXin Li #pragma omp teams
8696*67e74705SXin Li #pragma omp distribute parallel for
8697*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8698*67e74705SXin Li #pragma omp section // expected-error {{'omp section' directive must be closely nested to a sections region, not a distribute parallel for region}}
8699*67e74705SXin Li {
8700*67e74705SXin Li bar();
8701*67e74705SXin Li }
8702*67e74705SXin Li }
8703*67e74705SXin Li #pragma omp target
8704*67e74705SXin Li #pragma omp teams
8705*67e74705SXin Li #pragma omp distribute parallel for
8706*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8707*67e74705SXin Li #pragma omp single // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp single' directive into a parallel region?}}
8708*67e74705SXin Li {
8709*67e74705SXin Li bar();
8710*67e74705SXin Li }
8711*67e74705SXin Li }
8712*67e74705SXin Li #pragma omp target
8713*67e74705SXin Li #pragma omp teams
8714*67e74705SXin Li #pragma omp distribute parallel for
8715*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8716*67e74705SXin Li #pragma omp master // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
8717*67e74705SXin Li {
8718*67e74705SXin Li bar();
8719*67e74705SXin Li }
8720*67e74705SXin Li }
8721*67e74705SXin Li #pragma omp target
8722*67e74705SXin Li #pragma omp teams
8723*67e74705SXin Li #pragma omp distribute parallel for
8724*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8725*67e74705SXin Li #pragma omp critical
8726*67e74705SXin Li {
8727*67e74705SXin Li bar();
8728*67e74705SXin Li }
8729*67e74705SXin Li }
8730*67e74705SXin Li #pragma omp target
8731*67e74705SXin Li #pragma omp teams
8732*67e74705SXin Li #pragma omp distribute parallel for
8733*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8734*67e74705SXin Li #pragma omp parallel
8735*67e74705SXin Li {
8736*67e74705SXin Li #pragma omp single
8737*67e74705SXin Li {
8738*67e74705SXin Li bar();
8739*67e74705SXin Li }
8740*67e74705SXin Li }
8741*67e74705SXin Li }
8742*67e74705SXin Li #pragma omp target
8743*67e74705SXin Li #pragma omp teams
8744*67e74705SXin Li #pragma omp distribute parallel for
8745*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8746*67e74705SXin Li #pragma omp parallel for
8747*67e74705SXin Li for (int i = 0; i < 10; ++i)
8748*67e74705SXin Li ;
8749*67e74705SXin Li }
8750*67e74705SXin Li #pragma omp target
8751*67e74705SXin Li #pragma omp teams
8752*67e74705SXin Li #pragma omp distribute parallel for
8753*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8754*67e74705SXin Li #pragma omp parallel for simd
8755*67e74705SXin Li for (int i = 0; i < 10; ++i)
8756*67e74705SXin Li ;
8757*67e74705SXin Li }
8758*67e74705SXin Li #pragma omp target
8759*67e74705SXin Li #pragma omp teams
8760*67e74705SXin Li #pragma omp distribute parallel for
8761*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8762*67e74705SXin Li #pragma omp parallel sections
8763*67e74705SXin Li {
8764*67e74705SXin Li bar();
8765*67e74705SXin Li }
8766*67e74705SXin Li }
8767*67e74705SXin Li #pragma omp target
8768*67e74705SXin Li #pragma omp teams
8769*67e74705SXin Li #pragma omp distribute parallel for
8770*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8771*67e74705SXin Li #pragma omp task
8772*67e74705SXin Li {
8773*67e74705SXin Li bar();
8774*67e74705SXin Li }
8775*67e74705SXin Li }
8776*67e74705SXin Li #pragma omp target
8777*67e74705SXin Li #pragma omp teams
8778*67e74705SXin Li #pragma omp distribute parallel for
8779*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8780*67e74705SXin Li #pragma omp taskyield
8781*67e74705SXin Li bar();
8782*67e74705SXin Li }
8783*67e74705SXin Li #pragma omp target
8784*67e74705SXin Li #pragma omp teams
8785*67e74705SXin Li #pragma omp distribute parallel for
8786*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8787*67e74705SXin Li #pragma omp barrier // expected-error {{region cannot be closely nested inside 'distribute parallel for' region}}
8788*67e74705SXin Li bar();
8789*67e74705SXin Li }
8790*67e74705SXin Li #pragma omp target
8791*67e74705SXin Li #pragma omp teams
8792*67e74705SXin Li #pragma omp distribute parallel for
8793*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8794*67e74705SXin Li #pragma omp taskwait
8795*67e74705SXin Li bar();
8796*67e74705SXin Li }
8797*67e74705SXin Li #pragma omp target
8798*67e74705SXin Li #pragma omp teams
8799*67e74705SXin Li #pragma omp distribute parallel for
8800*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8801*67e74705SXin Li #pragma omp flush
8802*67e74705SXin Li bar();
8803*67e74705SXin Li }
8804*67e74705SXin Li #pragma omp target
8805*67e74705SXin Li #pragma omp teams
8806*67e74705SXin Li #pragma omp distribute parallel for
8807*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8808*67e74705SXin Li #pragma omp ordered // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp ordered' directive into a for or a parallel for region with 'ordered' clause?}}
8809*67e74705SXin Li bar();
8810*67e74705SXin Li }
8811*67e74705SXin Li #pragma omp target
8812*67e74705SXin Li #pragma omp teams
8813*67e74705SXin Li #pragma omp distribute parallel for
8814*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8815*67e74705SXin Li #pragma omp atomic
8816*67e74705SXin Li ++a;
8817*67e74705SXin Li }
8818*67e74705SXin Li #pragma omp target
8819*67e74705SXin Li #pragma omp teams
8820*67e74705SXin Li #pragma omp distribute parallel for
8821*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8822*67e74705SXin Li #pragma omp target // expected-error {{region cannot be nested inside 'target' region}}
8823*67e74705SXin Li ++a;
8824*67e74705SXin Li }
8825*67e74705SXin Li #pragma omp target
8826*67e74705SXin Li #pragma omp teams
8827*67e74705SXin Li #pragma omp distribute parallel for
8828*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8829*67e74705SXin Li #pragma omp target parallel // expected-error {{region cannot be nested inside 'target' region}}
8830*67e74705SXin Li ++a;
8831*67e74705SXin Li }
8832*67e74705SXin Li #pragma omp target
8833*67e74705SXin Li #pragma omp teams
8834*67e74705SXin Li #pragma omp distribute parallel for
8835*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8836*67e74705SXin Li #pragma omp target parallel for // expected-error {{region cannot be nested inside 'target' region}}
8837*67e74705SXin Li for (int i = 0; i < 10; ++i)
8838*67e74705SXin Li ;
8839*67e74705SXin Li }
8840*67e74705SXin Li #pragma omp target
8841*67e74705SXin Li #pragma omp teams
8842*67e74705SXin Li #pragma omp distribute parallel for
8843*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8844*67e74705SXin Li #pragma omp teams // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp teams' directive into a target region?}}
8845*67e74705SXin Li ++a;
8846*67e74705SXin Li }
8847*67e74705SXin Li return foo<int>();
8848*67e74705SXin Li #pragma omp target
8849*67e74705SXin Li #pragma omp teams
8850*67e74705SXin Li #pragma omp distribute parallel for
8851*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8852*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{region cannot be nested inside 'target' region}}
8853*67e74705SXin Li ++a;
8854*67e74705SXin Li }
8855*67e74705SXin Li #pragma omp target
8856*67e74705SXin Li #pragma omp teams
8857*67e74705SXin Li #pragma omp distribute parallel for
8858*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8859*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{region cannot be nested inside 'target' region}}
8860*67e74705SXin Li ++a;
8861*67e74705SXin Li }
8862*67e74705SXin Li #pragma omp target
8863*67e74705SXin Li #pragma omp teams
8864*67e74705SXin Li #pragma omp distribute parallel for
8865*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8866*67e74705SXin Li #pragma omp target update to(a) // expected-error {{region cannot be nested inside 'target' region}}
8867*67e74705SXin Li ++a;
8868*67e74705SXin Li }
8869*67e74705SXin Li #pragma omp target
8870*67e74705SXin Li #pragma omp teams
8871*67e74705SXin Li #pragma omp distribute parallel for
8872*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8873*67e74705SXin Li #pragma omp distribute simd // expected-error {{region cannot be closely nested inside 'distribute parallel for' region; perhaps you forget to enclose 'omp distribute simd' directive into a teams region?}}
8874*67e74705SXin Li for (int i = 0; i < 10; ++i)
8875*67e74705SXin Li ++a;
8876*67e74705SXin Li }
8877*67e74705SXin Li
8878*67e74705SXin Li // DISTRIBUTE PARALLEL FOR SIMD DIRECTIVE
8879*67e74705SXin Li #pragma omp target
8880*67e74705SXin Li #pragma omp teams
8881*67e74705SXin Li #pragma omp distribute parallel for simd
8882*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8883*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8884*67e74705SXin Li for (int i = 0; i < 10; ++i)
8885*67e74705SXin Li ;
8886*67e74705SXin Li }
8887*67e74705SXin Li #pragma omp target
8888*67e74705SXin Li #pragma omp teams
8889*67e74705SXin Li #pragma omp distribute parallel for simd
8890*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8891*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8892*67e74705SXin Li for (int i = 0; i < 10; ++i)
8893*67e74705SXin Li ;
8894*67e74705SXin Li }
8895*67e74705SXin Li #pragma omp target
8896*67e74705SXin Li #pragma omp teams
8897*67e74705SXin Li #pragma omp distribute parallel for simd
8898*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8899*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8900*67e74705SXin Li for (int i = 0; i < 10; ++i)
8901*67e74705SXin Li ;
8902*67e74705SXin Li }
8903*67e74705SXin Li #pragma omp target
8904*67e74705SXin Li #pragma omp teams
8905*67e74705SXin Li #pragma omp distribute parallel for simd
8906*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8907*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
8908*67e74705SXin Li for (int i = 0; i < 10; ++i)
8909*67e74705SXin Li ;
8910*67e74705SXin Li }
8911*67e74705SXin Li #pragma omp target
8912*67e74705SXin Li #pragma omp teams
8913*67e74705SXin Li #pragma omp distribute parallel for simd
8914*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8915*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8916*67e74705SXin Li for (int i = 0; i < 10; ++i)
8917*67e74705SXin Li ;
8918*67e74705SXin Li }
8919*67e74705SXin Li #pragma omp target
8920*67e74705SXin Li #pragma omp teams
8921*67e74705SXin Li #pragma omp distribute parallel for simd
8922*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8923*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8924*67e74705SXin Li for (int i = 0; i < 10; ++i)
8925*67e74705SXin Li ;
8926*67e74705SXin Li }
8927*67e74705SXin Li #pragma omp target
8928*67e74705SXin Li #pragma omp teams
8929*67e74705SXin Li #pragma omp distribute parallel for simd
8930*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8931*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8932*67e74705SXin Li {
8933*67e74705SXin Li bar();
8934*67e74705SXin Li }
8935*67e74705SXin Li }
8936*67e74705SXin Li #pragma omp target
8937*67e74705SXin Li #pragma omp teams
8938*67e74705SXin Li #pragma omp distribute parallel for simd
8939*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8940*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8941*67e74705SXin Li {
8942*67e74705SXin Li bar();
8943*67e74705SXin Li }
8944*67e74705SXin Li }
8945*67e74705SXin Li #pragma omp target
8946*67e74705SXin Li #pragma omp teams
8947*67e74705SXin Li #pragma omp distribute parallel for simd
8948*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8949*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8950*67e74705SXin Li {
8951*67e74705SXin Li bar();
8952*67e74705SXin Li }
8953*67e74705SXin Li }
8954*67e74705SXin Li #pragma omp target
8955*67e74705SXin Li #pragma omp teams
8956*67e74705SXin Li #pragma omp distribute parallel for simd
8957*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8958*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8959*67e74705SXin Li {
8960*67e74705SXin Li bar();
8961*67e74705SXin Li }
8962*67e74705SXin Li }
8963*67e74705SXin Li #pragma omp target
8964*67e74705SXin Li #pragma omp teams
8965*67e74705SXin Li #pragma omp distribute parallel for simd
8966*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8967*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8968*67e74705SXin Li {
8969*67e74705SXin Li bar();
8970*67e74705SXin Li }
8971*67e74705SXin Li }
8972*67e74705SXin Li #pragma omp target
8973*67e74705SXin Li #pragma omp teams
8974*67e74705SXin Li #pragma omp distribute parallel for simd
8975*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8976*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8977*67e74705SXin Li {
8978*67e74705SXin Li #pragma omp single
8979*67e74705SXin Li {
8980*67e74705SXin Li bar();
8981*67e74705SXin Li }
8982*67e74705SXin Li }
8983*67e74705SXin Li }
8984*67e74705SXin Li #pragma omp target
8985*67e74705SXin Li #pragma omp teams
8986*67e74705SXin Li #pragma omp distribute parallel for simd
8987*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8988*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8989*67e74705SXin Li for (int i = 0; i < 10; ++i)
8990*67e74705SXin Li ;
8991*67e74705SXin Li }
8992*67e74705SXin Li #pragma omp target
8993*67e74705SXin Li #pragma omp teams
8994*67e74705SXin Li #pragma omp distribute parallel for simd
8995*67e74705SXin Li for (int i = 0; i < 10; ++i) {
8996*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
8997*67e74705SXin Li for (int i = 0; i < 10; ++i)
8998*67e74705SXin Li ;
8999*67e74705SXin Li }
9000*67e74705SXin Li #pragma omp target
9001*67e74705SXin Li #pragma omp teams
9002*67e74705SXin Li #pragma omp distribute parallel for simd
9003*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9004*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9005*67e74705SXin Li {
9006*67e74705SXin Li bar();
9007*67e74705SXin Li }
9008*67e74705SXin Li }
9009*67e74705SXin Li #pragma omp target
9010*67e74705SXin Li #pragma omp teams
9011*67e74705SXin Li #pragma omp distribute parallel for simd
9012*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9013*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9014*67e74705SXin Li {
9015*67e74705SXin Li bar();
9016*67e74705SXin Li }
9017*67e74705SXin Li }
9018*67e74705SXin Li #pragma omp target
9019*67e74705SXin Li #pragma omp teams
9020*67e74705SXin Li #pragma omp distribute parallel for simd
9021*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9022*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9023*67e74705SXin Li bar();
9024*67e74705SXin Li }
9025*67e74705SXin Li #pragma omp target
9026*67e74705SXin Li #pragma omp teams
9027*67e74705SXin Li #pragma omp distribute parallel for simd
9028*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9029*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9030*67e74705SXin Li bar();
9031*67e74705SXin Li }
9032*67e74705SXin Li #pragma omp target
9033*67e74705SXin Li #pragma omp teams
9034*67e74705SXin Li #pragma omp distribute parallel for simd
9035*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9036*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9037*67e74705SXin Li bar();
9038*67e74705SXin Li }
9039*67e74705SXin Li #pragma omp target
9040*67e74705SXin Li #pragma omp teams
9041*67e74705SXin Li #pragma omp distribute parallel for simd
9042*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9043*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9044*67e74705SXin Li bar();
9045*67e74705SXin Li }
9046*67e74705SXin Li #pragma omp target
9047*67e74705SXin Li #pragma omp teams
9048*67e74705SXin Li #pragma omp distribute parallel for simd
9049*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9050*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9051*67e74705SXin Li bar();
9052*67e74705SXin Li }
9053*67e74705SXin Li #pragma omp target
9054*67e74705SXin Li #pragma omp teams
9055*67e74705SXin Li #pragma omp distribute parallel for simd
9056*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9057*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9058*67e74705SXin Li ++a;
9059*67e74705SXin Li }
9060*67e74705SXin Li #pragma omp target
9061*67e74705SXin Li #pragma omp teams
9062*67e74705SXin Li #pragma omp distribute parallel for simd
9063*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9064*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9065*67e74705SXin Li ++a;
9066*67e74705SXin Li }
9067*67e74705SXin Li #pragma omp target
9068*67e74705SXin Li #pragma omp teams
9069*67e74705SXin Li #pragma omp distribute parallel for simd
9070*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9071*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9072*67e74705SXin Li ++a;
9073*67e74705SXin Li }
9074*67e74705SXin Li #pragma omp target
9075*67e74705SXin Li #pragma omp teams
9076*67e74705SXin Li #pragma omp distribute parallel for simd
9077*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9078*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9079*67e74705SXin Li ++a;
9080*67e74705SXin Li }
9081*67e74705SXin Li return foo<int>();
9082*67e74705SXin Li #pragma omp target
9083*67e74705SXin Li #pragma omp teams
9084*67e74705SXin Li #pragma omp distribute parallel for simd
9085*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9086*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9087*67e74705SXin Li ++a;
9088*67e74705SXin Li }
9089*67e74705SXin Li #pragma omp target
9090*67e74705SXin Li #pragma omp teams
9091*67e74705SXin Li #pragma omp distribute parallel for simd
9092*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9093*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9094*67e74705SXin Li ++a;
9095*67e74705SXin Li }
9096*67e74705SXin Li #pragma omp target
9097*67e74705SXin Li #pragma omp teams
9098*67e74705SXin Li #pragma omp distribute parallel for simd
9099*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9100*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9101*67e74705SXin Li ++a;
9102*67e74705SXin Li }
9103*67e74705SXin Li #pragma omp target
9104*67e74705SXin Li #pragma omp teams
9105*67e74705SXin Li #pragma omp distribute parallel for simd
9106*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9107*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9108*67e74705SXin Li for (int i = 0; i < 10; ++i)
9109*67e74705SXin Li ;
9110*67e74705SXin Li }
9111*67e74705SXin Li
9112*67e74705SXin Li // DISTRIBUTE SIMD DIRECTIVE
9113*67e74705SXin Li #pragma omp target
9114*67e74705SXin Li #pragma omp teams
9115*67e74705SXin Li #pragma omp distribute simd
9116*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9117*67e74705SXin Li #pragma omp distribute parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9118*67e74705SXin Li for (int i = 0; i < 10; ++i)
9119*67e74705SXin Li ;
9120*67e74705SXin Li }
9121*67e74705SXin Li #pragma omp target
9122*67e74705SXin Li #pragma omp teams
9123*67e74705SXin Li #pragma omp distribute simd
9124*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9125*67e74705SXin Li #pragma omp distribute // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9126*67e74705SXin Li for (int i = 0; i < 10; ++i)
9127*67e74705SXin Li ;
9128*67e74705SXin Li }
9129*67e74705SXin Li #pragma omp target
9130*67e74705SXin Li #pragma omp teams
9131*67e74705SXin Li #pragma omp distribute simd
9132*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9133*67e74705SXin Li #pragma omp for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9134*67e74705SXin Li for (int i = 0; i < 10; ++i)
9135*67e74705SXin Li ;
9136*67e74705SXin Li }
9137*67e74705SXin Li #pragma omp target
9138*67e74705SXin Li #pragma omp teams
9139*67e74705SXin Li #pragma omp distribute simd
9140*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9141*67e74705SXin Li #pragma omp simd // expected-warning {{OpenMP only allows an ordered construct with the simd clause nested in a simd construct}}
9142*67e74705SXin Li for (int i = 0; i < 10; ++i)
9143*67e74705SXin Li ;
9144*67e74705SXin Li }
9145*67e74705SXin Li #pragma omp target
9146*67e74705SXin Li #pragma omp teams
9147*67e74705SXin Li #pragma omp distribute simd
9148*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9149*67e74705SXin Li #pragma omp for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9150*67e74705SXin Li for (int i = 0; i < 10; ++i)
9151*67e74705SXin Li ;
9152*67e74705SXin Li }
9153*67e74705SXin Li #pragma omp target
9154*67e74705SXin Li #pragma omp teams
9155*67e74705SXin Li #pragma omp distribute simd
9156*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9157*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9158*67e74705SXin Li for (int i = 0; i < 10; ++i)
9159*67e74705SXin Li ;
9160*67e74705SXin Li }
9161*67e74705SXin Li #pragma omp target
9162*67e74705SXin Li #pragma omp teams
9163*67e74705SXin Li #pragma omp distribute simd
9164*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9165*67e74705SXin Li #pragma omp sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9166*67e74705SXin Li {
9167*67e74705SXin Li bar();
9168*67e74705SXin Li }
9169*67e74705SXin Li }
9170*67e74705SXin Li #pragma omp target
9171*67e74705SXin Li #pragma omp teams
9172*67e74705SXin Li #pragma omp distribute simd
9173*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9174*67e74705SXin Li #pragma omp section // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9175*67e74705SXin Li {
9176*67e74705SXin Li bar();
9177*67e74705SXin Li }
9178*67e74705SXin Li }
9179*67e74705SXin Li #pragma omp target
9180*67e74705SXin Li #pragma omp teams
9181*67e74705SXin Li #pragma omp distribute simd
9182*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9183*67e74705SXin Li #pragma omp single // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9184*67e74705SXin Li {
9185*67e74705SXin Li bar();
9186*67e74705SXin Li }
9187*67e74705SXin Li }
9188*67e74705SXin Li #pragma omp target
9189*67e74705SXin Li #pragma omp teams
9190*67e74705SXin Li #pragma omp distribute simd
9191*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9192*67e74705SXin Li #pragma omp master // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9193*67e74705SXin Li {
9194*67e74705SXin Li bar();
9195*67e74705SXin Li }
9196*67e74705SXin Li }
9197*67e74705SXin Li #pragma omp target
9198*67e74705SXin Li #pragma omp teams
9199*67e74705SXin Li #pragma omp distribute simd
9200*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9201*67e74705SXin Li #pragma omp critical // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9202*67e74705SXin Li {
9203*67e74705SXin Li bar();
9204*67e74705SXin Li }
9205*67e74705SXin Li }
9206*67e74705SXin Li #pragma omp target
9207*67e74705SXin Li #pragma omp teams
9208*67e74705SXin Li #pragma omp distribute simd
9209*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9210*67e74705SXin Li #pragma omp parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9211*67e74705SXin Li {
9212*67e74705SXin Li #pragma omp single
9213*67e74705SXin Li {
9214*67e74705SXin Li bar();
9215*67e74705SXin Li }
9216*67e74705SXin Li }
9217*67e74705SXin Li }
9218*67e74705SXin Li #pragma omp target
9219*67e74705SXin Li #pragma omp teams
9220*67e74705SXin Li #pragma omp distribute simd
9221*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9222*67e74705SXin Li #pragma omp parallel for // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9223*67e74705SXin Li for (int i = 0; i < 10; ++i)
9224*67e74705SXin Li ;
9225*67e74705SXin Li }
9226*67e74705SXin Li #pragma omp target
9227*67e74705SXin Li #pragma omp teams
9228*67e74705SXin Li #pragma omp distribute simd
9229*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9230*67e74705SXin Li #pragma omp parallel for simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9231*67e74705SXin Li for (int i = 0; i < 10; ++i)
9232*67e74705SXin Li ;
9233*67e74705SXin Li }
9234*67e74705SXin Li #pragma omp target
9235*67e74705SXin Li #pragma omp teams
9236*67e74705SXin Li #pragma omp distribute simd
9237*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9238*67e74705SXin Li #pragma omp parallel sections // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9239*67e74705SXin Li {
9240*67e74705SXin Li bar();
9241*67e74705SXin Li }
9242*67e74705SXin Li }
9243*67e74705SXin Li #pragma omp target
9244*67e74705SXin Li #pragma omp teams
9245*67e74705SXin Li #pragma omp distribute simd
9246*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9247*67e74705SXin Li #pragma omp task // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9248*67e74705SXin Li {
9249*67e74705SXin Li bar();
9250*67e74705SXin Li }
9251*67e74705SXin Li }
9252*67e74705SXin Li #pragma omp target
9253*67e74705SXin Li #pragma omp teams
9254*67e74705SXin Li #pragma omp distribute simd
9255*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9256*67e74705SXin Li #pragma omp taskyield // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9257*67e74705SXin Li bar();
9258*67e74705SXin Li }
9259*67e74705SXin Li #pragma omp target
9260*67e74705SXin Li #pragma omp teams
9261*67e74705SXin Li #pragma omp distribute simd
9262*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9263*67e74705SXin Li #pragma omp barrier // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9264*67e74705SXin Li bar();
9265*67e74705SXin Li }
9266*67e74705SXin Li #pragma omp target
9267*67e74705SXin Li #pragma omp teams
9268*67e74705SXin Li #pragma omp distribute simd
9269*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9270*67e74705SXin Li #pragma omp taskwait // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9271*67e74705SXin Li bar();
9272*67e74705SXin Li }
9273*67e74705SXin Li #pragma omp target
9274*67e74705SXin Li #pragma omp teams
9275*67e74705SXin Li #pragma omp distribute simd
9276*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9277*67e74705SXin Li #pragma omp flush // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9278*67e74705SXin Li bar();
9279*67e74705SXin Li }
9280*67e74705SXin Li #pragma omp target
9281*67e74705SXin Li #pragma omp teams
9282*67e74705SXin Li #pragma omp distribute simd
9283*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9284*67e74705SXin Li #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9285*67e74705SXin Li bar();
9286*67e74705SXin Li }
9287*67e74705SXin Li #pragma omp target
9288*67e74705SXin Li #pragma omp teams
9289*67e74705SXin Li #pragma omp distribute simd
9290*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9291*67e74705SXin Li #pragma omp atomic // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9292*67e74705SXin Li ++a;
9293*67e74705SXin Li }
9294*67e74705SXin Li #pragma omp target
9295*67e74705SXin Li #pragma omp teams
9296*67e74705SXin Li #pragma omp distribute simd
9297*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9298*67e74705SXin Li #pragma omp target // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9299*67e74705SXin Li ++a;
9300*67e74705SXin Li }
9301*67e74705SXin Li #pragma omp target
9302*67e74705SXin Li #pragma omp teams
9303*67e74705SXin Li #pragma omp distribute simd
9304*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9305*67e74705SXin Li #pragma omp target parallel // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9306*67e74705SXin Li ++a;
9307*67e74705SXin Li }
9308*67e74705SXin Li #pragma omp target
9309*67e74705SXin Li #pragma omp teams
9310*67e74705SXin Li #pragma omp distribute simd
9311*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9312*67e74705SXin Li #pragma omp teams // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9313*67e74705SXin Li ++a;
9314*67e74705SXin Li }
9315*67e74705SXin Li return foo<int>();
9316*67e74705SXin Li #pragma omp target
9317*67e74705SXin Li #pragma omp teams
9318*67e74705SXin Li #pragma omp distribute simd
9319*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9320*67e74705SXin Li #pragma omp target enter data map(to: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9321*67e74705SXin Li ++a;
9322*67e74705SXin Li }
9323*67e74705SXin Li #pragma omp target
9324*67e74705SXin Li #pragma omp teams
9325*67e74705SXin Li #pragma omp distribute simd
9326*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9327*67e74705SXin Li #pragma omp target exit data map(from: a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9328*67e74705SXin Li ++a;
9329*67e74705SXin Li }
9330*67e74705SXin Li #pragma omp target
9331*67e74705SXin Li #pragma omp teams
9332*67e74705SXin Li #pragma omp distribute simd
9333*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9334*67e74705SXin Li #pragma omp target update to(a) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9335*67e74705SXin Li ++a;
9336*67e74705SXin Li }
9337*67e74705SXin Li #pragma omp target
9338*67e74705SXin Li #pragma omp teams
9339*67e74705SXin Li #pragma omp distribute simd
9340*67e74705SXin Li for (int i = 0; i < 10; ++i) {
9341*67e74705SXin Li #pragma omp distribute simd // expected-error {{OpenMP constructs may not be nested inside a simd region}}
9342*67e74705SXin Li for (int i = 0; i < 10; ++i)
9343*67e74705SXin Li ;
9344*67e74705SXin Li }
9345*67e74705SXin Li }
9346