From 4bd5635487c4a0623c2ea4f825611edcc528a360 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Tue, 22 Jul 2003 10:54:14 +0000 Subject: [PATCH] re PR c++/3004 (Accepts illegal code) PR c++/3004 * g++.dg/parse/typedef3.C: New test. PR c++/7906 * g++.dg/parse/operator2.C: New test. PR c++/8895 * g++.dg/parse/def-tmpl-arg1.C: New test. PR c++/9282 * g++.dg/parse/funptr1.C: New test. PR c++/9452 * g++.dg/parse/ambig3.C: New test. PR c++/9454 * g++.dg/parse/operator3.C: New test. PR c++/9486 * g++.dg/parse/template10.C: New test. PR c++/9488 * g++.dg/parse/template11.C: New test. PR c++/10150 * g++.dg/parse/invalid-op1.C: New test. PR c++/10247 * g++.dg/parse/condexpr1.C: New test. From-SVN: r69670 --- gcc/testsuite/ChangeLog | 32 ++++++++++++++++++++++ gcc/testsuite/g++.dg/parse/ambig3.C | 12 ++++++++ gcc/testsuite/g++.dg/parse/condexpr1.C | 13 +++++++++ gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C | 9 ++++++ gcc/testsuite/g++.dg/parse/funptr1.C | 13 +++++++++ gcc/testsuite/g++.dg/parse/invalid-op1.C | 13 +++++++++ gcc/testsuite/g++.dg/parse/operator2.C | 15 ++++++++++ gcc/testsuite/g++.dg/parse/operator3.C | 11 ++++++++ gcc/testsuite/g++.dg/parse/template10.C | 15 ++++++++++ gcc/testsuite/g++.dg/parse/template11.C | 15 ++++++++++ gcc/testsuite/g++.dg/parse/typedef3.C | 7 +++++ 11 files changed, 155 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/ambig3.C create mode 100644 gcc/testsuite/g++.dg/parse/condexpr1.C create mode 100644 gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C create mode 100644 gcc/testsuite/g++.dg/parse/funptr1.C create mode 100644 gcc/testsuite/g++.dg/parse/invalid-op1.C create mode 100644 gcc/testsuite/g++.dg/parse/operator2.C create mode 100644 gcc/testsuite/g++.dg/parse/operator3.C create mode 100644 gcc/testsuite/g++.dg/parse/template10.C create mode 100644 gcc/testsuite/g++.dg/parse/template11.C create mode 100644 gcc/testsuite/g++.dg/parse/typedef3.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 646613a5bb7..49f0c618e68 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,35 @@ +2003-07-22 Volker Reichelt + + PR c++/3004 + * g++.dg/parse/typedef3.C: New test. + + PR c++/7906 + * g++.dg/parse/operator2.C: New test. + + PR c++/8895 + * g++.dg/parse/def-tmpl-arg1.C: New test. + + PR c++/9282 + * g++.dg/parse/funptr1.C: New test. + + PR c++/9452 + * g++.dg/parse/ambig3.C: New test. + + PR c++/9454 + * g++.dg/parse/operator3.C: New test. + + PR c++/9486 + * g++.dg/parse/template10.C: New test. + + PR c++/9488 + * g++.dg/parse/template11.C: New test. + + PR c++/10150 + * g++.dg/parse/invalid-op1.C: New test. + + PR c++/10247 + * g++.dg/parse/condexpr1.C: New test. + 2003-07-22 Nathan Sidwell * g++.dg/ext/packed3.C: New test. diff --git a/gcc/testsuite/g++.dg/parse/ambig3.C b/gcc/testsuite/g++.dg/parse/ambig3.C new file mode 100644 index 00000000000..72ee960c95e --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/ambig3.C @@ -0,0 +1,12 @@ +// PR c++/9452 +// Origin: Wolfgang Bangerth +// { dg-do compile } + +template struct A { static const int i = 1; }; +template struct B {}; + +template void foo(B<0>) {} // { dg-error "" } + +template B::i-1> foo(B) { return B<0>(); } // { dg-error "" } + +void bar() { foo(B<0>()); } // { dg-error "ambiguous" } diff --git a/gcc/testsuite/g++.dg/parse/condexpr1.C b/gcc/testsuite/g++.dg/parse/condexpr1.C new file mode 100644 index 00000000000..1ca7dbfa646 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/condexpr1.C @@ -0,0 +1,13 @@ +// PR c++/10247 +// Origin: Lars Gullik Bjønes +// { dg-do compile } + +struct A {}; + +A const foo(); + +void bar() +{ + A a = foo(); + A b = true ? a : foo(); +} diff --git a/gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C b/gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C new file mode 100644 index 00000000000..fd85b97c15a --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/def-tmpl-arg1.C @@ -0,0 +1,9 @@ +// PR c++/8895 +// Origin: Wolfgang Bangerth +// { dg-do compile } + +template > struct A // { dg-error "" } +{ + A(); + A(const A&); +}; // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/parse/funptr1.C b/gcc/testsuite/g++.dg/parse/funptr1.C new file mode 100644 index 00000000000..bf63c122e8b --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/funptr1.C @@ -0,0 +1,13 @@ +// PR c++/9282 +// Origin: Thomas Richter +// { dg-do compile } + +typedef void (*fptr)(); + +struct A +{ + template static void foo() {} + template static void bar() { (*f)(); } +}; + +fptr f = A::bar< A::foo<0> >; diff --git a/gcc/testsuite/g++.dg/parse/invalid-op1.C b/gcc/testsuite/g++.dg/parse/invalid-op1.C new file mode 100644 index 00000000000..37e480983f8 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/invalid-op1.C @@ -0,0 +1,13 @@ +// PR c++/10150 +// Origin: Tom Evans +// { dg-do compile } + +template struct A +{ + template struct B + { + enum { e = I * A::B }; // { dg-error "" } + }; +}; + +A<0>::B<0> a; // { dg-error "instantiated" } diff --git a/gcc/testsuite/g++.dg/parse/operator2.C b/gcc/testsuite/g++.dg/parse/operator2.C new file mode 100644 index 00000000000..a9ebde0d4f5 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/operator2.C @@ -0,0 +1,15 @@ +// PR c++/7906 +// Origin: Marcel Loose +// { dg-do compile } + +template struct A { typedef int X; }; + +template struct B +{ + typedef A Y; + struct C { operator typename Y::X() const; }; +}; + +template B::C::operator typename B::Y::X() const { return 0; } + +B b; diff --git a/gcc/testsuite/g++.dg/parse/operator3.C b/gcc/testsuite/g++.dg/parse/operator3.C new file mode 100644 index 00000000000..08f5c83f229 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/operator3.C @@ -0,0 +1,11 @@ +// PR c++/9454 +// Origin: Wolfgang Bangerth +// { dg-do compile } + +template struct A +{ + struct B { operator int (); }; + struct C : B { operator int (); }; +}; + +A<0> a; diff --git a/gcc/testsuite/g++.dg/parse/template10.C b/gcc/testsuite/g++.dg/parse/template10.C new file mode 100644 index 00000000000..d5dec6ed111 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/template10.C @@ -0,0 +1,15 @@ +// PR c++/9486 +// Origin: John Levon +// { dg-do compile } + +template struct A +{ + template void foo(T); +}; + +template void bar() +{ + A().template foo(0); +} + +template void bar(); diff --git a/gcc/testsuite/g++.dg/parse/template11.C b/gcc/testsuite/g++.dg/parse/template11.C new file mode 100644 index 00000000000..e651a3bd076 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/template11.C @@ -0,0 +1,15 @@ +// PR c++/9488 +// Origin: Wolfgang Bangerth +// { dg-do compile } + +struct A +{ + template void foo() {} +}; + +template struct B +{ + void bar() { A().foo(); } +}; + +template struct B; diff --git a/gcc/testsuite/g++.dg/parse/typedef3.C b/gcc/testsuite/g++.dg/parse/typedef3.C new file mode 100644 index 00000000000..380b7530542 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/typedef3.C @@ -0,0 +1,7 @@ +// PR c++/3004 +// Origin: Travis J.I. Corcoran +// { dg-do compile } + +struct A { typedef A* Ptr; }; + +struct A::Ptr; // { dg-error "" } -- 2.30.2