[K/N][optmz] Fix for https://youtrack.jetbrains.com/issue/KT-48380
This commit is contained in:
+1
-2
@@ -859,8 +859,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
|
||||
DataFlowIR.Node.FieldWrite(
|
||||
receiver,
|
||||
value.symbol.owner.toDataFlowIRField(),
|
||||
expressionToEdge(value.value),
|
||||
mapReturnType(value.value.type, value.symbol.owner.type)
|
||||
expressionToEdge(value.value)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -266,7 +266,7 @@ internal object DataFlowIR {
|
||||
|
||||
class FieldRead(val receiver: Edge?, val field: Field, val type: Type, val ir: IrGetField?) : Node()
|
||||
|
||||
class FieldWrite(val receiver: Edge?, val field: Field, val value: Edge, val type: Type) : Node()
|
||||
class FieldWrite(val receiver: Edge?, val field: Field, val value: Edge) : Node()
|
||||
|
||||
class ArrayRead(val callee: FunctionSymbol, val array: Edge, val index: Edge, val type: Type, val irCallSite: IrCall?) : Node()
|
||||
|
||||
|
||||
+3
-11
@@ -1098,15 +1098,7 @@ internal object DevirtualizationAnalysis {
|
||||
doCast(function, fieldNode, actualType)
|
||||
}
|
||||
|
||||
fun writeField(field: DataFlowIR.Field, actualType: DataFlowIR.Type.Declared, value: Node) {
|
||||
val fieldNode = fieldNode(field)
|
||||
val expectedType = field.type.resolved()
|
||||
val castedValue = if (!useTypes || actualType == expectedType)
|
||||
value
|
||||
else
|
||||
doCast(function, value, actualType)
|
||||
addEdge(castedValue, fieldNode)
|
||||
}
|
||||
fun writeField(field: DataFlowIR.Field, value: Node) = addEdge(value, fieldNode(field))
|
||||
|
||||
if (node is DataFlowIR.Node.Variable && node.kind != DataFlowIR.VariableKind.Temporary) {
|
||||
var variableNode = variables[node]
|
||||
@@ -1227,7 +1219,7 @@ internal object DevirtualizationAnalysis {
|
||||
val type = node.field.type.resolved()
|
||||
if (entryPoint == null && type.isFinal)
|
||||
addInstantiatingClass(type)
|
||||
writeField(node.field, node.type.resolved(), edgeToConstraintNode(node.value))
|
||||
writeField(node.field, edgeToConstraintNode(node.value))
|
||||
constraintGraph.voidNode
|
||||
}
|
||||
|
||||
@@ -1235,7 +1227,7 @@ internal object DevirtualizationAnalysis {
|
||||
readField(constraintGraph.arrayItemField, node.type.resolved())
|
||||
|
||||
is DataFlowIR.Node.ArrayWrite -> {
|
||||
writeField(constraintGraph.arrayItemField, node.type.resolved(), edgeToConstraintNode(node.value))
|
||||
writeField(constraintGraph.arrayItemField, edgeToConstraintNode(node.value))
|
||||
constraintGraph.voidNode
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user