http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51648
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-01-04 21:26:11 UTC --- I think the problem is that we have a noreturn call (in the short testcase fatal_error), which doesn't have EDGE_FAKE to exit added by add_noreturn_fake_exit_edges because it has successor edge (EDGE_EH), and isn't added by gimple_flow_call_edges_add, because that function ignores noreturn calls. So, either we don't ignore noreturn calls that have any non-fake edges in gimple_flow_call_edges_add, or change add_noreturn_fake_exit_edges. Honza, what do you prefer? Changing gimple_flow_call_edges_add will only affect profile feedback I think, while add_noreturn_fake_exit_edges will affect several other passes (sm, gcse, ...).