From 7da847e9431021b8c55af835505c3e61c455d531 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Wed, 22 Nov 2017 12:37:49 +0100 Subject: [PATCH] Fix coercion after call --- .../kotlin/backend/jvm/codegen/ExpressionCodegen.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index a9192d379b0..a3dae1f4ef7 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -275,8 +275,12 @@ class ExpressionCodegen( if (returnType != null && KotlinBuiltIns.isNothing(returnType)) { mv.aconst(null) mv.athrow() + } else if (expression.descriptor !is ConstructorDescriptor) { + val expectedTypeOnStack = returnType?.let { typeMapper.mapType(it) } ?: callable.returnType + StackValue.coerce(callable.returnType, expectedTypeOnStack, mv) } - return StackValue.onStack(callable.returnType) + + return expression.onStack } override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: BlockInfo): StackValue { @@ -882,7 +886,8 @@ class ExpressionCodegen( data: BlockInfo ) { if (receiverExpression !is IrClassReference /* && DescriptorUtils.isObjectQualifier(receiverExpression.descriptor)*/) { - JavaClassProperty.generateImpl(mv, gen(receiverExpression, data)) + assert(receiverExpression is IrGetClass) + JavaClassProperty.generateImpl(mv, gen((receiverExpression as IrGetClass).argument, data)) } else { // if (TypeUtils.isTypeParameter(type)) {