From ce2c6f5d1fd04c67c9a2abc28e62e0a7b14d94ab Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Tue, 30 Nov 2021 18:07:48 +0300 Subject: [PATCH] [FE 1.0] Don't mark type variable as `READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES` if it has complex dependency to other type variables ^KT-49838 Fixed --- .../FirBlackBoxCodegenTestGenerated.java | 6 +++++ .../components/VariableFixationFinder.kt | 2 +- .../testData/codegen/box/inference/kt49838.kt | 27 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ .../js/test/JsCodegenBoxTestGenerated.java | 6 +++++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 6 +++++ .../IrCodegenBoxWasmTestGenerated.java | 5 ++++ .../NativeExtBlackBoxTestGenerated.java | 12 +++++++++ 10 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/inference/kt49838.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 59de9a6e910..02ed8a7c2a3 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 @@ -18702,6 +18702,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/kt47316.kt"); } + @Test + @TestMetadata("kt49838.kt") + public void testKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + @Test @TestMetadata("lambdaWithStarReturn.kt") public void testLambdaWithStarReturn() throws Exception { diff --git a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt index f5b6701d8b8..44dbc73b42c 100644 --- a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt +++ b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt @@ -67,7 +67,7 @@ class VariableFixationFinder( ): TypeVariableFixationReadiness = when { !notFixedTypeVariables.contains(variable) || dependencyProvider.isVariableRelatedToTopLevelType(variable) -> TypeVariableFixationReadiness.FORBIDDEN - isTypeInferenceForSelfTypesSupported && hasOnlyDeclaredUpperBoundSelfTypes(variable) -> + isTypeInferenceForSelfTypesSupported && hasOnlyDeclaredUpperBoundSelfTypes(variable) && !hasDependencyToOtherTypeVariables(variable) -> TypeVariableFixationReadiness.READY_FOR_FIXATION_DECLARED_UPPER_BOUND_WITH_SELF_TYPES !variableHasProperArgumentConstraints(variable) -> TypeVariableFixationReadiness.WITHOUT_PROPER_ARGUMENT_CONSTRAINT hasDependencyToOtherTypeVariables(variable) -> TypeVariableFixationReadiness.WITH_COMPLEX_DEPENDENCY diff --git a/compiler/testData/codegen/box/inference/kt49838.kt b/compiler/testData/codegen/box/inference/kt49838.kt new file mode 100644 index 00000000000..0c66638ff65 --- /dev/null +++ b/compiler/testData/codegen/box/inference/kt49838.kt @@ -0,0 +1,27 @@ +// IGNORE_BACKEND: JVM +// IGNORE_BACKEND_FIR: JVM_IR + +inline fun < + reified TService : Service, + reified TEvent : Event> event( + noinline handler: suspend (TEvent) -> Unit +) { + val serviceKlass = TService::class + val eventKlass = TEvent::class +} + +interface Service< + Self : Service, + in TEvent : Event + > + +interface Event> + +class SomeService : Service { + class SomeEvent : Event +} + +fun box(): String { + event { someEvent: SomeService.SomeEvent -> } // REIFIED_TYPE_FORBIDDEN_SUBSTITUTION + return "OK" +} \ No newline at end of file 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 bac602227b5..4cfb428d802 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 @@ -18348,6 +18348,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/kt47316.kt"); } + @Test + @TestMetadata("kt49838.kt") + public void testKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + @Test @TestMetadata("lambdaWithStarReturn.kt") public void testLambdaWithStarReturn() 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 2096da6d2e7..7ecd8808b8d 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 @@ -18702,6 +18702,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/kt47316.kt"); } + @Test + @TestMetadata("kt49838.kt") + public void testKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + @Test @TestMetadata("lambdaWithStarReturn.kt") public void testLambdaWithStarReturn() 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 2b4f9bd3d60..08097f3081a 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15109,6 +15109,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class Inference extends AbstractLightAnalysisModeTest { + @TestMetadata("kt49838.kt") + public void ignoreKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath); } 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 8bfa02838ff..fbc870b4bae 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 @@ -14366,6 +14366,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/kt45118.kt"); } + @Test + @TestMetadata("kt49838.kt") + public void testKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + @Test @TestMetadata("lambdaWithStarReturn.kt") public void testLambdaWithStarReturn() 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 2c11bc448a3..d4608aa6837 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 @@ -14330,6 +14330,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/kt45118.kt"); } + @Test + @TestMetadata("kt49838.kt") + public void testKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + @Test @TestMetadata("lambdaWithStarReturn.kt") public void testLambdaWithStarReturn() throws Exception { 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 a72857d5000..b7c07212296 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 @@ -12069,6 +12069,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/inference/kt45118.kt"); } + @TestMetadata("kt49838.kt") + public void testKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + @TestMetadata("lambdaWithStarReturn.kt") public void testLambdaWithStarReturn() throws Exception { runTest("compiler/testData/codegen/box/inference/lambdaWithStarReturn.kt"); diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java index 4836ad4e12f..9a7ce9d5185 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeExtBlackBoxTestGenerated.java @@ -15227,6 +15227,12 @@ public class NativeExtBlackBoxTestGenerated extends AbstractNativeBlackBoxTest { runTest("compiler/testData/codegen/box/inference/kt45118.kt"); } + @Test + @TestMetadata("kt49838.kt") + public void testKt49838() throws Exception { + runTest("compiler/testData/codegen/box/inference/kt49838.kt"); + } + @Test @TestMetadata("lambdaWithStarReturn.kt") public void testLambdaWithStarReturn() throws Exception { @@ -30946,6 +30952,12 @@ public class NativeExtBlackBoxTestGenerated extends AbstractNativeBlackBoxTest { runTest("compiler/testData/codegen/box/sealed/delegatingConstructor.kt"); } + @Test + @TestMetadata("kt49752.kt") + public void testKt49752() throws Exception { + runTest("compiler/testData/codegen/box/sealed/kt49752.kt"); + } + @Test @TestMetadata("multipleFiles_enabled.kt") public void testMultipleFiles_enabled() throws Exception {