From 956662b2f57bebdcbf8b97686cf24436521b2a22 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Mon, 22 Feb 1999 16:15:42 +0000 Subject: [PATCH] New test case from Nathan Sidwell. From-SVN: r25379 --- gcc/testsuite/g++.old-deja/g++.eh/spec6.C | 46 +++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.eh/spec6.C diff --git a/gcc/testsuite/g++.old-deja/g++.eh/spec6.C b/gcc/testsuite/g++.old-deja/g++.eh/spec6.C new file mode 100644 index 000000000000..dd0a4d7b8a9e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.eh/spec6.C @@ -0,0 +1,46 @@ +// Build don't link: + +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 19 Jan 1999 + +// Determine that throw specifiers are checked correctly. + +// [except.spec] 1, a type in an exception specifier shall not be incomplete, +// or pointer or ref to incomplete +struct X; // ERROR - forward declaration +void fn1() throw(X); // ERROR - incomplete type +void fn2() throw(X *); // ERROR - incomplete type +void fn3() throw(X &); // ERROR - incomplete type +void fn4() throw(void); // ERROR - incomplete type +// except for cv pointer to void +void fn5() throw(void *); + +// [except.spec] 2, exception specifiers must be the same set of types (but +// can be reordered) +void fn() throw(int, char); +void fn() throw(char, int){} + +// [except.spec] 3, virtual function overriders shall throw a subset of the +// overridden function +struct E {}; +struct F : public E {}; +struct A +{ + virtual void foo() throw(); + virtual void baz() throw(double, int); + virtual void bar(); + virtual void qux() throw(E); + virtual void quux() throw(F); +}; + +struct B : A +{ + virtual void foo() throw(int); // ERROR - not in base function + virtual void baz() throw(double); + virtual void bar(int) throw(int); + virtual void qux() throw(F); + virtual void quux() throw(E); // ERROR - not in base function +}; + +// [except.spec] 5, types shall not be defined in exception specifiers +void fn6() throw(struct Z {}); // ERROR - types shall not be defined -- 2.43.5