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> 2020-01-14 David Malcolm <dmalcolm@redhat.com>
* cp-gimplify.c (source_location_table_entry_hash::empty_zero_p): * cp-gimplify.c (source_location_table_entry_hash::empty_zero_p):
......
...@@ -1252,11 +1252,16 @@ retrieve_specialization (tree tmpl, tree args, hashval_t hash) ...@@ -1252,11 +1252,16 @@ retrieve_specialization (tree tmpl, tree args, hashval_t hash)
for (ovl_iterator iter (fns); iter; ++iter) for (ovl_iterator iter (fns); iter; ++iter)
{ {
tree fn = *iter; tree fn = *iter;
if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl if (tree ti = (TREE_CODE (fn) == TYPE_DECL && !TYPE_DECL_ALIAS_P (fn)
/* using-declarations can add base methods to the method vec, ? TYPE_TEMPLATE_INFO (TREE_TYPE (fn))
and we don't want those here. */ : DECL_TEMPLATE_INFO (fn)))
&& DECL_CONTEXT (fn) == class_specialization) if (TI_TEMPLATE (ti) == tmpl
return fn; /* 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; 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