From feca40071d7c2dc4a41fdf9e65d6d3877d83980b Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Fri, 3 Mar 2023 17:21:18 +0100 Subject: [PATCH] K2, MPP: Fix parent lookup in mangler in MPP scenario fixes compilation of the ListTest.kt in stdlib tests #KT-57131 fixed (bootstrap required to see the effect!) --- .../kotlin/fir/backend/jvm/FirJvmMangleComputer.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt index f4453f3918e..65d99bcbbe8 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt @@ -141,13 +141,19 @@ class FirJvmMangleComputer( } override fun getEffectiveParent(typeParameter: ConeTypeParameterLookupTag): FirMemberDeclaration = typeParameter.symbol.fir.run { + + fun FirTypeParameter.sameAs(other: FirTypeParameter) = + this === other || + (name == other.name && bounds.size == other.bounds.size && + bounds.zip(other.bounds).all { it.first.coneType == it.second.coneType }) + for (parent in typeParameterContainers) { - if (this in parent.typeParameters) { + if (parent.typeParameters.any { this.sameAs(it.symbol.fir) }) { return parent } if (parent is FirCallableDeclaration) { val overriddenFir = parent.originalForSubstitutionOverride - if (overriddenFir is FirTypeParametersOwner && this in overriddenFir.typeParameters) { + if (overriddenFir is FirTypeParametersOwner && overriddenFir.typeParameters.any { this.sameAs(it) }) { return parent } }