/*
 * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
 * that can be found in the LICENSE file.
 */
// WITH_STDLIB

import kotlin.test.*

interface A {
    fun foo(): String
}

abstract class C: A

open class B: C() {
    override fun foo(): String {
        return "OK"
    }
}

fun bar(c: C) = c.foo()

fun box(): String {
    val b = B()
    val c: C = b
    val barb = bar(b)
    if (barb != "OK") return "FAIL b: $barb"

    val barc = bar(c)
    if (barc != "OK") return "FAIL c: $barc"

    return "OK"
}