-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Closed
Description
STR:
#include <stdio.h> // avoid iostream C++ code, just test libc++abi, not libc++
#include <stdint.h>
const int INIIAL_FUEL = 100;
static int fuel = INIIAL_FUEL;
void refuel() {
fuel = INIIAL_FUEL;
}
// TODO random data
static bool boolean = true;
bool getBoolean() {
// If we are done, exit all loops etc.
if (fuel == 0) {
return false;
}
fuel--;
boolean = !boolean;
return boolean;
}
struct Class {
Class();
~Class();
};
Class::Class() {
puts("class-instance");
}
Class::~Class() {
puts("~class-instance");
}
void func_0() {
try {
throw 0;
} catch (Class) {
}
}
void func_1() {
try {
throw 0;
} catch (int32_t) {
try {
func_0();
} catch (int32_t) {
}
}
}
int main() {
// func_0
puts("calling func_0");
refuel();
try {
func_0();
} catch (...) {
puts("main caught from func_0");
}
// func_1
puts("calling func_1");
refuel();
try {
func_1();
} catch (...) {
puts("main caught from func_1");
}
return 0;
}
em++ a.cpp -fwasm-exceptions -s WASM_BIGINT -g
v8 --experimental-wasm-eh a.out.js
-g
is useful for the stack trace, but not necessary to get a runtime error. The trace is
calling func_0
main caught from func_0
calling func_1
exception thrown: RuntimeError: unreachable,RuntimeError: unreachable
at abort_message (<anonymous>:wasm-function[14]:0x7fc)
at demangling_terminate_handler() (<anonymous>:wasm-function[15]:0x8c5)
at std::__terminate(void (*)()) (<anonymous>:wasm-function[22]:0xa10)
at __cxxabiv1::call_terminate(bool, _Unwind_Exception*) (<anonymous>:wasm-function[80]:0x1efb)
at __cxxabiv1::scan_eh_tab(__cxxabiv1::(anonymous namespace)::scan_results&, _Unwind_Action, bool, _Unwind_Exception*, _Unwind_Context*) (<anonymous>:wasm-function[78]:0x1eae)
at __gxx_personality_wasm0 (<anonymous>:wasm-function[77]:0x19f4)
at _Unwind_CallPersonality (<anonymous>:wasm-function[94]:0x2330)
at func_1() (<anonymous>:wasm-function[9]:0x5b9)
at __original_main (<anonymous>:wasm-function[10]:0x733)
at main (<anonymous>:wasm-function[11]:0x7dc)
Tested on the #13485 branch where this was found, which skips building libc++ - perhaps that is related?
Metadata
Metadata
Assignees
Labels
No labels