Add test for the last chapter of our C++ exception handling odyssey. llvmg++

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
This commit is contained in:
Chris Lattner 2003-08-28 20:32:36 +00:00
parent b40d5e7d94
commit 206c7d029d

View File

@ -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");
}
}