| // 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 "7:the address of .a. will never be NULL" "correct warning" } |
| foo (4); |
| if (a) |
| foo (5); |
| if (&&lab) // { dg-warning "7:the address of .lab. will never be NULL" "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 "10:the address of .a. will never be NULL" "correct warning" } |
| foo (11); |
| if (a == 0) |
| foo (12); |
| if (&&lab == 0) // { dg-warning "13:the address of .lab. will never be NULL" "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 "9:the address of .a. will never be NULL" "correct warning" } |
| foo (18); |
| if (0 == a) |
| foo (19); |
| if (0 == &&lab) // { dg-warning "9:the address of .lab. will never be NULL" "correct warning" } |
| foo (20); |
| } |