diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt index c578ef0058d..7c45a0bfbff 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicArrayConstructors import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.config.CommonConfigurationKeys +import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind @@ -522,10 +523,15 @@ abstract class InlineCodegen( return SMAPAndMethodNode(intrinsic, createDefaultFakeSMAP()) } - val asmMethod = if (callDefault) - state.typeMapper.mapDefaultMethod(functionDescriptor, sourceCompiler.contextKind) - else - mangleSuspendInlineFunctionAsmMethodIfNeeded(functionDescriptor, jvmSignature.asmMethod) + var asmMethod = mapMethod(callDefault) + if (asmMethod.name.contains("-") && + !state.configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME) && + classFileContainsMethod(functionDescriptor, state, asmMethod) == false + ) { + state.typeMapper.useOldManglingRulesForFunctionAcceptingInlineClass = true + asmMethod = mapMethod(callDefault) + state.typeMapper.useOldManglingRulesForFunctionAcceptingInlineClass = false + } val directMember = getDirectMemberAndCallableFromObject(functionDescriptor) if (!isBuiltInArrayIntrinsic(functionDescriptor) && !descriptorIsDeserialized(directMember)) { @@ -537,6 +543,10 @@ abstract class InlineCodegen( return getCompiledMethodNodeInner(functionDescriptor, directMember, asmMethod, methodOwner, state, jvmSignature) } + private fun mapMethod(callDefault: Boolean): Method = + if (callDefault) state.typeMapper.mapDefaultMethod(functionDescriptor, sourceCompiler.contextKind) + else mangleSuspendInlineFunctionAsmMethodIfNeeded(functionDescriptor, jvmSignature.asmMethod) + companion object { internal fun createSpecialInlineMethodNodeFromBinaries(functionDescriptor: FunctionDescriptor, state: GenerationState): MethodNode { diff --git a/compiler/testData/codegen/box/inlineClasses/multifileClass.kt b/compiler/testData/codegen/box/inlineClasses/multifileClass.kt index d3174796a36..81188f59cab 100644 --- a/compiler/testData/codegen/box/inlineClasses/multifileClass.kt +++ b/compiler/testData/codegen/box/inlineClasses/multifileClass.kt @@ -1,5 +1,4 @@ // WITH_RUNTIME -// IGNORE_BACKEND: JVM // DONT_TARGET_EXACT_BACKEND: WASM fun box(): String {