Commit 438c0fa8 by Jason Merrill Committed by Jason Merrill

re PR c++/35828 ([C++0x] ICE on default template template parameter in template function)

	PR c++/35828
	* pt.c (tsubst_decl): Don't abort if we didn't change anything
	in a TEMPLATE_DECL's args.

From-SVN: r149351
parent 5e278028
2009-07-07 Jason Merrill <jason@redhat.com>
PR c++/35828
* pt.c (tsubst_decl): Don't abort if we didn't change anything
in a TEMPLATE_DECL's args.
2009-07-07 Manuel López-Ibáñez <manu@gcc.gnu.org> 2009-07-07 Manuel López-Ibáñez <manu@gcc.gnu.org>
* semantics.c (finalize_nrv_r): Replace EXPR_LOCUS by * semantics.c (finalize_nrv_r): Replace EXPR_LOCUS by
......
...@@ -8306,8 +8306,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) ...@@ -8306,8 +8306,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
case TEMPLATE_DECL: case TEMPLATE_DECL:
{ {
/* We can get here when processing a member function template, /* We can get here when processing a member function template,
member class template, and template template parameter of member class template, or template template parameter. */
a template class. */
tree decl = DECL_TEMPLATE_RESULT (t); tree decl = DECL_TEMPLATE_RESULT (t);
tree spec; tree spec;
tree tmpl_args; tree tmpl_args;
...@@ -8351,10 +8350,10 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) ...@@ -8351,10 +8350,10 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
if (full_args == error_mark_node) if (full_args == error_mark_node)
return error_mark_node; return error_mark_node;
/* tsubst_template_args doesn't copy the vector if /* If this is a default template template argument,
nothing changed. But, *something* should have tsubst might not have changed anything. */
changed. */ if (full_args == tmpl_args)
gcc_assert (full_args != tmpl_args); return t;
hash = hash_tmpl_and_args (t, full_args); hash = hash_tmpl_and_args (t, full_args);
spec = retrieve_specialization (t, full_args, hash); spec = retrieve_specialization (t, full_args, hash);
......
2009-07-07 Jason Merrill <jason@redhat.com> 2009-07-07 Jason Merrill <jason@redhat.com>
PR c++/35828
* g++.dg/template/defarg12.C: New.
PR c++/37816 PR c++/37816
* g++.dg/cpp0x/enum7.C: New. * g++.dg/cpp0x/enum7.C: New.
......
// PR c++/35828
// { dg-options "-std=c++0x" }
template < typename > struct A ;
template < template < typename > class = A >
void test ()
{
test ();
}
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