// RUN: %target-swift-frontend -emit-silgen -enable-sil-ownership %s | %FileCheck %s

class C {
  init(x: Int) {}

  required init(required: Double) {}
}

class D {
  required init(required: Double) {}
}

protocol P {
  init(proto: String)
}

extension P {
  init(protoExt: Float) {
    self.init(proto: "")
  }
}

// CHECK-LABEL: sil hidden @_T018partial_apply_init06class_c1_a1_B0{{[_0-9a-zA-Z]*}}F
func class_init_partial_apply(c: C.Type) {
  // Partial applications at the static metatype use the direct (_TTd) thunk.
  // CHECK: function_ref @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fCTcTd
  let xC: (Int) -> C = C.init
  // CHECK: function_ref @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fCTcTd
  let requiredC: (Double) -> C = C.init

  // Partial applications to a dynamic metatype must be dynamically dispatched and use
  // the normal thunk.
  // CHECK: function_ref @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fC
  let requiredM: (Double) -> C = c.init
}

// CHECK-LABEL: sil shared [thunk] @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fCTcTd
// CHECK:         function_ref @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fC
// CHECK-LABEL: sil shared [thunk] @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fCTcTd
// CHECK:         function_ref @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fC
// CHECK-LABEL: sil shared [thunk] @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fC
// CHECK:         class_method %0 : $@thick C.Type, #C.init!allocator.1

// CHECK-LABEL: sil hidden @_T018partial_apply_init010archetype_c1_a1_B0{{[_0-9a-zA-Z]*}}F
func archetype_init_partial_apply<T: C where T: P>(t: T.Type) {
  // Archetype initializations are always dynamic, whether applied to the type or a metatype.
  // CHECK: function_ref @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fC
  let requiredT: (Double) -> T = T.init
  // CHECK: function_ref @_T018partial_apply_init1PP{{[_0-9a-zA-Z]*}}fC
  let protoT: (String) -> T = T.init
  // CHECK: function_ref @_T018partial_apply_init1PPAAE{{[_0-9a-zA-Z]*}}fC
  let protoExtT: (Float) -> T = T.init

  // CHECK: function_ref @_T018partial_apply_init1CC{{[_0-9a-zA-Z]*}}fC
  let requiredM: (Double) -> T = t.init
  // CHECK: function_ref @_T018partial_apply_init1PP{{[_0-9a-zA-Z]*}}fC
  let protoM: (String) -> T = t.init
  // CHECK: function_ref @_T018partial_apply_init1PPAAE{{[_0-9a-zA-Z]*}}fC
  let protoExtM: (Float) -> T = t.init
}

// CHECK-LABEL: sil shared [thunk] @_T018partial_apply_init1PP{{[_0-9a-zA-Z]*}}fC
// CHECK:         witness_method $Self, #P.init!allocator.1
// CHECK-LABEL: sil shared [thunk] @_T018partial_apply_init1PPAAE{{[_0-9a-zA-Z]*}}fC
// CHECK:         function_ref @_T018partial_apply_init1PPAAE{{[_0-9a-zA-Z]*}}fC

