Files
kotlin-fork/compiler/testData/diagnostics/testsWithJvmBackend/suspensionPointInMonitor.kt
T

83 lines
1.4 KiB
Kotlin
Vendored

// !DIAGNOSTICS: -UNUSED_PARAMETER
// FIR_IDENTICAL
// WITH_STDLIB
// MODULE: lib
// FILE: lib.kt
val lock = Any()
inline fun inlineMe(c: () -> Unit) {
synchronized(lock) {
c()
}
}
inline fun monitorInFinally(a: () -> Unit, b: () -> Unit) {
try {
a()
} finally {
synchronized(lock) {
b()
}
}
}
// MODULE: main(lib)
// FILE: main.kt
fun builder(c: suspend () -> Unit) {}
suspend fun suspensionPoint() {}
fun test() {
builder <!SUSPENSION_POINT_INSIDE_MONITOR!>{
inlineMe {
suspensionPoint()
}
}<!>
builder <!SUSPENSION_POINT_INSIDE_MONITOR!>{
monitorInFinally(
{},
{ suspensionPoint() }
)
}<!>
builder {
withCrossinline {}
withCrossinline {
suspensionPoint()
}
}
synchronized(lock) {
builder {
suspensionPoint()
}
}
synchronized(lock) {
object : SuspendRunnable {
override suspend fun run() {
suspensionPoint()
}
}
}
}
interface SuspendRunnable {
suspend fun run()
}
<!SUSPENSION_POINT_INSIDE_MONITOR!>inline fun withCrossinline(crossinline a: suspend () -> Unit): suspend () -> Unit {
val c : suspend () -> Unit = <!SUSPENSION_POINT_INSIDE_MONITOR!>{
inlineMe {
a()
}
}<!>
return c
}<!>