From d7861e89bd291aef0279aa04b877e70827980c9a Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Thu, 26 Apr 2018 18:53:39 +0300 Subject: [PATCH] Quickfix for intersection types in devirtualization. --- .../kotlin/backend/konan/optimizations/DataFlowIR.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 =