diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt index f16b7fdabee..dac836c23d8 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt @@ -495,7 +495,13 @@ internal object DataFlowIR { return type } - fun mapType(type: KotlinType) = mapClass(type.erasure(context).single()) + private fun choosePrimary(erasure: List): ClassDescriptor { + if (erasure.size == 1) return erasure[0] + // A parameter with constraints - choose class if exists. + return erasure.singleOrNull { !it.isInterface } ?: context.ir.symbols.any.owner + } + + fun mapType(type: KotlinType) = mapClass(choosePrimary(type.erasure(context))) // TODO: use from LlvmDeclarations. private fun getFqName(descriptor: DeclarationDescriptor): FqName =