86836e69e9
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
48 lines
911 B
Kotlin
Vendored
48 lines
911 B
Kotlin
Vendored
// FIR_IDENTICAL
|
|
// TARGET_BACKEND: JVM_IR
|
|
// ISSUE: KT-57022
|
|
|
|
// FILE: JavaClass1.java
|
|
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public class JavaClass1<T extends @Nullable Object> {
|
|
public class A {
|
|
public void output(T x) {}
|
|
}
|
|
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 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)
|
|
}
|