[FIR2IR] Unwrap call-site substitution overrides

Generating IR declarations for use-site substitution overrides leads
to IR that is different from K1 as well as problems in signature
generation which relies on mangling. Use-site substitutions can contain
references to type parameters from the call-site which aren't handled
in mangling.

#KT-57022 Fixed
This commit is contained in:
Kirill Rakhman
2023-06-07 16:16:36 +02:00
committed by Space Team
parent bcdd85758e
commit 86836e69e9
10 changed files with 248 additions and 121 deletions
@@ -78,7 +78,7 @@ class Derived1<T : Any?> : Base<T> {
// CHECK JVM_IR:
// Mangled name: Derived1#<get-bar>(){}1:0
// Public signature: /Derived1.bar.<get-bar>|7899956589744407340[0]
// CHECK JS_IR:
// CHECK JS_IR NATIVE:
// Mangled name: Derived1#<get-bar>(){}
// Public signature: /Derived1.bar.<get-bar>|6880642144337645699[0]
override get
@@ -95,7 +95,7 @@ class Derived1<T : Any?> : Base<T> {
// CHECK JVM_IR:
// Mangled name: Derived1#foo(0:0){0§<kotlin.Any?>}1:0
// Public signature: /Derived1.foo|8673945311830780726[0]
// CHECK JS_IR:
// CHECK JS_IR NATIVE:
// Mangled name: Derived1#foo(0:0){0§<kotlin.Any?>}
// Public signature: /Derived1.foo|-6838606926256314363[0]
override fun <Y : Any?> foo(y: Y): T
@@ -107,7 +107,7 @@ class Derived1<T : Any?> : Base<T> {
// CHECK JVM_IR:
// Mangled name: Derived1#<get-x>(){}1:0
// Public signature: /Derived1.x.<get-x>|-8893883356128097563[0]
// CHECK JS_IR:
// CHECK JS_IR NATIVE:
// Mangled name: Derived1#<get-x>(){}
// Public signature: /Derived1.x.<get-x>|1482705010654679335[0]
/* fake */ override get(): T
@@ -119,7 +119,7 @@ class Derived1<T : Any?> : Base<T> {
// CHECK JVM_IR:
// Mangled name: Derived1#<get-exn>@0:0(){0§<kotlin.Any?>}1:0
// Public signature: /Derived1.exn.<get-exn>|6217753676739394662[0]
// CHECK JS_IR:
// CHECK JS_IR NATIVE:
// Mangled name: Derived1#<get-exn>@0:0(){0§<kotlin.Any?>}
// Public signature: /Derived1.exn.<get-exn>|-202876889853335253[0]
override get(): T