diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt index 2c09e8293ce..d3d55abe650 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt @@ -325,9 +325,11 @@ class IrDeclarationDeserializer( superTypes = proto.superTypeList.map { deserializeIrType(it) } withExternalValue(isExternal) { + val oldDeclarations = declarations.toSet() proto.declarationList .filterNot { isSkippableFakeOverride(it, this) } - .mapNotNullTo(declarations) { declProto -> deserializeDeclaration(declProto) } + // On JVM, deserialization may fill bodies of existing declarations, so avoid adding duplicates. + .mapNotNullTo(declarations) { declProto -> deserializeDeclaration(declProto).takeIf { it !in oldDeclarations } } } thisReceiver = deserializeIrValueParameter(proto.thisReceiver, -1)