New test case from Nathan Sidwell.
authorMartin v. Löwis <loewis@gcc.gnu.org>
Mon, 22 Feb 1999 16:15:42 +0000 (16:15 +0000)
committerMartin v. Löwis <loewis@gcc.gnu.org>
Mon, 22 Feb 1999 16:15:42 +0000 (16:15 +0000)
From-SVN: r25379

gcc/testsuite/g++.old-deja/g++.eh/spec6.C [new file with mode: 0644]

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 (file)
index 0000000..dd0a4d7
--- /dev/null
@@ -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