| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fno-tree-ccp -fno-tree-forwprop -fno-tree-fre -fdump-tree-evrp" } */ |
| |
| struct A{int a,b;}; |
| inline int*f1(struct A*p){return&p->a;} /* offset of 0. */ |
| inline int*f2(struct A*p){return&p->b;} /* Offset of non-zero. */ |
| inline int*g(struct A*p){return(int*)p+1;} /* Always non-zero offet. */ |
| |
| /* Should be able to eliminate all calls to bad(). */ |
| |
| void bad(void); |
| |
| int |
| main() |
| { |
| struct A* ptr = 0; |
| struct A addr; |
| |
| if (f1 (ptr) != 0) |
| bad(); |
| if (f1 (&addr) == 0) |
| bad(); |
| |
| if (f2 (ptr) == 0) |
| bad(); |
| if (f2 (&addr) == 0) |
| bad(); |
| |
| if (g (ptr) == 0) |
| bad(); |
| if (g (&addr) == 0) |
| bad(); |
| |
| } |
| |
| /* { dg-final { scan-tree-dump-not "bad" "evrp"} } */ |
| |