[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:
committed by
Space Team
parent
bcdd85758e
commit
86836e69e9
+33
-7
@@ -1,21 +1,47 @@
|
||||
// FIR_IDENTICAL
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// ISSUE: KT-57022
|
||||
|
||||
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
||||
// ^ KT-57022
|
||||
|
||||
// FILE: J.java
|
||||
// FILE: JavaClass1.java
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class J<T extends @Nullable Object> {
|
||||
public class JavaClass1<T extends @Nullable Object> {
|
||||
public class A {
|
||||
public void output(T x) {}
|
||||
}
|
||||
public class B extends A {}
|
||||
public class B extends A {
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: JavaClass2.java
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public abstract class JavaClass2<T extends @Nullable Object, R extends @Nullable Object> {
|
||||
|
||||
public abstract class A {
|
||||
public abstract void output(R output);
|
||||
}
|
||||
|
||||
public abstract class B extends A {
|
||||
public abstract T element();
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
class Test<T>(val x: T) : J<T>() {
|
||||
class Inv<T>(val x: T)
|
||||
|
||||
class Test_1<TT>(val x: TT) : JavaClass1<TT>() {
|
||||
fun test(b: B) { b.output(x) }
|
||||
}
|
||||
|
||||
class Test_2<TT> : JavaClass2<TT, Inv<TT>>() {
|
||||
fun process(b: B) {
|
||||
b.output(Inv(b.element()))
|
||||
}
|
||||
}
|
||||
|
||||
fun <R> test_3(jb: JavaClass1<R>.B, r: R) {
|
||||
jb.output(r)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user