From 2496942a619711ca17c2f5057597b4c6852477c4 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 4 Aug 2004 11:30:31 +0000 Subject: [PATCH] cfglayout.c (insn_locators_initialize): Update the current location before initializing a location. * cfglayout.c (insn_locators_initialize): Update the current location before initializing a location. From-SVN: r85554 --- gcc/ChangeLog | 5 ++++ gcc/cfglayout.c | 67 ++++++++++++++++++++++++++----------------------- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c08e8d219b7..c6ee6602cea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-08-04 Nathan Sidwell + + * cfglayout.c (insn_locators_initialize): Update the current + location before initializing a location. + 2004-08-03 Zack Weinberg * dbxout.c (dbxout_function_decl): Always call dbxout_function_end. diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c index a81ce4c7f8c..b805ae5bda9 100644 --- a/gcc/cfglayout.c +++ b/gcc/cfglayout.c @@ -267,12 +267,38 @@ insn_locators_initialize (void) for (insn = get_insns (); insn; insn = next) { + int active = 0; + next = NEXT_INSN (insn); - if ((active_insn_p (insn) - && GET_CODE (PATTERN (insn)) != ADDR_VEC - && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC) - || !NEXT_INSN (insn) + if (NOTE_P (insn)) + { + switch (NOTE_LINE_NUMBER (insn)) + { + case NOTE_INSN_BLOCK_BEG: + case NOTE_INSN_BLOCK_END: + abort (); + + default: + if (NOTE_LINE_NUMBER (insn) > 0) + { + expanded_location xloc; + NOTE_EXPANDED_LOCATION (xloc, insn); + line_number = xloc.line; + file_name = xloc.file; + } + break; + } + } + else + active = (active_insn_p (insn) + && GET_CODE (PATTERN (insn)) != ADDR_VEC + && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC); + + check_block_change (insn, &block); + + if (active + || !next || (!prologue_locator && file_name)) { if (last_block != block) @@ -296,34 +322,13 @@ insn_locators_initialize (void) VARRAY_PUSH_CHAR_PTR (file_locators_files, (char *) file_name); last_file_name = file_name; } + if (!prologue_locator && file_name) + prologue_locator = loc; + if (!next) + epilogue_locator = loc; + if (active) + INSN_LOCATOR (insn) = loc; } - if (!prologue_locator && file_name) - prologue_locator = loc; - if (!NEXT_INSN (insn)) - epilogue_locator = loc; - if (active_insn_p (insn)) - INSN_LOCATOR (insn) = loc; - else if (NOTE_P (insn)) - { - switch (NOTE_LINE_NUMBER (insn)) - { - case NOTE_INSN_BLOCK_BEG: - case NOTE_INSN_BLOCK_END: - abort (); - - default: - if (NOTE_LINE_NUMBER (insn) > 0) - { - expanded_location xloc; - NOTE_EXPANDED_LOCATION (xloc, insn); - line_number = xloc.line; - file_name = xloc.file; - } - break; - } - } - - check_block_change (insn, &block); } /* Tag the blocks with a depth number so that change_scope can find -- 2.30.2