diff options
-rw-r--r-- | src/wasm/wasm-ir-builder.cpp | 4 | ||||
-rw-r--r-- | test/lit/wat-kitchen-sink.wast | 5 |
2 files changed, 4 insertions, 5 deletions
diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp index 99462e9a8..7b88d345f 100644 --- a/src/wasm/wasm-ir-builder.cpp +++ b/src/wasm/wasm-ir-builder.cpp @@ -175,7 +175,9 @@ Result<Expression*> IRBuilder::pop(size_t size) { CHECK_ERR(packageHoistedValue(*hoisted, size)); auto* ret = scope.exprStack.back(); - if (ret->type.size() == size) { + // If the top value has the correct size, we can pop it and be done. + // Unreachable values satisfy any size. + if (ret->type.size() == size || ret->type == Type::unreachable) { scope.exprStack.pop_back(); return ret; } diff --git a/test/lit/wat-kitchen-sink.wast b/test/lit/wat-kitchen-sink.wast index e67d3f438..10c58b603 100644 --- a/test/lit/wat-kitchen-sink.wast +++ b/test/lit/wat-kitchen-sink.wast @@ -3652,10 +3652,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (tuple.make 2 - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $return-two-second-unreachable (param i32) (result i32 i64) |