| // DUMP_IR | |
| // DUMP_IR_AFTER_INLINE | |
| class A<T> { | |
| fun bar(x: T): T = x | |
| } | |
| fun <T> foo(x: T): T = x | |
| fun <T> A<T>.foo(x: T): T = bar(x) | |
| class A2<T: CharSequence> { | |
| fun bar2(x: T): T = x | |
| } | |
| fun <T : CharSequence> foo2(x: T): T = x | |
| fun <T : CharSequence> A2<T>.foo2(x: T): T = bar2(x) | |
| class A3<T: Comparable<T>> { | |
| fun bar3(x: T): T = x | |
| } | |
| fun <T : Comparable<T>> foo3(x: T): T = x | |
| fun <T : Comparable<T>> A3<T>.foo3(x: T): T = bar3(x) | |
| fun box(): String { | |
| val r1: (Int) -> Int = ::foo | |
| val r2 = A<Int>::foo | |
| val r3 = A<*>::foo | |
| val r4 = A<Int>::bar | |
| val r5 = A<*>::bar | |
| val s1: (String) -> String = ::foo2 | |
| val s2 = A2<String>::foo2 | |
| val s3 = A2<*>::foo2 | |
| val s4 = A2<String>::bar2 | |
| val s5 = A2<*>::bar2 | |
| val t1: (String) -> String = ::foo3 | |
| val t2 = A3<String>::foo3 | |
| val t3 = A3<*>::foo3 | |
| val t4 = A3<String>::bar3 | |
| val t5 = A3<*>::bar3 | |
| return "OK" | |
| } |