diff options
author | Alon Zakai <azakai@google.com> | 2021-03-24 16:40:00 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-24 16:40:00 -0700 |
commit | 55af054b6b0b6d30fca7da43ac1c4522ff812e67 (patch) | |
tree | db90a7b078ec89ac234fb1ba9f7e75759cec4430 /src/passes/Print.cpp | |
parent | 17684a20196194d6b0a930b4bd10688f9e2d3fa8 (diff) | |
download | binaryen-55af054b6b0b6d30fca7da43ac1c4522ff812e67.tar.gz binaryen-55af054b6b0b6d30fca7da43ac1c4522ff812e67.tar.bz2 binaryen-55af054b6b0b6d30fca7da43ac1c4522ff812e67.zip |
Validator: Pass the module along when printing errors, so type names are used (#3727)
For example, on this invalid wat:
(module
(type $vec (struct (field i64)))
(func $test
(drop
(struct.new_with_rtt $vec (i32.const 1) (rtt.canon $vec))
)
)
)
We used to print:
[wasm-validator error in function test] struct.new operand must have proper type, on
(struct.new_with_rtt ${i64}
(i32.const 1)
(rtt.canon ${i64})
)
We will now print:
[wasm-validator error in function test] struct.new operand must have proper type, on
(struct.new_with_rtt $vec
(i32.const 1)
(rtt.canon $vec)
)
Note that $vec is used. In real-world examples the autogenerated structural name
can be huge, which this avoids.
Diffstat (limited to 'src/passes/Print.cpp')
-rw-r--r-- | src/passes/Print.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index 6dfd495c0..31a6ccaae 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -31,7 +31,8 @@ namespace wasm { static std::ostream& printExpression(Expression* expression, std::ostream& o, bool minify = false, - bool full = false); + bool full = false, + Module* wasm = nullptr); static std::ostream& printStackInst(StackInst* inst, std::ostream& o, Function* func = nullptr); @@ -3039,13 +3040,15 @@ Pass* createPrintStackIRPass() { return new PrintStackIR(); } static std::ostream& printExpression(Expression* expression, std::ostream& o, bool minify, - bool full) { + bool full, + Module* wasm) { if (!expression) { o << "(null expression)"; return o; } PrintSExpression print(o); print.setMinify(minify); + print.currModule = wasm; if (full || isFullForced()) { print.setFull(true); o << "[" << expression->type << "] "; @@ -3215,6 +3218,10 @@ std::ostream& operator<<(std::ostream& o, wasm::Expression* expression) { return wasm::printExpression(expression, o); } +std::ostream& operator<<(std::ostream& o, wasm::ModuleExpression pair) { + return wasm::printExpression(pair.second, o, false, false, &pair.first); +} + std::ostream& operator<<(std::ostream& o, wasm::StackInst& inst) { return wasm::printStackInst(&inst, o); } |