[Codegen] Do not emit unneeded external accessor declarations

This commit is contained in:
Sergey Bogolepov
2020-02-28 16:32:18 +07:00
committed by Sergey Bogolepov
parent 9b5513ca37
commit eec5547213
2 changed files with 8 additions and 1 deletions
@@ -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
val IrFunction.isBuiltInOperator get() = origin == IrBuiltIns.BUILTIN_OPERATOR
fun IrDeclaration.isFromMetadataInteropLibrary() =
descriptor.module.isFromInteropLibrary()
@@ -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,