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 52418d5a9ed..dc83a08e238 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 @@ -290,7 +290,15 @@ open class DefaultParameterInjector( if (valueArgument == null) { maskValues[i / 32] = maskValues[i / 32] or (1 shl (i % 32)) } - valueArgument ?: nullConst(startOffset, endOffset, parameter) + valueArgument ?: nullConst(startOffset, endOffset, parameter)?.let { + IrCompositeImpl( + expression.startOffset, + expression.endOffset, + parameter.type, + IrStatementOrigin.DEFAULT_VALUE, + listOf(it) + ) + } } } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt index fdfb07e73d2..c818efd7f06 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrInlineCodegen.kt @@ -97,8 +97,9 @@ class IrInlineCodegen( val kind = when (irValueParameter.origin) { IrDeclarationOrigin.MASK_FOR_DEFAULT_FUNCTION -> ValueKind.DEFAULT_MASK IrDeclarationOrigin.METHOD_HANDLER_IN_DEFAULT_FUNCTION -> ValueKind.METHOD_HANDLE_IN_DEFAULT - //TODO: support DEFAULT_PARAMETER - else -> ValueKind.CAPTURED + else -> if (argumentExpression is IrContainerExpression && argumentExpression.origin == IrStatementOrigin.DEFAULT_VALUE) + ValueKind.DEFAULT_PARAMETER + else ValueKind.CAPTURED } val onStack = when { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStatementOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStatementOrigin.kt index 183cd84d0a3..26d6dd077f1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStatementOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStatementOrigin.kt @@ -86,6 +86,7 @@ interface IrStatementOrigin { object FOR_LOOP_NEXT : IrStatementOriginImpl("FOR_LOOP_NEXT") object LAMBDA : IrStatementOriginImpl("LAMBDA") + object DEFAULT_VALUE : IrStatementOriginImpl("DEFAULT_VALUE") object ANONYMOUS_FUNCTION : IrStatementOriginImpl("ANONYMOUS_FUNCTION") object OBJECT_LITERAL : IrStatementOriginImpl("OBJECT_LITERAL")