/* This testcase ICEd when 2 different successors of a basic block were successfully threaded and try_forward_edges was not expecting that. */ typedef struct A { struct A *s, *t; unsigned int u; } A; void bar (A *); void foo (A *x, A *y, A *z) { while (y && (((y && y->t && y->t->u) ? y : z)->t == ((x && x->t && x->t->u) ? x : z)->t)) y = y->s; if (y) bar (y); }