From 19c07e048a75f54f1a5990fba2a2a8b4dbbe4803 Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Thu, 3 Jun 2021 13:15:41 +0300 Subject: [PATCH] Don't check suitability of a builder inference call if unrestricted builder inference is enabled ^KT-42139 Fixed --- .../FirBlackBoxCodegenTestGenerated.java | 6 +++++ .../inference/BuilderInferenceSession.kt | 6 ++++- .../box/inference/builderInference/kt42139.kt | 26 +++++++++++++++++++ ...CallsWithCallableReferencesUnrestricted.kt | 24 ++++++++--------- .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ .../IrJsCodegenBoxES6TestGenerated.java | 5 ++++ .../IrJsCodegenBoxTestGenerated.java | 5 ++++ .../semantics/JsCodegenBoxTestGenerated.java | 5 ++++ 10 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 compiler/testData/codegen/box/inference/builderInference/kt42139.kt 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 4230355d0c6..1e8ccfdb64e 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 @@ -17665,6 +17665,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/builderInference/kt41164.kt"); } + @Test + @TestMetadata("kt42139.kt") + public void testKt42139() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt42139.kt"); + } + @Test @TestMetadata("kt47052.kt") public void testKt47052() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt index c2bbd8fa71d..4595ea287c9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/BuilderInferenceSession.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.resolve.calls.inference import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.impl.* @@ -93,7 +94,10 @@ class BuilderInferenceSession( return subResolvedAtoms?.any { it.hasPostponed() } == true } - if (!candidate.isSuitableForBuilderInference()) { + val isUnrestrictedBuilderInferenceSupported = + callComponents.languageVersionSettings.supportsFeature(LanguageFeature.UnrestrictedBuilderInference) + + if (!isUnrestrictedBuilderInferenceSupported && !candidate.isSuitableForBuilderInference()) { return true } diff --git a/compiler/testData/codegen/box/inference/builderInference/kt42139.kt b/compiler/testData/codegen/box/inference/builderInference/kt42139.kt new file mode 100644 index 00000000000..9bd1e6c2b2a --- /dev/null +++ b/compiler/testData/codegen/box/inference/builderInference/kt42139.kt @@ -0,0 +1,26 @@ +// DONT_TARGET_EXACT_BACKEND: WASM +// !LANGUAGE: +UnrestrictedBuilderInference +// WITH_RUNTIME + +fun select(vararg x: R) = x[0] +fun myEmptyList(): List = emptyList() + +fun f1(): Sequence> = sequence { + yield(myEmptyList()) +} + +fun f2(): Sequence> = sequence { + select(yield(myEmptyList()), yield(myEmptyList())) +} + +fun f3(): Sequence> = sequence { + if (true) yield(myEmptyList()) // [NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER] Not enough information to infer type variable T + else yield(myEmptyList()) // [NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER] Not enough information to infer type variable T +} + +fun box(): String { + f1() + f2() + f3() + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/specialCallsWithCallableReferencesUnrestricted.kt b/compiler/testData/diagnostics/tests/inference/builderInference/specialCallsWithCallableReferencesUnrestricted.kt index 9a966645ea2..63fd5deb46e 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/specialCallsWithCallableReferencesUnrestricted.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/specialCallsWithCallableReferencesUnrestricted.kt @@ -40,7 +40,7 @@ fun select(vararg x: R) = x[0] fun poll0(): Flow { return flow { val inv = select(::bar, ::foo) - inv() + inv() } } @@ -54,7 +54,7 @@ fun poll01(): Flow { fun poll02(): Flow { return flow { val inv = select(::bar3, ::foo3) - inv() + inv() } } @@ -68,7 +68,7 @@ fun poll03(): Flow { fun poll04(): Flow { return flow { val inv = select(::bar5, ::foo5) - inv + inv } } @@ -82,7 +82,7 @@ fun poll05(): Flow { fun poll06(): Flow { return flow { val inv = select(foo7(), ::Foo7) - inv + inv } } @@ -138,14 +138,14 @@ fun poll16(flag: Boolean): Flow { fun poll17(flag: Boolean): Flow { return flow { val inv = if (flag) { foo7() } else { ::Foo7 } - inv + inv } } fun poll2(flag: Boolean): Flow { return flow { val inv = when (flag) { true -> ::bar else -> ::foo } - inv() + inv() } } @@ -159,7 +159,7 @@ fun poll21(flag: Boolean): Flow { fun poll22(flag: Boolean): Flow { return flow { val inv = when (flag) { true -> ::bar3 else -> ::foo3 } - inv() + inv() } } @@ -194,7 +194,7 @@ fun poll26(flag: Boolean): Flow { fun poll3(flag: Boolean): Flow { return flow { val inv = when (flag) { true -> ::bar false -> ::foo } - inv() + inv() } } @@ -208,7 +208,7 @@ fun poll31(flag: Boolean): Flow { fun poll32(flag: Boolean): Flow { return flow { val inv = when (flag) { true -> ::bar3 false -> ::foo3 } - inv() + inv() } } @@ -334,7 +334,7 @@ fun poll55(): Flow { fun poll56(): Flow { return flow { val inv = try { ::Foo7 } catch (e: Exception) { foo7() } finally { foo7() } - inv + inv } } @@ -487,8 +487,8 @@ fun poll86(): Flow { fun poll87(): Flow { return flow { - val inv = ::Foo7 in setOf(foo7()) - inv + val inv = ::Foo7 in setOf(foo7()) + inv } } 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 44ef2e2a51b..a6bac5b3953 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 @@ -17635,6 +17635,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt41164.kt"); } + @Test + @TestMetadata("kt42139.kt") + public void testKt42139() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt42139.kt"); + } + @Test @TestMetadata("kt47052.kt") public void testKt47052() 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 14a317a9ce8..7c7b6090a6c 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 @@ -17665,6 +17665,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/builderInference/kt41164.kt"); } + @Test + @TestMetadata("kt42139.kt") + public void testKt42139() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt42139.kt"); + } + @Test @TestMetadata("kt47052.kt") public void testKt47052() 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 4d0fd476da4..6de09d6504e 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14606,6 +14606,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inference/builderInference/kt41164.kt"); } + @TestMetadata("kt42139.kt") + public void testKt42139() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt42139.kt"); + } + @TestMetadata("kt47052.kt") public void testKt47052() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/kt47052.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index cc29bf6fc6d..be88d10405f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -12765,6 +12765,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/inference/builderInference/kt41164.kt"); } + @TestMetadata("kt42139.kt") + public void testKt42139() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt42139.kt"); + } + @TestMetadata("kt47052.kt") public void testKt47052() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/kt47052.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 4263818a463..942df5c52ab 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -12171,6 +12171,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt41164.kt"); } + @TestMetadata("kt42139.kt") + public void testKt42139() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt42139.kt"); + } + @TestMetadata("kt47052.kt") public void testKt47052() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/kt47052.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index d5fe5c18178..2625cd1becc 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -12236,6 +12236,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt41164.kt"); } + @TestMetadata("kt42139.kt") + public void testKt42139() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt42139.kt"); + } + @TestMetadata("kt47052.kt") public void testKt47052() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/kt47052.kt");