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 e0442f29b06..7d83c26670a 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 @@ -202,7 +202,14 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) { val externalFunction = LLVMGetNamedFunction(otherModule, name)!! val functionType = getFunctionType(externalFunction) - return LLVMAddFunction(llvmModule, name, functionType)!! + val function = LLVMAddFunction(llvmModule, name, functionType)!! + val attributes = LLVMGetFunctionAttrSet(externalFunction) + for (attribute in LLVMAttribute.values()) { + if (attribute in attributes) { + LLVMAddFunctionAttr(function, attribute) + } + } + return function } private fun importMemset() : LLVMValueRef { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt index a0b772b0fc1..3ba490dafe1 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmUtils.kt @@ -230,3 +230,7 @@ fun llvmtype2string(type: LLVMTypeRef?): String { return LLVMPrintTypeToString(type)!!.asCString().toString() } +internal operator fun LLVMAttributeSet.contains(attribute: LLVMAttribute): Boolean { + return (this and attribute.value) != 0 +} +