summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcarlo <carlo@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-29 23:09:12 +0000
committercarlo <carlo@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-29 23:09:12 +0000
commit79e6cfee8d92ce808495f39e77cf6d16fe97e752 (patch)
treec72cbbd2ca46ce5cae76146e9dad49e168fb7c79
parent40d3e4b2e18466b4ef8b8ba4d9f8ad48702044ae (diff)
downloadppe42-gcc-79e6cfee8d92ce808495f39e77cf6d16fe97e752.tar.gz
ppe42-gcc-79e6cfee8d92ce808495f39e77cf6d16fe97e752.zip
PR debug/12319
* cfglayout.c (insn_scope): Use prologue_locator and epilogue_locator; return the outer function scope for pro- and epilogue insns. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71926 138bc75d-0d04-0410-961f-82ee72b054a4
-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)
OpenPOWER on IntegriCloud