This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Suggested (easier) fix to ... RE: Regressions problem (200 fa ilures)
- To: Donn Terry <donnte at microsoft dot com>
- Subject: Re: Suggested (easier) fix to ... RE: Regressions problem (200 fa ilures)
- From: Richard Henderson <rth at cygnus dot com>
- Date: Fri, 26 May 2000 10:31:50 -0700
- Cc: Mark Mitchell <mark at codesourcery dot com>, kettenis at wins dot uva dot nl, Peter dot Schauer at Regent dot E-Technik dot TU-Muenchen dot DE, kingdon at redhat dot com, gdb at sourceware dot cygnus dot com, gcc-patches at gcc dot gnu dot org
- References: <309F4FC4705DC844987051A517E9E39B09D1C2@red-pt-02.redmond.corp.microsoft.com>
On Fri, May 26, 2000 at 09:53:26AM -0700, Donn Terry wrote:
> And a bit more... the rebuild/regression did succeed (after some tweaking)
> and the problem with __main is in the current CVS as well.
Try this.
r~
* function.c (thread_prologue_epilogue_insns): Don't move the
line note at the head of the chain. Only force a lineno note
before the end of block 0.
Index: function.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/function.c,v
retrieving revision 1.198
diff -c -p -d -r1.198 function.c
*** function.c 2000/05/23 03:40:53 1.198
--- function.c 2000/05/26 17:30:07
*************** epilogue_done:
*** 7050,7070 ****
{
/* Note that we cannot reorder the first insn in the
chain, since rest_of_compilation relies on that
! remaining constant. Do the next best thing. */
if (prev == NULL)
! {
! emit_line_note_after (NOTE_SOURCE_FILE (insn),
! NOTE_LINE_NUMBER (insn),
! prologue_end);
! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
! }
! else
! reorder_insns (insn, insn, prologue_end);
}
}
! insn = NEXT_INSN (prologue_end);
! if (! insn || GET_CODE (insn) != NOTE || NOTE_LINE_NUMBER (insn) <= 0)
{
for (insn = next_active_insn (f); insn ; insn = PREV_INSN (insn))
{
--- 7050,7072 ----
{
/* Note that we cannot reorder the first insn in the
chain, since rest_of_compilation relies on that
! remaining constant. */
if (prev == NULL)
! break;
! reorder_insns (insn, insn, prologue_end);
}
}
! /* Find the last line number note in the first block. */
! for (insn = BASIC_BLOCK (0)->end;
! insn != prologue_end;
! insn = PREV_INSN (insn))
! if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
! break;
!
! /* If we didn't find one, make a copy of the first line number
! we run across. */
! if (! insn)
{
for (insn = next_active_insn (f); insn ; insn = PREV_INSN (insn))
{