From dffb22de9d29bfb18d891cecfe7c5a7ce158398c Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Thu, 24 Jun 2021 21:44:54 +0300 Subject: [PATCH] JVM_IR: avoid duplication in declaration lists during deserialization --- .../backend/common/serialization/IrDeclarationDeserializer.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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)