diff --git a/src/asm2wasm.h b/src/asm2wasm.h index d56bf0ccefb..22db2636a07 100644 --- a/src/asm2wasm.h +++ b/src/asm2wasm.h @@ -1109,9 +1109,9 @@ Function* Asm2WasmBuilder::processFunction(Ref ast) { flip->right = get(); flip->type = i32; auto select = allocator.alloc(); auto inputs = getInputs(3); - curr->condition = inputs[0]; curr->ifTrue = inputs[1]; curr->ifFalse = inputs[2]; + curr->condition = inputs[0]; + assert(curr->condition->type == i32); curr->type = type; setOutput(curr, assign); }; diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 022dd04bc4f..3f9427ed7dd 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -620,13 +620,13 @@ class ModuleInstance { } Flow visitSelect(Select *curr) { NOTE_ENTER("Select"); - Flow condition = visit(curr->condition); - if (condition.breaking()) return condition; - NOTE_EVAL1(condition.value); Flow ifTrue = visit(curr->ifTrue); if (ifTrue.breaking()) return ifTrue; Flow ifFalse = visit(curr->ifFalse); if (ifFalse.breaking()) return ifFalse; + Flow condition = visit(curr->condition); + if (condition.breaking()) return condition; + NOTE_EVAL1(condition.value); return condition.value.geti32() ? ifTrue : ifFalse; // ;-) } Flow visitReturn(Return *curr) { diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index e2a880e51c8..64dc6a4548c 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -633,9 +633,9 @@ class SExpressionWasmBuilder { Expression* makeSelect(Element& s, WasmType type) { auto ret = allocator.alloc