http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46183
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW CC| |stevenb.gcc at gmail dot | |com AssignedTo|rguenth at gcc dot gnu.org |unassigned at gcc dot | |gnu.org --- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-11-02 13:58:05 UTC --- RTL cprop leaves us with a not cleaned up CFG (an unreachable block), that causes dominance computation to ICE. ;; Start of basic block () -> 16 ;; bb 16 artificial_defs: { } ;; bb 16 artificial_uses: { u109(6){ }u110(7){ }u111(16){ }u112(20){ }} ;; lr in 6 [bp] 7 [sp] 16 [argp] 20 [frame] 74 ;; lr use 6 [bp] 7 [sp] 16 [argp] 20 [frame] ;; lr def 17 [flags] (code_label 90 87 91 16 14 "" [0 uses]) (note 91 90 92 16 [bb 16] NOTE_INSN_BASIC_BLOCK) (insn 92 91 93 16 (parallel [ (set (mem/s/f/j/c:DI (plus:DI (reg/f:DI 20 frame) (const_int -16 [0xfffffffffffffff0])) [0 ap.overflow_arg_area+0 S8 A64]) (plus:DI (mem/s/f/j/c:DI (plus:DI (reg/f:DI 20 frame) (const_int -16 [0xfffffffffffffff0])) [0 ap.overflow_arg_area+0 S8 A64]) (const_int 8 [0x8]))) (clobber (reg:CC 17 flags)) ]) t.c:13 253 {*adddi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))) ;; End of basic block 16 -> ( 17) ;; lr out 6 [bp] 7 [sp] 16 [argp] 20 [frame] 74 ;; Succ edge 17 [100.0%] (fallthru) The solution may be as simple as making sure to remove unreachable blocks after cprop, but already the exiting if (local_cprop_pass ()) { delete_unreachable_blocks (); df_analyze (); } has some weird comment in front of it. Maybe steven remembers what's going on here. Not my bug, really only exposed by me.