FIR CFG traverser: do not skip graph enter node

#KT-42348 fixed
This commit is contained in:
Jinseong Jeon
2020-10-01 12:35:04 -07:00
committed by Dmitriy Novozhilov
parent a154cf4c45
commit 2d001a46fc
3 changed files with 12 additions and 29 deletions
@@ -58,19 +58,17 @@ private fun <I : ControlFlowInfo<I, K, V>, K : Any, V : Any> ControlFlowGraph.co
if (direction == TraverseDirection.Backward && node is CFGNodeWithCfgOwner<*>) {
node.subGraphs.forEach { it.collectDataForNodeInternal(direction, initialInfo, visitor, nodeMap, changed) }
}
if (!(node.isEnterNode(direction) && node.owner.owner == null)) {
val previousNodes = when (direction) {
TraverseDirection.Forward -> node.previousCfgNodes
TraverseDirection.Backward -> node.followingCfgNodes
}
val previousData = previousNodes.mapNotNull { nodeMap[it] }
val data = nodeMap[node]
val newData = node.accept(visitor, previousData)
val hasChanged = newData != data
changed[node] = hasChanged
if (hasChanged) {
nodeMap[node] = newData
}
val previousNodes = when (direction) {
TraverseDirection.Forward -> node.previousCfgNodes
TraverseDirection.Backward -> node.followingCfgNodes
}
val previousData = previousNodes.mapNotNull { nodeMap[it] }
val data = nodeMap[node]
val newData = node.accept(visitor, previousData)
val hasChanged = newData != data
changed[node] = hasChanged
if (hasChanged) {
nodeMap[node] = newData
}
if (direction == TraverseDirection.Forward && node is CFGNodeWithCfgOwner<*>) {
node.subGraphs.forEach { it.collectDataForNodeInternal(direction, initialInfo, visitor, nodeMap, changed) }
@@ -1,16 +0,0 @@
fun foo(arg: Boolean) {
val x : Int
if (arg) {
x = 4
} else {
x = 2
}
x.hashCode()
class Local {
fun bar() {
<!UNINITIALIZED_VARIABLE!>x<!>.hashCode()
}
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo(arg: Boolean) {
val x : Int
if (arg) {