aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>2001-10-23 09:14:15 +0000
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>2001-10-23 09:14:15 +0000
commitb8c6534b88ee39ff0e92ba90d3e606a894e14f8d (patch)
treee337f303c7c3e814a36bdbf76e6e8b021e47b1c1 /gcc/testsuite
parent69f75f9daa41e53683e8ba8e2b87666620a7226b (diff)
downloadgcc-b8c6534b88ee39ff0e92ba90d3e606a894e14f8d.zip
gcc-b8c6534b88ee39ff0e92ba90d3e606a894e14f8d.tar.gz
gcc-b8c6534b88ee39ff0e92ba90d3e606a894e14f8d.tar.bz2
cp-tree.def (UNBOUND_CLASS_TEMPLATE): New tree node.
* cp-tree.def (UNBOUND_CLASS_TEMPLATE): New tree node. * cp-tree.h (make_unbound_class_template): Prototype new function. * decl.c (make_unbound_class_template): New function. * decl2.c (arg_assoc_template_arg): Handle UNBOUND_CLASS_TEMPLATE. * error.c (dump_type): Likewise. * mangle.c (write_type): Likewise. * parse.y (template_parm): Likewise. (template_argument): Use make_unbound_class_template. * pt.c (convert_template_argument): Handle UNBOUND_CLASS_TEMPLATE. (tsubst): Likewise. (tsubst_copy): Likewise. (unify): Likewise. * tree.c (walk_tree): Likewise. * typeck.c (comptypes): Likewise. From-SVN: r46430
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp1.C22
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp10.C13
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp11.C23
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp12.C24
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp13.C27
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp14.C30
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp15.C33
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp16.C40
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp17.C25
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp18.C23
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp2.C22
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp3.C23
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp4.C24
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp5.C25
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp6.C15
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp7.C12
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp8.C17
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp9.C17
18 files changed, 415 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/template/qualttp1.C b/gcc/testsuite/g++.dg/template/qualttp1.C
new file mode 100644
index 0000000..b97ef42
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp1.C
@@ -0,0 +1,22 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <class T> struct X
+{
+};
+
+template <class T> struct C
+{
+ X<T::template B> x; // { dg-error "type" }
+};
+
+int main()
+{
+ C<A> c;
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp10.C b/gcc/testsuite/g++.dg/template/qualttp10.C
new file mode 100644
index 0000000..8734ddc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp10.C
@@ -0,0 +1,13 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+template <template <class> class TT> class C {
+};
+
+template <class T> struct D {
+ template <class U> class B {};
+ C<D<T>::template B> c;
+};
+
+D<int> d;
diff --git a/gcc/testsuite/g++.dg/template/qualttp11.C b/gcc/testsuite/g++.dg/template/qualttp11.C
new file mode 100644
index 0000000..fa5c860
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp11.C
@@ -0,0 +1,23 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do link }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <template <class> class TT> struct X
+{
+ TT<int> y;
+};
+
+template <class T> struct C
+{
+ X<T::template B> x;
+};
+
+int main()
+{
+ C<A> c;
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp12.C b/gcc/testsuite/g++.dg/template/qualttp12.C
new file mode 100644
index 0000000..ebd4b64
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp12.C
@@ -0,0 +1,24 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do link }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <template <class> class TT> void f()
+{
+ TT<int> y;
+}
+
+template <class T> struct C
+{
+ void g() { f<T::template B>(); }
+};
+
+int main()
+{
+ C<A> c;
+ c.g();
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp13.C b/gcc/testsuite/g++.dg/template/qualttp13.C
new file mode 100644
index 0000000..eefc604
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp13.C
@@ -0,0 +1,27 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+template <class U> struct A
+{
+ template <class V> struct AA {
+ template <class T> struct B {
+ int i;
+ B() : i(1) {}
+ };
+ };
+};
+
+template <template <class> class TT> struct X
+{
+ TT<int> y;
+};
+
+template <class T, class U> struct C
+{
+ X<T::template AA<U>::template B> x;
+};
+
+int main()
+{
+ C<A<char>, int> c;
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp14.C b/gcc/testsuite/g++.dg/template/qualttp14.C
new file mode 100644
index 0000000..0558557
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp14.C
@@ -0,0 +1,30 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do link }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <template <class> class TT, class T> struct X
+{
+ TT<int> y;
+ T z;
+};
+
+template <class T> struct X<T::template B, T>
+{
+ typename T::template B<int> y;
+ T z;
+};
+
+template <class T> struct C
+{
+ X<T::template B, A> x;
+};
+
+int main()
+{
+ C<A> c;
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp15.C b/gcc/testsuite/g++.dg/template/qualttp15.C
new file mode 100644
index 0000000..1b1f3bb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp15.C
@@ -0,0 +1,33 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <template <class> class TT> struct X
+{
+ TT<int> y;
+};
+
+template <class T> struct X<T::template B>
+{ // { dg-error "previous" }
+ T z;
+};
+
+template <class T> struct X<T::template B>
+{ // { dg-error "redefinition" }
+ T z;
+};
+
+template <class T> struct C
+{
+ X<T::template B> x;
+};
+
+int main()
+{
+ C<A> c;
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp16.C b/gcc/testsuite/g++.dg/template/qualttp16.C
new file mode 100644
index 0000000..1fd0e1f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp16.C
@@ -0,0 +1,40 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do run }
+
+extern "C" void abort();
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <template <class> class TT, class T> struct X
+{
+ TT<int> y;
+ T z;
+ int f() { return 0; }
+};
+
+template <class T> struct X<T::template B, T>
+{
+ typename T::template B<int> y;
+ T z;
+ int f() { return 1; }
+};
+
+template <class T> struct C
+{
+ X<T::template B, A> x;
+};
+
+int main()
+{
+ C<A> c;
+ X<A::B, A> x1;
+ X<A::B, int> x2;
+ if (x1.f() != 1)
+ abort();
+ if (x2.f() != 0)
+ abort();
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp17.C b/gcc/testsuite/g++.dg/template/qualttp17.C
new file mode 100644
index 0000000..4766c53
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp17.C
@@ -0,0 +1,25 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+// { dg-options "-fno-inline" }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <template <class> class TT> struct X
+{
+};
+
+template <class T> void f(X<T::template B>)
+{
+}
+
+int main()
+{
+ X<A::B> x;
+ f<A>(x);
+}
+
+// { dg-final { scan-assembler "\n_?_Z1fI1AEv1XIN1T1BEE\[: \t\n\]" } }
diff --git a/gcc/testsuite/g++.dg/template/qualttp18.C b/gcc/testsuite/g++.dg/template/qualttp18.C
new file mode 100644
index 0000000..2c9cf06
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp18.C
@@ -0,0 +1,23 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <template <class> class TT> struct X
+{
+ TT<int> y;
+};
+
+struct C
+{
+ X<A::template B> x; // { dg-error "template|forbid" }
+};
+
+int main()
+{
+ C c;
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp2.C b/gcc/testsuite/g++.dg/template/qualttp2.C
new file mode 100644
index 0000000..b25e15f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp2.C
@@ -0,0 +1,22 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+struct A
+{
+ template <class T> class B {};
+};
+
+template <int i> struct X
+{
+};
+
+template <class T> struct C
+{
+ X<T::template B> x; // { dg-error "type" }
+};
+
+int main()
+{
+ C<A> c;
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp3.C b/gcc/testsuite/g++.dg/template/qualttp3.C
new file mode 100644
index 0000000..929fa62
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp3.C
@@ -0,0 +1,23 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+struct A
+{
+ template <class T, class U> class B {};
+};
+
+template <template <class> class TT> struct X
+{
+ TT<int> y;
+};
+
+template <class T> struct C
+{
+ X<T::template B> x; // { dg-error "type" "" }
+};
+
+int main()
+{
+ C<A> c; // { dg-error "instantiated" }
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp4.C b/gcc/testsuite/g++.dg/template/qualttp4.C
new file mode 100644
index 0000000..04335f1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp4.C
@@ -0,0 +1,24 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+struct A
+{
+ template <class T> struct B {};
+};
+
+template <template <class, class> class TT> // { dg-error "provided" }
+struct X
+{
+ TT<int> y; // { dg-error "number|type" }
+};
+
+template <class T> struct C
+{
+ X<T::template B> x; // { dg-error "type" }
+};
+
+int main()
+{
+ C<A> c; // { dg-error "instantiated" }
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp5.C b/gcc/testsuite/g++.dg/template/qualttp5.C
new file mode 100644
index 0000000..7ac7a31
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp5.C
@@ -0,0 +1,25 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+template <class U> struct A
+{
+ template <class T> class B {}; // { dg-error "candidates" }
+};
+
+template <template <class> class TT> void f()
+{
+ TT<int> y;
+ y = 0; // { dg-error "no match" }
+}
+
+template <class T> struct C
+{
+ void g() { f<A<T>::template B>(); } // { dg-error "instantiated" }
+};
+
+int main()
+{
+ C<int> c;
+ c.g(); // { dg-error "instantiated" }
+}
diff --git a/gcc/testsuite/g++.dg/template/qualttp6.C b/gcc/testsuite/g++.dg/template/qualttp6.C
new file mode 100644
index 0000000..0468958
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp6.C
@@ -0,0 +1,15 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+template <template <class> class TT> class C {
+};
+
+template <class T> struct D {
+ C<T::template B> c; // { dg-error "no class template" }
+};
+
+struct E {
+};
+
+D<E> d; // { dg-error "instantiated" }
diff --git a/gcc/testsuite/g++.dg/template/qualttp7.C b/gcc/testsuite/g++.dg/template/qualttp7.C
new file mode 100644
index 0000000..f6573ac
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp7.C
@@ -0,0 +1,12 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+template <template <class> class TT> class C {
+};
+
+template <class T> struct D {
+ C<T::template B> c; // { dg-error "no class template" }
+};
+
+D<int> d; // { dg-error "instantiated" }
diff --git a/gcc/testsuite/g++.dg/template/qualttp8.C b/gcc/testsuite/g++.dg/template/qualttp8.C
new file mode 100644
index 0000000..da67a09
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp8.C
@@ -0,0 +1,17 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+template <template <class> class TT> class C {
+};
+
+template <class T> struct D {
+ C<T::template B> c; // { dg-error "context" }
+};
+
+struct E {
+ private:
+ template <class T> class B {}; // { dg-error "private" }
+};
+
+D<E> d; // { dg-error "instantiated" }
diff --git a/gcc/testsuite/g++.dg/template/qualttp9.C b/gcc/testsuite/g++.dg/template/qualttp9.C
new file mode 100644
index 0000000..8d90dab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/qualttp9.C
@@ -0,0 +1,17 @@
+// Copyright (C) 2001 Free Software Foundation
+// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+// { dg-do compile }
+
+template <template <class> class TT> class C {
+};
+
+template <class T> struct D : T {
+ C<T::template B> c;
+};
+
+struct E {
+ protected:
+ template <class T> class B {};
+};
+
+D<E> d;