http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57149
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-05-07 07:00:58 UTC --- The difference in *.uninit before/after that commit is small, just: @@ -78,7 +79,7 @@ fn4 (struct F * x, unsigned int k) goto <bb 7>; <bb 7>: - # retval_25 = PHI <0(3), retval_26(6)> + # err_25 = PHI <0(3), retval_26(6)> _12 = y_9->f; if (_12 == 0) goto <bb 9>; @@ -89,17 +90,17 @@ fn4 (struct F * x, unsigned int k) goto <bb 13>; <bb 9>: - if (retval_25 > 0) + if (err_25 > 0) goto <bb 10>; else goto <bb 11>; <bb 10>: - retval_14 = fn0 (); + err_14 = fn0 (); <bb 11>: - # retval_2 = PHI <retval_25(9), retval_14(10)> - if (retval_2 < 0) + # err_2 = PHI <err_25(9), err_14(10)> + if (err_2 < 0) goto <bb 12>; else goto <bb 8>; and in both cases there is # retval_26 = PHI <retval_27(D)(4), retval_21(5)> that is the reason for the warning. The important thing is that the retval decl has TREE_NO_WARNING set (because of the retval = retval uninit warning suppression), while err doesn't. Trying a patch not to consider TREE_NO_WARNING SSA_NAME_VARs ssa_undefined_value_p when inside of tree-ssa-uninit.c now.