From a207780f9b958e8cf857858a658dbe9db6b68347 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Tue, 12 Jul 2005 16:07:38 +0000 Subject: [PATCH] re PR c++/20172 (Invalid non-type template parameters not diagnosed) cp: PR c++/20172 * pt.c (tsubst_template_parms): Check for invalid non-type parameters. testsuite: PR c++/20172 * g++.dg/template/nontype12.C : New test. Co-Authored-By: Nathan Sidwell From-SVN: r101928 --- gcc/cp/ChangeLog | 7 +++++ gcc/cp/pt.c | 3 ++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/g++.dg/template/nontype12.C | 35 +++++++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/nontype12.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 75da1b34e5c0..80a28022417d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2005-07-12 Volker Reichelt + Nathan Sidwell + + PR c++/20172 + * pt.c (tsubst_template_parms): Check for invalid non-type + parameters. + 2005-07-09 Andrew Pinski * cp-lang.c (shadowed_var_for_decl, decl_shadowed_for_var_lookup, diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 0fcb5e85a54f..bbf3bf9bb34e 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5987,6 +5987,9 @@ tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain) tree parm_decl = TREE_VALUE (tuple); parm_decl = tsubst (parm_decl, args, complain, NULL_TREE); + if (TREE_CODE (parm_decl) == PARM_DECL + && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain)) + parm_decl = error_mark_node; default_value = tsubst_template_arg (default_value, args, complain, NULL_TREE); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2a0a5f8eb001..6502977bb18b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-07-12 Volker Reichelt + + PR c++/20172 + * g++.dg/template/nontype12.C : New test. + 2005-07-12 Zdenek Dvorak * gcc.dg/tree-ssa/loop-10.c: New test. diff --git a/gcc/testsuite/g++.dg/template/nontype12.C b/gcc/testsuite/g++.dg/template/nontype12.C new file mode 100644 index 000000000000..0200e870b956 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/nontype12.C @@ -0,0 +1,35 @@ +// PR c++/20172 +// Origin: Volker Reichelt + +template struct A +{ + template int foo(); // { dg-error "double" } + template class> int bar(); // { dg-error "double" } + template struct X; // { dg-error "double" } +}; + +A a1; +A a2; // { dg-error "instantiated" } + +template struct B +{ + template int foo(); // { dg-error "double" } + template class> int bar(); // { dg-error "double" } + template struct X; // { dg-error "double" } +}; + +template int foo(); // { dg-error "void" } +template class> int bar(); // { dg-error "void" } +template struct X; // { dg-error "void" } + +template struct C +{ + template int foo(); // { dg-error "double" } +}; + +template int baz(T) { C c; } // { dg-error "instantiated" } + +void foobar() +{ + baz(1.2); // { dg-error "instantiated" } +} -- 2.43.5