[IR][K/N] Rolled back some earlier changes
... to fix arisen problem around boxing. This basically reverts
the commit 749dcf77b84de20ebee01a0a3fdb8d47d1edba20
#KT-75483 Fixed
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt
index b126207..703365b 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/NativeLoweringPhases.kt
@@ -454,7 +454,7 @@
private val autoboxPhase = createFileLoweringPhase(
::Autoboxing,
name = "Autobox",
- prerequisite = setOf(bridgesPhase, coroutinesPhase, eraseGenericCallsReturnTypesPhase)
+ prerequisite = setOf(bridgesPhase, coroutinesPhase)
)
private val constructorsLoweringPhase = createFileLoweringPhase(
@@ -609,8 +609,8 @@
bridgesPhase,
exportInternalAbiPhase.takeIf { this.produce.isCache },
useInternalAbiPhase,
- eraseGenericCallsReturnTypesPhase,
autoboxPhase,
+ eraseGenericCallsReturnTypesPhase,
constructorsLoweringPhase,
)
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt
index d33b04d..c295439 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/Autoboxing.kt
@@ -106,6 +106,10 @@
val skipTypeCheck = forceSkipTypeCheck || !insertSafeCasts || (this as? IrTypeOperatorCall)?.operator == IrTypeOperator.CAST
val actualType = when (this) {
is IrGetField -> this.symbol.owner.type
+ is IrCall -> when (this.symbol) {
+ symbols.reinterpret -> this.getTypeArgument(1)!!
+ else -> this.target.returnType
+ }
is IrTypeOperatorCall -> when (this.operator) {
IrTypeOperator.CAST -> context.irBuiltIns.anyNType
IrTypeOperator.IMPLICIT_CAST -> if (insertSafeCasts) this.type else context.irBuiltIns.anyNType
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/GenericCallsReturnTypeEraser.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/GenericCallsReturnTypeEraser.kt
index 62beb5a..53aed99 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/GenericCallsReturnTypeEraser.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/GenericCallsReturnTypeEraser.kt
@@ -6,23 +6,17 @@
package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
-import org.jetbrains.kotlin.backend.common.lower.at
-import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
-import org.jetbrains.kotlin.backend.common.lower.irImplicitCoercionToUnit
import org.jetbrains.kotlin.backend.konan.Context
-import org.jetbrains.kotlin.ir.builders.irImplicitCast
+import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.expressions.IrBody
import org.jetbrains.kotlin.ir.expressions.IrCall
-import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.types.classifierOrNull
-import org.jetbrains.kotlin.ir.types.isNothing
-import org.jetbrains.kotlin.ir.types.isUnit
-import org.jetbrains.kotlin.ir.util.eraseTypeParameters
import org.jetbrains.kotlin.ir.util.target
-import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
-import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
+import org.jetbrains.kotlin.ir.util.eraseTypeParameters
+import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
+import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
/*
* FE substitutes types for generic calls, but by the end of the lowerings pipeline, the return types should be
@@ -34,27 +28,20 @@
private val reinterpret = context.symbols.reinterpret.owner
override fun lower(irBody: IrBody, container: IrDeclaration) {
- val irBuilder = context.createIrBuilder(container.symbol)
- irBody.transformChildrenVoid(object : IrElementTransformerVoid() {
- override fun visitCall(expression: IrCall): IrExpression {
- expression.transformChildrenVoid(this)
+ irBody.acceptChildrenVoid(object : IrVisitorVoid() {
+ override fun visitElement(element: IrElement) {
+ element.acceptChildrenVoid(this)
+ }
+
+ override fun visitCall(expression: IrCall) {
+ expression.acceptChildrenVoid(this)
val callee = expression.target
if (callee != reinterpret && callee.returnType.classifierOrNull is IrTypeParameterSymbol) {
- val actualType = callee.returnType.eraseTypeParameters()
- val expectedType = expression.type
- if (actualType != expectedType) {
- expression.type = actualType
- return when {
- expectedType.isUnit() -> irBuilder.at(expression).irImplicitCoercionToUnit(expression)
- expectedType.isNothing() -> expression
- else -> irBuilder.at(expression).irImplicitCast(expression, expectedType)
- }
- }
+ expression.type = callee.returnType.eraseTypeParameters()
}
-
- return expression
}
})
}
+
}
\ No newline at end of file