From 0f24850f3c2a300b06c4e1cb915043939e64f67f Mon Sep 17 00:00:00 2001 From: Konstantin Anisimov Date: Mon, 17 Apr 2017 12:08:01 +0700 Subject: [PATCH] Descriptor return type must coincide with expression return type --- .../common/DeepCopyIrTreeWithDescriptoros.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt index b254ad36f51..30dad251315 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt @@ -383,11 +383,12 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: DeclarationDe override fun visitCall(expression: IrCall): IrCall { if (expression !is IrCallImpl) return super.visitCall(expression) + val newDescriptor = mapCallee(expression.descriptor) return IrCallImpl( startOffset = expression.startOffset, endOffset = expression.endOffset, - type = substituteType(expression.type)!!, - descriptor = mapCallee(expression.descriptor), + type = newDescriptor.returnType!!, + descriptor = newDescriptor, typeArguments = substituteTypeArguments(expression.getTypeArgumentsMap()), origin = expression.origin, superQualifier = mapSuperQualifier(expression.superQualifier) @@ -419,15 +420,17 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: DeclarationDe //---------------------------------------------------------------------// - override fun visitCallableReference(expression: IrCallableReference): IrCallableReference = - IrCallableReferenceImpl( + override fun visitCallableReference(expression: IrCallableReference): IrCallableReference { + val newDescriptor = mapCallableReference(expression.descriptor) + return IrCallableReferenceImpl( startOffset = expression.startOffset, endOffset = expression.endOffset, - type = substituteType(expression.type)!!, - descriptor = mapCallableReference(expression.descriptor), + type = newDescriptor.returnType!!, + descriptor = newDescriptor, typeArguments = expression.getTypeArgumentsMap(), origin = mapStatementOrigin(expression.origin) ).transformValueArguments(expression) + } //---------------------------------------------------------------------//