From 4d67803f04cb0ec0e2d1c70b055bed2fdc981798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Mon, 11 Nov 2019 10:18:45 +0100 Subject: [PATCH] JVM IR: Fix IR types in default argument stubs --- .../common/lower/DefaultArgumentStubGenerator.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index 678efd9cadf..8c7d56c1226 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -146,7 +146,16 @@ open class DefaultArgumentStubGenerator( dispatchReceiver = newIrFunction.dispatchReceiverParameter?.let { irGet(it) } extensionReceiver = newIrFunction.extensionReceiverParameter?.let { irGet(it) } - params.forEachIndexed { i, variable -> putValueArgument(i, irGet(variable)) } + for ((i, variable) in params.withIndex()) { + val paramType = irFunction.valueParameters[i].type + // The JVM backend doesn't introduce new variables, and hence may have incompatible types here. + val value = if (!paramType.isNullable() && variable.type.isNullable()) { + irImplicitCast(irGet(variable), paramType) + } else { + irGet(variable) + } + putValueArgument(i, value) + } } return if (needSpecialDispatch(irFunction)) { val handlerDeclaration = newIrFunction.valueParameters.last()