Update 'this' extension receiver when there's a smart cast
If 'this' (implicit or explicit) was used as an extension receiver, and the corresponding call required a smart-cast, this information was effectively lost in "old" resolution & inference, but is required by "old" JVM BE to generate proper CHECKCASTs.
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FILE: Test.kt
|
||||
open class KFoo {
|
||||
fun foo(): String {
|
||||
if (this is KFooBar) return bar
|
||||
throw AssertionError()
|
||||
}
|
||||
}
|
||||
|
||||
class KFooBar : KFoo(), JBar
|
||||
|
||||
fun box(): String = KFooBar().foo()
|
||||
|
||||
// FILE: JBar.java
|
||||
public interface JBar {
|
||||
default String getBar() {
|
||||
return "OK";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
open class KFoo {
|
||||
fun foo(): String {
|
||||
if (this is KFooQux) return qux
|
||||
throw AssertionError()
|
||||
}
|
||||
}
|
||||
|
||||
class KFooQux : KFoo()
|
||||
|
||||
val KFooQux.qux get() = "OK"
|
||||
|
||||
fun box() = KFooQux().foo()
|
||||
Reference in New Issue
Block a user