interface A<out T : Any?> {

}

interface Foo {

}

open class B : Foo, A<B> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

open class C : Foo, A<C> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

fun <T : Any?> run(fn: Function0<T>): T {
  return fn.invoke()
}

fun foo(): Any {
  return run<Foo>(fn = local fun <anonymous>(): Foo {
    val mm: B = B()
    val nn: C = C()
    val c: Foo = when {
      true -> mm
      else -> nn
    }
    return c
  }
)
}
