// MODULE: m1
// FILE: genericClassInDifferentModule_m1.kt

// CHECK:
//   Mangled name: Base
//   Public signature: /Base|null[0]
abstract class Base<T : Any?> {
  // CHECK:
  //   Mangled name: Base{}x
  //   Public signature: /Base.x|-8060530855978347579[0]
  //   Public signature debug description: {}x
  val x: T
    // CHECK JVM_IR:
    //   Mangled name: Base#<get-x>(){}1:0
    //   Public signature: /Base.x.<get-x>|-8893883356128097563[0]
    //   Public signature debug description: <get-x>(){}1:0
    // CHECK JS_IR NATIVE:
    //   Mangled name: Base#<get-x>(){}
    //   Public signature: /Base.x.<get-x>|1482705010654679335[0]
    //   Public signature debug description: <get-x>(){}
    get

  // CHECK:
  //   Mangled name: Base#<init>(1:0){}
  //   Public signature: /Base.<init>|-8731461708390519279[0]
  //   Public signature debug description: <init>(1:0){}
  constructor(x: T) /* primary */

  // CHECK JVM_IR:
  //   Mangled name: Base#foo(0:0){0§<kotlin.Any?>}1:0
  //   Public signature: /Base.foo|8673945311830780726[0]
  //   Public signature debug description: foo(0:0){0§<kotlin.Any?>}1:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: Base#foo(0:0){0§<kotlin.Any?>}
  //   Public signature: /Base.foo|-6838606926256314363[0]
  //   Public signature debug description: foo(0:0){0§<kotlin.Any?>}
  abstract fun <Y : Any?> foo(y: Y): T

  // CHECK:
  //   Mangled name: Base{}bar
  //   Public signature: /Base.bar|-7864284097863469857[0]
  //   Public signature debug description: {}bar
  abstract var bar: T
    // CHECK JVM_IR:
    //   Mangled name: Base#<get-bar>(){}1:0
    //   Public signature: /Base.bar.<get-bar>|7899956589744407340[0]
    //   Public signature debug description: <get-bar>(){}1:0
    // CHECK JS_IR NATIVE:
    //   Mangled name: Base#<get-bar>(){}
    //   Public signature: /Base.bar.<get-bar>|6880642144337645699[0]
    //   Public signature debug description: <get-bar>(){}
    abstract get
    // CHECK:
    //   Mangled name: Base#<set-bar>(1:0){}
    //   Public signature: /Base.bar.<set-bar>|3083825024913650500[0]
    //   Public signature debug description: <set-bar>(1:0){}
    abstract set

  // CHECK:
  //   Mangled name: Base@0:0{0§<kotlin.Any?>}exn
  //   Public signature: /Base.exn|2371047114698435273[0]
  //   Public signature debug description: @0:0{0§<kotlin.Any?>}exn
  abstract var <Z : Any?> Z.exn: T
    // CHECK JVM_IR:
    //   Mangled name: Base#<get-exn>@0:0(){0§<kotlin.Any?>}1:0
    //   Public signature: /Base.exn.<get-exn>|6217753676739394662[0]
    //   Public signature debug description: <get-exn>@0:0(){0§<kotlin.Any?>}1:0
    // CHECK JS_IR NATIVE:
    //   Mangled name: Base#<get-exn>@0:0(){0§<kotlin.Any?>}
    //   Public signature: /Base.exn.<get-exn>|-202876889853335253[0]
    //   Public signature debug description: <get-exn>@0:0(){0§<kotlin.Any?>}
    abstract get
    // CHECK:
    //   Mangled name: Base#<set-exn>@0:0(1:0){0§<kotlin.Any?>}
    //   Public signature: /Base.exn.<set-exn>|5747714515092438414[0]
    //   Public signature debug description: <set-exn>@0:0(1:0){0§<kotlin.Any?>}
    abstract set

}

// MODULE: m2
// FILE: genericClassInDifferentModule_m2.kt

