[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(
|
fun FirDeclaration?.computeIrOrigin(
|
||||||
predefinedOrigin: IrDeclarationOrigin? = null,
|
predefinedOrigin: IrDeclarationOrigin? = null,
|
||||||
parentOrigin: IrDeclarationOrigin? = null
|
parentOrigin: IrDeclarationOrigin? = null,
|
||||||
|
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null
|
||||||
): IrDeclarationOrigin {
|
): IrDeclarationOrigin {
|
||||||
if (this == null) {
|
if (this == null) {
|
||||||
return predefinedOrigin ?: parentOrigin ?: IrDeclarationOrigin.DEFINED
|
return predefinedOrigin ?: parentOrigin ?: IrDeclarationOrigin.DEFINED
|
||||||
@@ -703,6 +704,7 @@ fun FirDeclaration?.computeIrOrigin(
|
|||||||
}
|
}
|
||||||
|
|
||||||
this is FirCallableDeclaration -> when {
|
this is FirCallableDeclaration -> when {
|
||||||
|
fakeOverrideOwnerLookupTag != null && fakeOverrideOwnerLookupTag != containingClassLookupTag() -> IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
symbol.fir.isIntersectionOverride || symbol.fir.isSubstitutionOverride -> IrDeclarationOrigin.FAKE_OVERRIDE
|
symbol.fir.isIntersectionOverride || symbol.fir.isSubstitutionOverride -> IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
parentOrigin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB && symbol.isJavaOrEnhancement -> {
|
parentOrigin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB && symbol.isJavaOrEnhancement -> {
|
||||||
IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
|
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
|
// See org.jetbrains.kotlin.backend.jvm.lower.InheritedDefaultMethodsOnClassesLoweringKt.isDefinitelyNotDefaultImplsMethod
|
||||||
(irParent as? IrClass)?.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB &&
|
(irParent as? IrClass)?.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB &&
|
||||||
function.isJavaOrEnhancement -> IrDeclarationOrigin.IR_EXTERNAL_JAVA_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()
|
val parentIsExternal = irParent.isExternalParent()
|
||||||
// We don't generate signatures for local classes
|
// We don't generate signatures for local classes
|
||||||
@@ -268,15 +272,18 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi
|
|||||||
isLocal: Boolean = false,
|
isLocal: Boolean = false,
|
||||||
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null,
|
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = null,
|
||||||
): IrProperty = convertCatching(property) {
|
): IrProperty = convertCatching(property) {
|
||||||
val origin =
|
val origin = when {
|
||||||
when {
|
!predefinedOrigin.isExternal &&
|
||||||
!predefinedOrigin.isExternal &&
|
property.isStatic &&
|
||||||
property.isStatic &&
|
property.name in Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES
|
||||||
property.name in Fir2IrDeclarationStorage.ENUM_SYNTHETIC_NAMES
|
-> IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER
|
||||||
-> 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
|
// See similar comments in createIrFunction above
|
||||||
val parentIsExternal = irParent.isExternalParent()
|
val parentIsExternal = irParent.isExternalParent()
|
||||||
val signature =
|
val signature =
|
||||||
|
|||||||
@@ -5,9 +5,10 @@
|
|||||||
|
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
// !LANGUAGE: +MultiPlatformProjects
|
// !LANGUAGE: +MultiPlatformProjects
|
||||||
|
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-62535
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
// IGNORE_BACKEND_K2: JVM_IR
|
||||||
|
// REASON: K2 incorrectly generates IR for B.bar f/o
|
||||||
// MODULE: common
|
// MODULE: common
|
||||||
// TARGET_PLATFORM: Common
|
// TARGET_PLATFORM: Common
|
||||||
|
|
||||||
|
|||||||
+3
@@ -1,6 +1,9 @@
|
|||||||
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE, WASM
|
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE, WASM
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
// !LANGUAGE: +MultiPlatformProjects
|
// !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
|
// MODULE: common
|
||||||
// TARGET_PLATFORM: Common
|
// TARGET_PLATFORM: Common
|
||||||
|
|||||||
+3
@@ -1,6 +1,9 @@
|
|||||||
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE, WASM
|
// IGNORE_BACKEND_K1: JS, JS_IR, JS_IR_ES6, NATIVE, WASM
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-62535
|
||||||
// !LANGUAGE: +MultiPlatformProjects
|
// !LANGUAGE: +MultiPlatformProjects
|
||||||
|
// IGNORE_BACKEND_K2: ANY
|
||||||
|
// REASON: K2 incorrectly generates IR for S2.s3 f/o
|
||||||
|
|
||||||
// MODULE: common
|
// MODULE: common
|
||||||
// TARGET_PLATFORM: Common
|
// TARGET_PLATFORM: Common
|
||||||
|
|||||||
Reference in New Issue
Block a user