diff options
author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2002-06-20 14:38:06 +0000 |
---|---|---|
committer | Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org> | 2002-06-20 14:38:06 +0000 |
commit | 342cea9509fcfea8b53cfbb4c67ee6a74aff11cf (patch) | |
tree | d6b6776755002c9694317b9f538c87a867849cb0 | |
parent | 5bc93be506e50bb4fdb79692cd9063c880c96601 (diff) | |
download | gcc-342cea9509fcfea8b53cfbb4c67ee6a74aff11cf.zip gcc-342cea9509fcfea8b53cfbb4c67ee6a74aff11cf.tar.gz gcc-342cea9509fcfea8b53cfbb4c67ee6a74aff11cf.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/pt.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/ttp4.C | 11 |
4 files changed, 31 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b599aba..b570cc3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2002-06-20 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + 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 <akim@epita.fr> * parse.y (TYPENAME): Rename as tTYPENAME to avoid the clash with diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 873e5a3..c100122 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<int>' 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<int, std::allocator<T> >' 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 0c1b43c..e2e8799 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-06-20 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + * g++.dg/template/ttp4.C: New test. + 2002-06-19 Jakub Jelinek <jakub@redhat.com> * 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 0000000..4dff701 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/ttp4.C @@ -0,0 +1,11 @@ +// { dg-do compile } +// Origin: Ewgenij Gawrilow <gawrilow@math.tu-berlin.de> + +// PR c++/6723 +// ICE when default template argument contains instantiation of +// template template parameter. + +template <typename A, typename B, + template <typename,typename> class Predicate, + bool _matches=Predicate<A,B>::answer> +struct helper { }; |