blob: 61bd79ee54c5844d022a44f47ee7d523a06b5642 [file]
// RUN_PIPELINE_TILL: BACKEND
tailrec fun foo1(x: Int): Int {
return maybe(x) ?: foo1(x - 1)
}
fun maybe(x: Int) = x.takeIf { x == 1 }
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun foo2(x: Int): Boolean {
return condition(x) || <!NON_TAIL_RECURSIVE_CALL!>foo2<!>(x - 1)
}
fun condition(x: Int): Boolean = x == 0
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun Int.foo3a(): Int {
return boo()?.<!NON_TAIL_RECURSIVE_CALL!>foo3a<!>() ?: 1
}
<!NO_TAIL_CALLS_FOUND!>tailrec<!> fun Int.foo3b(): Int {
return boo()?.<!NON_TAIL_RECURSIVE_CALL!>foo3b<!>()?.boo() ?: 1
}
fun Int.boo(): Int? = this + 1
tailrec fun foo4(counter : Int) : Int? {
if (counter < 0) return null
if (counter == 0) return 777
return <!NON_TAIL_RECURSIVE_CALL!>foo4<!>(-1) ?: <!NON_TAIL_RECURSIVE_CALL!>foo4<!>(-2) ?: foo4(counter - 1)
}
/* GENERATED_FIR_TAGS: additiveExpression, comparisonExpression, disjunctionExpression, elvisExpression,
equalityExpression, funWithExtensionReceiver, functionDeclaration, ifExpression, integerLiteral, lambdaLiteral,
nullableType, safeCall, tailrec, thisExpression */