Skip to content

Commit 608b889

Browse files
madsagermax-kammerer
authored andcommitted
[JVM_IR] Fix inlining of callable references to extension methods.
Check directly that the referenced function is an extension function instead of relying on the annotation on the type. ^ KT-47988 Fixed.
1 parent 1760bef commit 608b889

File tree

10 files changed

+62
-3
lines changed

10 files changed

+62
-3
lines changed

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class IrInlineCodegen(
5656
val isInlineParameter = irValueParameter.isInlineParameter()
5757
if (isInlineParameter && argumentExpression.isInlineIrExpression()) {
5858
val irReference = (argumentExpression as IrBlock).statements.filterIsInstance<IrFunctionReference>().single()
59-
val lambdaInfo = IrExpressionLambdaImpl(codegen, irReference, irValueParameter)
59+
val lambdaInfo = IrExpressionLambdaImpl(codegen, irReference)
6060
rememberClosure(parameterType, irValueParameter.index, lambdaInfo)
6161
lambdaInfo.generateLambdaBody(sourceCompiler)
6262
lambdaInfo.reference.getArgumentsWithIr().forEachIndexed { index, (_, ir) ->
@@ -117,9 +117,8 @@ class IrInlineCodegen(
117117
class IrExpressionLambdaImpl(
118118
codegen: ExpressionCodegen,
119119
val reference: IrFunctionReference,
120-
irValueParameter: IrValueParameter
121120
) : ExpressionLambda(), IrExpressionLambda {
122-
override val isExtensionLambda: Boolean = irValueParameter.type.isExtensionFunctionType && reference.extensionReceiver == null
121+
override val isExtensionLambda: Boolean = function.extensionReceiverParameter != null && reference.extensionReceiver == null
123122

124123
val function: IrFunction
125124
get() = reference.symbol.owner
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class A(var x: String)
2+
3+
fun f(s: String): String {
4+
fun A.localX() {
5+
x = s + "K"
6+
}
7+
8+
val a: A = A("FAIL")
9+
a.apply(A::localX)
10+
if (a.x != "OK") return a.x
11+
a.apply { localX() }
12+
return a.x
13+
}
14+
15+
fun box(): String {
16+
return f("O")
17+
}

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)