FIR CFG: handle 'Dead' properly in edge kind merging

This commit is contained in:
Mikhail Glukhikh
2020-05-12 19:32:17 +03:00
parent 41f241f608
commit 0c0f4ef3db
@@ -72,11 +72,15 @@ sealed class CFGNode<out E : FirElement>(val owner: ControlFlowGraph, val level:
}
private fun merge(first: EdgeKind, second: EdgeKind?): EdgeKind? {
return when (first) {
second -> first
EdgeKind.Cfg -> if (second == EdgeKind.Dfg) null else first
EdgeKind.Dfg -> if (second == EdgeKind.Cfg) null else first
else -> first
return when (second) {
null, EdgeKind.Simple, first -> first
EdgeKind.Dead -> second
// Note: first can be only Cfg, Dfg, or Dead
else -> when (first) {
EdgeKind.Cfg -> if (second == EdgeKind.Dfg) null else first
EdgeKind.Dfg -> if (second == EdgeKind.Cfg) null else first
else -> first
}
}
}