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

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

sil_stage canonical

import Builtin
import Swift
import gizmo

class X {
}
sil_vtable X {}

sil @_TFC8metatype1Xd : $@convention(method) (@owned X) -> @owned Builtin.NativeObject

sil @_TFC8metatype1XD : $@convention(method) (@owned X) -> ()

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %objc_class* @_TF8metatype22thick_to_objc_metatypeFT2xmMCS_1X_T_(%swift.type*)
sil @_TF8metatype22thick_to_objc_metatypeFT2xmMCS_1X_T_ : $@convention(thin) (@thick X.Type) -> @objc_metatype X.Type {
bb0(%0 : $@thick X.Type):
  // CHECK: [[RESULT:%[0-9a-zA-Z_-]+]] = bitcast %swift.type* %0 to %objc_class*
  %1 = thick_to_objc_metatype %0 : $@thick X.Type to $@objc_metatype X.Type
  // CHECK-NEXT: ret %objc_class* [[RESULT]]
  return %1 : $@objc_metatype X.Type
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %objc_class* @foreign_thick_to_objc(%swift.type*)
sil @foreign_thick_to_objc : $@convention(thin) (@thick Gizmo.Type) -> @objc_metatype Gizmo.Type {
bb0(%0 : $@thick Gizmo.Type):
  // CHECK: call %objc_class* @swift_getObjCClassFromMetadata
  %1 = thick_to_objc_metatype %0 : $@thick Gizmo.Type to $@objc_metatype Gizmo.Type
  // CHECK: ret %objc_class*
  return %1 : $@objc_metatype Gizmo.Type
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.type* @_TF8metatype22objc_to_thick_metatypeFT2xmMCS_1X_T_(%objc_class*)
sil @_TF8metatype22objc_to_thick_metatypeFT2xmMCS_1X_T_ : $@convention(thin) (@objc_metatype X.Type) -> @thick X.Type {
bb0(%0 : $@objc_metatype X.Type):
  // CHECK: [[RESULT:%[0-9a-zA-Z_-]+]] = call %swift.type* @swift_getObjCClassMetadata(%objc_class* %0)
  %1 = objc_to_thick_metatype %0 : $@objc_metatype X.Type to $@thick X.Type
  // CHECK-NEXT: ret %swift.type* [[RESULT]]
  return %1 : $@thick X.Type
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.type* @foreign_objc_to_thick(%objc_class*)
sil @foreign_objc_to_thick : $@convention(thin) (@objc_metatype Gizmo.Type) -> @thick Gizmo.Type {
bb0(%0 : $@objc_metatype Gizmo.Type):
  // CHECK: [[RESULT:%[0-9a-zA-Z_-]+]] = call %swift.type* @swift_getObjCClassMetadata(%objc_class* %0)
  %1 = objc_to_thick_metatype %0 : $@objc_metatype Gizmo.Type to $@thick Gizmo.Type
  // CHECK-NEXT: ret %swift.type* [[RESULT]]
  return %1 : $@thick Gizmo.Type
}

protocol CP: class {}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %objc_class* @archetype_objc_metatype(%swift.type* %T, i8** %T.CP)
// CHECK:         call %objc_class* @swift_getObjCClassFromMetadata
sil @archetype_objc_metatype : $@convention(thin) <T: CP> () -> @objc_metatype T.Type {
entry:
  %m = metatype $@objc_metatype T.Type
  return %m : $@objc_metatype T.Type
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %objc_class* @existential_objc_metatype(%objc_object*) {{.*}} {
// CHECK: entry:
// CHECK-NEXT: [[METATYPE:%.*]] = call %objc_class* @swift_getObjCClassFromObject(%objc_object* %0) {{#[0-9]+}}
// CHECK-NEXT: ret %objc_class* [[METATYPE]]
// CHECK-NEXT: }
sil @existential_objc_metatype : $@convention(thin) (AnyObject) -> (@objc_metatype AnyObject.Type) {
bb0(%0 : $AnyObject):
  %1 = existential_metatype $@objc_metatype AnyObject.Type, %0 : $AnyObject
  return %1 : $@objc_metatype AnyObject.Type
}


public protocol ClassProto : AnyObject {
  var other: ClassProto? { get }
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @drop_witness_table(%swift.type*, i8**)
// CHECK:  call %objc_class* @swift_getObjCClassFromMetadata(%swift.type* %0)
// CHECK:  ret void
sil @drop_witness_table : $@convention(thin) (@thick ClassProto.Type) -> () {
bb0(%0 : $@thick ClassProto.Type):
  %1 = thick_to_objc_metatype %0 : $@thick ClassProto.Type to $@objc_metatype ClassProto.Type
  %2 = tuple ()
  return %2 : $()
}
