From 28f0f1ea888cabb2a63f0c519238fa44ee96920d Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 12 Dec 2023 16:36:06 +0200 Subject: [PATCH] [FIR2IR] Properly set isAssignable flag for parameters of tailrec functions ^KT-63973 Fixed --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 ++++++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 ++++++ .../fir/backend/jvm/JvmFir2IrExtensions.kt | 1 + .../kotlin/fir/backend/ConversionUtils.kt | 3 ++- .../kotlin/fir/backend/Fir2IrExtensions.kt | 11 ++++++++++- .../Fir2IrCallableDeclarationsGenerator.kt | 8 +++++++- ...LightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ ...hIrFakeOverrideGeneratorTestGenerated.java | 6 ++++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/box/vararg/varargInTailrec.kt | 19 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ .../fir/FirJsCodegenBoxTestGenerated.java | 6 ++++++ .../fir/FirJsES6CodegenBoxTestGenerated.java | 6 ++++++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++++++ .../jetbrains/kotlin/backend/konan/Fir2Ir.kt | 1 + .../FirNativeCodegenBoxTestGenerated.java | 6 ++++++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../NativeCodegenBoxTestGenerated.java | 6 ++++++ .../NativeCodegenBoxTestNoPLGenerated.java | 6 ++++++ .../test/FirWasmCodegenBoxTestGenerated.java | 6 ++++++ .../test/K1WasmCodegenBoxTestGenerated.java | 6 ++++++ 25 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/codegen/box/vararg/varargInTailrec.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index e8fa24d68ef..7e5cda805e0 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -55196,6 +55196,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index 4e2e3bc4d40..4f96a0737b4 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -55196,6 +55196,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt index 0fe2a971dd8..baf2fcd0f78 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt @@ -35,6 +35,7 @@ class JvmFir2IrExtensions( private val irDeserializer: JvmIrDeserializer, private val mangler: KotlinMangler.IrMangler, ) : Fir2IrExtensions, JvmGeneratorExtensions { + override val parametersAreAssignable: Boolean get() = true override val externalOverridabilityConditions: List = emptyList() // TODO: KT-61370, KT-61804 override val classNameOverride: MutableMap = mutableMapOf() override val cachedFields = CachedFieldsForObjectInstances(IrFactoryImpl, configuration.languageVersionSettings) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index e39228480b9..b11b11fb214 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -562,6 +562,7 @@ internal fun IrDeclarationParent.declareThisReceiverParameter( endOffset: Int = this.endOffset, name: Name = SpecialNames.THIS, explicitReceiver: FirReceiverParameter? = null, + isAssignable: Boolean = false ): IrValueParameter { return symbolTable.irFactory.createValueParameter( startOffset = startOffset, @@ -569,7 +570,7 @@ internal fun IrDeclarationParent.declareThisReceiverParameter( origin = thisOrigin, name = name, type = thisType, - isAssignable = false, + isAssignable = isAssignable, symbol = IrValueParameterSymbolImpl(), index = UNDEFINED_PARAMETER_INDEX, varargElementType = null, diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt index 55a6c7cb85f..8a9a6c1edd4 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt @@ -16,6 +16,12 @@ import org.jetbrains.kotlin.ir.util.SymbolTable interface Fir2IrExtensions { val irNeedsDeserialization: Boolean + + /** + * Determines if parameters of tailrec functions should be generated with isAssignable = true + */ + val parametersAreAssignable: Boolean + val externalOverridabilityConditions: List fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass? @@ -35,6 +41,9 @@ interface Fir2IrExtensions { override val irNeedsDeserialization: Boolean get() = false + override val parametersAreAssignable: Boolean + get() = false + override val externalOverridabilityConditions: List = emptyList() override fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass? = null override fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean = false @@ -42,4 +51,4 @@ interface Fir2IrExtensions { override fun findInjectedValue(calleeReference: FirReference, conversionScope: Fir2IrConversionScope) = null override fun hasBackingField(property: FirProperty, session: FirSession): Boolean = property.hasBackingField } -} \ No newline at end of file +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt index 4f035db56fd..a919f75306b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt @@ -705,6 +705,7 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi endOffset = endOffset, name = name, explicitReceiver = receiver, + isAssignable = function.shouldParametersBeAssignable() ) } } @@ -750,7 +751,7 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi origin = origin, name = valueParameter.name, type = type, - isAssignable = false, + isAssignable = valueParameter.containingFunctionSymbol.fir.shouldParametersBeAssignable(), symbol = IrValueParameterSymbolImpl(), index = index, varargElementType = valueParameter.varargElementType?.toIrType(typeOrigin), @@ -1026,3 +1027,8 @@ internal fun IrDeclarationParent?.isExternalParent(): Boolean { } return this is Fir2IrLazyClass || this is IrExternalPackageFragment } + +context(Fir2IrComponents) +internal fun FirCallableDeclaration?.shouldParametersBeAssignable(): Boolean { + return extensions.parametersAreAssignable && this?.isTailRec == true +} diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 5025e84a8e7..f9381e98f2b 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -54597,6 +54597,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index b9e32952fe3..1a444e1d7d5 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -54597,6 +54597,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index d36d447f568..a394308effa 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -54597,6 +54597,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/compiler/testData/codegen/box/vararg/varargInTailrec.kt b/compiler/testData/codegen/box/vararg/varargInTailrec.kt new file mode 100644 index 00000000000..b9f3b0d1bfe --- /dev/null +++ b/compiler/testData/codegen/box/vararg/varargInTailrec.kt @@ -0,0 +1,19 @@ +// ISSUE: KT-63973 +// WITH_STDLIB + +tailrec fun foo(vararg items: String, fn: (String) -> T): T = when (items.size) { + 0 -> fn("") + else -> foo(*items.drop(1).toTypedArray()) { + fn(items.first()) + } +} + +fun box(): String { + val result = buildString { + foo("abcde") { append(it) } + } + if (result != "abcde") { + return "Fail: $result" + } + return "OK" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index a98a8351f77..bc58475647d 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -50709,6 +50709,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index eb5453fb7c9..cbed6067e6e 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -53949,6 +53949,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index 7987b2e5ea3..52433c303b8 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -53949,6 +53949,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 75aaf8eaa52..7ddc87fc164 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -43626,6 +43626,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/vararg/varargInJava.kt"); } + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { runTest("compiler/testData/codegen/box/vararg/varargsAndFunctionLiterals.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index c93bd46c6f9..58b0d4c3653 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -37923,6 +37923,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java index 885db1eab53..25047cb2300 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java @@ -37923,6 +37923,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index d9809d74ba4..08d9d670d72 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -37377,6 +37377,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index 9714aa3ed7c..02b12b7cf77 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -37377,6 +37377,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Fir2Ir.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Fir2Ir.kt index 44f09479211..5d38fbd5707 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Fir2Ir.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Fir2Ir.kt @@ -53,6 +53,7 @@ internal val KlibFactories = KlibMetadataFactories(::KonanBuiltIns, DynamicTypeD internal object NativeFir2IrExtensions : Fir2IrExtensions { override val irNeedsDeserialization = false + override val parametersAreAssignable: Boolean get() = false override val externalOverridabilityConditions = listOf(IrObjCOverridabilityCondition) override fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents) = null override fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents) = false diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java index 7849bc7c2bf..230eb6f6e80 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java @@ -41696,6 +41696,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java index 365d06adb05..2cfcb339542 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java @@ -42760,6 +42760,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java index 4f5b5ed6459..03d9bc9c854 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java @@ -40074,6 +40074,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java index dc852da8f52..2d3bd1ad681 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java @@ -41127,6 +41127,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index bc24b976592..42700ba9bca 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -37815,6 +37815,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java index d539390bdd7..7e43f096cf8 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java @@ -37269,6 +37269,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest runTest("compiler/testData/codegen/box/vararg/varargInFunParam.kt"); } + @Test + @TestMetadata("varargInTailrec.kt") + public void testVarargInTailrec() throws Exception { + runTest("compiler/testData/codegen/box/vararg/varargInTailrec.kt"); + } + @Test @TestMetadata("varargsAndFunctionLiterals.kt") public void testVarargsAndFunctionLiterals() throws Exception {