FIR: Preserve non-custom attributes after substitution

The test is being fixed since synthetic call for elvis has @Exact-attribute on return type
This commit is contained in:
Denis.Zharkov
2021-11-15 16:11:12 +03:00
committed by teamcityserver
parent e26abbbbb0
commit 883b18a0c6
27 changed files with 239 additions and 185 deletions
+10 -10
View File
@@ -49,11 +49,11 @@ FILE fqName:<root> fileName:/kt30796.kt
then: GET_VAR 'val tmp_1: T of <root>.test [val] declared in <root>.test' type=T of <root>.test origin=null
VAR name:x3 type:kotlin.Any [val]
BLOCK type=kotlin.Any origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:T of <root>.test [val]
BLOCK type=T of <root>.test origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.Any? [val]
BLOCK type=kotlin.Any? origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:T of <root>.test [val]
GET_VAR 'value: T of <root>.test declared in <root>.test' type=T of <root>.test origin=null
WHEN type=T of <root>.test origin=ELVIS
WHEN type=kotlin.Any? 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_4: T of <root>.test [val] declared in <root>.test' type=T of <root>.test origin=null
@@ -65,19 +65,19 @@ FILE fqName:<root> fileName:/kt30796.kt
WHEN type=kotlin.Any 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_3: T of <root>.test [val] declared in <root>.test' type=T of <root>.test origin=null
arg0: GET_VAR 'val tmp_3: kotlin.Any? [val] declared in <root>.test' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=42
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: GET_VAR 'val tmp_3: T of <root>.test [val] declared in <root>.test' type=T of <root>.test origin=null
then: GET_VAR 'val tmp_3: kotlin.Any? [val] declared in <root>.test' type=kotlin.Any? origin=null
VAR name:x4 type:kotlin.Any [val]
BLOCK type=kotlin.Any origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:T of <root>.test [val]
BLOCK type=T of <root>.test origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.Any? [val]
BLOCK type=kotlin.Any? origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:T of <root>.test [val]
GET_VAR 'value: T of <root>.test declared in <root>.test' type=T of <root>.test origin=null
WHEN type=T of <root>.test origin=ELVIS
WHEN type=kotlin.Any? 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_6: T of <root>.test [val] declared in <root>.test' type=T of <root>.test origin=null
@@ -89,12 +89,12 @@ FILE fqName:<root> fileName:/kt30796.kt
WHEN type=kotlin.Any 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_5: T of <root>.test [val] declared in <root>.test' type=T of <root>.test origin=null
arg0: GET_VAR 'val tmp_5: kotlin.Any? [val] declared in <root>.test' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=42
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: GET_VAR 'val tmp_5: T of <root>.test [val] declared in <root>.test' type=T of <root>.test origin=null
then: GET_VAR 'val tmp_5: kotlin.Any? [val] declared in <root>.test' type=kotlin.Any? origin=null
VAR name:x5 type:kotlin.Any [val]
BLOCK type=kotlin.Any origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_7 type:kotlin.Any? [val]
+2 -2
View File
@@ -24,7 +24,7 @@ fun <T : Any?> test(value: T, value2: T) {
}
}
val x3: Any = { // BLOCK
val <elvis>: T = { // BLOCK
val <elvis>: Any? = { // BLOCK
val <elvis>: T = value
when {
EQEQ(arg0 = <elvis>, arg1 = null) -> value2
@@ -37,7 +37,7 @@ fun <T : Any?> test(value: T, value2: T) {
}
}
val x4: Any = { // BLOCK
val <elvis>: T = { // BLOCK
val <elvis>: Any? = { // BLOCK
val <elvis>: T = value
when {
EQEQ(arg0 = <elvis>, arg1 = null) -> value2