[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.
This commit is contained in:
parent
6bd65ad89c
commit
a5a3c2dcf7
3 changed files with 24 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
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):
|
||||
|
|
15
gcc/cp/pt.c
15
gcc/cp/pt.c
|
@ -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;
|
||||
}
|
||||
|
|
8
gcc/testsuite/g++.dg/template/pr90916.C
Normal file
8
gcc/testsuite/g++.dg/template/pr90916.C
Normal file
|
@ -0,0 +1,8 @@
|
|||
// PR c++/90916 ICE in retrieve_specialization
|
||||
|
||||
template <typename> struct S
|
||||
{
|
||||
struct A;
|
||||
struct f A ();
|
||||
};
|
||||
template class S <int>;
|
Loading…
Add table
Reference in a new issue