diff options
-rw-r--r-- | src/passes/pass.cpp | 2 | ||||
-rw-r--r-- | src/tools/asm2wasm.cpp | 1 | ||||
-rw-r--r-- | src/tools/s2wasm.cpp | 4 | ||||
-rw-r--r-- | src/tools/wasm-as.cpp | 1 | ||||
-rw-r--r-- | src/tools/wasm-merge.cpp | 1 | ||||
-rw-r--r-- | src/tools/wasm-opt.cpp | 14 | ||||
-rw-r--r-- | src/tools/wasm-shell.cpp | 6 | ||||
-rw-r--r-- | src/wasm/wasm-validator.cpp | 2 |
8 files changed, 25 insertions, 6 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index d92a4a80c..f2463691a 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -232,6 +232,7 @@ void PassRunner::run() { // validate, ignoring the time std::cerr << "[PassRunner] (validating)\n"; if (!WasmValidator().validate(*wasm, options.features, validationFlags)) { + WasmPrinter::printModule(wasm); if (passDebug >= 2) { std::cerr << "Last pass (" << pass->name << ") broke validation. Here is the module before: \n" << moduleBefore.str() << "\n"; } else { @@ -247,6 +248,7 @@ void PassRunner::run() { // validate std::cerr << "[PassRunner] (final validation)\n"; if (!WasmValidator().validate(*wasm, options.features, validationFlags)) { + WasmPrinter::printModule(wasm); std::cerr << "final module does not validate\n"; abort(); } diff --git a/src/tools/asm2wasm.cpp b/src/tools/asm2wasm.cpp index 4ec68283f..3f70e0388 100644 --- a/src/tools/asm2wasm.cpp +++ b/src/tools/asm2wasm.cpp @@ -207,6 +207,7 @@ int main(int argc, const char *argv[]) { } if (!WasmValidator().validate(wasm, options.passOptions.features)) { + WasmPrinter::printModule(&wasm); Fatal() << "error in validating output"; } diff --git a/src/tools/s2wasm.cpp b/src/tools/s2wasm.cpp index 37604e74b..96d9ae5ce 100644 --- a/src/tools/s2wasm.cpp +++ b/src/tools/s2wasm.cpp @@ -194,8 +194,10 @@ 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, + Module* output = &linker.getOutput().wasm; + if (!wasm::WasmValidator().validate(*output, WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) { + WasmPrinter::printModule(output); Fatal() << "Error: linked module is not valid.\n"; } } diff --git a/src/tools/wasm-as.cpp b/src/tools/wasm-as.cpp index d456f43fd..0e053e05a 100644 --- a/src/tools/wasm-as.cpp +++ b/src/tools/wasm-as.cpp @@ -94,6 +94,7 @@ int main(int argc, const char *argv[]) { if (options.debug) std::cerr << "Validating..." << std::endl; if (!wasm::WasmValidator().validate(wasm, Feature::All, WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) { + WasmPrinter::printModule(&wasm); Fatal() << "Error: input module is not valid.\n"; } } diff --git a/src/tools/wasm-merge.cpp b/src/tools/wasm-merge.cpp index 441cdc0f7..7a713675f 100644 --- a/src/tools/wasm-merge.cpp +++ b/src/tools/wasm-merge.cpp @@ -627,6 +627,7 @@ int main(int argc, const char* argv[]) { } if (!WasmValidator().validate(output)) { + WasmPrinter::printModule(&output); Fatal() << "error in validating output"; } diff --git a/src/tools/wasm-opt.cpp b/src/tools/wasm-opt.cpp index 7c2a3a35a..91e1633f0 100644 --- a/src/tools/wasm-opt.cpp +++ b/src/tools/wasm-opt.cpp @@ -129,6 +129,7 @@ int main(int argc, const char* argv[]) { } if (!WasmValidator().validate(wasm, features)) { + WasmPrinter::printModule(&wasm); Fatal() << "error in validating input"; } } else { @@ -136,6 +137,7 @@ int main(int argc, const char* argv[]) { TranslateToFuzzReader reader(wasm); reader.read(options.extra["infile"]); if (!WasmValidator().validate(wasm, features)) { + WasmPrinter::printModule(&wasm); std::cerr << "translate-to-fuzz must always generate a valid module"; abort(); } @@ -176,7 +178,11 @@ int main(int argc, const char* argv[]) { if (options.runningPasses()) { if (options.debug) std::cerr << "running passes...\n"; options.runPasses(wasm); - assert(WasmValidator().validate(wasm, features)); + bool valid = WasmValidator().validate(wasm, features); + if (!valid) { + WasmPrinter::printModule(&wasm); + } + assert(valid); } if (fuzzExec) { @@ -192,7 +198,11 @@ int main(int argc, const char* argv[]) { auto input = buffer.getAsChars(); WasmBinaryBuilder parser(second, input, false); parser.read(); - assert(WasmValidator().validate(second, features)); + bool valid = WasmValidator().validate(second, features); + if (!valid) { + WasmPrinter::printModule(&second); + } + assert(valid); } results.check(*compare); } diff --git a/src/tools/wasm-shell.cpp b/src/tools/wasm-shell.cpp index cd8c27437..965887cf9 100644 --- a/src/tools/wasm-shell.cpp +++ b/src/tools/wasm-shell.cpp @@ -287,7 +287,11 @@ int main(int argc, const char* argv[]) { builders[moduleName].swap(builder); modules[moduleName].swap(module); i++; - assert(WasmValidator().validate(*modules[moduleName])); + bool valid = WasmValidator().validate(*modules[moduleName]); + if (!valid) { + WasmPrinter::printModule(modules[moduleName].get()); + } + assert(valid); run_asserts(moduleName, &i, &checked, modules[moduleName].get(), &root, builders[moduleName].get(), entry); } else { run_asserts(Name(), &i, &checked, nullptr, &root, nullptr, entry); diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp index 4359b4e13..4564191c2 100644 --- a/src/wasm/wasm-validator.cpp +++ b/src/wasm/wasm-validator.cpp @@ -1036,8 +1036,6 @@ bool WasmValidator::validate(Module& module, FeatureSet features, Flags flags) { std::cerr << info.getStream(func.get()).str(); } std::cerr << info.getStream(nullptr).str(); - // also print the module - WasmPrinter::printModule(&module, std::cerr); } return info.valid.load(); } |