[FIR] Incorrect warnings about inline function impact

^KT-65959 Fixed
This commit is contained in:
Vladimir Sukharev
2024-03-07 21:47:05 +01:00
committed by Space Team
parent 232c3aeadc
commit aa1cce78c3
11 changed files with 61 additions and 1 deletions
@@ -21182,6 +21182,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
}
@Test
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
}
@Test
@TestMetadata("vararg.kt")
public void testVararg() {
@@ -21188,6 +21188,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
}
@Test
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
}
@Test
@TestMetadata("vararg.kt")
public void testVararg() {
@@ -457,7 +457,7 @@ object FirInlineDeclarationChecker : FirFunctionChecker(MppCheckerKind.Common) {
function.valueParameters.any { param ->
val type = param.returnTypeRef.coneType
!param.isNoinline && !type.isNullable
&& (type.isBasicFunctionType(session) || type.isSuspendOrKSuspendFunctionType(session))
&& type.isNonKFunctionType(session)
}
if (hasInlinableParameters) return
if (function.isInlineOnly(session)) return
@@ -59,6 +59,11 @@ fun ConeKotlinType.isBasicFunctionType(session: FirSession): Boolean {
return isFunctionTypeWithPredicate(session) { it == FunctionTypeKind.Function }
}
// Function, SuspendFunction, KSuspendFunction, [Custom]Function, K[Custom]Function
fun ConeKotlinType.isNonKFunctionType(session: FirSession): Boolean {
return isFunctionTypeWithPredicate(session) { it != FunctionTypeKind.KFunction }
}
// SuspendFunction, KSuspendFunction
fun ConeKotlinType.isSuspendOrKSuspendFunctionType(session: FirSession): Boolean {
return isFunctionTypeWithPredicate(session) {
@@ -0,0 +1,7 @@
// FIR_IDENTICAL
// ISSUE: KT-65959
import kotlin.reflect.KFunction0
<!NOTHING_TO_INLINE!>inline<!> fun foo(block: KFunction0<Unit>) {
block()
}
@@ -21188,6 +21188,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
}
@Test
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
}
@Test
@TestMetadata("vararg.kt")
public void testVararg() {