aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>2004-08-25 14:56:10 +0000
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>2004-08-25 14:56:10 +0000
commit2649701fbb53874b7564d0c30f0b3dbe26ffb819 (patch)
tree1fbd2f23cc79db700b0a8abbac15aeb420af2829
parent0cc4be6760c201da815f4a6c3b6df927c60de955 (diff)
downloadgcc-2649701fbb53874b7564d0c30f0b3dbe26ffb819.zip
gcc-2649701fbb53874b7564d0c30f0b3dbe26ffb819.tar.gz
gcc-2649701fbb53874b7564d0c30f0b3dbe26ffb819.tar.bz2
re PR c++/14428 (incompatible template declarations accepted)
PR c++/14428 * pt.c (redeclare_class_template): Check the type of non-type and template template parameter. * g++.dg/template/redecl2.C: New test. From-SVN: r86550
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/redecl2.C9
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index fcb0404..5655232 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-25 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/14428
+ * pt.c (redeclare_class_template): Check the type of non-type and
+ template template parameter.
+
2004-08-25 Nathan Sidwell <nathan@codesourcery.com>
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index b995ba4..b93599e 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3157,7 +3157,11 @@ redeclare_class_template (tree type, tree parms)
tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
- if (TREE_CODE (tmpl_parm) != TREE_CODE (parm))
+ /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
+ TEMPLATE_DECL. */
+ if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
+ || (TREE_CODE (tmpl_parm) != TYPE_DECL
+ && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
{
cp_error_at ("template parameter `%#D'", tmpl_parm);
error ("redeclared here as `%#D'", parm);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9a442c4..4647822 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-08-25 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/14428
+ * g++.dg/template/redecl2.C: New test.
+
2004-08-24 Bud Davis <bdavis9659@comcast.net>
PR fortran/17143
diff --git a/gcc/testsuite/g++.dg/template/redecl2.C b/gcc/testsuite/g++.dg/template/redecl2.C
new file mode 100644
index 0000000..4dd432e6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/redecl2.C
@@ -0,0 +1,9 @@
+// { dg-do compile }
+
+// Origin: heinlein@informatik.uni-ulm.de
+
+// PR c++/14428: Redeclaration of class template with wrong
+// non-type template parameter.
+
+template <int i> struct X; // { dg-error "template parameter" }
+template <int* p> struct X; // { dg-error "redeclared here" }