[IR] Fix mangling generic properties from IR-based descriptors
For type parameters of generic properties, `DeclarationDescriptor#getContainingDeclaration` must return the property descriptor instead of the accessor function descriptor. ^KT-57436 Fixed
This commit is contained in:
committed by
Space Team
parent
5f1976c450
commit
5d3fe7547a
@@ -1146,6 +1146,9 @@ fun IrErrorDeclaration.toIrBasedDescriptor() = IrBasedErrorDescriptor(this)
|
|||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
private fun getContainingDeclaration(declaration: IrDeclaration): DeclarationDescriptor {
|
private fun getContainingDeclaration(declaration: IrDeclaration): DeclarationDescriptor {
|
||||||
val parent = declaration.parent
|
val parent = declaration.parent
|
||||||
|
if (declaration is IrTypeParameter && parent is IrSimpleFunction) {
|
||||||
|
parent.correspondingPropertySymbol?.owner?.let { return it.toIrBasedDescriptor() }
|
||||||
|
}
|
||||||
val parentDescriptor = (parent as IrSymbolOwner).let {
|
val parentDescriptor = (parent as IrSymbolOwner).let {
|
||||||
if (it is IrDeclaration) it.toIrBasedDescriptor() else it.symbol.descriptor
|
if (it is IrDeclaration) it.toIrBasedDescriptor() else it.symbol.descriptor
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
// ^ KT-57436
|
// ^ KT-57818
|
||||||
|
|
||||||
class C<T>
|
class C<T>
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
||||||
// ^ KT-57754, KT-57436
|
// ^ KT-57754
|
||||||
|
|
||||||
interface I {
|
interface I {
|
||||||
val <T> T.id: T
|
val <T> T.id: T
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
// ^ KT-57436
|
// ^ KT-57818
|
||||||
|
|
||||||
val test1 get() = 42
|
val test1 get() = 42
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
// ^ KT-57436
|
// ^ KT-57818
|
||||||
|
|
||||||
class Test1<T : U, U>
|
class Test1<T : U, U>
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
||||||
// ^ KT-57429, KT-57436
|
// ^ KT-57429
|
||||||
|
|
||||||
open class L<LL>(val ll: LL)
|
open class L<LL>(val ll: LL)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
// ^ KT-57436
|
// ^ KT-57818
|
||||||
|
|
||||||
fun <T> castFun(x: Any) = x as T
|
fun <T> castFun(x: Any) = x as T
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
// ^ KT-57436
|
// ^ KT-57818
|
||||||
|
|
||||||
val <T> T.id get() = this
|
val <T> T.id get() = this
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
// ^ KT-57436
|
// ^ KT-57818
|
||||||
|
|
||||||
inline fun <reified T : Any> Any.test1(): T? =
|
inline fun <reified T : Any> Any.test1(): T? =
|
||||||
if (this is T) this else null
|
if (this is T) this else null
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
// ^KT-57436
|
// ^ KT-57818
|
||||||
|
|
||||||
inline fun <reified T : Any> classRefFun() = T::class
|
inline fun <reified T : Any> classRefFun() = T::class
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
|
||||||
// ^ KT-57436
|
|
||||||
|
|
||||||
import C.f
|
import C.f
|
||||||
import C.p
|
import C.p
|
||||||
import C.ext
|
import C.ext
|
||||||
|
|||||||
+3
-2
@@ -1,6 +1,7 @@
|
|||||||
// FIR_IDENTICAL
|
// FIR_IDENTICAL
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
|
||||||
// ^ KT-57429
|
// MUTE_SIGNATURE_COMPARISON_K2: JS_IR
|
||||||
|
// ^ KT-57818
|
||||||
|
|
||||||
val <T : CharSequence> T.gk: () -> T
|
val <T : CharSequence> T.gk: () -> T
|
||||||
get() = { -> this }
|
get() = { -> this }
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// IGNORE_BACKEND: JS_IR_ES6
|
// IGNORE_BACKEND: JS_IR_ES6
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
|
||||||
// ^ KT-57436
|
|
||||||
|
|
||||||
interface CPointed
|
interface CPointed
|
||||||
|
|
||||||
inline fun <reified T : CPointed> CPointed.reinterpret(): T = TODO()
|
inline fun <reified T : CPointed> CPointed.reinterpret(): T = TODO()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// !LANGUAGE: -ForbidUsingExtensionPropertyTypeParameterInDelegate
|
// !LANGUAGE: -ForbidUsingExtensionPropertyTypeParameterInDelegate
|
||||||
|
|
||||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
||||||
// ^ KT-57429, KT-57436
|
// ^ KT-57429
|
||||||
|
|
||||||
import kotlin.reflect.KProperty1
|
import kotlin.reflect.KProperty1
|
||||||
import kotlin.reflect.KMutableProperty1
|
import kotlin.reflect.KMutableProperty1
|
||||||
|
|||||||
Reference in New Issue
Block a user