// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -sil-print-debuginfo -enable-sil-verify-all %s -basic-callee-printer -o /dev/null | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-NOWMO %s
// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -sil-print-debuginfo -enable-sil-verify-all %s -wmo -basic-callee-printer -o /dev/null | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-WMO %s

sil_stage canonical

sil private @private_bottom : $@convention(thin) () -> () {
bb0:
  %0 = tuple ()
  return %0 : $()
}

// CHECK: Function call site:
// CHECK:   // function_ref private_bottom
// CHECK:   %0 = function_ref @private_bottom : $@convention(thin) () -> (){{.*}} // user: %1
// CHECK:   %1 = apply %0() : $@convention(thin) () -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_bottom
sil private @private_middle : $@convention(thin) () -> () {
bb0:
  %0 = function_ref @private_bottom : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   // function_ref private_middle
// CHECK:   %0 = function_ref @private_middle : $@convention(thin) () -> (){{.*}} // user: %1
// CHECK:   %1 = apply %0() : $@convention(thin) () -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_middle
sil private @private_top : $@convention(thin) () -> () {
bb0:
  %0 = function_ref @private_middle : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}


sil hidden @internal_bottom : $@convention(thin) () -> () {
bb0:
  %0 = tuple ()
  return %0 : $()
}


// CHECK: Function call site:
// CHECK:   // function_ref internal_bottom
// CHECK:   %0 = function_ref @internal_bottom : $@convention(thin) () -> (){{.*}} // user: %1
// CHECK:   %1 = apply %0() : $@convention(thin) () -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: internal_bottom
sil hidden @internal_middle : $@convention(thin) () -> () {
bb0:
  %0 = function_ref @internal_bottom : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   // function_ref internal_middle
// CHECK:   %0 = function_ref @internal_middle : $@convention(thin) () -> (){{.*}} // user: %1
// CHECK:   %1 = apply %0() : $@convention(thin) () -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: internal_middle
sil hidden @internal_top : $@convention(thin) () -> () {
bb0:
  %0 = function_ref @internal_middle : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}


sil @public_bottom : $@convention(thin) () -> () {
bb0:
  %0 = tuple ()
  return %0 : $()
}


// CHECK: Function call site:
// CHECK:   // function_ref public_bottom
// CHECK:   %0 = function_ref @public_bottom : $@convention(thin) () -> (){{.*}} // user: %1
// CHECK:   %1 = apply %0() : $@convention(thin) () -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: public_bottom
sil @public_middle : $@convention(thin) () -> () {
bb0:
  %0 = function_ref @public_bottom : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   // function_ref public_middle
// CHECK:   %0 = function_ref @public_middle : $@convention(thin) () -> (){{.*}} // user: %1
// CHECK:   %1 = apply %0() : $@convention(thin) () -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: public_middle
sil @public_top : $@convention(thin) () -> () {
bb0:
  %0 = function_ref @public_middle : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}


private class private_base {
  func foo()
}

private class private_derived : private_base {
  override func foo()
}

@inline(never) private func call_private(b: private_base)

class internal_base {
  func foo()
  private func bar()
}

class internal_derived : internal_base {
  override func foo()
  override func bar()
}

@inline(never) func call_internal(b: internal_base)

open class public_base {
  func foo()
  open func bar()
  private func baz()
}

open class public_derived : public_base {
  override func foo()
  open override func bar()
  open override func baz()
}


sil private @private_base_foo : $@convention(method) (@guaranteed private_base) -> () {
bb0(%0 : $private_base):
  debug_value %0 : $private_base
  %2 = tuple ()
  return %2 : $()
}


sil private @private_derived_foo : $@convention(method) (@guaranteed private_derived) -> () {
bb0(%0 : $private_derived):
  debug_value %0 : $private_derived
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   %2 = class_method %0 : $private_base, #private_base.foo!1 : (private_base) -> () -> (), $@convention(method) (@guaranteed private_base) -> (),{{.*}} // user: %3
// CHECK:   %3 = apply %2(%0) : $@convention(method) (@guaranteed private_base) -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_base_foo
// CHECK: private_derived_foo
sil private [noinline] @call_private : $@convention(thin) (@owned private_base) -> () {
bb0(%0 : $private_base):
  debug_value %0 : $private_base
  %2 = class_method %0 : $private_base, #private_base.foo!1 : (private_base) -> () -> (), $@convention(method) (@guaranteed private_base) -> ()
  %3 = apply %2(%0) : $@convention(method) (@guaranteed private_base) -> ()
  strong_release %0 : $private_base
  %5 = tuple ()
  return %5 : $()
}


sil hidden @internal_base_foo : $@convention(method) (@guaranteed internal_base) -> () {
bb0(%0 : $internal_base):
  debug_value %0 : $internal_base
  %2 = tuple ()
  return %2 : $()
}


sil private @internal_base_bar : $@convention(method) (@guaranteed internal_base) -> () {
bb0(%0 : $internal_base):
  debug_value %0 : $internal_base
  %2 = tuple ()
  return %2 : $()
}


sil hidden @internal_derived_foo : $@convention(method) (@guaranteed internal_derived) -> () {
bb0(%0 : $internal_derived):
  debug_value %0 : $internal_derived
  %2 = tuple ()
  return %2 : $()
}


sil hidden @internal_derived_bar : $@convention(method) (@guaranteed internal_derived) -> () {
bb0(%0 : $internal_derived):
  debug_value %0 : $internal_derived
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   %4 = class_method %0 : $internal_base, #internal_base.bar!1 : (internal_base) -> () -> (), $@convention(method) (@guaranteed internal_base) -> (){{.*}} // user: %5
// CHECK:   %5 = apply %4(%0) : $@convention(method) (@guaranteed internal_base) -> ()
// CHECK-NOWMO: Incomplete callee list? : Yes
// CHECK-WMO: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: internal_base_bar
// CHECK: internal_derived_bar
sil hidden [noinline] @call_internal : $@convention(thin) (@owned internal_base) -> () {
bb0(%0 : $internal_base):
  debug_value %0 : $internal_base
  %2 = class_method %0 : $internal_base, #internal_base.foo!1 : (internal_base) -> () -> (), $@convention(method) (@guaranteed internal_base) -> ()
  %3 = apply %2(%0) : $@convention(method) (@guaranteed internal_base) -> ()
  %4 = class_method %0 : $internal_base, #internal_base.bar!1 : (internal_base) -> () -> (), $@convention(method) (@guaranteed internal_base) -> ()
  %5 = apply %4(%0) : $@convention(method) (@guaranteed internal_base) -> ()
  strong_release %0 : $internal_base
  %7 = tuple ()
  return %7 : $()
}


sil hidden @public_base_foo : $@convention(method) (@guaranteed public_base) -> () {
bb0(%0 : $public_base):
  debug_value %0 : $public_base
  %2 = tuple ()
  return %2 : $()
}


sil @public_base_bar : $@convention(method) (@guaranteed public_base) -> () {
bb0(%0 : $public_base):
  debug_value %0 : $public_base
  %2 = tuple ()
  return %2 : $()
}


sil private @public_base_baz : $@convention(method) (@guaranteed public_base) -> () {
bb0(%0 : $public_base):
  debug_value %0 : $public_base
  %2 = tuple ()
  return %2 : $()
}


sil hidden @public_derived_foo : $@convention(method) (@guaranteed public_derived) -> () {
bb0(%0 : $public_derived):
  debug_value %0 : $public_derived
  %2 = tuple ()
  return %2 : $()
}


sil @public_derived_bar : $@convention(method) (@guaranteed public_derived) -> () {
bb0(%0 : $public_derived):
  debug_value %0 : $public_derived
  %2 = tuple ()
  return %2 : $()
}


sil @public_derived_baz : $@convention(method) (@guaranteed public_derived) -> () {
bb0(%0 : $public_derived):
  debug_value %0 : $public_derived
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   %2 = class_method %0 : $public_base, #public_base.foo!1 : (public_base) -> () -> (), $@convention(method) (@guaranteed public_base) -> (){{.*}} // user: %3
// CHECK:   %3 = apply %2(%0) : $@convention(method) (@guaranteed public_base) -> ()
// CHECK-NOWMO: Incomplete callee list? : Yes
// CHECK-WMO: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: public_base_foo
// CHECK: public_derived_foo
//
// CHECK: Function call site:
// CHECK:   %4 = class_method %0 : $public_base, #public_base.bar!1 : (public_base) -> () -> (), $@convention(method) (@guaranteed public_base) -> (){{.*}} // user: %5
// CHECK:   %5 = apply %4(%0) : $@convention(method) (@guaranteed public_base) -> ()
// CHECK: Incomplete callee list? : Yes
// CHECK: Known callees:
// CHECK: public_base_bar
// CHECK: public_derived_bar
//
// CHECK: Function call site:
// CHECK:   %6 = class_method %0 : $public_base, #public_base.baz!1 : (public_base) -> () -> (), $@convention(method) (@guaranteed public_base) -> (){{.*}} // user: %7
// CHECK:   %7 = apply %6(%0) : $@convention(method) (@guaranteed public_base) -> ()
// CHECK: Incomplete callee list? : Yes
// CHECK: Known callees:
// CHECK: public_base_baz
// CHECK: public_derived_baz
sil hidden [noinline] @call_public : $@convention(thin) (@owned public_base) -> () {
bb0(%0 : $public_base):
  debug_value %0 : $public_base
  %2 = class_method %0 : $public_base, #public_base.foo!1 : (public_base) -> () -> (), $@convention(method) (@guaranteed public_base) -> ()
  %3 = apply %2(%0) : $@convention(method) (@guaranteed public_base) -> ()
  %4 = class_method %0 : $public_base, #public_base.bar!1 : (public_base) -> () -> (), $@convention(method) (@guaranteed public_base) -> ()
  %5 = apply %4(%0) : $@convention(method) (@guaranteed public_base) -> ()
  %6 = class_method %0 : $public_base, #public_base.baz!1 : (public_base) -> () -> (), $@convention(method) (@guaranteed public_base) -> ()
  %7 = apply %6(%0) : $@convention(method) (@guaranteed public_base) -> ()
  strong_release %0 : $public_base
  %9 = tuple ()
  return %9 : $()
}

sil_vtable private_base {
  #private_base.foo!1: @private_base_foo
}

sil_vtable private_derived {
  #private_base.foo!1: @private_derived_foo
}

sil_vtable internal_base {
  #internal_base.foo!1: @internal_base_foo
  #internal_base.bar!1: @internal_base_bar
}

sil_vtable internal_derived {
  #internal_base.foo!1: @internal_derived_foo
  #internal_base.bar!1: @internal_derived_bar
}

sil_vtable public_base {
  #public_base.foo!1: @public_base_foo
  #public_base.bar!1: @public_base_bar
  #public_base.baz!1: @public_base_baz
}

sil_vtable public_derived {
  #public_base.foo!1: @public_derived_foo
  #public_base.bar!1: @public_derived_bar
  #public_base.baz!1: @public_derived_baz
}

private protocol private_proto_1 {
  func theMethod()
}

private class private_proto_private_class : private_proto_1 {
  func theMethod()
}

private func call_through_private_proto_1<T : private_proto_1>(x: T)

private protocol private_proto_2 {
  func theMethod()
}

class private_proto_internal_class : private_proto_2 {
  func theMethod()
}

private func call_through_private_proto_2<T : private_proto_2>(x: T)

private protocol private_proto_3 {
  func theMethod()
}

open class private_proto_public_class : private_proto_3 {
  open func theMethod()
}

private func call_through_private_proto_3<T : private_proto_3>(x: T)

private protocol private_proto_4 {
  func theMethod()
}

open class private_proto_public_class_private_method : private_proto_4 {
  fileprivate func theMethod()
}

private func call_through_private_proto_4<T : private_proto_4>(x: T)

sil private @private_proto_private_class_theMethod : $@convention(method) (@guaranteed private_proto_private_class) -> () {
bb0(%0 : $private_proto_private_class):
  debug_value %0 : $private_proto_private_class
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   %3 = class_method %1 : $private_proto_private_class, #private_proto_private_class.theMethod!1 : (private_proto_private_class) -> () -> (), $@convention(method) (@guaranteed private_proto_private_class) -> (){{.*}} // user: %4
// CHECK:   %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_private_class) -> (){{.*}} // user: %6
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_proto_private_class_theMethod
sil private [transparent] [thunk] @private_proto_1_private_class_witness : $@convention(witness_method: private_proto_1) (@in_guaranteed private_proto_private_class) -> () {
bb0(%0 : $*private_proto_private_class):
  %1 = load %0 : $*private_proto_private_class
  strong_retain %1 : $private_proto_private_class
  %3 = class_method %1 : $private_proto_private_class, #private_proto_private_class.theMethod!1 : (private_proto_private_class) -> () -> (), $@convention(method) (@guaranteed private_proto_private_class) -> ()
  %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_private_class) -> ()
  strong_release %1 : $private_proto_private_class
  return %4 : $()
}


// CHECK: Function call site:
// CHECK:   %2 = witness_method $T, #private_proto_1.theMethod!1 : {{.*}} : $@convention(witness_method: private_proto_1) <τ_0_0 where τ_0_0 : private_proto_1> (@in_guaranteed τ_0_0) -> (){{.*}} // user: %3
// CHECK:   %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_1) <τ_0_0 where τ_0_0 : private_proto_1> (@in_guaranteed τ_0_0) -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_proto_1_private_class_witness
sil private @call_through_private_proto_1 : $@convention(thin) <T where T : private_proto_1> (@in T) -> () {
bb0(%0 : $*T):
  debug_value_addr %0 : $*T
  %2 = witness_method $T, #private_proto_1.theMethod!1 : $@convention(witness_method: private_proto_1) <τ_0_0 where τ_0_0 : private_proto_1> (@in_guaranteed τ_0_0) -> ()
  %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_1) <τ_0_0 where τ_0_0 : private_proto_1> (@in_guaranteed τ_0_0) -> ()
  destroy_addr %0 : $*T
  %5 = tuple ()
  return %5 : $()
}


sil hidden @private_proto_internal_class_theMethod : $@convention(method) (@guaranteed private_proto_internal_class) -> () {
bb0(%0 : $private_proto_internal_class):
  debug_value %0 : $private_proto_internal_class
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   %3 = class_method %1 : $private_proto_internal_class, #private_proto_internal_class.theMethod!1 : (private_proto_internal_class) -> () -> (), $@convention(method) (@guaranteed private_proto_internal_class) -> (){{.*}} // user: %4
// CHECK:   %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_internal_class) -> (){{.*}} // user: %6
// CHECK-NOWMO: Incomplete callee list? : Yes
// CHECK-WMO: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_proto_internal_class_theMethod
sil private [transparent] [thunk] @private_proto_2_internal_class_witness : $@convention(witness_method: private_proto_2) (@in_guaranteed private_proto_internal_class) -> () {
bb0(%0 : $*private_proto_internal_class):
  %1 = load %0 : $*private_proto_internal_class
  strong_retain %1 : $private_proto_internal_class
  %3 = class_method %1 : $private_proto_internal_class, #private_proto_internal_class.theMethod!1 : (private_proto_internal_class) -> () -> (), $@convention(method) (@guaranteed private_proto_internal_class) -> ()
  %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_internal_class) -> ()
  strong_release %1 : $private_proto_internal_class
  return %4 : $()
}


// CHECK: Function call site:
// CHECK:   %2 = witness_method $T, #private_proto_2.theMethod!1 : {{.*}} : $@convention(witness_method: private_proto_2) <τ_0_0 where τ_0_0 : private_proto_2> (@in_guaranteed τ_0_0) -> (){{.*}} // user: %3
// CHECK:   %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_2) <τ_0_0 where τ_0_0 : private_proto_2> (@in_guaranteed τ_0_0) -> ()
// CHECK-WMO: Incomplete callee list? : No
// CHECK-NOWMO: Incomplete callee list? : Yes
// CHECK: Known callees:
// CHECK: private_proto_2_internal_class_witness
sil private @call_through_private_proto_2 : $@convention(thin) <T where T : private_proto_2> (@in T) -> () {
bb0(%0 : $*T):
  debug_value_addr %0 : $*T
  %2 = witness_method $T, #private_proto_2.theMethod!1 : $@convention(witness_method: private_proto_2) <τ_0_0 where τ_0_0 : private_proto_2> (@in_guaranteed τ_0_0) -> ()
  %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_2) <τ_0_0 where τ_0_0 : private_proto_2> (@in_guaranteed τ_0_0) -> ()
  destroy_addr %0 : $*T
  %5 = tuple ()
  return %5 : $()
}


sil @private_proto_public_class_theMethod : $@convention(method) (@guaranteed private_proto_public_class) -> () {
bb0(%0 : $private_proto_public_class):
  debug_value %0 : $private_proto_public_class
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   %3 = class_method %1 : $private_proto_public_class, #private_proto_public_class.theMethod!1 : (private_proto_public_class) -> () -> (), $@convention(method) (@guaranteed private_proto_public_class) -> (){{.*}} // user: %4
// CHECK:   %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_public_class) -> (){{.*}} // user: %6
// CHECK: Incomplete callee list? : Yes
// CHECK: Known callees:
// CHECK: private_proto_public_class_theMethod
sil private [transparent] [thunk] @private_proto_3_public_class_witness : $@convention(witness_method: private_proto_3) (@in_guaranteed private_proto_public_class) -> () {
bb0(%0 : $*private_proto_public_class):
  %1 = load %0 : $*private_proto_public_class
  strong_retain %1 : $private_proto_public_class
  %3 = class_method %1 : $private_proto_public_class, #private_proto_public_class.theMethod!1 : (private_proto_public_class) -> () -> (), $@convention(method) (@guaranteed private_proto_public_class) -> ()
  %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_public_class) -> ()
  strong_release %1 : $private_proto_public_class
  return %4 : $()
}


// CHECK: Function call site:
// CHECK:   %2 = witness_method $T, #private_proto_3.theMethod!1 : {{.*}} : $@convention(witness_method: private_proto_3) <τ_0_0 where τ_0_0 : private_proto_3> (@in_guaranteed τ_0_0) -> (){{.*}} // user: %3
// CHECK:   %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_3) <τ_0_0 where τ_0_0 : private_proto_3> (@in_guaranteed τ_0_0) -> ()
// CHECK: Incomplete callee list? : Yes
// CHECK: Known callees:
// CHECK: private_proto_3_public_class_witness
sil private @call_through_private_proto_3 : $@convention(thin) <T where T : private_proto_3> (@in T) -> () {
bb0(%0 : $*T):
  debug_value_addr %0 : $*T
  %2 = witness_method $T, #private_proto_3.theMethod!1 : $@convention(witness_method: private_proto_3) <τ_0_0 where τ_0_0 : private_proto_3> (@in_guaranteed τ_0_0) -> ()
  %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_3) <τ_0_0 where τ_0_0 : private_proto_3> (@in_guaranteed τ_0_0) -> ()
  destroy_addr %0 : $*T
  %5 = tuple ()
  return %5 : $()
}


sil private @private_proto_public_class_private_method_theMethod : $@convention(method) (@guaranteed private_proto_public_class_private_method) -> () {
bb0(%0 : $private_proto_public_class_private_method):
  debug_value %0 : $private_proto_public_class_private_method
  %2 = tuple ()
  return %2 : $()
}


// CHECK: Function call site:
// CHECK:   %3 = class_method %1 : $private_proto_public_class_private_method, #private_proto_public_class_private_method.theMethod!1 : (private_proto_public_class_private_method) -> () -> (), $@convention(method) (@guaranteed private_proto_public_class_private_method) -> (){{.*}} // user: %4
// CHECK:   %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_public_class_private_method) -> (){{.*}} // user: %6
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_proto_public_class_private_method_theMethod
sil private [transparent] [thunk] @private_proto_4_public_class_private_method_witness : $@convention(witness_method: private_proto_4) (@in_guaranteed private_proto_public_class_private_method) -> () {
bb0(%0 : $*private_proto_public_class_private_method):
  %1 = load %0 : $*private_proto_public_class_private_method
  strong_retain %1 : $private_proto_public_class_private_method
  %3 = class_method %1 : $private_proto_public_class_private_method, #private_proto_public_class_private_method.theMethod!1 : (private_proto_public_class_private_method) -> () -> (), $@convention(method) (@guaranteed private_proto_public_class_private_method) -> ()
  %4 = apply %3(%1) : $@convention(method) (@guaranteed private_proto_public_class_private_method) -> ()
  strong_release %1 : $private_proto_public_class_private_method
  return %4 : $()
}


// CHECK: Function call site:
// CHECK:   %2 = witness_method $T, #private_proto_4.theMethod!1 : {{.*}} : $@convention(witness_method: private_proto_4) <τ_0_0 where τ_0_0 : private_proto_4> (@in_guaranteed τ_0_0) -> (){{.*}} // user: %3
// CHECK:   %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_4) <τ_0_0 where τ_0_0 : private_proto_4> (@in_guaranteed τ_0_0) -> ()
// CHECK: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: private_proto_4_public_class_private_method_witness
sil private @call_through_private_proto_4 : $@convention(thin) <T where T : private_proto_4> (@in T) -> () {
bb0(%0 : $*T):
  debug_value_addr %0 : $*T
  %2 = witness_method $T, #private_proto_4.theMethod!1 : $@convention(witness_method: private_proto_4) <τ_0_0 where τ_0_0 : private_proto_4> (@in_guaranteed τ_0_0) -> ()
  %3 = apply %2<T>(%0) : $@convention(witness_method: private_proto_4) <τ_0_0 where τ_0_0 : private_proto_4> (@in_guaranteed τ_0_0) -> ()
  destroy_addr %0 : $*T
  %5 = tuple ()
  return %5 : $()
}


sil_vtable private_proto_private_class {
  #private_proto_private_class.theMethod!1: @private_proto_private_class_theMethod
}

sil_vtable private_proto_internal_class {
  #private_proto_internal_class.theMethod!1: @private_proto_internal_class_theMethod
}

sil_vtable private_proto_public_class {
  #private_proto_public_class.theMethod!1: @private_proto_public_class_theMethod
}

sil_vtable private_proto_public_class_private_method {
  #private_proto_public_class_private_method.theMethod!1: @private_proto_public_class_private_method_theMethod
}

sil_witness_table private private_proto_private_class: private_proto_1 module witness {
  method #private_proto_1.theMethod!1: @private_proto_1_private_class_witness
}

sil_witness_table private private_proto_internal_class: private_proto_2 module witness {
  method #private_proto_2.theMethod!1: @private_proto_2_internal_class_witness
}

sil_witness_table private private_proto_public_class: private_proto_3 module witness {
  method #private_proto_3.theMethod!1: @private_proto_3_public_class_witness
}

sil_witness_table private private_proto_public_class_private_method: private_proto_4 module witness {
  method #private_proto_4.theMethod!1: @private_proto_4_public_class_private_method_witness
}

// Test initializer vs allocator

struct InitVal { }

class SomeItem {
  required init(ivalreq: InitVal)
  convenience init(ival: InitVal)
  deinit
}

class SomeChildItem : SomeItem {
  deinit
  required init(ivalreq: InitVal)
}

sil @test_call_of_allocator_and_initializer : $@convention(thin) (@thick SomeItem.Type, InitVal) -> @owned SomeItem {
bb0(%0 : $@thick SomeItem.Type, %1: $InitVal):

// CHECK: Function call site:
// CHECK:   %2 = class_method %0 : $@thick SomeItem.Type, #SomeItem.init!allocator.1 : (SomeItem.Type) -> (InitVal) -> SomeItem, $@convention(method) (InitVal, @thick SomeItem.Type) -> @owned SomeItem
// CHECK:   %3 = apply %2(%1, %0) : $@convention(method) (InitVal, @thick SomeItem.Type) -> @owned SomeItem
// CHECK-NOWMO: Incomplete callee list? : Yes
// CHECK-WMO: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: SomeChildItem_allocator
// CHECK: SomeItem_allocator

  %2 = class_method %0 : $@thick SomeItem.Type, #SomeItem.init!allocator.1 : (SomeItem.Type) -> (InitVal) -> SomeItem, $@convention(method) (InitVal, @thick SomeItem.Type) -> @owned SomeItem
  %3 = apply %2(%1, %0) : $@convention(method) (InitVal, @thick SomeItem.Type) -> @owned SomeItem

// CHECK: Function call site:
// CHECK:   %4 = class_method %3 : $SomeItem, #SomeItem.init!initializer.1 : (SomeItem.Type) -> (InitVal) -> SomeItem, $@convention(method) (InitVal, @owned SomeItem) -> @owned SomeItem
// CHECK:   %5 = apply %4(%1, %3) : $@convention(method) (InitVal, @owned SomeItem) -> @owned SomeItem
// CHECK-NOWMO: Incomplete callee list? : Yes
// CHECK-WMO: Incomplete callee list? : No
// CHECK: Known callees:
// CHECK: SomeChildItem_initializer
// CHECK: SomeItem_initializer

  %4 = class_method %3 : $SomeItem, #SomeItem.init!initializer.1 : (SomeItem.Type) -> (InitVal) -> SomeItem, $@convention(method) (InitVal, @owned SomeItem) -> @owned SomeItem
  %5 = apply %4(%1, %3) : $@convention(method) (InitVal, @owned SomeItem) -> @owned SomeItem
  return %5 : $SomeItem
}

sil @SomeItem_allocator : $@convention(method) (InitVal, @thick SomeItem.Type) -> @owned SomeItem

sil @SomeItem_initializer : $@convention(method) (InitVal, @owned SomeItem) -> @owned SomeItem

sil @SomeItem_destructor : $@convention(method) (@owned SomeItem) -> ()

sil @SomeChildItem_allocator : $@convention(method) (InitVal, @thick SomeChildItem.Type) -> @owned SomeChildItem

sil @SomeChildItem_initializer : $@convention(method) (InitVal, @owned SomeChildItem) -> @owned SomeChildItem

sil @SomeChildItem_destructor : $@convention(method) (@owned SomeChildItem) -> ()

sil_vtable SomeItem {
  #SomeItem.init!allocator.1: @SomeItem_allocator
  #SomeItem.init!initializer.1: @SomeItem_initializer
  #SomeItem.deinit!deallocator: @SomeItem_destructor
}

sil_vtable SomeChildItem {
  #SomeItem.init!allocator.1: @SomeChildItem_allocator
  #SomeItem.init!initializer.1: @SomeChildItem_initializer
  #SomeChildItem.deinit!deallocator: @SomeChildItem_destructor
}

public protocol PublicProtocol {
  func foo()
}

struct SingleConformance : PublicProtocol {
  func foo()
}

public func testit(p: PublicProtocol)

sil private [transparent] [thunk] @foo_impl : $@convention(witness_method: PublicProtocol) (@in_guaranteed SingleConformance) -> () {
bb0(%0 : $*SingleConformance):
  %4 = tuple ()
  return %4 : $()
}

// CHECK: Function call site:
// CHECK:   witness_method $@opened{{.*}} PublicProtocol
// CHECK:   apply {{.*}} PublicProtocol
// CHECK-NOWMO: Incomplete callee list? : Yes
// CHECK-WMO: Incomplete callee list? : Yes
// CHECK: Known callees:
sil @call_foo : $@convention(thin) (@in PublicProtocol) -> () {
bb0(%0 : $*PublicProtocol):
  %5 = open_existential_addr immutable_access %0 : $*PublicProtocol to $*@opened("2226A1AC-2B95-11E8-BDF4-D0817AD3F637") PublicProtocol
  %6 = witness_method $@opened("2226A1AC-2B95-11E8-BDF4-D0817AD3F637") PublicProtocol, #PublicProtocol.foo!1 : <Self where Self : PublicProtocol> (Self) -> () -> (), %5 : $*@opened("2226A1AC-2B95-11E8-BDF4-D0817AD3F637") PublicProtocol : $@convention(witness_method: PublicProtocol) <τ_0_0 where τ_0_0 : PublicProtocol> (@in_guaranteed τ_0_0) -> ()
  %7 = apply %6<@opened("2226A1AC-2B95-11E8-BDF4-D0817AD3F637") PublicProtocol>(%5) : $@convention(witness_method: PublicProtocol) <τ_0_0 where τ_0_0 : PublicProtocol> (@in_guaranteed τ_0_0) -> ()
  destroy_addr %0 : $*PublicProtocol
  %10 = tuple ()
  return %10 : $()
}

sil_witness_table hidden SingleConformance: PublicProtocol module nix {
  method #PublicProtocol.foo!1: <Self where Self : PublicProtocol> (Self) -> () -> () : @foo_impl
}

