1/* { dg-do compile } */
2/* { dg-options "-fopenmp" } */
3
4void
5f1 (void)
6{
7  int i, j;
8  #pragma omp for
9  for (i = 0; i < 3; i++)
10    {
11      #pragma omp for		/* { dg-error "may not be closely nested" } */
12      for (j = 0; j < 3; j++)
13	;
14      #pragma omp sections	/* { dg-error "may not be closely nested" } */
15      {
16	;
17      #pragma omp section
18	;
19      }
20      #pragma omp single	/* { dg-error "may not be closely nested" } */
21	;
22    #pragma omp master		/* { dg-error "may not be closely nested" } */
23      ;
24      #pragma omp barrier	/* { dg-error "may not be closely nested" } */
25    }
26  #pragma omp sections
27  {
28    #pragma omp for		/* { dg-error "may not be closely nested" } */
29    for (j = 0; j < 3; j++)
30      ;
31  }
32  #pragma omp sections
33  {
34    #pragma omp sections	/* { dg-error "may not be closely nested" } */
35    {
36      ;
37    #pragma omp section
38      ;
39    }
40  }
41  #pragma omp sections
42  {
43    #pragma omp single		/* { dg-error "may not be closely nested" } */
44      ;
45  }
46  #pragma omp sections
47  {
48    #pragma omp master		/* { dg-error "may not be closely nested" } */
49      ;
50  }
51  #pragma omp sections
52  {
53    #pragma omp section
54      ;
55  }
56  #pragma omp sections
57  {
58    #pragma omp section
59    #pragma omp for		/* { dg-error "may not be closely nested" } */
60    for (j = 0; j < 3; j++)
61      ;
62  }
63  #pragma omp sections
64  {
65    #pragma omp section
66    #pragma omp sections	/* { dg-error "may not be closely nested" } */
67    {
68      ;
69    #pragma omp section
70      ;
71    }
72  }
73  #pragma omp sections
74  {
75    #pragma omp section
76    #pragma omp single		/* { dg-error "may not be closely nested" } */
77      ;
78  }
79  #pragma omp sections
80  {
81    #pragma omp section
82    #pragma omp master		/* { dg-error "may not be closely nested" } */
83      ;
84  }
85  #pragma omp single
86  {
87    #pragma omp for		/* { dg-error "may not be closely nested" } */
88    for (j = 0; j < 3; j++)
89      ;
90    #pragma omp sections	/* { dg-error "may not be closely nested" } */
91    {
92      ;
93    #pragma omp section
94      ;
95    }
96    #pragma omp single		/* { dg-error "may not be closely nested" } */
97      ;
98    #pragma omp master		/* { dg-error "may not be closely nested" } */
99      ;
100    #pragma omp barrier		/* { dg-error "may not be closely nested" } */
101  }
102  #pragma omp master
103  {
104    #pragma omp for		/* { dg-error "may not be closely nested" } */
105    for (j = 0; j < 3; j++)
106      ;
107    #pragma omp sections	/* { dg-error "may not be closely nested" } */
108    {
109      ;
110    #pragma omp section
111      ;
112    }
113    #pragma omp single		/* { dg-error "may not be closely nested" } */
114      ;
115    #pragma omp master
116      ;
117    #pragma omp barrier		/* { dg-error "may not be closely nested" } */
118  }
119  #pragma omp task
120  {
121    #pragma omp for		/* { dg-error "may not be closely nested" } */
122    for (j = 0; j < 3; j++)
123      ;
124    #pragma omp sections	/* { dg-error "may not be closely nested" } */
125    {
126      ;
127    #pragma omp section
128      ;
129    }
130    #pragma omp single		/* { dg-error "may not be closely nested" } */
131      ;
132    #pragma omp master		/* { dg-error "may not be closely nested" } */
133      ;
134    #pragma omp barrier		/* { dg-error "may not be closely nested" } */
135  }
136  #pragma omp parallel
137  {
138    #pragma omp for
139    for (j = 0; j < 3; j++)
140      ;
141    #pragma omp sections
142    {
143      ;
144    #pragma omp section
145      ;
146    }
147    #pragma omp single
148      ;
149    #pragma omp master
150      ;
151    #pragma omp barrier
152  }
153}
154
155void
156f2 (void)
157{
158  int i, j;
159  #pragma omp ordered
160  {
161    #pragma omp for		/* { dg-error "may not be closely nested" } */
162    for (j = 0; j < 3; j++)
163      ;
164    #pragma omp sections	/* { dg-error "may not be closely nested" } */
165    {
166      ;
167    #pragma omp section
168      ;
169    }
170    #pragma omp single		/* { dg-error "may not be closely nested" } */
171      ;
172    #pragma omp master
173      ;
174    #pragma omp barrier		/* { dg-error "may not be closely nested" } */
175  }
176}
177
178void
179f3 (void)
180{
181  #pragma omp critical
182  {
183    #pragma omp ordered		/* { dg-error "may not be closely nested" } */
184      ;
185  }
186}
187
188void
189f4 (void)
190{
191  #pragma omp task
192  {
193    #pragma omp ordered		/* { dg-error "may not be closely nested" } */
194      ;
195  }
196}
197
198void
199f5 (void)
200{
201  int i;
202  #pragma omp for
203  for (i = 0; i < 10; i++)
204    {
205      #pragma omp ordered		/* { dg-error "must be closely nested" } */
206	;
207    }
208  #pragma omp for ordered
209  for (i = 0; i < 10; i++)
210    {
211      #pragma omp ordered
212	;
213    }
214}
215
216void
217f6 (void)
218{
219  #pragma omp critical (foo)
220    #pragma omp critical (bar)
221      ;
222  #pragma omp critical
223    #pragma omp critical (baz)
224      ;
225}
226
227void
228f7 (void)
229{
230  #pragma omp critical (foo2)
231    #pragma omp critical
232      ;
233  #pragma omp critical (bar)
234    #pragma omp critical (bar)		/* { dg-error "may not be nested" } */
235      ;
236  #pragma omp critical
237    #pragma omp critical		/* { dg-error "may not be nested" } */
238      ;
239}
240