// RUN: %target-swift-frontend -sdk %S/Inputs %s -I %S/Inputs -enable-source-import -emit-silgen -enable-swift3-objc-inference | %FileCheck %s

// REQUIRES: objc_interop

import Foundation

class ObjCSubclass : NSObject {
  // CHECK-LABEL: sil hidden [thunk] @_T0016objc_deprecated_A7_thunks12ObjCSubclassCACyt7nothing_tcfcTo : $@convention(objc_method) (@owned ObjCSubclass) -> @owned ObjCSubclass {
  // CHECK: bb0(%0 : $ObjCSubclass):
  // CHECK-NEXT: builtin "swift3ImplicitObjCEntrypoint"() : $()
  init(nothing: ()) { super.init() }
  
  // CHECK-LABEL: sil hidden [thunk] @_T0016objc_deprecated_A7_thunks12ObjCSubclassC3fooyyFTo : $@convention(objc_method) (ObjCSubclass) -> ()
  // CHECK: bb0(%0 : $ObjCSubclass):
  // CHECK-NEXT: builtin "swift3ImplicitObjCEntrypoint"() : $()
  func foo() { }

  // CHECK-LABEL: sil hidden [thunk] @_T0016objc_deprecated_A7_thunks12ObjCSubclassC3barSo8NSObjectCSgfgTo : $@convention(objc_method) (ObjCSubclass) -> @autoreleased Optional<NSObject>
  // CHECK: bb0(%0 : $ObjCSubclass):
  // CHECK-NEXT: builtin "swift3ImplicitObjCEntrypoint"() : $()

  // CHECK-LABEL: sil hidden [thunk] @_T0016objc_deprecated_A7_thunks12ObjCSubclassC3barSo8NSObjectCSgfsTo : $@convention(objc_method) (Optional<NSObject>, ObjCSubclass) -> () {
  // CHECK: %0 : $Optional<NSObject>, %1 : $ObjCSubclass
  // CHECK-NEXT: builtin "swift3ImplicitObjCEntrypoint"() : $()
  var bar: NSObject? = nil

  // CHECK-LABEL: sil hidden [thunk] @_T0016objc_deprecated_A7_thunks12ObjCSubclassC9subscripts9AnyObject_pSicfgTo : $@convention(objc_method) (Int, ObjCSubclass) -> @autoreleased AnyObject 
  // CHECK: bb0(%0 : $Int, %1 : $ObjCSubclass):
  // CHECK-NEXT: builtin "swift3ImplicitObjCEntrypoint"() : $()

  // CHECK-LABEL: sil hidden [thunk] @_T0016objc_deprecated_A7_thunks12ObjCSubclassC9subscripts9AnyObject_pSicfsTo : $@convention(objc_method) (AnyObject, Int, ObjCSubclass) ->
  // CHECK: bb0(%0 : $AnyObject, %1 : $Int, %2 : $ObjCSubclass):
  // CHECK-NEXT: builtin "swift3ImplicitObjCEntrypoint"() : $()
  subscript (i: Int) -> AnyObject { get { return self } set { } } 
}

extension ObjCSubclass {
	// CHECK-LABEL: sil hidden [thunk] @_T0016objc_deprecated_A7_thunks12ObjCSubclassC13falsePositiveyyFTo : $@convention(objc_method) (ObjCSubclass) -> ()
  // CHECK: bb0(%0 : $ObjCSubclass):
  // CHECK-NOT: builtin "swift3ImplicitObjCEntrypoint"() : $()
	// CHECK: return
  func falsePositive() { }
}
