http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51106
--- Comment #18 from Andrey Belevantsev <abel at gcc dot gnu.org> 2012-03-27 14:08:23 UTC --- (In reply to comment #17) > Looks reasonable. Though I think that whoever removed the fallthru > edge should have adjusted the flags on the others. That's simply delete_basic_block at cfgcleanup.c:2612 -- we have block 2 with two successors 4 and 5, and block 4 is trivially dead (empty, no succ, etc.), so when removing block 4 we just remove the 2->4 edge which is the only fallthru one. Which seems fine as the asm in question is seen by the rest of code as an unconditional jump then. Only when we remove it, we get no jump and still no fallthru bit, which confuses purge_dead_edges.