/* { dg-do run } */ /* { dg-options "-ftree-vrp" } */ struct S {struct S *field;}; struct S True, False, Z; static inline int f(void) {return 1;} static inline int g(struct S **obj) { return f() && *obj == &Z; } struct S **h(struct S **x) { if (x) return g(x) ? &True.field : &False.field; else return &True.field; } extern void abort (void); int main() { if (h(&False.field) != &False.field) abort (); return 0; }