From cbb8eb494a71b1138da4572593905b8058ab3255 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Thu, 10 Dec 2020 13:00:59 +0100 Subject: [PATCH] IC Mangling: Do not mangle functions with inline classes from Java in JVM_IR BE. Map types to boxed variants, when mapping signatures. #KT-26445 --- .../kotlin/backend/jvm/codegen/MethodSignatureMapper.kt | 9 +++++++-- .../inlineclasses/MemoizedInlineClassReplacements.kt | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt index ee529cefb01..f8b66fff13f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt @@ -195,7 +195,8 @@ class MethodSignatureMapper(private val context: JvmBackendContext) { // See also: KotlinTypeMapper.forceBoxedReturnType private fun forceBoxedReturnType(function: IrFunction): Boolean = - isBoxMethodForInlineClass(function) || forceFoxedReturnTypeOnOverride(function) || forceBoxedReturnTypeOnDefaultImplFun(function) + isBoxMethodForInlineClass(function) || forceFoxedReturnTypeOnOverride(function) || forceBoxedReturnTypeOnDefaultImplFun(function) || + function.isFromJava() && function.returnType.isInlined() private fun forceFoxedReturnTypeOnOverride(function: IrFunction) = function is IrSimpleFunction && @@ -320,7 +321,11 @@ class MethodSignatureMapper(private val context: JvmBackendContext) { private fun writeParameterType(sw: JvmSignatureWriter, type: IrType, declaration: IrDeclaration) { if (sw.skipGenericSignature()) { - typeMapper.mapType(type, TypeMappingMode.DEFAULT, sw) + if (type.isInlined() && declaration.isFromJava()) { + typeMapper.mapType(type, TypeMappingMode.GENERIC_ARGUMENT, sw) + } else { + typeMapper.mapType(type, TypeMappingMode.DEFAULT, sw) + } return } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt index 298dbd39fca..275c1d664ad 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/inlineclasses/MemoizedInlineClassReplacements.kt @@ -81,7 +81,7 @@ class MemoizedInlineClassReplacements( } // Otherwise, mangle functions with mangled parameters, ignoring constructors - it is IrSimpleFunction && (it.hasMangledParameters || mangleReturnTypes && it.hasMangledReturnType) -> + it is IrSimpleFunction && !it.isFromJava() && (it.hasMangledParameters || mangleReturnTypes && it.hasMangledReturnType) -> if (it.dispatchReceiverParameter != null) createMethodReplacement(it) else