[IR] Allow inline modifier for functions returning MFVC without warning
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com> #KT-1179
This commit is contained in:
committed by
teamcity
parent
4928e284f6
commit
ac28c0a286
+6
@@ -17590,6 +17590,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueClasses.kt")
|
||||||
|
public void testValueClasses() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() throws Exception {
|
public void testVararg() throws Exception {
|
||||||
|
|||||||
+6
@@ -17596,6 +17596,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueClasses.kt")
|
||||||
|
public void testValueClasses() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() throws Exception {
|
public void testVararg() throws Exception {
|
||||||
|
|||||||
+6
@@ -17590,6 +17590,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueClasses.kt")
|
||||||
|
public void testValueClasses() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() throws Exception {
|
public void testVararg() throws Exception {
|
||||||
|
|||||||
+5
-10
@@ -10,16 +10,16 @@ import org.jetbrains.kotlin.builtins.StandardNames.BACKING_FIELD
|
|||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.getModifier
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.isInlineOnly
|
import org.jetbrains.kotlin.fir.analysis.checkers.isInlineOnly
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
|
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
|
||||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor
|
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getModifier
|
|
||||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
@@ -27,18 +27,12 @@ import org.jetbrains.kotlin.fir.expressions.*
|
|||||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||||
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.isBuiltinFunctionalType
|
|
||||||
import org.jetbrains.kotlin.fir.types.isFunctionalType
|
|
||||||
import org.jetbrains.kotlin.fir.types.isSuspendFunctionType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility
|
import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility
|
||||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers
|
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.isMarkedNullable
|
|
||||||
import org.jetbrains.kotlin.fir.types.isNullable
|
|
||||||
import org.jetbrains.kotlin.fir.types.toSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
@@ -446,6 +440,7 @@ abstract class FirInlineDeclarationChecker : FirFunctionChecker() {
|
|||||||
}
|
}
|
||||||
if (hasInlinableParameters) return
|
if (hasInlinableParameters) return
|
||||||
if (function.isInlineOnly()) return
|
if (function.isInlineOnly()) return
|
||||||
|
if (function.returnTypeRef.needsMultiFieldValueClassFlattening(context.session)) return
|
||||||
|
|
||||||
reporter.reportOn(function.source, FirErrors.NOTHING_TO_INLINE, context)
|
reporter.reportOn(function.source, FirErrors.NOTHING_TO_INLINE, context)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -23,12 +23,9 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.AnalyzerExtensions
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
|
import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.declaresOrInheritsDefaultValue
|
import org.jetbrains.kotlin.resolve.descriptorUtil.declaresOrInheritsDefaultValue
|
||||||
import org.jetbrains.kotlin.resolve.isEffectivelyFinal
|
|
||||||
|
|
||||||
class InlineAnalyzerExtension(
|
class InlineAnalyzerExtension(
|
||||||
private val reasonableInlineRules: Iterable<ReasonableInlineRule>,
|
private val reasonableInlineRules: Iterable<ReasonableInlineRule>,
|
||||||
@@ -183,6 +180,7 @@ class InlineAnalyzerExtension(
|
|||||||
) return
|
) return
|
||||||
|
|
||||||
if (reasonableInlineRules.any { it.isInlineReasonable(functionDescriptor, function, trace.bindingContext) }) return
|
if (reasonableInlineRules.any { it.isInlineReasonable(functionDescriptor, function, trace.bindingContext) }) return
|
||||||
|
if (functionDescriptor.returnType?.needsMfvcFlattening() == true) return
|
||||||
|
|
||||||
val reportOn = function.modifierList?.getModifier(KtTokens.INLINE_KEYWORD) ?: function
|
val reportOn = function.modifierList?.getModifier(KtTokens.INLINE_KEYWORD) ?: function
|
||||||
trace.report(Errors.NOTHING_TO_INLINE.on(reportOn))
|
trace.report(Errors.NOTHING_TO_INLINE.on(reportOn))
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
// LANGUAGE: +ValueClasses
|
||||||
|
// TARGET_BACKEND: JVM_IR
|
||||||
|
// WITH_STDLIB
|
||||||
|
// SKIP_TXT
|
||||||
|
// FIR_IDENTICAL
|
||||||
|
|
||||||
|
@JvmInline
|
||||||
|
value class DPoint(val x: Double, val y: Double)
|
||||||
|
|
||||||
|
inline fun f1() = DPoint(1.0, 2.0)
|
||||||
|
<!NOTHING_TO_INLINE!>inline<!> fun f2() = 2U
|
||||||
|
inline val p1 get() = DPoint(1.0, 2.0)
|
||||||
Generated
+6
@@ -17596,6 +17596,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/superProperty.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueClasses.kt")
|
||||||
|
public void testValueClasses() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() throws Exception {
|
public void testVararg() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user