FIR CFG: handle 'Dead' properly in edge kind merging
This commit is contained in:
+9
-5
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user