aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2018-08-29 19:07:35 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2018-08-29 17:07:35 +0000
commitb9a0baa9f941537de5ea2c431830a8da33692d88 (patch)
tree25887dd9b3314ef17b07e5bd3abee62451db85a4 /gcc
parentd176b500dcd39c8158ffd445e2aa5de09e06bac1 (diff)
downloadgcc-b9a0baa9f941537de5ea2c431830a8da33692d88.zip
gcc-b9a0baa9f941537de5ea2c431830a8da33692d88.tar.gz
gcc-b9a0baa9f941537de5ea2c431830a8da33692d88.tar.bz2
tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers): Do not stream DECL_VINDEX.
* tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers): Do not stream DECL_VINDEX. * tree-streamer-out.c (write_ts_function_decl_tree_pointers): Likewise. * tree.c (free_lang_data_in_decl): Clear DECL_VINDEX. (decl_function_context): Use DECL_VIRTUAL_P rather than DECL_VINDEX. From-SVN: r263962
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-streamer-in.c1
-rw-r--r--gcc/tree-streamer-out.c1
-rw-r--r--gcc/tree.c9
4 files changed, 10 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dcec935..00d6f30 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2018-08-29 Jan Hubicka <jh@suse.cz>
+
+ * tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers):
+ Do not stream DECL_VINDEX.
+ * tree-streamer-out.c (write_ts_function_decl_tree_pointers): Likewise.
+ * tree.c (free_lang_data_in_decl): Clear DECL_VINDEX.
+ (decl_function_context): Use DECL_VIRTUAL_P rather than DECL_VINDEX.
+
2018-08-29 Richard Biener <rguenther@suse.de>
* tree-ssa-sccvn.c (vuse_ssa_val): Return NULL for unvisited
diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c
index 43cd9a4..34cbb19 100644
--- a/gcc/tree-streamer-in.c
+++ b/gcc/tree-streamer-in.c
@@ -769,7 +769,6 @@ static void
lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
struct data_in *data_in, tree expr)
{
- DECL_VINDEX (expr) = stream_read_tree (ib, data_in);
/* DECL_STRUCT_FUNCTION is loaded on demand by cgraph_get_body. */
DECL_FUNCTION_PERSONALITY (expr) = stream_read_tree (ib, data_in);
#ifndef ACCEL_COMPILER
diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c
index a68cd4b..d86f352 100644
--- a/gcc/tree-streamer-out.c
+++ b/gcc/tree-streamer-out.c
@@ -657,7 +657,6 @@ static void
write_ts_function_decl_tree_pointers (struct output_block *ob, tree expr,
bool ref_p)
{
- stream_write_tree (ob, DECL_VINDEX (expr), ref_p);
/* DECL_STRUCT_FUNCTION is handled by lto_output_function. */
stream_write_tree (ob, DECL_FUNCTION_PERSONALITY (expr), ref_p);
/* Don't stream these when passing things to a different target. */
diff --git a/gcc/tree.c b/gcc/tree.c
index 5ae4674..d1e1b30 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5339,12 +5339,7 @@ free_lang_data_in_decl (tree decl)
(DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
- /* Sometimes the C++ frontend doesn't manage to transform a temporary
- DECL_VINDEX referring to itself into a vtable slot number as it
- should. Happens with functions that are copied and then forgotten
- about. Just clear it, it won't matter anymore. */
- if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
- DECL_VINDEX (decl) = NULL_TREE;
+ DECL_VINDEX (decl) = NULL_TREE;
}
else if (VAR_P (decl))
{
@@ -8989,7 +8984,7 @@ decl_function_context (const_tree decl)
C++ should really be fixed to use DECL_CONTEXT for the real context,
and use something else for the "virtual context". */
- else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
+ else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
context
= TYPE_MAIN_VARIANT
(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));