This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GCC Status Report (2004-03-21)


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]