diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 72af0f9bb4a..213360e5931 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -25379,6 +25379,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/samConversions/javaMemberAgainstExtension.kt"); } + @Test + @TestMetadata("kt17765.kt") + public void testKt17765() throws Exception { + runTest("compiler/testData/diagnostics/tests/samConversions/kt17765.kt"); + } + @Test @TestMetadata("OverloadPriority.kt") public void testOverloadPriority() throws Exception { @@ -31933,6 +31939,18 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/varargs/inferredNullableArrayAsVararg.kt"); } + @Test + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926.kt"); + } + + @Test + @TestMetadata("kt10926EnabledFeature.kt") + public void testKt10926EnabledFeature() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.kt"); + } + @Test @TestMetadata("kt1781.kt") public void testKt1781() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index bd93fd3003f..eed6bd0dff7 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -31933,6 +31933,18 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/varargs/inferredNullableArrayAsVararg.kt"); } + @Test + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926.kt"); + } + + @Test + @TestMetadata("kt10926EnabledFeature.kt") + public void testKt10926EnabledFeature() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.kt"); + } + @Test @TestMetadata("kt1781.kt") public void testKt1781() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 1de434c3b08..b885e1c5b0a 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -31933,6 +31933,18 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/varargs/inferredNullableArrayAsVararg.kt"); } + @Test + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926.kt"); + } + + @Test + @TestMetadata("kt10926EnabledFeature.kt") + public void testKt10926EnabledFeature() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.kt"); + } + @Test @TestMetadata("kt1781.kt") public void testKt1781() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index bfbaf060e26..1a72e0fba72 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -44300,6 +44300,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt"); } + @Test + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/codegen/box/vararg/kt10926.kt"); + } + @Test @TestMetadata("kt1978.kt") public void testKt1978() throws Exception { diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt index b5f8b2a8e00..479a00bdb31 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/NewOverloadingConflictResolver.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.calls.components import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector import org.jetbrains.kotlin.resolve.calls.model.KotlinCallArgument @@ -57,10 +58,15 @@ class NewOverloadingConflictResolver( companion object { private fun createFlatSignature(candidate: ResolutionCandidate): FlatSignature { - val resolvedCall = candidate.resolvedCall - val originalDescriptor = resolvedCall.candidateDescriptor.original - val originalValueParameters = originalDescriptor.valueParameters + val isEliminationAmbiguitiesWithExternalTypeParametersEnabled = + candidate.callComponents.languageVersionSettings.supportsFeature(LanguageFeature.EliminateAmbiguitiesWithExternalTypeParameters) + val descriptor = if (isEliminationAmbiguitiesWithExternalTypeParametersEnabled) { + resolvedCall.candidateDescriptor + } else { + resolvedCall.candidateDescriptor.original + } + val valueParameters = descriptor.valueParameters var numDefaults = 0 val valueArgumentToParameterType = HashMap() @@ -68,16 +74,17 @@ class NewOverloadingConflictResolver( if (resolvedValueArgument is ResolvedCallArgument.DefaultArgument) { numDefaults++ } else { - val originalValueParameter = originalValueParameters[valueParameter.index] + val originalValueParameter = valueParameters[valueParameter.index] for (valueArgument in resolvedValueArgument.arguments) { - valueArgumentToParameterType[valueArgument] = candidate.resolvedCall.argumentsWithConversion[valueArgument]?.convertedTypeByOriginParameter ?: - valueArgument.getExpectedType(originalValueParameter, candidate.callComponents.languageVersionSettings) + valueArgumentToParameterType[valueArgument] = + candidate.resolvedCall.argumentsWithConversion[valueArgument]?.convertedTypeByOriginParameter + ?: valueArgument.getExpectedType(originalValueParameter, candidate.callComponents.languageVersionSettings) } } } return FlatSignature.create(candidate, - originalDescriptor, + descriptor, numDefaults, resolvedCall.atom.argumentsInParenthesis.map { valueArgumentToParameterType[it] } + listOfNotNull(resolvedCall.atom.externalArgument?.let { valueArgumentToParameterType[it] }) diff --git a/compiler/testData/codegen/box/vararg/kt10926.kt b/compiler/testData/codegen/box/vararg/kt10926.kt new file mode 100644 index 00000000000..85ec08f934a --- /dev/null +++ b/compiler/testData/codegen/box/vararg/kt10926.kt @@ -0,0 +1,125 @@ +// !LANGUAGE: +EliminateAmbiguitiesWithExternalTypeParameters +// WITH_RUNTIME + +class AllCollection { + fun addAll1(vararg values: T) = "NOK" + fun addAll1(values: Iterable) = "OK" + + fun addAll2(vararg values: Any) = "NOK" + fun addAll2(values: Any) = "OK" + + fun addAll3(vararg values: T) = "NOK" + fun addAll3(values: T) = "OK" + + fun addAll4(vararg values: T) = "NOK" + fun addAll4(values: Collection) = "OK" + + fun addAll5(vararg values: Any) = "NOK" + fun addAll5(values: Collection) = "OK" + + fun addAll6(vararg values: Collection) = "NOK" + fun addAll6(values: Collection) = "OK" + + fun addAll7(vararg values: Collection) = "OK" + fun addAll7(values: T) = "NOK" + + fun addAll8(vararg values: Collection) = "OK" + fun addAll8(values: Any) = "NOK" + + fun addAll9(vararg values: Collection) = "OK" + fun addAll9(values: Any) = "NOK" + + fun addAll10(vararg values: Collection) = "OK" + fun addAll10(values: T) = "NOK" + + fun addAll11(vararg values: Collection) = "NOK" + fun addAll11(values: Collection) = "OK" + + fun addAll12(vararg values: Collection) = "OK" + fun addAll12(values: Collection) = "NOK" + + fun addAll13(vararg values: Any) = "NOK" + fun addAll13(values: Collection) = "OK" + + fun addAll14(vararg values: T) = "NOK" + fun addAll14(values: Collection) = "OK" + + fun addAll15(vararg values: Collection) = "NOK" + fun addAll15(values: Collection) = "OK" + + + fun addAll16(vararg values: Collection) = "NOK" + fun addAll16(values: Collection, values2: Collection) = "OK" + + fun addAll17(vararg values: Collection) = "OK" + fun addAll17(values: Collection, values2: Collection) = "NOK" + + fun addAll18(vararg values: Any) = "NOK" + fun addAll18(values: Collection, values2: Collection) = "OK" + + fun addAll19(vararg values: T) = "NOK" + fun addAll19(values: Collection, values2: Collection) = "OK" + + fun addAll20(vararg values: Collection) = "NOK" + fun addAll20(values: Collection, values2: Collection) = "OK" + + + fun addAll21(vararg values: Collection) = "NOK" + fun addAll21(values: Collection, values2: Collection) = "OK" + + // KT-49620 + fun addAll22(vararg values: Collection) = "OK" + fun addAll22(values: Any, values2: Any) = "NOK" + + fun addAll23(vararg values: Collection) = "OK" + fun addAll23(values: T, values2: T) = "NOK" + + + fun addAll24(values: Collection, vararg values2: Collection) = "NOK" + fun addAll24(values: Collection, values2: Collection) = "OK" + + // KT-49620 + fun addAll25(values: Collection, vararg values2: Collection) = "OK" + fun addAll25(values: Any, values2: Any) = "NOK" + + fun addAll26(values: Collection, vararg values2: Collection) = "OK" + fun addAll26(values: T, values2: T) = "NOK" + + // KT-49534 + fun addAll28(vararg values: T, values2: K) = "NOK" // 1 + fun addAll28(values: K, vararg values2: T) = "OK" // 2 +} + +fun box(): String { + val c: AllCollection = AllCollection() + val x1 = c.addAll1(listOf("")) + val x2 = c.addAll2(listOf("")) + val x3 = c.addAll3(listOf("")) + val x4 = c.addAll4(listOf("")) + val x5 = c.addAll5(listOf("")) + val x6 = c.addAll6(listOf("")) + val x7 = c.addAll7(listOf("")) + val x8 = c.addAll8(listOf("")) + val x9 = c.addAll9(listOf("")) + val x10 = c.addAll10(listOf("")) + val x11 = c.addAll11(listOf("")) + val x12 = c.addAll12(listOf("")) + val x13 = c.addAll13(listOf("")) + val x14 = c.addAll14(listOf("")) + val x15 = c.addAll15(listOf("")) + val x16 = c.addAll16(listOf(""), listOf("")) + val x17 = c.addAll17(listOf(""), listOf("")) + val x18 = c.addAll18(listOf(""), listOf("")) + val x19 = c.addAll19(listOf(""), listOf("")) + val x20 = c.addAll20(listOf(""), listOf("")) + val x21 = c.addAll21(listOf(""), listOf("")) + val x22 = c.addAll22(listOf(""), listOf("")) + val x23 = c.addAll23(listOf(""), listOf("")) + val x24 = c.addAll24(listOf(""), listOf("")) + val x25 = c.addAll25(listOf(""), listOf("")) + val x26 = c.addAll26(listOf(""), listOf("")) + + val all = arrayOf(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26) + + return if (all.all { it == "OK" }) "OK" else "NOK" +} diff --git a/compiler/testData/diagnostics/tests/varargs/kt10926.fir.kt b/compiler/testData/diagnostics/tests/varargs/kt10926.fir.kt new file mode 100644 index 00000000000..aa73063a880 --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/kt10926.fir.kt @@ -0,0 +1,134 @@ +// WITH_RUNTIME + +class AllCollection2 { + fun addAll(vararg values: T, values2: Array) = "OK" // 1 + fun addAll(values: Array, vararg values2: T) = 1 // 2 +} + +fun main(c: AllCollection2) { + // KT-49620 + c.addAll(arrayOf(""), values2 = arrayOf("")) +} + +class AllCollection { + fun addAll1(vararg values: T) = "NOK" + fun addAll1(values: Iterable) = "OK" + + fun addAll2(vararg values: Any) = "NOK" + fun addAll2(values: Any) = "OK" + + fun addAll3(vararg values: T) = "NOK" + fun addAll3(values: T) = "OK" + + fun addAll4(vararg values: T) = "NOK" + fun addAll4(values: Collection) = "OK" + + fun addAll5(vararg values: Any) = "NOK" + fun addAll5(values: Collection) = "OK" + + fun addAll6(vararg values: Collection) = "NOK" + fun addAll6(values: Collection) = "OK" + + fun addAll7(vararg values: Collection) = "OK" + fun addAll7(values: T) = "NOK" + + fun addAll8(vararg values: Collection) = "OK" + fun addAll8(values: Any) = "NOK" + + fun addAll9(vararg values: Collection) = "OK" + fun addAll9(values: Any) = "NOK" + + fun addAll10(vararg values: Collection) = "OK" + fun addAll10(values: T) = "NOK" + + fun addAll11(vararg values: Collection) = "NOK" + fun addAll11(values: Collection) = "OK" + + fun addAll12(vararg values: Collection) = "OK" + fun addAll12(values: Collection) = "NOK" + + fun addAll13(vararg values: Any) = "NOK" + fun addAll13(values: Collection) = "OK" + + fun addAll14(vararg values: T) = "NOK" + fun addAll14(values: Collection) = "OK" + + fun addAll15(vararg values: Collection) = "NOK" + fun addAll15(values: Collection) = "OK" + + + fun addAll16(vararg values: Collection) = "NOK" + fun addAll16(values: Collection, values2: Collection) = "OK" + + fun addAll17(vararg values: Collection) = "OK" + fun addAll17(values: Collection, values2: Collection) = "NOK" + + fun addAll18(vararg values: Any) = "NOK" + fun addAll18(values: Collection, values2: Collection) = "OK" + + fun addAll19(vararg values: T) = "NOK" + fun addAll19(values: Collection, values2: Collection) = "OK" + + fun addAll20(vararg values: Collection) = "NOK" + fun addAll20(values: Collection, values2: Collection) = "OK" + + + fun addAll21(vararg values: Collection) = "NOK" + fun addAll21(values: Collection, values2: Collection) = "OK" + + // KT-49620 + fun addAll22(vararg values: Collection) = "OK" + fun addAll22(values: Any, values2: Any) = "NOK" + + fun addAll23(vararg values: Collection) = "OK" + fun addAll23(values: T, values2: T) = "NOK" + + + fun addAll24(values: Collection, vararg values2: Collection) = "NOK" + fun addAll24(values: Collection, values2: Collection) = "OK" + + // KT-49620 + fun addAll25(values: Collection, vararg values2: Collection) = "OK" + fun addAll25(values: Any, values2: Any) = "NOK" + + fun addAll26(values: Collection, vararg values2: Collection) = "OK" + fun addAll26(values: T, values2: T) = "NOK" + + // KT-49534 + fun addAll28(vararg values: T, values2: K) = "NOK" // 1 + fun addAll28(values: K, vararg values2: T) = "OK" // 2 +} + +fun box(): String { + val c: AllCollection = AllCollection() + val x1 = c.addAll1(listOf("")) + val x2 = c.addAll2(listOf("")) + val x3 = c.addAll3(listOf("")) + val x4 = c.addAll4(listOf("")) + val x5 = c.addAll5(listOf("")) + val x6 = c.addAll6(listOf("")) + val x7 = c.addAll7(listOf("")) + val x8 = c.addAll8(listOf("")) + val x9 = c.addAll9(listOf("")) + val x10 = c.addAll10(listOf("")) + val x11 = c.addAll11(listOf("")) + val x12 = c.addAll12(listOf("")) + val x13 = c.addAll13(listOf("")) + val x14 = c.addAll14(listOf("")) + val x15 = c.addAll15(listOf("")) + val x16 = c.addAll16(listOf(""), listOf("")) + val x17 = c.addAll17(listOf(""), listOf("")) + val x18 = c.addAll18(listOf(""), listOf("")) + val x19 = c.addAll19(listOf(""), listOf("")) + val x20 = c.addAll20(listOf(""), listOf("")) + val x21 = c.addAll21(listOf(""), listOf("")) + val x22 = c.addAll22(listOf(""), listOf("")) + val x23 = c.addAll23(listOf(""), listOf("")) + val x24 = c.addAll24(listOf(""), listOf("")) + val x25 = c.addAll25(listOf(""), listOf("")) + val x26 = c.addAll26(listOf(""), listOf("")) + + val all = arrayOf(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26) + + return if (all.all { it == "OK" }) "OK" else "NOK" +} diff --git a/compiler/testData/diagnostics/tests/varargs/kt10926.kt b/compiler/testData/diagnostics/tests/varargs/kt10926.kt new file mode 100644 index 00000000000..598f2c44362 --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/kt10926.kt @@ -0,0 +1,134 @@ +// WITH_RUNTIME + +class AllCollection2 { + fun addAll(vararg values: T, values2: Array) = "OK" // 1 + fun addAll(values: Array, vararg values2: T) = 1 // 2 +} + +fun main(c: AllCollection2) { + // KT-49620 + c.addAll(arrayOf(""), values2 = arrayOf("")) +} + +class AllCollection { + fun addAll1(vararg values: T) = "NOK" + fun addAll1(values: Iterable) = "OK" + + fun addAll2(vararg values: Any) = "NOK" + fun addAll2(values: Any) = "OK" + + fun addAll3(vararg values: T) = "NOK" + fun addAll3(values: T) = "OK" + + fun addAll4(vararg values: T) = "NOK" + fun addAll4(values: Collection) = "OK" + + fun addAll5(vararg values: Any) = "NOK" + fun addAll5(values: Collection) = "OK" + + fun addAll6(vararg values: Collection) = "NOK" + fun addAll6(values: Collection) = "OK" + + fun addAll7(vararg values: Collection) = "OK" + fun addAll7(values: T) = "NOK" + + fun addAll8(vararg values: Collection) = "OK" + fun addAll8(values: Any) = "NOK" + + fun addAll9(vararg values: Collection) = "OK" + fun addAll9(values: Any) = "NOK" + + fun addAll10(vararg values: Collection) = "OK" + fun addAll10(values: T) = "NOK" + + fun addAll11(vararg values: Collection) = "NOK" + fun addAll11(values: Collection) = "OK" + + fun addAll12(vararg values: Collection) = "OK" + fun addAll12(values: Collection) = "NOK" + + fun addAll13(vararg values: Any) = "NOK" + fun addAll13(values: Collection) = "OK" + + fun addAll14(vararg values: T) = "NOK" + fun addAll14(values: Collection) = "OK" + + fun addAll15(vararg values: Collection) = "NOK" + fun addAll15(values: Collection) = "OK" + + + fun addAll16(vararg values: Collection) = "NOK" + fun addAll16(values: Collection, values2: Collection) = "OK" + + fun addAll17(vararg values: Collection) = "OK" + fun addAll17(values: Collection, values2: Collection) = "NOK" + + fun addAll18(vararg values: Any) = "NOK" + fun addAll18(values: Collection, values2: Collection) = "OK" + + fun addAll19(vararg values: T) = "NOK" + fun addAll19(values: Collection, values2: Collection) = "OK" + + fun addAll20(vararg values: Collection) = "NOK" + fun addAll20(values: Collection, values2: Collection) = "OK" + + + fun addAll21(vararg values: Collection) = "NOK" + fun addAll21(values: Collection, values2: Collection) = "OK" + + // KT-49620 + fun addAll22(vararg values: Collection) = "OK" + fun addAll22(values: Any, values2: Any) = "NOK" + + fun addAll23(vararg values: Collection) = "OK" + fun addAll23(values: T, values2: T) = "NOK" + + + fun addAll24(values: Collection, vararg values2: Collection) = "NOK" + fun addAll24(values: Collection, values2: Collection) = "OK" + + // KT-49620 + fun addAll25(values: Collection, vararg values2: Collection) = "OK" + fun addAll25(values: Any, values2: Any) = "NOK" + + fun addAll26(values: Collection, vararg values2: Collection) = "OK" + fun addAll26(values: T, values2: T) = "NOK" + + // KT-49534 + fun addAll28(vararg values: T, values2: K) = "NOK" // 1 + fun addAll28(values: K, vararg values2: T) = "OK" // 2 +} + +fun box(): String { + val c: AllCollection = AllCollection() + val x1 = c.addAll1(listOf("")) + val x2 = c.addAll2(listOf("")) + val x3 = c.addAll3(listOf("")) + val x4 = c.addAll4(listOf("")) + val x5 = c.addAll5(listOf("")) + val x6 = c.addAll6(listOf("")) + val x7 = c.addAll7(listOf("")) + val x8 = c.addAll8(listOf("")) + val x9 = c.addAll9(listOf("")) + val x10 = c.addAll10(listOf("")) + val x11 = c.addAll11(listOf("")) + val x12 = c.addAll12(listOf("")) + val x13 = c.addAll13(listOf("")) + val x14 = c.addAll14(listOf("")) + val x15 = c.addAll15(listOf("")) + val x16 = c.addAll16(listOf(""), listOf("")) + val x17 = c.addAll17(listOf(""), listOf("")) + val x18 = c.addAll18(listOf(""), listOf("")) + val x19 = c.addAll19(listOf(""), listOf("")) + val x20 = c.addAll20(listOf(""), listOf("")) + val x21 = c.addAll21(listOf(""), listOf("")) + val x22 = c.addAll22(listOf(""), listOf("")) + val x23 = c.addAll23(listOf(""), listOf("")) + val x24 = c.addAll24(listOf(""), listOf("")) + val x25 = c.addAll25(listOf(""), listOf("")) + val x26 = c.addAll26(listOf(""), listOf("")) + + val all = arrayOf(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26) + + return if (all.all { it == "OK" }) "OK" else "NOK" +} diff --git a/compiler/testData/diagnostics/tests/varargs/kt10926.txt b/compiler/testData/diagnostics/tests/varargs/kt10926.txt new file mode 100644 index 00000000000..f76c60c4e91 --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/kt10926.txt @@ -0,0 +1,75 @@ +package + +public fun box(): kotlin.String +public fun main(/*0*/ c: AllCollection2): kotlin.Unit + +public final class AllCollection { + public constructor AllCollection() + public final fun addAll1(/*0*/ vararg values: T /*kotlin.Array*/): kotlin.String + public final fun addAll1(/*0*/ values: kotlin.collections.Iterable): kotlin.String + public final fun addAll10(/*0*/ values: T): kotlin.String + public final fun addAll10(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll11(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll11(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll12(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll12(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll13(/*0*/ vararg values: kotlin.Any /*kotlin.Array*/): kotlin.String + public final fun addAll13(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll14(/*0*/ vararg values: T /*kotlin.Array*/): kotlin.String + public final fun addAll14(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll15(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll15(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll16(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll16(/*0*/ values: kotlin.collections.Collection, /*1*/ values2: kotlin.collections.Collection): kotlin.String + public final fun addAll17(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll17(/*0*/ values: kotlin.collections.Collection, /*1*/ values2: kotlin.collections.Collection): kotlin.String + public final fun addAll18(/*0*/ vararg values: kotlin.Any /*kotlin.Array*/): kotlin.String + public final fun addAll18(/*0*/ values: kotlin.collections.Collection, /*1*/ values2: kotlin.collections.Collection): kotlin.String + public final fun addAll19(/*0*/ vararg values: T /*kotlin.Array*/): kotlin.String + public final fun addAll19(/*0*/ values: kotlin.collections.Collection, /*1*/ values2: kotlin.collections.Collection): kotlin.String + public final fun addAll2(/*0*/ values: kotlin.Any): kotlin.String + public final fun addAll2(/*0*/ vararg values: kotlin.Any /*kotlin.Array*/): kotlin.String + public final fun addAll20(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll20(/*0*/ values: kotlin.collections.Collection, /*1*/ values2: kotlin.collections.Collection): kotlin.String + public final fun addAll21(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll21(/*0*/ values: kotlin.collections.Collection, /*1*/ values2: kotlin.collections.Collection): kotlin.String + public final fun addAll22(/*0*/ values: kotlin.Any, /*1*/ values2: kotlin.Any): kotlin.String + public final fun addAll22(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll23(/*0*/ values: T, /*1*/ values2: T): kotlin.String + public final fun addAll23(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll24(/*0*/ values: kotlin.collections.Collection, /*1*/ vararg values2: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll24(/*0*/ values: kotlin.collections.Collection, /*1*/ values2: kotlin.collections.Collection): kotlin.String + public final fun addAll25(/*0*/ values: kotlin.Any, /*1*/ values2: kotlin.Any): kotlin.String + public final fun addAll25(/*0*/ values: kotlin.collections.Collection, /*1*/ vararg values2: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll26(/*0*/ values: T, /*1*/ values2: T): kotlin.String + public final fun addAll26(/*0*/ values: kotlin.collections.Collection, /*1*/ vararg values2: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll28(/*0*/ values: K, /*1*/ vararg values2: T /*kotlin.Array*/): kotlin.String + public final fun addAll28(/*0*/ vararg values: T /*kotlin.Array*/, /*1*/ values2: K): kotlin.String + public final fun addAll3(/*0*/ values: T): kotlin.String + public final fun addAll3(/*0*/ vararg values: T /*kotlin.Array*/): kotlin.String + public final fun addAll4(/*0*/ vararg values: T /*kotlin.Array*/): kotlin.String + public final fun addAll4(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll5(/*0*/ vararg values: kotlin.Any /*kotlin.Array*/): kotlin.String + public final fun addAll5(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll6(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll6(/*0*/ values: kotlin.collections.Collection): kotlin.String + public final fun addAll7(/*0*/ values: T): kotlin.String + public final fun addAll7(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll8(/*0*/ values: kotlin.Any): kotlin.String + public final fun addAll8(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public final fun addAll9(/*0*/ values: kotlin.Any): kotlin.String + public final fun addAll9(/*0*/ vararg values: kotlin.collections.Collection /*kotlin.Array>*/): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class AllCollection2 { + public constructor AllCollection2() + public final fun addAll(/*0*/ values: kotlin.Array, /*1*/ vararg values2: T /*kotlin.Array*/): kotlin.Int + public final fun addAll(/*0*/ vararg values: T /*kotlin.Array*/, /*1*/ values2: kotlin.Array): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + diff --git a/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.fir.kt b/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.fir.kt new file mode 100644 index 00000000000..5bedc331a8d --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.fir.kt @@ -0,0 +1,12 @@ +// !LANGUAGE: +EliminateAmbiguitiesWithExternalTypeParameters +// WITH_RUNTIME + +class AllCollection { + fun addAll(vararg values: T, values2: Array) = "OK" // 1 + fun addAll(values: Array, vararg values2: T) = 1 // 2 +} + +fun main(c: AllCollection) { + // KT-49620 + c.addAll(arrayOf(""), values2 = arrayOf("")) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.kt b/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.kt new file mode 100644 index 00000000000..db072016a0c --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.kt @@ -0,0 +1,12 @@ +// !LANGUAGE: +EliminateAmbiguitiesWithExternalTypeParameters +// WITH_RUNTIME + +class AllCollection { + fun addAll(vararg values: T, values2: Array) = "OK" // 1 + fun addAll(values: Array, vararg values2: T) = 1 // 2 +} + +fun main(c: AllCollection) { + // KT-49620 + c.addAll(arrayOf(""), values2 = arrayOf("")) +} diff --git a/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.txt b/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.txt new file mode 100644 index 00000000000..7a2cb6047f3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.txt @@ -0,0 +1,12 @@ +package + +public fun main(/*0*/ c: AllCollection): kotlin.Unit + +public final class AllCollection { + public constructor AllCollection() + public final fun addAll(/*0*/ values: kotlin.Array, /*1*/ vararg values2: T /*kotlin.Array*/): kotlin.Int + public final fun addAll(/*0*/ vararg values: T /*kotlin.Array*/, /*1*/ values2: kotlin.Array): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 93300fda835..394a874dc65 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -32029,6 +32029,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/varargs/inferredNullableArrayAsVararg.kt"); } + @Test + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926.kt"); + } + + @Test + @TestMetadata("kt10926EnabledFeature.kt") + public void testKt10926EnabledFeature() throws Exception { + runTest("compiler/testData/diagnostics/tests/varargs/kt10926EnabledFeature.kt"); + } + @Test @TestMetadata("kt1781.kt") public void testKt1781() throws Exception { 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 739a0a94c57..75d7e52da79 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 @@ -44108,6 +44108,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt"); } + @Test + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/codegen/box/vararg/kt10926.kt"); + } + @Test @TestMetadata("kt1978.kt") public void testKt1978() 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 c4977c8cda8..be03a551e51 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 @@ -44300,6 +44300,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt"); } + @Test + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/codegen/box/vararg/kt10926.kt"); + } + @Test @TestMetadata("kt1978.kt") public void testKt1978() 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 5e903176cbc..aa207ab749a 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -35649,6 +35649,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/vararg/evaluationOrder.kt"); } + @TestMetadata("kt10926.kt") + public void testKt10926() throws Exception { + runTest("compiler/testData/codegen/box/vararg/kt10926.kt"); + } + @TestMetadata("kt1978.kt") public void testKt1978() throws Exception { runTest("compiler/testData/codegen/box/vararg/kt1978.kt"); diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 9809991fff3..8de635317fc 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -239,6 +239,7 @@ enum class LanguageFeature( ForbidExposingTypesInPrimaryConstructorProperties(KOTLIN_1_7, kind = BUG_FIX), ProhibitAccessToEnumCompanionMembersInEnumConstructorCall(KOTLIN_1_7, kind = BUG_FIX), PartiallySpecifiedTypeArguments(KOTLIN_1_7), + EliminateAmbiguitiesWithExternalTypeParameters(KOTLIN_1_7), // 1.8 diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index aedd1fe024e..ee9a9f7af2c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -29498,6 +29498,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sam"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true); } + @Test + @TestMetadata("kt17765.kt") + public void testKt17765() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt17765.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/sam/adapters") @TestDataPath("$PROJECT_ROOT") 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 b74a5d40219..6d2abf20dc0 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 @@ -29600,6 +29600,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sam"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); } + @Test + @TestMetadata("kt17765.kt") + public void testKt17765() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt17765.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/sam/adapters") @TestDataPath("$PROJECT_ROOT") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 3ba37873b07..6b9c9b7507c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -24527,6 +24527,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/sam"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true); } + @TestMetadata("kt17765.kt") + public void testKt17765() throws Exception { + runTest("compiler/testData/codegen/box/sam/kt17765.kt"); + } + @TestMetadata("compiler/testData/codegen/box/sam/adapters") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)