From eec5547213ca14f067ffeb6d66be49bf58c5a88d Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Fri, 28 Feb 2020 16:32:18 +0700 Subject: [PATCH] [Codegen] Do not emit unneeded external accessor declarations --- .../kotlin/backend/konan/descriptors/DescriptorUtils.kt | 6 +++++- .../jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt index 7cbedd16b2f..1d850372ae7 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/descriptors/DescriptorUtils.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.types.isUnit import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.resolve.annotations.argumentValue import org.jetbrains.kotlin.resolve.constants.StringValue +import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.utils.addToStdlib.safeAs /** @@ -292,4 +293,7 @@ fun IrFunction.externalSymbolOrThrow(): String? { throw Error("external function ${this.longName} must have @TypedIntrinsic, @SymbolName or @ObjCMethod annotation") } -val IrFunction.isBuiltInOperator get() = origin == IrBuiltIns.BUILTIN_OPERATOR \ No newline at end of file +val IrFunction.isBuiltInOperator get() = origin == IrBuiltIns.BUILTIN_OPERATOR + +fun IrDeclaration.isFromMetadataInteropLibrary() = + descriptor.module.isFromInteropLibrary() \ No newline at end of file diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt index fe1b4b7c67c..60da5877af1 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/LlvmDeclarations.kt @@ -340,6 +340,9 @@ private class DeclarationsGeneratorVisitor(override val context: Context) : val llvmFunction = if (declaration.isExternal) { if (declaration.isTypedIntrinsic || declaration.isObjCBridgeBased() + // All call-sites to external accessors to interop properties + // are lowered by InteropLowering. + || (declaration.isAccessor && declaration.isFromMetadataInteropLibrary()) || declaration.annotations.hasAnnotation(RuntimeNames.cCall)) return context.llvm.externalFunction(declaration.symbolName, llvmFunctionType,