[PATCH] Fix PR71907

Richard Biener rguenther@suse.de
Mon Jul 18 13:20:00 GMT 2016


The following avoids PR71907 (tree_nonartificial_location failing)
by making sure to not completely drop BLOCK_ABSTRACT_ORIGIN but instead
add self-references (a "this has been inlined flag basically") for
BLOCKs not being inlined_function_outer_scope_p.

LTO bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Without this all fortify warnings are now silent as GCC 6 honors
the in-system-header flag of locations (-Wsystem-headers make them
appear again).

Richard.

2016-07-18  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.

Index: gcc/lto-streamer-out.c
===================================================================
*** gcc/lto-streamer-out.c	(revision 238426)
--- gcc/lto-streamer-out.c	(working copy)
*************** DFS::DFS_write_tree_body (struct output_
*** 890,901 ****
        /* 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.  */
        if (inlined_function_outer_scope_p (expr))
  	{
  	  tree ultimate_origin = block_ultimate_origin (expr);
  	  DFS_follow_tree_edge (ultimate_origin);
  	}
        /* 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.  */
--- 890,905 ----
        /* 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, 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: gcc/tree-streamer-out.c
===================================================================
*** gcc/tree-streamer-out.c	(revision 238426)
--- gcc/tree-streamer-out.c	(working copy)
*************** write_ts_block_tree_pointers (struct out
*** 807,820 ****
  
    /* 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.  */
    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);
    /* 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.  */
--- 807,823 ----
  
    /* 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, 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, (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.  */



More information about the Gcc-patches mailing list