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
       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
     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  }