diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceUtils.kt index 340bee9b6ad..349530b494f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/InferenceUtils.kt @@ -6,10 +6,10 @@ package org.jetbrains.kotlin.fir.resolve.inference import org.jetbrains.kotlin.builtins.functions.FunctionClassKind -import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirClass -import org.jetbrains.kotlin.fir.originalForSubstitutionOverride +import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.Candidate import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.name.ClassId @@ -248,7 +247,15 @@ fun extractLambdaInfoFromFunctionalType( if (!expectedType.isBuiltinFunctionalType(session)) return null val receiverType = argument.receiverType ?: expectedType.receiverType(session) - val returnType = argument.returnType ?: expectedType.returnType(session) ?: return null + val lastStatement = argument.body?.statements?.singleOrNull() + val returnType = + // Simply { }, i.e., function literals without body. Raw FIR added an implicit return with an implicit unit type ref. + if (lastStatement?.source?.kind is FirFakeSourceElementKind.ImplicitReturn && + (lastStatement as? FirReturnExpression)?.result?.source?.kind is FirFakeSourceElementKind.ImplicitUnit + ) { + session.builtinTypes.unitType.type + } else + argument.returnType ?: expectedType.returnType(session) ?: return null val parameters = extractLambdaParameters(expectedType, argument, expectedType.isExtensionFunctionType(session), session) return ResolvedLambdaAtom( diff --git a/compiler/testData/diagnostics/tests/AutoCreatedIt.fir.kt b/compiler/testData/diagnostics/tests/AutoCreatedIt.fir.kt index 02d28cc190b..161b60abe88 100644 --- a/compiler/testData/diagnostics/tests/AutoCreatedIt.fir.kt +++ b/compiler/testData/diagnostics/tests/AutoCreatedIt.fir.kt @@ -10,7 +10,7 @@ fun text() { bar1 {1} bar1 {it + 1} - bar2 {} + bar2 {} bar2 {1} bar2 {it} bar2 {it -> it} diff --git a/compiler/testData/diagnostics/tests/generics/kt34729.fir.kt b/compiler/testData/diagnostics/tests/generics/kt34729.fir.kt index 017f96bd1b4..de5f7d6f060 100644 --- a/compiler/testData/diagnostics/tests/generics/kt34729.fir.kt +++ b/compiler/testData/diagnostics/tests/generics/kt34729.fir.kt @@ -14,6 +14,6 @@ fun bar(a: (Int) -> T) { } fun test() { - foo { } - bar { } + foo { } + bar { } } diff --git a/compiler/testData/diagnostics/testsWithStdLib/regression/kt9820_javaFunctionTypeInheritor.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/regression/kt9820_javaFunctionTypeInheritor.fir.kt index ca950c13b30..1762e31b6d7 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/regression/kt9820_javaFunctionTypeInheritor.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/regression/kt9820_javaFunctionTypeInheritor.fir.kt @@ -14,5 +14,5 @@ fun useJ(j: J) { } fun jj() { - useJ({}) + useJ({}) }