/* Test operation of -Wparentheses.  Warnings for ambiguous else.  */
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */

/* { dg-do compile } */
/* { dg-options "-Wparentheses" } */

int foo (int);

int a, b, c;

int
bar (void)
{
  if (a)
    foo (0);
  if (b)
    foo (1);
  else
    foo (2);
  if (c)
    if (a)
      foo (3);
    else /* { dg-warning "add explicit braces to avoid dangling else" } */
      foo (4);
  if (a)
    if (c)
      foo (5);
  if (a)
    if (b)
      if (c)
	foo (6);
      else /* { dg-warning "add explicit braces to avoid dangling else" } */
	foo (7);
  if (a)
    if (b)
      if (c)
	foo (8);
      else
	foo (9);
    else /* { dg-warning "add explicit braces to avoid dangling else" } */
      foo (10);
  if (a)
    if (b)
      if (c)
	foo (11);
      else
	foo (12);
    else
      foo (13);
  else
    foo (14);
  if (a) {
    if (b)
      if (c)
	foo (15);
      else
	foo (16);
    else
      foo (17);
  }
  return 0;
}
