[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.ir.util.*
|
||||||
import org.jetbrains.kotlin.resolve.annotations.argumentValue
|
import org.jetbrains.kotlin.resolve.annotations.argumentValue
|
||||||
import org.jetbrains.kotlin.resolve.constants.StringValue
|
import org.jetbrains.kotlin.resolve.constants.StringValue
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
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")
|
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) {
|
val llvmFunction = if (declaration.isExternal) {
|
||||||
if (declaration.isTypedIntrinsic || declaration.isObjCBridgeBased()
|
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
|
|| declaration.annotations.hasAnnotation(RuntimeNames.cCall)) return
|
||||||
|
|
||||||
context.llvm.externalFunction(declaration.symbolName, llvmFunctionType,
|
context.llvm.externalFunction(declaration.symbolName, llvmFunctionType,
|
||||||
|
|||||||
Reference in New Issue
Block a user