[K/N][optmz] Fix for https://youtrack.jetbrains.com/issue/KT-49234
This commit is contained in:
+2
-4
@@ -439,10 +439,8 @@ internal object FileInitializersOptimization {
|
|||||||
} else {
|
} else {
|
||||||
require(objectClass.isExternal || objectClass is IrLazyClass) { "No constructor for ${objectClass.render()}" }
|
require(objectClass.isExternal || objectClass is IrLazyClass) { "No constructor for ${objectClass.render()}" }
|
||||||
}
|
}
|
||||||
val file = objectClass.fileOrNull ?: return data
|
// Don't update [data] as the constructor might not be called here (the object might be initialized already).
|
||||||
val fileId = initializedFiles.fileIds[file]!!
|
return data
|
||||||
if (data.get(fileId)) return data
|
|
||||||
return data.copy().also { it.set(fileId) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processCall(expression: IrFunctionAccessExpression, actualCallee: IrFunction, data: BitSet): BitSet {
|
private fun processCall(expression: IrFunctionAccessExpression, actualCallee: IrFunction, data: BitSet): BitSet {
|
||||||
|
|||||||
@@ -1622,6 +1622,11 @@ standaloneTest("initializers_return2") {
|
|||||||
useGoldenData = true
|
useGoldenData = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
standaloneTest("initializers_object") {
|
||||||
|
source = "codegen/initializers/object.kt"
|
||||||
|
flags = ['-Xir-property-lazy-initialization=enable']
|
||||||
|
}
|
||||||
|
|
||||||
linkTest("initializers_linkTest1") {
|
linkTest("initializers_linkTest1") {
|
||||||
useGoldenData = true
|
useGoldenData = true
|
||||||
source = "codegen/initializers/linkTest1_main.kt"
|
source = "codegen/initializers/linkTest1_main.kt"
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// FILE: lib.kt
|
||||||
|
var z = false
|
||||||
|
|
||||||
|
// FILE: lib2.kt
|
||||||
|
val x = foo()
|
||||||
|
|
||||||
|
fun foo(): Int {
|
||||||
|
z = true
|
||||||
|
return 42
|
||||||
|
}
|
||||||
|
|
||||||
|
object Z {
|
||||||
|
fun bar() { }
|
||||||
|
fun baz() = x
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: main.kt
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
Z.bar()
|
||||||
|
assertFalse(z)
|
||||||
|
assertEquals(42, Z.baz())
|
||||||
|
assertTrue(z)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user