summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/pass.cpp8
-rw-r--r--src/tools/s2wasm.cpp2
-rw-r--r--src/tools/wasm-as.cpp2
-rw-r--r--src/tools/wasm-reduce.cpp3
-rw-r--r--src/wasm-validator.h10
-rw-r--r--src/wasm/wasm-validator.cpp10
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);