/* Make sure we don't assume that a weak symbol is always non-NULL.
   This is just like Walways-true-1.C, except that it uses a weak
   symbol.
   Origin: Ian Lance Taylor <iant@google.com>.  */

/* { dg-do compile } */
/* { dg-options "-Waddress" } */
/* { dg-require-weak "" } */

extern int foo (int) __attribute__ ((weak));

int i __attribute__ ((weak));

void
bar (int a)
{
 lab:
  if (foo)
    foo (0);
  if (foo (1))
    ;
  if (&i)
    foo (2);
  if (i)
    foo (3);
  if (&a)	/* { dg-warning "always evaluate as" "correct warning" } */
    foo (4);
  if (a)
    foo (5);
  if (&&lab)	/* { dg-warning "always evaluate as" "correct warning" } */
    foo (6);
  if (foo == 0)
    foo (7);
  if (foo (1) == 0)
    foo (8);
  if (&i == 0)
    foo (9);
  if (i == 0)
    foo (10);
  if (&a == 0)	/* { dg-warning "the comparison will always evaluate as 'false'" "correct warning" } */
    foo (11);
  if (a == 0)
    foo (12);
  if (&&lab == 0) /* { dg-warning "the comparison will always evaluate as 'false'" "correct warning" } */
    foo (13);
  if (0 == foo)
    foo (14);
  if (0 == foo (1))
    foo (15);
  if (0 == &i)
    foo (16);
  if (0 == i)
    foo (17);
  if (0 == &a)	/* { dg-warning "the comparison will always evaluate as 'false'" "correct warning" } */
    foo (18);
  if (0 == a)
    foo (19);
  if (0 == &&lab) /* { dg-warning "the comparison will always evaluate as 'false'" "correct warning" } */
    foo (20);
}
