From 48e01c33e8ec9ac24eff1dd4b66e15904fae320f Mon Sep 17 00:00:00 2001 From: dcode Date: Wed, 22 Apr 2020 23:43:56 +0200 Subject: [PATCH 1/7] Fix ExpressionRunner issues found by the fuzzer --- src/passes/Precompute.cpp | 2 +- src/wasm-interpreter.h | 33 +++++++++++++++++---------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/passes/Precompute.cpp b/src/passes/Precompute.cpp index dd390150ef5..7d3e691e13a 100644 --- a/src/passes/Precompute.cpp +++ b/src/passes/Precompute.cpp @@ -79,7 +79,7 @@ class PrecomputingExpressionRunner if (iter != getValues.end()) { auto values = iter->second; if (values.isConcrete()) { - return Flow(std::move(values)); + return Flow(values); } } return ExpressionRunner::visitLocalGet(curr); diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 6432eee79da..393c33b7548 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -1252,7 +1252,7 @@ class ExpressionRunner : public OverriddenVisitor { // Check if a constant value has been set in the context of this runner. auto iter = localValues.find(curr->index); if (iter != localValues.end()) { - return Flow(std::move(iter->second)); + return Flow(iter->second); } return Flow(NONCONSTANT_FLOW); } @@ -1288,7 +1288,7 @@ class ExpressionRunner : public OverriddenVisitor { // Check if a constant value has been set in the context of this runner. auto iter = globalValues.find(curr->name); if (iter != globalValues.end()) { - return Flow(std::move(iter->second)); + return Flow(iter->second); } return Flow(NONCONSTANT_FLOW); } @@ -1327,13 +1327,13 @@ class ExpressionRunner : public OverriddenVisitor { auto argFlow = visit(curr->operands[i]); if (!argFlow.breaking()) { assert(argFlow.values.isConcrete()); - localValues[i] = std::move(argFlow.values); + localValues[i] = argFlow.values; } } auto retFlow = visit(func->body); - localValues = std::move(prevLocalValues); + localValues = prevLocalValues; if (retFlow.breakTo == RETURN_FLOW) { - return Flow(std::move(retFlow.values)); + return Flow(retFlow.values); } else if (!retFlow.breaking()) { return retFlow; } @@ -1343,7 +1343,7 @@ class ExpressionRunner : public OverriddenVisitor { return Flow(NONCONSTANT_FLOW); } - Flow visitCallIndirect(CallIndirect*) { + Flow visitCallIndirect(CallIndirect* curr) { NOTE_ENTER("CallIndirect"); return Flow(NONCONSTANT_FLOW); } @@ -1375,39 +1375,39 @@ class ExpressionRunner : public OverriddenVisitor { NOTE_ENTER("MemoryFill"); return Flow(NONCONSTANT_FLOW); } - Flow visitAtomicRMW(AtomicRMW*) { + Flow visitAtomicRMW(AtomicRMW* curr) { NOTE_ENTER("AtomicRMW"); return Flow(NONCONSTANT_FLOW); } - Flow visitAtomicCmpxchg(AtomicCmpxchg*) { + Flow visitAtomicCmpxchg(AtomicCmpxchg* curr) { NOTE_ENTER("AtomicCmpxchg"); return Flow(NONCONSTANT_FLOW); } - Flow visitAtomicWait(AtomicWait*) { + Flow visitAtomicWait(AtomicWait* curr) { NOTE_ENTER("AtomicWait"); return Flow(NONCONSTANT_FLOW); } - Flow visitAtomicNotify(AtomicNotify*) { + Flow visitAtomicNotify(AtomicNotify* curr) { NOTE_ENTER("AtomicNotify"); return Flow(NONCONSTANT_FLOW); } - Flow visitSIMDLoad(SIMDLoad*) { + Flow visitSIMDLoad(SIMDLoad* curr) { NOTE_ENTER("SIMDLoad"); return Flow(NONCONSTANT_FLOW); } - Flow visitSIMDLoadSplat(SIMDLoad*) { + Flow visitSIMDLoadSplat(SIMDLoad* curr) { NOTE_ENTER("SIMDLoadSplat"); return Flow(NONCONSTANT_FLOW); } - Flow visitSIMDLoadExtend(SIMDLoad*) { + Flow visitSIMDLoadExtend(SIMDLoad* curr) { NOTE_ENTER("SIMDLoadExtend"); return Flow(NONCONSTANT_FLOW); } - Flow visitPush(Push*) { + Flow visitPush(Push* curr) { NOTE_ENTER("Push"); return Flow(NONCONSTANT_FLOW); } - Flow visitPop(Pop*) { + Flow visitPop(Pop* curr) { NOTE_ENTER("Pop"); return Flow(NONCONSTANT_FLOW); } @@ -2470,7 +2470,8 @@ template class ModuleInstanceBase { functionStack.pop_back(); } #ifdef WASM_INTERPRETER_DEBUG - std::cout << "exiting " << function->name << " with " << ret << '\n'; + std::cout << "exiting " << function->name << " with " << flow.values + << '\n'; #endif return flow.values; } From 4b1ac4641ccff3f9fb146a4b9de0b5fb5a6151e7 Mon Sep 17 00:00:00 2001 From: dcode Date: Thu, 23 Apr 2020 01:46:25 +0200 Subject: [PATCH 2/7] fix printing expressions in WASM_INTERPRETER_DEBUG --- src/wasm-printing.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/wasm-printing.h b/src/wasm-printing.h index 712dd3c1f92..276a387ae2b 100644 --- a/src/wasm-printing.h +++ b/src/wasm-printing.h @@ -53,6 +53,10 @@ inline std::ostream& operator<<(std::ostream& o, wasm::Expression& expression) { return wasm::WasmPrinter::printExpression(&expression, o); } +inline std::ostream& operator<<(std::ostream& o, wasm::Expression* expression) { + return wasm::WasmPrinter::printExpression(expression, o); +} + inline std::ostream& operator<<(std::ostream& o, wasm::StackInst& inst) { return wasm::WasmPrinter::printStackInst(&inst, o); } From 400758ae30c25cda7f410d4611cd4f7eb8ef0a73 Mon Sep 17 00:00:00 2001 From: dcode Date: Thu, 23 Apr 2020 01:46:33 +0200 Subject: [PATCH 3/7] add test case --- test/passes/issue2788.passes | 1 + test/passes/issue2788.txt | 684 ++++++++++++++++++++++++++++++++++ test/passes/issue2788.wast | 692 +++++++++++++++++++++++++++++++++++ 3 files changed, 1377 insertions(+) create mode 100644 test/passes/issue2788.passes create mode 100644 test/passes/issue2788.txt create mode 100644 test/passes/issue2788.wast diff --git a/test/passes/issue2788.passes b/test/passes/issue2788.passes new file mode 100644 index 00000000000..0d1ffd080b5 --- /dev/null +++ b/test/passes/issue2788.passes @@ -0,0 +1 @@ +all-features_precompute-propagate diff --git a/test/passes/issue2788.txt b/test/passes/issue2788.txt new file mode 100644 index 00000000000..a1e272db8c1 --- /dev/null +++ b/test/passes/issue2788.txt @@ -0,0 +1,684 @@ +(module + (type $none_=>_anyref (func (result anyref))) + (type $none_=>_funcref (func (result funcref))) + (type $none_=>_none (func)) + (type $i32_f32_funcref_i32_i32_f32_f64_nullref_=>_none (func (param i32 f32 funcref i32 i32 f32 f64 nullref))) + (type $i32_f32_funcref_i64_f32_f64_nullref_=>_none (func (param i32 f32 funcref i64 f32 f64 nullref))) + (type $i64_=>_none (func (param i64))) + (type $i64_i64_i32_=>_none (func (param i64 i64 i32))) + (type $i64_f32_i32_v128_=>_none (func (param i64 f32 i32 v128))) + (type $funcref_v128_f32_f64_=>_none (func (param funcref v128 f32 f64))) + (type $none_=>_i32 (func (result i32))) + (type $i32_v128_anyref_=>_i32 (func (param i32 v128 anyref) (result i32))) + (type $i32_funcref_i32_i32_f64_funcref_=>_i32 (func (param i32 funcref i32 i32 f64 funcref) (result i32))) + (type $i64_v128_funcref_f64_f32_v128_=>_i32 (func (param i64 v128 funcref f64 f32 v128) (result i32))) + (type $f64_v128_=>_i32 (func (param f64 v128) (result i32))) + (type $f64_nullref_anyref_nullref_=>_i32 (func (param f64 nullref anyref nullref) (result i32))) + (type $v128_nullref_=>_i32 (func (param v128 nullref) (result i32))) + (type $anyref_nullref_f64_nullref_v128_anyref_=>_i32 (func (param anyref nullref f64 nullref v128 anyref) (result i32))) + (type $none_=>_i32_f64 (func (result i32 f64))) + (type $none_=>_i64 (func (result i64))) + (type $v128_anyref_f32_=>_i64 (func (param v128 anyref f32) (result i64))) + (type $funcref_nullref_anyref_i64_=>_i64 (func (param funcref nullref anyref i64) (result i64))) + (type $anyref_f64_=>_i64 (func (param anyref f64) (result i64))) + (type $anyref_nullref_f64_nullref_v128_anyref_=>_i64 (func (param anyref nullref f64 nullref v128 anyref) (result i64))) + (type $nullref_f64_nullref_=>_i64 (func (param nullref f64 nullref) (result i64))) + (type $f32_=>_i64_i32_f64_funcref_f32_i32 (func (param f32) (result i64 i32 f64 funcref f32 i32))) + (type $none_=>_i64_i64_v128_anyref_f32_i32 (func (result i64 i64 v128 anyref f32 i32))) + (type $none_=>_f32 (func (result f32))) + (type $i32_v128_v128_i32_i64_=>_f32 (func (param i32 v128 v128 i32 i64) (result f32))) + (type $i32_v128_anyref_i32_=>_f32 (func (param i32 v128 anyref i32) (result f32))) + (type $i64_=>_f32 (func (param i64) (result f32))) + (type $i64_nullref_=>_f32 (func (param i64 nullref) (result f32))) + (type $f32_=>_f32 (func (param f32) (result f32))) + (type $f32_v128_f32_funcref_f64_funcref_anyref_anyref_=>_f32 (func (param f32 v128 f32 funcref f64 funcref anyref anyref) (result f32))) + (type $v128_nullref_f64_nullref_f32_=>_f32 (func (param v128 nullref f64 nullref f32) (result f32))) + (type $funcref_i64_anyref_funcref_=>_f32 (func (param funcref i64 anyref funcref) (result f32))) + (type $nullref_i32_i32_=>_f32 (func (param nullref i32 i32) (result f32))) + (type $nullref_i64_=>_f32 (func (param nullref i64) (result f32))) + (type $i32_i32_funcref_=>_f32_funcref_v128_i32_f32 (func (param i32 i32 funcref) (result f32 funcref v128 i32 f32))) + (type $none_=>_f32_anyref (func (result f32 anyref))) + (type $none_=>_f64 (func (result f64))) + (type $f32_v128_i64_f64_f32_=>_f64 (func (param f32 v128 i64 f64 f32) (result f64))) + (type $v128_nullref_f32_=>_f64 (func (param v128 nullref f32) (result f64))) + (type $nullref_i32_funcref_v128_=>_f64_f64_v128_i64_i64_i64 (func (param nullref i32 funcref v128) (result f64 f64 v128 i64 i64 i64))) + (type $none_=>_f64_funcref_anyref_nullref_nullref (func (result f64 funcref anyref nullref nullref))) + (type $nullref_f64_funcref_nullref_=>_f64_anyref_f32_v128_v128_i32 (func (param nullref f64 funcref nullref) (result f64 anyref f32 v128 v128 i32))) + (type $none_=>_v128 (func (result v128))) + (type $i32_=>_v128 (func (param i32) (result v128))) + (type $f32_i64_funcref_f64_f64_funcref_=>_v128 (func (param f32 i64 funcref f64 f64 funcref) (result v128))) + (type $v128_=>_v128 (func (param v128) (result v128))) + (type $nullref_v128_i64_=>_v128 (func (param nullref v128 i64) (result v128))) + (type $f32_funcref_=>_v128_i64 (func (param f32 funcref) (result v128 i64))) + (type $nullref_=>_v128_i64_funcref_anyref_nullref (func (param nullref) (result v128 i64 funcref anyref nullref))) + (type $none_=>_v128_f32_v128_funcref_i64 (func (result v128 f32 v128 funcref i64))) + (type $anyref_=>_v128_anyref_i64 (func (param anyref) (result v128 anyref i64))) + (type $none_=>_v128_nullref_i64 (func (result v128 nullref i64))) + (type $anyref_nullref_=>_funcref (func (param anyref nullref) (result funcref))) + (type $v128_f32_=>_funcref_i32_f32_f32_v128 (func (param v128 f32) (result funcref i32 f32 f32 v128))) + (type $i32_=>_anyref (func (param i32) (result anyref))) + (type $i64_=>_anyref (func (param i64) (result anyref))) + (type $f32_=>_anyref (func (param f32) (result anyref))) + (type $f32_f64_anyref_anyref_=>_anyref (func (param f32 f64 anyref anyref) (result anyref))) + (type $v128_f64_i32_i64_anyref_nullref_=>_anyref (func (param v128 f64 i32 i64 anyref nullref) (result anyref))) + (type $funcref_f64_v128_f32_funcref_anyref_=>_anyref (func (param funcref f64 v128 f32 funcref anyref) (result anyref))) + (type $nullref_=>_anyref (func (param nullref) (result anyref))) + (type $f32_=>_anyref_funcref (func (param f32) (result anyref funcref))) + (type $i64_funcref_=>_anyref_anyref_i32 (func (param i64 funcref) (result anyref anyref i32))) + (type $anyref_f32_=>_anyref_anyref_nullref_anyref_nullref (func (param anyref f32) (result anyref anyref nullref anyref nullref))) + (type $i32_=>_anyref_nullref_nullref_f32 (func (param i32) (result anyref nullref nullref f32))) + (type $none_=>_nullref (func (result nullref))) + (type $i64_=>_nullref (func (param i64) (result nullref))) + (type $i64_anyref_nullref_=>_nullref (func (param i64 anyref nullref) (result nullref))) + (type $f64_v128_f32_=>_nullref (func (param f64 v128 f32) (result nullref))) + (type $v128_funcref_funcref_f32_=>_nullref (func (param v128 funcref funcref f32) (result nullref))) + (type $nullref_f32_f64_i64_v128_v128_=>_nullref_f32_funcref (func (param nullref f32 f64 i64 v128 v128) (result nullref f32 funcref))) + (memory $0 (shared 1 1)) + (data (i32.const 0) "") + (table $0 108 funcref) + (global $global$0 (mut i32) (i32.const -1883585)) + (global $global$1 (mut nullref) (ref.null)) + (global $global$2 (mut anyref) (ref.null)) + (global $global$3 (mut nullref) (ref.null)) + (global $global$4 (mut i32) (i32.const 10)) + (func $0 (result i32) + (i32.const 0) + ) + (func $1 (param $0 i64) (result nullref) + (ref.null) + ) + (func $2 + (nop) + ) + (func $3 (param $0 f64) (param $1 v128) (result i32) + (i32.const 0) + ) + (func $4 (param $0 i32) (param $1 v128) (param $2 anyref) (result i32) + (i32.const 0) + ) + (func $5 (param $0 i32) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $6 (result funcref) + (ref.null) + ) + (func $7 (result i64) + (i64.const 1) + ) + (func $8 (param $0 nullref) (param $1 f32) (param $2 f64) (param $3 i64) (param $4 v128) (param $5 v128) (result nullref f32 funcref) + (unreachable) + ) + (func $9 (param $0 v128) (param $1 funcref) (param $2 funcref) (param $3 f32) (result nullref) + (ref.null) + ) + (func $10 (result i64 i64 v128 anyref f32 i32) + (unreachable) + ) + (func $11 (result nullref) + (ref.null) + ) + (func $12 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i64) + (i64.const 1) + ) + (func $13 (param $0 i32) (result anyref) + (unreachable) + ) + (func $14 (result anyref) + (ref.null) + ) + (func $15 (param $0 i32) (param $1 v128) (param $2 anyref) (param $3 i32) (result f32) + (f32.const 1) + ) + (func $16 (param $0 v128) (param $1 f64) (param $2 i32) (param $3 i64) (param $4 anyref) (param $5 nullref) (result anyref) + (unreachable) + ) + (func $17 (result anyref) + (unreachable) + ) + (func $18 (param $0 f32) (param $1 v128) (param $2 f32) (param $3 funcref) (param $4 f64) (param $5 funcref) (param $6 anyref) (param $7 anyref) (result f32) + (f32.const 1) + ) + (func $19 (param $0 i32) (result anyref nullref nullref f32) + (tuple.make + (ref.null) + (ref.null) + (ref.null) + (f32.const 0) + ) + ) + (func $20 (param $0 f32) (param $1 i64) (param $2 funcref) (param $3 f64) (param $4 f64) (param $5 funcref) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $21 (param $0 i64) (param $1 funcref) (result anyref anyref i32) + (unreachable) + ) + (func $22 (param $0 nullref) (result anyref) + (unreachable) + ) + (func $23 (param $0 f32) (param $1 funcref) (result v128 i64) + (tuple.make + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + (i64.const 0) + ) + ) + (func $24 (param $0 nullref) (param $1 f64) (param $2 nullref) (result i64) + (i64.const 1) + ) + (func $25 (param $0 i64) (param $1 v128) (param $2 funcref) (param $3 f64) (param $4 f32) (param $5 v128) (result i32) + (i32.const 0) + ) + (func $26 (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $27 (param $0 i64) (param $1 i64) (param $2 i32) + (unreachable) + ) + (func $28 (param $0 nullref) (param $1 i64) (result f32) + (f32.const 1) + ) + (func $29 (param $0 i64) (result f32) + (f32.const 1) + ) + (func $30 (result f64 funcref anyref nullref nullref) + (unreachable) + ) + (func $31 (result f32) + (f32.const 1) + ) + (func $32 (param $0 i32) (param $1 i32) (param $2 funcref) (result f32 funcref v128 i32 f32) + (unreachable) + ) + (func $33 (param $0 nullref) (param $1 f64) (param $2 funcref) (param $3 nullref) (result f64 anyref f32 v128 v128 i32) + (unreachable) + ) + (func $34 (param $0 anyref) (param $1 f64) (result i64) + (i64.const 1) + ) + (func $35 (param $0 anyref) (param $1 f32) (result anyref anyref nullref anyref nullref) + (unreachable) + ) + (func $36 (result f64) + (f64.const 1) + ) + (func $37 (param $0 v128) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 f32) (result f32) + (f32.const 1) + ) + (func $38 (result anyref) + (unreachable) + ) + (func $39 (param $0 i64) (result anyref) + (unreachable) + ) + (func $40 (param $0 anyref) (param $1 nullref) (result funcref) + (ref.null) + ) + (func $41 (param $0 v128) (param $1 f32) (result funcref i32 f32 f32 v128) + (unreachable) + ) + (func $42 (param $0 nullref) (result v128 i64 funcref anyref nullref) + (unreachable) + ) + (func $43 (result v128 f32 v128 funcref i64) + (unreachable) + ) + (func $44 (param $0 nullref) (param $1 i32) (param $2 funcref) (param $3 v128) (result f64 f64 v128 i64 i64 i64) + (tuple.make + (f64.const 0) + (f64.const 0) + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + (i64.const 0) + (i64.const 0) + (i64.const 0) + ) + ) + (func $45 (result anyref) + (unreachable) + ) + (func $46 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i64) (param $4 f32) (param $5 f64) (param $6 nullref) + (nop) + ) + (func $47 (param $0 funcref) (param $1 i64) (param $2 anyref) (param $3 funcref) (result f32) + (f32.const 1) + ) + (func $48 (result funcref) + (unreachable) + ) + (func $49 (param $0 i64) (param $1 f32) (param $2 i32) (param $3 v128) + (nop) + ) + (func $50 (param $0 i64) + (nop) + ) + (func $51 (param $0 f64) (param $1 nullref) (param $2 anyref) (param $3 nullref) (result i32) + (i32.const 0) + ) + (func $52 (param $0 funcref) (param $1 nullref) (param $2 anyref) (param $3 i64) (result i64) + (i64.const 1) + ) + (func $53 (param $0 v128) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $54 (param $0 f64) (param $1 v128) (param $2 f32) (result nullref) + (ref.null) + ) + (func $55 (param $0 v128) (param $1 nullref) (param $2 f32) (result f64) + (f64.const 1) + ) + (func $56 (param $0 v128) (param $1 anyref) (param $2 f32) (result i64) + (i64.const 1) + ) + (func $57 (param $0 nullref) (param $1 v128) (param $2 i64) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $58 (result i32 f64) + (tuple.make + (i32.const 0) + (f64.const 0) + ) + ) + (func $59 (param $0 f32) (result anyref) + (ref.null) + ) + (func $60 (param $0 i64) (param $1 nullref) (result f32) + (f32.const 1) + ) + (func $61 (param $0 i32) (param $1 funcref) (param $2 i32) (param $3 i32) (param $4 f64) (param $5 funcref) (result i32) + (i32.const 0) + ) + (func $62 (param $0 v128) (param $1 nullref) (result i32) + (i32.const 0) + ) + (func $63 (param $0 funcref) (param $1 f64) (param $2 v128) (param $3 f32) (param $4 funcref) (param $5 anyref) (result anyref) + (global.get $global$2) + ) + (func $64 (param $0 i64) (param $1 anyref) (param $2 nullref) (result nullref) + (ref.null) + ) + (func $65 (result funcref) + (unreachable) + ) + (func $66 (param $0 f32) (result anyref funcref) + (tuple.make + (ref.null) + (ref.func $18) + ) + ) + (func $67 (param $0 f32) (result i64 i32 f64 funcref f32 i32) + (tuple.make + (i64.const 524288) + (i32.const 0) + (f64.const 1) + (ref.null) + (f32.const 1) + (i32.const -57) + ) + ) + (func $68 (result f32 anyref) + (unreachable) + ) + (func $69 (param $0 anyref) (result v128 anyref i64) + (local $1 i64) + (local $2 i64) + (local $3 i64) + (local $4 i64) + (local $5 i64) + (local $6 i64) + (local $7 i64) + (local $8 i64) + (local $9 i64) + (local $10 i64) + (local $11 i64) + (local $12 i64) + (local $13 i64) + (local $14 i64) + (local $15 i64) + (local $16 i64) + (local $17 i64) + (local $18 i64) + (local $19 i64) + (local $20 i64) + (local $21 i64) + (local $22 i64) + (local $23 i64) + (local $24 i64) + (local $25 i64) + (local $26 i64) + (local $27 v128) + (local $28 v128) + (local $29 v128) + (local $30 v128) + (local $31 v128) + (local $32 v128) + (local $33 v128) + (local $34 v128) + (local $35 v128) + (local $36 v128) + (local $37 v128) + (local $38 v128) + (local $39 v128) + (local $40 v128) + (local $41 v128) + (local $42 v128) + (local $43 v128) + (local $44 v128) + (local $45 v128) + (local $46 v128) + (local $47 v128) + (local $48 v128) + (local $49 v128) + (local $50 v128) + (local $51 v128) + (local $52 v128) + (local $53 v128) + (local $54 v128) + (local $55 v128) + (local $56 v128) + (local $57 v128) + (local $58 v128) + (local $59 v128) + (local $60 v128) + (local $61 v128) + (local $62 v128) + (local $63 v128) + (local $64 v128) + (local $65 v128) + (local $66 v128) + (local $67 v128) + (local $68 v128) + (local $69 v128) + (local $70 v128) + (local $71 v128) + (local $72 v128) + (local $73 v128) + (local $74 v128) + (local $75 v128) + (local $76 v128) + (local $77 v128) + (local $78 v128) + (local $79 v128) + (local $80 v128) + (local $81 v128) + (local $82 v128) + (local $83 v128) + (local $84 v128) + (local $85 v128) + (local $86 v128) + (local $87 v128) + (local $88 v128) + (local $89 anyref) + (local $90 anyref) + (local $91 anyref) + (local $92 anyref) + (local $93 anyref) + (local $94 anyref) + (local $95 anyref) + (local $96 anyref) + (local $97 anyref) + (local $98 anyref) + (local $99 anyref) + (local $100 anyref) + (local $101 anyref) + (local $102 anyref) + (local $103 anyref) + (local $104 anyref) + (local $105 anyref) + (local $106 anyref) + (local $107 anyref) + (local $108 anyref) + (local $109 anyref) + (local $110 anyref) + (local $111 anyref) + (local $112 anyref) + (local $113 anyref) + (local $114 anyref) + (local $115 anyref) + (local $116 anyref) + (local $117 anyref) + (local $118 anyref) + (local $119 anyref) + (local $120 anyref) + (local $121 anyref) + (local $122 anyref) + (local $123 anyref) + (local $124 anyref) + (local $125 anyref) + (local $126 anyref) + (local $127 anyref) + (local $128 anyref) + (local $129 anyref) + (local $130 anyref) + (local $131 anyref) + (local $132 anyref) + (local $133 anyref) + (local $134 anyref) + (local $135 anyref) + (local $136 anyref) + (local $137 anyref) + (local $138 anyref) + (local $139 anyref) + (local $140 anyref) + (local $141 anyref) + (local $142 anyref) + (local $143 anyref) + (local $144 anyref) + (local $145 anyref) + (local $146 anyref) + (local $147 anyref) + (local $148 anyref) + (local $149 anyref) + (local $150 anyref) + (local $151 anyref) + (local $152 anyref) + (local $153 anyref) + (local $154 anyref) + (local $155 anyref) + (local $156 anyref) + (local $157 anyref) + (local $158 anyref) + (local $159 anyref) + (local $160 anyref) + (local $161 anyref) + (local $162 anyref) + (local $163 (v128 anyref i64)) + (local $164 anyref) + (local $165 v128) + (tuple.make + (block $label$1 (result v128) + (drop + (block $label$2 (result anyref) + (local.set $44 + (block $label$3 (result v128) + (drop + (block $label$4 (result anyref) + (drop + (block $label$5 (result v128) + (drop + (block $label$6 (result anyref) + (drop + (block $label$7 (result v128) + (drop + (block $label$8 (result anyref) + (drop + (block $label$9 (result v128) + (drop + (block $label$10 (result anyref) + (drop + (block $label$11 (result v128) + (drop + (block $label$12 (result nullref) + (drop + (block $label$13 (result anyref) + (drop + (block $label$14 (result v128) + (drop + (block $label$15 (result nullref) + (drop + (block $label$16 (result v128) + (drop + (block $label$17 (result anyref) + (drop + (block $label$18 (result v128) + (drop + (block $label$19 (result nullref) + (drop + (block $label$20 (result nullref) + (drop + (block $label$21 (result v128) + (drop + (block $label$22 (result nullref) + (drop + (block $label$23 (result v128) + (drop + (block $label$24 (result nullref) + (local.set $163 + (block $label$25 (result v128 nullref i64) + (tuple.make + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + (ref.null) + (i64.const 0) + ) + ) + ) + (drop + (block $block (result v128) + (local.set $165 + (tuple.extract 0 + (local.get $163) + ) + ) + (drop + (block $block0 (result nullref) + (local.set $164 + (ref.null) + ) + (nop) + (ref.null) + ) + ) + (local.get $165) + ) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (ref.null) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (ref.null) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (ref.null) + ) + ) + (ref.null) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (ref.null) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (ref.null) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (block $label$26 (result anyref) + (block $label$27 (result anyref) + (local.get $0) + ) + ) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (block $label$28 (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (local.get $0) + (i64.const 1) + ) + ) + (func $70 (param $0 i32) (param $1 v128) (param $2 v128) (param $3 i32) (param $4 i64) (result f32) + (f32.const 1) + ) + (func $71 (param $0 f32) (param $1 f64) (param $2 anyref) (param $3 anyref) (result anyref) + (unreachable) + ) + (func $72 (result anyref) + (local $0 anyref) + (ref.null) + ) + (func $73 (param $0 funcref) (param $1 v128) (param $2 f32) (param $3 f64) + (nop) + ) + (func $74 (result anyref) + (ref.null) + ) + (func $75 (param $0 f32) (param $1 v128) (param $2 i64) (param $3 f64) (param $4 f32) (result f64) + (f64.const 1) + ) + (func $76 (param $0 f32) (result f32) + (f32.const 1) + ) + (func $77 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i32) + (i32.const 0) + ) + (func $78 (param $0 nullref) (param $1 i32) (param $2 i32) (result f32) + (f32.const 1) + ) + (func $79 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i32) (param $4 i32) (param $5 f32) (param $6 f64) (param $7 nullref) + (nop) + ) +) diff --git a/test/passes/issue2788.wast b/test/passes/issue2788.wast new file mode 100644 index 00000000000..a5fabfe5145 --- /dev/null +++ b/test/passes/issue2788.wast @@ -0,0 +1,692 @@ +(module + (type $none_=>_anyref (func (result anyref))) + (type $none_=>_funcref (func (result funcref))) + (type $none_=>_none (func)) + (type $i32_f32_funcref_i32_i32_f32_f64_nullref_=>_none (func (param i32 f32 funcref i32 i32 f32 f64 nullref))) + (type $i32_f32_funcref_i64_f32_f64_nullref_=>_none (func (param i32 f32 funcref i64 f32 f64 nullref))) + (type $i64_=>_none (func (param i64))) + (type $i64_i64_i32_=>_none (func (param i64 i64 i32))) + (type $i64_f32_i32_v128_=>_none (func (param i64 f32 i32 v128))) + (type $funcref_v128_f32_f64_=>_none (func (param funcref v128 f32 f64))) + (type $none_=>_i32 (func (result i32))) + (type $i32_v128_anyref_=>_i32 (func (param i32 v128 anyref) (result i32))) + (type $i32_funcref_i32_i32_f64_funcref_=>_i32 (func (param i32 funcref i32 i32 f64 funcref) (result i32))) + (type $i64_v128_funcref_f64_f32_v128_=>_i32 (func (param i64 v128 funcref f64 f32 v128) (result i32))) + (type $f64_v128_=>_i32 (func (param f64 v128) (result i32))) + (type $f64_nullref_anyref_nullref_=>_i32 (func (param f64 nullref anyref nullref) (result i32))) + (type $v128_nullref_=>_i32 (func (param v128 nullref) (result i32))) + (type $anyref_nullref_f64_nullref_v128_anyref_=>_i32 (func (param anyref nullref f64 nullref v128 anyref) (result i32))) + (type $none_=>_i32_f64 (func (result i32 f64))) + (type $none_=>_i64 (func (result i64))) + (type $v128_anyref_f32_=>_i64 (func (param v128 anyref f32) (result i64))) + (type $funcref_nullref_anyref_i64_=>_i64 (func (param funcref nullref anyref i64) (result i64))) + (type $anyref_f64_=>_i64 (func (param anyref f64) (result i64))) + (type $anyref_nullref_f64_nullref_v128_anyref_=>_i64 (func (param anyref nullref f64 nullref v128 anyref) (result i64))) + (type $nullref_f64_nullref_=>_i64 (func (param nullref f64 nullref) (result i64))) + (type $f32_=>_i64_i32_f64_funcref_f32_i32 (func (param f32) (result i64 i32 f64 funcref f32 i32))) + (type $none_=>_i64_i64_v128_anyref_f32_i32 (func (result i64 i64 v128 anyref f32 i32))) + (type $none_=>_f32 (func (result f32))) + (type $i32_v128_v128_i32_i64_=>_f32 (func (param i32 v128 v128 i32 i64) (result f32))) + (type $i32_v128_anyref_i32_=>_f32 (func (param i32 v128 anyref i32) (result f32))) + (type $i64_=>_f32 (func (param i64) (result f32))) + (type $i64_nullref_=>_f32 (func (param i64 nullref) (result f32))) + (type $f32_=>_f32 (func (param f32) (result f32))) + (type $f32_v128_f32_funcref_f64_funcref_anyref_anyref_=>_f32 (func (param f32 v128 f32 funcref f64 funcref anyref anyref) (result f32))) + (type $v128_nullref_f64_nullref_f32_=>_f32 (func (param v128 nullref f64 nullref f32) (result f32))) + (type $funcref_i64_anyref_funcref_=>_f32 (func (param funcref i64 anyref funcref) (result f32))) + (type $nullref_i32_i32_=>_f32 (func (param nullref i32 i32) (result f32))) + (type $nullref_i64_=>_f32 (func (param nullref i64) (result f32))) + (type $i32_i32_funcref_=>_f32_funcref_v128_i32_f32 (func (param i32 i32 funcref) (result f32 funcref v128 i32 f32))) + (type $none_=>_f32_anyref (func (result f32 anyref))) + (type $none_=>_f64 (func (result f64))) + (type $f32_v128_i64_f64_f32_=>_f64 (func (param f32 v128 i64 f64 f32) (result f64))) + (type $v128_nullref_f32_=>_f64 (func (param v128 nullref f32) (result f64))) + (type $nullref_i32_funcref_v128_=>_f64_f64_v128_i64_i64_i64 (func (param nullref i32 funcref v128) (result f64 f64 v128 i64 i64 i64))) + (type $none_=>_f64_funcref_anyref_nullref_nullref (func (result f64 funcref anyref nullref nullref))) + (type $nullref_f64_funcref_nullref_=>_f64_anyref_f32_v128_v128_i32 (func (param nullref f64 funcref nullref) (result f64 anyref f32 v128 v128 i32))) + (type $none_=>_v128 (func (result v128))) + (type $i32_=>_v128 (func (param i32) (result v128))) + (type $f32_i64_funcref_f64_f64_funcref_=>_v128 (func (param f32 i64 funcref f64 f64 funcref) (result v128))) + (type $v128_=>_v128 (func (param v128) (result v128))) + (type $nullref_v128_i64_=>_v128 (func (param nullref v128 i64) (result v128))) + (type $f32_funcref_=>_v128_i64 (func (param f32 funcref) (result v128 i64))) + (type $nullref_=>_v128_i64_funcref_anyref_nullref (func (param nullref) (result v128 i64 funcref anyref nullref))) + (type $none_=>_v128_f32_v128_funcref_i64 (func (result v128 f32 v128 funcref i64))) + (type $none_=>_v128_anyref_i64 (func (result v128 anyref i64))) + (type $anyref_=>_v128_anyref_i64 (func (param anyref) (result v128 anyref i64))) + (type $anyref_nullref_=>_funcref (func (param anyref nullref) (result funcref))) + (type $v128_f32_=>_funcref_i32_f32_f32_v128 (func (param v128 f32) (result funcref i32 f32 f32 v128))) + (type $i32_=>_anyref (func (param i32) (result anyref))) + (type $i64_=>_anyref (func (param i64) (result anyref))) + (type $f32_=>_anyref (func (param f32) (result anyref))) + (type $f32_f64_anyref_anyref_=>_anyref (func (param f32 f64 anyref anyref) (result anyref))) + (type $v128_f64_i32_i64_anyref_nullref_=>_anyref (func (param v128 f64 i32 i64 anyref nullref) (result anyref))) + (type $funcref_f64_v128_f32_funcref_anyref_=>_anyref (func (param funcref f64 v128 f32 funcref anyref) (result anyref))) + (type $nullref_=>_anyref (func (param nullref) (result anyref))) + (type $f32_=>_anyref_funcref (func (param f32) (result anyref funcref))) + (type $i64_funcref_=>_anyref_anyref_i32 (func (param i64 funcref) (result anyref anyref i32))) + (type $anyref_f32_=>_anyref_anyref_nullref_anyref_nullref (func (param anyref f32) (result anyref anyref nullref anyref nullref))) + (type $i32_=>_anyref_nullref_nullref_f32 (func (param i32) (result anyref nullref nullref f32))) + (type $none_=>_nullref (func (result nullref))) + (type $i64_=>_nullref (func (param i64) (result nullref))) + (type $i64_anyref_nullref_=>_nullref (func (param i64 anyref nullref) (result nullref))) + (type $f64_v128_f32_=>_nullref (func (param f64 v128 f32) (result nullref))) + (type $v128_funcref_funcref_f32_=>_nullref (func (param v128 funcref funcref f32) (result nullref))) + (type $nullref_f32_f64_i64_v128_v128_=>_nullref_f32_funcref (func (param nullref f32 f64 i64 v128 v128) (result nullref f32 funcref))) + (memory $0 (shared 1 1)) + (data (i32.const 0) "") + (table $0 108 funcref) + (global $global$0 (mut i32) (i32.const -1883585)) + (global $global$1 (mut nullref) (ref.null)) + (global $global$2 (mut anyref) (ref.null)) + (global $global$3 (mut nullref) (ref.null)) + (global $global$4 (mut i32) (i32.const 10)) + (func $0 (result i32) + (i32.const 0) + ) + (func $1 (param $0 i64) (result nullref) + (ref.null) + ) + (func $2 + (nop) + ) + (func $3 (param $0 f64) (param $1 v128) (result i32) + (i32.const 0) + ) + (func $4 (param $0 i32) (param $1 v128) (param $2 anyref) (result i32) + (i32.const 0) + ) + (func $5 (param $0 i32) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $6 (result funcref) + (ref.null) + ) + (func $7 (result i64) + (i64.const 1) + ) + (func $8 (param $0 nullref) (param $1 f32) (param $2 f64) (param $3 i64) (param $4 v128) (param $5 v128) (result nullref f32 funcref) + (unreachable) + ) + (func $9 (param $0 v128) (param $1 funcref) (param $2 funcref) (param $3 f32) (result nullref) + (ref.null) + ) + (func $10 (result i64 i64 v128 anyref f32 i32) + (unreachable) + ) + (func $11 (result nullref) + (ref.null) + ) + (func $12 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i64) + (i64.const 1) + ) + (func $13 (param $0 i32) (result anyref) + (unreachable) + ) + (func $14 (result anyref) + (ref.null) + ) + (func $15 (param $0 i32) (param $1 v128) (param $2 anyref) (param $3 i32) (result f32) + (f32.const 1) + ) + (func $16 (param $0 v128) (param $1 f64) (param $2 i32) (param $3 i64) (param $4 anyref) (param $5 nullref) (result anyref) + (unreachable) + ) + (func $17 (result anyref) + (unreachable) + ) + (func $18 (param $0 f32) (param $1 v128) (param $2 f32) (param $3 funcref) (param $4 f64) (param $5 funcref) (param $6 anyref) (param $7 anyref) (result f32) + (f32.const 1) + ) + (func $19 (param $0 i32) (result anyref nullref nullref f32) + (tuple.make + (ref.null) + (ref.null) + (ref.null) + (f32.const 0) + ) + ) + (func $20 (param $0 f32) (param $1 i64) (param $2 funcref) (param $3 f64) (param $4 f64) (param $5 funcref) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $21 (param $0 i64) (param $1 funcref) (result anyref anyref i32) + (unreachable) + ) + (func $22 (param $0 nullref) (result anyref) + (unreachable) + ) + (func $23 (param $0 f32) (param $1 funcref) (result v128 i64) + (tuple.make + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + (i64.const 0) + ) + ) + (func $24 (param $0 nullref) (param $1 f64) (param $2 nullref) (result i64) + (i64.const 1) + ) + (func $25 (param $0 i64) (param $1 v128) (param $2 funcref) (param $3 f64) (param $4 f32) (param $5 v128) (result i32) + (i32.const 0) + ) + (func $26 (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $27 (param $0 i64) (param $1 i64) (param $2 i32) + (unreachable) + ) + (func $28 (param $0 nullref) (param $1 i64) (result f32) + (f32.const 1) + ) + (func $29 (param $0 i64) (result f32) + (f32.const 1) + ) + (func $30 (result f64 funcref anyref nullref nullref) + (unreachable) + ) + (func $31 (result f32) + (f32.const 1) + ) + (func $32 (param $0 i32) (param $1 i32) (param $2 funcref) (result f32 funcref v128 i32 f32) + (unreachable) + ) + (func $33 (param $0 nullref) (param $1 f64) (param $2 funcref) (param $3 nullref) (result f64 anyref f32 v128 v128 i32) + (unreachable) + ) + (func $34 (param $0 anyref) (param $1 f64) (result i64) + (i64.const 1) + ) + (func $35 (param $0 anyref) (param $1 f32) (result anyref anyref nullref anyref nullref) + (unreachable) + ) + (func $36 (result f64) + (f64.const 1) + ) + (func $37 (param $0 v128) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 f32) (result f32) + (f32.const 1) + ) + (func $38 (result anyref) + (unreachable) + ) + (func $39 (param $0 i64) (result anyref) + (unreachable) + ) + (func $40 (param $0 anyref) (param $1 nullref) (result funcref) + (ref.null) + ) + (func $41 (param $0 v128) (param $1 f32) (result funcref i32 f32 f32 v128) + (unreachable) + ) + (func $42 (param $0 nullref) (result v128 i64 funcref anyref nullref) + (unreachable) + ) + (func $43 (result v128 f32 v128 funcref i64) + (unreachable) + ) + (func $44 (param $0 nullref) (param $1 i32) (param $2 funcref) (param $3 v128) (result f64 f64 v128 i64 i64 i64) + (tuple.make + (f64.const 0) + (f64.const 0) + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + (i64.const 0) + (i64.const 0) + (i64.const 0) + ) + ) + (func $45 (result anyref) + (unreachable) + ) + (func $46 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i64) (param $4 f32) (param $5 f64) (param $6 nullref) + (nop) + ) + (func $47 (param $0 funcref) (param $1 i64) (param $2 anyref) (param $3 funcref) (result f32) + (f32.const 1) + ) + (func $48 (result funcref) + (unreachable) + ) + (func $49 (param $0 i64) (param $1 f32) (param $2 i32) (param $3 v128) + (nop) + ) + (func $50 (param $0 i64) + (nop) + ) + (func $51 (param $0 f64) (param $1 nullref) (param $2 anyref) (param $3 nullref) (result i32) + (i32.const 0) + ) + (func $52 (param $0 funcref) (param $1 nullref) (param $2 anyref) (param $3 i64) (result i64) + (i64.const 1) + ) + (func $53 (param $0 v128) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $54 (param $0 f64) (param $1 v128) (param $2 f32) (result nullref) + (ref.null) + ) + (func $55 (param $0 v128) (param $1 nullref) (param $2 f32) (result f64) + (f64.const 1) + ) + (func $56 (param $0 v128) (param $1 anyref) (param $2 f32) (result i64) + (i64.const 1) + ) + (func $57 (param $0 nullref) (param $1 v128) (param $2 i64) (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (func $58 (result i32 f64) + (tuple.make + (i32.const 0) + (f64.const 0) + ) + ) + (func $59 (param $0 f32) (result anyref) + (ref.null) + ) + (func $60 (param $0 i64) (param $1 nullref) (result f32) + (f32.const 1) + ) + (func $61 (param $0 i32) (param $1 funcref) (param $2 i32) (param $3 i32) (param $4 f64) (param $5 funcref) (result i32) + (i32.const 0) + ) + (func $62 (param $0 v128) (param $1 nullref) (result i32) + (i32.const 0) + ) + (func $63 (param $0 funcref) (param $1 f64) (param $2 v128) (param $3 f32) (param $4 funcref) (param $5 anyref) (result anyref) + (global.get $global$2) + ) + (func $64 (param $0 i64) (param $1 anyref) (param $2 nullref) (result nullref) + (ref.null) + ) + (func $65 (result funcref) + (unreachable) + ) + (func $66 (param $0 f32) (result anyref funcref) + (tuple.make + (ref.null) + (ref.func $18) + ) + ) + (func $67 (param $0 f32) (result i64 i32 f64 funcref f32 i32) + (tuple.make + (i64.const 524288) + (i32.const 0) + (f64.const 1) + (block $label$1 (result funcref) + (ref.null) + ) + (f32.const 1) + (i32.const -57) + ) + ) + (func $68 (result f32 anyref) + (unreachable) + ) + (func $69 (param $0 anyref) (result v128 anyref i64) + (local $1 i64) + (local $2 i64) + (local $3 i64) + (local $4 i64) + (local $5 i64) + (local $6 i64) + (local $7 i64) + (local $8 i64) + (local $9 i64) + (local $10 i64) + (local $11 i64) + (local $12 i64) + (local $13 i64) + (local $14 i64) + (local $15 i64) + (local $16 i64) + (local $17 i64) + (local $18 i64) + (local $19 i64) + (local $20 i64) + (local $21 i64) + (local $22 i64) + (local $23 i64) + (local $24 i64) + (local $25 i64) + (local $26 i64) + (local $27 v128) + (local $28 v128) + (local $29 v128) + (local $30 v128) + (local $31 v128) + (local $32 v128) + (local $33 v128) + (local $34 v128) + (local $35 v128) + (local $36 v128) + (local $37 v128) + (local $38 v128) + (local $39 v128) + (local $40 v128) + (local $41 v128) + (local $42 v128) + (local $43 v128) + (local $44 v128) + (local $45 v128) + (local $46 v128) + (local $47 v128) + (local $48 v128) + (local $49 v128) + (local $50 v128) + (local $51 v128) + (local $52 v128) + (local $53 v128) + (local $54 v128) + (local $55 v128) + (local $56 v128) + (local $57 v128) + (local $58 v128) + (local $59 v128) + (local $60 v128) + (local $61 v128) + (local $62 v128) + (local $63 v128) + (local $64 v128) + (local $65 v128) + (local $66 v128) + (local $67 v128) + (local $68 v128) + (local $69 v128) + (local $70 v128) + (local $71 v128) + (local $72 v128) + (local $73 v128) + (local $74 v128) + (local $75 v128) + (local $76 v128) + (local $77 v128) + (local $78 v128) + (local $79 v128) + (local $80 v128) + (local $81 v128) + (local $82 v128) + (local $83 v128) + (local $84 v128) + (local $85 v128) + (local $86 v128) + (local $87 v128) + (local $88 v128) + (local $89 anyref) + (local $90 anyref) + (local $91 anyref) + (local $92 anyref) + (local $93 anyref) + (local $94 anyref) + (local $95 anyref) + (local $96 anyref) + (local $97 anyref) + (local $98 anyref) + (local $99 anyref) + (local $100 anyref) + (local $101 anyref) + (local $102 anyref) + (local $103 anyref) + (local $104 anyref) + (local $105 anyref) + (local $106 anyref) + (local $107 anyref) + (local $108 anyref) + (local $109 anyref) + (local $110 anyref) + (local $111 anyref) + (local $112 anyref) + (local $113 anyref) + (local $114 anyref) + (local $115 anyref) + (local $116 anyref) + (local $117 anyref) + (local $118 anyref) + (local $119 anyref) + (local $120 anyref) + (local $121 anyref) + (local $122 anyref) + (local $123 anyref) + (local $124 anyref) + (local $125 anyref) + (local $126 anyref) + (local $127 anyref) + (local $128 anyref) + (local $129 anyref) + (local $130 anyref) + (local $131 anyref) + (local $132 anyref) + (local $133 anyref) + (local $134 anyref) + (local $135 anyref) + (local $136 anyref) + (local $137 anyref) + (local $138 anyref) + (local $139 anyref) + (local $140 anyref) + (local $141 anyref) + (local $142 anyref) + (local $143 anyref) + (local $144 anyref) + (local $145 anyref) + (local $146 anyref) + (local $147 anyref) + (local $148 anyref) + (local $149 anyref) + (local $150 anyref) + (local $151 anyref) + (local $152 anyref) + (local $153 anyref) + (local $154 anyref) + (local $155 anyref) + (local $156 anyref) + (local $157 anyref) + (local $158 anyref) + (local $159 anyref) + (local $160 anyref) + (local $161 anyref) + (local $162 anyref) + (local $163 (v128 anyref i64)) + (local $164 anyref) + (local $165 v128) + (tuple.make + (block $label$1 (result v128) + (drop + (block $label$2 (result anyref) + (local.set $44 + (block $label$3 (result v128) + (drop + (block $label$4 (result anyref) + (drop + (block $label$5 (result v128) + (drop + (block $label$6 (result anyref) + (drop + (block $label$7 (result v128) + (drop + (block $label$8 (result anyref) + (drop + (block $label$9 (result v128) + (drop + (block $label$10 (result anyref) + (drop + (block $label$11 (result v128) + (drop + (block $label$12 (result anyref) + (drop + (block $label$13 (result anyref) + (drop + (block $label$14 (result v128) + (drop + (block $label$15 (result anyref) + (drop + (block $label$16 (result v128) + (drop + (block $label$17 (result anyref) + (drop + (block $label$18 (result v128) + (drop + (block $label$19 (result anyref) + (drop + (block $label$20 (result anyref) + (drop + (block $label$21 (result v128) + (drop + (block $label$22 (result anyref) + (drop + (block $label$23 (result v128) + (drop + (block $label$24 (result anyref) + (local.set $163 + (block $label$25 (result v128 anyref i64) + (tuple.make + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + (ref.null) + (i64.const 0) + ) + ) + ) + (drop + (block (result v128) + (local.set $165 + (tuple.extract 0 + (local.get $163) + ) + ) + (drop + (block (result anyref) + (local.set $164 + (tuple.extract 1 + (local.get $163) + ) + ) + (drop + (tuple.extract 2 + (local.get $163) + ) + ) + (local.get $164) + ) + ) + (local.get $165) + ) + ) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (nop) + (local.get $109) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $110) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $111) + ) + ) + (ref.null) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $112) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (ref.null) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (block $label$26 (result anyref) + (block $label$27 (result anyref) + (local.get $0) + ) + ) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + (local.get $0) + ) + ) + (block $label$28 (result v128) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + ) + ) + (local.get $0) + ) + ) + (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) + ) + (local.get $0) + (i64.const 1) + ) + ) + (func $70 (param $0 i32) (param $1 v128) (param $2 v128) (param $3 i32) (param $4 i64) (result f32) + (f32.const 1) + ) + (func $71 (param $0 f32) (param $1 f64) (param $2 anyref) (param $3 anyref) (result anyref) + (unreachable) + ) + (func $72 (result anyref) + (local $0 anyref) + (local.get $0) + ) + (func $73 (param $0 funcref) (param $1 v128) (param $2 f32) (param $3 f64) + (nop) + ) + (func $74 (result anyref) + (ref.null) + ) + (func $75 (param $0 f32) (param $1 v128) (param $2 i64) (param $3 f64) (param $4 f32) (result f64) + (f64.const 1) + ) + (func $76 (param $0 f32) (result f32) + (f32.const 1) + ) + (func $77 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i32) + (i32.const 0) + ) + (func $78 (param $0 nullref) (param $1 i32) (param $2 i32) (result f32) + (f32.const 1) + ) + (func $79 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i32) (param $4 i32) (param $5 f32) (param $6 f64) (param $7 nullref) + (nop) + ) +) From f3854415e2257b9fe1e1f410817a10a4e2b41d84 Mon Sep 17 00:00:00 2001 From: dcode Date: Thu, 23 Apr 2020 01:55:52 +0200 Subject: [PATCH 4/7] add comment to test --- test/passes/issue2788.wast | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/passes/issue2788.wast b/test/passes/issue2788.wast index a5fabfe5145..37ee727f1bc 100644 --- a/test/passes/issue2788.wast +++ b/test/passes/issue2788.wast @@ -1,3 +1,5 @@ +;; Regression test for 'std::move'-related issues in ExpressionRunner during precompute-propagate +;; see: https://github.com/WebAssembly/binaryen/issues/2788 (module (type $none_=>_anyref (func (result anyref))) (type $none_=>_funcref (func (result funcref))) From 8e12b84949e71d60b0f9d24df5d7a1b47c69af1e Mon Sep 17 00:00:00 2001 From: dcode Date: Thu, 23 Apr 2020 02:04:06 +0200 Subject: [PATCH 5/7] hello world From 70f0b25a4b6dc2e490a1bf2ebac05bc82cade135 Mon Sep 17 00:00:00 2001 From: dcode Date: Thu, 23 Apr 2020 03:12:34 +0200 Subject: [PATCH 6/7] reduce --- test/passes/issue2788.txt | 545 +---------------------------------- test/passes/issue2788.wast | 565 ++----------------------------------- 2 files changed, 36 insertions(+), 1074 deletions(-) diff --git a/test/passes/issue2788.txt b/test/passes/issue2788.txt index a1e272db8c1..cb34ba7c8ac 100644 --- a/test/passes/issue2788.txt +++ b/test/passes/issue2788.txt @@ -1,492 +1,20 @@ (module - (type $none_=>_anyref (func (result anyref))) - (type $none_=>_funcref (func (result funcref))) - (type $none_=>_none (func)) - (type $i32_f32_funcref_i32_i32_f32_f64_nullref_=>_none (func (param i32 f32 funcref i32 i32 f32 f64 nullref))) - (type $i32_f32_funcref_i64_f32_f64_nullref_=>_none (func (param i32 f32 funcref i64 f32 f64 nullref))) - (type $i64_=>_none (func (param i64))) - (type $i64_i64_i32_=>_none (func (param i64 i64 i32))) - (type $i64_f32_i32_v128_=>_none (func (param i64 f32 i32 v128))) - (type $funcref_v128_f32_f64_=>_none (func (param funcref v128 f32 f64))) - (type $none_=>_i32 (func (result i32))) - (type $i32_v128_anyref_=>_i32 (func (param i32 v128 anyref) (result i32))) - (type $i32_funcref_i32_i32_f64_funcref_=>_i32 (func (param i32 funcref i32 i32 f64 funcref) (result i32))) - (type $i64_v128_funcref_f64_f32_v128_=>_i32 (func (param i64 v128 funcref f64 f32 v128) (result i32))) - (type $f64_v128_=>_i32 (func (param f64 v128) (result i32))) - (type $f64_nullref_anyref_nullref_=>_i32 (func (param f64 nullref anyref nullref) (result i32))) - (type $v128_nullref_=>_i32 (func (param v128 nullref) (result i32))) - (type $anyref_nullref_f64_nullref_v128_anyref_=>_i32 (func (param anyref nullref f64 nullref v128 anyref) (result i32))) - (type $none_=>_i32_f64 (func (result i32 f64))) - (type $none_=>_i64 (func (result i64))) - (type $v128_anyref_f32_=>_i64 (func (param v128 anyref f32) (result i64))) - (type $funcref_nullref_anyref_i64_=>_i64 (func (param funcref nullref anyref i64) (result i64))) - (type $anyref_f64_=>_i64 (func (param anyref f64) (result i64))) - (type $anyref_nullref_f64_nullref_v128_anyref_=>_i64 (func (param anyref nullref f64 nullref v128 anyref) (result i64))) - (type $nullref_f64_nullref_=>_i64 (func (param nullref f64 nullref) (result i64))) - (type $f32_=>_i64_i32_f64_funcref_f32_i32 (func (param f32) (result i64 i32 f64 funcref f32 i32))) - (type $none_=>_i64_i64_v128_anyref_f32_i32 (func (result i64 i64 v128 anyref f32 i32))) - (type $none_=>_f32 (func (result f32))) - (type $i32_v128_v128_i32_i64_=>_f32 (func (param i32 v128 v128 i32 i64) (result f32))) - (type $i32_v128_anyref_i32_=>_f32 (func (param i32 v128 anyref i32) (result f32))) - (type $i64_=>_f32 (func (param i64) (result f32))) - (type $i64_nullref_=>_f32 (func (param i64 nullref) (result f32))) - (type $f32_=>_f32 (func (param f32) (result f32))) - (type $f32_v128_f32_funcref_f64_funcref_anyref_anyref_=>_f32 (func (param f32 v128 f32 funcref f64 funcref anyref anyref) (result f32))) - (type $v128_nullref_f64_nullref_f32_=>_f32 (func (param v128 nullref f64 nullref f32) (result f32))) - (type $funcref_i64_anyref_funcref_=>_f32 (func (param funcref i64 anyref funcref) (result f32))) - (type $nullref_i32_i32_=>_f32 (func (param nullref i32 i32) (result f32))) - (type $nullref_i64_=>_f32 (func (param nullref i64) (result f32))) - (type $i32_i32_funcref_=>_f32_funcref_v128_i32_f32 (func (param i32 i32 funcref) (result f32 funcref v128 i32 f32))) - (type $none_=>_f32_anyref (func (result f32 anyref))) - (type $none_=>_f64 (func (result f64))) - (type $f32_v128_i64_f64_f32_=>_f64 (func (param f32 v128 i64 f64 f32) (result f64))) - (type $v128_nullref_f32_=>_f64 (func (param v128 nullref f32) (result f64))) - (type $nullref_i32_funcref_v128_=>_f64_f64_v128_i64_i64_i64 (func (param nullref i32 funcref v128) (result f64 f64 v128 i64 i64 i64))) - (type $none_=>_f64_funcref_anyref_nullref_nullref (func (result f64 funcref anyref nullref nullref))) - (type $nullref_f64_funcref_nullref_=>_f64_anyref_f32_v128_v128_i32 (func (param nullref f64 funcref nullref) (result f64 anyref f32 v128 v128 i32))) - (type $none_=>_v128 (func (result v128))) - (type $i32_=>_v128 (func (param i32) (result v128))) - (type $f32_i64_funcref_f64_f64_funcref_=>_v128 (func (param f32 i64 funcref f64 f64 funcref) (result v128))) - (type $v128_=>_v128 (func (param v128) (result v128))) - (type $nullref_v128_i64_=>_v128 (func (param nullref v128 i64) (result v128))) - (type $f32_funcref_=>_v128_i64 (func (param f32 funcref) (result v128 i64))) - (type $nullref_=>_v128_i64_funcref_anyref_nullref (func (param nullref) (result v128 i64 funcref anyref nullref))) - (type $none_=>_v128_f32_v128_funcref_i64 (func (result v128 f32 v128 funcref i64))) (type $anyref_=>_v128_anyref_i64 (func (param anyref) (result v128 anyref i64))) (type $none_=>_v128_nullref_i64 (func (result v128 nullref i64))) - (type $anyref_nullref_=>_funcref (func (param anyref nullref) (result funcref))) - (type $v128_f32_=>_funcref_i32_f32_f32_v128 (func (param v128 f32) (result funcref i32 f32 f32 v128))) - (type $i32_=>_anyref (func (param i32) (result anyref))) - (type $i64_=>_anyref (func (param i64) (result anyref))) - (type $f32_=>_anyref (func (param f32) (result anyref))) - (type $f32_f64_anyref_anyref_=>_anyref (func (param f32 f64 anyref anyref) (result anyref))) - (type $v128_f64_i32_i64_anyref_nullref_=>_anyref (func (param v128 f64 i32 i64 anyref nullref) (result anyref))) - (type $funcref_f64_v128_f32_funcref_anyref_=>_anyref (func (param funcref f64 v128 f32 funcref anyref) (result anyref))) - (type $nullref_=>_anyref (func (param nullref) (result anyref))) - (type $f32_=>_anyref_funcref (func (param f32) (result anyref funcref))) - (type $i64_funcref_=>_anyref_anyref_i32 (func (param i64 funcref) (result anyref anyref i32))) - (type $anyref_f32_=>_anyref_anyref_nullref_anyref_nullref (func (param anyref f32) (result anyref anyref nullref anyref nullref))) - (type $i32_=>_anyref_nullref_nullref_f32 (func (param i32) (result anyref nullref nullref f32))) - (type $none_=>_nullref (func (result nullref))) - (type $i64_=>_nullref (func (param i64) (result nullref))) - (type $i64_anyref_nullref_=>_nullref (func (param i64 anyref nullref) (result nullref))) - (type $f64_v128_f32_=>_nullref (func (param f64 v128 f32) (result nullref))) - (type $v128_funcref_funcref_f32_=>_nullref (func (param v128 funcref funcref f32) (result nullref))) - (type $nullref_f32_f64_i64_v128_v128_=>_nullref_f32_funcref (func (param nullref f32 f64 i64 v128 v128) (result nullref f32 funcref))) - (memory $0 (shared 1 1)) - (data (i32.const 0) "") - (table $0 108 funcref) - (global $global$0 (mut i32) (i32.const -1883585)) - (global $global$1 (mut nullref) (ref.null)) - (global $global$2 (mut anyref) (ref.null)) - (global $global$3 (mut nullref) (ref.null)) - (global $global$4 (mut i32) (i32.const 10)) - (func $0 (result i32) - (i32.const 0) - ) - (func $1 (param $0 i64) (result nullref) - (ref.null) - ) - (func $2 - (nop) - ) - (func $3 (param $0 f64) (param $1 v128) (result i32) - (i32.const 0) - ) - (func $4 (param $0 i32) (param $1 v128) (param $2 anyref) (result i32) - (i32.const 0) - ) - (func $5 (param $0 i32) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $6 (result funcref) - (ref.null) - ) - (func $7 (result i64) - (i64.const 1) - ) - (func $8 (param $0 nullref) (param $1 f32) (param $2 f64) (param $3 i64) (param $4 v128) (param $5 v128) (result nullref f32 funcref) - (unreachable) - ) - (func $9 (param $0 v128) (param $1 funcref) (param $2 funcref) (param $3 f32) (result nullref) - (ref.null) - ) - (func $10 (result i64 i64 v128 anyref f32 i32) - (unreachable) - ) - (func $11 (result nullref) - (ref.null) - ) - (func $12 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i64) - (i64.const 1) - ) - (func $13 (param $0 i32) (result anyref) - (unreachable) - ) - (func $14 (result anyref) - (ref.null) - ) - (func $15 (param $0 i32) (param $1 v128) (param $2 anyref) (param $3 i32) (result f32) - (f32.const 1) - ) - (func $16 (param $0 v128) (param $1 f64) (param $2 i32) (param $3 i64) (param $4 anyref) (param $5 nullref) (result anyref) - (unreachable) - ) - (func $17 (result anyref) - (unreachable) - ) - (func $18 (param $0 f32) (param $1 v128) (param $2 f32) (param $3 funcref) (param $4 f64) (param $5 funcref) (param $6 anyref) (param $7 anyref) (result f32) - (f32.const 1) - ) - (func $19 (param $0 i32) (result anyref nullref nullref f32) - (tuple.make - (ref.null) - (ref.null) - (ref.null) - (f32.const 0) - ) - ) - (func $20 (param $0 f32) (param $1 i64) (param $2 funcref) (param $3 f64) (param $4 f64) (param $5 funcref) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $21 (param $0 i64) (param $1 funcref) (result anyref anyref i32) - (unreachable) - ) - (func $22 (param $0 nullref) (result anyref) - (unreachable) - ) - (func $23 (param $0 f32) (param $1 funcref) (result v128 i64) - (tuple.make - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - (i64.const 0) - ) - ) - (func $24 (param $0 nullref) (param $1 f64) (param $2 nullref) (result i64) - (i64.const 1) - ) - (func $25 (param $0 i64) (param $1 v128) (param $2 funcref) (param $3 f64) (param $4 f32) (param $5 v128) (result i32) - (i32.const 0) - ) - (func $26 (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $27 (param $0 i64) (param $1 i64) (param $2 i32) - (unreachable) - ) - (func $28 (param $0 nullref) (param $1 i64) (result f32) - (f32.const 1) - ) - (func $29 (param $0 i64) (result f32) - (f32.const 1) - ) - (func $30 (result f64 funcref anyref nullref nullref) - (unreachable) - ) - (func $31 (result f32) - (f32.const 1) - ) - (func $32 (param $0 i32) (param $1 i32) (param $2 funcref) (result f32 funcref v128 i32 f32) - (unreachable) - ) - (func $33 (param $0 nullref) (param $1 f64) (param $2 funcref) (param $3 nullref) (result f64 anyref f32 v128 v128 i32) - (unreachable) - ) - (func $34 (param $0 anyref) (param $1 f64) (result i64) - (i64.const 1) - ) - (func $35 (param $0 anyref) (param $1 f32) (result anyref anyref nullref anyref nullref) - (unreachable) - ) - (func $36 (result f64) - (f64.const 1) - ) - (func $37 (param $0 v128) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 f32) (result f32) - (f32.const 1) - ) - (func $38 (result anyref) - (unreachable) - ) - (func $39 (param $0 i64) (result anyref) - (unreachable) - ) - (func $40 (param $0 anyref) (param $1 nullref) (result funcref) - (ref.null) - ) - (func $41 (param $0 v128) (param $1 f32) (result funcref i32 f32 f32 v128) - (unreachable) - ) - (func $42 (param $0 nullref) (result v128 i64 funcref anyref nullref) - (unreachable) - ) - (func $43 (result v128 f32 v128 funcref i64) - (unreachable) - ) - (func $44 (param $0 nullref) (param $1 i32) (param $2 funcref) (param $3 v128) (result f64 f64 v128 i64 i64 i64) - (tuple.make - (f64.const 0) - (f64.const 0) - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - (i64.const 0) - (i64.const 0) - (i64.const 0) - ) - ) - (func $45 (result anyref) - (unreachable) - ) - (func $46 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i64) (param $4 f32) (param $5 f64) (param $6 nullref) - (nop) - ) - (func $47 (param $0 funcref) (param $1 i64) (param $2 anyref) (param $3 funcref) (result f32) - (f32.const 1) - ) - (func $48 (result funcref) - (unreachable) - ) - (func $49 (param $0 i64) (param $1 f32) (param $2 i32) (param $3 v128) - (nop) - ) - (func $50 (param $0 i64) - (nop) - ) - (func $51 (param $0 f64) (param $1 nullref) (param $2 anyref) (param $3 nullref) (result i32) - (i32.const 0) - ) - (func $52 (param $0 funcref) (param $1 nullref) (param $2 anyref) (param $3 i64) (result i64) - (i64.const 1) - ) - (func $53 (param $0 v128) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $54 (param $0 f64) (param $1 v128) (param $2 f32) (result nullref) - (ref.null) - ) - (func $55 (param $0 v128) (param $1 nullref) (param $2 f32) (result f64) - (f64.const 1) - ) - (func $56 (param $0 v128) (param $1 anyref) (param $2 f32) (result i64) - (i64.const 1) - ) - (func $57 (param $0 nullref) (param $1 v128) (param $2 i64) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $58 (result i32 f64) - (tuple.make - (i32.const 0) - (f64.const 0) - ) - ) - (func $59 (param $0 f32) (result anyref) - (ref.null) - ) - (func $60 (param $0 i64) (param $1 nullref) (result f32) - (f32.const 1) - ) - (func $61 (param $0 i32) (param $1 funcref) (param $2 i32) (param $3 i32) (param $4 f64) (param $5 funcref) (result i32) - (i32.const 0) - ) - (func $62 (param $0 v128) (param $1 nullref) (result i32) - (i32.const 0) - ) - (func $63 (param $0 funcref) (param $1 f64) (param $2 v128) (param $3 f32) (param $4 funcref) (param $5 anyref) (result anyref) - (global.get $global$2) - ) - (func $64 (param $0 i64) (param $1 anyref) (param $2 nullref) (result nullref) - (ref.null) - ) - (func $65 (result funcref) - (unreachable) - ) - (func $66 (param $0 f32) (result anyref funcref) - (tuple.make - (ref.null) - (ref.func $18) - ) - ) - (func $67 (param $0 f32) (result i64 i32 f64 funcref f32 i32) - (tuple.make - (i64.const 524288) - (i32.const 0) - (f64.const 1) - (ref.null) - (f32.const 1) - (i32.const -57) - ) - ) - (func $68 (result f32 anyref) - (unreachable) - ) - (func $69 (param $0 anyref) (result v128 anyref i64) - (local $1 i64) - (local $2 i64) - (local $3 i64) - (local $4 i64) - (local $5 i64) - (local $6 i64) - (local $7 i64) - (local $8 i64) - (local $9 i64) - (local $10 i64) - (local $11 i64) - (local $12 i64) - (local $13 i64) - (local $14 i64) - (local $15 i64) - (local $16 i64) - (local $17 i64) - (local $18 i64) - (local $19 i64) - (local $20 i64) - (local $21 i64) - (local $22 i64) - (local $23 i64) - (local $24 i64) - (local $25 i64) - (local $26 i64) - (local $27 v128) - (local $28 v128) - (local $29 v128) - (local $30 v128) - (local $31 v128) - (local $32 v128) - (local $33 v128) - (local $34 v128) - (local $35 v128) - (local $36 v128) - (local $37 v128) - (local $38 v128) - (local $39 v128) - (local $40 v128) - (local $41 v128) - (local $42 v128) - (local $43 v128) - (local $44 v128) - (local $45 v128) - (local $46 v128) - (local $47 v128) - (local $48 v128) - (local $49 v128) - (local $50 v128) - (local $51 v128) - (local $52 v128) - (local $53 v128) - (local $54 v128) - (local $55 v128) - (local $56 v128) - (local $57 v128) - (local $58 v128) - (local $59 v128) - (local $60 v128) - (local $61 v128) - (local $62 v128) - (local $63 v128) - (local $64 v128) - (local $65 v128) - (local $66 v128) - (local $67 v128) - (local $68 v128) - (local $69 v128) - (local $70 v128) - (local $71 v128) - (local $72 v128) - (local $73 v128) - (local $74 v128) - (local $75 v128) - (local $76 v128) - (local $77 v128) - (local $78 v128) - (local $79 v128) - (local $80 v128) - (local $81 v128) - (local $82 v128) - (local $83 v128) - (local $84 v128) - (local $85 v128) - (local $86 v128) - (local $87 v128) - (local $88 v128) - (local $89 anyref) - (local $90 anyref) - (local $91 anyref) - (local $92 anyref) - (local $93 anyref) - (local $94 anyref) - (local $95 anyref) - (local $96 anyref) - (local $97 anyref) - (local $98 anyref) - (local $99 anyref) - (local $100 anyref) - (local $101 anyref) - (local $102 anyref) - (local $103 anyref) - (local $104 anyref) - (local $105 anyref) - (local $106 anyref) - (local $107 anyref) - (local $108 anyref) - (local $109 anyref) - (local $110 anyref) - (local $111 anyref) - (local $112 anyref) - (local $113 anyref) - (local $114 anyref) - (local $115 anyref) - (local $116 anyref) - (local $117 anyref) - (local $118 anyref) - (local $119 anyref) - (local $120 anyref) - (local $121 anyref) - (local $122 anyref) - (local $123 anyref) - (local $124 anyref) - (local $125 anyref) - (local $126 anyref) - (local $127 anyref) - (local $128 anyref) - (local $129 anyref) - (local $130 anyref) - (local $131 anyref) - (local $132 anyref) - (local $133 anyref) - (local $134 anyref) - (local $135 anyref) - (local $136 anyref) - (local $137 anyref) - (local $138 anyref) - (local $139 anyref) - (local $140 anyref) - (local $141 anyref) - (local $142 anyref) - (local $143 anyref) - (local $144 anyref) - (local $145 anyref) - (local $146 anyref) - (local $147 anyref) - (local $148 anyref) - (local $149 anyref) - (local $150 anyref) - (local $151 anyref) - (local $152 anyref) - (local $153 anyref) - (local $154 anyref) - (local $155 anyref) - (local $156 anyref) - (local $157 anyref) - (local $158 anyref) - (local $159 anyref) - (local $160 anyref) - (local $161 anyref) - (local $162 anyref) - (local $163 (v128 anyref i64)) - (local $164 anyref) - (local $165 v128) + (func $test (param $0 anyref) (result v128 anyref i64) + (local $1 v128) + (local $2 anyref) + (local $3 anyref) + (local $4 anyref) + (local $5 anyref) + (local $6 (v128 anyref i64)) + (local $7 anyref) + (local $8 v128) (tuple.make (block $label$1 (result v128) (drop (block $label$2 (result anyref) - (local.set $44 + (local.set $1 (block $label$3 (result v128) (drop (block $label$4 (result anyref) @@ -530,7 +58,7 @@ (block $label$23 (result v128) (drop (block $label$24 (result nullref) - (local.set $163 + (local.set $6 (block $label$25 (result v128 nullref i64) (tuple.make (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) @@ -541,34 +69,22 @@ ) (drop (block $block (result v128) - (local.set $165 + (local.set $8 (tuple.extract 0 - (local.get $163) + (local.get $6) ) ) (drop (block $block0 (result nullref) - (local.set $164 + (local.set $7 (ref.null) ) - (nop) (ref.null) ) ) - (local.get $165) + (local.get $8) ) ) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) (ref.null) ) ) @@ -650,35 +166,4 @@ (i64.const 1) ) ) - (func $70 (param $0 i32) (param $1 v128) (param $2 v128) (param $3 i32) (param $4 i64) (result f32) - (f32.const 1) - ) - (func $71 (param $0 f32) (param $1 f64) (param $2 anyref) (param $3 anyref) (result anyref) - (unreachable) - ) - (func $72 (result anyref) - (local $0 anyref) - (ref.null) - ) - (func $73 (param $0 funcref) (param $1 v128) (param $2 f32) (param $3 f64) - (nop) - ) - (func $74 (result anyref) - (ref.null) - ) - (func $75 (param $0 f32) (param $1 v128) (param $2 i64) (param $3 f64) (param $4 f32) (result f64) - (f64.const 1) - ) - (func $76 (param $0 f32) (result f32) - (f32.const 1) - ) - (func $77 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i32) - (i32.const 0) - ) - (func $78 (param $0 nullref) (param $1 i32) (param $2 i32) (result f32) - (f32.const 1) - ) - (func $79 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i32) (param $4 i32) (param $5 f32) (param $6 f64) (param $7 nullref) - (nop) - ) ) diff --git a/test/passes/issue2788.wast b/test/passes/issue2788.wast index 37ee727f1bc..e3f54abc533 100644 --- a/test/passes/issue2788.wast +++ b/test/passes/issue2788.wast @@ -1,496 +1,20 @@ ;; Regression test for 'std::move'-related issues in ExpressionRunner during precompute-propagate ;; see: https://github.com/WebAssembly/binaryen/issues/2788 (module - (type $none_=>_anyref (func (result anyref))) - (type $none_=>_funcref (func (result funcref))) - (type $none_=>_none (func)) - (type $i32_f32_funcref_i32_i32_f32_f64_nullref_=>_none (func (param i32 f32 funcref i32 i32 f32 f64 nullref))) - (type $i32_f32_funcref_i64_f32_f64_nullref_=>_none (func (param i32 f32 funcref i64 f32 f64 nullref))) - (type $i64_=>_none (func (param i64))) - (type $i64_i64_i32_=>_none (func (param i64 i64 i32))) - (type $i64_f32_i32_v128_=>_none (func (param i64 f32 i32 v128))) - (type $funcref_v128_f32_f64_=>_none (func (param funcref v128 f32 f64))) - (type $none_=>_i32 (func (result i32))) - (type $i32_v128_anyref_=>_i32 (func (param i32 v128 anyref) (result i32))) - (type $i32_funcref_i32_i32_f64_funcref_=>_i32 (func (param i32 funcref i32 i32 f64 funcref) (result i32))) - (type $i64_v128_funcref_f64_f32_v128_=>_i32 (func (param i64 v128 funcref f64 f32 v128) (result i32))) - (type $f64_v128_=>_i32 (func (param f64 v128) (result i32))) - (type $f64_nullref_anyref_nullref_=>_i32 (func (param f64 nullref anyref nullref) (result i32))) - (type $v128_nullref_=>_i32 (func (param v128 nullref) (result i32))) - (type $anyref_nullref_f64_nullref_v128_anyref_=>_i32 (func (param anyref nullref f64 nullref v128 anyref) (result i32))) - (type $none_=>_i32_f64 (func (result i32 f64))) - (type $none_=>_i64 (func (result i64))) - (type $v128_anyref_f32_=>_i64 (func (param v128 anyref f32) (result i64))) - (type $funcref_nullref_anyref_i64_=>_i64 (func (param funcref nullref anyref i64) (result i64))) - (type $anyref_f64_=>_i64 (func (param anyref f64) (result i64))) - (type $anyref_nullref_f64_nullref_v128_anyref_=>_i64 (func (param anyref nullref f64 nullref v128 anyref) (result i64))) - (type $nullref_f64_nullref_=>_i64 (func (param nullref f64 nullref) (result i64))) - (type $f32_=>_i64_i32_f64_funcref_f32_i32 (func (param f32) (result i64 i32 f64 funcref f32 i32))) - (type $none_=>_i64_i64_v128_anyref_f32_i32 (func (result i64 i64 v128 anyref f32 i32))) - (type $none_=>_f32 (func (result f32))) - (type $i32_v128_v128_i32_i64_=>_f32 (func (param i32 v128 v128 i32 i64) (result f32))) - (type $i32_v128_anyref_i32_=>_f32 (func (param i32 v128 anyref i32) (result f32))) - (type $i64_=>_f32 (func (param i64) (result f32))) - (type $i64_nullref_=>_f32 (func (param i64 nullref) (result f32))) - (type $f32_=>_f32 (func (param f32) (result f32))) - (type $f32_v128_f32_funcref_f64_funcref_anyref_anyref_=>_f32 (func (param f32 v128 f32 funcref f64 funcref anyref anyref) (result f32))) - (type $v128_nullref_f64_nullref_f32_=>_f32 (func (param v128 nullref f64 nullref f32) (result f32))) - (type $funcref_i64_anyref_funcref_=>_f32 (func (param funcref i64 anyref funcref) (result f32))) - (type $nullref_i32_i32_=>_f32 (func (param nullref i32 i32) (result f32))) - (type $nullref_i64_=>_f32 (func (param nullref i64) (result f32))) - (type $i32_i32_funcref_=>_f32_funcref_v128_i32_f32 (func (param i32 i32 funcref) (result f32 funcref v128 i32 f32))) - (type $none_=>_f32_anyref (func (result f32 anyref))) - (type $none_=>_f64 (func (result f64))) - (type $f32_v128_i64_f64_f32_=>_f64 (func (param f32 v128 i64 f64 f32) (result f64))) - (type $v128_nullref_f32_=>_f64 (func (param v128 nullref f32) (result f64))) - (type $nullref_i32_funcref_v128_=>_f64_f64_v128_i64_i64_i64 (func (param nullref i32 funcref v128) (result f64 f64 v128 i64 i64 i64))) - (type $none_=>_f64_funcref_anyref_nullref_nullref (func (result f64 funcref anyref nullref nullref))) - (type $nullref_f64_funcref_nullref_=>_f64_anyref_f32_v128_v128_i32 (func (param nullref f64 funcref nullref) (result f64 anyref f32 v128 v128 i32))) - (type $none_=>_v128 (func (result v128))) - (type $i32_=>_v128 (func (param i32) (result v128))) - (type $f32_i64_funcref_f64_f64_funcref_=>_v128 (func (param f32 i64 funcref f64 f64 funcref) (result v128))) - (type $v128_=>_v128 (func (param v128) (result v128))) - (type $nullref_v128_i64_=>_v128 (func (param nullref v128 i64) (result v128))) - (type $f32_funcref_=>_v128_i64 (func (param f32 funcref) (result v128 i64))) - (type $nullref_=>_v128_i64_funcref_anyref_nullref (func (param nullref) (result v128 i64 funcref anyref nullref))) - (type $none_=>_v128_f32_v128_funcref_i64 (func (result v128 f32 v128 funcref i64))) - (type $none_=>_v128_anyref_i64 (func (result v128 anyref i64))) - (type $anyref_=>_v128_anyref_i64 (func (param anyref) (result v128 anyref i64))) - (type $anyref_nullref_=>_funcref (func (param anyref nullref) (result funcref))) - (type $v128_f32_=>_funcref_i32_f32_f32_v128 (func (param v128 f32) (result funcref i32 f32 f32 v128))) - (type $i32_=>_anyref (func (param i32) (result anyref))) - (type $i64_=>_anyref (func (param i64) (result anyref))) - (type $f32_=>_anyref (func (param f32) (result anyref))) - (type $f32_f64_anyref_anyref_=>_anyref (func (param f32 f64 anyref anyref) (result anyref))) - (type $v128_f64_i32_i64_anyref_nullref_=>_anyref (func (param v128 f64 i32 i64 anyref nullref) (result anyref))) - (type $funcref_f64_v128_f32_funcref_anyref_=>_anyref (func (param funcref f64 v128 f32 funcref anyref) (result anyref))) - (type $nullref_=>_anyref (func (param nullref) (result anyref))) - (type $f32_=>_anyref_funcref (func (param f32) (result anyref funcref))) - (type $i64_funcref_=>_anyref_anyref_i32 (func (param i64 funcref) (result anyref anyref i32))) - (type $anyref_f32_=>_anyref_anyref_nullref_anyref_nullref (func (param anyref f32) (result anyref anyref nullref anyref nullref))) - (type $i32_=>_anyref_nullref_nullref_f32 (func (param i32) (result anyref nullref nullref f32))) - (type $none_=>_nullref (func (result nullref))) - (type $i64_=>_nullref (func (param i64) (result nullref))) - (type $i64_anyref_nullref_=>_nullref (func (param i64 anyref nullref) (result nullref))) - (type $f64_v128_f32_=>_nullref (func (param f64 v128 f32) (result nullref))) - (type $v128_funcref_funcref_f32_=>_nullref (func (param v128 funcref funcref f32) (result nullref))) - (type $nullref_f32_f64_i64_v128_v128_=>_nullref_f32_funcref (func (param nullref f32 f64 i64 v128 v128) (result nullref f32 funcref))) - (memory $0 (shared 1 1)) - (data (i32.const 0) "") - (table $0 108 funcref) - (global $global$0 (mut i32) (i32.const -1883585)) - (global $global$1 (mut nullref) (ref.null)) - (global $global$2 (mut anyref) (ref.null)) - (global $global$3 (mut nullref) (ref.null)) - (global $global$4 (mut i32) (i32.const 10)) - (func $0 (result i32) - (i32.const 0) - ) - (func $1 (param $0 i64) (result nullref) - (ref.null) - ) - (func $2 - (nop) - ) - (func $3 (param $0 f64) (param $1 v128) (result i32) - (i32.const 0) - ) - (func $4 (param $0 i32) (param $1 v128) (param $2 anyref) (result i32) - (i32.const 0) - ) - (func $5 (param $0 i32) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $6 (result funcref) - (ref.null) - ) - (func $7 (result i64) - (i64.const 1) - ) - (func $8 (param $0 nullref) (param $1 f32) (param $2 f64) (param $3 i64) (param $4 v128) (param $5 v128) (result nullref f32 funcref) - (unreachable) - ) - (func $9 (param $0 v128) (param $1 funcref) (param $2 funcref) (param $3 f32) (result nullref) - (ref.null) - ) - (func $10 (result i64 i64 v128 anyref f32 i32) - (unreachable) - ) - (func $11 (result nullref) - (ref.null) - ) - (func $12 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i64) - (i64.const 1) - ) - (func $13 (param $0 i32) (result anyref) - (unreachable) - ) - (func $14 (result anyref) - (ref.null) - ) - (func $15 (param $0 i32) (param $1 v128) (param $2 anyref) (param $3 i32) (result f32) - (f32.const 1) - ) - (func $16 (param $0 v128) (param $1 f64) (param $2 i32) (param $3 i64) (param $4 anyref) (param $5 nullref) (result anyref) - (unreachable) - ) - (func $17 (result anyref) - (unreachable) - ) - (func $18 (param $0 f32) (param $1 v128) (param $2 f32) (param $3 funcref) (param $4 f64) (param $5 funcref) (param $6 anyref) (param $7 anyref) (result f32) - (f32.const 1) - ) - (func $19 (param $0 i32) (result anyref nullref nullref f32) - (tuple.make - (ref.null) - (ref.null) - (ref.null) - (f32.const 0) - ) - ) - (func $20 (param $0 f32) (param $1 i64) (param $2 funcref) (param $3 f64) (param $4 f64) (param $5 funcref) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $21 (param $0 i64) (param $1 funcref) (result anyref anyref i32) - (unreachable) - ) - (func $22 (param $0 nullref) (result anyref) - (unreachable) - ) - (func $23 (param $0 f32) (param $1 funcref) (result v128 i64) - (tuple.make - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - (i64.const 0) - ) - ) - (func $24 (param $0 nullref) (param $1 f64) (param $2 nullref) (result i64) - (i64.const 1) - ) - (func $25 (param $0 i64) (param $1 v128) (param $2 funcref) (param $3 f64) (param $4 f32) (param $5 v128) (result i32) - (i32.const 0) - ) - (func $26 (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $27 (param $0 i64) (param $1 i64) (param $2 i32) - (unreachable) - ) - (func $28 (param $0 nullref) (param $1 i64) (result f32) - (f32.const 1) - ) - (func $29 (param $0 i64) (result f32) - (f32.const 1) - ) - (func $30 (result f64 funcref anyref nullref nullref) - (unreachable) - ) - (func $31 (result f32) - (f32.const 1) - ) - (func $32 (param $0 i32) (param $1 i32) (param $2 funcref) (result f32 funcref v128 i32 f32) - (unreachable) - ) - (func $33 (param $0 nullref) (param $1 f64) (param $2 funcref) (param $3 nullref) (result f64 anyref f32 v128 v128 i32) - (unreachable) - ) - (func $34 (param $0 anyref) (param $1 f64) (result i64) - (i64.const 1) - ) - (func $35 (param $0 anyref) (param $1 f32) (result anyref anyref nullref anyref nullref) - (unreachable) - ) - (func $36 (result f64) - (f64.const 1) - ) - (func $37 (param $0 v128) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 f32) (result f32) - (f32.const 1) - ) - (func $38 (result anyref) - (unreachable) - ) - (func $39 (param $0 i64) (result anyref) - (unreachable) - ) - (func $40 (param $0 anyref) (param $1 nullref) (result funcref) - (ref.null) - ) - (func $41 (param $0 v128) (param $1 f32) (result funcref i32 f32 f32 v128) - (unreachable) - ) - (func $42 (param $0 nullref) (result v128 i64 funcref anyref nullref) - (unreachable) - ) - (func $43 (result v128 f32 v128 funcref i64) - (unreachable) - ) - (func $44 (param $0 nullref) (param $1 i32) (param $2 funcref) (param $3 v128) (result f64 f64 v128 i64 i64 i64) - (tuple.make - (f64.const 0) - (f64.const 0) - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - (i64.const 0) - (i64.const 0) - (i64.const 0) - ) - ) - (func $45 (result anyref) - (unreachable) - ) - (func $46 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i64) (param $4 f32) (param $5 f64) (param $6 nullref) - (nop) - ) - (func $47 (param $0 funcref) (param $1 i64) (param $2 anyref) (param $3 funcref) (result f32) - (f32.const 1) - ) - (func $48 (result funcref) - (unreachable) - ) - (func $49 (param $0 i64) (param $1 f32) (param $2 i32) (param $3 v128) - (nop) - ) - (func $50 (param $0 i64) - (nop) - ) - (func $51 (param $0 f64) (param $1 nullref) (param $2 anyref) (param $3 nullref) (result i32) - (i32.const 0) - ) - (func $52 (param $0 funcref) (param $1 nullref) (param $2 anyref) (param $3 i64) (result i64) - (i64.const 1) - ) - (func $53 (param $0 v128) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $54 (param $0 f64) (param $1 v128) (param $2 f32) (result nullref) - (ref.null) - ) - (func $55 (param $0 v128) (param $1 nullref) (param $2 f32) (result f64) - (f64.const 1) - ) - (func $56 (param $0 v128) (param $1 anyref) (param $2 f32) (result i64) - (i64.const 1) - ) - (func $57 (param $0 nullref) (param $1 v128) (param $2 i64) (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (func $58 (result i32 f64) - (tuple.make - (i32.const 0) - (f64.const 0) - ) - ) - (func $59 (param $0 f32) (result anyref) - (ref.null) - ) - (func $60 (param $0 i64) (param $1 nullref) (result f32) - (f32.const 1) - ) - (func $61 (param $0 i32) (param $1 funcref) (param $2 i32) (param $3 i32) (param $4 f64) (param $5 funcref) (result i32) - (i32.const 0) - ) - (func $62 (param $0 v128) (param $1 nullref) (result i32) - (i32.const 0) - ) - (func $63 (param $0 funcref) (param $1 f64) (param $2 v128) (param $3 f32) (param $4 funcref) (param $5 anyref) (result anyref) - (global.get $global$2) - ) - (func $64 (param $0 i64) (param $1 anyref) (param $2 nullref) (result nullref) - (ref.null) - ) - (func $65 (result funcref) - (unreachable) - ) - (func $66 (param $0 f32) (result anyref funcref) - (tuple.make - (ref.null) - (ref.func $18) - ) - ) - (func $67 (param $0 f32) (result i64 i32 f64 funcref f32 i32) - (tuple.make - (i64.const 524288) - (i32.const 0) - (f64.const 1) - (block $label$1 (result funcref) - (ref.null) - ) - (f32.const 1) - (i32.const -57) - ) - ) - (func $68 (result f32 anyref) - (unreachable) - ) - (func $69 (param $0 anyref) (result v128 anyref i64) - (local $1 i64) - (local $2 i64) - (local $3 i64) - (local $4 i64) - (local $5 i64) - (local $6 i64) - (local $7 i64) - (local $8 i64) - (local $9 i64) - (local $10 i64) - (local $11 i64) - (local $12 i64) - (local $13 i64) - (local $14 i64) - (local $15 i64) - (local $16 i64) - (local $17 i64) - (local $18 i64) - (local $19 i64) - (local $20 i64) - (local $21 i64) - (local $22 i64) - (local $23 i64) - (local $24 i64) - (local $25 i64) - (local $26 i64) - (local $27 v128) - (local $28 v128) - (local $29 v128) - (local $30 v128) - (local $31 v128) - (local $32 v128) - (local $33 v128) - (local $34 v128) - (local $35 v128) - (local $36 v128) - (local $37 v128) - (local $38 v128) - (local $39 v128) - (local $40 v128) - (local $41 v128) - (local $42 v128) - (local $43 v128) - (local $44 v128) - (local $45 v128) - (local $46 v128) - (local $47 v128) - (local $48 v128) - (local $49 v128) - (local $50 v128) - (local $51 v128) - (local $52 v128) - (local $53 v128) - (local $54 v128) - (local $55 v128) - (local $56 v128) - (local $57 v128) - (local $58 v128) - (local $59 v128) - (local $60 v128) - (local $61 v128) - (local $62 v128) - (local $63 v128) - (local $64 v128) - (local $65 v128) - (local $66 v128) - (local $67 v128) - (local $68 v128) - (local $69 v128) - (local $70 v128) - (local $71 v128) - (local $72 v128) - (local $73 v128) - (local $74 v128) - (local $75 v128) - (local $76 v128) - (local $77 v128) - (local $78 v128) - (local $79 v128) - (local $80 v128) - (local $81 v128) - (local $82 v128) - (local $83 v128) - (local $84 v128) - (local $85 v128) - (local $86 v128) - (local $87 v128) - (local $88 v128) - (local $89 anyref) - (local $90 anyref) - (local $91 anyref) - (local $92 anyref) - (local $93 anyref) - (local $94 anyref) - (local $95 anyref) - (local $96 anyref) - (local $97 anyref) - (local $98 anyref) - (local $99 anyref) - (local $100 anyref) - (local $101 anyref) - (local $102 anyref) - (local $103 anyref) - (local $104 anyref) - (local $105 anyref) - (local $106 anyref) - (local $107 anyref) - (local $108 anyref) - (local $109 anyref) - (local $110 anyref) - (local $111 anyref) - (local $112 anyref) - (local $113 anyref) - (local $114 anyref) - (local $115 anyref) - (local $116 anyref) - (local $117 anyref) - (local $118 anyref) - (local $119 anyref) - (local $120 anyref) - (local $121 anyref) - (local $122 anyref) - (local $123 anyref) - (local $124 anyref) - (local $125 anyref) - (local $126 anyref) - (local $127 anyref) - (local $128 anyref) - (local $129 anyref) - (local $130 anyref) - (local $131 anyref) - (local $132 anyref) - (local $133 anyref) - (local $134 anyref) - (local $135 anyref) - (local $136 anyref) - (local $137 anyref) - (local $138 anyref) - (local $139 anyref) - (local $140 anyref) - (local $141 anyref) - (local $142 anyref) - (local $143 anyref) - (local $144 anyref) - (local $145 anyref) - (local $146 anyref) - (local $147 anyref) - (local $148 anyref) - (local $149 anyref) - (local $150 anyref) - (local $151 anyref) - (local $152 anyref) - (local $153 anyref) - (local $154 anyref) - (local $155 anyref) - (local $156 anyref) - (local $157 anyref) - (local $158 anyref) - (local $159 anyref) - (local $160 anyref) - (local $161 anyref) - (local $162 anyref) - (local $163 (v128 anyref i64)) - (local $164 anyref) - (local $165 v128) + (func $test (param $0 anyref) (result v128 anyref i64) + (local $1 v128) + (local $2 anyref) + (local $3 anyref) + (local $4 anyref) + (local $5 anyref) + (local $6 (v128 anyref i64)) + (local $7 anyref) + (local $8 v128) (tuple.make (block $label$1 (result v128) (drop (block $label$2 (result anyref) - (local.set $44 + (local.set $1 (block $label$3 (result v128) (drop (block $label$4 (result anyref) @@ -534,7 +58,7 @@ (block $label$23 (result v128) (drop (block $label$24 (result anyref) - (local.set $163 + (local.set $6 (block $label$25 (result v128 anyref i64) (tuple.make (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) @@ -545,53 +69,37 @@ ) (drop (block (result v128) - (local.set $165 + (local.set $8 (tuple.extract 0 - (local.get $163) + (local.get $6) ) ) (drop (block (result anyref) - (local.set $164 + (local.set $7 (tuple.extract 1 - (local.get $163) + (local.get $6) ) ) - (drop - (tuple.extract 2 - (local.get $163) - ) - ) - (local.get $164) + (local.get $7) ) ) - (local.get $165) + (local.get $8) ) ) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (nop) - (local.get $109) + (local.get $2) ) ) (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) ) ) - (local.get $110) + (local.get $3) ) ) (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) ) ) - (local.get $111) + (local.get $4) ) ) (ref.null) @@ -606,7 +114,7 @@ (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) ) ) - (local.get $112) + (local.get $5) ) ) (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) @@ -660,35 +168,4 @@ (i64.const 1) ) ) - (func $70 (param $0 i32) (param $1 v128) (param $2 v128) (param $3 i32) (param $4 i64) (result f32) - (f32.const 1) - ) - (func $71 (param $0 f32) (param $1 f64) (param $2 anyref) (param $3 anyref) (result anyref) - (unreachable) - ) - (func $72 (result anyref) - (local $0 anyref) - (local.get $0) - ) - (func $73 (param $0 funcref) (param $1 v128) (param $2 f32) (param $3 f64) - (nop) - ) - (func $74 (result anyref) - (ref.null) - ) - (func $75 (param $0 f32) (param $1 v128) (param $2 i64) (param $3 f64) (param $4 f32) (result f64) - (f64.const 1) - ) - (func $76 (param $0 f32) (result f32) - (f32.const 1) - ) - (func $77 (param $0 anyref) (param $1 nullref) (param $2 f64) (param $3 nullref) (param $4 v128) (param $5 anyref) (result i32) - (i32.const 0) - ) - (func $78 (param $0 nullref) (param $1 i32) (param $2 i32) (result f32) - (f32.const 1) - ) - (func $79 (param $0 i32) (param $1 f32) (param $2 funcref) (param $3 i32) (param $4 i32) (param $5 f32) (param $6 f64) (param $7 nullref) - (nop) - ) ) From 4685ec77632752630c5300a36659a4f44ece775b Mon Sep 17 00:00:00 2001 From: dcode Date: Thu, 23 Apr 2020 20:21:02 +0200 Subject: [PATCH 7/7] revert test --- test/passes/issue2788.passes | 1 - test/passes/issue2788.txt | 169 ---------------------------------- test/passes/issue2788.wast | 171 ----------------------------------- 3 files changed, 341 deletions(-) delete mode 100644 test/passes/issue2788.passes delete mode 100644 test/passes/issue2788.txt delete mode 100644 test/passes/issue2788.wast diff --git a/test/passes/issue2788.passes b/test/passes/issue2788.passes deleted file mode 100644 index 0d1ffd080b5..00000000000 --- a/test/passes/issue2788.passes +++ /dev/null @@ -1 +0,0 @@ -all-features_precompute-propagate diff --git a/test/passes/issue2788.txt b/test/passes/issue2788.txt deleted file mode 100644 index cb34ba7c8ac..00000000000 --- a/test/passes/issue2788.txt +++ /dev/null @@ -1,169 +0,0 @@ -(module - (type $anyref_=>_v128_anyref_i64 (func (param anyref) (result v128 anyref i64))) - (type $none_=>_v128_nullref_i64 (func (result v128 nullref i64))) - (func $test (param $0 anyref) (result v128 anyref i64) - (local $1 v128) - (local $2 anyref) - (local $3 anyref) - (local $4 anyref) - (local $5 anyref) - (local $6 (v128 anyref i64)) - (local $7 anyref) - (local $8 v128) - (tuple.make - (block $label$1 (result v128) - (drop - (block $label$2 (result anyref) - (local.set $1 - (block $label$3 (result v128) - (drop - (block $label$4 (result anyref) - (drop - (block $label$5 (result v128) - (drop - (block $label$6 (result anyref) - (drop - (block $label$7 (result v128) - (drop - (block $label$8 (result anyref) - (drop - (block $label$9 (result v128) - (drop - (block $label$10 (result anyref) - (drop - (block $label$11 (result v128) - (drop - (block $label$12 (result nullref) - (drop - (block $label$13 (result anyref) - (drop - (block $label$14 (result v128) - (drop - (block $label$15 (result nullref) - (drop - (block $label$16 (result v128) - (drop - (block $label$17 (result anyref) - (drop - (block $label$18 (result v128) - (drop - (block $label$19 (result nullref) - (drop - (block $label$20 (result nullref) - (drop - (block $label$21 (result v128) - (drop - (block $label$22 (result nullref) - (drop - (block $label$23 (result v128) - (drop - (block $label$24 (result nullref) - (local.set $6 - (block $label$25 (result v128 nullref i64) - (tuple.make - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - (ref.null) - (i64.const 0) - ) - ) - ) - (drop - (block $block (result v128) - (local.set $8 - (tuple.extract 0 - (local.get $6) - ) - ) - (drop - (block $block0 (result nullref) - (local.set $7 - (ref.null) - ) - (ref.null) - ) - ) - (local.get $8) - ) - ) - (ref.null) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (ref.null) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (ref.null) - ) - ) - (ref.null) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (ref.null) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (ref.null) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (block $label$26 (result anyref) - (block $label$27 (result anyref) - (local.get $0) - ) - ) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (block $label$28 (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (local.get $0) - (i64.const 1) - ) - ) -) diff --git a/test/passes/issue2788.wast b/test/passes/issue2788.wast deleted file mode 100644 index e3f54abc533..00000000000 --- a/test/passes/issue2788.wast +++ /dev/null @@ -1,171 +0,0 @@ -;; Regression test for 'std::move'-related issues in ExpressionRunner during precompute-propagate -;; see: https://github.com/WebAssembly/binaryen/issues/2788 -(module - (func $test (param $0 anyref) (result v128 anyref i64) - (local $1 v128) - (local $2 anyref) - (local $3 anyref) - (local $4 anyref) - (local $5 anyref) - (local $6 (v128 anyref i64)) - (local $7 anyref) - (local $8 v128) - (tuple.make - (block $label$1 (result v128) - (drop - (block $label$2 (result anyref) - (local.set $1 - (block $label$3 (result v128) - (drop - (block $label$4 (result anyref) - (drop - (block $label$5 (result v128) - (drop - (block $label$6 (result anyref) - (drop - (block $label$7 (result v128) - (drop - (block $label$8 (result anyref) - (drop - (block $label$9 (result v128) - (drop - (block $label$10 (result anyref) - (drop - (block $label$11 (result v128) - (drop - (block $label$12 (result anyref) - (drop - (block $label$13 (result anyref) - (drop - (block $label$14 (result v128) - (drop - (block $label$15 (result anyref) - (drop - (block $label$16 (result v128) - (drop - (block $label$17 (result anyref) - (drop - (block $label$18 (result v128) - (drop - (block $label$19 (result anyref) - (drop - (block $label$20 (result anyref) - (drop - (block $label$21 (result v128) - (drop - (block $label$22 (result anyref) - (drop - (block $label$23 (result v128) - (drop - (block $label$24 (result anyref) - (local.set $6 - (block $label$25 (result v128 anyref i64) - (tuple.make - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - (ref.null) - (i64.const 0) - ) - ) - ) - (drop - (block (result v128) - (local.set $8 - (tuple.extract 0 - (local.get $6) - ) - ) - (drop - (block (result anyref) - (local.set $7 - (tuple.extract 1 - (local.get $6) - ) - ) - (local.get $7) - ) - ) - (local.get $8) - ) - ) - (local.get $2) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $3) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $4) - ) - ) - (ref.null) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $5) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (ref.null) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (block $label$26 (result anyref) - (block $label$27 (result anyref) - (local.get $0) - ) - ) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - (local.get $0) - ) - ) - (block $label$28 (result v128) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - ) - ) - (local.get $0) - ) - ) - (v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000) - ) - (local.get $0) - (i64.const 1) - ) - ) -)