From 9bfe502afd42770b0daa4e6e88f956b944ee2be4 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Fri, 30 Jul 2021 16:00:37 +0300 Subject: [PATCH] [JS IC] Fix signature finding in some cases Found in KFSAD --- .../backend/common/serialization/IrModuleDeserializer.kt | 5 +++-- .../jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt | 4 ++-- .../kotlin/ir/backend/js/ic/IcModuleDeserializer.kt | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt index 9c98b356c79..fe238adae2e 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt @@ -119,9 +119,10 @@ class IrModuleDeserializerWithBuiltIns( } override operator fun contains(idSig: IdSignature): Boolean { - if (idSig in irBuiltInsMap) return true + val topLevel = idSig.topLevelSignature() + if (topLevel in irBuiltInsMap) return true - return checkIsFunctionInterface(idSig) || idSig in delegate + return checkIsFunctionInterface(topLevel) || idSig in delegate } override fun referenceSimpleFunctionByLocalSignature(file: IrFile, idSignature: IdSignature) : IrSimpleFunctionSymbol = diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt index abc3e585a93..9457cb48971 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcFileDeserializer.kt @@ -74,6 +74,7 @@ class IcFileDeserializer( originalSymbolDeserializer, linker.fakeOverrideBuilder.platformSpecificClassFilter, linker.fakeOverrideBuilder, + allowRedeclaration = true, compatibilityMode = CompatibilityMode.CURRENT ) @@ -81,9 +82,8 @@ class IcFileDeserializer( // TODO: reference lowered declarations cross-module if (kind == BinarySymbolData.SymbolKind.FILE_SYMBOL) return file.symbol - val topLevelSig = idSig.topLevelSignature() val actualModuleDeserializer = - moduleDeserializer.findModuleDeserializerForTopLevelId(topLevelSig) + moduleDeserializer.findModuleDeserializerForTopLevelId(idSig) ?: handleNoModuleDeserializerFound(idSig, moduleDeserializer.moduleDescriptor, moduleDeserializer.moduleDependencies) return actualModuleDeserializer.deserializeIrSymbol(idSig, kind) diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt index 8abc9261b97..d56ad638e5d 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IcModuleDeserializer.kt @@ -90,7 +90,7 @@ class IcModuleDeserializer( ?: error("No deserializer for file $file in module ${moduleDescriptor.name}") // TODO: fix to topLevel checker - override fun contains(idSig: IdSignature): Boolean = idSig in moduleReversedFileIndex || idSig in icModuleReversedFileIndex + override fun contains(idSig: IdSignature): Boolean = idSig.topLevelSignature() in moduleReversedFileIndex || idSig in icModuleReversedFileIndex override fun deserializeIrSymbol(idSig: IdSignature, symbolKind: BinarySymbolData.SymbolKind): IrSymbol { assert(idSig.isPubliclyVisible)