// CHECK:
//   Mangled name: C
//   Public signature: /C|null[0]
abstract class C : Java1 {
  // CHECK:
  //   Mangled name: C{}a
  //   Public signature: /C.a|-1200697420457237799[0]
  //   Public signature debug description: {}a
  override val a: Nothing
    // CHECK JVM_IR:
    //   Mangled name: C#<get-a>(){}kotlin.Nothing
    //   Public signature: /C.a.<get-a>|4319439694118955860[0]
    //   Public signature debug description: <get-a>(){}kotlin.Nothing
    override get

  // CHECK:
  //   Mangled name: C{}b
  //   Public signature: /C.b|772347207915745207[0]
  //   Public signature debug description: {}b
  override val b: List<Nothing>
    // CHECK JVM_IR:
    //   Mangled name: C#<get-b>(){}kotlin.collections.List<kotlin.Nothing>
    //   Public signature: /C.b.<get-b>|-1648356554135643667[0]
    //   Public signature debug description: <get-b>(){}kotlin.collections.List<kotlin.Nothing>
    override get

  // CHECK:
  //   Mangled name: C#<init>(kotlin.Nothing;kotlin.collections.List<kotlin.Nothing>){}
  //   Public signature: /C.<init>|6759209538468804035[0]
  //   Public signature debug description: <init>(kotlin.Nothing;kotlin.collections.List<kotlin.Nothing>){}
  constructor(a: Nothing, b: List<Nothing>) /* primary */

  // CHECK JVM_IR:
  //   Mangled name: C#bar(){}kotlin.Nothing
  //   Public signature: /C.bar|3887581129090086109[0]
  //   Public signature debug description: bar(){}kotlin.Nothing
  abstract /* fake */ override fun bar(): Nothing

  // CHECK:
  //   Mangled name: C#foo2(kotlin.Nothing?){}
  //   Public signature: /C.foo2|-6914795168032430810[0]
  //   Public signature debug description: foo2(kotlin.Nothing?){}
  abstract /* fake */ override fun foo2(a: Nothing?): Unit

  // CHECK JVM_IR:
  //   Mangled name: C#bar2(){}kotlin.Nothing?
  //   Public signature: /C.bar2|-1196997204430415158[0]
  //   Public signature debug description: bar2(){}kotlin.Nothing?
  override fun bar2(): Nothing?

  // CHECK:
  //   Mangled name: C#foo(kotlin.Nothing){}
  //   Public signature: /C.foo|7864991580836937806[0]
  //   Public signature debug description: foo(kotlin.Nothing){}
  override fun foo(a: Nothing): Unit

  // CHECK:
  //   Mangled name: C{}c
  //   Public signature: /C.c|-4416962153448040627[0]
  //   Public signature debug description: {}c
  abstract /* fake */ override val c: Nothing?
    // CHECK JVM_IR:
    //   Mangled name: C#<get-c>(){}kotlin.Nothing?
    //   Public signature: /C.c.<get-c>|1602906851023755874[0]
    //   Public signature debug description: <get-c>(){}kotlin.Nothing?
    abstract /* fake */ override get(): Nothing?

  // CHECK:
  //   Mangled name: C{}d
  //   Public signature: /C.d|5174763769109925331[0]
  //   Public signature debug description: {}d
  abstract /* fake */ override val d: List<Nothing?>
    // CHECK JVM_IR:
    //   Mangled name: C#<get-d>(){}kotlin.collections.List<kotlin.Nothing?>
    //   Public signature: /C.d.<get-d>|3359948309068993582[0]
    //   Public signature debug description: <get-d>(){}kotlin.collections.List<kotlin.Nothing?>
    abstract /* fake */ override get(): List<Nothing?>

}

// CHECK:
//   Mangled name: A
//   Public signature: /A|null[0]
interface A {
  // CHECK JVM_IR:
  //   Mangled name: A#bar(){}kotlin.Nothing
  //   Public signature: /A.bar|3887581129090086109[0]
  //   Public signature debug description: bar(){}kotlin.Nothing
  abstract fun bar(): Nothing

  // CHECK JVM_IR:
  //   Mangled name: A#bar2(){}kotlin.Nothing?
  //   Public signature: /A.bar2|-1196997204430415158[0]
  //   Public signature debug description: bar2(){}kotlin.Nothing?
  abstract fun bar2(): Nothing?

  // CHECK:
  //   Mangled name: A#foo(kotlin.Nothing){}
  //   Public signature: /A.foo|7864991580836937806[0]
  //   Public signature debug description: foo(kotlin.Nothing){}
  abstract fun foo(a: Nothing): Unit

  // CHECK:
  //   Mangled name: A#foo2(kotlin.Nothing?){}
  //   Public signature: /A.foo2|-6914795168032430810[0]
  //   Public signature debug description: foo2(kotlin.Nothing?){}
  abstract fun foo2(a: Nothing?): Unit

  // CHECK:
  //   Mangled name: A{}a
  //   Public signature: /A.a|-1200697420457237799[0]
  //   Public signature debug description: {}a
  abstract val a: Nothing
    // CHECK JVM_IR:
    //   Mangled name: A#<get-a>(){}kotlin.Nothing
    //   Public signature: /A.a.<get-a>|4319439694118955860[0]
    //   Public signature debug description: <get-a>(){}kotlin.Nothing
    abstract get

