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 8fd79317883..78113e45b72 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 @@ -13879,6 +13879,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt42253.kt"); } + @Test + @TestMetadata("kt48825.kt") + public void testKt48825() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt"); + } + @Test @TestMetadata("lazy.kt") public void testLazy() throws Exception { diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt index 613cb2b52fe..22a9d09d33e 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt @@ -287,7 +287,8 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : IrEle for (index in expression.symbol.owner.valueParameters.indices) { val value = expression.getValueArgument(index) if (value is IrCallableReference<*> && value.origin == IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE) { - if (!usesPropertyParameterCache.getOrPut(expression.symbol) { expression.symbol.owner.usesParameter(index) }) { + val resolved = expression.symbol.owner.resolveFakeOverride() ?: expression.symbol.owner + if (!usesPropertyParameterCache.getOrPut(resolved.symbol) { resolved.usesParameter(index) }) { expression.putValueArgument(index, IrConstImpl.constNull(value.startOffset, value.endOffset, value.type)) } } diff --git a/compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt b/compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt new file mode 100644 index 00000000000..40da534b371 --- /dev/null +++ b/compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt @@ -0,0 +1,31 @@ +// IGNORE_BACKEND: JVM +// MODULE: lib +// FILE: lib.kt +import kotlin.reflect.KProperty + +open class A { + inline operator fun Int.getValue(thisRef: Any?, property: KProperty<*>): String = + property.name +} + +// MODULE: main(lib) +// FILE: main.kt +import kotlin.reflect.KProperty + +open class B : A() { + var result = "fail" + + inline operator fun String.getValue(thisRef: Any?, property: KProperty<*>): String = + property.name + + inline operator fun String.setValue(thisRef: Any?, property: KProperty<*>, value: String) { + result = this + property.name + } +} + +class C : B() { + val O by 1 + var K by O +} + +fun box() = C().run { K = "..."; result } diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 19dabcd9cb8..cd5b331c9d2 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -13801,6 +13801,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt42253.kt"); } + @Test + @TestMetadata("kt48825.kt") + public void testKt48825() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt"); + } + @Test @TestMetadata("lazy.kt") public void testLazy() throws Exception { 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 5ea2b30f22b..6769943a4ee 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 @@ -13879,6 +13879,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt42253.kt"); } + @Test + @TestMetadata("kt48825.kt") + public void testKt48825() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt"); + } + @Test @TestMetadata("lazy.kt") public void testLazy() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index fb95f315df0..5a6dceaf4f3 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -11185,6 +11185,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class OptimizedDelegatedProperties extends AbstractLightAnalysisModeTest { + @TestMetadata("kt48825.kt") + public void ignoreKt48825() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt"); + } + private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath); } diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 8bfdaea319f..e55808958ed 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -10027,6 +10027,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt42253.kt"); } + @TestMetadata("kt48825.kt") + public void testKt48825() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt"); + } + @TestMetadata("lazy.kt") public void testLazy() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/lazy.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 9c9202e6638..f62983ee5c7 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -9433,6 +9433,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt42253.kt"); } + @TestMetadata("kt48825.kt") + public void testKt48825() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt"); + } + @TestMetadata("lazy.kt") public void testLazy() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/lazy.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 118d6477167..61ebd71d6d0 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -9413,6 +9413,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt42253.kt"); } + @TestMetadata("kt48825.kt") + public void testKt48825() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/kt48825.kt"); + } + @TestMetadata("lazy.kt") public void testLazy() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/optimizedDelegatedProperties/lazy.kt");