[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
@@ -21188,6 +21188,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
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 LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
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() {
@@ -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() {
@@ -0,0 +1,4 @@
FILE: ValueOfCustomFunctionTypeAsArgumentOfInlineFunction.kt
@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() public final inline fun <T> inlineFunction(block: R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() some/MyComposableFunction0<T>|): R|T| {
^inlineFunction R|<local>/block|.R|SubstitutionOverride<some/MyComposableFunction0.invoke: R|T|>|()
}
@@ -0,0 +1,8 @@
// ISSUE: KT-65959
import org.jetbrains.kotlin.fir.plugin.MyComposable
@MyComposable
inline fun <T> inlineFunction(block: @MyComposable () -> T): T {
return block()
}
@@ -62,6 +62,12 @@ public class FirPsiPluginDiagnosticTestGenerated extends AbstractFirPsiPluginDia
public void testSimple() {
runTest("plugins/fir-plugin-prototype/testData/diagnostics/checkers/simple.kt");
}
@Test
@TestMetadata("ValueOfCustomFunctionTypeAsArgumentOfInlineFunction.kt")
public void testValueOfCustomFunctionTypeAsArgumentOfInlineFunction() {
runTest("plugins/fir-plugin-prototype/testData/diagnostics/checkers/ValueOfCustomFunctionTypeAsArgumentOfInlineFunction.kt");
}
}
@Nested