diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/IrModuleSerializer.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/IrModuleSerializer.kt index 780f92a498d..ef88b8fd2c4 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/IrModuleSerializer.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/IrModuleSerializer.kt @@ -1077,6 +1077,12 @@ internal class IrModuleSerializer( proto.addDeclarationId(protoUniqId(uniqId)) } + // Make sure that all top level properties are initialized on library's load. + file.declarations + .filterIsInstance() + .filter { it.backingField?.initializer != null } + .forEach { proto.addExplicitlyExportedToCompiler(serializeIrSymbol(it.backingField!!.symbol)) } + file.acceptVoid(object: IrElementVisitorVoid { override fun visitElement(element: IrElement) { element.acceptChildrenVoid(this) diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 788e0b4a2e6..9171c806ba3 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -1084,6 +1084,18 @@ task initializers_correctOrder2(type: RunKonanTest) { source = "codegen/initializers/correctOrder2.kt" } +task initializers_linkTest1(type: LinkKonanTest) { + goldValue = "1200\n" + source = "codegen/initializers/linkTest1_main.kt" + lib = "codegen/initializers/linkTest1_lib.kt" +} + +task initializers_linkTest2(type: LinkKonanTest) { + goldValue = "2\n" + source = "codegen/initializers/linkTest2_main.kt" + lib = "codegen/initializers/linkTest2_lib.kt" +} + task arithmetic_basic(type: RunKonanTest) { source = "codegen/arithmetic/basic.kt" } diff --git a/backend.native/tests/codegen/initializers/linkTest1_lib.kt b/backend.native/tests/codegen/initializers/linkTest1_lib.kt new file mode 100644 index 00000000000..145c8e0d9b3 --- /dev/null +++ b/backend.native/tests/codegen/initializers/linkTest1_lib.kt @@ -0,0 +1,3 @@ +val a = 10 +val b = a * 6 +val c = a * b * 2 \ No newline at end of file diff --git a/backend.native/tests/codegen/initializers/linkTest1_main.kt b/backend.native/tests/codegen/initializers/linkTest1_main.kt new file mode 100644 index 00000000000..2fdafb7c6e2 --- /dev/null +++ b/backend.native/tests/codegen/initializers/linkTest1_main.kt @@ -0,0 +1 @@ +fun main() = println(c) \ No newline at end of file diff --git a/backend.native/tests/codegen/initializers/linkTest2_lib.kt b/backend.native/tests/codegen/initializers/linkTest2_lib.kt new file mode 100644 index 00000000000..9aafbdbf060 --- /dev/null +++ b/backend.native/tests/codegen/initializers/linkTest2_lib.kt @@ -0,0 +1,3 @@ +val a = mutableListOf() +val b = 1.also { a += 2 } +val c = a.single() \ No newline at end of file diff --git a/backend.native/tests/codegen/initializers/linkTest2_main.kt b/backend.native/tests/codegen/initializers/linkTest2_main.kt new file mode 100644 index 00000000000..2fdafb7c6e2 --- /dev/null +++ b/backend.native/tests/codegen/initializers/linkTest2_main.kt @@ -0,0 +1 @@ +fun main() = println(c) \ No newline at end of file