aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2018-07-11 18:38:27 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2018-07-11 16:38:27 +0000
commit69e02b35555e214a8f0c4c026d15b8c67584e208 (patch)
tree506a543d4b9fe4b4ca59144e91bd850e8686d4c6 /gcc
parentf790df6be014576524f55670a136eb622e595377 (diff)
downloadgcc-69e02b35555e214a8f0c4c026d15b8c67584e208.zip
gcc-69e02b35555e214a8f0c4c026d15b8c67584e208.tar.gz
gcc-69e02b35555e214a8f0c4c026d15b8c67584e208.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/lto-streamer-out.c25
-rw-r--r--gcc/tree-streamer-in.c6
-rw-r--r--gcc/tree-streamer-out.c17
-rw-r--r--gcc/tree.c5
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 <hubicka@ucw.cz>
+
+ * 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 <aldyh@redhat.com>
* 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<tree, hashval_t> *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);