diff options
author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2001-10-23 09:14:15 +0000 |
---|---|---|
committer | Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org> | 2001-10-23 09:14:15 +0000 |
commit | b8c6534b88ee39ff0e92ba90d3e606a894e14f8d (patch) | |
tree | e337f303c7c3e814a36bdbf76e6e8b021e47b1c1 /gcc/testsuite | |
parent | 69f75f9daa41e53683e8ba8e2b87666620a7226b (diff) | |
download | gcc-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.C | 22 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp10.C | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp11.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp12.C | 24 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp13.C | 27 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp14.C | 30 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp15.C | 33 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp16.C | 40 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp17.C | 25 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp18.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp2.C | 22 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp3.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp4.C | 24 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp5.C | 25 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp6.C | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp7.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp8.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp9.C | 17 |
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; |