http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-04-16 CC| |jakub at gcc dot gnu.org Target Milestone|--- |4.8.1 Summary|Bad optimization with |[4.8/4.9 Regression] Bad |setjmp() |optimization with setjmp() Ever Confirmed|0 |1 --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-04-16 15:46:43 UTC --- Also happens with -Os. Started with http://gcc.gnu.org/r190284 Eyeballing the difference between r190283 and r190284 -Os dumps, I see that *.copyrename4 is still the same appart from losing some SSA_NAME_VARs, but *.uncprop has one difference: - # n_13 = PHI <0(5), 1(6)> + # _13 = PHI <_3(5), 1(6)> The missing n is fine, but _3 instead of 0 there supposedly isn't. _3 is set before the setjmp call, while this PHI is after the returns-twice function, and while for non-zero _3 the code before setjmp exits early, so _3 should contain 0, perhaps while extending the lifetime of _3 over the returns twice function it should have added SSA_NAME_OCCURS_IN_ABNORMAL_PHI or give up on it. Richard, can you please have a look?