From b9a0baa9f941537de5ea2c431830a8da33692d88 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 29 Aug 2018 19:07:35 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/tree-streamer-in.c | 1 - gcc/tree-streamer-out.c | 1 - gcc/tree.c | 9 ++------- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dcec935d5be..00d6f306744 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-08-29 Jan Hubicka + + * 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 * 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 43cd9a4cad1..34cbb193b8b 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 a68cd4b135b..d86f3524e3a 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 5ae467437b5..d1e1b3048d4 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))))); -- 2.30.2