diff options
author | Martin v. Löwis <loewis@gcc.gnu.org> | 1999-02-22 16:15:42 +0000 |
---|---|---|
committer | Martin v. Löwis <loewis@gcc.gnu.org> | 1999-02-22 16:15:42 +0000 |
commit | 956662b2f57bebdcbf8b97686cf24436521b2a22 (patch) | |
tree | e4814567a1d0c54e9ca7badff1dd37d243f61a08 /gcc | |
parent | 89d3d4424947aa2328d79659144f3bbad6998255 (diff) | |
download | gcc-956662b2f57bebdcbf8b97686cf24436521b2a22.zip gcc-956662b2f57bebdcbf8b97686cf24436521b2a22.tar.gz gcc-956662b2f57bebdcbf8b97686cf24436521b2a22.tar.bz2 |
New test case from Nathan Sidwell.
From-SVN: r25379
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.eh/spec6.C | 46 |
1 files changed, 46 insertions, 0 deletions
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 0000000..dd0a4d7 --- /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 <nathan@acm.org> + +// 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 |