[Wasm] Fix invalid cast generation for inline classes

This commit is contained in:
Igor Yakovlev
2023-01-03 19:24:55 +01:00
committed by teamcity
parent 1fa7c7119b
commit f7940a2d46
12 changed files with 67 additions and 10 deletions
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.backend.common.lower.AbstractValueUsageTransformer
import org.jetbrains.kotlin.backend.common.pop
import org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
@@ -136,14 +135,6 @@ class AutoboxingTransformer(context: JsCommonBackendContext) : AbstractValueUsag
return res
}
override fun visitFunction(declaration: IrFunction): IrStatement {
return super.visitFunction(declaration)
}
override fun visitVararg(expression: IrVararg): IrExpression {
return super.visitVararg(expression)
}
override fun IrExpression.useAsResult(enclosing: IrExpression): IrExpression {
if (processingReturnStack.lastOrNull()?.value == enclosing && enclosing is IrReturnableBlock) {
return useReturnableExpressionAsType(enclosing.type)
@@ -739,7 +739,11 @@ class BodyGenerator(
// REF -> REF -> REF_CAST
if (!expectedIsPrimitive) {
generateRefNullCast(actualTypeErased, expectedTypeErased)
if (expectedClassErased.isSubclassOf(actualClassErased)) {
generateRefNullCast(actualTypeErased, expectedTypeErased)
} else {
body.buildUnreachable()
}
}
}