FIR CFG: handle 'Dead' properly in edge kind merging
This commit is contained in:
+6
-2
@@ -72,13 +72,17 @@ 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.Dead -> second
|
||||||
|
// Note: first can be only Cfg, Dfg, or Dead
|
||||||
|
else -> when (first) {
|
||||||
EdgeKind.Cfg -> if (second == EdgeKind.Dfg) null else first
|
EdgeKind.Cfg -> if (second == EdgeKind.Dfg) null else first
|
||||||
EdgeKind.Dfg -> if (second == EdgeKind.Cfg) null else first
|
EdgeKind.Dfg -> if (second == EdgeKind.Cfg) null else first
|
||||||
else -> first
|
else -> first
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal fun addJustKindEdge(from: CFGNode<*>, to: CFGNode<*>, kind: EdgeKind, propagateDeadness: Boolean) {
|
internal fun addJustKindEdge(from: CFGNode<*>, to: CFGNode<*>, kind: EdgeKind, propagateDeadness: Boolean) {
|
||||||
if (kind != EdgeKind.Simple) {
|
if (kind != EdgeKind.Simple) {
|
||||||
|
|||||||
Reference in New Issue
Block a user