mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-10 20:33:15 +00:00
This tests exception specifications, and also adds an "easy" rethrow test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8183 91177308-0d34-0410-b5e6-96231b3b80d8
52 lines
1.0 KiB
C++
52 lines
1.0 KiB
C++
// This tests that exception specifications interact properly with unexpected
|
|
// handlers.
|
|
|
|
#include <exception>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
static void TerminateHandler() {
|
|
printf("std::terminate called\n");
|
|
exit(1);
|
|
}
|
|
|
|
static void UnexpectedHandler1() {
|
|
printf("std::unexpected called: throwing a double\n");
|
|
throw 1.0;
|
|
}
|
|
|
|
static void UnexpectedHandler2() {
|
|
printf("std::unexpected called: throwing an int!\n");
|
|
throw 1;
|
|
}
|
|
|
|
void test(bool Int) throw (double) {
|
|
if (Int) {
|
|
printf("Throwing an int from a function which only allows doubles!\n");
|
|
throw 1;
|
|
} else {
|
|
printf("Throwing a double from a function which allows doubles!\n");
|
|
throw 1.0;
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
try {
|
|
test(false);
|
|
} catch (double D) {
|
|
printf("Double successfully caught!\n");
|
|
}
|
|
|
|
std::set_terminate(TerminateHandler);
|
|
std::set_unexpected(UnexpectedHandler1);
|
|
|
|
try {
|
|
test(true);
|
|
} catch (double D) {
|
|
printf("Double successfully caught!\n");
|
|
}
|
|
|
|
std::set_unexpected(UnexpectedHandler2);
|
|
test(true);
|
|
}
|