// RUN: %empty-directory(%t)
// RUN: %build-irgen-test-overlays
// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -assume-parsing-unqualified-ownership-sil -primary-file %s -emit-ir | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize %s

// REQUIRES: objc_interop

import Swift
import Foundation

class SwiftClass {}
sil_vtable SwiftClass {}

protocol ClassProto : class {}

// CHECK-LABEL: define hidden swiftcc %TSo8NSObjectC* @checkedClassBoundCast(%swift.type*, %TSo8NSObjectC*, %swift.type* %T) #0 {
// CHECK: [[OPAQUE_OBJ:%.+]] = bitcast %TSo8NSObjectC* %1 to i8*
// CHECK: [[OPAQUE_CLASS:%.+]] = bitcast %swift.type* %T to i8*
// CHECK: [[OPAQUE_RESULT:%.+]] = call i8* @swift_dynamicCastUnknownClassUnconditional(i8* [[OPAQUE_OBJ]], i8* [[OPAQUE_CLASS]])
// CHECK: [[RESULT:%.+]] = bitcast i8* [[OPAQUE_RESULT]] to %TSo8NSObjectC*
// CHECK: ret %TSo8NSObjectC* [[RESULT]]
// CHECK: {{^}$}}

sil hidden @checkedClassBoundCast : $@convention(thin) <T where T : NSObject> (@thick T.Type, @owned NSObject) -> @owned T {
bb0(%unused : $@thick T.Type, %obj : $NSObject):
  strong_retain %obj : $NSObject
  %result = unconditional_checked_cast %obj : $NSObject to $T
  strong_release %obj : $NSObject
  return %result : $T
}

// rdar://24924966
// CHECK-LABEL: define hidden swiftcc void @metatype_to_objc_class(%swift.type*, %swift.type* %T)
// CHECK:       [[T0:%.*]] = call %objc_object* @swift_dynamicCastMetatypeToObjectUnconditional(%swift.type* %0)
//   TODO: is this really necessary? also, this really shouldn't use a direct reference
// CHECK-NEXT:  [[T1:%.*]] = bitcast %objc_object* [[T0]] to i8*
// CHECK-NEXT:  [[T2a:%.*]] = load %objc_class*, %objc_class** @"\01l_OBJC_CLASS_REF_$_Foo"
// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T2a]])
// CHECK-NEXT:  [[T3:%.*]] = bitcast %objc_class* [[T2]] to i8*
// CHECK-NEXT:  call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[T1]], i8* [[T3]])
sil hidden @metatype_to_objc_class : $@convention(thin) <T> (@thick T.Type) -> () {
bb0(%metatype : $@thick T.Type):
  %result = unconditional_checked_cast %metatype : $@thick T.Type to $Foo
  %tuple = tuple ()
  return %tuple : $()
}

// CHECK-LABEL: define hidden swiftcc void @opt_metatype_to_objc_class({{(i32|i64)}}, %swift.type* %T)
// CHECK:       [[ARG:%.*]] = inttoptr {{.*}} %0 to %swift.type*
// CHECK:       [[T0:%.*]] = call %objc_object* @swift_dynamicCastMetatypeToObjectUnconditional(%swift.type* [[ARG]])
//   TODO: is this really necessary? also, this really shouldn't use a direct reference
// CHECK-NEXT:  [[T1:%.*]] = bitcast %objc_object* [[T0]] to i8*
// CHECK-NEXT:  [[T2a:%.*]] = load %objc_class*, %objc_class** @"\01l_OBJC_CLASS_REF_$_Foo"
// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T2a]])
// CHECK-NEXT:  [[T3:%.*]] = bitcast %objc_class* [[T2]] to i8*
// CHECK-NEXT:  call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[T1]], i8* [[T3]])
sil hidden @opt_metatype_to_objc_class : $@convention(thin) <T> (Optional<@thick T.Type>) -> () {
bb0(%metatype : $Optional<@thick T.Type>):
  %result = unconditional_checked_cast %metatype : $Optional<@thick T.Type> to $Foo
  %tuple = tuple ()
  return %tuple : $()
}

// CHECK-LABEL: define hidden swiftcc { %objc_object*, i8** } @swift_class_bounded_to_cp
// CHECK-SAME:    ([[SWIFTCLASS:%T10objc_casts10SwiftClassC]]*, %swift.type* %T)
// CHECK:       [[T0:%.*]] = bitcast [[SWIFTCLASS]]* %0 to %swift.type**
// CHECK-NEXT:  [[TYPE:%.*]] = load %swift.type*, %swift.type** [[T0]],
// CHECK-NEXT:  [[T0:%.*]] = bitcast [[SWIFTCLASS]]* %0 to i8*
// CHECK-NEXT:  call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[T0]], %swift.type* [[TYPE]], %swift.protocol* @"$S10objc_casts10ClassProtoMp")
sil hidden @swift_class_bounded_to_cp : $@convention(thin) <T: SwiftClass> (@owned T) -> @owned ClassProto {
entry(%a : $T):
  %0 = unconditional_checked_cast %a : $T to $ClassProto
  return %0 : $ClassProto
}

// CHECK-LABEL: define hidden swiftcc { %objc_object*, i8** } @objc_class_bounded_to_cp
// CHECK-SAME:    ([[OBJCCLASS:%TSo8NSObjectC]]*, %swift.type* %T)
// CHECK:       [[T0:%.*]] = bitcast [[OBJCCLASS]]* %0 to %objc_object*
// CHECK-NEXT:  [[TYPE:%.*]] = call %swift.type* @swift_getObjectType(%objc_object* [[T0]])
// CHECK-NEXT:  [[T0:%.*]] = bitcast [[OBJCCLASS]]* %0 to i8*
// CHECK-NEXT:  call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[T0]], %swift.type* [[TYPE]], %swift.protocol* @"$S10objc_casts10ClassProtoMp")
sil hidden @objc_class_bounded_to_cp : $@convention(thin) <T: NSObject> (@owned T) -> @owned ClassProto {
entry(%a : $T):
  %0 = unconditional_checked_cast %a : $T to $ClassProto
  return %0 : $ClassProto
}
