Add test for the last chapter of our C++ exception handling odyssey. llvmg++
authorChris Lattner <sabre@nondot.org>
Thu, 28 Aug 2003 20:32:36 +0000 (20:32 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 28 Aug 2003 20:32:36 +0000 (20:32 +0000)
now fully supports all C++ exception handling functionality.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8185 91177308-0d34-0410-b5e6-96231b3b80d8

test/C++Frontend/EH/function_try_block.cpp [new file with mode: 0644]

diff --git a/test/C++Frontend/EH/function_try_block.cpp b/test/C++Frontend/EH/function_try_block.cpp
new file mode 100644 (file)
index 0000000..001b7c5
--- /dev/null
@@ -0,0 +1,55 @@
+
+#include <stdio.h>
+
+static unsigned NumAs = 0;
+
+struct A {
+  unsigned ANum;
+  A() : ANum(NumAs++) { printf("Created A #%d\n", ANum); }
+  A(const A &a) : ANum(NumAs++) { printf("Copy Created A #%d\n", ANum); }
+  ~A() { printf("Destroyed A #%d\n", ANum); }
+};
+
+static bool ShouldThrow = false;
+
+int throws()
+  try
+{
+  if (ShouldThrow) throw 7; return 123;
+} catch (...) {
+  printf("'throws' threw an exception: rethrowing!\n");
+  throw;
+}
+
+struct B {
+  A a0, a1, a2;
+  int i;
+  A a3, a4;
+
+  B();
+  ~B() { printf("B destructor!\n"); }
+};
+
+B::B()
+try 
+: i(throws())
+{
+  printf("In B constructor!\n");
+}
+catch (int i) {
+  printf("In B catch block with int %d: auto rethrowing\n", i);
+}
+
+
+int main() {
+  {
+    B b;   // Shouldn't throw.
+  }
+
+  try {
+    ShouldThrow = true;
+    B b;
+  } catch (...) {
+    printf("Caught exception!\n");
+  }
+}