diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt index 89ee028b43a..d324cce85c3 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGBuilder.kt @@ -669,6 +669,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag receiver, DataFlowIR.Field( receiverType, + symbolTable.mapType(value.symbol.owner.type), name.localHash.value, takeName { name } ), @@ -684,6 +685,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag receiver, DataFlowIR.Field( receiverType, + symbolTable.mapType(value.symbol.owner.type), name.localHash.value, takeName { name } ), diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGSerializer.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGSerializer.kt index da7b6b0ecf2..35658237ce5 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGSerializer.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DFGSerializer.kt @@ -407,12 +407,13 @@ internal object DFGSerializer { } } - class Field(val type: Int?, val hash: Long, val name: String?) { + class Field(val receiverType: Int?, val type: Int, val hash: Long, val name: String?) { - constructor(data: ArraySlice) : this(data.readNullableInt(), data.readLong(), data.readNullable { readString() }) + constructor(data: ArraySlice) : this(data.readNullableInt(), data.readInt(), data.readLong(), data.readNullable { readString() }) fun write(result: ArraySlice) { - result.writeNullableInt(type) + result.writeNullableInt(receiverType) + result.writeInt(type) result.writeLong(hash) result.writeNullable(name) { writeString(it) } } @@ -869,7 +870,7 @@ internal object DFGSerializer { VirtualCall(buildCall(virtualCall), typeMap[virtualCall.receiverType]!!) fun buildField(field: DataFlowIR.Field) = - Field(field.type?.let { typeMap[it]!! }, field.hash, field.name) + Field(field.receiverType?.let { typeMap[it]!! }, typeMap[field.type]!!, field.hash, field.name) when (node) { is DataFlowIR.Node.Parameter -> Node.parameter(node.index) @@ -1076,7 +1077,7 @@ internal object DFGSerializer { } fun deserializeField(field: Field) = - DataFlowIR.Field(field.type?.let { types[it] }, field.hash, field.name) + DataFlowIR.Field(field.receiverType?.let { types[it] }, types[field.type], field.hash, field.name) fun deserializeBody(body: FunctionBody): DataFlowIR.FunctionBody { val nodes = body.nodes.map { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt index 6051d4e2e51..7434a7c977a 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/DataFlowIR.kt @@ -209,7 +209,7 @@ internal object DataFlowIR { } } - data class Field(val type: Type?, val hash: Long, val name: String? = null) + data class Field(val receiverType: Type?, val type: Type, val hash: Long, val name: String? = null) class Edge(val castToType: Type?) { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt index cd0b3364b15..e0f3adf5f7c 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt @@ -163,7 +163,7 @@ internal object Devirtualization { class VirtualCallSiteReceivers(val receiver: Node, val caller: DataFlowIR.FunctionSymbol, val devirtualizedCallees: List) - class ConstraintGraph : DirectedGraph { + inner class ConstraintGraph : DirectedGraph { private var nodesCount = 0 @@ -172,7 +172,7 @@ internal object Devirtualization { val voidNode = addNode { Node.Ordinary(it, { "Void" }) } val virtualNode = addNode { Node.Source(it, VIRTUAL_TYPE_ID, { "Virtual" }) } - val arrayItemField = DataFlowIR.Field(null, 1, "Array\$Item") + val arrayItemField = DataFlowIR.Field(null, symbolTable.mapClass(context.irBuiltIns.anyClass.owner), 1, "Array\$Item") val functions = mutableMapOf() val concreteClasses = mutableMapOf() val externalFunctions = mutableMapOf()