diff options
author | Jan Hubicka <jh@suse.cz> | 2018-04-10 08:33:38 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2018-04-10 06:33:38 +0000 |
commit | c1b8f25d8090e778b330555005c81bc0c582a6b8 (patch) | |
tree | 7820fbe8f54a1910d5b3f0a145e1fea2b418a3e4 /gcc/tree.c | |
parent | f518da46fbbdd79ab13417440198110dc9fc96d3 (diff) | |
download | gcc-c1b8f25d8090e778b330555005c81bc0c582a6b8.zip gcc-c1b8f25d8090e778b330555005c81bc0c582a6b8.tar.gz gcc-c1b8f25d8090e778b330555005c81bc0c582a6b8.tar.bz2 |
re PR lto/85078 (LTO ICE: tree check: expected tree that contains 'decl minimal' structure, have 'identifier_node' in decl_mangling_context, at cp/mangle.c:878)
PR lto/85078
* ipa-devirt.c (rebuild_type_inheritance-hash): New.
* ipa-utils.h (rebuild_type_inheritance-hash): Declare.
* tree.c (free_lang_data_in_type): Fix handling of binfos;
walk basetypes.
(free_lang_data): Rebuild type inheritance graph.
* g++.dg/torture/pr85078.C: New.
From-SVN: r259264
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -5521,7 +5521,8 @@ find_decls_types_r (tree *tp, int *ws, void *data) tree tem; FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem) fld_worklist_push (TREE_TYPE (tem), fld); - fld_worklist_push (BINFO_VIRTUALS (TYPE_BINFO (t)), fld); + fld_worklist_push (BINFO_TYPE (TYPE_BINFO (t)), fld); + fld_worklist_push (BINFO_VTABLE (TYPE_BINFO (t)), fld); } if (RECORD_OR_UNION_TYPE_P (t)) { @@ -5540,6 +5541,8 @@ find_decls_types_r (tree *tp, int *ws, void *data) tem = TREE_CHAIN (tem); } } + if (FUNC_OR_METHOD_TYPE_P (t)) + fld_worklist_push (TYPE_METHOD_BASETYPE (t), fld); fld_worklist_push (TYPE_STUB_DECL (t), fld); *ws = 0; @@ -5859,6 +5862,8 @@ free_lang_data (void) /* Reset diagnostic machinery. */ tree_diagnostics_defaults (global_dc); + rebuild_type_inheritance_graph (); + return 0; } |