[Codegen] Do not emit unneeded external accessor declarations
This commit is contained in:
committed by
Sergey Bogolepov
parent
9b5513ca37
commit
eec5547213
+5
-1
@@ -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()
|
||||
+3
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user