interface IFoo {



}

class Derived1 : JFieldOwner, IFoo {
  constructor() /* primary */ {
    super/*JFieldOwner*/()
        /* InstanceInitializerCall */

  }




}

class Derived2 : JFieldOwner, IFoo {
  constructor() /* primary */ {
    super/*JFieldOwner*/()
        /* InstanceInitializerCall */

  }




}

open class Mid : JFieldOwner {
  constructor() /* primary */ {
    super/*JFieldOwner*/()
        /* InstanceInitializerCall */

  }




}

class DerivedThroughMid1 : Mid, IFoo {
  constructor() /* primary */ {
    super/*Mid*/()
        /* InstanceInitializerCall */

  }




}

class DerivedThroughMid2 : Mid, IFoo {
  constructor() /* primary */ {
    super/*Mid*/()
        /* InstanceInitializerCall */

  }




}

fun test(b: Boolean) {
  val d1: Derived1 = Derived1()
  val d2: Derived2 = Derived2()
  val k: Any = when {
    b -> d1
    true -> d2
  }
  #f = 42
  #f /*~> Unit */
  val md1: DerivedThroughMid1 = DerivedThroughMid1()
  val md2: DerivedThroughMid2 = DerivedThroughMid2()
  val mk: Any = when {
    b -> md1
    true -> md2
  }
  #f = 44
  #f /*~> Unit */
}

