forked from OSchip/llvm-project
Add test for the last chapter of our C++ exception handling odyssey. llvmg++
now fully supports all C++ exception handling functionality. llvm-svn: 8185
This commit is contained in:
parent
4f08308b9c
commit
a9c1cd238a
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue