diff options
author | Daniel Wirtz <dcode@dcode.io> | 2017-11-01 23:46:07 +0100 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-11-01 15:46:07 -0700 |
commit | d38eeadc55a4b3a97b2879ba3d13a50224c28df6 (patch) | |
tree | 3e7c54475a3b3e155c258b11d32ecda09230501e /src | |
parent | d328024d8c435379f248b0a257df2aedbe1c1b84 (diff) | |
download | binaryen-d38eeadc55a4b3a97b2879ba3d13a50224c28df6.tar.gz binaryen-d38eeadc55a4b3a97b2879ba3d13a50224c28df6.tar.bz2 binaryen-d38eeadc55a4b3a97b2879ba3d13a50224c28df6.zip |
Restrict validation output to just validation errors in the API (#1253)
Do not print the entire and possibly very large module when validation fails. Leave printing to tools using the validator, instead of always doing it in the validator where it can't be overridden.
Diffstat (limited to 'src')
-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(); } |