From ff5034c5be89c496e39b79b52cd496130c51fdb2 Mon Sep 17 00:00:00 2001 From: Giovanni Bajo <giovannibajo@gcc.gnu.org> Date: Tue, 16 Dec 2003 15:58:38 +0000 Subject: nontype3.C: New test. * g++.dg/template/nontype3.C: New test. * g++.dg/template/static2.C: Tweaked the dg-error clause. From-SVN: r74701 --- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/nontype3.C | 37 ++++++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/template/static2.C | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/nontype3.C (limited to 'gcc') diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d685e43..e31d5d5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-12-16 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + * g++.dg/template/nontype3.C: New test. + * g++.dg/template/static2.C: Tweaked the dg-error clause. + 2003-12-16 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> * g++.dg/warn/noreturn-3.C: Also test instantiation. diff --git a/gcc/testsuite/g++.dg/template/nontype3.C b/gcc/testsuite/g++.dg/template/nontype3.C new file mode 100644 index 0000000..15a204f --- /dev/null +++ b/gcc/testsuite/g++.dg/template/nontype3.C @@ -0,0 +1,37 @@ +// { dg-do compile } +// Origin: <drow at gcc dot gnu dot org>, +// <giovannibajo at gcc dot gnu dot org> +// c++/13243: Template parameters of non integral or enumeration type can't be +// used for integral constant expressions. ADDR_EXPR and INDIRECT_REF are +// invalid too. + +template <int T> class foo {}; +template <int *T> class bar {}; + +template <int *PI> +void dep5(bar<PI> *); + +template <int *PI> +void dep6(bar<PI+1> *); // { dg-error "" "integral or enumeration" } + +template <int I> +void dep7(bar<I+1> *); + +template <int *PI> +void dep8(foo< *PI > *); // { dg-error "" "integral or enumeration" } + +template <int PI[1]> +void dep9(foo< *PI > *); // { dg-error "" "integral or enumeration" } + +template <int PI[1]> +void dep9a(foo< sizeof(*PI) > *); + +template <int PI[1]> +void dep10(foo< PI[0] > *); // { dg-error "" "integral or enumeration" } + +template <int I> +void dep11(foo< *&I > *); // { dg-error "" "constant-expression" } + +template <int I> +void dep12(foo< (&I)[4] > *); // { dg-error "" "constant-expression" } + diff --git a/gcc/testsuite/g++.dg/template/static2.C b/gcc/testsuite/g++.dg/template/static2.C index d18c1a7..881f07c 100644 --- a/gcc/testsuite/g++.dg/template/static2.C +++ b/gcc/testsuite/g++.dg/template/static2.C @@ -4,7 +4,7 @@ template<int A::* P> class B { public: - static int A::* const p = P; // { dg-error "in-class" } + static int A::* const p = P; // { dg-error "" } }; class A -- cgit v1.1