diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d54b8f61c77..d2b35831e27 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Fri Jul 9 19:08:55 1999 Jim Wilson + + * unroll.c (unroll_loops): Don't delete named CODE_LABELs. + Fri Jul 9 18:54:18 1999 Felix Lee * config/i960/i960.c (ret_label): Change asm label from "LR:" to diff --git a/gcc/unroll.c b/gcc/unroll.c index 9ac883a1d49..d6dbcf0fbc1 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -1262,11 +1262,16 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before, insn = NEXT_INSN (copy_start); while (insn != safety_label) { - /* ??? We can't delete a NOTE_INSN_DELETED_LABEL unless we fix the - DECL_RTL field of the associated LABEL_DECL to point to (one of) - the new copies of the label. Otherwise, we hit an abort in - dwarfout.c/dwarf2out.c. */ + /* ??? Don't delete named code labels. They will be deleted when the + jump that references them is deleted. Otherwise, we end up deleting + them twice, which causes them to completely disappear instead of turn + into NOTE_INSN_DELETED_LABEL notes. This in turn causes aborts in + dwarfout.c/dwarf2out.c. We could perhaps fix the dwarf*out.c files + to handle deleted labels instead. Or perhaps fix DECL_RTL of the + associated LABEL_DECL to point to one of the new label instances. */ + /* ??? Likewise, we can't delete a NOTE_INSN_DELETED_LABEL note. */ if (insn != start_label + && ! (GET_CODE (insn) == CODE_LABEL && LABEL_NAME (insn)) && ! (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)) insn = delete_insn (insn);