Commit a5a3c2dc by Nathan Sidwell

[PR90916] ICE in retrieve specialization

https://gcc.gnu.org/ml/gcc-patches/2020-01/msg00809.html
	PR c++/90916
	* pt.c (retrieve_specialization): Get the TI from the decl or the
	classtype as appropriate.
parent 6bd65ad8
2020-01-14 Nathan Sidwell <nathan@acm.org>
PR c++/90916
* pt.c (retrieve_specialization): Get the TI from the decl or the
classtype as appropriate.
2020-01-14 David Malcolm <dmalcolm@redhat.com>
* cp-gimplify.c (source_location_table_entry_hash::empty_zero_p):
......
......@@ -1252,11 +1252,16 @@ retrieve_specialization (tree tmpl, tree args, hashval_t hash)
for (ovl_iterator iter (fns); iter; ++iter)
{
tree fn = *iter;
if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
/* using-declarations can add base methods to the method vec,
and we don't want those here. */
&& DECL_CONTEXT (fn) == class_specialization)
return fn;
if (tree ti = (TREE_CODE (fn) == TYPE_DECL && !TYPE_DECL_ALIAS_P (fn)
? TYPE_TEMPLATE_INFO (TREE_TYPE (fn))
: DECL_TEMPLATE_INFO (fn)))
if (TI_TEMPLATE (ti) == tmpl
/* using-declarations can bring in a different
instantiation of tmpl as a member of a different
instantiation of tmpl's class. We don't want those
here. */
&& DECL_CONTEXT (fn) == class_specialization)
return fn;
}
return NULL_TREE;
}
......
// PR c++/90916 ICE in retrieve_specialization
template <typename> struct S
{
struct A;
struct f A ();
};
template class S <int>;
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