diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EscapeAnalysis.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EscapeAnalysis.kt index 8ca443a499f..076a5cc3689 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EscapeAnalysis.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EscapeAnalysis.kt @@ -100,8 +100,9 @@ internal object EscapeAnalysis { open fun add(entry: RoleInfoEntry) = entries.add(entry) } + // TODO: Seems like overhead to analyze value types but they might be boxed, think how to optimize this. private fun RuntimeAware.isInteresting(type: KotlinType?): Boolean = - type != null && !type.isUnit() && !type.isNothing() && isObjectType(type) + type != null && !type.isUnit() && !type.isNothing()/* && isObjectType(type)*/ private class Roles { val data = HashMap() diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt index 1f0f363ce57..1be283f5b73 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/CodeGenerator.kt @@ -253,8 +253,12 @@ internal class FunctionGenerationContext(val function: LLVMValueRef, } is SlotType.PARAM_IF_ARENA -> - call(context.llvm.getParamSlotIfArenaFunction, - listOf(vars.load(resultLifetime.slotType.parameter), vars.createAnonymousSlot())) + if (LLVMTypeOf(vars.load(resultLifetime.slotType.parameter)) != codegen.runtime.objHeaderPtrType) + vars.createAnonymousSlot() + else { + call(context.llvm.getParamSlotIfArenaFunction, + listOf(vars.load(resultLifetime.slotType.parameter), vars.createAnonymousSlot())) + } else -> throw Error("Incorrect slot type: ${resultLifetime.slotType}") } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Runtime.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Runtime.kt index f56000c2463..9dc284a1b9b 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Runtime.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Runtime.kt @@ -37,6 +37,7 @@ class Runtime(bitcodeFile: String) { val globalHashType = getStructType("GlobalHash") val objHeaderType = getStructType("ObjHeader") + val objHeaderPtrType = pointerType(objHeaderType) val arrayHeaderType = getStructType("ArrayHeader") val target = LLVMGetTarget(llvmModule)!!.toKString()