Report suspension point in monitor error on crossinline lambdas

#KT-27258: Fixed
This commit is contained in:
Ilmir Usmanov
2018-10-11 19:36:47 +03:00
parent 3f0bd20235
commit e21159c28f
5 changed files with 47 additions and 14 deletions
@@ -15,3 +15,12 @@ inline fun monitorInFinally(a: () -> Unit, b: () -> Unit) {
}
}
}
inline fun withCrossinline(crossinline a: suspend () -> Unit): suspend () -> Unit {
val c : suspend () -> Unit = {
inlineMe {
a()
}
}
return c
}
@@ -4,4 +4,7 @@ compiler/testData/compileKotlinAgainstCustomBinaries/suspensionPointInMonitor/so
compiler/testData/compileKotlinAgainstCustomBinaries/suspensionPointInMonitor/source.kt:14:13: error: a suspension point at SourceKt$test$2.invokeSuspend(source.kt:17) is inside a critical section
builder {
^
compiler/testData/compileKotlinAgainstCustomBinaries/suspensionPointInMonitor/source.kt:24:25: error: a suspension point at SourceKt$test$3$invokeSuspend$$inlined$withCrossinline$2.invokeSuspend(a.kt:31) is inside a critical section
withCrossinline {
^
COMPILATION_ERROR
@@ -18,6 +18,14 @@ fun test() {
)
}
builder {
withCrossinline {}
withCrossinline {
suspensionPoint()
}
}
synchronized(lock) {
builder {
suspensionPoint()