Fix all IR element duplication warnings/errors in JVM IR.
This commit is contained in:
committed by
Georgy Bronnikov
parent
ac7e955d3e
commit
05527fbc9a
@@ -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 {
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user