https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88861
--- Comment #3 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Assertion fails in dom_info::calc_dfs_tree: 457 /* This aborts e.g. when there is _no_ path from ENTRY to EXIT at all. */ 458 gcc_assert (m_nodes == (unsigned int) m_n_basic_blocks - 1); (gdb) p m_nodes $8 = 9 (gdb) p m_n_basic_blocks $9 = 11 Block 9 in .263r.ud_dce has one in-edge from block 6 (insn 29), and no out-edge Block 9 in .264r.combine has no in-edges or out-edges Within .263r.ud_dce: (note 25 69 26 6 [bb 6] NOTE_INSN_BASIC_BLOCK) (insn 26 25 28 6 (set (reg/f:DI 142) (mem/u/c:DI (unspec:DI [ (symbol_ref/u:DI ("*.LC1") [flags 0x2]) (reg:DI 2 2) ] UNSPEC_TOCREL) [3 S8 A8])) "/tmp/test.c":7:21 608 {*movdi_internal64} (expr_list:REG_EQUAL (symbol_ref:DI ("*.LANCHOR1") [flags 0x182]) (nil))) (insn 28 26 29 6 (set (reg:SI 135 [ i ]) (mem/c:SI (plus:DI (reg/f:DI 142) (const_int 4 [0x4])) [1 i+0 S4 A32])) "/tmp/test.c":7:21 494 {*movsi_internal1} (expr_list:REG_EQUAL (mem/c:SI (const:DI (plus:DI (symbol_ref:DI ("*.LANCHOR1") [flags 0x182]) (const_int 4 [0x4]))) [1 i+0 S4 A32]) (nil))) (insn 29 28 30 6 (set (mem:SI (plus:DI (reg/f:DI 142) (const_int 4 [0x4])) [1 s+4 S4 A32]) (reg:SI 135 [ i ])) "/tmp/test.c":7:21 494 {*movsi_internal1} (expr_list:REG_DEAD (reg:SI 135 [ i ]) (expr_list:REG_EH_REGION (const_int 1 [0x1]) (nil)))) ...but within .264r.combine: [...snip...] allowing combination of insns 28 and 29 original costs 4 + 4 = 8 replacement cost 0 deferring deletion of insn with uid = 28. modifying insn i3 29: [r142:DI+0x4]=[r142:DI+0x4] REG_EH_REGION 0x1 deferring rescan insn with uid = 29. Can't combine i2 into i3 Can't combine i2 into i3 Can't combine i2 into i3 Can't combine i2 into i3 Can't combine i2 into i3 Can't combine i2 into i3 Can't combine i2 into i3 Can't combine i2 into i3 deleting noop move 29 deferring deletion of insn with uid = 29. starting the processing of deferred insns rescanning insn with uid = 23. ending the processing of deferred insns [...snip...] (note 25 69 26 6 [bb 6] NOTE_INSN_BASIC_BLOCK) (insn 26 25 28 6 (set (reg/f:DI 142) (mem/u/c:DI (unspec:DI [ (symbol_ref/u:DI ("*.LC1") [flags 0x2]) (reg:DI 2 2) ] UNSPEC_TOCREL) [3 S8 A8])) "/tmp/test.c":7:21 608 {*movdi_internal64} (expr_list:REG_EQUAL (symbol_ref:DI ("*.LANCHOR1") [flags 0x182]) (nil))) (note 28 26 30 6 NOTE_INSN_DELETED) which, if I'm reading it right, seems to have deleted the usage of EH region 1, and has left block 9 orphaned.