diff options
author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2004-08-25 14:56:10 +0000 |
---|---|---|
committer | Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org> | 2004-08-25 14:56:10 +0000 |
commit | 2649701fbb53874b7564d0c30f0b3dbe26ffb819 (patch) | |
tree | 1fbd2f23cc79db700b0a8abbac15aeb420af2829 | |
parent | 0cc4be6760c201da815f4a6c3b6df927c60de955 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/redecl2.C | 9 |
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" } |