From 5391ee91af75f9dc337e47f86c63991c9febb005 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Fri, 28 Jan 2022 20:01:40 +0300 Subject: [PATCH] [FIR2IR] Fix incorrect type of typealias for suspend functional type, ^KT-50997 Fixed --- .../runners/codegen/FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt | 9 ++++++--- .../incorrectTypeOfTypealiasForSuspendFunctionalType.kt | 5 +++++ .../runners/codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../runners/codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../kotlin/codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../kotlin/js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../wasm/semantics/IrCodegenBoxWasmTestGenerated.java | 5 +++++ .../kotlin/konan/blackboxtest/ExternalTestGenerated.java | 6 ++++++ 10 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.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 e61a80bbc56..0a43862571e 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 @@ -44593,6 +44593,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @Test @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() throws Exception { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt index 22292570d82..9cf26ccd73f 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/InferenceUtils.kt @@ -107,12 +107,15 @@ fun ConeKotlinType.suspendFunctionTypeToFunctionTypeWithContinuation(session: Fi if (isKFunctionType(session)) FunctionClassKind.KFunction else FunctionClassKind.Function val functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size)) + val fullyExpandedType = type.fullyExpandedType(session) + val typeArguments = fullyExpandedType.typeArguments + val lastTypeArgument = typeArguments.last() return ConeClassLikeTypeImpl( ConeClassLikeLookupTagImpl(functionalTypeId), - typeArguments = (type.typeArguments.dropLast(1) + ConeClassLikeLookupTagImpl(continuationClassId).constructClassType( - arrayOf(type.typeArguments.last()), + typeArguments = (typeArguments.dropLast(1) + ConeClassLikeLookupTagImpl(continuationClassId).constructClassType( + arrayOf(lastTypeArgument), isNullable = false - ) + type.typeArguments.last()).toTypedArray(), + ) + lastTypeArgument).toTypedArray(), isNullable = false, attributes = attributes ) diff --git a/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt b/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt new file mode 100644 index 00000000000..af0588c330c --- /dev/null +++ b/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt @@ -0,0 +1,5 @@ +// ISSUE: KT-50997 + +typealias MySuspendFunction = suspend (String) -> Unit +fun foo(function: MySuspendFunction) {} +fun box() = "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 4a72630211b..fe76e5efdde 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 @@ -44101,6 +44101,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @Test @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() 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 9d78d4559fd..c23842732c8 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 @@ -44593,6 +44593,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @Test @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() 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 93f05176ba4..8d965950e5d 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -35737,6 +35737,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() throws Exception { runTest("compiler/testData/codegen/box/typealias/innerClassTypeAliasConstructor.kt"); 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 fe319464e74..35196f2a099 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 @@ -31851,6 +31851,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @Test @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() 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 85efa39e0a0..de1cd7443f3 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 @@ -31953,6 +31953,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @Test @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() 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 5beee6cd3d4..089be932ec7 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 @@ -26719,6 +26719,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() throws Exception { runTest("compiler/testData/codegen/box/typealias/innerClassTypeAliasConstructor.kt"); diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/ExternalTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/ExternalTestGenerated.java index 82c7fbfbd9f..8308ba6cdd9 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/ExternalTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/ExternalTestGenerated.java @@ -34198,6 +34198,12 @@ public class ExternalTestGenerated extends AbstractExternalNativeBlackBoxTest { runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") + public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); + } + @Test @TestMetadata("innerClassTypeAliasConstructor.kt") public void testInnerClassTypeAliasConstructor() throws Exception {