From 0b38ab4f014b22f1ce10c2fa38b00c7b733aee99 Mon Sep 17 00:00:00 2001 From: Pavel Mikhailovskii Date: Thu, 29 Dec 2022 11:28:11 +0000 Subject: [PATCH] KT-51277 Fix matching of context receivers and parameter desriptors --- .../codegen/FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../psi2ir/generators/ArgumentsGenerationUtils.kt | 4 ++-- .../contextReceivers/kt51277.kt | 15 +++++++++++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 36da8d18cba..787bce512e6 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -17498,6 +17498,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51247.kt"); } + @Test + @TestMetadata("kt51277.kt") + public void testKt51277() throws Exception { + runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt"); + } + @Test @TestMetadata("kt51284.kt") public void testKt51284() throws Exception { diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt index 2592181a46e..f81d4c8d561 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt @@ -95,7 +95,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse receiver.declarationDescriptor.extensionReceiverParameter!!.type.toIrType() is ContextReceiver -> { val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters.find { - it.value == receiver + it.value == receiver.original } ?: error("Unknown receiver: $receiver") receiverParameter.type.toIrType() } @@ -133,7 +133,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse } is ContextReceiver -> { val receiverParameter = receiver.declarationDescriptor.contextReceiverParameters - .single { it.value == receiver } + .single { it.value == receiver.original } IrGetValueImpl( defaultStartOffset, defaultStartOffset, irReceiverType, context.symbolTable.referenceValueParameter(receiverParameter) diff --git a/compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt b/compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt new file mode 100644 index 00000000000..1e1ce09df19 --- /dev/null +++ b/compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt @@ -0,0 +1,15 @@ +// !LANGUAGE: +ContextReceivers +// TARGET_BACKEND: JVM_IR + +class C { + fun foo() = 1 +} + +context(C<*>) fun test() = foo() + +fun box(): String { + with(C()) { + test() + } + return "OK" +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 45b047ef927..65042f4244a 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -17498,6 +17498,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51247.kt"); } + @Test + @TestMetadata("kt51277.kt") + public void testKt51277() throws Exception { + runTest("compiler/testData/codegen/box/extensionFunctions/contextReceivers/kt51277.kt"); + } + @Test @TestMetadata("kt51284.kt") public void testKt51284() throws Exception {