| // 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 */ |