From 1c143310ace36454bf6db6399d840638ed588351 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 6 Feb 2019 18:35:34 +0100 Subject: [PATCH] JVM IR: coerce call result to expected expression type The boundWithSerializableReceiver.kt test is muted since property references are not yet supported in the JVM IR backend. Previously it passed by accident --- .../kotlin/backend/jvm/codegen/ExpressionCodegen.kt | 7 +++---- .../serializability/boundWithSerializableReceiver.kt | 1 + 2 files changed, 4 insertions(+), 4 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 acd9db48e4c..ca8c405120c 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 @@ -376,13 +376,12 @@ class ExpressionCodegen( if (returnType != null && KotlinBuiltIns.isNothing(returnType)) { mv.aconst(null) mv.athrow() - } else if (expression.descriptor !is ConstructorDescriptor) { - return returnType?.run { coerceNotToUnit(callable.returnType, returnType, this) } ?: onStack(callable.returnType, returnType) - } else { + return expression.onStack + } else if (expression.descriptor is ConstructorDescriptor) { return none() } - return expression.onStack + return coerceNotToUnit(callable.returnType, returnType, expression.type.toKotlinType()) } override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: BlockInfo): StackValue { diff --git a/compiler/testData/codegen/box/callableReference/serializability/boundWithSerializableReceiver.kt b/compiler/testData/codegen/box/callableReference/serializability/boundWithSerializableReceiver.kt index 11d4905cbe1..efe0024edfe 100644 --- a/compiler/testData/codegen/box/callableReference/serializability/boundWithSerializableReceiver.kt +++ b/compiler/testData/codegen/box/callableReference/serializability/boundWithSerializableReceiver.kt @@ -1,4 +1,5 @@ // TARGET_BACKEND: JVM +// IGNORE_BACKEND: JVM_IR // WITH_REFLECT import java.io.*