JVM_IR KT-43851 preserve static initialization order in const val read

This commit is contained in:
Dmitry Petrov
2020-12-10 15:43:36 +03:00
parent b0ef6ee1fc
commit 5be28520fc
7 changed files with 118 additions and 10 deletions
@@ -0,0 +1,79 @@
// TARGET_BACKEND: JVM
// This test checks that JVM-specific static initialization behavior is preserved in JVM_IR.
var testObjectInit = false
var testClassCompanionInit = false
var testInterfaceCompanionInit = false
fun use(x: Int) {}
object TestObject {
init {
testObjectInit = true
}
const val x = 42
}
fun getTestObject() = TestObject
class TestClassCompanion {
companion object {
init {
testClassCompanionInit = true
}
const val x = 42
}
}
fun getTestClassCompanion() = TestClassCompanion
class TestInterfaceCompanion {
companion object {
init {
testInterfaceCompanionInit = true
}
const val x = 42
}
}
fun getInterfaceCompanion() = TestInterfaceCompanion
fun box(): String {
use(TestObject.x)
if (testObjectInit)
throw Exception("use(TestObject.x)")
use((TestObject).x)
if (testObjectInit)
throw Exception("use((TestObject).x)")
use(getTestObject().x)
if (!testObjectInit)
throw Exception("use(getTestObject().x)")
use(TestClassCompanion.x)
if (testClassCompanionInit)
throw Exception("use(TestClassCompanion.x)")
use((TestClassCompanion).x)
if (testClassCompanionInit)
throw Exception("use((TestClassCompanion).x)")
use(getTestClassCompanion().x)
if (!testClassCompanionInit)
throw Exception("use(getTestClassCompanion().x)")
use(TestInterfaceCompanion.x)
if (testInterfaceCompanionInit)
throw Exception("use(TestInterfaceCompanion.x)")
use((TestInterfaceCompanion).x)
if (testInterfaceCompanionInit)
throw Exception("use((TestInterfaceCompanion).x)")
use(getInterfaceCompanion().x)
if (!testInterfaceCompanionInit)
throw Exception("use(getInterfaceCompanion().x)")
return "OK"
}