From 806bd37d67b740fa2c53e4703afd77b588e048dd Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Tue, 1 Oct 2019 16:43:39 +0300 Subject: [PATCH] Support emitting non-IR static initializers in codegen --- .../jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt | 5 +++-- .../jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt | 9 ++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt index b5bfecc2b2f..acc500187b1 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/ContextUtils.kt @@ -540,7 +540,8 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) { val usedFunctions = mutableListOf() val usedGlobals = mutableListOf() val compilerUsedGlobals = mutableListOf() - val staticInitializers = mutableListOf() + val irStaticInitializers = mutableListOf() + val otherStaticInitializers = mutableListOf() val fileInitializers = mutableListOf() val objects = mutableSetOf() val sharedObjects = mutableSetOf() @@ -563,4 +564,4 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) { val llvmDouble = LLVMDoubleType()!! } -class StaticInitializer(val file: IrFile, val initializer: LLVMValueRef) +class IrStaticInitializer(val file: IrFile, val initializer: LLVMValueRef) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 445f0acf168..03c8a785b18 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -478,7 +478,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map() } - context.llvm.staticInitializers.forEach { + context.llvm.irStaticInitializers.forEach { val library = it.file.packageFragmentDescriptor.module.konanLibrary val initializers = libraryToInitializers[library] ?: error("initializer for not included library ${library?.libraryFile}") @@ -2366,7 +2366,10 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map