From 261482904c029af175c00c8076b810bd248c2fe3 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Wed, 24 Nov 2021 16:11:02 +0100 Subject: [PATCH] [FIR] Give external package fragments different module descriptors. The inliner uses module descriptors to figure out if it needs to regenerate objects. We should avoid the use of descriptors in the inliner, but this works as a first quick fix. --- .../jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt | 5 ++++- .../codegen/box/annotations/instances/multimoduleInlining.kt | 5 ----- .../box/compileKotlinAgainstKotlin/copySamOnInline.kt | 2 -- .../box/compileKotlinAgainstKotlin/copySamOnInline2.kt | 2 -- .../compileKotlinAgainstKotlin/defaultLambdaRegeneration.kt | 2 -- .../compileKotlinAgainstKotlin/defaultLambdaRegeneration2.kt | 2 -- 6 files changed, 4 insertions(+), 14 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 38168aa87e0..b77bc524504 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -225,7 +225,10 @@ class Fir2IrDeclarationStorage( fun getIrExternalPackageFragment(fqName: FqName): IrExternalPackageFragment { return fragmentCache.getOrPut(fqName) { - return symbolTable.declareExternalPackageFragment(FirPackageFragmentDescriptor(fqName, moduleDescriptor)) + // Make sure that external package fragments have a different module descriptor. The module descriptors are compared + // to determine if objects need regeneration because they are from different modules. + val externalFragmentModuleDescriptor = FirModuleDescriptor(session) + return symbolTable.declareExternalPackageFragment(FirPackageFragmentDescriptor(fqName, externalFragmentModuleDescriptor)) } } diff --git a/compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt b/compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt index cf891cd6ee0..0038a869b1d 100644 --- a/compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt +++ b/compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt @@ -1,8 +1,3 @@ -// With FIR the annotation implementation class is not regenerated as it -// is seen as coming from the same module. -// See IrSourceCompilerForInline.kt:isCallInsideSameModuleAsCallee. -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: assertion failed: assert(one.javaClass.getEnclosingClass().getName() == "test.C") // TARGET_BACKEND: JVM_IR // IGNORE_DEXING // WITH_STDLIB diff --git a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline.kt b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline.kt index fba4f04cdca..1deaa3be20a 100644 --- a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline.kt +++ b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: class should be regenerated, but test.AKt$sam$i$java_util_concurrent_Callable$0 // FULL_JDK // WITH_STDLIB diff --git a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline2.kt b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline2.kt index 1ccde462ea2..a17bf07aaee 100644 --- a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline2.kt +++ b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/copySamOnInline2.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: class should be regenerated, but test.AKt$sam$i$java_util_concurrent_Callable$0 // FULL_JDK // WITH_STDLIB diff --git a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration.kt b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration.kt index d8bd07e0cb2..0d111dad95c 100644 --- a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration.kt +++ b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: fail 1 : class test.AKt$test$1$1 == class test.AKt$test$1$1 // TARGET_BACKEND: JVM // WITH_STDLIB diff --git a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration2.kt b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration2.kt index 71bcc454961..74876607911 100644 --- a/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration2.kt +++ b/compiler/testData/codegen/box/compileKotlinAgainstKotlin/defaultLambdaRegeneration2.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: fail 1 : class test.AKt$test$1$1 == class test.AKt$test$1$1 // TARGET_BACKEND: JVM // WITH_STDLIB