http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54046
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-11-20 16:02:33 UTC --- I don't see how. The thing is, e.g. lower_stmt resets data->cannot_fallthru on most of the statements, even if it got changed to reset it only on GIMPLE_LABELs (or few selected others), such that say a noreturn call which sets data->cannot_fallthru followed by assignment or another call would keep cannot_fallthru set even when it is currently cleared, on GIMPLE_LABELs we'd need to reset anyway, as we don't have the CFG yet and don't have info how many gotos or other control transfer stmts to each GIMPLE_LABEL there are (and the values of cannot_fallthru at those points). So even just the break; after the __cxa_throw which got gimplified into goto <somelabel>; <somelabel>: would reset cannot_fallthru. And the gimplifier doesn't see break; but already the goto