From 7459e5af01fbe3a8e75e73783794b4cdffda34e9 Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Fri, 5 Feb 2016 05:11:50 -0800 Subject: Fix select The ordering changed in: https://github.com/WebAssembly/spec/pull/221 Which changed the spec tests, breaking sexpr-wasm because it pulls in the spec tests. This was then fixed: https://github.com/WebAssembly/sexpr-wasm-prototype/commit/23dc368148fc7827a603e3853f5a40287eb9effe Which in turn breaks when binaryen feeds sexpr-wasm .wast files with the old select operand ordering. Note that this PR has new failures when running the torture tests in binaryen-shell: the order of evaluation is correct in binaryen-shell but isn't emitted properly by LLVM in the .s files. This will require another patch to fix LLVM. --- src/wasm.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/wasm.h') diff --git a/src/wasm.h b/src/wasm.h index b9d0d6822..893c777c4 100644 --- a/src/wasm.h +++ b/src/wasm.h @@ -911,15 +911,15 @@ class Select : public Expression { public: Select() : Expression(SelectId) {} - Expression *condition, *ifTrue, *ifFalse; + Expression *ifTrue, *ifFalse, *condition; std::ostream& doPrint(std::ostream &o, unsigned indent) { o << '('; prepareColor(o) << printWasmType(type) << ".select"; incIndent(o, indent); - printFullLine(o, indent, condition); printFullLine(o, indent, ifTrue); printFullLine(o, indent, ifFalse); + printFullLine(o, indent, condition); return decIndent(o, indent); } @@ -1447,9 +1447,9 @@ struct ChildWalker : public WasmWalkerBase> { parent.walk(curr->right); } void visitSelect(Select *curr) { - parent.walk(curr->condition); parent.walk(curr->ifTrue); parent.walk(curr->ifFalse); + parent.walk(curr->condition); } void visitReturn(Return *curr) { parent.walk(curr->value); -- cgit v1.2.3