// RUN: rm -rf %t && mkdir %t
// RUN: %build-irgen-test-overlays
// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir | FileCheck --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize %s

// REQUIRES: objc_interop

import Swift
import Foundation

// CHECK-LABEL: define hidden %CSo8NSObject* @checkedClassBoundCast(%swift.type*, %CSo8NSObject*, %swift.type* %T) #0 {
// CHECK: [[OPAQUE_OBJ:%.+]] = bitcast %CSo8NSObject* %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 %CSo8NSObject*
// CHECK: ret %CSo8NSObject* [[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 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** @"OBJC_CLASS_REF_$_Foo"
// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @rt_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 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** @"OBJC_CLASS_REF_$_Foo"
// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @rt_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<T.Type>) -> () {
bb0(%metatype : $Optional<T.Type>):
  %result = unconditional_checked_cast %metatype : $Optional<T.Type> to $Foo
  %tuple = tuple ()
  return %tuple : $()
}
