From f58af2e4c3e5f726f50a59ed96dd0b1c4f63c242 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 28 Nov 2019 13:40:37 +0300 Subject: [PATCH] FIR2IR: fix constructor referencing in return statement --- .../src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt | 6 +++++- .../expressions/implicitCastInReturnFromConstructor.fir.txt | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 8e65cef06e0..a326f077986 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -649,9 +649,13 @@ class Fir2IrVisitor( } return returnExpression.convertWithOffsets { startOffset, endOffset -> val result = returnExpression.result + val descriptor = irTarget.descriptor IrReturnImpl( startOffset, endOffset, nothingType, - symbolTable.referenceSimpleFunction(irTarget.descriptor), + when (descriptor) { + is ClassConstructorDescriptor -> symbolTable.referenceConstructor(descriptor) + else -> symbolTable.referenceSimpleFunction(descriptor) + }, result.toIrExpression() ) } diff --git a/compiler/testData/ir/irText/expressions/implicitCastInReturnFromConstructor.fir.txt b/compiler/testData/ir/irText/expressions/implicitCastInReturnFromConstructor.fir.txt index 36bd7caf4df..c1baf5b8486 100644 --- a/compiler/testData/ir/irText/expressions/implicitCastInReturnFromConstructor.fir.txt +++ b/compiler/testData/ir/irText/expressions/implicitCastInReturnFromConstructor.fir.txt @@ -12,7 +12,7 @@ FILE fqName: fileName:/implicitCastInReturnFromConstructor.kt BRANCH if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Unit GET_VAR 'x: kotlin.Any? declared in .C.' type=kotlin.Any? origin=null - then: RETURN type=kotlin.Nothing from='public final fun (x: kotlin.Any?): .C declared in .C' + then: RETURN type=kotlin.Nothing from='public constructor (x: kotlin.Any?) declared in .C' GET_VAR 'x: kotlin.Any? declared in .C.' type=kotlin.Unit origin=null DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in .C' FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override]