http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56957
--- Comment #1 from Steven Bosscher <steven at gcc dot gnu.org> 2013-04-16 20:35:02 UTC --- Bug in the selective scheduler, merely exposed by my patch: Breakpoint 1, fancy_abort (file=0x11017130 "../../trunk/gcc/emit-rtl.c", line=3840, function=0x110174f8 <add_insn_after_nobb(rtx_def*, rtx_def*)::__FUNCTION__> "add_insn_after_nobb") at ../../trunk/gcc/diagnostic.c:1177 1177 internal_error ("in %s, at %s:%d", function, trim_filename (file), line); (gdb) up #1 0x00000000103e616c in add_insn_after_nobb (insn=0x3fffb5da6150, after=0x3fffb5da4e78) at ../../trunk/gcc/emit-rtl.c:3840 3840 gcc_assert (!optimize || !INSN_DELETED_P (after)); (gdb) p after $1 = (rtx) 0x3fffb5da4e78 (gdb) p debug_rtx(after) (insn/v 303 30 32 10 (set (reg:DF 165 f37 [421]) (unspec:DF [ (mem:DF (reg/f:DI 18 r18 [420]) [2 *a_7(D) S8 A64]) ] UNSPEC_LDA)) 13 {movdf_advanced} (nil)) $2 = void (gdb) p INSN_DELETED_P (after) $3 = 1 (gdb) The selective scheduler is trying to re-emit an insn it had previously deleted permanently.