From: Kriang Lerdsuwanakij Date: Thu, 20 Jun 2002 14:38:06 +0000 (+0000) Subject: re PR c++/6723 (ICE on source code successfully compiled by previous versions) X-Git-Tag: releases/gcc-3.3.0~4198 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=342cea9509fcfea8b53cfbb4c67ee6a74aff11cf;p=thirdparty%2Fgcc.git re PR c++/6723 (ICE on source code successfully compiled by previous versions) PR c++/6723 * pt.c (lookup_template_class): Don't build complete argument of BOUND_TEMPLATE_TEMPLATE_PARM if appeared as a default template argument. * g++.dg/template/ttp4.C: New test. From-SVN: r54831 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b599aba347f4..b570cc32ee70 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2002-06-20 Kriang Lerdsuwanakij + + PR c++/6723 + * pt.c (lookup_template_class): Don't build complete argument of + BOUND_TEMPLATE_TEMPLATE_PARM if appeared as a default template + argument. + 2002-06-19 Akim Demaille * parse.y (TYPENAME): Rename as tTYPENAME to avoid the clash with diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 873e5a3f1416..c10012247dc7 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3967,10 +3967,16 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain) The template parameter level of T and U are one level larger than of TT. To proper process the default argument of U, say when an instantiation `TT' is seen, we need to build the full - arguments containing {int} as the innermost level. Outer levels - can be obtained from `current_template_args ()'. */ + arguments containing {int} as the innermost level. Outer levels, + available when not appearing as default template argument, can be + obtained from `current_template_args ()'. - if (processing_template_decl) + Suppose that TT is later substituted with std::vector. The above + instantiation is `TT >' with TT at + level 1, and T at level 2, while the template arguments at level 1 + becomes {std::vector} and the inner level 2 is {int}. */ + + if (current_template_parms) arglist = add_to_template_args (current_template_args (), arglist); arglist2 = coerce_template_parms (parmlist, arglist, template, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0c1b43ce5330..e2e879984c7a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-06-20 Kriang Lerdsuwanakij + + * g++.dg/template/ttp4.C: New test. + 2002-06-19 Jakub Jelinek * g++.dg/opt/vt1.C: Fix regexp. diff --git a/gcc/testsuite/g++.dg/template/ttp4.C b/gcc/testsuite/g++.dg/template/ttp4.C new file mode 100644 index 000000000000..4dff70103467 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/ttp4.C @@ -0,0 +1,11 @@ +// { dg-do compile } +// Origin: Ewgenij Gawrilow + +// PR c++/6723 +// ICE when default template argument contains instantiation of +// template template parameter. + +template class Predicate, + bool _matches=Predicate::answer> +struct helper { };