diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 8a7ff76ec51..9ec188166b4 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -821,8 +821,8 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { // TODO: replace with KtParameter val CANNOT_INFER_PARAMETER_TYPE by error() - val NO_TAIL_CALLS_FOUND by warning(PositioningStrategy.DECLARATION_SIGNATURE) - val TAILREC_ON_VIRTUAL_MEMBER_ERROR by error(PositioningStrategy.DECLARATION_SIGNATURE) + val NO_TAIL_CALLS_FOUND by warning(PositioningStrategy.TAILREC_MODIFIER) + val TAILREC_ON_VIRTUAL_MEMBER_ERROR by error(PositioningStrategy.TAILREC_MODIFIER) val NON_TAIL_RECURSIVE_CALL by warning(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) val TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED by warning(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) } diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt index cd2c936fea4..638a96792ae 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt @@ -107,6 +107,7 @@ enum class PositioningStrategy(private val strategy: String? = null) { NON_FINAL_MODIFIER_OR_NAME, ENUM_MODIFIER, FIELD_KEYWORD, + TAILREC_MODIFIER, ; diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index a49d55e09f9..8eb3ec7d449 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -442,8 +442,8 @@ object FirErrors { val FORBIDDEN_VARARG_PARAMETER_TYPE by error1(SourceElementPositioningStrategies.PARAMETER_VARARG_MODIFIER) val VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION by error0() val CANNOT_INFER_PARAMETER_TYPE by error0() - val NO_TAIL_CALLS_FOUND by warning0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) - val TAILREC_ON_VIRTUAL_MEMBER_ERROR by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) + val NO_TAIL_CALLS_FOUND by warning0(SourceElementPositioningStrategies.TAILREC_MODIFIER) + val TAILREC_ON_VIRTUAL_MEMBER_ERROR by error0(SourceElementPositioningStrategies.TAILREC_MODIFIER) val NON_TAIL_RECURSIVE_CALL by warning0(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) val TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED by warning0(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt index 3621fc6ce39..76e043ee593 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt @@ -379,6 +379,9 @@ object LightTreePositioningStrategies { val ENUM_MODIFIER: LightTreePositioningStrategy = ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.ENUM_KEYWORD)) + val TAILREC_MODIFIER: LightTreePositioningStrategy = + ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.TAILREC_KEYWORD)) + val FIELD_KEYWORD: LightTreePositioningStrategy = object : LightTreePositioningStrategy() { override fun mark( node: LighterASTNode, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt index c9530b1ba8d..aa4f9873a20 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt @@ -324,4 +324,9 @@ object SourceElementPositioningStrategies { LightTreePositioningStrategies.FIELD_KEYWORD, PositioningStrategies.FIELD_KEYWORD ) + + val TAILREC_MODIFIER = SourceElementPositioningStrategy( + LightTreePositioningStrategies.TAILREC_MODIFIER, + PositioningStrategies.TAILREC_MODIFIER + ) } diff --git a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt index 82391456af4..0bb9e534dae 100644 --- a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt +++ b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt @@ -292,6 +292,9 @@ object PositioningStrategies { @JvmField val ENUM_MODIFIER: PositioningStrategy = modifierSetPosition(KtTokens.ENUM_KEYWORD) + @JvmField + val TAILREC_MODIFIER: PositioningStrategy = modifierSetPosition(KtTokens.TAILREC_KEYWORD) + @JvmField val FIELD_KEYWORD: PositioningStrategy = object : DeclarationHeader() { override fun mark(element: KtBackingField): List { diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/functionWithNoTails.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/functionWithNoTails.kt index 21216f009af..1d6e4bc48c2 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/functionWithNoTails.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/functionWithNoTails.kt @@ -6,7 +6,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun noTails() { +tailrec fun noTails() { // nothing here } diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/labeledThisReferences.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/labeledThisReferences.kt index aa473b7a699..e23ffd7960f 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/labeledThisReferences.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/labeledThisReferences.kt @@ -16,7 +16,7 @@ class B { } } - tailrec fun h2(x : Any) { + tailrec fun h2(x : Any) { this@B.h2("no recursion") // keep vigilance } diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLambda.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLambda.kt index 265d12dcb27..e71fd4516ce 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLambda.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLambda.kt @@ -8,7 +8,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun foo() { +tailrec fun foo() { bar { foo() } diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLocalFunction.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLocalFunction.kt index d96d03e22b4..d10e4580ab2 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLocalFunction.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/recursiveCallInLocalFunction.kt @@ -6,7 +6,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun foo() { +tailrec fun foo() { fun bar() { foo() } diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInCatch.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInCatch.kt index a5e7c44a3ef..2cb16676417 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInCatch.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInCatch.kt @@ -6,7 +6,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun test(counter : Int) : Int { +tailrec fun test(counter : Int) : Int { if (counter == 0) return 0 try { diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInFinally.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInFinally.kt index 9d38733b072..7abf7956111 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInFinally.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInFinally.kt @@ -6,7 +6,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun test(counter : Int) : Int { +tailrec fun test(counter : Int) : Int { if (counter == 0) return 0 try { diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInIfInFinally.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInIfInFinally.kt index 30b5bb0200f..5786e5d457e 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInIfInFinally.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInIfInFinally.kt @@ -6,7 +6,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun test(counter : Int) : Int { +tailrec fun test(counter : Int) : Int { if (counter == 0) return 0 try { diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInTry.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInTry.kt index f83c8fe8aba..38b64dc4cdb 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInTry.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/returnInTry.kt @@ -6,7 +6,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun test(counter : Int) : Int { +tailrec fun test(counter : Int) : Int { if (counter == 0) return 0 try { diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/tailRecursionInFinally.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/tailRecursionInFinally.kt index d77723ce2a2..a7ae9f296bd 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/tailRecursionInFinally.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/tailRecursionInFinally.kt @@ -6,7 +6,7 @@ // DONT_RUN_GENERATED_CODE: JS // IGNORE_BACKEND: JS -tailrec fun test(go: Boolean) : Unit { +tailrec fun test(go: Boolean) : Unit { if (!go) return try { test(false) diff --git a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/thisReferences.kt b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/thisReferences.kt index 36118a0ef54..0ae770565d7 100644 --- a/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/thisReferences.kt +++ b/compiler/testData/codegen/box/diagnostics/functions/tailRecursion/thisReferences.kt @@ -19,7 +19,7 @@ class A { } } - tailrec fun f3(a : A) { + tailrec fun f3(a : A) { a.f3(a) // non-tail recursion, could be potentially resolved by condition if (a == this) f3() else a.f3() } } diff --git a/compiler/testData/diagnostics/tests/tailRecBasic.kt b/compiler/testData/diagnostics/tests/tailRecBasic.kt index b74776a4612..9eaccbc42a2 100644 --- a/compiler/testData/diagnostics/tests/tailRecBasic.kt +++ b/compiler/testData/diagnostics/tests/tailRecBasic.kt @@ -2,17 +2,17 @@ // WITH_STDLIB // !DIAGNOSTICS: -UNREACHABLE_CODE -tailrec fun foo1() { +tailrec fun foo1() { foo1() 1 } -tailrec fun foo2() { +tailrec fun foo2() { foo2() val i = 1 } -tailrec fun foo3() { +tailrec fun foo3() { foo3() foo1() } @@ -27,7 +27,7 @@ tailrec fun foo5() { foo4() } -tailrec fun foo6(b: Boolean) { +tailrec fun foo6(b: Boolean) { while (b) { foo6(!b) } @@ -40,21 +40,21 @@ tailrec fun foo7_return() { } } -tailrec fun foo7_break() { +tailrec fun foo7_break() { while (true) { foo7_break() break } } -tailrec fun foo7_continue() { +tailrec fun foo7_continue() { while (true) { foo7_continue() continue } } -tailrec fun foo8() { +tailrec fun foo8() { while (true) { foo8() throw Exception() @@ -62,19 +62,19 @@ tailrec fun foo7_return() { foo8() } -tailrec fun foo9() { +tailrec fun foo9() { foo9() fun bar() {} } -tailrec fun foo10() { +tailrec fun foo10() { foo10() class Bar { val i = 1 } } -tailrec fun foo11(): String { +tailrec fun foo11(): String { return "hello ${foo11()}" } diff --git a/compiler/testData/diagnostics/tests/tailRecInNestedScopes.fir.kt b/compiler/testData/diagnostics/tests/tailRecInNestedScopes.fir.kt index d8fbc3a6e7e..4993f8237ad 100644 --- a/compiler/testData/diagnostics/tests/tailRecInNestedScopes.fir.kt +++ b/compiler/testData/diagnostics/tests/tailRecInNestedScopes.fir.kt @@ -1,6 +1,6 @@ // WITH_STDLIB -tailrec fun foo1() { +tailrec fun foo1() { run { foo1() } @@ -9,13 +9,13 @@ fun myRun(f: () -> Unit) = f() -tailrec fun foo2() { +tailrec fun foo2() { myRun { foo2() } } -tailrec fun foo3() { +tailrec fun foo3() { fun bar() { foo3() } @@ -23,14 +23,14 @@ fun myRun(f: () -> Unit) = f() } class A { - tailrec fun foo4() { + tailrec fun foo4() { with(this) { foo4() } } } -tailrec fun foo5() { +tailrec fun foo5() { run { return foo5() } diff --git a/compiler/testData/diagnostics/tests/tailRecInTry.kt b/compiler/testData/diagnostics/tests/tailRecInTry.kt index 6ea81da3bdb..af4818c5b92 100644 --- a/compiler/testData/diagnostics/tests/tailRecInTry.kt +++ b/compiler/testData/diagnostics/tests/tailRecInTry.kt @@ -1,5 +1,5 @@ // FIR_IDENTICAL -tailrec fun foo1() { +tailrec fun foo1() { try { foo1() } catch (e: Exception) { @@ -9,7 +9,7 @@ } } -tailrec fun foo2() { +tailrec fun foo2() { try { foo2() foo1() @@ -22,7 +22,7 @@ } } -tailrec fun foo3() { +tailrec fun foo3() { try { try { foo3() @@ -41,7 +41,7 @@ } } -tailrec fun foo4() { +tailrec fun foo4() { try { if (true) { foo4() diff --git a/compiler/testData/diagnostics/tests/tailRecOnVirtualMember.fir.kt b/compiler/testData/diagnostics/tests/tailRecOnVirtualMember.fir.kt index 2fce7da07d6..e8d6e056dc3 100644 --- a/compiler/testData/diagnostics/tests/tailRecOnVirtualMember.fir.kt +++ b/compiler/testData/diagnostics/tests/tailRecOnVirtualMember.fir.kt @@ -1,15 +1,15 @@ //!LANGUAGE: -ProhibitTailrecOnVirtualMember open class A { - tailrec open fun foo(x: Int) { + tailrec open fun foo(x: Int) { foo(x) } - internal tailrec open fun bar(y: Int) { + internal tailrec open fun bar(y: Int) { bar(y) } - protected tailrec open fun baz(y: Int) { + protected tailrec open fun baz(y: Int) { baz(y) } @@ -38,15 +38,15 @@ open class B : A() { open class C : A() { - tailrec override fun foo(x: Int) { + tailrec override fun foo(x: Int) { foo(x) } - tailrec override fun bar(y: Int) { + tailrec override fun bar(y: Int) { bar(y) } - tailrec override fun baz(y: Int) { + tailrec override fun baz(y: Int) { baz(y) } } @@ -66,15 +66,15 @@ object D : A() { } sealed class E : A() { - tailrec override fun foo(x: Int) { + tailrec override fun foo(x: Int) { foo(x) } - tailrec override fun bar(y: Int) { + tailrec override fun bar(y: Int) { bar(y) } - tailrec override fun baz(y: Int) { + tailrec override fun baz(y: Int) { baz(y) } @@ -109,15 +109,15 @@ enum class F { } }; - tailrec open fun foo(x: Int) { + tailrec open fun foo(x: Int) { foo(x) } - internal tailrec open fun bar(y: Int) { + internal tailrec open fun bar(y: Int) { bar(y) } - protected tailrec open fun baz(y: Int) { + protected tailrec open fun baz(y: Int) { baz(y) } @@ -134,15 +134,15 @@ enum class G { G1; - tailrec open fun foo(x: Int) { + tailrec open fun foo(x: Int) { foo(x) } - internal tailrec open fun bar(y: Int) { + internal tailrec open fun bar(y: Int) { bar(y) } - protected tailrec open fun baz(y: Int) { + protected tailrec open fun baz(y: Int) { baz(y) } @@ -168,4 +168,4 @@ val z = object : A() { tailrec override fun baz(y: Int) { baz(y) } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/tailRecOnVirtualMemberError.kt b/compiler/testData/diagnostics/tests/tailRecOnVirtualMemberError.kt index a9e506fc898..b6ebfeb7053 100644 --- a/compiler/testData/diagnostics/tests/tailRecOnVirtualMemberError.kt +++ b/compiler/testData/diagnostics/tests/tailRecOnVirtualMemberError.kt @@ -2,15 +2,15 @@ //!LANGUAGE: +ProhibitTailrecOnVirtualMember open class A { - tailrec open fun foo(x: Int) { + tailrec open fun foo(x: Int) { foo(x) } - internal tailrec open fun bar(y: Int) { + internal tailrec open fun bar(y: Int) { bar(y) } - protected tailrec open fun baz(y: Int) { + protected tailrec open fun baz(y: Int) { baz(y) } @@ -39,15 +39,15 @@ open class B : A() { open class C : A() { - tailrec override fun foo(x: Int) { + tailrec override fun foo(x: Int) { foo(x) } - tailrec override fun bar(y: Int) { + tailrec override fun bar(y: Int) { bar(y) } - tailrec override fun baz(y: Int) { + tailrec override fun baz(y: Int) { baz(y) } } @@ -67,15 +67,15 @@ object D : A() { } sealed class E : A() { - tailrec override fun foo(x: Int) { + tailrec override fun foo(x: Int) { foo(x) } - tailrec override fun bar(y: Int) { + tailrec override fun bar(y: Int) { bar(y) } - tailrec override fun baz(y: Int) { + tailrec override fun baz(y: Int) { baz(y) } @@ -110,15 +110,15 @@ enum class F { } }; - tailrec open fun foo(x: Int) { + tailrec open fun foo(x: Int) { foo(x) } - internal tailrec open fun bar(y: Int) { + internal tailrec open fun bar(y: Int) { bar(y) } - protected tailrec open fun baz(y: Int) { + protected tailrec open fun baz(y: Int) { baz(y) } @@ -135,15 +135,15 @@ enum class G { G1; - tailrec open fun foo(x: Int) { + tailrec open fun foo(x: Int) { foo(x) } - internal tailrec open fun bar(y: Int) { + internal tailrec open fun bar(y: Int) { bar(y) } - protected tailrec open fun baz(y: Int) { + protected tailrec open fun baz(y: Int) { baz(y) } @@ -168,4 +168,4 @@ val z = object : A() { tailrec override fun baz(y: Int) { baz(y) } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/tailRecOverridden.fir.kt b/compiler/testData/diagnostics/tests/tailRecOverridden.fir.kt index 19e2f660a59..a647b61e780 100644 --- a/compiler/testData/diagnostics/tests/tailRecOverridden.fir.kt +++ b/compiler/testData/diagnostics/tests/tailRecOverridden.fir.kt @@ -6,11 +6,11 @@ open class A { } class B: A() { - tailrec override fun foo(x: Int) { + tailrec override fun foo(x: Int) { foo() } - tailrec override fun gav(y: Int, z: Int) { + tailrec override fun gav(y: Int, z: Int) { gav(y) } diff --git a/compiler/testData/diagnostics/tests/tailRecSingleton.fir.kt b/compiler/testData/diagnostics/tests/tailRecSingleton.fir.kt index 796037d2394..05454780b8e 100644 --- a/compiler/testData/diagnostics/tests/tailRecSingleton.fir.kt +++ b/compiler/testData/diagnostics/tests/tailRecSingleton.fir.kt @@ -44,7 +44,7 @@ enum class E { } }, C { - override tailrec fun rec() { + override tailrec fun rec() { C.rec() // resolution goes to `E.rec`. Hence the resolved symbol is considered different from `C.rec`. } }; diff --git a/compiler/testData/diagnostics/tests/tailRecWithDispatchReceiver.kt b/compiler/testData/diagnostics/tests/tailRecWithDispatchReceiver.kt index 82295b290dd..4eccc4101d9 100644 --- a/compiler/testData/diagnostics/tests/tailRecWithDispatchReceiver.kt +++ b/compiler/testData/diagnostics/tests/tailRecWithDispatchReceiver.kt @@ -1,6 +1,6 @@ // FIR_IDENTICAL class A(val a: A) { - tailrec fun foo1() { + tailrec fun foo1() { a.foo1() } @@ -12,7 +12,7 @@ class A(val a: A) { foo3() } - tailrec fun foo4() { + tailrec fun foo4() { with(a) { foo4() return diff --git a/compiler/testData/diagnostics/tests/tailRecWithExtensionReceiver.kt b/compiler/testData/diagnostics/tests/tailRecWithExtensionReceiver.kt index d0140345786..4ca7fbd064a 100644 --- a/compiler/testData/diagnostics/tests/tailRecWithExtensionReceiver.kt +++ b/compiler/testData/diagnostics/tests/tailRecWithExtensionReceiver.kt @@ -7,7 +7,7 @@ tailrec fun String.foo2() { this.foo2() } -tailrec fun String.foo3() { +tailrec fun String.foo3() { with(this) { foo3() } diff --git a/compiler/testData/diagnostics/tests/tailRecursionComplex.kt b/compiler/testData/diagnostics/tests/tailRecursionComplex.kt index 4c061db2679..7b024ad0b76 100644 --- a/compiler/testData/diagnostics/tests/tailRecursionComplex.kt +++ b/compiler/testData/diagnostics/tests/tailRecursionComplex.kt @@ -5,7 +5,7 @@ object O { } class A { - tailrec fun foo(i: Int) = if (i < 0) 0 else A.foo(i - 1) + tailrec fun foo(i: Int) = if (i < 0) 0 else A.foo(i - 1) companion object { fun foo(i: Int) = 42 + i @@ -13,5 +13,5 @@ class A { } class B { - tailrec fun foo(i: Int) = if (i < 0) 0 else O.foo(i - 1) -} \ No newline at end of file + tailrec fun foo(i: Int) = if (i < 0) 0 else O.foo(i - 1) +}