diff --git a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmExpressionBuilder.kt b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmExpressionBuilder.kt index 614569d9a68..26d5fb7dea2 100644 --- a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmExpressionBuilder.kt +++ b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmExpressionBuilder.kt @@ -9,6 +9,8 @@ abstract class WasmExpressionBuilder { abstract fun buildInstr(op: WasmOp, vararg immediates: WasmImmediate) abstract var numberOfNestedBlocks: Int + abstract val lastInstr: WasmOp? + fun buildConstI32(value: Int) { buildInstr(WasmOp.I32_CONST, WasmImmediate.ConstI32(value)) } @@ -30,6 +32,10 @@ abstract class WasmExpressionBuilder { } fun buildUnreachable() { + // Unreachable is not needed + if (lastInstr == WasmOp.UNREACHABLE || lastInstr == WasmOp.RETURN) + return + buildInstr(WasmOp.UNREACHABLE) } diff --git a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmIrExpressionBuilder.kt b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmIrExpressionBuilder.kt index ff782b18a8a..54bc7eaf983 100644 --- a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmIrExpressionBuilder.kt +++ b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/WasmIrExpressionBuilder.kt @@ -19,4 +19,7 @@ class WasmIrExpressionBuilder( assert(value >= 0) { "end without matching block" } field = value } + + override val lastInstr: WasmOp? + get() = expression.lastOrNull()?.operator }