Open
Description
Recently, a bunch of strange issues have appeared in conjunction with Binaryen.js builds, yielding runtime errors like
RuntimeError: null function or function signature mismatch
andTypeError: c(...) is not a function
as described in more detail in AssemblyScript/assemblyscript#2682 and AssemblyScript/assemblyscript#2683.
After getting debug builds to work again as outlined in #5647, it turned out that the __assert_fail
in
function wasm__Visitor_wasm__PrecomputingExpressionRunner_2c_20wasm__Flow___visit_28wasm__Expression__29($0, $1, $2) {
$0 = $0 | 0;
$1 = $1 | 0;
$2 = $2 | 0;
var $5 = 0, $6 = 0, $21 = 0;
$5 = __stack_pointer - 16 | 0;
__stack_pointer = $5;
HEAP32[($5 + 12 | 0) >> 2] = $0;
HEAP32[($5 + 8 | 0) >> 2] = $1;
HEAP32[($5 + 4 | 0) >> 2] = $2;
$6 = HEAP32[($5 + 8 | 0) >> 2] | 0;
label$1 : {
if ((HEAP32[($5 + 4 | 0) >> 2] | 0 | 0) != (0 | 0) & 1 | 0) {
break label$1
}
__assert_fail(95448 | 0, 113524 | 0, 58 | 0, 78548 | 0);
wasm2js_trap();
}
...
is hit, looking like a stack overflow or so is the underlying cause. The surrounding stack trace indicates that there is a longer sequence of PrecomputingExpressionRunner::visit
s, further substantiating the assumption:
RuntimeError: memory access out of bounds
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c7d4)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ConstantExpressionRunner<wasm::PrecomputingExpressionRunner>::visitLocalSet(wasm::LocalSet*) (wasm://wasm/38a29666:wasm-function[97299]:0x13f3674)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eea11)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ConstantExpressionRunner<wasm::PrecomputingExpressionRunner>::visitLocalSet(wasm::LocalSet*) (wasm://wasm/38a29666:wasm-function[97299]:0x13f3674)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eea11)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ConstantExpressionRunner<wasm::PrecomputingExpressionRunner>::visitLocalSet(wasm::LocalSet*) (wasm://wasm/38a29666:wasm-function[97299]:0x13f3674)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eea11)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visitBinary(wasm::Binary*) (wasm://wasm/38a29666:wasm-function[97322]:0x140c815)
▌ at wasm::Visitor<wasm::PrecomputingExpressionRunner, wasm::Flow>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97277]:0x13eebdd)
▌ at wasm::ExpressionRunner<wasm::PrecomputingExpressionRunner>::visit(wasm::Expression*) (wasm://wasm/38a29666:wasm-function[97271]:0x13edc3d)
▌ at invoke_viii (file://path/to/binaryen_wasm.js:7802:29)
And indeed, when increasing stack size to -sSTACK_SIZE=655360
, the errors go away in both debug and release builds, so my guess is that the default stack size of 65536
is a little low.