Fix all IR element duplication warnings/errors in JVM IR.

This commit is contained in:
Mark Punzalan
2019-10-01 12:49:48 -07:00
committed by Georgy Bronnikov
parent ac7e955d3e
commit 05527fbc9a
3 changed files with 5 additions and 3 deletions
@@ -16,6 +16,7 @@ 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.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
@@ -30,7 +31,7 @@ fun IrField.constantValue(implicitConst: Boolean = false): IrConst<*>? {
// Kotlin fields are only inlined if explicitly `const` to avoid making the values part of the ABI.
val inline = correspondingPropertySymbol?.owner?.isConst == true ||
(isStatic && isFinal && (origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB || implicitConst))
return if (inline) initializer?.expression as? IrConst<*> else null
return if (inline) (initializer?.expression as? IrConst<*>)?.copy() else null
}
class ConstLowering(val context: CommonBackendContext) : IrElementTransformerVoid(), FileLoweringPass {
@@ -272,7 +272,7 @@ class JvmBuiltinOptimizationLowering(val context: JvmBackendContext) : FileLower
// initializer with the constant initializer.
val variable = expression.symbol.owner
return if (isImmutableTemporaryVariableWithConstantValue(variable))
(variable as IrVariable).initializer!!
((variable as IrVariable).initializer!! as IrConst<*>).copy()
else
expression
}
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.hasAnnotation
import org.jetbrains.kotlin.ir.util.isObject
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
@@ -224,7 +225,7 @@ private class MoveOrCopyCompanionObjectFieldsLowering(val context: CommonBackend
if (oldInitializer != null) {
field.initializer = oldInitializer
.replaceThisByStaticReference(context, propertyParent, propertyParent.thisReceiver!!)
.patchDeclarationParents(field) as IrExpressionBody
.deepCopyWithSymbols(field) as IrExpressionBody
}
return field