diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilder.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilder.kt index 5213094a16a..a92dea36fc4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilder.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilder.kt @@ -40,7 +40,7 @@ interface ControlFlowBuilder { fun exitBlockScope(block: KtElement) fun getSubroutineExitPoint(labelElement: KtElement): Label? - fun getLoopConditionEntryPoint(loop: KtLoopExpression): Label + fun getLoopConditionEntryPoint(loop: KtLoopExpression): Label? fun getLoopExitPoint(loop: KtLoopExpression): Label? // Declarations diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilderAdapter.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilderAdapter.kt index 74e6e9d3ad6..6e6c3da5ef6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilderAdapter.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowBuilderAdapter.kt @@ -127,7 +127,7 @@ abstract class ControlFlowBuilderAdapter : ControlFlowBuilder { return delegateBuilder.getSubroutineExitPoint(labelElement) } - override fun getLoopConditionEntryPoint(loop: KtLoopExpression): Label { + override fun getLoopConditionEntryPoint(loop: KtLoopExpression): Label? { return delegateBuilder.getLoopConditionEntryPoint(loop) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt index 629e9fbc254..d6e84e3ec52 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt @@ -806,7 +806,7 @@ class ControlFlowProcessor(private val trace: BindingTrace) { val loop = getCorrespondingLoop(expression) if (loop != null) { if (jumpDoesNotCrossFunctionBoundary(expression, loop)) { - builder.jump(builder.getLoopConditionEntryPoint(loop), expression) + builder.getLoopConditionEntryPoint(loop)?.let { builder.jump(it, expression) } } } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/ControlFlowInstructionsGenerator.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/ControlFlowInstructionsGenerator.kt index 7d364716e75..ad06bdd982e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/ControlFlowInstructionsGenerator.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/ControlFlowInstructionsGenerator.kt @@ -166,9 +166,8 @@ class ControlFlowInstructionsGenerator : ControlFlowBuilderAdapter() { override val currentSubroutine: KtElement get() = pseudocode.correspondingElement - override fun getLoopConditionEntryPoint(loop: KtLoopExpression): Label { - val blockInfo = elementToLoopInfo[loop] ?: error("expected LoopInfo for ${loop.text}") - return blockInfo.conditionEntryPoint + override fun getLoopConditionEntryPoint(loop: KtLoopExpression): Label? { + return elementToLoopInfo[loop]?.conditionEntryPoint } override fun getLoopExitPoint(loop: KtLoopExpression): Label? {