GCC Status Report (2004-03-21)
Mark Mitchell
mark@codesourcery.com
Tue Mar 23 17:25:00 GMT 2004
Jan Hubicka wrote:
>>GCC 3.4
>>=======
>>* Jan Hubicka
>>
>> PR 13974 relates to cases where GCC 3.4 emits bad debugging
>> information. This is an important PR because it's going to affect
>> people's ability to use GCC 3.4 for development. From looking at
>> the PR, it looks like you and Dan Jacobowitz have reached some kind
>> of consensus, and on 2004-03-14 you indicated you'd have patch
>> "Monday or Tuesday". Is that patch available? Has Dan looked it
>> over and confirmed it fixes the problem?
>>
>>
>Sorry for being late, somehow the patch got suck in testing scripts and
>I managed to not attach it to the history.
>
>
Dan (Jacobowitz), what say you about this patch and/or its empirical
behavior in GDB-land?
>2004-03-22 Jan Hubicka <jh@suse.cz>
> * emit_rtl.c (emit_*_insn_before, emit_*_insn_after): Set locators
> according to the specified instruction.
>Index: emit-rtl.c
>===================================================================
>RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,v
>retrieving revision 1.383
>diff -c -3 -p -r1.383 emit-rtl.c
>*** emit-rtl.c 6 Mar 2004 01:21:26 -0000 1.383
>--- emit-rtl.c 17 Mar 2004 12:14:25 -0000
>*************** emit_insn_before (rtx x, rtx before)
>*** 3919,3924 ****
>--- 3919,3925 ----
> {
> rtx last = before;
> rtx insn;
>+ rtx first = PREV_INSN (before);
>
> #ifdef ENABLE_RTL_CHECKING
> if (before == NULL_RTX)
>*************** emit_insn_before (rtx x, rtx before)
>*** 3957,3962 ****
>--- 3958,3976 ----
> add_insn_before (last, before);
> break;
> }
>+ if (active_insn_p (before) && INSN_LOCATOR (before))
>+ {
>+ int loc = INSN_LOCATOR (before);
>+ first = NEXT_INSN (first);
>+ while (1)
>+ {
>+ if (active_insn_p (first) && ! INSN_LOCATOR (first))
>+ INSN_LOCATOR (first) = loc;
>+ if (first == last)
>+ break;
>+ first = NEXT_INSN (first);
>+ }
>+ }
>
> return last;
> }
>*************** rtx
>*** 3968,3973 ****
>--- 3982,3988 ----
> emit_jump_insn_before (rtx x, rtx before)
> {
> rtx insn, last = NULL_RTX;
>+ rtx first = PREV_INSN (before);
>
> #ifdef ENABLE_RTL_CHECKING
> if (before == NULL_RTX)
>*************** emit_jump_insn_before (rtx x, rtx before
>*** 4003,4008 ****
>--- 4018,4036 ----
> add_insn_before (last, before);
> break;
> }
>+ if (active_insn_p (before) && INSN_LOCATOR (before))
>+ {
>+ int loc = INSN_LOCATOR (before);
>+ first = NEXT_INSN (first);
>+ while (1)
>+ {
>+ if (active_insn_p (first) && ! INSN_LOCATOR (first))
>+ INSN_LOCATOR (first) = loc;
>+ if (first == last)
>+ break;
>+ first = NEXT_INSN (first);
>+ }
>+ }
>
> return last;
> }
>*************** rtx
>*** 4014,4019 ****
>--- 4042,4048 ----
> emit_call_insn_before (rtx x, rtx before)
> {
> rtx last = NULL_RTX, insn;
>+ rtx first = PREV_INSN (before);
>
> #ifdef ENABLE_RTL_CHECKING
> if (before == NULL_RTX)
>*************** emit_call_insn_before (rtx x, rtx before
>*** 4049,4054 ****
>--- 4078,4096 ----
> add_insn_before (last, before);
> break;
> }
>+ if (active_insn_p (before) && INSN_LOCATOR (before))
>+ {
>+ int loc = INSN_LOCATOR (before);
>+ first = NEXT_INSN (first);
>+ while (1)
>+ {
>+ if (active_insn_p (first) && ! INSN_LOCATOR (first))
>+ INSN_LOCATOR (first) = loc;
>+ if (first == last)
>+ break;
>+ first = NEXT_INSN (first);
>+ }
>+ }
>
> return last;
> }
>*************** emit_insn_after (rtx x, rtx after)
>*** 4176,4181 ****
>--- 4218,4235 ----
> add_insn_after (last, after);
> break;
> }
>+ if (active_insn_p (after) && INSN_LOCATOR (after))
>+ {
>+ int loc = INSN_LOCATOR (after);
>+ while (1)
>+ {
>+ if (active_insn_p (after) && ! INSN_LOCATOR (after))
>+ INSN_LOCATOR (after) = loc;
>+ if (after == last)
>+ break;
>+ after = NEXT_INSN (after);
>+ }
>+ }
>
> return last;
> }
>*************** emit_jump_insn_after (rtx x, rtx after)
>*** 4232,4237 ****
>--- 4286,4303 ----
> add_insn_after (last, after);
> break;
> }
>+ if (active_insn_p (after) && INSN_LOCATOR (after))
>+ {
>+ int loc = INSN_LOCATOR (after);
>+ while (1)
>+ {
>+ if (active_insn_p (after) && ! INSN_LOCATOR (after))
>+ INSN_LOCATOR (after) = loc;
>+ if (after == last)
>+ break;
>+ after = NEXT_INSN (after);
>+ }
>+ }
>
> return last;
> }
>*************** emit_call_insn_after (rtx x, rtx after)
>*** 4270,4275 ****
>--- 4336,4353 ----
> last = make_call_insn_raw (x);
> add_insn_after (last, after);
> break;
>+ }
>+ if (active_insn_p (after) && INSN_LOCATOR (after))
>+ {
>+ int loc = INSN_LOCATOR (after);
>+ while (1)
>+ {
>+ if (active_insn_p (after) && ! INSN_LOCATOR (after))
>+ INSN_LOCATOR (after) = loc;
>+ if (after == last)
>+ break;
>+ after = NEXT_INSN (after);
>+ }
> }
>
> return last;
>
>
--
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com
More information about the Gcc
mailing list