Files
kotlin-fork/compiler/testData/diagnostics/tests/smartCasts/kt10444.kt
T
Dmitriy Novozhilov e6b5cb5216 [TD] Update diagnostics test data due to new test runners
Update includes:
- Changing syntax of `OI/`NI` tags from `<!NI;TAG!>` to `<!TAG{NI}!>`
- Fix some incorrect directives
- Change order of diagnostics in some places
- Remove ignored diagnostics from FIR test data (previously `DIAGNOSTICS` didn't work)
- Update FIR dumps in some places and add `FIR_IDENTICAL` if needed
- Replace all JAVAC_SKIP with SKIP_JAVAC directive
2020-12-16 19:52:25 +03:00

36 lines
949 B
Kotlin
Vendored

// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// KT-10444 Do not ignore smart (unchecked) casts to the same classifier
class Qwe<T : Any>(val a: T?) {
fun test1(obj: Any) {
obj <!UNCHECKED_CAST!>as Qwe<T><!>
check(<!DEBUG_INFO_SMARTCAST!>obj<!>.a)
}
fun test1(obj: Qwe<*>) {
obj <!UNCHECKED_CAST!>as Qwe<T><!>
check(<!DEBUG_INFO_SMARTCAST{OI}!>obj<!>.a)
}
fun check(a: T?) {
}
}
open class Foo
open class Bar<T: Foo>(open val a: T?, open val b: T?) {
@Suppress("UNCHECKED_CAST")
fun compare(obj: Any) {
if (obj !is Bar<*>) {
throw IllegalArgumentException()
}
if (System.currentTimeMillis() > 100) {
val b = (obj as Bar<T>).b
if (b == null) throw IllegalArgumentException()
check(<!DEBUG_INFO_SMARTCAST!>obj<!>.a, <!DEBUG_INFO_SMARTCAST!>b<!>)
}
}
fun check(a: T?, b: T) {
}
}