blob: b5ff001b3e843589199311ea09e92af28163f62f [file]
// RUN_PIPELINE_TILL: FRONTEND
// DIAGNOSTICS: -UNUSED_VARIABLE
// WITH_STDLIB
// ISSUE: KT-67624
import kotlin.contracts.*
@OptIn(ExperimentalContracts::class)
fun contractRun(f: (s: String?) -> Unit) {
contract {
callsInPlace(f, InvocationKind.EXACTLY_ONCE)
}
f(null)
}
inline fun inlineRun(f: (s: String?) -> Unit) {
f(null)
}
fun noInlineRun(f: (s: String?) -> Unit) {
f(null)
}
// ------------- continue -------------
fun test_1_continue() {
while (true) {
contractRun {
val result = it ?: <!BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY!>continue<!>
}
}
}
fun test_2_continue() {
while (true) {
inlineRun {
val result = it ?: <!UNSUPPORTED_FEATURE!>continue<!>
}
}
}
fun test_3_continue() {
while (true) {
noInlineRun {
val result = it ?: <!BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY!>continue<!>
}
}
}
// ------------- break -------------
fun test_1_break() {
while (true) {
contractRun {
val result = it ?: <!BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY!>break<!>
}
}
}
fun test_2_break() {
while (true) {
inlineRun {
val result = it ?: <!UNSUPPORTED_FEATURE!>break<!>
}
}
}
fun test_3_break() {
while (true) {
noInlineRun {
val result = it ?: <!BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY!>break<!>
}
}
}
/* GENERATED_FIR_TAGS: break, classReference, continue, contractCallsEffect, contracts, elvisExpression,
functionDeclaration, functionalType, inline, lambdaLiteral, localProperty, nullableType, propertyDeclaration, whileLoop */