From acce055fc47f40db5ed784167c4ef5218866bfe4 Mon Sep 17 00:00:00 2001 From: pyos Date: Tue, 23 Aug 2022 14:44:43 +0200 Subject: [PATCH] FIR: fix incorrect handling of suspend function typealiases again The previous attempt stopped this code from throwing an exception during serialization, but the arity is still wrong so an exception is now throw when reading the serialized type. ^KT-50997 Fixed --- .../codegen/FirBlackBoxCodegenTestGenerated.java | 6 ++++++ .../jetbrains/kotlin/fir/types/InferenceUtils.kt | 2 +- .../incorrectTypeOfTypealiasForSuspendFTMM.kt | 13 +++++++++++++ ...orrectTypeOfTypealiasForSuspendFunctionalType.kt | 2 +- .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../kotlin/js/test/JsCodegenBoxTestGenerated.java | 6 ++++++ .../js/test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++++++ .../semantics/IrCodegenBoxWasmTestGenerated.java | 5 +++++ .../blackboxtest/NativeCodegenBoxTestGenerated.java | 6 ++++++ 11 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.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 4d6c1a3e574..9242cd0a596 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 @@ -49409,6 +49409,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @Test @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() 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 10fb93b6522..e7e43162466 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 @@ -112,9 +112,9 @@ fun ConeKotlinType.suspendFunctionTypeToFunctionTypeWithContinuation(session: Fi val kind = 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 functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size)) val lastTypeArgument = typeArguments.last() return ConeClassLikeTypeImpl( ConeClassLikeLookupTagImpl(functionalTypeId), diff --git a/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt b/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt new file mode 100644 index 00000000000..bc09d4bba75 --- /dev/null +++ b/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt @@ -0,0 +1,13 @@ +// WITH_STDLIB +// ISSUE: KT-50997 (multi-module variant) +// MODULE: lib +// FILE: lib.kt +typealias MySuspendFunction = suspend (String, String) -> Unit + +fun foo(function: MySuspendFunction) {} + +// MODULE: main(lib) +// FILE: main.kt +fun bar() = foo { a, b -> a + b } + +fun box() = "OK" diff --git a/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt b/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt index af0588c330c..efc713463d5 100644 --- a/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt +++ b/compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt @@ -2,4 +2,4 @@ typealias MySuspendFunction = suspend (String) -> Unit fun foo(function: MySuspendFunction) {} -fun box() = "OK" \ No newline at end of file +fun box() = "OK" 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 56affdd8346..4cc22166322 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 @@ -47897,6 +47897,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @Test @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() 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 44d68c37f63..7258343eed7 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 @@ -49409,6 +49409,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @Test @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() 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 8bb7265c47a..afc73b94b16 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -38869,6 +38869,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.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 805e7f7a363..521246acdcf 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 @@ -35527,6 +35527,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @Test @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() 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 ce849d50d40..a76a0d1728b 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 @@ -35701,6 +35701,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @Test @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() 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 7fa1f29be76..1d56e37be68 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 @@ -31989,6 +31989,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception { runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFunctionalType.kt"); diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index ce2e5d85d1d..c1c1b2c85e0 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -38822,6 +38822,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/typealias/genericTypeAliasConstructor2.kt"); } + @Test + @TestMetadata("incorrectTypeOfTypealiasForSuspendFTMM.kt") + public void testIncorrectTypeOfTypealiasForSuspendFTMM() throws Exception { + runTest("compiler/testData/codegen/box/typealias/incorrectTypeOfTypealiasForSuspendFTMM.kt"); + } + @Test @TestMetadata("incorrectTypeOfTypealiasForSuspendFunctionalType.kt") public void testIncorrectTypeOfTypealiasForSuspendFunctionalType() throws Exception {