On Thu, 21 Jun 2018, Jan Hubicka wrote:

> Hi,
> this patch drops DECL_ORIGINAL_TYPE streaming and also logic handling
> external decls in blocks since we no longer stream them at all.
> 
> Bootstrapped/regtested x86_64-linux, OK?

OK.

Thanks,
Richard.

> Honza
> 
>       * lto-streamer-out.c (DFS::DFS_write_tree_body): Do not
>       stream DECL_ORIGINAL_TYPE.
>       (DFS::DFS_write_tree_body): Drop hack handling local external decls.
>       (hash_tree): Do not walk DECL_ORIGINAL_TYPE.
>       * tree-streamer-in.c (lto_input_ts_decl_non_common_tree_pointers):
>       Do not walk original type.
>       * tree-streamer-out.c (streamer_write_chain): Drop hack handling
>       external decls.
>       (write_ts_decl_non_common_tree_pointers): Do not stream
>       DECL_ORIGINAL_TYPE
>       * tree.c (free_lang_data_in_decl): Clear DECL_ORIGINAL_TYPE.
>       (find_decls_types_r): Do not walk DEC_ORIGINAL_TYPE.
> 
> Index: lto-streamer-out.c
> ===================================================================
> --- lto-streamer-out.c        (revision 261841)
> +++ lto-streamer-out.c        (working copy)
> @@ -819,12 +819,6 @@ DFS::DFS_write_tree_body (struct output_
>       DFS_follow_tree_edge (DECL_DEBUG_EXPR (expr));
>      }
>  
> -  if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
> -    {
> -      if (TREE_CODE (expr) == TYPE_DECL)
> -     DFS_follow_tree_edge (DECL_ORIGINAL_TYPE (expr));
> -    }
> -
>    if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
>      {
>        /* Make sure we don't inadvertently set the assembler name.  */
> @@ -907,14 +901,13 @@ DFS::DFS_write_tree_body (struct output_
>    if (CODE_CONTAINS_STRUCT (code, TS_BLOCK))
>      {
>        for (tree t = BLOCK_VARS (expr); t; t = TREE_CHAIN (t))
> -     if (VAR_OR_FUNCTION_DECL_P (t)
> -         && DECL_EXTERNAL (t))
> -       /* We have to stream externals in the block chain as
> -          non-references.  See also
> -          tree-streamer-out.c:streamer_write_chain.  */
> -       DFS_write_tree (ob, expr_state, t, ref_p, false);
> -     else
> +     {
> +       /* We would have to stream externals in the block chain as
> +          non-references but we should have dropped them in
> +          free-lang-data.  */
> +       gcc_assert (!VAR_OR_FUNCTION_DECL_P (t) || !DECL_EXTERNAL (t));
>         DFS_follow_tree_edge (t);
> +     }
>  
>        DFS_follow_tree_edge (BLOCK_SUPERCONTEXT (expr));
>  
> @@ -1261,12 +1249,6 @@ hash_tree (struct streamer_tree_cache_d
>           be able to call get_symbol_initial_value.  */
>      }
>  
> -  if (CODE_CONTAINS_STRUCT (code, TS_DECL_NON_COMMON))
> -    {
> -      if (code == TYPE_DECL)
> -     visit (DECL_ORIGINAL_TYPE (t));
> -    }
> -
>    if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS))
>      {
>        if (DECL_ASSEMBLER_NAME_SET_P (t))
> Index: tree-streamer-in.c
> ===================================================================
> --- tree-streamer-in.c        (revision 261841)
> +++ tree-streamer-in.c        (working copy)
> @@ -728,11 +721,9 @@ lto_input_ts_decl_common_tree_pointers (
>     file being read.  */
>  
>  static void
> -lto_input_ts_decl_non_common_tree_pointers (struct lto_input_block *ib,
> -                                         struct data_in *data_in, tree expr)
> +lto_input_ts_decl_non_common_tree_pointers (struct lto_input_block *,
> +                                         struct data_in *, tree)
>  {
> -  if (TREE_CODE (expr) == TYPE_DECL)
> -    DECL_ORIGINAL_TYPE (expr) = stream_read_tree (ib, data_in);
>  }
>  
>  
> Index: tree-streamer-out.c
> ===================================================================
> --- tree-streamer-out.c       (revision 261841)
> +++ tree-streamer-out.c       (working copy)
> @@ -497,14 +494,10 @@ streamer_write_chain (struct output_bloc
>      {
>        /* We avoid outputting external vars or functions by reference
>        to the global decls section as we do not want to have them
> -      enter decl merging.  This is, of course, only for the call
> -      for streaming BLOCK_VARS, but other callers are safe.
> -      See also lto-streamer-out.c:DFS_write_tree_body.  */
> -      if (VAR_OR_FUNCTION_DECL_P (t)
> -       && DECL_EXTERNAL (t))
> -     stream_write_tree_shallow_non_ref (ob, t, ref_p);
> -      else
> -     stream_write_tree (ob, t, ref_p);
> +      enter decl merging.  We should not need to do this anymore because
> +      free_lang_data removes them from block scopes.  */
> +      gcc_assert (!VAR_OR_FUNCTION_DECL_P (t) || !DECL_EXTERNAL (t));
> +      stream_write_tree (ob, t, ref_p);
>  
>        t = TREE_CHAIN (t);
>      }
> @@ -620,11 +613,8 @@ write_ts_decl_common_tree_pointers (stru
>     pointer fields.  */
>  
>  static void
> -write_ts_decl_non_common_tree_pointers (struct output_block *ob, tree expr,
> -                                     bool ref_p)
> +write_ts_decl_non_common_tree_pointers (struct output_block *, tree, bool)
>  {
> -  if (TREE_CODE (expr) == TYPE_DECL)
> -    stream_write_tree (ob, DECL_ORIGINAL_TYPE (expr), ref_p);
>  }
>  
>  
> Index: tree.c
> ===================================================================
> --- tree.c    (revision 261841)
> +++ tree.c    (working copy)
> @@ -5359,6 +5357,7 @@ free_lang_data_in_decl (tree decl)
>        DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
>        DECL_VISIBILITY_SPECIFIED (decl) = 0;
>        DECL_INITIAL (decl) = NULL_TREE;
> +      DECL_ORIGINAL_TYPE (decl) = NULL_TREE;
>      }
>    else if (TREE_CODE (decl) == FIELD_DECL)
>      DECL_INITIAL (decl) = NULL_TREE;
> @@ -5471,10 +5470,6 @@ find_decls_types_r (tree *tp, int *ws, v
>         fld_worklist_push (DECL_ARGUMENTS (t), fld);
>         fld_worklist_push (DECL_RESULT (t), fld);
>       }
> -      else if (TREE_CODE (t) == TYPE_DECL)
> -     {
> -       fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
> -     }
>        else if (TREE_CODE (t) == FIELD_DECL)
>       {
>         fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to