| // RUN_PIPELINE_TILL: FRONTEND |
| // DIAGNOSTICS: -DEBUG_INFO_SMARTCAST |
| |
| class Foo { |
| fun foo(a: Foo): Foo = a |
| var f: Foo? = null |
| } |
| |
| fun main() { |
| val x: Foo? = null |
| val y: Foo? = null |
| |
| x<!UNSAFE_CALL!>.<!>foo(<!ARGUMENT_TYPE_MISMATCH!>y<!>) |
| x!!.foo(<!ARGUMENT_TYPE_MISMATCH!>y<!>) |
| x.foo(y!!) |
| x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo(y<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>) |
| |
| val a: Foo? = null |
| val b: Foo? = null |
| val c: Foo? = null |
| |
| a<!UNSAFE_CALL!>.<!>foo(b<!UNSAFE_CALL!>.<!>foo(<!ARGUMENT_TYPE_MISMATCH!>c<!>)) |
| a!!.foo(b<!UNSAFE_CALL!>.<!>foo(<!ARGUMENT_TYPE_MISMATCH!>c<!>)) |
| a.foo(b!!.foo(<!ARGUMENT_TYPE_MISMATCH!>c<!>)) |
| a<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo(b<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo(<!ARGUMENT_TYPE_MISMATCH!>c<!>)) |
| a.foo(b.foo(c!!)) |
| a<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo(b.foo(c<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)) |
| a.foo(b<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo(c<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)) |
| a<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo(b<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo(c<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)) |
| |
| val z: Foo? = null |
| z!!.foo(z<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>) |
| |
| val w: Foo? = null |
| w<!UNSAFE_CALL!>.<!>f = z |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(w<!UNSAFE_CALL!>.<!>f)<!> = z |
| <!WRAPPED_LHS_IN_ASSIGNMENT_ERROR!>(label@ w<!UNSAFE_CALL!>.<!>f)<!> = z |
| w!!.f = z |
| w.f = z |
| w<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.f = z |
| w.f<!UNSAFE_CALL!>.<!>f = z |
| w.f!!.f = z |
| } |
| |
| /* GENERATED_FIR_TAGS: assignment, checkNotNullCall, classDeclaration, functionDeclaration, localProperty, nullableType, |
| propertyDeclaration, smartcast */ |