blob: 69a8f11c2db78e9bf83352b73f558b0f6c2f9f74 [file] [log] [blame] [edit]
#include <cstdio>
#include <exception>
void println(const char* s) {
puts(s);
fflush(stdout);
}
struct outer_exception {};
struct inner_exception {};
extern "C" {
void throw_cxx_exception() {
if (std::uncaught_exception()) {
println("throwing inner C++ exception");
throw inner_exception();
} else {
println("throwing outer C++ exception");
throw outer_exception();
}
}
void cxx_catch_callback(void (*cb)()) {
try {
cb();
println("unreachable: callback returns");
} catch (outer_exception) {
println("unreachable: caught outer exception in catch (...)");
} catch (inner_exception) {
println("unreachable: caught inner exception in catch (...)");
}
}
}