FIR2IR: make IrGetValue type consistent with IrVariable type
#KT-55458 Fixed
This commit is contained in:
committed by
Space Team
parent
1c4d9175e7
commit
f0ea8ab81b
@@ -1210,6 +1210,9 @@ class Fir2IrDeclarationStorage(
|
||||
irParent: IrDeclarationParent,
|
||||
givenOrigin: IrDeclarationOrigin? = null
|
||||
): IrVariable = convertCatching(variable) {
|
||||
// Note: for components call, we have to change type here (to original component type) to keep compatibility with PSI2IR
|
||||
// Some backend optimizations related to withIndex() probably depend on this type: index should always be Int
|
||||
// See e.g. forInStringWithIndexWithExplicitlyTypedIndexVariable.kt from codegen box tests
|
||||
val type = ((variable.initializer as? FirComponentCall)?.typeRef ?: variable.returnTypeRef).toIrType()
|
||||
// Some temporary variables are produced in RawFirBuilder, but we consistently use special names for them.
|
||||
val origin = when {
|
||||
|
||||
+4
-1
@@ -458,7 +458,10 @@ class CallAndReferenceGenerator(
|
||||
|
||||
is IrValueSymbol -> {
|
||||
IrGetValueImpl(
|
||||
startOffset, endOffset, type, symbol,
|
||||
// Note: sometimes we change an IR type of local variable
|
||||
// (see component call case: Fir2IrDeclarationStorage.createIrVariable -> val type = ...)
|
||||
// That's why we should use here v the IR variable type and not FIR converted type (to prevent IR inconsistency)
|
||||
startOffset, endOffset, symbol.owner.type, symbol,
|
||||
origin = if (variableAsFunctionMode) IrStatementOrigin.VARIABLE_AS_FUNCTION
|
||||
else calleeReference.statementOrigin()
|
||||
)
|
||||
|
||||
-1
@@ -1,6 +1,5 @@
|
||||
// WITH_STDLIB
|
||||
// KT-55458
|
||||
// IGNORE_BACKEND_K2: NATIVE
|
||||
|
||||
val arr = arrayOf("a", "b", "c", "d")
|
||||
|
||||
|
||||
-1
@@ -1,6 +1,5 @@
|
||||
// WITH_STDLIB
|
||||
// KT-55458
|
||||
// IGNORE_BACKEND_K2: NATIVE
|
||||
|
||||
val xs = "abcd"
|
||||
|
||||
|
||||
-1
@@ -1,6 +1,5 @@
|
||||
// WITH_STDLIB
|
||||
// KT-55458
|
||||
// IGNORE_BACKEND_K2: NATIVE
|
||||
|
||||
val xs = listOf("a", "b", "c", "d")
|
||||
|
||||
|
||||
-1
@@ -1,6 +1,5 @@
|
||||
// WITH_STDLIB
|
||||
// KT-55458
|
||||
// IGNORE_BACKEND_K2: NATIVE
|
||||
|
||||
val xs = listOf("a", "b", "c", "d").asSequence()
|
||||
|
||||
|
||||
@@ -11,4 +11,4 @@ FILE fqName:<root> fileName:/kt55458.kt
|
||||
CALL 'public final fun component1 (): A of kotlin.Pair [operator] declared in kotlin.Pair' type=kotlin.Int origin=COMPONENT_N(index=1)
|
||||
$this: GET_VAR 'val tmp_0: kotlin.Pair<kotlin.Int, kotlin.Int> [val] declared in <root>.main' type=kotlin.Pair<kotlin.Int, kotlin.Int> origin=null
|
||||
CALL 'public final fun println (message: kotlin.Any?): kotlin.Unit [inline] declared in kotlin.io.ConsoleKt' type=kotlin.Unit origin=null
|
||||
message: GET_VAR 'val a: kotlin.Int [val] declared in <root>.main' type=kotlin.Any origin=null
|
||||
message: GET_VAR 'val a: kotlin.Int [val] declared in <root>.main' type=kotlin.Int origin=null
|
||||
|
||||
compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.ir.txt
Vendored
+5
-5
@@ -142,8 +142,8 @@ FILE fqName:<root> fileName:/enhancedNullabilityInDestructuringAssignment.kt
|
||||
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=COMPONENT_N(index=2)
|
||||
$this: GET_VAR 'val tmp_1: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in <root>.test2' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null
|
||||
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||
x: GET_VAR 'val x: @[EnhancedNullability] kotlin.String [val] declared in <root>.test2' type=kotlin.String origin=null
|
||||
y: GET_VAR 'val y: @[EnhancedNullability] kotlin.String [val] declared in <root>.test2' type=kotlin.String origin=null
|
||||
x: GET_VAR 'val x: @[EnhancedNullability] kotlin.String [val] declared in <root>.test2' type=@[EnhancedNullability] kotlin.String origin=null
|
||||
y: GET_VAR 'val y: @[EnhancedNullability] kotlin.String [val] declared in <root>.test2' type=@[EnhancedNullability] kotlin.String origin=null
|
||||
FUN name:test2Desugared visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||
BLOCK_BODY
|
||||
VAR name:tmp type:@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val]
|
||||
@@ -173,8 +173,8 @@ FILE fqName:<root> fileName:/enhancedNullabilityInDestructuringAssignment.kt
|
||||
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=COMPONENT_N(index=2)
|
||||
$this: GET_VAR 'val tmp_2: <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> [val] declared in <root>.test3' type=<root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=null
|
||||
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||
x: GET_VAR 'val x: @[EnhancedNullability] kotlin.String [val] declared in <root>.test3' type=kotlin.String origin=null
|
||||
y: GET_VAR 'val y: @[EnhancedNullability] kotlin.String [val] declared in <root>.test3' type=kotlin.String origin=null
|
||||
x: GET_VAR 'val x: @[EnhancedNullability] kotlin.String [val] declared in <root>.test3' type=@[EnhancedNullability] kotlin.String origin=null
|
||||
y: GET_VAR 'val y: @[EnhancedNullability] kotlin.String [val] declared in <root>.test3' type=@[EnhancedNullability] kotlin.String origin=null
|
||||
FUN name:test4 visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||
BLOCK_BODY
|
||||
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> [val]
|
||||
@@ -193,4 +193,4 @@ FILE fqName:<root> fileName:/enhancedNullabilityInDestructuringAssignment.kt
|
||||
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> origin=null
|
||||
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||
x: GET_VAR 'val x: kotlin.Int [val] declared in <root>.test4' type=kotlin.Int origin=null
|
||||
y: GET_VAR 'val y: @[EnhancedNullability] <root>.P [val] declared in <root>.test4' type=<root>.P origin=null
|
||||
y: GET_VAR 'val y: @[EnhancedNullability] <root>.P [val] declared in <root>.test4' type=@[EnhancedNullability] <root>.P origin=null
|
||||
|
||||
Reference in New Issue
Block a user