aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-02-08 12:55:13 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-02-08 12:55:13 +0000
commite45cde982611c5a86c215dd4079ca7f0375e141b (patch)
tree2b580cff0a35536512ce08acfa951238833efcb5 /gcc
parentc1ca73d819136e8fee6af5b8a616840ee59594d6 (diff)
downloadgcc-e45cde982611c5a86c215dd4079ca7f0375e141b.zip
gcc-e45cde982611c5a86c215dd4079ca7f0375e141b.tar.gz
gcc-e45cde982611c5a86c215dd4079ca7f0375e141b.tar.bz2
re PR middle-end/56231 (warning traces have bogus line information when using LTO)
2013-02-08 Richard Biener <rguenther@suse.de> PR lto/56231 * lto-streamer.h (struct data_in): Remove current_file, current_line and current_col members. * lto-streamer-out.c (lto_output_location): Stream changed bits en-block for efficiency. * lto-streamer-in.c (clear_line_info): Remove. (lto_input_location): Cache current file, line and column globally via local statics. Read changed bits en-block. (input_function): Do not call clear_line_info. (lto_read_body): Likewise. (lto_input_toplevel_asms): Likewise. lto/ * lto-lang.c (lto_init): Do not enter a dummy file. From-SVN: r195884
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/lto-streamer-in.c45
-rw-r--r--gcc/lto-streamer-out.c5
-rw-r--r--gcc/lto-streamer.h4
-rw-r--r--gcc/lto/ChangeLog5
-rw-r--r--gcc/lto/lto-lang.c3
6 files changed, 38 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d54c1c0..d7b0e64 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,17 @@
+2013-02-08 Richard Biener <rguenther@suse.de>
+
+ PR lto/56231
+ * lto-streamer.h (struct data_in): Remove current_file, current_line
+ and current_col members.
+ * lto-streamer-out.c (lto_output_location): Stream changed bits
+ en-block for efficiency.
+ * lto-streamer-in.c (clear_line_info): Remove.
+ (lto_input_location): Cache current file, line and column
+ globally via local statics. Read changed bits en-block.
+ (input_function): Do not call clear_line_info.
+ (lto_read_body): Likewise.
+ (lto_input_toplevel_asms): Likewise.
+
2013-02-08 Michael Matz <matz@suse.de>
PR tree-optimization/52448
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index fe9dd22..f3a0888 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -123,58 +123,48 @@ canon_file_name (const char *string)
}
-/* Clear the line info stored in DATA_IN. */
-
-static void
-clear_line_info (struct data_in *data_in)
-{
- if (data_in->current_file)
- linemap_add (line_table, LC_LEAVE, false, NULL, 0);
- data_in->current_file = NULL;
- data_in->current_line = 0;
- data_in->current_col = 0;
-}
-
-
/* Read a location bitpack from input block IB. */
location_t
lto_input_location (struct bitpack_d *bp, struct data_in *data_in)
{
+ static const char *current_file;
+ static int current_line;
+ static int current_col;
bool file_change, line_change, column_change;
unsigned len;
- bool prev_file = data_in->current_file != NULL;
+ bool prev_file = current_file != NULL;
if (bp_unpack_value (bp, 1))
return UNKNOWN_LOCATION;
file_change = bp_unpack_value (bp, 1);
+ line_change = bp_unpack_value (bp, 1);
+ column_change = bp_unpack_value (bp, 1);
+
if (file_change)
- data_in->current_file = canon_file_name
- (string_for_index (data_in,
- bp_unpack_var_len_unsigned (bp),
- &len));
+ current_file = canon_file_name
+ (string_for_index (data_in,
+ bp_unpack_var_len_unsigned (bp),
+ &len));
- line_change = bp_unpack_value (bp, 1);
if (line_change)
- data_in->current_line = bp_unpack_var_len_unsigned (bp);
+ current_line = bp_unpack_var_len_unsigned (bp);
- column_change = bp_unpack_value (bp, 1);
if (column_change)
- data_in->current_col = bp_unpack_var_len_unsigned (bp);
+ current_col = bp_unpack_var_len_unsigned (bp);
if (file_change)
{
if (prev_file)
linemap_add (line_table, LC_LEAVE, false, NULL, 0);
- linemap_add (line_table, LC_ENTER, false, data_in->current_file,
- data_in->current_line);
+ linemap_add (line_table, LC_ENTER, false, current_file, current_line);
}
else if (line_change)
- linemap_line_start (line_table, data_in->current_line, data_in->current_col);
+ linemap_line_start (line_table, current_line, current_col);
- return linemap_position_for_column (line_table, data_in->current_col);
+ return linemap_position_for_column (line_table, current_col);
}
@@ -806,7 +796,6 @@ input_function (tree fn_decl, struct data_in *data_in,
fn = DECL_STRUCT_FUNCTION (fn_decl);
tag = streamer_read_record_start (ib);
- clear_line_info (data_in);
gimple_register_cfg_hooks ();
lto_tag_check (tag, LTO_function);
@@ -987,7 +976,6 @@ lto_read_body (struct lto_file_decl_data *file_data, tree fn_decl,
pop_cfun ();
}
- clear_line_info (data_in);
lto_data_in_delete (data_in);
}
@@ -1137,7 +1125,6 @@ lto_input_toplevel_asms (struct lto_file_decl_data *file_data, int order_base)
symtab_order = node->order + 1;
}
- clear_line_info (data_in);
lto_data_in_delete (data_in);
lto_free_section_data (file_data, LTO_section_asm, NULL, data, len);
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index f97f1e2..f8207c8 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -162,6 +162,9 @@ lto_output_location (struct output_block *ob, struct bitpack_d *bp,
xloc = expand_location (loc);
bp_pack_value (bp, ob->current_file != xloc.file, 1);
+ bp_pack_value (bp, ob->current_line != xloc.line, 1);
+ bp_pack_value (bp, ob->current_col != xloc.column, 1);
+
if (ob->current_file != xloc.file)
bp_pack_var_len_unsigned (bp,
streamer_string_index (ob, xloc.file,
@@ -169,12 +172,10 @@ lto_output_location (struct output_block *ob, struct bitpack_d *bp,
true));
ob->current_file = xloc.file;
- bp_pack_value (bp, ob->current_line != xloc.line, 1);
if (ob->current_line != xloc.line)
bp_pack_var_len_unsigned (bp, xloc.line);
ob->current_line = xloc.line;
- bp_pack_value (bp, ob->current_col != xloc.column, 1);
if (ob->current_col != xloc.column)
bp_pack_var_len_unsigned (bp, xloc.column);
ob->current_col = xloc.column;
diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h
index 4e4a4e9..919e304 100644
--- a/gcc/lto-streamer.h
+++ b/gcc/lto-streamer.h
@@ -691,10 +691,6 @@ struct data_in
/* Number of unnamed labels. */
unsigned int num_unnamed_labels;
- const char *current_file;
- int current_line;
- int current_col;
-
/* Maps each reference number to the resolution done by the linker. */
vec<ld_plugin_symbol_resolution_t> globals_resolution;
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 6743f2f..e3530da 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,8 @@
+2013-02-08 Richard Biener <rguenther@suse.de>
+
+ PR lto/56231
+ * lto-lang.c (lto_init): Do not enter a dummy file.
+
2013-02-07 Uros Bizjak <ubizjak@gmail.com>
PR bootstrap/56227
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index b2919ee..87a756d 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -1156,9 +1156,6 @@ lto_init (void)
/* We need to generate LTO if running in WPA mode. */
flag_generate_lto = flag_wpa;
- /* Initialize libcpp line maps for gcc_assert to work. */
- linemap_add (line_table, LC_ENTER, 0, NULL, 0);
-
/* Create the basic integer types. */
build_common_tree_nodes (flag_signed_char, /*short_double=*/false);