Files
kotlin/compiler/testData/codegen/bytecodeListing/tailcall/unreachable.kt
Ilmir Usmanov f60787d57c Move coroutines to kotlin.coroutines package: tests
Introduce COMMON_COROUTINES_TEST directive.
Every test with this directive is run twice: one time with
language version 1.2 and kotlin.coroutines.experimental package
and the other time with language version 1.3 and kotlin.coroutines
package. Each run is a separate method: with suffixes _1_2 and _1_3
respectively.
However, since codegen of release coroutines is not supported in JS
backend, we generate only one method: with suffix _1_2.
 #KT-23362
2018-04-23 21:51:59 +03:00

120 lines
2.0 KiB
Kotlin
Vendored

// COMMON_COROUTINES_TEST
suspend fun empty() {}
suspend fun withoutReturn() {
empty()
}
suspend fun twoReturns() {
return empty()
return empty()
}
suspend fun notTailCall() {
empty()
return empty()
empty()
}
suspend fun lambdaAsParameter(c: suspend () -> Unit) {
c()
}
suspend fun lambdaAsParameterNotTailCall(c: suspend () -> Unit) {
c()
return c()
c()
}
suspend fun lambdaAsParameterReturn(c: suspend () -> Unit) {
return c()
c()
}
suspend fun returnsInt() = 42
suspend fun callsIntNotTailCall() {
returnsInt()
return
empty()
}
suspend fun multipleExitPoints(b: Boolean) {
if (b) empty() else withoutReturn()
return
empty()
}
suspend fun multipleExitPointsNotTailCall(b: Boolean) {
if (b) empty() else returnsInt()
return
empty()
}
fun ordinary() = 1
inline fun ordinaryInline() {
ordinary()
}
suspend fun multipleExitPointsWithOrdinaryInline(b: Boolean) {
if (b) empty() else ordinaryInline()
return
empty()
}
suspend fun multipleExitPointsWhen(i: Int) {
when (i) {
1 -> empty()
2 -> twoReturns()
3 -> withoutReturn()
else -> lambdaAsParameter {}
}
return
empty()
}
suspend fun <T> generic(): T = TODO()
suspend fun useGenericReturningUnit() {
generic<Unit>()
return
empty()
}
class Generic<T> {
suspend fun foo(): T = TODO()
}
suspend fun useGenericClass(g: Generic<Unit>) {
g.foo()
return
empty()
}
suspend fun <T> genericInferType(c: () -> T): T = TODO()
suspend fun useGenericInferType() {
genericInferType {}
return
empty()
}
suspend fun nullableUnit(): Unit? = null
suspend fun useNullableUnit() {
nullableUnit()
return
empty()
}
suspend fun useRunRunRunRunRun() {
run {
run {
run {
run {
run {
empty()
}
}
}
}
}
return
empty()
}