// CHECK:
//   Mangled name: Derived1
//   Public signature: /Derived1|null[0]
class Derived1<T : Any?> : Base<T> {
  // CHECK:
  //   Mangled name: Derived1{}bar
  //   Public signature: /Derived1.bar|-7864284097863469857[0]
  //   Public signature debug description: {}bar
  override var bar: T
    // CHECK JVM_IR:
    //   Mangled name: Derived1#<get-bar>(){}1:0
    //   Public signature: /Derived1.bar.<get-bar>|7899956589744407340[0]
    //   Public signature debug description: <get-bar>(){}1:0
    // CHECK JS_IR NATIVE:
    //   Mangled name: Derived1#<get-bar>(){}
    //   Public signature: /Derived1.bar.<get-bar>|6880642144337645699[0]
    //   Public signature debug description: <get-bar>(){}
    override get
    // CHECK:
    //   Mangled name: Derived1#<set-bar>(1:0){}
    //   Public signature: /Derived1.bar.<set-bar>|3083825024913650500[0]
    //   Public signature debug description: <set-bar>(1:0){}
    override set

  // CHECK:
  //   Mangled name: Derived1#<init>(1:0){}
  //   Public signature: /Derived1.<init>|-8731461708390519279[0]
  //   Public signature debug description: <init>(1:0){}
  constructor(x: T) /* primary */

  // CHECK JVM_IR:
  //   Mangled name: Derived1#foo(0:0){0§<kotlin.Any?>}1:0
  //   Public signature: /Derived1.foo|8673945311830780726[0]
  //   Public signature debug description: foo(0:0){0§<kotlin.Any?>}1:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: Derived1#foo(0:0){0§<kotlin.Any?>}
  //   Public signature: /Derived1.foo|-6838606926256314363[0]
  //   Public signature debug description: foo(0:0){0§<kotlin.Any?>}
  override fun <Y : Any?> foo(y: Y): T

  // CHECK:
  //   Mangled name: Derived1{}x
  //   Public signature: /Derived1.x|-8060530855978347579[0]
  //   Public signature debug description: {}x
  /* fake */ override val x: T
    // CHECK JVM_IR:
    //   Mangled name: Derived1#<get-x>(){}1:0
    //   Public signature: /Derived1.x.<get-x>|-8893883356128097563[0]
    //   Public signature debug description: <get-x>(){}1:0
    // CHECK JS_IR NATIVE:
    //   Mangled name: Derived1#<get-x>(){}
    //   Public signature: /Derived1.x.<get-x>|1482705010654679335[0]
    //   Public signature debug description: <get-x>(){}
    /* fake */ override get(): T

  // CHECK:
  //   Mangled name: Derived1@0:0{0§<kotlin.Any?>}exn
  //   Public signature: /Derived1.exn|2371047114698435273[0]
  //   Public signature debug description: @0:0{0§<kotlin.Any?>}exn
  override var <Z : Any?> Z.exn: T
    // CHECK JVM_IR:
    //   Mangled name: Derived1#<get-exn>@0:0(){0§<kotlin.Any?>}1:0
    //   Public signature: /Derived1.exn.<get-exn>|6217753676739394662[0]
    //   Public signature debug description: <get-exn>@0:0(){0§<kotlin.Any?>}1:0
    // CHECK JS_IR NATIVE:
    //   Mangled name: Derived1#<get-exn>@0:0(){0§<kotlin.Any?>}
    //   Public signature: /Derived1.exn.<get-exn>|-202876889853335253[0]
    //   Public signature debug description: <get-exn>@0:0(){0§<kotlin.Any?>}
    override get(): T
    // CHECK:
    //   Mangled name: Derived1#<set-exn>@0:0(1:0){0§<kotlin.Any?>}
    //   Public signature: /Derived1.exn.<set-exn>|5747714515092438414[0]
    //   Public signature debug description: <set-exn>@0:0(1:0){0§<kotlin.Any?>}
    override set(value: T): Unit

}

