summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2017-11-01 23:46:07 +0100
committerAlon Zakai <alonzakai@gmail.com>2017-11-01 15:46:07 -0700
commitd38eeadc55a4b3a97b2879ba3d13a50224c28df6 (patch)
tree3e7c54475a3b3e155c258b11d32ecda09230501e /src
parentd328024d8c435379f248b0a257df2aedbe1c1b84 (diff)
downloadbinaryen-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.cpp2
-rw-r--r--src/tools/asm2wasm.cpp1
-rw-r--r--src/tools/s2wasm.cpp4
-rw-r--r--src/tools/wasm-as.cpp1
-rw-r--r--src/tools/wasm-merge.cpp1
-rw-r--r--src/tools/wasm-opt.cpp14
-rw-r--r--src/tools/wasm-shell.cpp6
-rw-r--r--src/wasm/wasm-validator.cpp2
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();
}