diff options
-rwxr-xr-x | check.py | 4 | ||||
-rwxr-xr-x | scripts/fuzz_opt.py | 7 | ||||
-rw-r--r-- | src/tools/fuzzing.h | 278 | ||||
-rw-r--r-- | test/passes/translate-to-fuzz_all-features.txt | 1021 | ||||
-rw-r--r-- | test/passes/translate-to-fuzz_no-fuzz-nans_all-features.txt | 1090 |
5 files changed, 1540 insertions, 860 deletions
@@ -179,8 +179,8 @@ def run_wasm_reduce_tests(): # this is very slow in ThreadSanitizer, so avoid it there if 'fsanitize=thread' not in str(os.environ): print('\n[ checking wasm-reduce fuzz testcase ]\n') - - support.run_command(shared.WASM_OPT + [os.path.join(shared.options.binaryen_test, 'untaken-br_if.wast'), '-ttf', '-Os', '-o', 'a.wasm', '-all']) + # TODO: re-enable multivalue once it is better optimized + support.run_command(shared.WASM_OPT + [os.path.join(shared.options.binaryen_test, 'signext.wast'), '-ttf', '-Os', '-o', 'a.wasm', '-all', '--disable-multivalue']) before = os.stat('a.wasm').st_size support.run_command(shared.WASM_REDUCE + ['a.wasm', '--command=%s b.wasm --fuzz-exec -all' % shared.WASM_OPT[0], '-t', 'b.wasm', '-w', 'c.wasm']) after = os.stat('c.wasm').st_size diff --git a/scripts/fuzz_opt.py b/scripts/fuzz_opt.py index 96d35c610..a777a3a1a 100755 --- a/scripts/fuzz_opt.py +++ b/scripts/fuzz_opt.py @@ -352,7 +352,7 @@ class CompareVMs(TestCaseHandler): compare(before[i], after[i], 'CompareVMs between before and after: ' + vm.name) def can_run_on_feature_opts(self, feature_opts): - return all([x in feature_opts for x in ['--disable-simd', '--disable-reference-types', '--disable-exception-handling']]) + return all([x in feature_opts for x in ['--disable-simd', '--disable-reference-types', '--disable-exception-handling', '--disable-multivalue']]) # Fuzz the interpreter with --fuzz-exec. This tests everything in a single command (no @@ -424,7 +424,7 @@ class Wasm2JS(TestCaseHandler): return out def can_run_on_feature_opts(self, feature_opts): - return all([x in feature_opts for x in ['--disable-exception-handling', '--disable-simd', '--disable-threads', '--disable-bulk-memory', '--disable-nontrapping-float-to-int', '--disable-tail-call', '--disable-sign-ext', '--disable-reference-types']]) + return all([x in feature_opts for x in ['--disable-exception-handling', '--disable-simd', '--disable-threads', '--disable-bulk-memory', '--disable-nontrapping-float-to-int', '--disable-tail-call', '--disable-sign-ext', '--disable-reference-types', '--disable-multivalue']]) class Asyncify(TestCaseHandler): @@ -476,7 +476,7 @@ class Asyncify(TestCaseHandler): compare(before, after_asyncify, 'Asyncify (before/after_asyncify)') def can_run_on_feature_opts(self, feature_opts): - return all([x in feature_opts for x in ['--disable-exception-handling', '--disable-simd', '--disable-tail-call', '--disable-reference-types']]) + return all([x in feature_opts for x in ['--disable-exception-handling', '--disable-simd', '--disable-tail-call', '--disable-reference-types', '--disable-multivalue']]) # The global list of all test case handlers @@ -699,6 +699,7 @@ def randomize_opt_flags(): # contains the list of all possible feature flags we can disable (after # we enable all before that in the constant options) POSSIBLE_FEATURE_OPTS = run([in_bin('wasm-opt'), '--print-features', '-all', in_binaryen('test', 'hello_world.wat'), '-all']).replace('--enable', '--disable').strip().split('\n') +POSSIBLE_FEATURE_OPTS.remove('--disable-multivalue') print('POSSIBLE_FEATURE_OPTS:', POSSIBLE_FEATURE_OPTS) if __name__ == '__main__': diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h index 24e1d6e8e..c1a81a896 100644 --- a/src/tools/fuzzing.h +++ b/src/tools/fuzzing.h @@ -228,6 +228,12 @@ private: // The maximum amount of vars in each function. static const int MAX_VARS = 20; + // The maximum number of globals in a module. + static const int MAX_GLOBALS = 20; + + // The maximum number of tuple elements. + static const int MAX_TUPLE_SIZE = 6; + // some things require luck, try them a few times static const int TRIES = 10; @@ -309,22 +315,29 @@ private: double getDouble() { return Literal(get64()).reinterpretf64(); } - SmallVector<Type, 2> getSubTypes(Type type) { - SmallVector<Type, 2> ret; - ret.push_back(type); // includes itself + Type getSubType(Type type) { + if (type.isMulti()) { + std::vector<Type> types; + for (auto t : type.expand()) { + types.push_back(getSubType(t)); + } + return Type(types); + } + SmallVector<Type, 2> options; + options.push_back(type); // includes itself switch (type.getSingle()) { case Type::anyref: - ret.push_back(Type::funcref); - ret.push_back(Type::exnref); + options.push_back(Type::funcref); + options.push_back(Type::exnref); // falls through case Type::funcref: case Type::exnref: - ret.push_back(Type::nullref); + options.push_back(Type::nullref); break; default: break; } - return ret; + return pick(options); } void setupMemory() { @@ -406,34 +419,25 @@ private: std::map<Type, std::vector<Name>> globalsByType; void setupGlobals() { - size_t index = 0; - for (auto type : getConcreteTypes()) { - auto num = upTo(3); - for (size_t i = 0; i < num; i++) { - auto* glob = - builder.makeGlobal(std::string("global$") + std::to_string(index++), - type, - makeConst(type), - Builder::Mutable); - wasm.addGlobal(glob); - globalsByType[type].push_back(glob->name); - } + for (size_t index = upTo(MAX_GLOBALS); index > 0; --index) { + auto type = getConcreteType(); + auto* global = + builder.makeGlobal(std::string("global$") + std::to_string(index), + type, + makeConst(type), + Builder::Mutable); + wasm.addGlobal(global); + globalsByType[type].push_back(global->name); } } void setupEvents() { Index num = upTo(3); for (size_t i = 0; i < num; i++) { - // Events should have void return type and at least one param type - std::vector<Type> params; - Index numValues = - wasm.features.hasMultivalue() ? upToSquared(MAX_PARAMS) : upTo(2); - for (Index i = 0; i < numValues; i++) { - params.push_back(getConcreteType()); - } - auto* event = builder.makeEvent(std::string("event$") + std::to_string(i), - WASM_EVENT_ATTRIBUTE_EXCEPTION, - Signature(Type(params), Type::none)); + auto* event = + builder.makeEvent(std::string("event$") + std::to_string(i), + WASM_EVENT_ATTRIBUTE_EXCEPTION, + Signature(getControlFlowType(), Type::none)); wasm.addEvent(event); } } @@ -544,11 +548,11 @@ private: std::vector<Type> params; params.reserve(numParams); for (Index i = 0; i < numParams; i++) { - auto type = getConcreteType(); + auto type = getSingleConcreteType(); typeLocals[type].push_back(params.size()); params.push_back(type); } - func->sig = Signature(Type(params), getReachableType()); + func->sig = Signature(Type(params), getControlFlowType()); Index numVars = upToSquared(MAX_VARS); for (Index i = 0; i < numVars; i++) { auto type = getConcreteType(); @@ -859,32 +863,22 @@ private: } nesting++; Expression* ret = nullptr; - switch (type.getSingle()) { - case Type::i32: - case Type::i64: - case Type::f32: - case Type::f64: - case Type::v128: - case Type::funcref: - case Type::anyref: - case Type::nullref: - case Type::exnref: - ret = _makeConcrete(type); - break; - case Type::none: - ret = _makenone(); - break; - case Type::unreachable: - ret = _makeunreachable(); - break; + if (type.isConcrete()) { + ret = _makeConcrete(type); + } else if (type == Type::none) { + ret = _makenone(); + } else { + assert(type == Type::unreachable); + ret = _makeunreachable(); } // we should create the right type of thing assert(Type::isSubType(ret->type, type)); nesting--; return ret; } - Expression* _makeConcrete(Type type) { + bool canMakeControlFlow = + !type.isMulti() || wasm.features.has(FeatureSet::Multivalue); auto choice = upTo(100); if (choice < 10) { return makeConst(type); @@ -895,42 +889,55 @@ private: if (choice < 50) { return makeLocalGet(type); } - if (choice < 60) { + if (choice < 60 && canMakeControlFlow) { return makeBlock(type); } - if (choice < 70) { + if (choice < 70 && canMakeControlFlow) { return makeIf(type); } - if (choice < 80) { + if (choice < 80 && canMakeControlFlow) { return makeLoop(type); } - if (choice < 90) { + if (choice < 90 && canMakeControlFlow) { return makeBreak(type); } using Self = TranslateToFuzzReader; - auto options = FeatureOptions<Expression* (Self::*)(Type)>() - .add(FeatureSet::MVP, - &Self::makeBlock, - &Self::makeIf, - &Self::makeLoop, - &Self::makeBreak, - &Self::makeCall, - &Self::makeCallIndirect, - &Self::makeLocalGet, - &Self::makeLocalSet, - &Self::makeLoad, - &Self::makeConst, - &Self::makeUnary, - &Self::makeBinary, - &Self::makeSelect, - &Self::makeGlobalGet) - .add(FeatureSet::SIMD, &Self::makeSIMD); - if (type == Type::i32 || type == Type::i64) { + FeatureOptions<Expression* (Self::*)(Type)> options; + options.add(FeatureSet::MVP, + &Self::makeLocalGet, + &Self::makeLocalSet, + &Self::makeGlobalGet, + &Self::makeConst); + if (canMakeControlFlow) { + options.add(FeatureSet::MVP, + &Self::makeBlock, + &Self::makeIf, + &Self::makeLoop, + &Self::makeBreak, + &Self::makeCall, + &Self::makeCallIndirect); + } + if (type.isSingle()) { + options + .add(FeatureSet::MVP, + &Self::makeUnary, + &Self::makeBinary, + &Self::makeSelect) + .add(FeatureSet::Multivalue, &Self::makeTupleExtract); + } + if (type.isSingle() && !type.isRef()) { + options.add(FeatureSet::MVP, &Self::makeLoad); + options.add(FeatureSet::SIMD, &Self::makeSIMD); + } + if (type.isInteger()) { options.add(FeatureSet::Atomics, &Self::makeAtomic); } if (type == Type::i32) { options.add(FeatureSet::ReferenceTypes, &Self::makeRefIsNull); } + if (type.isMulti()) { + options.add(FeatureSet::Multivalue, &Self::makeTupleMake); + } return (this->*pick(options))(type); } @@ -1314,22 +1321,60 @@ private: } Expression* makeGlobalGet(Type type) { - auto& globals = globalsByType[type]; - if (globals.empty()) { + auto it = globalsByType.find(type); + if (it == globalsByType.end() || it->second.empty()) { return makeConst(type); } - return builder.makeGlobalGet(pick(globals), type); + return builder.makeGlobalGet(pick(it->second), type); } Expression* makeGlobalSet(Type type) { assert(type == Type::none); type = getConcreteType(); - auto& globals = globalsByType[type]; - if (globals.empty()) { + auto it = globalsByType.find(type); + if (it == globalsByType.end() || it->second.empty()) { return makeTrivial(Type::none); } auto* value = make(type); - return builder.makeGlobalSet(pick(globals), value); + return builder.makeGlobalSet(pick(it->second), value); + } + + Expression* makeTupleMake(Type type) { + assert(wasm.features.hasMultivalue()); + assert(type.isMulti()); + std::vector<Expression*> elements; + for (auto t : type.expand()) { + elements.push_back(make(t)); + } + return builder.makeTupleMake(std::move(elements)); + } + + Expression* makeTupleExtract(Type type) { + assert(wasm.features.hasMultivalue()); + assert(type.isSingle() && type.isConcrete()); + Type tupleType = getTupleType(); + auto& elements = tupleType.expand(); + + // Find indices from which we can extract `type` + std::vector<size_t> extractIndices; + for (size_t i = 0; i < elements.size(); ++i) { + if (elements[i] == type) { + extractIndices.push_back(i); + } + } + + // If there are none, inject one + if (extractIndices.size() == 0) { + auto newElements = elements; + size_t injected = upTo(elements.size()); + newElements[injected] = type; + tupleType = Type(newElements); + extractIndices.push_back(injected); + } + + Index index = pick(extractIndices); + Expression* child = make(tupleType); + return builder.makeTupleExtract(child, index); } Expression* makePointer() { @@ -1782,6 +1827,13 @@ private: } return builder.makeRefNull(); } + if (type.isMulti()) { + std::vector<Expression*> operands; + for (auto t : type.expand()) { + operands.push_back(makeConst(t)); + } + return builder.makeTupleMake(std::move(operands)); + } auto* ret = wasm.allocator.alloc<Const>(); ret->value = makeLiteral(type); ret->type = type; @@ -1793,8 +1845,9 @@ private: } Expression* makeUnary(Type type) { + assert(!type.isMulti()); if (type == Type::unreachable) { - if (auto* unary = makeUnary(getConcreteType())->dynCast<Unary>()) { + if (auto* unary = makeUnary(getSingleConcreteType())->dynCast<Unary>()) { return makeDeNanOp( builder.makeUnary(unary->op, make(Type::unreachable))); } @@ -1808,7 +1861,7 @@ private: switch (type.getSingle()) { case Type::i32: { - switch (getConcreteType().getSingle()) { + switch (getSingleConcreteType().getSingle()) { case Type::i32: { auto op = pick( FeatureOptions<UnaryOp>() @@ -2012,8 +2065,10 @@ private: } Expression* makeBinary(Type type) { + assert(!type.isMulti()); if (type == Type::unreachable) { - if (auto* binary = makeBinary(getConcreteType())->dynCast<Binary>()) { + if (auto* binary = + makeBinary(getSingleConcreteType())->dynCast<Binary>()) { return makeDeNanOp(buildBinary( {binary->op, make(Type::unreachable), make(Type::unreachable)})); } @@ -2247,8 +2302,8 @@ private: } Expression* makeSelect(Type type) { - Type subType1 = pick(getSubTypes(type)); - Type subType2 = pick(getSubTypes(type)); + Type subType1 = getSubType(type); + Type subType2 = getSubType(type); return makeDeNanOp( buildSelect({make(Type::i32), make(subType1), make(subType2)}, type)); } @@ -2677,16 +2732,10 @@ private: } // special getters - - std::vector<Type> getReachableTypes() { + std::vector<Type> getSingleConcreteTypes() { return items( FeatureOptions<Type>() - .add(FeatureSet::MVP, - Type::i32, - Type::i64, - Type::f32, - Type::f64, - Type::none) + .add(FeatureSet::MVP, Type::i32, Type::i64, Type::f32, Type::f64) .add(FeatureSet::SIMD, Type::v128) .add(FeatureSet::ReferenceTypes, Type::funcref, @@ -2695,34 +2744,46 @@ private: .add(FeatureSet::ReferenceTypes | FeatureSet::ExceptionHandling, Type::exnref)); } - Type getReachableType() { return pick(getReachableTypes()); } - std::vector<Type> getConcreteTypes() { - return items( - FeatureOptions<Type>() - .add(FeatureSet::MVP, Type::i32, Type::i64, Type::f32, Type::f64) - .add(FeatureSet::SIMD, Type::v128) - .add(FeatureSet::ReferenceTypes, - Type::funcref, - Type::anyref, - Type::nullref) - .add(FeatureSet::ReferenceTypes | FeatureSet::ExceptionHandling, - Type::exnref)); + Type getSingleConcreteType() { return pick(getSingleConcreteTypes()); } + + Type getTupleType() { + std::vector<Type> elements; + size_t numElements = 2 + upTo(MAX_TUPLE_SIZE - 1); + elements.resize(numElements); + for (size_t i = 0; i < numElements; ++i) { + elements[i] = getSingleConcreteType(); + } + return Type(elements); } - Type getConcreteType() { return pick(getConcreteTypes()); } - // Get types that can be stored in memory - std::vector<Type> getStorableTypes() { - return items( + Type getConcreteType() { + if (wasm.features.hasMultivalue() && oneIn(5)) { + return getTupleType(); + } else { + return getSingleConcreteType(); + } + } + + Type getControlFlowType() { + if (oneIn(10)) { + return Type::none; + } else { + return getConcreteType(); + } + } + + Type getStorableType() { + return pick( FeatureOptions<Type>() .add(FeatureSet::MVP, Type::i32, Type::i64, Type::f32, Type::f64) .add(FeatureSet::SIMD, Type::v128)); } - Type getStorableType() { return pick(getStorableTypes()); } // - funcref cannot be logged because referenced functions can be inlined or // removed during optimization // - there's no point in logging anyref because it is opaque + // - don't bother logging tuples std::vector<Type> getLoggableTypes() { return items( FeatureOptions<Type>() @@ -2732,6 +2793,7 @@ private: .add(FeatureSet::ReferenceTypes | FeatureSet::ExceptionHandling, Type::exnref)); } + Type getLoggableType() { return pick(getLoggableTypes()); } // statistical distributions diff --git a/test/passes/translate-to-fuzz_all-features.txt b/test/passes/translate-to-fuzz_all-features.txt index 43b03810e..c55fcdf48 100644 --- a/test/passes/translate-to-fuzz_all-features.txt +++ b/test/passes/translate-to-fuzz_all-features.txt @@ -1,26 +1,36 @@ (module (type $none_=>_none (func)) - (type $i32_=>_none (func (param i32))) + (type $none_=>_nullref_f64_i32_nullref_nullref (func (result nullref f64 i32 nullref nullref))) (type $i64_=>_none (func (param i64))) + (type $none_=>_i32 (func (result i32))) + (type $none_=>_i32_i32_f32_exnref_nullref (func (result i32 i32 f32 exnref nullref))) + (type $none_=>_f64 (func (result f64))) + (type $none_=>_funcref_f64_i32_anyref_anyref (func (result funcref f64 i32 anyref anyref))) + (type $none_=>_nullref_nullref_nullref_nullref_i64 (func (result nullref nullref nullref nullref i64))) + (type $i32_=>_none (func (param i32))) (type $f32_=>_none (func (param f32))) (type $f64_=>_none (func (param f64))) (type $v128_=>_none (func (param v128))) - (type $funcref_anyref_f64_=>_none (func (param funcref anyref f64))) (type $nullref_=>_none (func (param nullref))) (type $exnref_=>_none (func (param exnref))) - (type $none_=>_i32 (func (result i32))) - (type $none_=>_i64 (func (result i64))) - (type $v128_=>_i64 (func (param v128) (result i64))) - (type $none_=>_f32 (func (result f32))) - (type $none_=>_f64 (func (result f64))) - (type $f32_anyref_v128_=>_f64 (func (param f32 anyref v128) (result f64))) - (type $v128_i64_nullref_i64_v128_=>_f64 (func (param v128 i64 nullref i64 v128) (result f64))) - (type $nullref_exnref_nullref_funcref_v128_=>_funcref (func (param nullref exnref nullref funcref v128) (result funcref))) + (type $f64_=>_i32 (func (param f64) (result i32))) + (type $f64_anyref_=>_i32 (func (param f64 anyref) (result i32))) + (type $f32_f32_=>_f32 (func (param f32 f32) (result f32))) + (type $funcref_funcref_anyref_anyref_nullref_=>_f64 (func (param funcref funcref anyref anyref nullref) (result f64))) + (type $nullref_=>_f64 (func (param nullref) (result f64))) + (type $none_=>_v128 (func (result v128))) + (type $none_=>_funcref_i32_i64_nullref_v128 (func (result funcref i32 i64 nullref v128))) + (type $f32_=>_funcref_i32_i64_nullref_v128 (func (param f32) (result funcref i32 i64 nullref v128))) + (type $none_=>_funcref_anyref_nullref_anyref_i64 (func (result funcref anyref nullref anyref i64))) + (type $exnref_nullref_=>_funcref_anyref_nullref_anyref_i64 (func (param exnref nullref) (result funcref anyref nullref anyref i64))) + (type $none_=>_funcref_nullref (func (result funcref nullref))) + (type $exnref_f32_=>_funcref_nullref (func (param exnref f32) (result funcref nullref))) + (type $none_=>_anyref (func (result anyref))) (type $none_=>_nullref (func (result nullref))) - (type $nullref_i64_i64_f64_=>_nullref (func (param nullref i64 i64 f64) (result nullref))) - (type $none_=>_exnref (func (result exnref))) - (type $f64_nullref_i32_funcref_nullref_=>_exnref (func (param f64 nullref i32 funcref nullref) (result exnref))) - (type $anyref_nullref_v128_f64_=>_exnref (func (param anyref nullref v128 f64) (result exnref))) + (type $i32_nullref_funcref_=>_nullref (func (param i32 nullref funcref) (result nullref))) + (type $v128_=>_nullref (func (param v128) (result nullref))) + (type $v128_exnref_v128_v128_anyref_funcref_anyref_=>_nullref (func (param v128 exnref v128 v128 anyref funcref anyref) (result nullref))) + (type $nullref_funcref_anyref_=>_exnref (func (param nullref funcref anyref) (result exnref))) (import "fuzzing-support" "log-i32" (func $log-i32 (param i32))) (import "fuzzing-support" "log-i64" (func $log-i64 (param i64))) (import "fuzzing-support" "log-f32" (func $log-f32 (param f32))) @@ -28,36 +38,49 @@ (import "fuzzing-support" "log-v128" (func $log-v128 (param v128))) (import "fuzzing-support" "log-nullref" (func $log-nullref (param nullref))) (import "fuzzing-support" "log-exnref" (func $log-exnref (param exnref))) - (memory $0 (shared 1 1)) + (memory $0 1 1) (data (i32.const 0) "N\0fN\f5\f9\b1\ff\fa\eb\e5\fe\a7\ec\fb\fc\f4\a6\e4\ea\f0\ae\e3") - (table $0 5 5 funcref) - (elem (i32.const 0) $func_10 $func_17 $func_17 $func_17 $func_23) - (global $global$0 (mut i32) (i32.const 975663930)) - (global $global$1 (mut i32) (i32.const 2066300474)) - (global $global$2 (mut i64) (i64.const 20510)) - (global $global$3 (mut f32) (f32.const -2147483648)) - (global $global$4 (mut v128) (v128.const i32x4 0x7f002833 0x580000fe 0x59750500 0x01ff002f)) - (global $global$5 (mut funcref) (ref.null)) - (global $global$6 (mut anyref) (ref.null)) - (global $global$7 (mut nullref) (ref.null)) - (global $global$8 (mut nullref) (ref.null)) + (table $0 9 9 funcref) + (elem (i32.const 0) $func_22 $func_26 $func_26 $func_26 $func_26 $func_29 $func_31 $func_33 $func_40) + (global $global$5 (mut f32) (f32.const 74)) + (global $global$4 (mut nullref) (ref.null)) + (global $global$3 (mut i32) (i32.const 1263230471)) + (global $global$2 (mut i32) (i32.const -131072)) + (global $global$1 (mut (i64 f64 exnref)) (tuple.make + (i64.const 4294967295) + (f64.const -nan:0xffffffffffffa) + (ref.null) + )) (global $hangLimit (mut i32) (i32.const 10)) - (event $event$0 (attr 0) (param funcref anyref f64)) - (event $event$1 (attr 0) (param i32)) + (event $event$0 (attr 0) (param i64)) + (event $event$1 (attr 0) (param)) (export "hashMemory" (func $hashMemory)) (export "memory" (memory $0)) (export "func_8" (func $func_8)) - (export "func_11" (func $func_11)) + (export "func_8_invoker" (func $func_8_invoker)) + (export "func_10_invoker" (func $func_10_invoker)) (export "func_12_invoker" (func $func_12_invoker)) - (export "func_15" (func $func_15)) - (export "func_15_invoker" (func $func_15_invoker)) - (export "func_17_invoker" (func $func_17_invoker)) + (export "func_14_invoker" (func $func_14_invoker)) + (export "func_16" (func $func_16)) + (export "func_16_invoker" (func $func_16_invoker)) (export "func_19" (func $func_19)) - (export "func_19_invoker" (func $func_19_invoker)) - (export "func_21" (func $func_21)) - (export "func_21_invoker" (func $func_21_invoker)) - (export "func_23_invoker" (func $func_23_invoker)) - (export "func_25" (func $func_25)) + (export "func_20" (func $func_20)) + (export "func_20_invoker" (func $func_20_invoker)) + (export "func_22_invoker" (func $func_22_invoker)) + (export "func_24" (func $func_24)) + (export "func_24_invoker" (func $func_24_invoker)) + (export "func_26" (func $func_26)) + (export "func_26_invoker" (func $func_26_invoker)) + (export "func_29" (func $func_29)) + (export "func_29_invoker" (func $func_29_invoker)) + (export "func_31" (func $func_31)) + (export "func_32" (func $func_32)) + (export "func_33_invoker" (func $func_33_invoker)) + (export "func_35_invoker" (func $func_35_invoker)) + (export "func_37" (func $func_37)) + (export "func_37_invoker" (func $func_37_invoker)) + (export "func_40" (func $func_40)) + (export "func_40_invoker" (func $func_40_invoker)) (export "hangLimitInitializer" (func $hangLimitInitializer)) (func $hashMemory (result i32) (local $0 i32) @@ -290,13 +313,22 @@ ) (local.get $0) ) - (func $func_8 + (func $func_8 (result anyref) + (local $0 i64) + (local $1 exnref) + (local $2 nullref) + (local $3 i32) + (local $4 anyref) + (local $5 nullref) + (local $6 f32) (block (if (i32.eqz (global.get $hangLimit) ) - (return) + (return + (local.get $4) + ) ) (global.set $hangLimit (i32.sub @@ -306,19 +338,51 @@ ) ) (block $label$0 - (block $label$1 - (block $label$2 + (nop) + (loop $label$1 + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (ref.null) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block (nop) + (br_if $label$1 + (i32.eqz + (i32.const -8) + ) + ) (nop) ) - (nop) ) - (nop) + (return + (local.get $4) + ) ) ) - (func $func_9 (param $0 nullref) (param $1 exnref) (param $2 nullref) (param $3 funcref) (param $4 v128) (result funcref) - (local $5 nullref) - (local $6 f64) + (func $func_8_invoker + (drop + (call $func_8) + ) + (drop + (call $func_8) + ) + (drop + (call $func_8) + ) + ) + (func $func_10 (result nullref) (block (if (i32.eqz @@ -335,21 +399,55 @@ ) ) ) - (local.tee $3 - (ref.null) + (block $label$0 + (loop $label$1 + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (ref.null) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (br_if $label$1 + (i32.eqz + (i32.const 5) + ) + ) + ) + (return + (ref.null) + ) ) ) - (func $func_10 (result i64) - (local $0 anyref) - (local $1 funcref) - (local $2 f64) + (func $func_10_invoker + (drop + (call $func_10) + ) + (call $log-i32 + (call $hashMemory) + ) + ) + (func $func_12 (param $0 exnref) (param $1 f32) (result funcref nullref) + (local $2 f32) (block (if (i32.eqz (global.get $hangLimit) ) (return - (i64.const 21339) + (tuple.make + (ref.null) + (ref.null) + ) ) ) (global.set $hangLimit @@ -359,34 +457,44 @@ ) ) ) - (block $label$0 - (nop) - (return - (i64.const -2199023255552) + (tuple.make + (ref.null) + (ref.null) + ) + ) + (func $func_12_invoker + (drop + (call $func_12 + (ref.null) + (f32.const -nan:0x7fffc8) ) ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_12 + (ref.null) + (f32.const 18446744073709551615) + ) + ) + (call $log-i32 + (call $hashMemory) + ) ) - (func $func_11 (result f64) - (local $0 v128) - (local $1 f32) - (local $2 v128) - (local $3 funcref) - (local $4 v128) - (local $5 nullref) - (local $6 i32) - (local $7 i32) - (local $8 funcref) - (local $9 v128) - (local $10 v128) - (local $11 v128) - (local $12 funcref) + (func $func_14 (result v128) + (local $0 i64) + (local $1 i32) + (local $2 f64) + (local $3 f64) + (local $4 f64) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f64.const 5) + (v128.const i32x4 0xffffff01 0xffffffff 0x4e484e45 0x00000000) ) ) (global.set $hangLimit @@ -396,17 +504,32 @@ ) ) ) - (f64.const 1.6293189712507804e-52) + (v128.const i32x4 0x00000000 0xc2800000 0xffffffb0 0x4eb61298) + ) + (func $func_14_invoker + (drop + (call $func_14) + ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_14) + ) + (call $log-i32 + (call $hashMemory) + ) ) - (func $func_12 (result nullref) + (func $func_16 + (local $0 exnref) + (local $1 f32) + (local $2 i64) (block (if (i32.eqz (global.get $hangLimit) ) - (return - (ref.null) - ) + (return) ) (global.set $hangLimit (i32.sub @@ -415,44 +538,30 @@ ) ) ) - (block $label$0 - (nop) - (return - (ref.null) - ) - ) + (nop) ) - (func $func_12_invoker - (drop - (call $func_12) - ) - (drop - (call $func_12) - ) - (drop - (call $func_12) - ) - (call $log-i32 - (call $hashMemory) - ) - (drop - (call $func_12) - ) - (call $log-i32 - (call $hashMemory) - ) + (func $func_16_invoker + (call $func_16) ) - (func $func_14 (param $0 nullref) (param $1 i64) (param $2 i64) (param $3 f64) (result nullref) - (local $4 f64) - (local $5 f32) - (local $6 i64) + (func $func_18 (param $0 v128) (result nullref) + (local $1 i64) + (local $2 v128) + (local $3 i32) + (local $4 nullref) + (local $5 anyref) + (local $6 f64) + (local $7 (exnref anyref exnref)) + (local $8 f32) + (local $9 (i32 v128)) + (local $10 i32) + (local $11 (f64 exnref v128 f64 f32 v128)) (block (if (i32.eqz (global.get $hangLimit) ) (return - (ref.null) + (local.get $4) ) ) (global.set $hangLimit @@ -462,22 +571,43 @@ ) ) ) - (block $label$0 (result nullref) - (nop) - (block $label$1 (result nullref) - (local.get $0) + (ref.null) + ) + (func $func_19 (result i32) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (i32.const 18233) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) + (i32.const 24) ) - (func $func_15 (result f32) - (local $0 funcref) + (func $func_20 (param $0 nullref) (param $1 funcref) (param $2 anyref) (result exnref) + (local $3 funcref) + (local $4 exnref) + (local $5 i32) + (local $6 funcref) + (local $7 (i64 i32 v128 f32 f64)) + (local $8 f32) + (local $9 v128) + (local $10 v128) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f32.const -0) + (local.get $4) ) ) (global.set $hangLimit @@ -488,118 +618,162 @@ ) ) (block $label$0 - (call $log-f32 - (loop $label$1 (result f32) - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f32.const -nan:0x7fffe9) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block (result f32) - (block $label$2 - (nop) - (nop) - ) - (br_if $label$1 - (i32.eqz - (i32.const 31868) + (call $log-i32 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (loop $label$1 (result i32) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (local.get $4) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$2 (result i32) + (local.tee $5 + (i32.const 12588) + ) + ) + ) + ) + ) ) ) - (f32.const -18446744073709551615) ) ) ) + (return + (local.get $4) + ) + ) + ) + (func $func_20_invoker + (drop + (call $func_20 + (ref.null) + (ref.func $func_12) + (ref.null) + ) + ) + ) + (func $func_22 (param $0 exnref) (param $1 nullref) (result funcref anyref nullref anyref i64) + (block (if - (block $label$3 - (call $log-exnref + (i32.eqz + (global.get $hangLimit) + ) + (return + (tuple.make + (ref.func $func_14_invoker) (ref.null) - ) - (loop $label$4 - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f32.const -nan:0x7fffef) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (call $log-exnref - (ref.null) - ) - ) - (return - (f32.const 2101943053617856459558324e13) + (ref.null) + (ref.null) + (i64.const -32768) ) ) - (block $label$5 - (call $log-i32 - (call $hashMemory) - ) - (br_if $label$5 - (i32.eqz - (i32.const -2147483648) - ) - ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) ) - (nop) ) - (return - (f32.const 35013904) + ) + (block $label$0 (result nullref nullref nullref nullref i64) + (block $label$1 (result nullref nullref nullref nullref i64) + (call $log-i64 + (i64.const -9223372036854775808) + ) + (tuple.make + (ref.null) + (ref.null) + (ref.null) + (ref.null) + (i64.const 1024) + ) ) ) ) - (func $func_15_invoker + (func $func_22_invoker + (drop + (call $func_22 + (ref.null) + (ref.null) + ) + ) (drop - (call $func_15) + (call $func_22 + (ref.null) + (ref.null) + ) ) (call $log-i32 (call $hashMemory) ) (drop - (call $func_15) + (call $func_22 + (ref.null) + (ref.null) + ) ) (drop - (call $func_15) + (call $func_22 + (ref.null) + (ref.null) + ) + ) + (drop + (call $func_22 + (ref.null) + (ref.null) + ) + ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_22 + (ref.null) + (ref.null) + ) + ) + (drop + (call $func_22 + (ref.null) + (ref.null) + ) ) (call $log-i32 (call $hashMemory) ) ) - (func $func_17 (param $0 f64) (param $1 nullref) (param $2 i32) (param $3 funcref) (param $4 nullref) (result exnref) - (local $5 anyref) - (local $6 exnref) - (local $7 f32) - (local $8 f32) - (local $9 funcref) - (local $10 nullref) - (local $11 nullref) - (local $12 f32) + (func $func_24 (param $0 f64) (result i32) + (local $1 f64) + (local $2 exnref) + (local $3 f32) + (local $4 v128) + (local $5 (exnref f32 f32 f32 i32)) + (local $6 anyref) (block (if (i32.eqz (global.get $hangLimit) ) (return - (ref.null) + (i32.const -2147483647) ) ) (global.set $hangLimit @@ -609,36 +783,81 @@ ) ) ) - (local.tee $6 - (local.tee $6 - (ref.null) + (block $label$0 + (nop) + (return + (i32.const -2147483647) ) ) ) - (func $func_17_invoker + (func $func_24_invoker (drop - (call $func_17 - (f64.const 3.2330574282313187e-229) - (ref.null) - (i32.const 65536) - (ref.func $func_10) - (ref.null) + (call $func_24 + (f64.const 3.0737861764336346e-236) ) ) + (call $log-i32 + (call $hashMemory) + ) + ) + (func $func_26 (param $0 funcref) (param $1 funcref) (param $2 anyref) (param $3 anyref) (param $4 nullref) (result f64) + (local $5 i64) + (local $6 exnref) + (local $7 (funcref f64)) + (local $8 f32) + (local $9 anyref) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (f64.const 8.160763227260461e-259) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$0 (result f64) + (nop) + (f64.const 3402823466385288598117041e14) + ) + ) + (func $func_26_invoker (drop - (call $func_17 - (f64.const 2.2250738585072014e-308) + (call $func_26 + (ref.null) + (ref.func $func_22_invoker) + (ref.null) (ref.null) - (i32.const -66) - (ref.func $func_15_invoker) (ref.null) ) ) - (call $log-i32 - (call $hashMemory) + ) + (func $func_28 (param $0 nullref) (result f64) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (f64.const 3.859060993302007e-86) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) ) + (f64.const 2147483649) ) - (func $func_19 (result exnref) + (func $func_29 (param $0 i32) (param $1 nullref) (param $2 funcref) (result nullref) (block (if (i32.eqz @@ -655,35 +874,54 @@ ) ) ) - (select (result nullref) - (ref.null) - (ref.null) - (i32.const 1) + (block $label$0 + (nop) + (return + (local.get $1) + ) ) ) - (func $func_19_invoker + (func $func_29_invoker (drop - (call $func_19) + (call $func_29 + (i32.const 2147483647) + (ref.null) + (ref.func $func_22_invoker) + ) ) (call $log-i32 (call $hashMemory) ) (drop - (call $func_19) + (call $func_29 + (i32.const -65535) + (ref.null) + (ref.null) + ) ) (call $log-i32 (call $hashMemory) ) ) - (func $func_21 (param $0 f32) (param $1 anyref) (param $2 v128) (result f64) - (local $3 f32) + (func $func_31 (param $0 f32) (result funcref i32 i64 nullref v128) + (local $1 i64) + (local $2 (f32 f32)) + (local $3 i32) + (local $4 i64) + (local $5 v128) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f64.const -35) + (tuple.make + (ref.func $func_24_invoker) + (i32.const 262144) + (i64.const 5580322043939276866) + (ref.null) + (v128.const i32x4 0x5e00164d 0x2c4108ff 0x0000f83a 0x00000400) + ) ) ) (global.set $hangLimit @@ -694,140 +932,98 @@ ) ) (block $label$0 + (nop) + (return + (tuple.make + (ref.null) + (i32.const 268435456) + (i64.const 6944553142512654410) + (ref.null) + (v128.const i32x4 0x7fffffff 0x00000000 0x00006444 0x00000000) + ) + ) + ) + ) + (func $func_32 (param $0 f32) (param $1 f32) (result f32) + (block (if - (i32.const -1024) - (block $label$1 - (if - (loop $label$2 (result i32) - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f64.const 218) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block (result i32) - (local.set $0 - (local.get $3) - ) - (br_if $label$2 - (i32.eqz - (i32.const -127) - ) - ) - (loop $label$5 (result i32) - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f64.const 18250224326260770977349632) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block (result i32) - (local.tee $2 - (loop $label$6 - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f64.const 536870912) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$7 - (br $label$1) - ) - ) - ) - (br_if $label$5 - (i32.const 37771863) - ) - (i32.const 1026961235) - ) - ) - ) - ) - (local.set $0 - (f32.const 15574585428672512) - ) - (block $label$15 - (call $log-i32 - (call $hashMemory) - ) - ) - ) - (nop) + (i32.eqz + (global.get $hangLimit) + ) + (return + (local.get $1) ) - (nop) ) - (return - (f64.const 302456592) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) + (f32.const 6.785077194130481e-28) ) - (func $func_21_invoker - (drop - (call $func_21 - (f32.const 589308224) - (ref.null) - (v128.const i32x4 0xffffff81 0x04070504 0x02007d03 0xfffffe00) + (func $func_33 (param $0 v128) (param $1 exnref) (param $2 v128) (param $3 v128) (param $4 anyref) (param $5 funcref) (param $6 anyref) (result nullref) + (local $7 anyref) + (local $8 (nullref nullref)) + (local $9 f64) + (local $10 nullref) + (local $11 nullref) + (local $12 i64) + (local $13 exnref) + (local $14 exnref) + (local $15 anyref) + (local $16 f32) + (local $17 f32) + (local $18 f64) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (ref.null) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) - (drop - (call $func_21 - (f32.const 168096624) - (ref.null) - (v128.const i32x4 0x4ed626fe 0x74770f63 0xdf000000 0x564a5657) + (block $label$0 + (nop) + (return + (local.get $10) ) ) + ) + (func $func_33_invoker (drop - (call $func_21 - (f32.const 707669312) + (call $func_33 + (v128.const i32x4 0x80000001 0xffffff81 0xffff8000 0xfffffff0) + (ref.null) + (v128.const i32x4 0x46457378 0xffe0ffb8 0x0f0e0000 0x00807fff) + (v128.const i32x4 0x0f10001c 0x004a5b09 0x3722594b 0x53000000) + (ref.null) + (ref.null) (ref.null) - (v128.const i32x4 0x0000001f 0xfc7f3000 0x00005c00 0x5f110d0f) ) ) - (call $log-i32 - (call $hashMemory) - ) ) - (func $func_23 (param $0 v128) (result i64) - (local $1 i32) - (local $2 f64) - (local $3 f64) + (func $func_35 (result f64) + (local $0 f32) + (local $1 v128) + (local $2 funcref) + (local $3 anyref) (block (if (i32.eqz (global.get $hangLimit) ) (return - (i64.const 2147483646) + (f64.const -nan:0xfffffffffffb3) ) ) (global.set $hangLimit @@ -837,45 +1033,81 @@ ) ) ) - (block $label$0 - (local.set $3 - (local.tee $3 - (local.get $3) + (f64.const 2.6233847629195463e-33) + ) + (func $func_35_invoker + (drop + (call $func_35) + ) + ) + (func $func_37 (result f64) + (local $0 (f32 funcref f64 exnref anyref)) + (local $1 v128) + (local $2 anyref) + (local $3 nullref) + (local $4 i64) + (local $5 (v128 anyref v128 funcref)) + (local $6 funcref) + (local $7 exnref) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (f64.const 68) ) ) - (return - (i64.const 110) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) + (block $label$0 (result f64) + (call $log-exnref + (local.tee $7 + (local.tee $7 + (ref.null) + ) + ) + ) + (f64.const 8.203050004426016e-158) + ) ) - (func $func_23_invoker + (func $func_37_invoker (drop - (call $func_23 - (v128.const i32x4 0xf0000000 0x00000046 0x00080000 0x513d3229) - ) + (call $func_37) ) (call $log-i32 (call $hashMemory) ) (drop - (call $func_23 - (v128.const i32x4 0x4409256e 0xff807c7c 0x0000ffa1 0x51378000) - ) + (call $func_37) + ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_37) ) (call $log-i32 (call $hashMemory) ) + (drop + (call $func_37) + ) ) - (func $func_25 (param $0 anyref) (param $1 nullref) (param $2 v128) (param $3 f64) (result exnref) - (local $4 i64) - (local $5 nullref) + (func $func_39 (param $0 f64) (param $1 anyref) (result i32) + (local $2 v128) (block (if (i32.eqz (global.get $hangLimit) ) (return - (ref.null) + (i32.const 67108864) ) ) (global.set $hangLimit @@ -885,17 +1117,68 @@ ) ) ) - (ref.null) + (i32.const 981413694) + ) + (func $func_40 (result i32 i32 f32 exnref nullref) + (local $0 i64) + (local $1 i64) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (tuple.make + (i32.const 2147483647) + (i32.const -32768) + (f32.const -9223372036854775808) + (ref.null) + (ref.null) + ) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$0 + (nop) + (return + (tuple.make + (i32.const -30) + (i32.const 12) + (f32.const -9223372036854775808) + (ref.null) + (ref.null) + ) + ) + ) + ) + (func $func_40_invoker + (drop + (call $func_40) + ) + (call $log-i32 + (call $hashMemory) + ) ) - (func $func_26 (param $0 v128) (param $1 i64) (param $2 nullref) (param $3 i64) (param $4 v128) (result f64) - (local $5 funcref) + (func $func_42 (result funcref f64 i32 anyref anyref) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f64.const -nan:0xfffffffffffe0) + (tuple.make + (ref.func $func_16) + (f64.const 1048576) + (i32.const 1294952226) + (ref.null) + (ref.null) + ) ) ) (global.set $hangLimit @@ -905,14 +1188,20 @@ ) ) ) - (loop $label$0 (result f64) + (loop $label$0 (result nullref f64 i32 nullref nullref) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f64.const 2.823288302326678e-212) + (tuple.make + (ref.func $log-nullref) + (f64.const 2312) + (i32.const 1364292894) + (ref.null) + (ref.null) + ) ) ) (global.set $hangLimit @@ -922,19 +1211,27 @@ ) ) ) - (block (result f64) + (block (result nullref f64 i32 nullref nullref) (block $label$1 - (nop) - (call $log-v128 - (v128.const i32x4 0x00000000 0xc3e00000 0x00000000 0x403c0000) + (call $log-i32 + (call $hashMemory) + ) + (call $log-i32 + (call $hashMemory) ) ) (br_if $label$0 (i32.eqz - (i32.const -2) + (i32.const 536870912) ) ) - (f64.const 2.760346204923693e-173) + (tuple.make + (ref.null) + (f64.const 1.0642378617897867e-234) + (i32.const -4096) + (ref.null) + (ref.null) + ) ) ) ) diff --git a/test/passes/translate-to-fuzz_no-fuzz-nans_all-features.txt b/test/passes/translate-to-fuzz_no-fuzz-nans_all-features.txt index 17b289421..36905f66d 100644 --- a/test/passes/translate-to-fuzz_no-fuzz-nans_all-features.txt +++ b/test/passes/translate-to-fuzz_no-fuzz-nans_all-features.txt @@ -1,28 +1,35 @@ (module (type $none_=>_none (func)) - (type $i32_=>_none (func (param i32))) (type $i64_=>_none (func (param i64))) + (type $none_=>_i32 (func (result i32))) + (type $none_=>_f64 (func (result f64))) + (type $none_=>_nullref_nullref_nullref_nullref_i64 (func (result nullref nullref nullref nullref i64))) + (type $i32_=>_none (func (param i32))) (type $f32_=>_none (func (param f32))) (type $f64_=>_none (func (param f64))) (type $v128_=>_none (func (param v128))) - (type $funcref_anyref_f64_=>_none (func (param funcref anyref f64))) (type $nullref_=>_none (func (param nullref))) (type $exnref_=>_none (func (param exnref))) - (type $none_=>_i32 (func (result i32))) - (type $none_=>_i64 (func (result i64))) - (type $v128_=>_i64 (func (param v128) (result i64))) - (type $none_=>_f32 (func (result f32))) + (type $f64_=>_i32 (func (param f64) (result i32))) + (type $nullref_funcref_i64_=>_i64 (func (param nullref funcref i64) (result i64))) (type $f32_=>_f32 (func (param f32) (result f32))) - (type $none_=>_f64 (func (result f64))) - (type $f32_anyref_v128_=>_f64 (func (param f32 anyref v128) (result f64))) + (type $f32_f32_=>_f32 (func (param f32 f32) (result f32))) (type $f64_=>_f64 (func (param f64) (result f64))) - (type $v128_i64_nullref_i64_v128_=>_f64 (func (param v128 i64 nullref i64 v128) (result f64))) - (type $nullref_exnref_nullref_funcref_v128_=>_funcref (func (param nullref exnref nullref funcref v128) (result funcref))) + (type $funcref_funcref_anyref_anyref_nullref_=>_f64 (func (param funcref funcref anyref anyref nullref) (result f64))) + (type $nullref_=>_f64 (func (param nullref) (result f64))) + (type $none_=>_v128 (func (result v128))) + (type $none_=>_funcref_i32_i64_nullref_v128 (func (result funcref i32 i64 nullref v128))) + (type $f32_=>_funcref_i32_i64_nullref_v128 (func (param f32) (result funcref i32 i64 nullref v128))) + (type $none_=>_funcref_anyref_nullref_anyref_i64 (func (result funcref anyref nullref anyref i64))) + (type $exnref_nullref_=>_funcref_anyref_nullref_anyref_i64 (func (param exnref nullref) (result funcref anyref nullref anyref i64))) + (type $none_=>_funcref_nullref (func (result funcref nullref))) + (type $exnref_f32_=>_funcref_nullref (func (param exnref f32) (result funcref nullref))) + (type $none_=>_anyref (func (result anyref))) (type $none_=>_nullref (func (result nullref))) - (type $nullref_i64_i64_f64_=>_nullref (func (param nullref i64 i64 f64) (result nullref))) - (type $none_=>_exnref (func (result exnref))) - (type $f64_nullref_i32_funcref_nullref_=>_exnref (func (param f64 nullref i32 funcref nullref) (result exnref))) - (type $anyref_nullref_v128_f64_=>_exnref (func (param anyref nullref v128 f64) (result exnref))) + (type $i32_nullref_funcref_=>_nullref (func (param i32 nullref funcref) (result nullref))) + (type $v128_=>_nullref (func (param v128) (result nullref))) + (type $v128_exnref_v128_v128_anyref_funcref_anyref_=>_nullref (func (param v128 exnref v128 v128 anyref funcref anyref) (result nullref))) + (type $nullref_funcref_anyref_=>_exnref (func (param nullref funcref anyref) (result exnref))) (import "fuzzing-support" "log-i32" (func $log-i32 (param i32))) (import "fuzzing-support" "log-i64" (func $log-i64 (param i64))) (import "fuzzing-support" "log-f32" (func $log-f32 (param f32))) @@ -30,37 +37,47 @@ (import "fuzzing-support" "log-v128" (func $log-v128 (param v128))) (import "fuzzing-support" "log-nullref" (func $log-nullref (param nullref))) (import "fuzzing-support" "log-exnref" (func $log-exnref (param exnref))) - (memory $0 (shared 1 1)) + (memory $0 1 1) (data (i32.const 0) "N\0fN\f5\f9\b1\ff\fa\eb\e5\fe\a7\ec\fb\fc\f4\a6\e4\ea\f0\ae\e3") - (table $0 5 funcref) - (elem (i32.const 0) $func_10 $func_17 $func_17 $func_17 $func_23) - (global $global$0 (mut i32) (i32.const 975663930)) - (global $global$1 (mut i32) (i32.const 2066300474)) - (global $global$2 (mut i64) (i64.const 20510)) - (global $global$3 (mut f32) (f32.const -2147483648)) - (global $global$4 (mut v128) (v128.const i32x4 0x7f002833 0x580000fe 0x59750500 0x01ff002f)) - (global $global$5 (mut funcref) (ref.null)) - (global $global$6 (mut anyref) (ref.null)) - (global $global$7 (mut nullref) (ref.null)) - (global $global$8 (mut nullref) (ref.null)) + (table $0 8 8 funcref) + (elem (i32.const 0) $func_22 $func_26 $func_26 $func_26 $func_26 $func_29 $func_31 $func_33) + (global $global$5 (mut f32) (f32.const 74)) + (global $global$4 (mut nullref) (ref.null)) + (global $global$3 (mut i32) (i32.const 1263230471)) + (global $global$2 (mut i32) (i32.const -131072)) + (global $global$1 (mut (i64 f64 exnref)) (tuple.make + (i64.const 4294967295) + (f64.const 0) + (ref.null) + )) (global $hangLimit (mut i32) (i32.const 10)) - (event $event$0 (attr 0) (param funcref anyref f64)) - (event $event$1 (attr 0) (param i32)) + (event $event$0 (attr 0) (param i64)) + (event $event$1 (attr 0) (param)) (export "hashMemory" (func $hashMemory)) (export "memory" (memory $0)) (export "func_8" (func $func_8)) - (export "func_11" (func $func_11)) + (export "func_8_invoker" (func $func_8_invoker)) + (export "func_10_invoker" (func $func_10_invoker)) (export "func_12_invoker" (func $func_12_invoker)) - (export "func_15" (func $func_15)) - (export "func_15_invoker" (func $func_15_invoker)) - (export "func_17_invoker" (func $func_17_invoker)) + (export "func_14_invoker" (func $func_14_invoker)) + (export "func_16" (func $func_16)) + (export "func_16_invoker" (func $func_16_invoker)) (export "func_19" (func $func_19)) - (export "func_19_invoker" (func $func_19_invoker)) - (export "func_21" (func $func_21)) - (export "func_21_invoker" (func $func_21_invoker)) - (export "func_23_invoker" (func $func_23_invoker)) - (export "func_25" (func $func_25)) + (export "func_20" (func $func_20)) + (export "func_20_invoker" (func $func_20_invoker)) + (export "func_22_invoker" (func $func_22_invoker)) + (export "func_24" (func $func_24)) + (export "func_24_invoker" (func $func_24_invoker)) (export "func_26" (func $func_26)) + (export "func_26_invoker" (func $func_26_invoker)) + (export "func_29" (func $func_29)) + (export "func_29_invoker" (func $func_29_invoker)) + (export "func_31" (func $func_31)) + (export "func_32" (func $func_32)) + (export "func_33_invoker" (func $func_33_invoker)) + (export "func_35_invoker" (func $func_35_invoker)) + (export "func_37" (func $func_37)) + (export "func_37_invoker" (func $func_37_invoker)) (export "hangLimitInitializer" (func $hangLimitInitializer)) (func $hashMemory (result i32) (local $0 i32) @@ -293,13 +310,22 @@ ) (local.get $0) ) - (func $func_8 + (func $func_8 (result anyref) + (local $0 i64) + (local $1 exnref) + (local $2 nullref) + (local $3 i32) + (local $4 anyref) + (local $5 nullref) + (local $6 f32) (block (if (i32.eqz (global.get $hangLimit) ) - (return) + (return + (local.get $4) + ) ) (global.set $hangLimit (i32.sub @@ -309,19 +335,51 @@ ) ) (block $label$0 - (block $label$1 - (block $label$2 + (nop) + (loop $label$1 + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (ref.null) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block (nop) + (br_if $label$1 + (i32.eqz + (i32.const -8) + ) + ) (nop) ) - (nop) ) - (nop) + (return + (local.get $4) + ) ) ) - (func $func_9 (param $0 nullref) (param $1 exnref) (param $2 nullref) (param $3 funcref) (param $4 v128) (result funcref) - (local $5 nullref) - (local $6 f64) + (func $func_8_invoker + (drop + (call $func_8) + ) + (drop + (call $func_8) + ) + (drop + (call $func_8) + ) + ) + (func $func_10 (result nullref) (block (if (i32.eqz @@ -338,21 +396,55 @@ ) ) ) - (local.tee $3 - (ref.null) + (block $label$0 + (loop $label$1 + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (ref.null) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (br_if $label$1 + (i32.eqz + (i32.const 5) + ) + ) + ) + (return + (ref.null) + ) ) ) - (func $func_10 (result i64) - (local $0 anyref) - (local $1 funcref) - (local $2 f64) + (func $func_10_invoker + (drop + (call $func_10) + ) + (call $log-i32 + (call $hashMemory) + ) + ) + (func $func_12 (param $0 exnref) (param $1 f32) (result funcref nullref) + (local $2 f32) (block (if (i32.eqz (global.get $hangLimit) ) (return - (i64.const 21339) + (tuple.make + (ref.null) + (ref.null) + ) ) ) (global.set $hangLimit @@ -362,34 +454,44 @@ ) ) ) - (block $label$0 - (nop) - (return - (i64.const -2199023255552) + (tuple.make + (ref.null) + (ref.null) + ) + ) + (func $func_12_invoker + (drop + (call $func_12 + (ref.null) + (f32.const 0) ) ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_12 + (ref.null) + (f32.const 18446744073709551615) + ) + ) + (call $log-i32 + (call $hashMemory) + ) ) - (func $func_11 (result f64) - (local $0 v128) - (local $1 f32) - (local $2 v128) - (local $3 funcref) - (local $4 v128) - (local $5 nullref) - (local $6 i32) - (local $7 i32) - (local $8 funcref) - (local $9 v128) - (local $10 v128) - (local $11 v128) - (local $12 funcref) + (func $func_14 (result v128) + (local $0 i64) + (local $1 i32) + (local $2 f64) + (local $3 f64) + (local $4 f64) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f64.const 5) + (v128.const i32x4 0xffffff01 0xffffffff 0x4e484e45 0x00000000) ) ) (global.set $hangLimit @@ -399,17 +501,32 @@ ) ) ) - (f64.const 1.6293189712507804e-52) + (v128.const i32x4 0x00000000 0xc2800000 0x00000000 0x4eb61298) ) - (func $func_12 (result nullref) + (func $func_14_invoker + (drop + (call $func_14) + ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_14) + ) + (call $log-i32 + (call $hashMemory) + ) + ) + (func $func_16 + (local $0 exnref) + (local $1 f32) + (local $2 i64) (block (if (i32.eqz (global.get $hangLimit) ) - (return - (ref.null) - ) + (return) ) (global.set $hangLimit (i32.sub @@ -418,44 +535,30 @@ ) ) ) - (block $label$0 - (nop) - (return - (ref.null) - ) - ) + (nop) ) - (func $func_12_invoker - (drop - (call $func_12) - ) - (drop - (call $func_12) - ) - (drop - (call $func_12) - ) - (call $log-i32 - (call $hashMemory) - ) - (drop - (call $func_12) - ) - (call $log-i32 - (call $hashMemory) - ) + (func $func_16_invoker + (call $func_16) ) - (func $func_14 (param $0 nullref) (param $1 i64) (param $2 i64) (param $3 f64) (result nullref) - (local $4 f64) - (local $5 f32) - (local $6 i64) + (func $func_18 (param $0 v128) (result nullref) + (local $1 i64) + (local $2 v128) + (local $3 i32) + (local $4 nullref) + (local $5 anyref) + (local $6 f64) + (local $7 (exnref anyref exnref)) + (local $8 f32) + (local $9 (i32 v128)) + (local $10 i32) + (local $11 (f64 exnref v128 f64 f32 v128)) (block (if (i32.eqz (global.get $hangLimit) ) (return - (ref.null) + (local.get $4) ) ) (global.set $hangLimit @@ -465,22 +568,43 @@ ) ) ) - (block $label$0 (result nullref) - (nop) - (block $label$1 (result nullref) - (local.get $0) + (ref.null) + ) + (func $func_19 (result i32) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (i32.const 18233) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) + (i32.const 24) ) - (func $func_15 (result f32) - (local $0 funcref) + (func $func_20 (param $0 nullref) (param $1 funcref) (param $2 anyref) (result exnref) + (local $3 funcref) + (local $4 exnref) + (local $5 i32) + (local $6 funcref) + (local $7 (i64 i32 v128 f32 f64)) + (local $8 f32) + (local $9 v128) + (local $10 v128) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f32.const -0) + (local.get $4) ) ) (global.set $hangLimit @@ -491,118 +615,162 @@ ) ) (block $label$0 - (call $log-f32 - (loop $label$1 (result f32) - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f32.const 0) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block (result f32) - (block $label$2 - (nop) - (nop) - ) - (br_if $label$1 - (i32.eqz - (i32.const 31868) + (call $log-i32 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (local.tee $5 + (loop $label$1 (result i32) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (local.get $4) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$2 (result i32) + (local.tee $5 + (i32.const 12588) + ) + ) + ) + ) + ) ) ) - (f32.const -18446744073709551615) ) ) ) + (return + (local.get $4) + ) + ) + ) + (func $func_20_invoker + (drop + (call $func_20 + (ref.null) + (ref.func $func_12) + (ref.null) + ) + ) + ) + (func $func_22 (param $0 exnref) (param $1 nullref) (result funcref anyref nullref anyref i64) + (block (if - (block $label$3 - (call $log-exnref + (i32.eqz + (global.get $hangLimit) + ) + (return + (tuple.make + (ref.func $func_14_invoker) (ref.null) - ) - (loop $label$4 - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f32.const 0) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (call $log-exnref - (ref.null) - ) - ) - (return - (f32.const 2101943053617856459558324e13) + (ref.null) + (ref.null) + (i64.const -32768) ) ) - (block $label$5 - (call $log-i32 - (call $hashMemory) - ) - (br_if $label$5 - (i32.eqz - (i32.const -2147483648) - ) - ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) ) - (nop) ) - (return - (f32.const 35013904) + ) + (block $label$0 (result nullref nullref nullref nullref i64) + (block $label$1 (result nullref nullref nullref nullref i64) + (call $log-i64 + (i64.const -9223372036854775808) + ) + (tuple.make + (ref.null) + (ref.null) + (ref.null) + (ref.null) + (i64.const 1024) + ) ) ) ) - (func $func_15_invoker + (func $func_22_invoker + (drop + (call $func_22 + (ref.null) + (ref.null) + ) + ) + (drop + (call $func_22 + (ref.null) + (ref.null) + ) + ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_22 + (ref.null) + (ref.null) + ) + ) + (drop + (call $func_22 + (ref.null) + (ref.null) + ) + ) (drop - (call $func_15) + (call $func_22 + (ref.null) + (ref.null) + ) ) (call $log-i32 (call $hashMemory) ) (drop - (call $func_15) + (call $func_22 + (ref.null) + (ref.null) + ) ) (drop - (call $func_15) + (call $func_22 + (ref.null) + (ref.null) + ) ) (call $log-i32 (call $hashMemory) ) ) - (func $func_17 (param $0 f64) (param $1 nullref) (param $2 i32) (param $3 funcref) (param $4 nullref) (result exnref) - (local $5 anyref) - (local $6 exnref) - (local $7 f32) - (local $8 f32) - (local $9 funcref) - (local $10 nullref) - (local $11 nullref) - (local $12 f32) + (func $func_24 (param $0 f64) (result i32) + (local $1 f64) + (local $2 exnref) + (local $3 f32) + (local $4 v128) + (local $5 (exnref f32 f32 f32 i32)) + (local $6 anyref) (block (if (i32.eqz (global.get $hangLimit) ) (return - (ref.null) + (i32.const -2147483647) ) ) (global.set $hangLimit @@ -612,43 +780,36 @@ ) ) ) - (local.tee $6 - (local.tee $6 - (ref.null) + (block $label$0 + (nop) + (return + (i32.const -2147483647) ) ) ) - (func $func_17_invoker + (func $func_24_invoker (drop - (call $func_17 - (f64.const 3.2330574282313187e-229) - (ref.null) - (i32.const 65536) - (ref.func $func_10) - (ref.null) - ) - ) - (drop - (call $func_17 - (f64.const 2.2250738585072014e-308) - (ref.null) - (i32.const -66) - (ref.func $func_15_invoker) - (ref.null) + (call $func_24 + (f64.const 3.0737861764336346e-236) ) ) (call $log-i32 (call $hashMemory) ) ) - (func $func_19 (result exnref) + (func $func_26 (param $0 funcref) (param $1 funcref) (param $2 anyref) (param $3 anyref) (param $4 nullref) (result f64) + (local $5 i64) + (local $6 exnref) + (local $7 (funcref f64)) + (local $8 f32) + (local $9 anyref) (block (if (i32.eqz (global.get $hangLimit) ) (return - (ref.null) + (f64.const 8.160763227260461e-259) ) ) (global.set $hangLimit @@ -658,35 +819,30 @@ ) ) ) - (select (result nullref) - (ref.null) - (ref.null) - (i32.const 1) + (block $label$0 (result f64) + (nop) + (f64.const 3402823466385288598117041e14) ) ) - (func $func_19_invoker - (drop - (call $func_19) - ) - (call $log-i32 - (call $hashMemory) - ) + (func $func_26_invoker (drop - (call $func_19) - ) - (call $log-i32 - (call $hashMemory) + (call $func_26 + (ref.null) + (ref.func $func_22_invoker) + (ref.null) + (ref.null) + (ref.null) + ) ) ) - (func $func_21 (param $0 f32) (param $1 anyref) (param $2 v128) (result f64) - (local $3 f32) + (func $func_28 (param $0 nullref) (result f64) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f64.const -35) + (f64.const 3.859060993302007e-86) ) ) (global.set $hangLimit @@ -696,141 +852,73 @@ ) ) ) - (block $label$0 + (f64.const 2147483649) + ) + (func $func_29 (param $0 i32) (param $1 nullref) (param $2 funcref) (result nullref) + (block (if - (i32.const -1024) - (block $label$1 - (if - (loop $label$2 (result i32) - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f64.const 218) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block (result i32) - (local.set $0 - (local.get $3) - ) - (br_if $label$2 - (i32.eqz - (i32.const -127) - ) - ) - (loop $label$5 (result i32) - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f64.const 18250224326260770977349632) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block (result i32) - (local.tee $2 - (loop $label$6 - (block - (if - (i32.eqz - (global.get $hangLimit) - ) - (return - (f64.const 536870912) - ) - ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$7 - (br $label$1) - ) - ) - ) - (br_if $label$5 - (i32.const 37771863) - ) - (i32.const 1026961235) - ) - ) - ) - ) - (local.set $0 - (f32.const 15574585428672512) - ) - (block $label$15 - (call $log-i32 - (call $hashMemory) - ) - ) - ) - (nop) + (i32.eqz + (global.get $hangLimit) + ) + (return + (ref.null) ) - (nop) ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$0 + (nop) (return - (f64.const 302456592) + (local.get $1) ) ) ) - (func $func_21_invoker + (func $func_29_invoker (drop - (call $func_21 - (f32.const 589308224) + (call $func_29 + (i32.const 2147483647) (ref.null) - (v128.const i32x4 0xffffff81 0x04070504 0x02007d03 0xfffffe00) + (ref.func $func_22_invoker) ) ) - (drop - (call $func_21 - (f32.const 168096624) - (ref.null) - (v128.const i32x4 0x4ed626fe 0x74770f63 0xdf000000 0x564a5657) - ) + (call $log-i32 + (call $hashMemory) ) (drop - (call $func_21 - (f32.const 707669312) + (call $func_29 + (i32.const -65535) + (ref.null) (ref.null) - (v128.const i32x4 0x0000001f 0xfc7f3000 0x00005c00 0x5f110d0f) ) ) (call $log-i32 (call $hashMemory) ) ) - (func $func_23 (param $0 v128) (result i64) - (local $1 i32) - (local $2 f64) - (local $3 f64) + (func $func_31 (param $0 f32) (result funcref i32 i64 nullref v128) + (local $1 i64) + (local $2 (f32 f32)) + (local $3 i32) + (local $4 i64) + (local $5 v128) (block (if (i32.eqz (global.get $hangLimit) ) (return - (i64.const 2147483646) + (tuple.make + (ref.func $func_24_invoker) + (i32.const 262144) + (i64.const 5580322043939276866) + (ref.null) + (v128.const i32x4 0x5e00164d 0x2c4108ff 0x0000f83a 0x00000400) + ) ) ) (global.set $hangLimit @@ -841,44 +929,130 @@ ) ) (block $label$0 - (local.set $3 - (local.tee $3 - (local.get $3) + (nop) + (return + (tuple.make + (ref.null) + (i32.const 268435456) + (i64.const 6944553142512654410) + (ref.null) + (v128.const i32x4 0x7fffffff 0x00000000 0x00006444 0x00000000) ) ) - (return - (i64.const 110) + ) + ) + (func $func_32 (param $0 f32) (param $1 f32) (result f32) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (local.get $1) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) + (f32.const 6.785077194130481e-28) ) - (func $func_23_invoker - (drop - (call $func_23 - (v128.const i32x4 0xf0000000 0x00000046 0x00080000 0x513d3229) + (func $func_33 (param $0 v128) (param $1 exnref) (param $2 v128) (param $3 v128) (param $4 anyref) (param $5 funcref) (param $6 anyref) (result nullref) + (local $7 anyref) + (local $8 (nullref nullref)) + (local $9 f64) + (local $10 nullref) + (local $11 nullref) + (local $12 i64) + (local $13 exnref) + (local $14 exnref) + (local $15 anyref) + (local $16 f32) + (local $17 f32) + (local $18 f64) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (ref.null) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) - (call $log-i32 - (call $hashMemory) + (block $label$0 + (nop) + (return + (local.get $10) + ) ) + ) + (func $func_33_invoker (drop - (call $func_23 - (v128.const i32x4 0x4409256e 0xff807c7c 0x0000ffa1 0x51378000) + (call $func_33 + (v128.const i32x4 0x80000001 0xffffff81 0xffff8000 0xfffffff0) + (ref.null) + (v128.const i32x4 0x46457378 0xffe0ffb8 0x0f0e0000 0x00807fff) + (v128.const i32x4 0x0f10001c 0x004a5b09 0x3722594b 0x53000000) + (ref.null) + (ref.null) + (ref.null) ) ) - (call $log-i32 - (call $hashMemory) + ) + (func $func_35 (result f64) + (local $0 f32) + (local $1 v128) + (local $2 funcref) + (local $3 anyref) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (f64.const 0) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (f64.const 2.6233847629195463e-33) + ) + (func $func_35_invoker + (drop + (call $func_35) ) ) - (func $func_25 (param $0 anyref) (param $1 nullref) (param $2 v128) (param $3 f64) (result exnref) + (func $func_37 (result f64) + (local $0 (f32 funcref f64 exnref anyref)) + (local $1 v128) + (local $2 anyref) + (local $3 nullref) (local $4 i64) - (local $5 nullref) + (local $5 (v128 anyref v128 funcref)) + (local $6 funcref) + (local $7 exnref) (block (if (i32.eqz (global.get $hangLimit) ) (return - (ref.null) + (f64.const 1799288964632556427869339e121) ) ) (global.set $hangLimit @@ -888,17 +1062,49 @@ ) ) ) - (ref.null) + (block $label$0 (result f64) + (call $log-exnref + (local.tee $7 + (local.tee $7 + (ref.null) + ) + ) + ) + (call $deNan64 + (f64.reinterpret_i64 + (local.get $4) + ) + ) + ) ) - (func $func_26 (param $0 v128) (param $1 i64) (param $2 nullref) (param $3 i64) (param $4 v128) (result f64) - (local $5 funcref) + (func $func_37_invoker + (drop + (call $func_37) + ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_37) + ) + (call $log-i32 + (call $hashMemory) + ) + (drop + (call $func_37) + ) + (drop + (call $func_37) + ) + ) + (func $func_39 (param $0 nullref) (param $1 funcref) (param $2 i64) (result i64) (block (if (i32.eqz (global.get $hangLimit) ) (return - (f64.const 18505) + (local.get $2) ) ) (global.set $hangLimit @@ -908,34 +1114,148 @@ ) ) ) - (loop $label$0 (result f64) - (block - (if - (i32.eqz - (global.get $hangLimit) + (block $label$0 (result i64) + (nop) + (loop $label$1 (result i64) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (i64.const -536870912) + ) ) - (return - (f64.const -1) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) ) ) - (global.set $hangLimit - (i32.sub - (global.get $hangLimit) - (i32.const 1) + (block (result i64) + (block $label$2 + (local.set $2 + (i64.const -2097152) + ) + (if + (i32.eqz + (i32.const -2048) + ) + (block $label$3 + (if + (i32.eqz + (i32.const -1) + ) + (nop) + (nop) + ) + (local.set $2 + (if (result i64) + (i32.eqz + (i32.const 12) + ) + (block $label$4 (result i64) + (local.set $0 + (if (result nullref) + (i32.const -2147483648) + (block $label$5 (result nullref) + (i64.store8 offset=22 + (if (result i32) + (i32.eqz + (loop $label$6 (result i32) + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (i64.const 8) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block (result i32) + (if + (i32.const 319888671) + (nop) + (loop $label$7 + (block + (if + (i32.eqz + (global.get $hangLimit) + ) + (return + (local.get $2) + ) + ) + (global.set $hangLimit + (i32.sub + (global.get $hangLimit) + (i32.const 1) + ) + ) + ) + (block + (local.set $1 + (local.get $1) + ) + (br_if $label$7 + (i32.const 65535) + ) + (nop) + ) + ) + ) + (br_if $label$6 + (block $label$8 + (nop) + (br $label$1) + ) + ) + (i32.const 32) + ) + ) + ) + (block $label$9 (result i32) + (i32.const 640426599) + ) + (i32.const -127) + ) + (i64.const 1178066318063523073) + ) + (ref.null) + ) + (block $label$10 (result nullref) + (ref.null) + ) + ) + ) + (i64.const 268435456) + ) + (block $label$11 (result i64) + (local.get $2) + ) + ) + ) + ) + (block $label$12 + (nop) + ) + ) ) - ) - ) - (block (result f64) - (block $label$1 - (nop) - (call $log-v128 - (v128.const i32x4 0x00000000 0xc3e00000 0x00000000 0x403c0000) + (br_if $label$1 + (i32.eqz + (i32.const 453924633) + ) ) + (local.get $2) ) - (br_if $label$0 - (i32.const 127) - ) - (f64.const 2147483647) ) ) ) |