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
llvm/test/Regression/C++Frontend/EH
|
@ -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