// RUN: %empty-directory(%t)
// RUN: %build-irgen-test-overlays
// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %s -emit-ir | %FileCheck %s

// REQUIRES: CPU=x86_64
// REQUIRES: objc_interop

// CHECK: @"\01L_selector_data(initWithRed:green:blue:)"
// CHECK: @"\01L_selector_data(colorWithRed:green:blue:)"
// CHECK: @"\01L_selector_data(otherColorForRed:green:blue:)"

sil_stage raw

import Builtin
import Swift
import gizmo

class SwiftGizmo : Gizmo {
  @objc init(red: Float, green: Float, blue: Float) { }
  @objc func color(red: Float, green: Float, blue: Float)
  @objc func otherColorFor(red: Float, green: Float, blue: Float)
}
sil_vtable SwiftGizmo {}

sil @$s18objc_implicit_with10SwiftGizmoC3red5green4blueACSf_S2ftcfcTo : $@convention(objc_method) (Float, Float, Float, @owned SwiftGizmo) -> @owned SwiftGizmo {
bb0(%0 : $Float, %1 : $Float, %2 : $Float, %3 : $SwiftGizmo):
  return %3 : $SwiftGizmo
}

sil @$s18objc_implicit_with10SwiftGizmoC7bellsOnACSgSi_tcfcTo : $@convention(objc_method) (Int, @owned SwiftGizmo) -> @owned SwiftGizmo? {
bb0(%0 : $Int, %1 : $SwiftGizmo):
  unreachable
}

sil @$s18objc_implicit_with10SwiftGizmoCACycfcTo : $@convention(objc_method) (@owned SwiftGizmo) -> @owned SwiftGizmo {
bb0(%0 : $SwiftGizmo):
  return %0 : $SwiftGizmo
}

sil @$s18objc_implicit_with10SwiftGizmoC5color3red5green4blueySf_S2ftFTo : $@convention(objc_method) (Float, Float, Float, @owned SwiftGizmo) -> @owned SwiftGizmo {
bb0(%0 : $Float, %1 : $Float, %2 : $Float, %3 : $SwiftGizmo):
  return %3 : $SwiftGizmo
}

sil @$s18objc_implicit_with10SwiftGizmoC13otherColorFor3red5green4blueySf_S2ftFTo : $@convention(objc_method) (Float, Float, Float, @owned SwiftGizmo) -> @owned SwiftGizmo {
bb0(%0 : $Float, %1 : $Float, %2 : $Float, %3 : $SwiftGizmo):
  return %3 : $SwiftGizmo
}
