abstract class Base1<T : Derived1> {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

}

class Derived1 : Base1<Derived1> {
  constructor() /* primary */ {
    super/*Base1*/<Derived1>()
    /* <init>() */

  }

}

abstract class Base2 {
  constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  fun <T : Derived2> foo(x: T) {
  }

}

class Derived2 : Base2 {
  constructor() /* primary */ {
    super/*Base2*/()
    /* <init>() */

  }

}
