FIR2IR insert implicit cast on elvis RHS
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// FIR status: Fail: should have been an exception in 'bar()'
|
||||
// MODULE: lib
|
||||
// FILE: RightElvisOperand.java
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
Module: lib
|
||||
Module: main
|
||||
FILE fqName:<root> fileName:/nullCheckInElvisRhs.kt
|
||||
FUN name:baz visibility:public modality:FINAL <> () returnType:kotlin.String?
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public final fun baz (): kotlin.String? declared in <root>'
|
||||
CONST Null type=kotlin.Nothing? value=null
|
||||
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.String
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public final fun test (): kotlin.String declared in <root>'
|
||||
BLOCK type=kotlin.String origin=ELVIS
|
||||
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.String? [val]
|
||||
CALL 'public final fun baz (): kotlin.String? declared in <root>' type=kotlin.String? origin=null
|
||||
WHEN type=kotlin.String origin=ELVIS
|
||||
BRANCH
|
||||
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||
arg0: GET_VAR 'val tmp_0: kotlin.String? [val] declared in <root>.test' type=kotlin.String? origin=null
|
||||
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||
then: TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
|
||||
CALL 'public/*package*/ open fun foo (): @[FlexibleNullability] kotlin.String? declared in <root>.RightElvisOperand' type=@[FlexibleNullability] kotlin.String? origin=null
|
||||
BRANCH
|
||||
if: CONST Boolean type=kotlin.Boolean value=true
|
||||
then: GET_VAR 'val tmp_0: kotlin.String? [val] declared in <root>.test' type=kotlin.String? origin=null
|
||||
@@ -0,0 +1,17 @@
|
||||
// MODULE: lib
|
||||
// MODULE: main
|
||||
// FILE: nullCheckInElvisRhs.kt
|
||||
|
||||
fun baz(): String? {
|
||||
return null
|
||||
}
|
||||
|
||||
fun test(): String {
|
||||
return { // BLOCK
|
||||
val <elvis>: String? = baz()
|
||||
when {
|
||||
EQEQ(arg0 = <elvis>, arg1 = null) -> foo() /*!! String */
|
||||
else -> <elvis>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
Module: lib
|
||||
Module: main
|
||||
FILE fqName:<root> fileName:/nullCheckInElvisRhs.kt
|
||||
FUN name:baz visibility:public modality:FINAL <> () returnType:kotlin.String?
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public final fun baz (): kotlin.String? declared in <root>'
|
||||
CONST Null type=kotlin.Nothing? value=null
|
||||
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.String
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='public final fun test (): kotlin.String declared in <root>'
|
||||
BLOCK type=kotlin.String origin=ELVIS
|
||||
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.String? [val]
|
||||
CALL 'public final fun baz (): kotlin.String? declared in <root>' type=kotlin.String? origin=null
|
||||
WHEN type=kotlin.String origin=null
|
||||
BRANCH
|
||||
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||
arg0: GET_VAR 'val tmp_0: kotlin.String? [val] declared in <root>.test' type=kotlin.String? origin=null
|
||||
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||
then: TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
|
||||
CALL 'public/*package*/ open fun foo (): @[FlexibleNullability] kotlin.String? declared in <root>.RightElvisOperand' type=@[FlexibleNullability] kotlin.String? origin=null
|
||||
BRANCH
|
||||
if: CONST Boolean type=kotlin.Boolean value=true
|
||||
then: GET_VAR 'val tmp_0: kotlin.String? [val] declared in <root>.test' type=kotlin.String? origin=null
|
||||
@@ -0,0 +1,17 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
|
||||
// MODULE: lib
|
||||
// FILE: RightElvisOperand.java
|
||||
|
||||
class RightElvisOperand {
|
||||
static String foo() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// MODULE: main(lib)
|
||||
// FILE: nullCheckInElvisRhs.kt
|
||||
|
||||
fun baz(): String? = null
|
||||
|
||||
fun test(): String = baz() ?: RightElvisOperand.foo()
|
||||
@@ -0,0 +1,18 @@
|
||||
// MODULE: lib
|
||||
// MODULE: main
|
||||
// FILE: nullCheckInElvisRhs.kt
|
||||
|
||||
fun baz(): String? {
|
||||
return null
|
||||
}
|
||||
|
||||
fun test(): String {
|
||||
return { // BLOCK
|
||||
val tmp0_elvis_lhs: String? = baz()
|
||||
when {
|
||||
EQEQ(arg0 = tmp0_elvis_lhs, arg1 = null) -> foo() /*!! String */
|
||||
else -> tmp0_elvis_lhs
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user