From 1b97973dc8d2909762e5ef95ed3367c21f9e1be2 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Sat, 22 Oct 2016 09:35:03 +0300 Subject: [PATCH] constructor should initialize fields of object basing on comparizon with storage structure --- .../jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt index d246651fc81..4ab97d07459 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt @@ -48,8 +48,13 @@ internal class CodeGenerator(override val context:Context) : ContextUtils { fun initFunction(declaration: IrConstructor) { function(declaration) val thisPtr = bitcast(pointerType(classType(declaration.descriptor.containingDeclaration)), load(thisVariable(), tmpVariable()), tmpVariable()) - declaration.descriptor.valueParameters.forEachIndexed { i, descriptor -> + + declaration.descriptor.containingDeclaration.fields.forEachIndexed { i, descriptor -> val name = descriptor.name.asString() + + if (!declaration.descriptor.valueParameters.any { it -> it.name.asString() == name }) + return@forEachIndexed + val ptr = LLVMBuildStructGEP(context.llvmBuilder, thisPtr, i, tmpVariable()) val value = load(variable(name)!!, tmpVariable())