1 /* PR c/70436 */
2 /* { dg-additional-options "-Wparentheses -fno-openmp" } */
3 
4 int a, b, c;
5 void bar (void);
6 void baz (void);
7 
8 void
f1(void)9 f1 (void)
10 {
11   int i, j;
12 
13   if (a) /* { dg-warning "ambiguous" } */
14     #pragma omp for
15     for (i = 0; i < 10; i++)
16       if (b)
17 	bar ();
18       else
19 	baz ();
20 
21   if (a) /* { dg-warning "ambiguous" } */
22     while (1)
23       #pragma omp for
24       for (i = 0; i < 10; i++)
25 	if (b)
26 	  bar ();
27 	else
28 	  baz ();
29 
30   if (a) /* { dg-warning "ambiguous" } */
31     for (i = 0; i < 10; i++)
32       #pragma omp for
33       for (j = 0; j < 10; j++)
34 	if (b)
35 	  bar ();
36   else
37     baz ();
38 
39   if (a)
40     #pragma omp for
41     for (i = 0; i < 10; i++)
42       if (b) /* { dg-warning "ambiguous" } */
43 	#pragma omp parallel for
44 	for (j = 0; j < 10; j++)
45 	  if (c)
46 	    bar ();
47       else
48 	baz ();
49 
50   if (a) /* { dg-warning "ambiguous" } */
51     #pragma omp taskloop
52     for (i = 0; i < 10; i++)
53       if (b)
54 	#pragma omp parallel for
55 	for (j = 0; j < 10; j++)
56 	  if (c)
57 	    bar ();
58 	  else
59 	    baz ();
60   else
61     bar ();
62 
63   if (a) /* { dg-warning "ambiguous" } */
64     #pragma omp taskloop simd
65     for (i = 0; i < 10; i++)
66       if (b)
67 	bar ();
68       else
69 	baz ();
70 
71   if (a) /* { dg-warning "ambiguous" } */
72     #pragma omp for collapse(2)
73     for (i = 0; i < 10; i++)
74       for (j = 0; j < 10; j++)
75 	if (b)
76 	  bar ();
77 	else
78 	  baz ();
79 
80   if (a) /* { dg-warning "ambiguous" } */
81     #pragma omp critical
82       if (b)
83 	bar ();
84       else
85 	baz ();
86 
87   if (a) /* { dg-warning "ambiguous" } */
88     for (i = 0; i < 10; i++)
89       #pragma omp simd
90       for (j = 0; j < 10; j++)
91 	if (b)
92 	  bar ();
93   else
94     baz ();
95 
96   if (a) /* { dg-warning "ambiguous" } */
97     #pragma omp for simd schedule(runtime)
98     for (i = 0; i < 10; i++)
99       if (b)
100 	bar ();
101       else
102 	baz ();
103 
104   if (a) /* { dg-warning "ambiguous" } */
105     #pragma omp master
106       if (b)
107 	bar ();
108       else
109 	baz ();
110 
111   if (a) /* { dg-warning "ambiguous" } */
112     #pragma omp parallel
113       if (b)
114 	bar ();
115       else
116 	baz ();
117 
118   if (a) /* { dg-warning "ambiguous" } */
119     for (i = 0; i < 10; i++)
120       #pragma omp parallel for
121       for (j = 0; j < 10; j++)
122 	if (b)
123 	  bar ();
124   else
125     baz ();
126 
127   if (a) /* { dg-warning "ambiguous" } */
128     for (i = 0; i < 10; i++)
129       #pragma omp parallel for simd
130       for (j = 0; j < 10; j++)
131 	if (b)
132 	  bar ();
133   else
134     baz ();
135 
136   if (a) /* { dg-warning "ambiguous" } */
137     #pragma omp single
138       if (b)
139 	bar ();
140       else
141 	baz ();
142 
143   if (a) /* { dg-warning "ambiguous" } */
144     #pragma omp task
145       if (b)
146 	bar ();
147       else
148 	baz ();
149 
150   if (a) /* { dg-warning "ambiguous" } */
151     #pragma omp taskgroup
152       if (b)
153 	bar ();
154       else
155 	baz ();
156 
157   if (a)
158     #pragma omp for
159     for (i = 0; i < 10; i++)
160       {
161 	if (b)
162 	  bar ();
163 	else
164 	  baz ();
165       }
166 
167   if (a)
168     {
169       #pragma omp taskloop
170       for (i = 0; i < 10; ++i)
171 	if (b)
172 	  bar ();
173     }
174   else baz ();
175 
176   if (a)
177     #pragma omp for collapse(2)
178     for (i = 0; i < 10; i++)
179       {
180 	for (j = 0; j < 10; j++)
181 	  if (b)
182 	    bar ();
183 	  else
184 	    baz ();
185       }
186 
187   if (a)
188     #pragma omp critical
189       {
190 	if (b)
191 	  bar ();
192 	else
193 	  baz ();
194       }
195 
196   if (a)
197     for (i = 0; i < 10; i++)
198       #pragma omp simd
199       for (j = 0; j < 10; j++)
200 	{
201 	  if (b)
202 	    bar ();
203 	}
204   else
205     baz ();
206 
207   if (a)
208     #pragma omp for simd schedule(dynamic, 5)
209     for (i = 0; i < 10; i++)
210       {
211 	if (b)
212 	  bar ();
213 	else
214 	  baz ();
215       }
216 
217   if (a)
218     #pragma omp master
219       {
220 	if (b)
221 	  bar ();
222 	else
223 	  baz ();
224       }
225 
226   if (a)
227     #pragma omp parallel
228       {
229 	if (b)
230 	  bar ();
231 	else
232 	  baz ();
233       }
234 
235   if (a)
236     {
237       #pragma omp parallel
238 	if (b)
239 	  bar ();
240 	else
241 	  baz ();
242     }
243 
244   if (a)
245     for (i = 0; i < 10; i++)
246       #pragma omp parallel for
247       for (j = 0; j < 10; j++)
248 	{
249 	  if (b)
250 	    bar ();
251 	}
252   else
253     baz ();
254 
255   if (a)
256     for (i = 0; i < 10; i++)
257       #pragma omp parallel for simd
258       for (j = 0; j < 10; j++)
259 	{
260 	  if (b)
261 	    bar ();
262 	}
263   else
264     baz ();
265 
266   if (a)
267     #pragma omp single
268       {
269 	if (b)
270 	  bar ();
271       }
272   else
273     baz ();
274 
275   if (a)
276     #pragma omp task
277       {
278 	if (b)
279 	  bar ();
280       }
281   else
282     baz ();
283 
284   if (a)
285     #pragma omp taskgroup
286       {
287 	if (b)
288 	  bar ();
289 	else
290 	  baz ();
291       }
292 
293   if (a)
294     #pragma omp taskloop simd
295     for (i = 0; i < 10; i++)
296       {
297 	if (b)
298 	  bar ();
299 	else
300 	  baz ();
301       }
302 }
303 
304 void
f2(int d,int e,int f)305 f2 (int d, int e, int f)
306 {
307   if (a) /* { dg-warning "ambiguous" } */
308     #pragma omp ordered
309       if (b)
310 	bar ();
311       else
312 	baz ();
313 
314   if (d) /* { dg-warning "ambiguous" } */
315     #pragma omp ordered threads
316       if (b)
317 	bar ();
318       else
319 	baz ();
320 
321   if (e)
322     #pragma omp ordered
323       {
324 	if (b)
325 	  bar ();
326 	else
327 	  baz ();
328       }
329 
330   if (f)
331     #pragma omp ordered threads
332       {
333 	if (b)
334 	  bar ();
335 	else
336 	  baz ();
337       }
338 }
339