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.IrConst
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrGetField
|
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.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
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.
|
// Kotlin fields are only inlined if explicitly `const` to avoid making the values part of the ABI.
|
||||||
val inline = correspondingPropertySymbol?.owner?.isConst == true ||
|
val inline = correspondingPropertySymbol?.owner?.isConst == true ||
|
||||||
(isStatic && isFinal && (origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB || implicitConst))
|
(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 {
|
class ConstLowering(val context: CommonBackendContext) : IrElementTransformerVoid(), FileLoweringPass {
|
||||||
|
|||||||
+1
-1
@@ -272,7 +272,7 @@ class JvmBuiltinOptimizationLowering(val context: JvmBackendContext) : FileLower
|
|||||||
// initializer with the constant initializer.
|
// initializer with the constant initializer.
|
||||||
val variable = expression.symbol.owner
|
val variable = expression.symbol.owner
|
||||||
return if (isImmutableTemporaryVariableWithConstantValue(variable))
|
return if (isImmutableTemporaryVariableWithConstantValue(variable))
|
||||||
(variable as IrVariable).initializer!!
|
((variable as IrVariable).initializer!! as IrConst<*>).copy()
|
||||||
else
|
else
|
||||||
expression
|
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.IrAnonymousInitializerSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
|
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.hasAnnotation
|
||||||
import org.jetbrains.kotlin.ir.util.isObject
|
import org.jetbrains.kotlin.ir.util.isObject
|
||||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||||
@@ -224,7 +225,7 @@ private class MoveOrCopyCompanionObjectFieldsLowering(val context: CommonBackend
|
|||||||
if (oldInitializer != null) {
|
if (oldInitializer != null) {
|
||||||
field.initializer = oldInitializer
|
field.initializer = oldInitializer
|
||||||
.replaceThisByStaticReference(context, propertyParent, propertyParent.thisReceiver!!)
|
.replaceThisByStaticReference(context, propertyParent, propertyParent.thisReceiver!!)
|
||||||
.patchDeclarationParents(field) as IrExpressionBody
|
.deepCopyWithSymbols(field) as IrExpressionBody
|
||||||
}
|
}
|
||||||
|
|
||||||
return field
|
return field
|
||||||
|
|||||||
Reference in New Issue
Block a user