diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 1037c2943e8..7cfad910b6f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -446,10 +446,12 @@ class ExpressionCodegen( override fun visitSetField(expression: IrSetField, data: BlockInfo): PromisedValue { val expressionValue = expression.value // Do not add redundant field initializers that initialize to default values. + val inPrimaryConstructor = irFunction is IrConstructor && irFunction.isPrimary + val inClassInit = irFunction.origin == JvmLoweredDeclarationOrigin.CLASS_STATIC_INITIALIZER // "expression.origin == null" means that the field is initialized when it is declared, // i.e., not in an initializer block or constructor body. - val skip = irFunction is IrConstructor && irFunction.isPrimary && - expression.origin == null && expressionValue is IrConst<*> && + val isFieldInitializer = expression.origin == null + val skip = (inPrimaryConstructor || inClassInit) && isFieldInitializer && expressionValue is IrConst<*> && isDefaultValueForType(expression.symbol.owner.type.asmType, expressionValue.value) return if (skip) voidValue.coerce(expression.asmType) else super.visitSetField(expression, data) }