From 3e67ff097e5df8681bfed4e373c761d3b151a3a7 Mon Sep 17 00:00:00 2001 From: pyos Date: Fri, 29 Nov 2019 11:32:52 +0100 Subject: [PATCH] JVM_IR: keep offsets of const val reads when inlining them --- .../kotlin/backend/jvm/lower/ConstLowering.kt | 11 ++++++----- .../pureKotlin/constantValueChanged/directives.txt | 1 - 2 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 jps-plugin/testData/incremental/pureKotlin/constantValueChanged/directives.txt diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstLowering.kt index e29b4f1aa5c..4760a65df43 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstLowering.kt @@ -13,10 +13,8 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.expressions.IrCall -import org.jetbrains.kotlin.ir.expressions.IrConst -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.IrGetField +import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl import org.jetbrains.kotlin.ir.types.isPrimitiveType import org.jetbrains.kotlin.ir.types.isStringClassType @@ -43,13 +41,16 @@ fun IrField.constantValue(context: JvmBackendContext? = null): IrConst<*>? { return if (implicitConst || correspondingPropertySymbol?.owner?.isConst == true) value else null } +private fun IrConst.copyWithOffsets(startOffset: Int, endOffset: Int) = + IrConstImpl(startOffset, endOffset, type, kind, value) + class ConstLowering(val context: JvmBackendContext) : IrElementTransformerVoid(), FileLoweringPass { override fun lower(irFile: IrFile) = irFile.transformChildrenVoid() private fun IrExpression.lowerConstRead(field: IrField?): IrExpression? { val value = field?.constantValue() ?: return null return if (context.state.shouldInlineConstVals) - value.copy() + value.copyWithOffsets(startOffset, endOffset) else IrGetFieldImpl(startOffset, endOffset, field.symbol, field.type) } diff --git a/jps-plugin/testData/incremental/pureKotlin/constantValueChanged/directives.txt b/jps-plugin/testData/incremental/pureKotlin/constantValueChanged/directives.txt deleted file mode 100644 index 5099b2ad971..00000000000 --- a/jps-plugin/testData/incremental/pureKotlin/constantValueChanged/directives.txt +++ /dev/null @@ -1 +0,0 @@ -// IGNORE_BACKEND: JVM_IR