diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cfglayout.c | 12 |
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) |