// FILE: a.kt

// CHECK:
//   Mangled name: C
//   Public signature: /C|null[0]
class C {
  // CHECK:
  //   Mangled name: C#<init>(){}
  //   Public signature: /C.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK:
  //   Mangled name: C#main(){}
  //   Public signature: /C.main|-4284757841571462650[0]
  //   Public signature debug description: main(){}
  fun main(): Unit

  // CHECK JVM_IR:
  //   Mangled name: C#main(0:0){0§<kotlin.Any?>}0:0
  //   Public signature: /C.main|2157137022584307775[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}0:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: C#main(0:0){0§<kotlin.Any?>}
  //   Public signature: /C.main|-6008025846492417520[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}
  fun <T : Any?> main(t: T): T

}

// CHECK:
//   Mangled name: O
//   Public signature: /O|null[0]
object O {
  // CHECK:
  //   Mangled name: O#<init>(){}
  //   Public signature: /O.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  private constructor() /* primary */

  // CHECK:
  //   Mangled name: O#main(){}
  //   Public signature: /O.main|-4284757841571462650[0]
  //   Public signature debug description: main(){}
  fun main(): Unit

  // CHECK JVM_IR:
  //   Mangled name: O#main(0:0){0§<kotlin.Any?>}0:0
  //   Public signature: /O.main|2157137022584307775[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}0:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: O#main(0:0){0§<kotlin.Any?>}
  //   Public signature: /O.main|-6008025846492417520[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}
  fun <T : Any?> main(t: T): T

}

// CHECK JVM_IR:
//   Mangled name: #main(){}
//   Mangled name for the signature by IR:       main(){}
//   Mangled name for the signature by Frontend: main(){}%a.kt
//   Public signature by IR: /main|-4284757841571462650[0]
//   Public signature by IR debug description: main(){}
//   Public signature by Frontend: /main|2314384220441172254[0]
//   Public signature by Frontend debug description: main(){}%a.kt
// CHECK JS_IR NATIVE:
//   Mangled name: #main(){}
//   Public signature: /main|-4284757841571462650[0]
//   Public signature debug description: main(){}
fun main(): Unit

// CHECK JVM_IR:
//   Mangled name: #main(0:0){0§<kotlin.Any?>}0:0
//   Public signature: /main|2157137022584307775[0]
//   Public signature debug description: main(0:0){0§<kotlin.Any?>}0:0
// CHECK JS_IR NATIVE:
//   Mangled name: #main(0:0){0§<kotlin.Any?>}
//   Public signature: /main|-6008025846492417520[0]
//   Public signature debug description: main(0:0){0§<kotlin.Any?>}
fun <T : Any?> main(t: T): T

// FILE: b.kt
package foo

// CHECK:
//   Mangled name: foo.C
//   Public signature: foo/C|null[0]
class C {
  // CHECK:
  //   Mangled name: foo.C#<init>(){}
  //   Public signature: foo/C.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK:
  //   Mangled name: foo.C#main(){}
  //   Public signature: foo/C.main|-4284757841571462650[0]
  //   Public signature debug description: main(){}
  fun main(): Unit

  // CHECK JVM_IR:
  //   Mangled name: foo.C#main(0:0){0§<kotlin.Any?>}0:0
  //   Public signature: foo/C.main|2157137022584307775[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}0:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: foo.C#main(0:0){0§<kotlin.Any?>}
  //   Public signature: foo/C.main|-6008025846492417520[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}
  fun <T : Any?> main(t: T): T

}

// CHECK:
//   Mangled name: foo.O
//   Public signature: foo/O|null[0]
object O {
  // CHECK:
  //   Mangled name: foo.O#<init>(){}
  //   Public signature: foo/O.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  private constructor() /* primary */

  // CHECK:
  //   Mangled name: foo.O#main(){}
  //   Public signature: foo/O.main|-4284757841571462650[0]
  //   Public signature debug description: main(){}
  fun main(): Unit

  // CHECK JVM_IR:
  //   Mangled name: foo.O#main(0:0){0§<kotlin.Any?>}0:0
  //   Public signature: foo/O.main|2157137022584307775[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}0:0
  // CHECK JS_IR NATIVE:
  //   Mangled name: foo.O#main(0:0){0§<kotlin.Any?>}
  //   Public signature: foo/O.main|-6008025846492417520[0]
  //   Public signature debug description: main(0:0){0§<kotlin.Any?>}
  fun <T : Any?> main(t: T): T

}

// CHECK JVM_IR:
//   Mangled name: foo#main(){}
//   Mangled name for the signature by IR:       main(){}
//   Mangled name for the signature by Frontend: main(){}%b.kt
//   Public signature by IR: foo/main|-4284757841571462650[0]
//   Public signature by IR debug description: main(){}
//   Public signature by Frontend: foo/main|8375568780578146760[0]
//   Public signature by Frontend debug description: main(){}%b.kt
// CHECK JS_IR NATIVE:
//   Mangled name: foo#main(){}
//   Public signature: foo/main|-4284757841571462650[0]
//   Public signature debug description: main(){}
fun main(): Unit

// CHECK JVM_IR:
//   Mangled name: foo#main(0:0){0§<kotlin.Any?>}0:0
//   Public signature: foo/main|2157137022584307775[0]
//   Public signature debug description: main(0:0){0§<kotlin.Any?>}0:0
// CHECK JS_IR NATIVE:
//   Mangled name: foo#main(0:0){0§<kotlin.Any?>}
//   Public signature: foo/main|-6008025846492417520[0]
//   Public signature debug description: main(0:0){0§<kotlin.Any?>}
fun <T : Any?> main(t: T): T

