// 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

import Swift
import gizmo

//
// A pure Swift class. We can access its isa directly.
//

class Purebred {
  func method() {}
}
sil_vtable Purebred {}

// CHECK-LABEL: define void @purebred_method(%C18class_isa_pointers8Purebred*) {{.*}} {
// CHECK:         [[ISA_PTR:%.*]] = bitcast %C18class_isa_pointers8Purebred* %0 to %swift.type**
// CHECK:         [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_PTR]]
// CHECK:         [[VTABLE:%.*]] = bitcast %swift.type* [[ISA]]
// CHECK:         getelementptr inbounds {{.*}} [[VTABLE]]
sil @purebred_method : $@convention(thin) (@owned Purebred) -> () {
entry(%0 : $Purebred):
  %m = class_method %0 : $Purebred, #Purebred.method!1 : Purebred -> () -> (), $@convention(method) (@guaranteed Purebred) -> ()
  %z = apply %m(%0) : $@convention(method) (@guaranteed Purebred) -> ()
  return %z : $()
}

//
// A mixed Swift/ObjC class. We have to mask when reading its isa.
//

class Mongrel: Gizmo {
  func method() {}
}
sil_vtable Mongrel {}

// CHECK-LABEL: define void @mongrel_method(%C18class_isa_pointers7Mongrel*) {{.*}} {
// CHECK:         [[T0:%.*]] = bitcast {{.*}} %0 to i64*
// CHECK-NEXT:    [[T1:%.*]] = load i64, i64* [[T0]], align 8
// CHECK-NEXT:    [[T2:%.*]] = load i64, i64* @swift_isaMask, align 8
// CHECK-NEXT:    [[T3:%.*]] = and i64 [[T1]], [[T2]]
// CHECK:         [[ISA:%.*]] = inttoptr i64 [[T3]] to %swift.type*
// CHECK:         [[VTABLE:%.*]] = bitcast %swift.type* [[ISA]]
// CHECK:         getelementptr inbounds {{.*}} [[VTABLE]]
sil @mongrel_method : $@convention(thin) (@owned Mongrel) -> () {
entry(%0 : $Mongrel):
  %m = class_method %0 : $Mongrel, #Mongrel.method!1 : Mongrel -> () -> (), $@convention(method) (@guaranteed Mongrel) -> ()
  %z = apply %m(%0) : $@convention(method) (@guaranteed Mongrel) -> ()
  return %z : $()
}

// ObjC stubs expected by ObjC metadata emission

sil private @_TToFC18class_isa_pointers7Mongrel6methodfT_T_ : $@convention(objc_method) (Purebred) -> () {
entry(%0 : $Purebred):
  unreachable
}
sil private @_TToFC18class_isa_pointers7MongrelcfT7bellsOnSi_GSQS0__ : $@convention(objc_method) (Int, Purebred) -> () {
entry(%0 : $Int, %1 : $Purebred):
  unreachable
}
sil private @_TToFC18class_isa_pointers7MongrelcfT_S0_ : $@convention(objc_method) (Purebred) -> () {
entry(%0 : $Purebred):
  unreachable
}
