From 68aab9ee3e6ba21b48b5f2e24e61705472b7f7ed Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Wed, 22 Jan 2003 23:21:51 +0000 Subject: [PATCH] re PR c++/2738 (ICE on return type specification of a destructor) PR c++/2738 * g++.dg/parse/ret-type1.C: New test. PR c++/3792 * g++.dg/parse/tmpl-outside1.C: New test. PR c++/4207 * g++.dg/parse/int-as-enum1.C: New test. PR c++/4903 * g++.dg/parse/no-typename1.C: New test. PR c++/5533 * g++.dg/parse/no-value1.C: New test. PR c++/5921 * g++.dg/parse/wrong-inline1.C: New test. PR c++/6402 * g++.dg/parse/ref1.C: New test. PR c++/6992 * g++.dg/parse/attr-ctor1.C: New test. PR c++/7229 * g++.dg/parse/namespace5.C: New test. PR c++/7917 * g++.dg/parse/func-def1.C: New test. PR c++/8143 * g++.dg/parse/undefined1.C: New test. PR c++/5723, PR c++/8522 * g++.dg/parse/specialization1.C: New test. PR c++/163, PR c++/8595 * g++.dg/parse/struct-as-enum1.C: New test. PR c++/9173 * g++.dg/parse/undefined2.C: New test. From-SVN: r61624 --- gcc/testsuite/ChangeLog | 44 ++++++++++++++++++++ gcc/testsuite/g++.dg/parse/attr-ctor1.C | 8 ++++ gcc/testsuite/g++.dg/parse/func-def1.C | 11 +++++ gcc/testsuite/g++.dg/parse/int-as-enum1.C | 6 +++ gcc/testsuite/g++.dg/parse/namespace5.C | 5 +++ gcc/testsuite/g++.dg/parse/no-typename1.C | 11 +++++ gcc/testsuite/g++.dg/parse/no-value1.C | 14 +++++++ gcc/testsuite/g++.dg/parse/ref1.C | 17 ++++++++ gcc/testsuite/g++.dg/parse/ret-type1.C | 10 +++++ gcc/testsuite/g++.dg/parse/specialization1.C | 6 +++ gcc/testsuite/g++.dg/parse/struct-as-enum1.C | 10 +++++ gcc/testsuite/g++.dg/parse/tmpl-outside1.C | 10 +++++ gcc/testsuite/g++.dg/parse/undefined1.C | 10 +++++ gcc/testsuite/g++.dg/parse/undefined2.C | 12 ++++++ gcc/testsuite/g++.dg/parse/wrong-inline1.C | 12 ++++++ 15 files changed, 186 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/attr-ctor1.C create mode 100644 gcc/testsuite/g++.dg/parse/func-def1.C create mode 100644 gcc/testsuite/g++.dg/parse/int-as-enum1.C create mode 100644 gcc/testsuite/g++.dg/parse/namespace5.C create mode 100644 gcc/testsuite/g++.dg/parse/no-typename1.C create mode 100644 gcc/testsuite/g++.dg/parse/no-value1.C create mode 100644 gcc/testsuite/g++.dg/parse/ref1.C create mode 100644 gcc/testsuite/g++.dg/parse/ret-type1.C create mode 100644 gcc/testsuite/g++.dg/parse/specialization1.C create mode 100644 gcc/testsuite/g++.dg/parse/struct-as-enum1.C create mode 100644 gcc/testsuite/g++.dg/parse/tmpl-outside1.C create mode 100644 gcc/testsuite/g++.dg/parse/undefined1.C create mode 100644 gcc/testsuite/g++.dg/parse/undefined2.C create mode 100644 gcc/testsuite/g++.dg/parse/wrong-inline1.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fed915c899a..80d67eec93e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,47 @@ +2003-01-22 Volker Reichelt + + PR c++/2738 + * g++.dg/parse/ret-type1.C: New test. + + PR c++/3792 + * g++.dg/parse/tmpl-outside1.C: New test. + + PR c++/4207 + * g++.dg/parse/int-as-enum1.C: New test. + + PR c++/4903 + * g++.dg/parse/no-typename1.C: New test. + + PR c++/5533 + * g++.dg/parse/no-value1.C: New test. + + PR c++/5921 + * g++.dg/parse/wrong-inline1.C: New test. + + PR c++/6402 + * g++.dg/parse/ref1.C: New test. + + PR c++/6992 + * g++.dg/parse/attr-ctor1.C: New test. + + PR c++/7229 + * g++.dg/parse/namespace5.C: New test. + + PR c++/7917 + * g++.dg/parse/func-def1.C: New test. + + PR c++/8143 + * g++.dg/parse/undefined1.C: New test. + + PR c++/5723, PR c++/8522 + * g++.dg/parse/specialization1.C: New test. + + PR c++/163, PR c++/8595 + * g++.dg/parse/struct-as-enum1.C: New test. + + PR c++/9173 + * g++.dg/parse/undefined2.C: New test. + 2003-01-22 Mark Mitchell PR c++/9298 diff --git a/gcc/testsuite/g++.dg/parse/attr-ctor1.C b/gcc/testsuite/g++.dg/parse/attr-ctor1.C new file mode 100644 index 00000000000..4f8cd1dde66 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/attr-ctor1.C @@ -0,0 +1,8 @@ +// PR c++/6992 +// Origin: +// { dg-do compile } + +class A +{ + __attribute__((section("whatever"))) A(); +}; diff --git a/gcc/testsuite/g++.dg/parse/func-def1.C b/gcc/testsuite/g++.dg/parse/func-def1.C new file mode 100644 index 00000000000..00c973d8813 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/func-def1.C @@ -0,0 +1,11 @@ +// PR c++/7917 +// Origin: VACLAV HAISMAN +// { dg-do compile } + +struct A +{ + int i; + void foo() = 0 {} // { dg-error "" } + + A() : i(0) {} +}; diff --git a/gcc/testsuite/g++.dg/parse/int-as-enum1.C b/gcc/testsuite/g++.dg/parse/int-as-enum1.C new file mode 100644 index 00000000000..2bf9cc0ddb7 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/int-as-enum1.C @@ -0,0 +1,6 @@ +// PR c++/4207 +// Origin: +// { dg-do compile } + +typedef int A; +enum ::A {}; // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/parse/namespace5.C b/gcc/testsuite/g++.dg/parse/namespace5.C new file mode 100644 index 00000000000..277c0c8e66e --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/namespace5.C @@ -0,0 +1,5 @@ +// PR c++/7229 +// { dg-do compile } + +namespace A { namespace B { typedef int type; } } +typename A::B<0>::type x; // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/parse/no-typename1.C b/gcc/testsuite/g++.dg/parse/no-typename1.C new file mode 100644 index 00000000000..42059ce7b80 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/no-typename1.C @@ -0,0 +1,11 @@ +// PR c++/4903 +// Origin: Dan Marinescu +// { dg-do compile } + +template struct A +{ + template struct B + { + A::template B foo(); // { dg-error "" } + }; +}; diff --git a/gcc/testsuite/g++.dg/parse/no-value1.C b/gcc/testsuite/g++.dg/parse/no-value1.C new file mode 100644 index 00000000000..443a389ceeb --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/no-value1.C @@ -0,0 +1,14 @@ +// PR c++/5533 +// { dg-do compile } + +namespace N +{ + template struct A{}; +} + +template void foo(T) {} + +void bar() +{ + foo(N::A); // { dg-error "" } +} diff --git a/gcc/testsuite/g++.dg/parse/ref1.C b/gcc/testsuite/g++.dg/parse/ref1.C new file mode 100644 index 00000000000..d1dffb06700 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/ref1.C @@ -0,0 +1,17 @@ +// PR c++/6402 +// Origin: Wolfgang Bangerth +// { dg-do compile } + +class A +{ + A (const A&); + public: + A(); +}; + +struct B { A a; }; + +struct C : public B +{ + void foo() { const A &ref = B::a; } // taking reference, not a copy! +}; diff --git a/gcc/testsuite/g++.dg/parse/ret-type1.C b/gcc/testsuite/g++.dg/parse/ret-type1.C new file mode 100644 index 00000000000..a5dc93ab0d9 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/ret-type1.C @@ -0,0 +1,10 @@ +// PR c++/2738 +// Origin: Wolfgang Bangerth +// { dg-do compile } + +template class A +{ + class C { C(); }; +}; + +template void A::C::C () {} // { dg-error "return type" } diff --git a/gcc/testsuite/g++.dg/parse/specialization1.C b/gcc/testsuite/g++.dg/parse/specialization1.C new file mode 100644 index 00000000000..7378570d65d --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/specialization1.C @@ -0,0 +1,6 @@ +// PR c++/5723, PR c++/8522 +// Origin: Matthias Kleinmann, Peter Karl Mueller +// { dg-do compile } + +template class A; +template class A::B; // { dg-error "declaration" } diff --git a/gcc/testsuite/g++.dg/parse/struct-as-enum1.C b/gcc/testsuite/g++.dg/parse/struct-as-enum1.C new file mode 100644 index 00000000000..016c6035b93 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/struct-as-enum1.C @@ -0,0 +1,10 @@ +// PR c++/163, PR c++/8595 +// Origin: , Mark Leone +// { dg-do compile } + +namespace N +{ + struct A {}; +} + +typedef enum N::A B; // { dg-error "enum" } diff --git a/gcc/testsuite/g++.dg/parse/tmpl-outside1.C b/gcc/testsuite/g++.dg/parse/tmpl-outside1.C new file mode 100644 index 00000000000..07c89e25ca6 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/tmpl-outside1.C @@ -0,0 +1,10 @@ +// PR c++/3792 +// Origin: +// { dg-do compile } + +struct X +{ + template struct Y {}; +}; + +typedef X::template Y<0> y; // { dg-error "template" } diff --git a/gcc/testsuite/g++.dg/parse/undefined1.C b/gcc/testsuite/g++.dg/parse/undefined1.C new file mode 100644 index 00000000000..0ae4e88777c --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/undefined1.C @@ -0,0 +1,10 @@ +// PR c++/8143 +// { dg-do compile } + +struct foo +{ + X x; // { dg-error "" } + + foo(X) {} // { dg-error "" } + foo(X y, int) : x() {} // { dg-error "" } +}; diff --git a/gcc/testsuite/g++.dg/parse/undefined2.C b/gcc/testsuite/g++.dg/parse/undefined2.C new file mode 100644 index 00000000000..a7e76f1b70d --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/undefined2.C @@ -0,0 +1,12 @@ +// PR c++/9173 +// Origin: +// { dg-do compile } + +class A {}; + +class B +{ + void foo(int,A::X); // { dg-error "" } +}; + +void B::foo(int,A::X) {} // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/parse/wrong-inline1.C b/gcc/testsuite/g++.dg/parse/wrong-inline1.C new file mode 100644 index 00000000000..22b9a9768aa --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/wrong-inline1.C @@ -0,0 +1,12 @@ +// PR c++/5921 +// Origin: Volker Reichelt +// { dg-do compile } + +struct A +{ + struct B { B(); }; +}; + +static A::B b; + +inline template void f (); // { dg-error "" } -- 2.30.2