summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfglayout.c12
2 files changed, 19 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a9fdc0e083f..c2f690187e8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-09-30 Carlo Wood <carlo@alinoe.com>
+
+ PR debug/12319
+ * cfglayout.c (insn_scope): Use prologue_locator and
+ epilogue_locator; return the outer function scope for
+ pro- and epilogue insns.
+
2003-09-29 Zack Weinberg <zack@codesourcery.com>
* objc/objc-act.c (encode_type): Encode INTEGER_TYPEs and
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index 7121a3e5db4..f713eb16651 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -415,6 +415,18 @@ insn_scope (rtx insn)
int min = 0;
int loc = INSN_LOCATOR (insn);
+ /* When block_locators_locs was initialized, the pro- and epilogue
+ insns didn't exist yet and can therefore not be found this way.
+ But we know that they belong to the outer most block of the
+ current function.
+ Without this test, the prologue would be put inside the block of
+ the first valid instruction in the function and when that first
+ insn is part of an inlined function then the low_pc of that
+ inlined function is messed up. Likewise for the epilogue and
+ the last valid instruction. */
+ if (loc == prologue_locator || loc == epilogue_locator)
+ return DECL_INITIAL (cfun->decl);
+
if (!max || !loc)
return NULL;
while (1)