[FIR] Ignore CFA-only edges in DFA even if they are dead

^KT-53920 Fixed
This commit is contained in:
Dmitriy Novozhilov
2022-10-17 12:10:08 +03:00
committed by Space Team
parent 0eb34983cb
commit fa9f0bcf84
8 changed files with 52 additions and 12 deletions
@@ -157,17 +157,18 @@ class ReturnPath(
) : EdgeLabel(label = "\"return@${returnTargetSymbol.callableId}\"")
enum class EdgeKind(
val usedInDfa: Boolean,
val usedInDfa: Boolean, // propagate flow to alive nodes
val usedInDeadDfa: Boolean, // propagate flow to dead nodes
val usedInCfa: Boolean,
val isBack: Boolean,
val isDead: Boolean
) {
Forward(usedInDfa = true, usedInCfa = true, isBack = false, isDead = false),
DeadForward(usedInDfa = false, usedInCfa = true, isBack = false, isDead = true),
DfgForward(usedInDfa = true, usedInCfa = false, isBack = false, isDead = false),
CfgForward(usedInDfa = false, usedInCfa = true, isBack = false, isDead = false),
CfgBackward(usedInDfa = false, usedInCfa = true, isBack = true, isDead = false),
DeadBackward(usedInDfa = false, usedInCfa = true, isBack = true, isDead = true)
Forward(usedInDfa = true, usedInDeadDfa = true, usedInCfa = true, isBack = false, isDead = false),
DeadForward(usedInDfa = false, usedInDeadDfa = true, usedInCfa = true, isBack = false, isDead = true),
DfgForward(usedInDfa = true, usedInDeadDfa = true, usedInCfa = false, isBack = false, isDead = false),
CfgForward(usedInDfa = false, usedInDeadDfa = false, usedInCfa = true, isBack = false, isDead = false),
CfgBackward(usedInDfa = false, usedInDeadDfa = false, usedInCfa = true, isBack = true, isDead = false),
DeadBackward(usedInDfa = false, usedInDeadDfa = false, usedInCfa = true, isBack = true, isDead = true)
}
@OptIn(ExperimentalStdlibApi::class)