  // CHECK:
  //   Mangled name: A{}b
  //   Public signature: /A.b|772347207915745207[0]
  //   Public signature debug description: {}b
  abstract val b: List<Nothing>
    // CHECK JVM_IR:
    //   Mangled name: A#<get-b>(){}kotlin.collections.List<kotlin.Nothing>
    //   Public signature: /A.b.<get-b>|-1648356554135643667[0]
    //   Public signature debug description: <get-b>(){}kotlin.collections.List<kotlin.Nothing>
    abstract get

  // CHECK:
  //   Mangled name: A{}c
  //   Public signature: /A.c|-4416962153448040627[0]
  //   Public signature debug description: {}c
  abstract val c: Nothing?
    // CHECK JVM_IR:
    //   Mangled name: A#<get-c>(){}kotlin.Nothing?
    //   Public signature: /A.c.<get-c>|1602906851023755874[0]
    //   Public signature debug description: <get-c>(){}kotlin.Nothing?
    abstract get

  // CHECK:
  //   Mangled name: A{}d
  //   Public signature: /A.d|5174763769109925331[0]
  //   Public signature debug description: {}d
  abstract val d: List<Nothing?>
    // CHECK JVM_IR:
    //   Mangled name: A#<get-d>(){}kotlin.collections.List<kotlin.Nothing?>
    //   Public signature: /A.d.<get-d>|3359948309068993582[0]
    //   Public signature debug description: <get-d>(){}kotlin.collections.List<kotlin.Nothing?>
    abstract get

}

// CHECK:
//   Mangled name: B
//   Public signature: /B|null[0]
interface B : Java1 {
  // CHECK JVM_IR:
  //   Mangled name: B#bar(){}kotlin.Nothing
  //   Public signature: /B.bar|3887581129090086109[0]
  //   Public signature debug description: bar(){}kotlin.Nothing
  abstract /* fake */ override fun bar(): Nothing

  // CHECK JVM_IR:
  //   Mangled name: B#bar2(){}kotlin.Nothing?
  //   Public signature: /B.bar2|-1196997204430415158[0]
  //   Public signature debug description: bar2(){}kotlin.Nothing?
  abstract /* fake */ override fun bar2(): Nothing?

  // CHECK:
  //   Mangled name: B#foo(kotlin.Nothing){}
  //   Public signature: /B.foo|7864991580836937806[0]
  //   Public signature debug description: foo(kotlin.Nothing){}
  abstract /* fake */ override fun foo(a: Nothing): Unit

  // CHECK:
  //   Mangled name: B#foo2(kotlin.Nothing?){}
  //   Public signature: /B.foo2|-6914795168032430810[0]
  //   Public signature debug description: foo2(kotlin.Nothing?){}
  abstract /* fake */ override fun foo2(a: Nothing?): Unit

  // CHECK:
  //   Mangled name: B{}a
  //   Public signature: /B.a|-1200697420457237799[0]
  //   Public signature debug description: {}a
  abstract /* fake */ override val a: Nothing
    // CHECK JVM_IR:
    //   Mangled name: B#<get-a>(){}kotlin.Nothing
    //   Public signature: /B.a.<get-a>|4319439694118955860[0]
    //   Public signature debug description: <get-a>(){}kotlin.Nothing
    abstract /* fake */ override get(): Nothing

  // CHECK:
  //   Mangled name: B{}b
  //   Public signature: /B.b|772347207915745207[0]
  //   Public signature debug description: {}b
  abstract /* fake */ override val b: List<Nothing>
    // CHECK JVM_IR:
    //   Mangled name: B#<get-b>(){}kotlin.collections.List<kotlin.Nothing>
    //   Public signature: /B.b.<get-b>|-1648356554135643667[0]
    //   Public signature debug description: <get-b>(){}kotlin.collections.List<kotlin.Nothing>
    abstract /* fake */ override get(): List<Nothing>

  // CHECK:
  //   Mangled name: B{}c
  //   Public signature: /B.c|-4416962153448040627[0]
  //   Public signature debug description: {}c
  abstract /* fake */ override val c: Nothing?
    // CHECK JVM_IR:
    //   Mangled name: B#<get-c>(){}kotlin.Nothing?
    //   Public signature: /B.c.<get-c>|1602906851023755874[0]
    //   Public signature debug description: <get-c>(){}kotlin.Nothing?
    abstract /* fake */ override get(): Nothing?

  // CHECK:
  //   Mangled name: B{}d
  //   Public signature: /B.d|5174763769109925331[0]
  //   Public signature debug description: {}d
  abstract /* fake */ override val d: List<Nothing?>
    // CHECK JVM_IR:
    //   Mangled name: B#<get-d>(){}kotlin.collections.List<kotlin.Nothing?>
    //   Public signature: /B.d.<get-d>|3359948309068993582[0]
    //   Public signature debug description: <get-d>(){}kotlin.collections.List<kotlin.Nothing?>
    abstract /* fake */ override get(): List<Nothing?>

}

// CHECK:
//   Mangled name: #test(B;C){}
//   Public signature: /test|-6359441584037827810[0]
//   Public signature debug description: test(B;C){}
fun test(b: B, c: C): Unit
