Commit c1b8f25d by Jan Hubicka Committed by Jan Hubicka

re PR lto/85078 (LTO ICE: tree check: expected tree that contains 'decl minimal'…

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
parent f518da46
2018-04-09 Jan Hubicka <jh@suse.cz>
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.
2018-04-09 Martin Sebor <msebor@redhat.com>
* invoke.texi (-finline-small-functions): Mention other optimization
......
......@@ -2702,6 +2702,24 @@ free_polymorphic_call_targets_hash ()
}
}
/* Force rebuilding type inheritance graph from scratch.
This is use to make sure that we do not keep references to types
which was not visible to free_lang_data. */
void
rebuild_type_inheritance_graph ()
{
if (!odr_hash)
return;
delete odr_hash;
if (in_lto_p)
delete odr_vtable_hash;
odr_hash = NULL;
odr_vtable_hash = NULL;
odr_types_ptr = NULL;
free_polymorphic_call_targets_hash ();
}
/* When virtual function is removed, we may need to flush the cache. */
static void
......
......@@ -55,6 +55,7 @@ bool ipa_propagate_frequency (struct cgraph_node *node);
struct odr_type_d;
typedef odr_type_d *odr_type;
void build_type_inheritance_graph (void);
void rebuild_type_inheritance_graph (void);
void update_type_inheritance_graph (void);
vec <cgraph_node *>
possible_polymorphic_call_targets (tree, HOST_WIDE_INT,
......
2018-04-09 Jan Hubicka <jh@suse.cz>
PR lto/85078
* g++.dg/torture/pr85078.C: New.
2018-04-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/85227
......
typedef __builtin_va_list a;
class b
{
public:
virtual void c (int, const char *, a &);
char d;
void m_fn2 ()
{
a a;
c (2, &d, a);
}
};
class e:b
{
virtual void f ()
{
}
void c (int, const char *, a &);
};
class g
{
protected:
b h;
};
class i:g
{
int j ();
};
int
i::j ()
{
h.m_fn2 ();
return 0;
}
......@@ -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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment