// RUN: rm -rf %t && mkdir %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: [[SGIZMO:%C19objc_attr_NSManaged10SwiftGizmo]] = type

// CHECK: [[X:@[0-9+]]] = private unnamed_addr constant [2 x i8] c"x\00"

import Builtin
import Swift
import gizmo
import Foundation

@objc class X : NSObject {
}
sil_vtable X {}

// The getter/setter should not show up in the Objective-C metadata.
// CHECK: _INSTANCE_METHODS__TtC19objc_attr_NSManaged10SwiftGizmo = private constant { {{.*}}i32, i32, [2 x { i8*, i8*, i8* }] } { i32 24, i32 2, {{.*}} @"\01L_selector_data(initWithBellsOn:)", {{.*}} @"\01L_selector_data(init)", 

// The property 'x' should show up in the Objective-C metadata.
// CHECK: @_PROPERTIES__TtC19objc_attr_NSManaged10SwiftGizmo = private constant { {{.*}}i32, i32, [1 x { i8*, i8* }] } { i32 16, i32 1, [1 x { i8*, i8* }] [{ i8*, i8* } { i8* getelementptr inbounds ([2 x i8], [2 x i8]* [[X]], i64 0, i64 0),

// The getter/setter should not show up in the Swift metadata.
/* FIXME: sil_vtable parser picks the wrong 'init' overload. Both vtable entries
   ought to be nonnull here. rdar://problem/19572342 */
// CHECK: @_TMfC19objc_attr_NSManaged10SwiftGizmo = internal global <{ {{.*}} }> <{ void (%C19objc_attr_NSManaged10SwiftGizmo*)* @_TFC19objc_attr_NSManaged10SwiftGizmoD, i8** @_TWVBO, i64 ptrtoint (%objc_class* @"OBJC_METACLASS_$__TtC19objc_attr_NSManaged10SwiftGizmo" to i64), %objc_class* @"OBJC_CLASS_$_Gizmo", %swift.opaque* @_objc_empty_cache, %swift.opaque* null, i64 add (i64 ptrtoint ({ i32, i32, i32, i32, i8*, i8*, { i32, i32, [2 x { i8*, i8*, i8* }] }*, i8*, i8*, i8*, { i32, i32, [1 x { i8*, i8* }] }* }* @_DATA__TtC19objc_attr_NSManaged10SwiftGizmo to i64), i64 1), i32 1, i32 0, i32 16, i16 7, i16 0, i32 112, i32 16, {{.*}}* @_TMnC19objc_attr_NSManaged10SwiftGizmo {{.*}}, i8* null, %C19objc_attr_NSManaged10SwiftGizmo* (i64, %C19objc_attr_NSManaged10SwiftGizmo*)* @_TFC19objc_attr_NSManaged10SwiftGizmocfT7bellsOnSi_S0_, i8* bitcast (void ()* @swift_deletedMethodError to i8*) }>

@objc class SwiftGizmo : Gizmo {
  @objc @NSManaged var x: X
  @objc @NSManaged func kvc()
}
sil @_TToFC19objc_attr_NSManaged1XcfT_S0_ : $@convention(objc_method) (@owned X) -> @owned X {
bb0(%0 : $X):
  return %0 : $X
}

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

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

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

sil @_TFC19objc_attr_NSManaged10SwiftGizmocfT7bellsOnSi_S0_ : $@convention(method) (Int, @owned SwiftGizmo) -> @owned SwiftGizmo {
bb0(%0 : $Int, %1 : $SwiftGizmo):
  return %1 : $SwiftGizmo
}

sil @_TFC19objc_attr_NSManaged10SwiftGizmoD : $@convention(method) (@owned SwiftGizmo) -> ()

sil @_TFC19objc_attr_NSManaged10SwiftGizmocfT7bellsOnSi_GSQS0__ : $@convention(method) (Int, @owned SwiftGizmo) -> Int

/* FIXME: sil_vtable parser picks the wrong 'init' overload. rdar://problem/19572342 */
sil_vtable SwiftGizmo {
  // #SwiftGizmo.init!initializer.1: _TFC19objc_attr_NSManaged10SwiftGizmocfT_S0_
  #SwiftGizmo.init!initializer.1: _TFC19objc_attr_NSManaged10SwiftGizmocfT7bellsOnSi_S0_
}
