https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60488
--- Comment #5 from Manuel López-Ibáñez <manu at gcc dot gnu.org> --- Even simpler: int f (int*); int g(void); int foo (void) { int b; if (g() && f (&b)) return 0; return b; } we have: # .MEM_7 = VDEF <.MEM_6(D)> # USE = nonlocal null { D.1912 } (escaped) # CLB = nonlocal null { D.1912 } (escaped) _1 = gD.1908 (); if (_1 != 0) goto <bb 4>; [33.00%] else goto <bb 6>; [67.00%] ;; basic block 6, loop depth 0, count 719407024 (estimated locally), maybe hot # .MEM_11 = PHI <.MEM_7(6), .MEM_8(8)> # DEBUG BEGIN_STMT # VUSE <.MEM_11> _9 = bD.1912; but uninit pass does not follow the PHI chain for memory ops.