// RUN_PIPELINE_TILL: FRONTEND
//KT-234 Force when() expressions to have an 'else' branch
//KT-973 Unreachable code

package kt234_kt973

class Pair<A, B>(a: A, b: B)

fun test(t : Pair<Int, Int>) : Int {
    when (t) {
        Pair(10, 10) -> return 1
    }
    return 0 // unreachable code
}

fun test1(t : Pair<Int, Int>) : Int {
    when (t) {
        Pair(10, 10) -> return 1
        else -> return 2
    }
    return 0 // unreachable code
}

//more tests
fun t1(x: Int) = when(x) {
    else -> 1
}

fun t5(x: Int) = when (x) {
    <!USELESS_IS_CHECK!>is Int<!> -> 1
    2 -> 2
}

fun foo3(x: Int) = when(x) {
    <!ELSE_MISPLACED_IN_WHEN!>else<!> -> 1
    2 -> 2
}

fun foo4(x: Int) = when(x) {
    2 -> x
    else -> 3
}

/* GENERATED_FIR_TAGS: classDeclaration, equalityExpression, functionDeclaration, integerLiteral, isExpression,
nullableType, primaryConstructor, smartcast, typeParameter, whenExpression, whenWithSubject */
