/* { dg-do compile } */ union U { double val; union U *ptr; }; union U *d; double a; int b; int c; static void fn1(union U *p1, int p2, _Bool p3) { union U *e; if (p2 == 0) a = ((union U*)((__SIZE_TYPE__)p1 & ~1))->val; if (b) { e = p1; } else if (c) { e = ((union U*)((__SIZE_TYPE__)p1 & ~1))->ptr; d = e; } else { e = 0; d = ((union U*)0)->ptr; } fn1 (e, 0, 0); fn1 (0, 0, p3); } void fn2 (void) { fn1 (0, 0, 0); }