From f1cc051537237722be3976b782bfd4336610ba55 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Mon, 22 Aug 2005 09:48:26 +0000 Subject: [PATCH] re PR c++/22233 (ICE with wrong number of template parameters) PR c++/22233 * pt.c (push_template_decl_real): Return error_mark_node if the number of template parameters does not match previous definition. * g++.dg/template/param1.C: New test. From-SVN: r103339 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 1 + gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/param1.C | 12 ++++++++++++ 4 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/param1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 765ce9cc0b5..0ad264f6798 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-08-22 Volker Reichelt + + PR c++/22233 + * pt.c (push_template_decl_real): Return error_mark_node if the + number of template parameters does not match previous definition. + 2005-08-22 Volker Reichelt PR c++/23089 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 73e2a259a0f..f217198faa2 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3109,6 +3109,7 @@ push_template_decl_real (tree decl, int is_friend) error ("got %d template parameters for %q#T", TREE_VEC_LENGTH (a), current); error (" but %d required", TREE_VEC_LENGTH (t)); + return error_mark_node; } /* Perhaps we should also check that the parms are used in the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5d6a6823659..b85a569c58f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-08-22 Volker Reichelt + + PR c++/22233 + * g++.dg/template/param1.C: New test. + 2005-08-22 Volker Reichelt PR c++/23089 diff --git a/gcc/testsuite/g++.dg/template/param1.C b/gcc/testsuite/g++.dg/template/param1.C new file mode 100644 index 00000000000..ad7fc8cde0e --- /dev/null +++ b/gcc/testsuite/g++.dg/template/param1.C @@ -0,0 +1,12 @@ +// PR c++/22233 +// Origin: Volker Reichelt +// { dg-do compile } + +template struct A +{ + A(); +}; + +template A::A() {} // { dg-error "got 2|but 1 required" } + +A<0> a;