summaryrefslogtreecommitdiff
path: root/src/binary-writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/binary-writer.cc')
-rw-r--r--src/binary-writer.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/binary-writer.cc b/src/binary-writer.cc
index 409d385b..b0828723 100644
--- a/src/binary-writer.cc
+++ b/src/binary-writer.cc
@@ -678,9 +678,21 @@ void BinaryWriter::WriteExpr(const Func* func, const Expr* expr) {
case ExprType::Return:
WriteOpcode(stream_, Opcode::Return);
break;
- case ExprType::Select:
- WriteOpcode(stream_, Opcode::Select);
+ case ExprType::Select: {
+ auto* select_expr = cast<SelectExpr>(expr);
+ if (select_expr->result_type.size() == 1 &&
+ select_expr->result_type[0] == Type::Any) {
+ WriteOpcode(stream_, Opcode::Select);
+ } else {
+ WriteOpcode(stream_, Opcode::SelectT);
+ WriteU32Leb128(stream_, select_expr->result_type.size(),
+ "num result types");
+ for (Type t : select_expr->result_type) {
+ WriteType(stream_, t, "result type");
+ }
+ }
break;
+ }
case ExprType::Store:
WriteLoadStoreExpr<StoreExpr>(func, expr, "store offset");
break;