Skip to content

Commit 74269bf

Browse files
ddolovovSpace Team
authored andcommitted
IR Inliner: Use correct offsets for tmp vars inside inlined block
^KT-82065 Fixed
1 parent 7c114ad commit 74269bf

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

compiler/ir/ir.inline/src/org/jetbrains/kotlin/ir/inline/FunctionInlining.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ private class CallInlining(
364364

365365
private fun evaluateArguments(
366366
callSiteBuilder: IrStatementsBuilder<*>,
367-
inlinedBlockBuilder: IrStatementsBuilder<*>,
367+
inlinedBlockBuilder: IrInlinedFunctionBlockBuilder,
368368
callSite: IrFunctionAccessExpression,
369369
callee: IrFunction,
370370
parameterToTempVariable: MutableMap<IrValueParameterSymbol, IrValueSymbol>,
@@ -426,16 +426,18 @@ private class CallInlining(
426426
.irGet(tempVarOutsideInlineBlock)
427427
}
428428

429-
val tempVarInsideInlineBlock = inlinedBlockBuilder.irTemporary(
430-
value = valueForTmpVar,
431-
origin = if (parameter.kind == IrParameterKind.ExtensionReceiver) {
432-
IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER
433-
} else {
434-
IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER
429+
val tempVarInsideInlineBlock = inlinedBlockBuilder
430+
.at(UNDEFINED_OFFSET, UNDEFINED_OFFSET)
431+
.irTemporary(
432+
value = valueForTmpVar,
433+
origin = if (parameter.kind == IrParameterKind.ExtensionReceiver) {
434+
IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_EXTENSION_RECEIVER
435+
} else {
436+
IrDeclarationOrigin.IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER
437+
}
438+
).apply {
439+
name = identifier(parameter.name.asStringStripSpecialMarkers())
435440
}
436-
).apply {
437-
name = identifier(parameter.name.asStringStripSpecialMarkers())
438-
}
439441

440442
parameterToTempVariable[parameter.symbol] = tempVarInsideInlineBlock.symbol
441443
}

compiler/testData/codegen/box/inline/kt82065.fir.inlined.ir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ FILE fqName:<root> fileName:/main.kt lineStartOffsets: [0, 1, 2, 3, 4, 5, 6, 7,
325325
INLINED_BLOCK[73, 78]->[186, 213] type=kotlin.Int origin=null
326326
inlinedFunctionSymbol: public final fun foo (a: kotlin.Int): kotlin.Int declared in <root>
327327
inlinedFunctionFileEntry: FILE_ENTRY path:/lib.kt
328-
VAR[73, 78] IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER name:a type:kotlin.Int [val]
328+
VAR[-1, -1] IR_TEMPORARY_VARIABLE_FOR_INLINED_PARAMETER name:a type:kotlin.Int [val]
329329
CONST[203, 204] Int type=kotlin.Int value=1
330330
RETURN[213, 213] type=kotlin.Nothing from='{IrReturnableBlockImpl}'
331331
TYPE_OP[208, 213] type=kotlin.Int origin=IMPLICIT_CAST typeOperand=kotlin.Int

0 commit comments

Comments
 (0)