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