diff options
author | Richard Biener <rguenther@suse.de> | 2013-02-08 12:55:13 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-02-08 12:55:13 +0000 |
commit | e45cde982611c5a86c215dd4079ca7f0375e141b (patch) | |
tree | 2b580cff0a35536512ce08acfa951238833efcb5 /gcc | |
parent | c1ca73d819136e8fee6af5b8a616840ee59594d6 (diff) | |
download | gcc-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/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/lto-streamer-in.c | 45 | ||||
-rw-r--r-- | gcc/lto-streamer-out.c | 5 | ||||
-rw-r--r-- | gcc/lto-streamer.h | 4 | ||||
-rw-r--r-- | gcc/lto/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/lto/lto-lang.c | 3 |
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); |