From a18e9dbe0d390a7522504733cae8db544b53cb77 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Fri, 9 Jun 2017 14:46:16 +0700 Subject: [PATCH] backend: Don't process FAKE_OVERRIDE properties in lateinit lowering --- .../backend/konan/lower/LateinitLowering.kt | 3 ++- backend.native/tests/build.gradle | 5 +++++ .../tests/codegen/lateinit/inBaseClass.kt | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 backend.native/tests/codegen/lateinit/inBaseClass.kt diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/LateinitLowering.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/LateinitLowering.kt index a03e7b780be..33665a4a9e7 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/LateinitLowering.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/LateinitLowering.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.FileLoweringPass import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.backend.konan.isValueType +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.IrFile @@ -37,7 +38,7 @@ internal class LateinitLowering(val context: CommonBackendContext): FileLowering override fun lower(irFile: IrFile) { irFile.transformChildrenVoid(object: IrElementTransformerVoid() { override fun visitProperty(declaration: IrProperty): IrStatement { - if (declaration.descriptor.isLateInit) + if (declaration.descriptor.isLateInit && declaration.descriptor.kind.isReal) transformGetter(declaration.backingField!!.symbol, declaration.getter!!) return declaration } diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index bf8abf66374..e841dae69f9 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -829,6 +829,11 @@ task lateinit_notInitialized(type: RunKonanTest) { source = "codegen/lateinit/notInitialized.kt" } +task lateinit_inBaseClass(type: RunKonanTest) { + goldValue = "42\n" + source = "codegen/lateinit/inBaseClass.kt" +} + task coroutines_simple(type: RunKonanTest) { goldValue = "42\n" source = "codegen/coroutines/simple.kt" diff --git a/backend.native/tests/codegen/lateinit/inBaseClass.kt b/backend.native/tests/codegen/lateinit/inBaseClass.kt new file mode 100644 index 00000000000..e1eae6146c2 --- /dev/null +++ b/backend.native/tests/codegen/lateinit/inBaseClass.kt @@ -0,0 +1,15 @@ +class A(val a: Int) + +open class B { + lateinit var a: A +} + +class C: B() { + fun foo() { a = A(42) } +} + +fun main(args: Array) { + val c = C() + c.foo() + println(c.a.a) +}