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? { private fun merge(first: EdgeKind, second: EdgeKind?): EdgeKind? {
return when (first) { return when (second) {
second -> first null, EdgeKind.Simple, first -> first
EdgeKind.Cfg -> if (second == EdgeKind.Dfg) null else first EdgeKind.Dead -> second
EdgeKind.Dfg -> if (second == EdgeKind.Cfg) null else first // Note: first can be only Cfg, Dfg, or Dead
else -> first else -> when (first) {
EdgeKind.Cfg -> if (second == EdgeKind.Dfg) null else first
EdgeKind.Dfg -> if (second == EdgeKind.Cfg) null else first
else -> first
}
} }
} }