diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/pass.cpp | 8 | ||||
-rw-r--r-- | src/tools/s2wasm.cpp | 2 | ||||
-rw-r--r-- | src/tools/wasm-as.cpp | 2 | ||||
-rw-r--r-- | src/tools/wasm-reduce.cpp | 3 | ||||
-rw-r--r-- | src/wasm-validator.h | 10 | ||||
-rw-r--r-- | src/wasm/wasm-validator.cpp | 10 |
6 files changed, 24 insertions, 11 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index 6cfe77a01..044a97833 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -194,6 +194,10 @@ void PassRunner::run() { // for debug logging purposes, run each pass in full before running the other auto totalTime = std::chrono::duration<double>(0); size_t padding = 0; + WasmValidator::Flags validationFlags = WasmValidator::Minimal; + if (options.validateGlobally) { + validationFlags = validationFlags | WasmValidator::Globally; + } std::cerr << "[PassRunner] running passes..." << std::endl; for (auto pass : passes) { padding = std::max(padding, pass->name.size()); @@ -227,7 +231,7 @@ void PassRunner::run() { totalTime += diff; // validate, ignoring the time std::cerr << "[PassRunner] (validating)\n"; - if (!WasmValidator().validate(*wasm, false, options.validateGlobally)) { + if (!WasmValidator().validate(*wasm, validationFlags)) { if (passDebug >= 2) { std::cerr << "Last pass (" << pass->name << ") broke validation. Here is the module before: \n" << moduleBefore.str() << "\n"; } else { @@ -242,7 +246,7 @@ void PassRunner::run() { std::cerr << "[PassRunner] passes took " << totalTime.count() << " seconds." << std::endl; // validate std::cerr << "[PassRunner] (final validation)\n"; - if (!WasmValidator().validate(*wasm, false, options.validateGlobally)) { + if (!WasmValidator().validate(*wasm, validationFlags)) { std::cerr << "final module does not validate\n"; abort(); } diff --git a/src/tools/s2wasm.cpp b/src/tools/s2wasm.cpp index 8411d4046..2556cf482 100644 --- a/src/tools/s2wasm.cpp +++ b/src/tools/s2wasm.cpp @@ -195,7 +195,7 @@ int main(int argc, const char *argv[]) { if (options.extra["validate"] != "none") { if (options.debug) std::cerr << "Validating..." << std::endl; if (!wasm::WasmValidator().validate(linker.getOutput().wasm, - options.extra["validate"] == "web")) { + WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) { Fatal() << "Error: linked module is not valid.\n"; } } diff --git a/src/tools/wasm-as.cpp b/src/tools/wasm-as.cpp index d4b495562..956ad213f 100644 --- a/src/tools/wasm-as.cpp +++ b/src/tools/wasm-as.cpp @@ -93,7 +93,7 @@ int main(int argc, const char *argv[]) { if (options.extra["validate"] != "none") { if (options.debug) std::cerr << "Validating..." << std::endl; if (!wasm::WasmValidator().validate(wasm, - options.extra["validate"] == "web")) { + WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) { Fatal() << "Error: input module is not valid.\n"; } } diff --git a/src/tools/wasm-reduce.cpp b/src/tools/wasm-reduce.cpp index 29484cc7a..90ae9bbe6 100644 --- a/src/tools/wasm-reduce.cpp +++ b/src/tools/wasm-reduce.cpp @@ -414,7 +414,8 @@ struct Reducer : public WalkerPass<PostWalker<Reducer, UnifiedExpressionVisitor< } for (auto& func : functions) { curr->removeFunction(func.name); - if (WasmValidator().validate(*curr, false, true, true /* override quiet */) && writeAndTestReduction()) { + if (WasmValidator().validate(*curr, WasmValidator::Globally | WasmValidator::Quiet) && + writeAndTestReduction()) { std::cerr << "| removed function " << func.name << '\n'; noteReduction(); } else { diff --git a/src/wasm-validator.h b/src/wasm-validator.h index 250779b91..9f9cddb02 100644 --- a/src/wasm-validator.h +++ b/src/wasm-validator.h @@ -49,7 +49,15 @@ namespace wasm { struct WasmValidator { - bool validate(Module& module, bool validateWeb = false, bool validateGlobally = true, bool quiet = false); + enum FlagValues { + Minimal = 0, + Web = 1 << 0, + Globally = 1 << 1, + Quiet = 1 << 2 + }; + typedef uint32_t Flags; + + bool validate(Module& module, Flags flags = Globally); }; } // namespace wasm diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp index ebefa8b65..6d75296a4 100644 --- a/src/wasm/wasm-validator.cpp +++ b/src/wasm/wasm-validator.cpp @@ -997,18 +997,18 @@ static void validateModule(Module& module, ValidationInfo& info) { // TODO: If we want the validator to be part of libwasm rather than libpasses, then // Using PassRunner::getPassDebug causes a circular dependence. We should fix that, // perhaps by moving some of the pass infrastructure into libsupport. -bool WasmValidator::validate(Module& module, bool validateWeb, bool validateGlobally, bool quiet) { +bool WasmValidator::validate(Module& module, Flags flags) { ValidationInfo info; - info.validateWeb = validateWeb; - info.validateGlobally = validateGlobally; - info.quiet = quiet; + info.validateWeb = flags & Web; + info.validateGlobally = flags & Globally; + info.quiet = flags & Quiet; // parallel wasm logic validation PassRunner runner(&module); runner.add<FunctionValidator>(&info); runner.setIsNested(true); runner.run(); // validate globally - if (validateGlobally) { + if (info.validateGlobally) { validateImports(module, info); validateExports(module, info); validateGlobals(module, info); |