Control-flow analysis: do-while scope is ended after condition but before jump #KT-15334 Fixed

This commit is contained in:
Mikhail Glukhikh
2017-01-09 18:49:17 +03:00
parent b7a5ff456f
commit b81268cca1
14 changed files with 208 additions and 25 deletions
@@ -734,6 +734,7 @@ class ControlFlowProcessor(private val trace: BindingTrace) {
builder.bindLabel(loopInfo.conditionEntryPoint)
val condition = expression.condition
generateInstructions(condition)
builder.exitBlockScope(expression)
if (!CompileTimeConstantUtils.canBeReducedToBooleanConstant(condition, trace.bindingContext, true)) {
builder.jumpOnTrue(loopInfo.entryPoint, expression, builder.getBoundValue(expression.condition))
}
@@ -744,7 +745,6 @@ class ControlFlowProcessor(private val trace: BindingTrace) {
}
builder.bindLabel(loopInfo.exitPoint)
builder.loadUnit(expression)
builder.exitBlockScope(expression)
}
override fun visitForExpression(expression: KtForExpression) {