diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index 65e48e34897..9ce7c6b361f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -915,7 +915,13 @@ abstract class FirDataFlowAnalyzer( // ----------------------------------- Init block ----------------------------------- fun enterInitBlock(initBlock: FirAnonymousInitializer) { - graphBuilder.enterInitBlock(initBlock).mergeIncomingFlow() + graphBuilder.enterInitBlock(initBlock).let { (node, prevNode) -> + if (prevNode != null) { + node.flow = logicSystem.forkFlow(prevNode.flow) + } else { + node.mergeIncomingFlow() + } + } } fun exitInitBlock(initBlock: FirAnonymousInitializer) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt index e16b305e547..2925a55b031 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt @@ -728,7 +728,8 @@ class ControlFlowGraphBuilder { // ----------------------------------- Block ----------------------------------- - fun enterInitBlock(initBlock: FirAnonymousInitializer): InitBlockEnterNode { + fun enterInitBlock(initBlock: FirAnonymousInitializer): Pair?> { + val lastNode = lastNodes.topOrNull() graphs.push(ControlFlowGraph(initBlock, "init block", ControlFlowGraph.Kind.ClassInitializer)) val enterNode = createInitBlockEnterNode(initBlock).also { lexicalScopes.push(stackOf(it)) @@ -737,7 +738,7 @@ class ControlFlowGraphBuilder { initBlockExitNodes.push(exitNode) exitNodes.push(exitNode) levelCounter++ - return enterNode + return enterNode to lastNode } fun exitInitBlock(initBlock: FirAnonymousInitializer): InitBlockExitNode {