blob: 9c0125a92065c420c3d53cd560d5a452730bac1f [file] [log] [blame] [edit]
# Copyright 2024 WebAssembly Community Group participants
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
# Tests that the fuzzers should not operate on.
unfuzzable = [
# Float16 is still experimental.
'f16.wast',
# TODO: fuzzer and interpreter support for strings
'strings.wast',
'simplify-locals-strings.wast',
'string-lowering-instructions.wast',
# TODO: fuzzer and interpreter support for extern conversions
'extern-conversions.wast',
# ignore DWARF because it is incompatible with multivalue atm
'zlib.wasm',
'cubescript.wasm',
'class_with_dwarf_noprint.wasm',
'fib2_dwarf.wasm',
'fib_nonzero-low-pc_dwarf.wasm',
'inlined_to_start_dwarf.wasm',
'fannkuch3_manyopts_dwarf.wasm',
'fib2_emptylocspan_dwarf.wasm',
'fannkuch3_dwarf.wasm',
'dwarf-local-order.wasm',
'strip-producers.wasm',
'multi_unit_abbrev_noprint.wasm',
'reverse_dwarf_abbrevs.wasm',
'print_g.wasm',
'print_g_strip-dwarf.wasm',
'fannkuch0_dwarf.wasm',
'dwarfdump_roundtrip_dwarfdump.wasm',
'dwarfdump.wasm',
'fannkuch3_dwarf.wasm',
'dwarf-local-order.wasm',
'dwarf_unit_with_no_abbrevs_noprint.wasm',
'strip-debug.wasm',
'multi_line_table_dwarf.wasm',
'dwarf_with_exceptions.wasm',
'strip-dwarf.wasm',
'ignore_missing_func_dwarf.wasm',
'print.wasm',
# ignore linking section as it causes us to warn about it not being fully
# supported
'strip-target-features.wasm',
# TODO fuzzer support for multimemory
'multi-memories-atomics64.wast',
'multi-memories-basics.wast',
'multi-memories-simd.wast',
'multi-memories-atomics64.wasm',
'multi-memories-basics.wasm',
'multi-memories-simd.wasm',
'multi-memories_size.wast',
# TODO: fuzzer support for internalize/externalize
'optimize-instructions-gc-extern.wast',
'gufa-extern.wast',
# the fuzzer does not support imported memories
'multi-memory-lowering-import.wast',
'multi-memory-lowering-import-error.wast',
# the fuzzer does not support struct RMW ops
'gc-atomics.wast',
'gc-atomics-null-refs.wast',
'shared-structs.wast',
'heap2local-rmw.wast',
'optimize-instructions-struct-rmw.wast',
'gto-removals-rmw.wast',
'type-refining-rmw.wast',
'type-ssa-exact-rmw.wast',
'cfp-rmw.wast',
# contains too many segments to run in a wasm VM
'limit-segments_disable-bulk-memory.wast',
# https://github.com/WebAssembly/binaryen/issues/7176
'names.wast',
# huge amount of locals that make it extremely slow
'too_much_for_liveness.wasm',
# has (ref extern) imports, which the fuzzer cannot create values for when
# it removes unknown imports
'string-lifting.wast',
'string-lifting-custom-module.wast',
# TODO: fuzzer support for remaining stack switching instructions: switch,
# cont.bind
'cont.wast',
'precompute-stack-switching.wast',
'coalesce-locals-stack-switching.wast',
'stack_switching_switch_2.wast',
'stack_switching_switch.wast',
'unsubtyping-stack-switching.wast',
# TODO: fix split_wast() on tricky escaping situations like a string ending
# in \\" (the " is not escaped - there is an escaped \ before it)
'string-lifting-section.wast',
# TODO: fuzzer support for uninhabitable imported globals
'exact-references.wast',
# We do not have full suppor for these imports in all parts of the fuzzer.
'instrument-branch-hints.wast',
# Contains a subtype chain that exceeds depth limits.
'reorder-types-real.wast',
# Contains a name with "__fuzz_split", indicating it is emitted by
# wasm-split, confusing the fuzzer because it is in the initial content.
'fuzz_shell_second.wast',
]
def is_fuzzable(name):
name = os.path.basename(name)
# It makes no sense to fuzz things that check validation errors.
if '.fail.' in name:
return False
return name not in unfuzzable