aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2004-08-04 11:30:31 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2004-08-04 11:30:31 +0000
commit2496942a619711ca17c2f5057597b4c6852477c4 (patch)
tree89ed5e2c88a93888f442be1a3b80f31631739686
parent545eacdb4130cd64fb7cc5e4dd46e31b2753a18b (diff)
downloadgcc-2496942a619711ca17c2f5057597b4c6852477c4.zip
gcc-2496942a619711ca17c2f5057597b4c6852477c4.tar.gz
gcc-2496942a619711ca17c2f5057597b4c6852477c4.tar.bz2
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cfglayout.c67
2 files changed, 41 insertions, 31 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c08e8d2..c6ee660 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-08-04 Nathan Sidwell <nathan@codesourcery.com>
+
+ * cfglayout.c (insn_locators_initialize): Update the current
+ location before initializing a location.
+
2004-08-03 Zack Weinberg <zack@codesourcery.com>
* dbxout.c (dbxout_function_decl): Always call dbxout_function_end.
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index a81ce4c..b805ae5 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