A follow up fix for https://youtrack.jetbrains.com/issue/KT-35940
This commit is contained in:
-9
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.backend.common.phaser.namedUnitPhase
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.GlobalHierarchyAnalysis
|
||||
import org.jetbrains.kotlin.backend.konan.optimizations.*
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
@@ -161,14 +160,6 @@ internal val dcePhase = makeKonanModuleOpPhase(
|
||||
referencedFunctions.add(declaration)
|
||||
super.visitConstructor(declaration)
|
||||
}
|
||||
|
||||
override fun visitClass(declaration: IrClass) {
|
||||
context.getLayoutBuilder(declaration).associatedObjects.values.forEach {
|
||||
assert (it.kind == ClassKind.OBJECT) { "An object expected but was ${it.dump()}" }
|
||||
referencedFunctions.add(it.constructors.single())
|
||||
}
|
||||
super.visitClass(declaration)
|
||||
}
|
||||
})
|
||||
|
||||
context.irModule!!.transformChildrenVoid(object: IrElementTransformerVoid() {
|
||||
|
||||
+17
-1
@@ -86,7 +86,23 @@ internal object Devirtualization {
|
||||
moduleDFG.symbolTable.functionMap.values.filter { it.explicitlyExported } +
|
||||
externalModulesDFG.functionDFGs.keys.filter { it.explicitlyExported }
|
||||
|
||||
return (exportedFunctions + globalInitializers + explicitlyExportedFunctions).distinct()
|
||||
// Conservatively assume each associated object could be instantiated.
|
||||
val associatedObjects = mutableListOf<DataFlowIR.FunctionSymbol>()
|
||||
context.irModule!!.acceptChildrenVoid(object: IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
element.acceptChildrenVoid(this)
|
||||
}
|
||||
|
||||
override fun visitClass(declaration: IrClass) {
|
||||
context.getLayoutBuilder(declaration).associatedObjects.values.forEach {
|
||||
assert (it.kind == ClassKind.OBJECT) { "An object expected but was ${it.dump()}" }
|
||||
associatedObjects += moduleDFG.symbolTable.mapFunction(it.constructors.single())
|
||||
}
|
||||
super.visitClass(declaration)
|
||||
}
|
||||
})
|
||||
|
||||
return (exportedFunctions + globalInitializers + explicitlyExportedFunctions + associatedObjects).distinct()
|
||||
}
|
||||
|
||||
fun BitSet.format(allTypes: List<DataFlowIR.Type.Declared>): String {
|
||||
|
||||
Reference in New Issue
Block a user