New testcases, which WORK with LLVMG++ and the CBE.

llvm-svn: 8158
This commit is contained in:
Chris Lattner 2003-08-27 04:57:33 +00:00
parent acfc68a7ff
commit acf9c4a442
2 changed files with 53 additions and 0 deletions

View File

@ -0,0 +1,13 @@
// Test throwing a constant int
#include <stdio.h>
static void foo() { throw 5; }
int main() {
try {
foo();
} catch (...) {
printf("All ok\n");
return 0;
}
return 1;
}

View File

@ -0,0 +1,40 @@
// This tests hard situations for throwing, including the case where an
// exception is active in more than one handler at a time (ie, it needs
// refcounting)
#include <cstdio>
struct foo {
int i;
foo() : i(1) { }
foo(const foo&) : i(2) {}
};
int callee(unsigned i) {
if (i < 3) throw (int)i;
if (i < 6) throw 1.0;
if (i < 9) throw foo();
return 0;
}
void rethrow() {
throw;
}
int main() {
for (unsigned i = 0; i < 10; ++i) {
try {
return callee(i);
} catch (foo &F) {
try {
rethrow();
} catch (foo &F) {
std::printf("%d: 3\n", i);
}
} catch (int) {
std::printf("%d: 1\n", i);
} catch (...) {
std::printf("%d: 2\n", i);
}
}
}