From 69e02b35555e214a8f0c4c026d15b8c67584e208 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 11 Jul 2018 18:38:27 +0200 Subject: [PATCH] lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream DECL_ORIGINAL_TYPE. * 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. From-SVN: r262560 --- gcc/ChangeLog | 15 +++++++++++++++ gcc/lto-streamer-out.c | 25 ++++++------------------- gcc/tree-streamer-in.c | 6 ++---- gcc/tree-streamer-out.c | 17 +++++------------ gcc/tree.c | 5 +---- 5 files changed, 29 insertions(+), 39 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ce4315b..d94165b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2018-07-11 Jan Hubicka + + * 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. + 2018-07-11 Aldy Hernandez * tree-ssa-threadupdate.c (thread_through_all_blocks): Do not jump diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index e7769f8..5391027 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -819,12 +819,6 @@ DFS::DFS_write_tree_body (struct output_block *ob, 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_block *ob, 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)); DFS_follow_tree_edge (BLOCK_ABSTRACT_ORIGIN (expr)); @@ -1244,12 +1237,6 @@ hash_tree (struct streamer_tree_cache_d *cache, hash_map *map, 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)) diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c index 4bb420c..149f558 100644 --- a/gcc/tree-streamer-in.c +++ b/gcc/tree-streamer-in.c @@ -721,11 +721,9 @@ lto_input_ts_decl_common_tree_pointers (struct lto_input_block *ib, 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); } diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c index 8b20f0a..ba57b97 100644 --- a/gcc/tree-streamer-out.c +++ b/gcc/tree-streamer-out.c @@ -494,14 +494,10 @@ streamer_write_chain (struct output_block *ob, tree t, bool ref_p) { /* 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); } @@ -617,11 +613,8 @@ write_ts_decl_common_tree_pointers (struct output_block *ob, tree expr, 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); } diff --git a/gcc/tree.c b/gcc/tree.c index afd41d4..e906cdc 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5357,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; @@ -5469,10 +5470,6 @@ find_decls_types_r (tree *tp, int *ws, void *data) 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); -- 2.7.4