mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-15 15:48:38 +00:00
New testcases, which WORK with LLVMG++ and the CBE.
llvm-svn: 8158
This commit is contained in:
parent
acfc68a7ff
commit
acf9c4a442
13
test/Regression/C++Frontend/EH/simple_throw.cpp
Normal file
13
test/Regression/C++Frontend/EH/simple_throw.cpp
Normal 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;
|
||||
}
|
40
test/Regression/C++Frontend/EH/throw_rethrow_test.cpp
Normal file
40
test/Regression/C++Frontend/EH/throw_rethrow_test.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user