From 9daea892210b8a6e8ac5ffcddf10010d186f98cf Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Mon, 30 Sep 2019 15:15:59 -0700 Subject: [PATCH] Avoid duplicate IR elements in ForLoopsLowering (accidentally introduced in #2620). --- .../kotlin/backend/common/lower/loops/HeaderProcessor.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderProcessor.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderProcessor.kt index 821e2831775..28d4f049cbf 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderProcessor.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/loops/HeaderProcessor.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrDoWhileLoopImpl import org.jetbrains.kotlin.ir.expressions.impl.IrWhileLoopImpl import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.* +import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.ir.util.functions import org.jetbrains.kotlin.ir.util.getPackageFragment import org.jetbrains.kotlin.name.FqName @@ -43,12 +44,16 @@ internal data class LoopReplacement( internal sealed class ForLoopHeader( protected open val headerInfo: HeaderInfo, val inductionVariable: IrVariable, - val lastExpression: IrExpression, + lastExpression: IrExpression, val step: IrVariable, var loopVariable: IrVariable? = null, val isLastInclusive: Boolean, val declarations: List ) { + val lastExpression: IrExpression = lastExpression + // Always copy `lastExpression` is it may be used in multiple conditions. + get() = field.deepCopyWithSymbols() + /** Expression used to initialize the loop variable at the beginning of the loop. */ abstract fun initializeLoopVariable(symbols: Symbols, builder: DeclarationIrBuilder): IrExpression