re PR middle-end/71907 (missing buffer overflow warnings with -flto)

2016-07-19  Richard Biener  <rguenther@suse.de>

	PR lto/71907
	* lto-streamer-out.c (DFS::DFS_write_tree_body): For blocks
	with an abstract origin that is not an inlined function outer
	scope add a self-reference as abstract origin.
	* tree-streamer-out.c (write_ts_block_tree_pointers): Likewise.

From-SVN: r238456
This commit is contained in:
Richard Biener 2016-07-19 07:35:05 +00:00 committed by Richard Biener
parent a8f7a89526
commit f6918a8b63
3 changed files with 18 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2016-07-19 Richard Biener <rguenther@suse.de>
PR lto/71907
* lto-streamer-out.c (DFS::DFS_write_tree_body): For blocks
with an abstract origin that is not an inlined function outer
scope add a self-reference as abstract origin.
* tree-streamer-out.c (write_ts_block_tree_pointers): Likewise.
2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com> 2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/71493 PR target/71493

View File

@ -890,12 +890,16 @@ DFS::DFS_write_tree_body (struct output_block *ob,
/* Follow BLOCK_ABSTRACT_ORIGIN for the limited cases we can /* Follow BLOCK_ABSTRACT_ORIGIN for the limited cases we can
handle - those that represent inlined function scopes. handle - those that represent inlined function scopes.
For the drop rest them on the floor instead of ICEing For the drop rest them on the floor instead of ICEing
in dwarf2out.c. */ in dwarf2out.c, but keep the notion of whether the block
is an inlined block by refering to itself for the sake of
tree_nonartificial_location. */
if (inlined_function_outer_scope_p (expr)) if (inlined_function_outer_scope_p (expr))
{ {
tree ultimate_origin = block_ultimate_origin (expr); tree ultimate_origin = block_ultimate_origin (expr);
DFS_follow_tree_edge (ultimate_origin); DFS_follow_tree_edge (ultimate_origin);
} }
else if (BLOCK_ABSTRACT_ORIGIN (expr))
DFS_follow_tree_edge (expr);
/* Do not follow BLOCK_NONLOCALIZED_VARS. We cannot handle debug /* Do not follow BLOCK_NONLOCALIZED_VARS. We cannot handle debug
information for early inlined BLOCKs so drop it on the floor instead information for early inlined BLOCKs so drop it on the floor instead
of ICEing in dwarf2out.c. */ of ICEing in dwarf2out.c. */

View File

@ -807,14 +807,17 @@ write_ts_block_tree_pointers (struct output_block *ob, tree expr, bool ref_p)
/* Stream BLOCK_ABSTRACT_ORIGIN for the limited cases we can handle - those /* Stream BLOCK_ABSTRACT_ORIGIN for the limited cases we can handle - those
that represent inlined function scopes. that represent inlined function scopes.
For the rest them on the floor instead of ICEing in dwarf2out.c. */ For the rest them on the floor instead of ICEing in dwarf2out.c, but
keep the notion of whether the block is an inlined block by refering
to itself for the sake of tree_nonartificial_location. */
if (inlined_function_outer_scope_p (expr)) if (inlined_function_outer_scope_p (expr))
{ {
tree ultimate_origin = block_ultimate_origin (expr); tree ultimate_origin = block_ultimate_origin (expr);
stream_write_tree (ob, ultimate_origin, ref_p); stream_write_tree (ob, ultimate_origin, ref_p);
} }
else else
stream_write_tree (ob, NULL_TREE, ref_p); stream_write_tree (ob, (BLOCK_ABSTRACT_ORIGIN (expr)
? expr : NULL_TREE), ref_p);
/* Do not stream BLOCK_NONLOCALIZED_VARS. We cannot handle debug information /* Do not stream BLOCK_NONLOCALIZED_VARS. We cannot handle debug information
for early inlined BLOCKs so drop it on the floor instead of ICEing in for early inlined BLOCKs so drop it on the floor instead of ICEing in
dwarf2out.c. */ dwarf2out.c. */