From 882dc18e0eb5b0f6ca110df6a764d9cb22c2b659 Mon Sep 17 00:00:00 2001 From: Pavel Kunyavskiy Date: Thu, 11 Jan 2024 16:35:21 +0100 Subject: [PATCH] [IrActualizer] Don't copy attributeOwnerId in actualizer In before, actualizer was copying attributeOwnerId to new nodes. This leads to attributeOwnerId linked to non-actualized node. It's unclear what it leads to, so we just stop doing that. In particular, if attributeOwnerId references another node, this information would be lost. ^KT-64895 --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 ++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 ++ ...LightTreeBlackBoxCodegenTestGenerated.java | 6 ++ ...hIrFakeOverrideGeneratorTestGenerated.java | 6 ++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 ++ .../common/actualizer/ExpectActualLinker.kt | 5 + .../ir/util/DeepCopyIrTreeWithSymbols.kt | 91 ++++++++++--------- .../k2/commonFakeOverridePropertyRef.kt | 19 ++++ .../fir/FirJsCodegenBoxTestGenerated.java | 6 ++ .../fir/FirJsES6CodegenBoxTestGenerated.java | 6 ++ .../FirNativeCodegenBoxTestGenerated.java | 6 ++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++ .../test/FirWasmCodegenBoxTestGenerated.java | 6 ++ 13 files changed, 131 insertions(+), 44 deletions(-) create mode 100644 compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index 0d3cc78db19..795b7e73fad 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -35349,6 +35349,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index e535fe12272..2ed44b2a11a 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -35349,6 +35349,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index ab7d04c6abc..9ecf8381d39 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -34964,6 +34964,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index d10827bfba6..66b6da799db 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -34964,6 +34964,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 8ff56bf4112..ffaba75390d 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -34964,6 +34964,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt index fa923bab4ce..322a43ec3c3 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualLinker.kt @@ -75,6 +75,11 @@ internal class ActualizerSymbolRemapper(private val expectActualMap: Map D.processAttributes(other: IrAttributeContainer?): D = this + override fun visitModuleFragment(declaration: IrModuleFragment) = declaration.also { it.transformChildren(this, null) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index 9018c1c0c7d..7c47194250b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -73,6 +73,9 @@ open class DeepCopyIrTreeWithSymbols( protected fun mapDeclarationOrigin(origin: IrDeclarationOrigin) = origin protected fun mapStatementOrigin(origin: IrStatementOrigin?) = origin + protected open fun D.processAttributes(other: IrAttributeContainer?): D = + copyAttributes(other) + protected inline fun T.transform() = transform(this@DeepCopyIrTreeWithSymbols, null) as T @@ -172,7 +175,7 @@ open class DeepCopyIrTreeWithSymbols( thisReceiver = declaration.thisReceiver?.transform() valueClassRepresentation = declaration.valueClassRepresentation?.mapUnderlyingType { it.remapType() as IrSimpleType } declaration.transformDeclarationsTo(this) - }.copyAttributes(declaration) + }.processAttributes(declaration) override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction = declaration.factory.createSimpleFunction( @@ -198,7 +201,7 @@ open class DeepCopyIrTreeWithSymbols( symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol } contextReceiverParametersCount = declaration.contextReceiverParametersCount - copyAttributes(declaration) + processAttributes(declaration) transformFunctionChildren(declaration) } @@ -255,7 +258,7 @@ open class DeepCopyIrTreeWithSymbols( isExpect = declaration.isExpect, ).apply { transformAnnotations(declaration) - copyAttributes(declaration) + processAttributes(declaration) this.backingField = declaration.backingField?.transform()?.also { it.correspondingPropertySymbol = symbol } @@ -428,7 +431,7 @@ open class DeepCopyIrTreeWithSymbols( throw IllegalArgumentException("Unsupported expression type: $expression") override fun visitConst(expression: IrConst<*>): IrConst<*> = - expression.shallowCopy().copyAttributes(expression) + expression.shallowCopy().processAttributes(expression) override fun visitConstantObject(expression: IrConstantObject): IrConstantValue = IrConstantObjectImpl( @@ -437,27 +440,27 @@ open class DeepCopyIrTreeWithSymbols( expression.valueArguments.transform(), expression.typeArguments.memoryOptimizedMap { it.remapType() }, expression.type.remapType() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitConstantPrimitive(expression: IrConstantPrimitive): IrConstantValue = IrConstantPrimitiveImpl( expression.startOffset, expression.endOffset, expression.value.transform() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitConstantArray(expression: IrConstantArray): IrConstantValue = IrConstantArrayImpl( expression.startOffset, expression.endOffset, expression.type.remapType(), expression.elements.transform(), - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitVararg(expression: IrVararg): IrVararg = IrVarargImpl( expression.startOffset, expression.endOffset, expression.type.remapType(), expression.varargElementType.remapType(), expression.elements.transform() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitSpreadElement(spread: IrSpreadElement): IrSpreadElement = IrSpreadElementImpl( @@ -473,7 +476,7 @@ open class DeepCopyIrTreeWithSymbols( symbolRemapper.getReferencedReturnableBlock(expression.symbol), mapStatementOrigin(expression.origin), expression.statements.memoryOptimizedMap { it.transform() } - ).copyAttributes(expression) + ).processAttributes(expression) else if (expression is IrInlinedFunctionBlock) IrInlinedFunctionBlockImpl( expression.startOffset, expression.endOffset, @@ -481,14 +484,14 @@ open class DeepCopyIrTreeWithSymbols( expression.inlineCall, expression.inlinedElement, mapStatementOrigin(expression.origin), statements = expression.statements.memoryOptimizedMap { it.transform() }, - ).copyAttributes(expression) + ).processAttributes(expression) else IrBlockImpl( expression.startOffset, expression.endOffset, expression.type.remapType(), mapStatementOrigin(expression.origin), expression.statements.memoryOptimizedMap { it.transform() } - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitComposite(expression: IrComposite): IrComposite = IrCompositeImpl( @@ -496,28 +499,28 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), mapStatementOrigin(expression.origin), expression.statements.memoryOptimizedMap { it.transform() } - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitStringConcatenation(expression: IrStringConcatenation): IrStringConcatenation = IrStringConcatenationImpl( expression.startOffset, expression.endOffset, expression.type.remapType(), expression.arguments.memoryOptimizedMap { it.transform() } - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitGetObjectValue(expression: IrGetObjectValue): IrGetObjectValue = IrGetObjectValueImpl( expression.startOffset, expression.endOffset, expression.type.remapType(), symbolRemapper.getReferencedClass(expression.symbol) - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitGetEnumValue(expression: IrGetEnumValue): IrGetEnumValue = IrGetEnumValueImpl( expression.startOffset, expression.endOffset, expression.type.remapType(), symbolRemapper.getReferencedEnumEntry(expression.symbol) - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitGetValue(expression: IrGetValue): IrGetValue = IrGetValueImpl( @@ -525,7 +528,7 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), symbolRemapper.getReferencedValue(expression.symbol), mapStatementOrigin(expression.origin) - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitSetValue(expression: IrSetValue): IrSetValue = IrSetValueImpl( @@ -534,7 +537,7 @@ open class DeepCopyIrTreeWithSymbols( symbolRemapper.getReferencedValue(expression.symbol), expression.value.transform(), mapStatementOrigin(expression.origin) - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitGetField(expression: IrGetField): IrGetField = IrGetFieldImpl( @@ -544,7 +547,7 @@ open class DeepCopyIrTreeWithSymbols( expression.receiver?.transform(), mapStatementOrigin(expression.origin), symbolRemapper.getReferencedClassOrNull(expression.superQualifierSymbol) - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitSetField(expression: IrSetField): IrSetField = IrSetFieldImpl( @@ -555,7 +558,7 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), mapStatementOrigin(expression.origin), symbolRemapper.getReferencedClassOrNull(expression.superQualifierSymbol) - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitCall(expression: IrCall): IrCall = shallowCopyCall(expression).apply { @@ -576,7 +579,7 @@ open class DeepCopyIrTreeWithSymbols( ).apply { copyRemappedTypeArgumentsFrom(expression) transformValueArguments(expression) - }.copyAttributes(expression) + }.processAttributes(expression) } private fun IrMemberAccessExpression<*>.copyRemappedTypeArgumentsFrom(other: IrMemberAccessExpression<*>) { @@ -600,7 +603,7 @@ open class DeepCopyIrTreeWithSymbols( symbolRemapper.getReferencedClassOrNull(expression.superQualifierSymbol) ).apply { copyRemappedTypeArgumentsFrom(expression) - }.copyAttributes(expression) + }.processAttributes(expression) } private fun > T.transformReceiverArguments(original: T): T = @@ -627,7 +630,7 @@ open class DeepCopyIrTreeWithSymbols( ).apply { copyRemappedTypeArgumentsFrom(expression) transformValueArguments(expression) - }.copyAttributes(expression) + }.processAttributes(expression) } override fun visitEnumConstructorCall(expression: IrEnumConstructorCall): IrEnumConstructorCall { @@ -641,7 +644,7 @@ open class DeepCopyIrTreeWithSymbols( ).apply { copyRemappedTypeArgumentsFrom(expression) transformValueArguments(expression) - }.copyAttributes(expression) + }.processAttributes(expression) } override fun visitGetClass(expression: IrGetClass): IrGetClass = @@ -649,7 +652,7 @@ open class DeepCopyIrTreeWithSymbols( expression.startOffset, expression.endOffset, expression.type.remapType(), expression.argument.transform() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitFunctionReference(expression: IrFunctionReference): IrFunctionReference { val symbol = symbolRemapper.getReferencedFunction(expression.symbol) @@ -665,7 +668,7 @@ open class DeepCopyIrTreeWithSymbols( ).apply { copyRemappedTypeArgumentsFrom(expression) transformValueArguments(expression) - }.copyAttributes(expression) + }.processAttributes(expression) } override fun visitRawFunctionReference(expression: IrRawFunctionReference): IrRawFunctionReference { @@ -674,7 +677,7 @@ open class DeepCopyIrTreeWithSymbols( expression.startOffset, expression.endOffset, expression.type.remapType(), symbol - ).copyAttributes(expression) + ).processAttributes(expression) } override fun visitPropertyReference(expression: IrPropertyReference): IrPropertyReference = @@ -690,7 +693,7 @@ open class DeepCopyIrTreeWithSymbols( ).apply { copyRemappedTypeArgumentsFrom(expression) transformReceiverArguments(expression) - }.copyAttributes(expression) + }.processAttributes(expression) override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference): IrLocalDelegatedPropertyReference = IrLocalDelegatedPropertyReferenceImpl( @@ -701,7 +704,7 @@ open class DeepCopyIrTreeWithSymbols( symbolRemapper.getReferencedSimpleFunction(expression.getter), expression.setter?.let { symbolRemapper.getReferencedSimpleFunction(it) }, mapStatementOrigin(expression.origin) - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitFunctionExpression(expression: IrFunctionExpression): IrFunctionExpression = IrFunctionExpressionImpl( @@ -709,7 +712,7 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), expression.function.transform(), mapStatementOrigin(expression.origin)!! - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitClassReference(expression: IrClassReference): IrClassReference = IrClassReferenceImpl( @@ -717,14 +720,14 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), symbolRemapper.getReferencedClassifier(expression.symbol), expression.classType.remapType() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall): IrInstanceInitializerCall = IrInstanceInitializerCallImpl( expression.startOffset, expression.endOffset, symbolRemapper.getReferencedClass(expression.classSymbol), expression.type.remapType() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitTypeOperator(expression: IrTypeOperatorCall): IrTypeOperatorCall = IrTypeOperatorCallImpl( @@ -733,7 +736,7 @@ open class DeepCopyIrTreeWithSymbols( expression.operator, expression.typeOperand.remapType(), expression.argument.transform() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitWhen(expression: IrWhen): IrWhen = IrWhenImpl( @@ -741,7 +744,7 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), mapStatementOrigin(expression.origin), expression.branches.memoryOptimizedMap { it.transform() } - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitBranch(branch: IrBranch): IrBranch = IrBranchImpl( @@ -768,7 +771,7 @@ open class DeepCopyIrTreeWithSymbols( newLoop.label = loop.label newLoop.condition = loop.condition.transform() newLoop.body = loop.body?.transform() - }.copyAttributes(loop) + }.processAttributes(loop) override fun visitDoWhileLoop(loop: IrDoWhileLoop): IrDoWhileLoop = IrDoWhileLoopImpl(loop.startOffset, loop.endOffset, loop.type.remapType(), mapStatementOrigin(loop.origin)).also { newLoop -> @@ -776,21 +779,21 @@ open class DeepCopyIrTreeWithSymbols( newLoop.label = loop.label newLoop.condition = loop.condition.transform() newLoop.body = loop.body?.transform() - }.copyAttributes(loop) + }.processAttributes(loop) override fun visitBreak(jump: IrBreak): IrBreak = IrBreakImpl( jump.startOffset, jump.endOffset, jump.type.remapType(), getTransformedLoop(jump.loop) - ).apply { label = jump.label }.copyAttributes(jump) + ).apply { label = jump.label }.processAttributes(jump) override fun visitContinue(jump: IrContinue): IrContinue = IrContinueImpl( jump.startOffset, jump.endOffset, jump.type.remapType(), getTransformedLoop(jump.loop) - ).apply { label = jump.label }.copyAttributes(jump) + ).apply { label = jump.label }.processAttributes(jump) override fun visitTry(aTry: IrTry): IrTry = IrTryImpl( @@ -799,7 +802,7 @@ open class DeepCopyIrTreeWithSymbols( aTry.tryResult.transform(), aTry.catches.memoryOptimizedMap { it.transform() }, aTry.finallyExpression?.transform() - ).copyAttributes(aTry) + ).processAttributes(aTry) override fun visitCatch(aCatch: IrCatch): IrCatch = IrCatchImpl( @@ -814,7 +817,7 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), symbolRemapper.getReferencedReturnTarget(expression.returnTargetSymbol), expression.value.transform() - ).copyAttributes(expression) + ).processAttributes(expression) private fun SymbolRemapper.getReferencedReturnTarget(returnTarget: IrReturnTargetSymbol): IrReturnTargetSymbol = when (returnTarget) { @@ -827,7 +830,7 @@ open class DeepCopyIrTreeWithSymbols( expression.startOffset, expression.endOffset, expression.type.remapType(), expression.value.transform() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitDynamicOperatorExpression(expression: IrDynamicOperatorExpression): IrDynamicOperatorExpression = IrDynamicOperatorExpressionImpl( @@ -837,7 +840,7 @@ open class DeepCopyIrTreeWithSymbols( ).apply { receiver = expression.receiver.transform() expression.arguments.mapTo(arguments) { it.transform() } - }.copyAttributes(expression) + }.processAttributes(expression) override fun visitDynamicMemberExpression(expression: IrDynamicMemberExpression): IrDynamicMemberExpression = IrDynamicMemberExpressionImpl( @@ -845,7 +848,7 @@ open class DeepCopyIrTreeWithSymbols( expression.type.remapType(), expression.memberName, expression.receiver.transform() - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitErrorDeclaration(declaration: IrErrorDeclaration): IrErrorDeclaration = declaration.factory.createErrorDeclaration(declaration.startOffset, declaration.endOffset, declaration.descriptor) @@ -855,7 +858,7 @@ open class DeepCopyIrTreeWithSymbols( expression.startOffset, expression.endOffset, expression.type.remapType(), expression.description - ).copyAttributes(expression) + ).processAttributes(expression) override fun visitErrorCallExpression(expression: IrErrorCallExpression): IrErrorCallExpression = IrErrorCallExpressionImpl( @@ -865,5 +868,5 @@ open class DeepCopyIrTreeWithSymbols( ).apply { explicitReceiver = expression.explicitReceiver?.transform() expression.arguments.transformTo(arguments) - }.copyAttributes(expression) + }.processAttributes(expression) } diff --git a/compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt b/compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt new file mode 100644 index 00000000000..1549996bc76 --- /dev/null +++ b/compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt @@ -0,0 +1,19 @@ +// LANGUAGE: +MultiPlatformProjects + +// MODULE: lib-common +// FILE: common.kt + +open class Base { + open val x = "OK" +} + +class Child : Base() { + fun xGetter() : () -> String = this::x +} + +// MODULE: lib()()(lib-common) +// FILE: platform.kt + +fun box(): String { + return Child().xGetter()() +} diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index 5a5e9c56358..8a8a6fa2c31 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -24506,6 +24506,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java index dce530cb541..6f376574cf7 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java @@ -24506,6 +24506,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java index 0976f0f63b0..3395ec753a7 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java @@ -28054,6 +28054,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java index c7e474ed759..3d8fafa9be9 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java @@ -28692,6 +28692,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index 344851e5ded..28b51f6312e 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -24476,6 +24476,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes runTest("compiler/testData/codegen/box/multiplatform/k2/anonymousObjectAndSpecificImplementationInDeserializedIr.kt"); } + @Test + @TestMetadata("commonFakeOverridePropertyRef.kt") + public void testCommonFakeOverridePropertyRef() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/commonFakeOverridePropertyRef.kt"); + } + @Test @TestMetadata("covariantOverrideInActual.kt") public void testCovariantOverrideInActual() throws Exception {