re PR middle-end/71907 (missing buffer overflow warnings with -flto)
authorRichard Biener <rguenther@suse.de>
Tue, 19 Jul 2016 07:35:05 +0000 (07:35 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 19 Jul 2016 07:35:05 +0000 (07:35 +0000)
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

gcc/ChangeLog
gcc/lto-streamer-out.c
gcc/tree-streamer-out.c

index 5d7c09912a4eacedbd54d86fb6c6db652ccfce76..bff71602ecf3b1055db76b48bca0420b444e303c 100644 (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>
 
        PR target/71493
index ed6f7482dbdc5f13ad71b8e09f16932320a9a091..e243337d8e90b427bbbc5d3c06034965410c65c9 100644 (file)
@@ -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.  */
index c37755d20084727ca7edfe076b5597795e6cb284..a70666b2fd4bdd993668cb6b95da8924fae60e1f 100644 (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
      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.  */