From f6918a8b63ad38e475c23e26df0f3c4f7faad6cb Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 19 Jul 2016 07:35:05 +0000 Subject: [PATCH] re PR middle-end/71907 (missing buffer overflow warnings with -flto) 2016-07-19 Richard Biener 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 --- gcc/ChangeLog | 8 ++++++++ gcc/lto-streamer-out.c | 6 +++++- gcc/tree-streamer-out.c | 7 +++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d7c09912a4..bff71602ecf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-07-19 Richard Biener + + 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 PR target/71493 diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index ed6f7482dbd..e243337d8e9 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -890,12 +890,16 @@ DFS::DFS_write_tree_body (struct output_block *ob, /* Follow BLOCK_ABSTRACT_ORIGIN for the limited cases we can handle - those that represent inlined function scopes. 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)) { tree ultimate_origin = block_ultimate_origin (expr); 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 information for early inlined BLOCKs so drop it on the floor instead of ICEing in dwarf2out.c. */ diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c index c37755d2008..a70666b2fd4 100644 --- a/gcc/tree-streamer-out.c +++ b/gcc/tree-streamer-out.c @@ -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 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)) { tree ultimate_origin = block_ultimate_origin (expr); stream_write_tree (ob, ultimate_origin, ref_p); } 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 for early inlined BLOCKs so drop it on the floor instead of ICEing in dwarf2out.c. */ -- 2.30.2