mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
206c7d029d
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
56 lines
837 B
C++
56 lines
837 B
C++
|
|
#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");
|
|
}
|
|
}
|