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 2dea67bc169..2f89956c1d1 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 @@ -17100,6 +17100,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/subtypingOfIntersectionIltInsideFlexible.kt"); } + @Test + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @Test @TestMetadata("suspendExtensionRecevierFromConstraint.kt") public void testSuspendExtensionRecevierFromConstraint() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt index c06bf187bdd..c7004f7ec6c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt @@ -143,7 +143,7 @@ class FirCallCompleter( functionalType.attributes ) csBuilder.addSubtypeConstraint(expectedType, functionalType, ConeArgumentConstraintPosition()) - atom.replaceExpectedType(expectedType) + atom.replaceExpectedType(expectedType, returnVariable.defaultType) atom.replaceTypeVariableForLambdaReturnType(returnVariable) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedAtoms.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedAtoms.kt index 0a9e621ab58..cbe2be1adb5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedAtoms.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedAtoms.kt @@ -13,9 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.DoubleColonLHS import org.jetbrains.kotlin.fir.resolve.calls.Candidate import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl -import org.jetbrains.kotlin.fir.types.ConeKotlinType -import org.jetbrains.kotlin.fir.types.ConeTypeVariable -import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.resolve.calls.model.LambdaWithTypeVariableAsExpectedTypeMarker import org.jetbrains.kotlin.resolve.calls.model.PostponedCallableReferenceMarker @@ -45,7 +43,7 @@ class ResolvedLambdaAtom( val isSuspend: Boolean, val receiver: ConeKotlinType?, val parameters: List, - val returnType: ConeKotlinType, + var returnType: ConeKotlinType, typeVariableForLambdaReturnType: ConeTypeVariableForLambdaReturnType?, candidateOfOuterCall: Candidate? ) : PostponedResolvedAtom() { @@ -66,8 +64,9 @@ class ResolvedLambdaAtom( override val inputTypes: Collection get() = receiver?.let { parameters + it } ?: parameters override val outputType: ConeKotlinType get() = returnType - fun replaceExpectedType(expectedType: ConeKotlinType) { + fun replaceExpectedType(expectedType: ConeKotlinType, newReturnType: ConeTypeVariableType) { this.expectedType = expectedType + this.returnType = newReturnType } fun replaceTypeVariableForLambdaReturnType(typeVariableForLambdaReturnType: ConeTypeVariableForLambdaReturnType) { diff --git a/compiler/testData/codegen/box/inference/sumOfOverloads.kt b/compiler/testData/codegen/box/inference/sumOfOverloads.kt new file mode 100644 index 00000000000..f7d7886e9f9 --- /dev/null +++ b/compiler/testData/codegen/box/inference/sumOfOverloads.kt @@ -0,0 +1,12 @@ +// WITH_RUNTIME +// FULL_JDK + +fun box(): String { + val w = listOf(1, 2) + + val r = w.sumOf { x -> run { x } } + + if (r != 3) return "fail 1: $r" + + return "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 d36b55ed568..91402e97582 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 @@ -17082,6 +17082,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/subtypingOfIntersectionIltInsideFlexible.kt"); } + @Test + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @Test @TestMetadata("suspendExtensionRecevierFromConstraint.kt") public void testSuspendExtensionRecevierFromConstraint() 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 9146f54dc33..c3275dbfec2 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 @@ -17100,6 +17100,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/subtypingOfIntersectionIltInsideFlexible.kt"); } + @Test + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @Test @TestMetadata("suspendExtensionRecevierFromConstraint.kt") public void testSuspendExtensionRecevierFromConstraint() 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 3c80c00bfa8..8b23e2987ec 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14151,6 +14151,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inference/subtypingOfIntersectionIltInsideFlexible.kt"); } + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @TestMetadata("suspendExtensionRecevierFromConstraint.kt") public void testSuspendExtensionRecevierFromConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/suspendExtensionRecevierFromConstraint.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 b890ab99f80..f9d02db8299 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 @@ -12415,6 +12415,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/inference/specialCallsWithCallableReferences.kt"); } + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @TestMetadata("suspendExtensionRecevierFromConstraint.kt") public void testSuspendExtensionRecevierFromConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/suspendExtensionRecevierFromConstraint.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 329de76b34c..980e9c1f042 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 @@ -11836,6 +11836,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/specialCallsWithCallableReferences.kt"); } + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @TestMetadata("suspendExtensionRecevierFromConstraint.kt") public void testSuspendExtensionRecevierFromConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/suspendExtensionRecevierFromConstraint.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 9285fec587d..f51894a637a 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 @@ -11901,6 +11901,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/specialCallsWithCallableReferences.kt"); } + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @TestMetadata("suspendExtensionRecevierFromConstraint.kt") public void testSuspendExtensionRecevierFromConstraint() throws Exception { runTest("compiler/testData/codegen/box/inference/suspendExtensionRecevierFromConstraint.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 74fb3bb1990..0abeb6377ec 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -6281,6 +6281,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/inference/recursiveConstraintInsideTypeArgumentWithStarProjection.kt"); } + @TestMetadata("sumOfOverloads.kt") + public void testSumOfOverloads() throws Exception { + runTest("compiler/testData/codegen/box/inference/sumOfOverloads.kt"); + } + @TestMetadata("unsafeVarianceCodegen.kt") public void testUnsafeVarianceCodegen() throws Exception { runTest("compiler/testData/codegen/box/inference/unsafeVarianceCodegen.kt");