diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 53dbbbb846a..279ffd4a45f 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -795,7 +795,7 @@ class ExpressionCodegen( get() = parent.let { parent -> val isBoxedResult = this is IrValueParameter && parent is IrSimpleFunction && parent.dispatchReceiverParameter != this && - (parent.parent as? IrClass)?.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME && + (parent.parent as? IrClass)?.isClassWithFqName(StandardNames.RESULT_FQ_NAME) != true && parent.resultIsActuallyAny(index) == true return if (isBoxedResult) context.irBuiltIns.anyNType else type } diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt index 226f86f6183..3836a7fb99f 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt @@ -371,7 +371,7 @@ internal class JvmInlineClassLowering( get() { if (!isSingleFieldValueClass) return false // Before version 1.4, we cannot rely on the Result.equals-impl0 method - return fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME || + return !isClassWithFqName(StandardNames.RESULT_FQ_NAME) || context.state.languageVersionSettings.apiVersion >= ApiVersion.KOTLIN_1_4 } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt index 6ffbfe7cef2..33eafa5d1c2 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt @@ -134,7 +134,7 @@ object InlineClassAbi { fun IrType.getRequiresMangling(includeInline: Boolean = true, includeMFVC: Boolean = true): Boolean { val irClass = erasedUpperBound - return irClass.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME && when { + return !irClass.isClassWithFqName(StandardNames.RESULT_FQ_NAME) && when { irClass.isSingleFieldValueClass -> includeInline irClass.isMultiFieldValueClass -> includeMFVC else -> false diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt index 32b83b70c1a..660759ddd7a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt @@ -80,6 +80,9 @@ private fun IrClass.hasFqNameEqualToSignature(signature: IdSignature.CommonSigna fun IrClassifierSymbol.isClassWithFqName(fqName: FqNameUnsafe): Boolean = this is IrClassSymbol && classFqNameEquals(this, fqName) +fun IrClass.isClassWithFqName(fqName: FqName): Boolean = + classFqNameEquals(this, fqName) + private fun classFqNameEquals(symbol: IrClassSymbol, fqName: FqNameUnsafe): Boolean { assert(symbol.isBound) return classFqNameEquals(symbol.owner, fqName) @@ -107,7 +110,10 @@ val primitiveArrayTypesSignatures: Map