Skip to content

Commit ef43a9e

Browse files
lunakolySpace Team
authored andcommitted
[FIR] Only consider non-local inline functions for NOT_YET_SUPPORTED_IN_INLINE
In K1, this analysis is performed by `InlineAnalyzerExtension`, which only runs for non-local `inline` functions. ^KT-77986
1 parent f466d32 commit ef43a9e

File tree

6 files changed

+9
-7
lines changed

6 files changed

+9
-7
lines changed

compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineBodySimpleFunctionChecker.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
1313
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
1414
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
1515
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
16+
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
1617
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
1718
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
1819
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
@@ -27,13 +28,16 @@ object FirInlineBodySimpleFunctionChecker : FirSimpleFunctionChecker(MppCheckerK
2728

2829
context(context: CheckerContext)
2930
fun isInsideInlineContext(declaration: FirDeclaration): Boolean {
30-
val outerInlineContext = when {
31+
var outerInlineContext = when {
3132
declaration == context.inlineFunctionBodyContext?.inlineFunction -> context.inlineFunctionBodyContext?.parentInlineContext
3233
else -> context.inlineFunctionBodyContext
3334
}
3435
for (it in context.containingDeclarations.asReversed()) {
3536
when {
36-
it == outerInlineContext?.inlineFunction?.symbol -> return true
37+
it == outerInlineContext?.inlineFunction?.symbol -> when {
38+
!outerInlineContext.inlineFunction.symbol.isLocal -> return true
39+
else -> outerInlineContext = outerInlineContext.parentInlineContext
40+
}
3741
it.isObject -> return false
3842
}
3943
}

compiler/testData/codegen/box/inline/nestedLabelsInlinedClashingAtFunctionsWithClosure.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ internal fun test(state: State) {
1010
"NOT_YET_SUPPORTED_IN_INLINE", // K1/JVM-only error
1111
)
1212
inline fun test3() {
13-
@Suppress("NOT_YET_SUPPORTED_IN_INLINE") // K2/ANY error
1413
inline fun test2() {
1514
inline fun test1() {
1615
loop@ for (i in 1..10) {

compiler/testData/diagnostics/nativeTests/localInsideInlineInsideLocal.fir.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ inline fun topLevelInlineFun() {
1414

1515
fun topLevelFun() {
1616
inline fun localInlineFun() {
17-
<!NOT_YET_SUPPORTED_IN_INLINE!>fun<!> localFun() {}
17+
fun localFun() {}
1818
localFun()
1919
}
2020
localInlineFun()

compiler/testData/diagnostics/tests/localInsideInlineInsideLocal.fir.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ inline fun topLevelInlineFun() {
1515

1616
fun topLevelFun() {
1717
<!NOT_YET_SUPPORTED_LOCAL_INLINE_FUNCTION!>inline<!> fun localInlineFun() {
18-
<!NOT_YET_SUPPORTED_IN_INLINE!>fun<!> localFun() {}
18+
fun localFun() {}
1919
localFun()
2020
}
2121
localInlineFun()

compiler/testData/diagnostics/testsWithJsStdLib/localInsideInlineInsideLocal.fir.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ inline fun topLevelInlineFun() {
1414

1515
fun topLevelFun() {
1616
inline fun localInlineFun() {
17-
<!NOT_YET_SUPPORTED_IN_INLINE!>fun<!> localFun() {}
17+
fun localFun() {}
1818
localFun()
1919
}
2020
localInlineFun()

js/js.translator/testData/box/labels/nestedLabelsInlinedClashingAtFunctionsWithClosure.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class State() {
1010

1111
internal fun test(state: State) {
1212
inline fun test3() {
13-
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
1413
inline fun test2() {
1514
inline fun test1() {
1615
loop@ for (i in 1..10) {

0 commit comments

Comments
 (0)