From 0f384f5878cb849d7ac1ebd4652ed677598dbe13 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Wed, 15 Feb 2023 17:20:03 +0200 Subject: [PATCH] [K/N][IR] Workaround for off-scope type parameters #KT-56500 Fixed --- .../backend/konan/lower/FunctionReferenceLowering.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionReferenceLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionReferenceLowering.kt index 39af6f31299..c30a400af4f 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionReferenceLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionReferenceLowering.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.konan.lower import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.lower.createIrBuilder +import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound import org.jetbrains.kotlin.backend.konan.NativeGenerationState import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName import org.jetbrains.kotlin.backend.konan.llvm.computeFullName @@ -276,10 +277,13 @@ internal class FunctionReferenceLowering(val generationState: NativeGenerationSt */ private fun substituteTypeParameterOfReferencedFunction(typeParameter: IrTypeParameter): IrType { if (typeParameter.parent != referencedFunction) { - compilationException( - "The type parameter ${typeParameter.render()} is not defined in the referenced function ${referencedFunction.render()}", - functionReference - ) + // TODO: We might have references to off-scope type parameters (because of the inliner, see KT-56500 for details). + // Fixing inliner requires a lot of work, so just return the upper bound for now instead of throwing an error. + // compilationException( + // "The type parameter ${typeParameter.render()} is not defined in the referenced function ${referencedFunction.render()}", + // functionReference + // ) + return typeParameter.erasedUpperBound.defaultType } return typeParameterRemapper.remapType(allTypeParametersAndArguments[typeParameter.index].second) }