From a7dc381b9395953166cf0329e1437882bf485c53 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 13 Dec 2023 17:11:31 +0100 Subject: [PATCH] K2: disable compatibility mode for new inference #KT-64306 Fixed #KT-64307 Fixed #KT-64308 Fixed --- .../overloadResolutionBySuspendModifier.kt | 4 ++++ .../suspendConversionCompatibility.kt | 2 ++ ...idateWithCompatibilityForSeveralCandidates.fir.kt | 4 ++-- .../referenceAdaptationCompatibility.fir.kt | 6 +++--- .../unitAdaptationForReferenceCompatibility.fir.kt | 2 +- ...ilityResolveToOuterScopeForKotlinFunctions.fir.kt | 10 +++++----- .../tests/samConversions/samPriorityVsGeneric.fir.kt | 12 ++++++++++++ .../tests/samConversions/samPriorityVsGeneric.kt | 1 - .../suspendConversionCompatibility.fir.kt | 4 ++-- ...spendConversionCompatibilityInDisabledMode.fir.kt | 4 ++-- .../kotlin/config/LanguageVersionSettings.kt | 2 +- 11 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.fir.kt diff --git a/compiler/testData/codegen/box/suspendConversion/overloadResolutionBySuspendModifier.kt b/compiler/testData/codegen/box/suspendConversion/overloadResolutionBySuspendModifier.kt index 454be32d7cf..1297b8867bc 100644 --- a/compiler/testData/codegen/box/suspendConversion/overloadResolutionBySuspendModifier.kt +++ b/compiler/testData/codegen/box/suspendConversion/overloadResolutionBySuspendModifier.kt @@ -1,6 +1,10 @@ // !LANGUAGE: +SuspendConversion // !DIAGNOSTICS: -UNUSED_PARAMETER // IGNORE_BACKEND: JVM +// IGNORE_LIGHT_ANALYSIS +// java.lang.IllegalStateException: OVERLOAD_RESOLUTION_AMBIGUITY: Overload resolution ambiguity: +// public fun foo(x: () -> Int): Unit defined in root package in file overloadResolutionBySuspendModifier.kt +// public fun foo(x: suspend () -> Int): Unit defined in root package in file overloadResolutionBySuspendModifier.kt (15,5) in /overloadResolutionBySuspendModifier.kt var foo1 = false var foo2 = false diff --git a/compiler/testData/codegen/box/suspendConversion/suspendConversionCompatibility.kt b/compiler/testData/codegen/box/suspendConversion/suspendConversionCompatibility.kt index 06cf66fa177..03c02ee5cfd 100644 --- a/compiler/testData/codegen/box/suspendConversion/suspendConversionCompatibility.kt +++ b/compiler/testData/codegen/box/suspendConversion/suspendConversionCompatibility.kt @@ -1,6 +1,8 @@ // !LANGUAGE: +SuspendConversion // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION // WITH_STDLIB +// IGNORE_BACKEND_K2: JVM_IR, JS_IR, JS_IR_ES6, NATIVE, WASM +// K2 status: java.lang.Integer cannot be cast to java.lang.String (inference changed due to KT-63558) object Test1 { fun foo(f: () -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/callableReference/correctCandidateWithCompatibilityForSeveralCandidates.fir.kt b/compiler/testData/diagnostics/tests/callableReference/correctCandidateWithCompatibilityForSeveralCandidates.fir.kt index 222fae1c135..463d454bc51 100644 --- a/compiler/testData/diagnostics/tests/callableReference/correctCandidateWithCompatibilityForSeveralCandidates.fir.kt +++ b/compiler/testData/diagnostics/tests/callableReference/correctCandidateWithCompatibilityForSeveralCandidates.fir.kt @@ -15,7 +15,7 @@ object Scope { fun test() { // Despite the fact ::bar is resolved with compatibility warning, it's important not to propagate it to the outer call val result = foo(::bar) - result + result } } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/callableReference/referenceAdaptationCompatibility.fir.kt b/compiler/testData/diagnostics/tests/callableReference/referenceAdaptationCompatibility.fir.kt index 173c8a261d7..c264f3a9b20 100644 --- a/compiler/testData/diagnostics/tests/callableReference/referenceAdaptationCompatibility.fir.kt +++ b/compiler/testData/diagnostics/tests/callableReference/referenceAdaptationCompatibility.fir.kt @@ -9,7 +9,7 @@ object Test1 { fun test() { val result = foo(::bar) - result + result } } } @@ -36,7 +36,7 @@ object Test3 { fun test() { val result = foo(::bar) - result + result } } } @@ -54,4 +54,4 @@ object Test4 { result } } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/callableReference/unitAdaptationForReferenceCompatibility.fir.kt b/compiler/testData/diagnostics/tests/callableReference/unitAdaptationForReferenceCompatibility.fir.kt index de30df9b0cc..0138885a64c 100644 --- a/compiler/testData/diagnostics/tests/callableReference/unitAdaptationForReferenceCompatibility.fir.kt +++ b/compiler/testData/diagnostics/tests/callableReference/unitAdaptationForReferenceCompatibility.fir.kt @@ -20,6 +20,6 @@ public interface Executor { fun f(): String = "test" class A { - fun schedule1(e: Executor): Future = e.submit(::f) + fun schedule1(e: Executor): Future = e.submit(::f) fun schedule2(e: Executor): Future = e.submit { f() } } diff --git a/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt b/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt index 72c8bb283de..11415254d19 100644 --- a/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt @@ -18,7 +18,7 @@ object Test1 { fun foo(r: Runnable) {} fun test(f: () -> Unit) { - foo(f) + foo(f) } } } @@ -41,7 +41,7 @@ object Test3 { fun test(f: () -> Unit) { val result = foo(1, f) - result + result } } @@ -53,7 +53,7 @@ object Test4 { fun test() { val result = foo(1, ::bar) - result + result } } @@ -65,7 +65,7 @@ object Test5 { fun foo(r: Runnable) {} fun test() { - foo { } + foo { } } } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.fir.kt b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.fir.kt new file mode 100644 index 00000000000..67300b10c94 --- /dev/null +++ b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.fir.kt @@ -0,0 +1,12 @@ +// SKIP_TXT +// FULL_JDK + +fun bar(action: () -> T): T = action() +fun bar(action: java.lang.Runnable) { } + +fun foo(): String = "" + +fun main() { + val x = bar() { foo() } // OK with default current 1.5/1.6, Error with DisableCompatibilityModeForNewInference enabled + x.length +} diff --git a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt index 6954b8cf17d..5acf822f49d 100644 --- a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt +++ b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt @@ -1,5 +1,4 @@ // SKIP_TXT -// FIR_IDENTICAL // FULL_JDK fun bar(action: () -> T): T = action() diff --git a/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibility.fir.kt b/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibility.fir.kt index 517e44e34d7..55d8e9c563b 100644 --- a/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibility.fir.kt +++ b/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibility.fir.kt @@ -22,7 +22,7 @@ object Test2 { fun test() { val result = foo(::bar) - result + result } } } @@ -37,7 +37,7 @@ object Test3 { fun test() { val result = foo(::bar) - result + result } } } diff --git a/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibilityInDisabledMode.fir.kt b/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibilityInDisabledMode.fir.kt index b6dd4dd0a23..97f2b59edc5 100644 --- a/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibilityInDisabledMode.fir.kt +++ b/compiler/testData/diagnostics/tests/suspendConversion/suspendConversionCompatibilityInDisabledMode.fir.kt @@ -29,8 +29,8 @@ object Test2 { fun test() { val result = foo(::bar) - result + result } } } -} \ No newline at end of file +} diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index be688b7c017..fc2f3b353d8 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -159,7 +159,6 @@ enum class LanguageFeature( ProhibitVarargAsArrayAfterSamArgument(KOTLIN_1_5, kind = BUG_FIX), CorrectSourceMappingSyntax(KOTLIN_1_5, kind = UNSTABLE_FEATURE), ProperArrayConventionSetterWithDefaultCalls(KOTLIN_1_5, kind = OTHER), - DisableCompatibilityModeForNewInference(null), AdaptedCallableReferenceAgainstReflectiveType(null), InferenceCompatibility(KOTLIN_1_5, kind = BUG_FIX), RequiredPrimaryConstructorDelegationCallInEnums(KOTLIN_1_5, kind = BUG_FIX), @@ -309,6 +308,7 @@ enum class LanguageFeature( ForbidInferringTypeVariablesIntoEmptyIntersection(KOTLIN_2_0, kind = BUG_FIX), // KT-51221 ProhibitDefaultArgumentsInExpectActualizedByFakeOverride(KOTLIN_2_0, kind = BUG_FIX), // KT-62036 JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = KOTLIN_2_1, kind = OTHER), // KT-31799 + DisableCompatibilityModeForNewInference(KOTLIN_2_0, kind = OTHER), // KT-63558 (umbrella), KT-64306, KT-64307, KT-64308 // 2.1