package foo

// CHECK:
//   Mangled name: foo{}array
//   Public signature: foo/array|6187513897999240281[0]
//   Public signature debug description: {}array
val array: Array<Int>
  // CHECK JVM_IR:
  //   Mangled name: foo#<get-array>(){}kotlin.Array<kotlin.Int>
  //   Public signature: foo/array.<get-array>|7467926770652597701[0]
  //   Public signature debug description: <get-array>(){}kotlin.Array<kotlin.Int>
  // CHECK JS_IR NATIVE:
  //   Mangled name: foo#<get-array>(){}
  //   Public signature: foo/array.<get-array>|-7741494344808015919[0]
  //   Public signature debug description: <get-array>(){}
  get

// CHECK:
//   Mangled name: foo.A
//   Public signature: foo/A|null[0]
class A {
  // CHECK:
  //   Mangled name: foo.A{}prop
  //   Public signature: foo/A.prop|3598315380056892812[0]
  //   Public signature debug description: {}prop
  var prop: Int
    // CHECK JVM_IR:
    //   Mangled name: foo.A#<get-prop>(){}kotlin.Int
    //   Public signature: foo/A.prop.<get-prop>|-2094203252476742575[0]
    //   Public signature debug description: <get-prop>(){}kotlin.Int
    // CHECK JS_IR NATIVE:
    //   Mangled name: foo.A#<get-prop>(){}
    //   Public signature: foo/A.prop.<get-prop>|-5734736374948136327[0]
    //   Public signature debug description: <get-prop>(){}
    get
    // CHECK:
    //   Mangled name: foo.A#<set-prop>(kotlin.Int){}
    //   Public signature: foo/A.prop.<set-prop>|3724820243841906450[0]
    //   Public signature debug description: <set-prop>(kotlin.Int){}
    set

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

}

// CHECK:
//   Mangled name: foo.B
//   Public signature: foo/B|null[0]
object B {
  // CHECK:
  //   Mangled name: foo.B{}prop
  //   Public signature: foo/B.prop|3598315380056892812[0]
  //   Public signature debug description: {}prop
  var prop: Int
    // CHECK JVM_IR:
    //   Mangled name: foo.B#<get-prop>(){}kotlin.Int
    //   Public signature: foo/B.prop.<get-prop>|-2094203252476742575[0]
    //   Public signature debug description: <get-prop>(){}kotlin.Int
    // CHECK JS_IR NATIVE:
    //   Mangled name: foo.B#<get-prop>(){}
    //   Public signature: foo/B.prop.<get-prop>|-5734736374948136327[0]
    //   Public signature debug description: <get-prop>(){}
    get
    // CHECK:
    //   Mangled name: foo.B#<set-prop>(kotlin.Int){}
    //   Public signature: foo/B.prop.<set-prop>|3724820243841906450[0]
    //   Public signature debug description: <set-prop>(kotlin.Int){}
    set

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

}

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

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