mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
c1ca73d819
commit
e45cde9826
|
|
@ -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>
|
2013-02-08 Michael Matz <matz@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/52448
|
PR tree-optimization/52448
|
||||||
|
|
|
||||||
|
|
@ -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. */
|
/* Read a location bitpack from input block IB. */
|
||||||
|
|
||||||
location_t
|
location_t
|
||||||
lto_input_location (struct bitpack_d *bp, struct data_in *data_in)
|
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;
|
bool file_change, line_change, column_change;
|
||||||
unsigned len;
|
unsigned len;
|
||||||
bool prev_file = data_in->current_file != NULL;
|
bool prev_file = current_file != NULL;
|
||||||
|
|
||||||
if (bp_unpack_value (bp, 1))
|
if (bp_unpack_value (bp, 1))
|
||||||
return UNKNOWN_LOCATION;
|
return UNKNOWN_LOCATION;
|
||||||
|
|
||||||
file_change = bp_unpack_value (bp, 1);
|
file_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));
|
|
||||||
|
|
||||||
line_change = bp_unpack_value (bp, 1);
|
line_change = bp_unpack_value (bp, 1);
|
||||||
if (line_change)
|
|
||||||
data_in->current_line = bp_unpack_var_len_unsigned (bp);
|
|
||||||
|
|
||||||
column_change = bp_unpack_value (bp, 1);
|
column_change = bp_unpack_value (bp, 1);
|
||||||
|
|
||||||
|
if (file_change)
|
||||||
|
current_file = canon_file_name
|
||||||
|
(string_for_index (data_in,
|
||||||
|
bp_unpack_var_len_unsigned (bp),
|
||||||
|
&len));
|
||||||
|
|
||||||
|
if (line_change)
|
||||||
|
current_line = bp_unpack_var_len_unsigned (bp);
|
||||||
|
|
||||||
if (column_change)
|
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 (file_change)
|
||||||
{
|
{
|
||||||
if (prev_file)
|
if (prev_file)
|
||||||
linemap_add (line_table, LC_LEAVE, false, NULL, 0);
|
linemap_add (line_table, LC_LEAVE, false, NULL, 0);
|
||||||
|
|
||||||
linemap_add (line_table, LC_ENTER, false, data_in->current_file,
|
linemap_add (line_table, LC_ENTER, false, current_file, current_line);
|
||||||
data_in->current_line);
|
|
||||||
}
|
}
|
||||||
else if (line_change)
|
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);
|
fn = DECL_STRUCT_FUNCTION (fn_decl);
|
||||||
tag = streamer_read_record_start (ib);
|
tag = streamer_read_record_start (ib);
|
||||||
clear_line_info (data_in);
|
|
||||||
|
|
||||||
gimple_register_cfg_hooks ();
|
gimple_register_cfg_hooks ();
|
||||||
lto_tag_check (tag, LTO_function);
|
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 ();
|
pop_cfun ();
|
||||||
}
|
}
|
||||||
|
|
||||||
clear_line_info (data_in);
|
|
||||||
lto_data_in_delete (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;
|
symtab_order = node->order + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
clear_line_info (data_in);
|
|
||||||
lto_data_in_delete (data_in);
|
lto_data_in_delete (data_in);
|
||||||
|
|
||||||
lto_free_section_data (file_data, LTO_section_asm, NULL, data, len);
|
lto_free_section_data (file_data, LTO_section_asm, NULL, data, len);
|
||||||
|
|
|
||||||
|
|
@ -162,6 +162,9 @@ lto_output_location (struct output_block *ob, struct bitpack_d *bp,
|
||||||
xloc = expand_location (loc);
|
xloc = expand_location (loc);
|
||||||
|
|
||||||
bp_pack_value (bp, ob->current_file != xloc.file, 1);
|
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)
|
if (ob->current_file != xloc.file)
|
||||||
bp_pack_var_len_unsigned (bp,
|
bp_pack_var_len_unsigned (bp,
|
||||||
streamer_string_index (ob, xloc.file,
|
streamer_string_index (ob, xloc.file,
|
||||||
|
|
@ -169,12 +172,10 @@ lto_output_location (struct output_block *ob, struct bitpack_d *bp,
|
||||||
true));
|
true));
|
||||||
ob->current_file = xloc.file;
|
ob->current_file = xloc.file;
|
||||||
|
|
||||||
bp_pack_value (bp, ob->current_line != xloc.line, 1);
|
|
||||||
if (ob->current_line != xloc.line)
|
if (ob->current_line != xloc.line)
|
||||||
bp_pack_var_len_unsigned (bp, xloc.line);
|
bp_pack_var_len_unsigned (bp, xloc.line);
|
||||||
ob->current_line = xloc.line;
|
ob->current_line = xloc.line;
|
||||||
|
|
||||||
bp_pack_value (bp, ob->current_col != xloc.column, 1);
|
|
||||||
if (ob->current_col != xloc.column)
|
if (ob->current_col != xloc.column)
|
||||||
bp_pack_var_len_unsigned (bp, xloc.column);
|
bp_pack_var_len_unsigned (bp, xloc.column);
|
||||||
ob->current_col = xloc.column;
|
ob->current_col = xloc.column;
|
||||||
|
|
|
||||||
|
|
@ -691,10 +691,6 @@ struct data_in
|
||||||
/* Number of unnamed labels. */
|
/* Number of unnamed labels. */
|
||||||
unsigned int num_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. */
|
/* Maps each reference number to the resolution done by the linker. */
|
||||||
vec<ld_plugin_symbol_resolution_t> globals_resolution;
|
vec<ld_plugin_symbol_resolution_t> globals_resolution;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2013-02-07 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
PR bootstrap/56227
|
PR bootstrap/56227
|
||||||
|
|
|
||||||
|
|
@ -1156,9 +1156,6 @@ lto_init (void)
|
||||||
/* We need to generate LTO if running in WPA mode. */
|
/* We need to generate LTO if running in WPA mode. */
|
||||||
flag_generate_lto = flag_wpa;
|
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. */
|
/* Create the basic integer types. */
|
||||||
build_common_tree_nodes (flag_signed_char, /*short_double=*/false);
|
build_common_tree_nodes (flag_signed_char, /*short_double=*/false);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue