[FIR2IR] Correctly calculate ir origin for f/o callables in declarations generator
This change uncovers one problem, which causes some MPP tests to fail This problem will be fixed in further commits Uncovers KT-62535
This commit is contained in:
committed by
Space Team
parent
50425e82c5
commit
34d0f3dbc2
@@ -686,7 +686,8 @@ fun FirSession.createFilesWithGeneratedDeclarations(): List<FirFile> {
|
||||
|
||||
fun FirDeclaration?.computeIrOrigin(
|
||||
predefinedOrigin: IrDeclarationOrigin? = null,
|
||||
parentOrigin: IrDeclarationOrigin? = null
|
||||
parentOrigin: IrDeclarationOrigin? = null,
|
||||
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null
|
||||
): IrDeclarationOrigin {
|
||||
if (this == null) {
|
||||
return predefinedOrigin ?: parentOrigin ?: IrDeclarationOrigin.DEFINED
|
||||
@@ -703,6 +704,7 @@ fun FirDeclaration?.computeIrOrigin(
|
||||
}
|
||||
|
||||
this is FirCallableDeclaration -> when {
|
||||
fakeOverrideOwnerLookupTag != null && fakeOverrideOwnerLookupTag != containingClassLookupTag() -> IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
symbol.fir.isIntersectionOverride || symbol.fir.isSubstitutionOverride -> IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
parentOrigin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB && symbol.isJavaOrEnhancement -> {
|
||||
IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
|
||||
|
||||
+16
-9
@@ -105,7 +105,11 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi
|
||||
// See org.jetbrains.kotlin.backend.jvm.lower.InheritedDefaultMethodsOnClassesLoweringKt.isDefinitelyNotDefaultImplsMethod
|
||||
(irParent as? IrClass)?.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB &&
|
||||
function.isJavaOrEnhancement -> IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
|
||||
else -> function.computeIrOrigin(predefinedOrigin, parentOrigin = (irParent as? IrDeclaration)?.origin)
|
||||
else -> function.computeIrOrigin(
|
||||
predefinedOrigin,
|
||||
parentOrigin = (irParent as? IrDeclaration)?.origin,
|
||||
fakeOverrideOwnerLookupTag
|
||||
)
|
||||
}
|
||||
val parentIsExternal = irParent.isExternalParent()
|
||||
// We don't generate signatures for local classes
|
||||
@@ -268,15 +272,18 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi
|
||||
isLocal: Boolean = false,
|
||||
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null,
|
||||
): IrProperty = convertCatching(property) {
|
||||
val origin =
|
||||
when {
|
||||
!predefinedOrigin.isExternal &&
|
||||
property.isStatic &&
|
||||
property.name in Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES
|
||||
-> IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER
|
||||
val origin = when {
|
||||
!predefinedOrigin.isExternal &&
|
||||
property.isStatic &&
|
||||
property.name in Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES
|
||||
-> IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER
|
||||
|
||||
else -> property.computeIrOrigin(predefinedOrigin, parentOrigin = (irParent as? IrDeclaration)?.origin)
|
||||
}
|
||||
else -> property.computeIrOrigin(
|
||||
predefinedOrigin,
|
||||
parentOrigin = (irParent as? IrDeclaration)?.origin,
|
||||
fakeOverrideOwnerLookupTag
|
||||
)
|
||||
}
|
||||
// See similar comments in createIrFunction above
|
||||
val parentIsExternal = irParent.isExternalParent()
|
||||
val signature =
|
||||
|
||||
@@ -5,9 +5,10 @@
|
||||
|
||||
// WITH_STDLIB
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
|
||||
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-62535
|
||||
// TARGET_BACKEND: JVM
|
||||
|
||||
// IGNORE_BACKEND_K2: JVM_IR
|
||||
// REASON: K2 incorrectly generates IR for B.bar f/o
|
||||
// MODULE: common
|
||||
// TARGET_PLATFORM: Common
|
||||
|
||||
|
||||
+4
-1
@@ -1,6 +1,9 @@
|
||||
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE, WASM
|
||||
// WITH_STDLIB
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// IGNORE_BACKEND_K2: JVM_IR
|
||||
// REASON: K2 incorrectly generates IR for S1.p f/o
|
||||
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-62535
|
||||
|
||||
// MODULE: common
|
||||
// TARGET_PLATFORM: Common
|
||||
@@ -41,4 +44,4 @@ fun box(): String {
|
||||
} else {
|
||||
"FAIL"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -1,6 +1,9 @@
|
||||
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE, WASM
|
||||
// WITH_STDLIB
|
||||
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-62535
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// IGNORE_BACKEND_K2: ANY
|
||||
// REASON: K2 incorrectly generates IR for S2.s3 f/o
|
||||
|
||||
// MODULE: common
|
||||
// TARGET_PLATFORM: Common
|
||||
@@ -39,4 +42,4 @@ actual interface S : S1, S2 {
|
||||
fun s3() = s1() + s2()
|
||||
}
|
||||
|
||||
fun box() = B().s3()
|
||||
fun box() = B().s3()
|
||||
|
||||
Reference in New Issue
Block a user