From 3c66ad3c7c602416d4cf674b3d7528d9acd6d51f Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 25 Nov 2020 15:36:04 -0800 Subject: [TypedFunctionReferences] Enable call_ref in fuzzer, and fix minor misc fuzz bugs (#3401) * Count signatures in tuple locals. * Count nested signature types (confirming @aheejin was right, that was missing). * Inlining was using the wrong type. * OptimizeInstructions should return -1 for unhandled types, not error. * The fuzzer should check for ref types as well, not just typed function references, similar to what GC does. * The fuzzer now creates a function if it has no other option for creating a constant expression of a function type, then does a ref.func of that. * Handle unreachability in call_ref binary reading. * S-expression parsing fixes in more places, and add a tiny fuzzer for it. * Switch fuzzer test to just have the metrics, and not print all the fuzz output which changes a lot. Also fix noprint handling which only worked on binaries before. * Fix Properties::getLiteral() to use the specific function type properly, and make Literal's function constructor require that, to prevent future bugs. * Turn all input types into nullable types, for now. --- scripts/test/wasm_opt.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'scripts/test') diff --git a/scripts/test/wasm_opt.py b/scripts/test/wasm_opt.py index d6441bd8d..ab708c636 100644 --- a/scripts/test/wasm_opt.py +++ b/scripts/test/wasm_opt.py @@ -57,7 +57,8 @@ def test_wasm_opt(): passes_file = os.path.join(shared.get_test_dir('passes'), passname + '.passes') if os.path.exists(passes_file): passname = open(passes_file).read().strip() - opts = [('--' + p if not p.startswith('O') and p != 'g' else '-' + p) for p in passname.split('_')] + passes = [p for p in passname.split('_') if p != 'noprint'] + opts = [('--' + p if not p.startswith('O') and p != 'g' else '-' + p) for p in passes] actual = '' for module, asserts in support.split_wast(t): assert len(asserts) == 0 @@ -171,7 +172,8 @@ def update_wasm_opt_tests(): passes_file = os.path.join(shared.get_test_dir('passes'), passname + '.passes') if os.path.exists(passes_file): passname = open(passes_file).read().strip() - opts = [('--' + p if not p.startswith('O') and p != 'g' else '-' + p) for p in passname.split('_')] + passes = [p for p in passname.split('_') if p != 'noprint'] + opts = [('--' + p if not p.startswith('O') and p != 'g' else '-' + p) for p in passes] actual = '' for module, asserts in support.split_wast(t): assert len(asserts) == 0 -- cgit v1.2.3