* g++.old-deja/g++.eh/vbase4.C: New test.
authorNathan Sidwell <nathan@codesourcery.com>
Wed, 8 Mar 2000 17:17:50 +0000 (17:17 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Wed, 8 Mar 2000 17:17:50 +0000 (17:17 +0000)
From-SVN: r32427

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

index a2ce4c594e1d5e28dabd8f880451b0495ade0e7d..146c2b63c8dd21d15a8f64994fe3f34e2d8e37ca 100644 (file)
@@ -1,3 +1,7 @@
+2000-03-08  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * g++.old-deja/g++.eh/vbase4.C: New test.
+
 2000-03-08  Nathan Sidwell  <nathan@codesourcery.com>
 
        * g++.old-deja/g++.bugs/900215_01.C: Adjust.
diff --git a/gcc/testsuite/g++.old-deja/g++.eh/vbase4.C b/gcc/testsuite/g++.old-deja/g++.eh/vbase4.C
new file mode 100644 (file)
index 0000000..6036086
--- /dev/null
@@ -0,0 +1,39 @@
+
+// Copyright (C) 2000 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 8 Mar 2000 <nathan@codesourcery.com>
+
+// Derived from PR#7
+
+// We need to destroy the thrown object when exiting the catch
+// clause. That needs to destroy the original thrown object, not
+// the caught one (which might be a base).
+
+static int ok = 0;
+
+struct A
+{
+  A (){};
+  virtual ~A () {};
+};
+
+struct B : virtual A
+{
+  int value;
+  B ()
+    :value(10)
+    {}
+  ~B()
+  {
+    if (value == 10)
+      ok = 1;
+  }
+};
+
+int main()
+{
+  try {
+    throw B ();
+  } catch (A & e) {
+  }
+  return !ok;
+}