/* PR c/80116 */
/* { dg-options "-Wmultistatement-macros" } */
/* { dg-do compile } */

#define SWAP(X, Y)	\
  tmp = X; /* { dg-warning "macro expands to multiple statements" } */ \
  X = Y;		\
  Y = tmp

#define STUFF		\
  if (0) {} else x = y

#define STUFF2		\
  if (0) {} else x = y; x++

#define STUFF3		\
  if (x)		\
    {}			\
  else /* { dg-message "not guarded by this 'else' clause" } */ \
    SWAP(x, y) /* { dg-message "in expansion of macro .SWAP." } */

#define SET(X, Y)	\
  (X) = (Y)

#define STUFF4		\
  if (x)		\
    {}			\
  else			\
    SET(x, y);		\
  SET(x, y)

#define STUFF5		\
  { tmp = x; x = y; }

#define STUFF6		\
  x++;;

int x, y, tmp;

void
fn1 (void)
{
  if (x)
   {
   }
  else /* { dg-message "not guarded by this 'else' clause" } */
    SWAP(x, y); /* { dg-message "in expansion of macro .SWAP." } */
}

void
fn2 (void)
{
  SWAP(x, y);
}

void
fn3 (void)
{
  if (x)
    {
    }
  else
    {
      SWAP(x, y);
    }
}

void
fn4 (void)
{
  if (x)
    {
    }
  else
    ({ x = 10; x++; });
}

void
fn5 (void)
{
  if (x)
    {
    }
  else /* { dg-message "not guarded by this 'else' clause" } */
L1:
    SWAP (x, y); /* { dg-message "in expansion of macro .SWAP." } */
  goto L1;
}

void
fn6 (void)
{
  if (x)
    {
    }
  else
    SET (x, y);
  SET (tmp, x);
}

void
fn7 (void)
{
  STUFF;
}

void
fn8 (void)
{
  STUFF2;
}

void
fn9 (void)
{
  STUFF3; /* { dg-message "in expansion of macro .STUFF3." } */
}

void
fn10 (void)
{
  STUFF4;
}

void
fn11 (void)
{
  if (x)
    STUFF5;
}

void
fn12 (void)
{
  if (x)
    STUFF6;
}
