Fix ClangImporter directory

This commit is contained in:
Arnold Schwaighofer
2023-05-25 14:13:48 -07:00
parent 0b6db0afc4
commit 2c00862ed9
4 changed files with 145 additions and 164 deletions

View File

@@ -1,17 +1,13 @@
// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s %S/Inputs/forward-declarations-other.swift -import-objc-header %S/Inputs/forward-declarations.h -enable-objc-interop -disable-objc-attr-requires-foundation-module -module-name main | %FileCheck %s
// RUN: %target-swift-frontend -emit-ir -primary-file %s %S/Inputs/forward-declarations-other.swift -import-objc-header %S/Inputs/forward-declarations.h -enable-objc-interop -disable-objc-attr-requires-foundation-module -module-name main
// RUN: %target-swift-frontend -emit-ir -primary-file %s %S/Inputs/forward-declarations-other.swift -import-objc-header %S/Inputs/forward-declarations.h -enable-objc-interop -disable-objc-attr-requires-foundation-module -module-name main | %FileCheck %s
class Sub: Base {
// CHECK-LABEL: define{{.*}} void @"$s4main3SubC4testyyF"
func test() {
// CHECK: [[BASE_SELF:%.+]] = bitcast %T4main3SubC* %0 to %TSo4BaseC*
// CHECK: [[SELECTOR:%.+]] = load i8*, i8** @"\01L_selector(getClassInstanceWithoutMentioningItsName)"
// CHECK: [[OPAQUE_SELF:%.+]] = bitcast %TSo4BaseC* %2 to {{%.+}}*
// CHECK: [[RESULT:%.+]] = call {{%.+}}* bitcast (void ()* @objc_msgSend to {{%.+}}* ({{%.+}}*, i8*)*)({{%.+}}* [[OPAQUE_SELF]], i8* [[SELECTOR]])
// CHECK: [[OPAQUE_RESULT:%.+]] = bitcast {{%.+}}* [[RESULT]] to i8*
// CHECK: call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[OPAQUE_RESULT]])
// CHECK: [[SELECTOR:%.+]] = load ptr, ptr @"\01L_selector(getClassInstanceWithoutMentioningItsName)"
// CHECK: [[RESULT:%.+]] = call ptr @objc_msgSend(ptr %{{[0-9]+}}, ptr [[SELECTOR]])
// CHECK: call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[RESULT]])
_ = self.getClassInstanceWithoutMentioningItsName()
// CHECK: call void @swift_release(%swift.refcounted* {{%.+}})
// CHECK: call void @swift_release(ptr {{%.+}})
// CHECK: ret void
}
}

View File

@@ -1,5 +1,4 @@
// RUN: %target-swiftxx-frontend %use_no_opaque_pointers -module-name cxx_ir -I %S/Inputs/custom-modules -emit-ir -o - -primary-file %s -Xcc -fignore-exceptions | %FileCheck %s
// RUN: %target-swiftxx-frontend -module-name cxx_ir -I %S/Inputs/custom-modules -emit-ir -o - -primary-file %s -Xcc -fignore-exceptions
// RUN: %target-swiftxx-frontend -module-name cxx_ir -I %S/Inputs/custom-modules -emit-ir -o - -primary-file %s -Xcc -fignore-exceptions | %FileCheck %s
// https://github.com/apple/swift/issues/55575
// We can't yet call member functions correctly on Windows.
@@ -8,13 +7,13 @@
import CXXInterop
// CHECK-LABEL: define hidden swiftcc void @"$s6cxx_ir13indirectUsageyyF"()
// CHECK: %0 = call %"class.ns::T"* @{{_Z5makeTv|"\?makeT@@YAPE?AVT@ns@@XZ"}}()
// CHECK: call void @{{_Z4useTPN2ns1TE|"\?useT@@YAXPE?AVT@ns@@@Z"}}(%"class.ns::T"* %2)
// CHECK: %0 = call ptr @{{_Z5makeTv|"\?makeT@@YAPE?AVT@ns@@XZ"}}()
// CHECK: call void @{{_Z4useTPN2ns1TE|"\?useT@@YAXPE?AVT@ns@@@Z"}}(ptr %2)
func indirectUsage() {
useT(makeT())
}
// CHECK-LABEL: define hidden swiftcc %swift.type* @"$s6cxx_ir14reflectionInfo3argypXpSo2nsO1TV_tF"
// CHECK-LABEL: define hidden swiftcc ptr @"$s6cxx_ir14reflectionInfo3argypXpSo2nsO1TV_tF"
// CHECK: %0 = call swiftcc %swift.metadata_response @"$sSo2nsO1TVMa"({{i64|i32}} 0)
func reflectionInfo(arg: namespacedT) -> Any.Type {
return type(of: arg)
@@ -29,26 +28,22 @@ func namespaceManglesIntoNameForUsingShadowDecl(arg: NamespacedType) {
}
// CHECK-LABEL: define hidden swiftcc void @"$s6cxx_ir14accessNSMemberyyF"()
// CHECK: %0 = call %"class.ns::T"* @{{_ZN2ns7doMakeTEv|"\?doMakeT@ns@@YAPEAVT@1@XZ"}}()
// CHECK: call void @{{_Z4useTPN2ns1TE|"\?useT@@YAXPE?AVT@ns@@@Z"}}(%"class.ns::T"* %2)
// CHECK: %0 = call ptr @{{_ZN2ns7doMakeTEv|"\?doMakeT@ns@@YAPEAVT@1@XZ"}}()
// CHECK: call void @{{_Z4useTPN2ns1TE|"\?useT@@YAXPE?AVT@ns@@@Z"}}(ptr %2)
func accessNSMember() {
useT(ns.doMakeT())
}
// CHECK-LABEL: define hidden swiftcc i32 @"$s6cxx_ir12basicMethods1as5Int32VSpySo0D0VG_tF"(i8* %0)
// CHECK: [[THIS_PTR1:%.*]] = bitcast i8* %0 to %TSo7MethodsV*
// CHECK: [[THIS_PTR2:%.*]] = bitcast %TSo7MethodsV* [[THIS_PTR1]] to %class.Methods*
// CHECK: [[RESULT:%.*]] = call {{(signext )?}}i32 @{{_ZN7Methods12SimpleMethodEi|"\?SimpleMethod@Methods@@QEAAHH@Z"}}(%class.Methods* [[THIS_PTR2]], i32 {{%?[0-9]+}})
// CHECK-LABEL: define hidden swiftcc i32 @"$s6cxx_ir12basicMethods1as5Int32VSpySo0D0VG_tF"(ptr %0)
// CHECK: [[RESULT:%.*]] = call {{(signext )?}}i32 @{{_ZN7Methods12SimpleMethodEi|"\?SimpleMethod@Methods@@QEAAHH@Z"}}(ptr %0, i32 {{%?[0-9]+}})
// CHECK: ret i32 [[RESULT]]
func basicMethods(a: UnsafeMutablePointer<Methods>) -> Int32 {
return a.pointee.SimpleMethod(4)
}
// CHECK-LABEL: define hidden swiftcc i32 @"$s6cxx_ir17basicMethodsConst1as5Int32VSpySo0D0VG_tF"(i8* %0)
// CHECK-LABEL: define hidden swiftcc i32 @"$s6cxx_ir17basicMethodsConst1as5Int32VSpySo0D0VG_tF"(ptr %0)
// CHECK: [[THIS_PTR1:%.*]] = alloca %TSo7MethodsV, align {{4|8}}
// CHECK: [[THIS_PTR2:%.*]] = bitcast %TSo7MethodsV* [[THIS_PTR1]] to %class.Methods*
// CHECK: [[THIS_PTR3:%.*]] = bitcast %TSo7MethodsV* [[THIS_PTR1]] to %class.Methods*
// CHECK: [[RESULT:%.*]] = call {{(signext )?}}i32 @{{_ZNK7Methods17SimpleConstMethodEi|"\?SimpleConstMethod@Methods@@QEBAHH@Z"}}(%class.Methods* [[THIS_PTR3]], i32 {{%?[0-9]+}})
// CHECK: [[RESULT:%.*]] = call {{(signext )?}}i32 @{{_ZNK7Methods17SimpleConstMethodEi|"\?SimpleConstMethod@Methods@@QEBAHH@Z"}}(ptr [[THIS_PTR1]], i32 {{%?[0-9]+}})
// CHECK: ret i32 [[RESULT]]
func basicMethodsConst(a: UnsafeMutablePointer<Methods>) -> Int32 {
return a.pointee.SimpleConstMethod(3)
@@ -61,10 +56,8 @@ func basicMethodsStatic() -> Int32 {
return Methods.SimpleStaticMethod(5)
}
// CHECK-LABEL: define hidden swiftcc i32 @"$s6cxx_ir12basicMethods1as5Int32VSpySo8Methods2VG_tF"(i8* %0)
// CHECK: [[THIS_PTR1:%.*]] = bitcast i8* %0 to %TSo8Methods2V*
// CHECK: [[THIS_PTR2:%.*]] = bitcast %TSo8Methods2V* [[THIS_PTR1]] to %class.Methods2*
// CHECK: [[RESULT:%.*]] = call {{(signext )?}}i32 @{{_ZN8Methods212SimpleMethodEi|"\?SimpleMethod@Methods2@@QEAAHH@Z"}}(%class.Methods2* [[THIS_PTR2]], i32 {{%?[0-9]+}})
// CHECK-LABEL: define hidden swiftcc i32 @"$s6cxx_ir12basicMethods1as5Int32VSpySo8Methods2VG_tF"(ptr %0)
// CHECK: [[RESULT:%.*]] = call {{(signext )?}}i32 @{{_ZN8Methods212SimpleMethodEi|"\?SimpleMethod@Methods2@@QEAAHH@Z"}}(ptr %0, i32 {{%?[0-9]+}})
// CHECK: ret i32 [[RESULT]]
func basicMethods(a: UnsafeMutablePointer<Methods2>) -> Int32 {
return a.pointee.SimpleMethod(4)

View File

@@ -1,5 +1,4 @@
// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s -enable-objc-interop -import-objc-header %S/Inputs/enum-anon.h | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-%target-runtime %s
// RUN: %target-swift-frontend -emit-ir %s -enable-objc-interop -import-objc-header %S/Inputs/enum-anon.h
// RUN: %target-swift-frontend -emit-ir %s -enable-objc-interop -import-objc-header %S/Inputs/enum-anon.h | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-%target-runtime %s
func verifyIsInt(_: inout Int) { }
func verifyIsInt32(_: inout Int32) { }
@@ -25,11 +24,11 @@ verifyIsInt32(&c)
// CHECK: %TSo6StructV = type <{ %Ts5Int32V, [[ENUM_TYPE:%Ts5Int32V|%Ts6UInt32V]], %Ts5Int32V }>
// CHECK-LABEL: define{{.*}} i32 @"$s4main6testIR1xs5Int32VSPySo6StructVG_tF"(
public func testIR(x: UnsafePointer<Struct>) -> CInt {
// CHECK: store i32 1, i32* getelementptr inbounds ([[ENUM_TYPE]], [[ENUM_TYPE]]* bitcast (i32* @global to [[ENUM_TYPE]]*), i32 0, i32 0), align 4
// CHECK: store i32 1, ptr @global, align 4
global = VarConstant2
#if _runtime(_ObjC)
// CHECK-objc: store i16 1, i16* getelementptr inbounds (%Ts6UInt16V, %Ts6UInt16V* bitcast (i16* @usGlobal to %Ts6UInt16V*), i32 0, i32 0), align 2
// CHECK-objc: store i16 1, ptr @usGlobal, align 2
usGlobal = USVarConstant2
#endif

View File

@@ -1,14 +1,11 @@
// RUN: %empty-directory(%t)
// RUN: %build-clang-importer-objc-overlays
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %use_no_opaque_pointers -module-name objc_ir -I %S/Inputs/custom-modules -emit-ir -g -o - -primary-file %s | %FileCheck %s
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -module-name objc_ir -I %S/Inputs/custom-modules -emit-ir -g -o - -primary-file %s
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) -module-name objc_ir -I %S/Inputs/custom-modules -emit-ir -g -o - -primary-file %s | %FileCheck %s
// REQUIRES: objc_interop
// REQUIRES: OS=macosx
// CHECK: %TSo1BC = type
import ObjectiveC
import Foundation
import objc_ext
@@ -21,21 +18,21 @@ import objc_generics
// CHECK: @"\01L_selector_data(method:separateExtMethod:)" = private global [26 x i8] c"method:separateExtMethod:\00", section "__TEXT,__objc_methname,cstring_literals"
// Instance method invocation
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir15instanceMethodsyySo1BCF"(%TSo1BC*
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir15instanceMethodsyySo1BCF"(ptr
func instanceMethods(_ b: B) {
// CHECK: load i8*, i8** @"\01L_selector(method:withFloat:)"
// CHECK: call i32 bitcast (void ()* @objc_msgSend to i32
// CHECK: load ptr, ptr @"\01L_selector(method:withFloat:)"
// CHECK: call i32 @objc_msgSend
var i = b.method(1, with: 2.5 as Float)
// CHECK: load i8*, i8** @"\01L_selector(method:withDouble:)"
// CHECK: call i32 bitcast (void ()* @objc_msgSend to i32
// CHECK: load ptr, ptr @"\01L_selector(method:withDouble:)"
// CHECK: call i32 @objc_msgSend
i = i + b.method(1, with: 2.5 as Double)
}
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir16extensionMethods1bySo1BC_tF"
func extensionMethods(b b: B) {
// CHECK: load i8*, i8** @"\01L_selector(method:separateExtMethod:)", align 8
// CHECK: [[T0:%.*]] = call i8* bitcast (void ()* @objc_msgSend to i8*
// CHECK: [[T1:%.*]] = {{.*}}call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T0]])
// CHECK: load ptr, ptr @"\01L_selector(method:separateExtMethod:)", align 8
// CHECK: [[T0:%.*]] = call ptr @objc_msgSend
// CHECK: [[T1:%.*]] = {{.*}}call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T0]])
// CHECK-NOT: [[T0]]
// CHECK: [[T1]]
b.method(1, separateExtMethod:1.5)
@@ -49,44 +46,43 @@ func initCallToAllocInit(i i: CInt) {
}
// CHECK-LABEL: linkonce_odr hidden {{.*}} @"$sSo1BC3intABSgs5Int32V_tcfC"
// CHECK: call [[OPAQUE:%.*]]* @objc_allocWithZone
// CHECK: call ptr @objc_allocWithZone
// Indexed subscripting
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir19indexedSubscripting1b3idx1aySo1BC_SiSo1ACtF"
func indexedSubscripting(b b: B, idx: Int, a: A) {
// CHECK: load i8*, i8** @"\01L_selector(setObject:atIndexedSubscript:)", align 8
// CHECK: load ptr, ptr @"\01L_selector(setObject:atIndexedSubscript:)", align 8
b[idx] = a
// CHECK: load i8*, i8** @"\01L_selector(objectAtIndexedSubscript:)"
// CHECK: load ptr, ptr @"\01L_selector(objectAtIndexedSubscript:)"
var a2 = b[idx] as! A
}
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir17keyedSubscripting1b3idx1aySo1BC_So1ACAItF"
func keyedSubscripting(b b: B, idx: A, a: A) {
// CHECK: load i8*, i8** @"\01L_selector(setObject:forKeyedSubscript:)"
// CHECK: load ptr, ptr @"\01L_selector(setObject:forKeyedSubscript:)"
b[a] = a
// CHECK: load i8*, i8** @"\01L_selector(objectForKeyedSubscript:)"
// CHECK: load ptr, ptr @"\01L_selector(objectForKeyedSubscript:)"
var a2 = b[a] as! A
}
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir14propertyAccess1bySo1BC_tF"
func propertyAccess(b b: B) {
// CHECK: load i8*, i8** @"\01L_selector(counter)"
// CHECK: load i8*, i8** @"\01L_selector(setCounter:)"
// CHECK: load ptr, ptr @"\01L_selector(counter)"
// CHECK: load ptr, ptr @"\01L_selector(setCounter:)"
b.counter = b.counter + 1
// CHECK: load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_B"
// CHECK: load i8*, i8** @"\01L_selector(sharedCounter)"
// CHECK: load i8*, i8** @"\01L_selector(setSharedCounter:)"
// CHECK: load ptr, ptr @"OBJC_CLASS_REF_$_B"
// CHECK: load ptr, ptr @"\01L_selector(sharedCounter)"
// CHECK: load ptr, ptr @"\01L_selector(setSharedCounter:)"
B.sharedCounter = B.sharedCounter + 1
}
// CHECK-LABEL: define hidden swiftcc %TSo1BC* @"$s7objc_ir8downcast1aSo1BCSo1AC_tF"(
// CHECK-LABEL: define hidden swiftcc ptr @"$s7objc_ir8downcast1aSo1BCSo1AC_tF"(
func downcast(a a: A) -> B {
// CHECK: [[CLASS:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_B"
// CHECK: [[T0:%.*]] = call %objc_class* @{{.*}}(%objc_class* [[CLASS]])
// CHECK: [[T1:%.*]] = bitcast %objc_class* [[T0]] to i8*
// CHECK: call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[A:%.*]], i8* [[T1]], {{.*}}) [[NOUNWIND:#[0-9]+]]
// CHECK: [[CLASS:%.*]] = load ptr, ptr @"OBJC_CLASS_REF_$_B"
// CHECK: [[T0:%.*]] = call ptr @{{.*}}(ptr [[CLASS]])
// CHECK: call ptr @swift_dynamicCastObjCClassUnconditional(ptr [[A:%.*]], ptr [[T0]], {{.*}}) [[NOUNWIND:#[0-9]+]]
return a as! B
}
@@ -95,31 +91,30 @@ func almostSubscriptable(as1 as1: AlmostSubscriptable, a: A) {
as1.objectForKeyedSubscript(a)
}
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir13protocolTypes1a1bySo7NSMinceC_So9NSRuncing_ptF"(%TSo7NSMinceC* %0, %objc_object* %1) {{.*}} {
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir13protocolTypes1a1bySo7NSMinceC_So9NSRuncing_ptF"(ptr %0, ptr %1) {{.*}} {
func protocolTypes(a a: NSMince, b: NSRuncing) {
// - (void)eatWith:(id <NSRuncing>)runcer;
a.eat(with: b)
// CHECK: [[SEL:%.*]] = load i8*, i8** @"\01L_selector(eatWith:)", align 8
// CHECK: call void bitcast (void ()* @objc_msgSend to void ([[OPAQUE:%.*]]*, i8*, i8*)*)([[OPAQUE:%.*]]* {{%.*}}, i8* [[SEL]], i8* {{%.*}})
// CHECK: [[SEL:%.*]] = load ptr, ptr @"\01L_selector(eatWith:)", align 8
// CHECK: call void @objc_msgSend(ptr {{%.*}}, ptr [[SEL]], ptr {{%.*}})
}
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir6getset1pySo8FooProto_p_tF"(%objc_object* %0) {{.*}} {
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir6getset1pySo8FooProto_p_tF"(ptr %0) {{.*}} {
func getset(p p: FooProto) {
// CHECK: load i8*, i8** @"\01L_selector(bar)"
// CHECK: load i8*, i8** @"\01L_selector(setBar:)"
// CHECK: load ptr, ptr @"\01L_selector(bar)"
// CHECK: load ptr, ptr @"\01L_selector(setBar:)"
let prop = p.bar
p.bar = prop
}
// CHECK-LABEL: define hidden swiftcc %swift.type* @"$s7objc_ir16protocolMetatype1pSo8FooProto_pXpSoAD_p_tF"(%objc_object* %0) {{.*}} {
// CHECK-LABEL: define hidden swiftcc ptr @"$s7objc_ir16protocolMetatype1pSo8FooProto_pXpSoAD_p_tF"(ptr %0) {{.*}} {
func protocolMetatype(p: FooProto) -> FooProto.Type {
// CHECK: = call %swift.type* @swift_getObjectType(%objc_object* %0)
// CHECK: = call ptr @swift_getObjectType(ptr %0)
// CHECK-NOT: {{retain|release}}
// CHECK: [[RAW_RESULT:%.+]] = call i8* @processFooType(i8* {{%.+}})
// CHECK: [[CASTED_RESULT:%.+]] = bitcast i8* [[RAW_RESULT]] to %objc_class*
// CHECK: [[SWIFT_RESULT:%.+]] = call %swift.type* @swift_getObjCClassMetadata(%objc_class* [[CASTED_RESULT]])
// CHECK-NOT: call void @swift_unknownObjectRelease(%objc_object* %0)
// CHECK: ret %swift.type* [[SWIFT_RESULT]]
// CHECK: [[RAW_RESULT:%.+]] = call ptr @processFooType(ptr {{%.+}})
// CHECK: [[SWIFT_RESULT:%.+]] = call ptr @swift_getObjCClassMetadata(ptr [[RAW_RESULT]])
// CHECK-NOT: call void @swift_unknownObjectRelease(ptr %0)
// CHECK: ret ptr [[SWIFT_RESULT]]
let type = processFooType(Swift.type(of: p))
return type
} // CHECK: }
@@ -128,72 +123,70 @@ class Impl: FooProto, AnotherProto {
@objc var bar: Int32 = 0
}
// CHECK-LABEL: define hidden swiftcc %swift.type* @"$s7objc_ir27protocolCompositionMetatype1pSo12AnotherProto_So03FooG0pXpAA4ImplC_tF"(%T7objc_ir4ImplC* %0) {{.*}} {
// CHECK-LABEL: define hidden swiftcc ptr @"$s7objc_ir27protocolCompositionMetatype1pSo12AnotherProto_So03FooG0pXpAA4ImplC_tF"(ptr %0) {{.*}} {
func protocolCompositionMetatype(p: Impl) -> (FooProto & AnotherProto).Type {
// CHECK-NOT: {{retain|release}}
// CHECK: [[RAW_RESULT:%.+]] = call i8* @processComboType(i8* {{%.+}})
// CHECK: [[CASTED_RESULT:%.+]] = bitcast i8* [[RAW_RESULT]] to %objc_class*
// CHECK: [[SWIFT_RESULT:%.+]] = call %swift.type* @swift_getObjCClassMetadata(%objc_class* [[CASTED_RESULT]])
// CHECK-NOT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T7objc_ir4ImplC*)*)(%T7objc_ir4ImplC* %0)
// CHECK: ret %swift.type* [[SWIFT_RESULT]]
// CHECK: [[RAW_RESULT:%.+]] = call ptr @processComboType(ptr {{%.+}})
// CHECK: [[SWIFT_RESULT:%.+]] = call ptr @swift_getObjCClassMetadata(ptr [[RAW_RESULT]])
// CHECK-NOT: call void @swift_release(ptr %0)
// CHECK: ret ptr [[SWIFT_RESULT]]
let type = processComboType(Swift.type(of: p))
return type
} // CHECK: }
// CHECK-LABEL: define hidden swiftcc %swift.type* @"$s7objc_ir28protocolCompositionMetatype21pSo12AnotherProto_So03FooG0pXpAA4ImplC_tF"(%T7objc_ir4ImplC* %0) {{.*}} {
// CHECK-LABEL: define hidden swiftcc ptr @"$s7objc_ir28protocolCompositionMetatype21pSo12AnotherProto_So03FooG0pXpAA4ImplC_tF"(ptr %0) {{.*}} {
func protocolCompositionMetatype2(p: Impl) -> (FooProto & AnotherProto).Type {
// CHECK-NOT: {{retain|release}}
// CHECK: [[RAW_RESULT:%.+]] = call i8* @processComboType2(i8* {{%.+}})
// CHECK: [[CASTED_RESULT:%.+]] = bitcast i8* [[RAW_RESULT]] to %objc_class*
// CHECK: [[SWIFT_RESULT:%.+]] = call %swift.type* @swift_getObjCClassMetadata(%objc_class* [[CASTED_RESULT]])
// CHECK: [[RAW_RESULT:%.+]] = call ptr @processComboType2(ptr {{%.+}})
// CHECK: [[SWIFT_RESULT:%.+]] = call ptr @swift_getObjCClassMetadata(ptr [[RAW_RESULT]])
// CHECK-NOT: @swift_release
// CHECK: ret %swift.type* [[SWIFT_RESULT]]
// CHECK: ret ptr [[SWIFT_RESULT]]
let type = processComboType2(Swift.type(of: p))
return type
} // CHECK: }
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir17pointerPropertiesyySo14PointerWrapperCF"(%TSo14PointerWrapperC* %0) {{.*}} {
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir17pointerPropertiesyySo14PointerWrapperCF"(ptr %0) {{.*}} {
func pointerProperties(_ obj: PointerWrapper) {
// CHECK: load i8*, i8** @"\01L_selector(setVoidPtr:)"
// CHECK: load i8*, i8** @"\01L_selector(setIntPtr:)"
// CHECK: load i8*, i8** @"\01L_selector(setIdPtr:)"
// CHECK: load ptr, ptr @"\01L_selector(setVoidPtr:)"
// CHECK: load ptr, ptr @"\01L_selector(setIntPtr:)"
// CHECK: load ptr, ptr @"\01L_selector(setIdPtr:)"
obj.voidPtr = nil as UnsafeMutableRawPointer?
obj.intPtr = nil as UnsafeMutablePointer?
obj.idPtr = nil as AutoreleasingUnsafeMutablePointer?
}
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir16strangeSelectorsyySo13SwiftNameTestCF"(%TSo13SwiftNameTestC* %0) {{.*}} {
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir16strangeSelectorsyySo13SwiftNameTestCF"(ptr %0) {{.*}} {
func strangeSelectors(_ obj: SwiftNameTest) {
// CHECK: load i8*, i8** @"\01L_selector(:b:)"
// CHECK: load ptr, ptr @"\01L_selector(:b:)"
obj.empty(a: 0, b: 0)
}
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir20customFactoryMethodsyyF"() {{.*}} {
func customFactoryMethods() {
// CHECK: call swiftcc %TSo13SwiftNameTestC* @"$sSo13SwiftNameTestC10dummyParamAByt_tcfCTO"
// CHECK: call swiftcc %TSo13SwiftNameTestC* @"$sSo13SwiftNameTestC2ccABypSg_tcfCTO"
// CHECK: call swiftcc %TSo13SwiftNameTestC* @"$sSo13SwiftNameTestC5emptyABs5Int32V_tcfCTO"
// CHECK: call swiftcc ptr @"$sSo13SwiftNameTestC10dummyParamAByt_tcfCTO"
// CHECK: call swiftcc ptr @"$sSo13SwiftNameTestC2ccABypSg_tcfCTO"
// CHECK: call swiftcc ptr @"$sSo13SwiftNameTestC5emptyABs5Int32V_tcfCTO"
_ = SwiftNameTest(dummyParam: ())
_ = SwiftNameTest(cc: nil)
_ = SwiftNameTest(empty: 0)
// CHECK: load i8*, i8** @"\01L_selector(testZ)"
// CHECK: load i8*, i8** @"\01L_selector(testY:)"
// CHECK: load i8*, i8** @"\01L_selector(testX:xx:)"
// CHECK: load i8*, i8** @"\01L_selector(::)"
// CHECK: load ptr, ptr @"\01L_selector(testZ)"
// CHECK: load ptr, ptr @"\01L_selector(testY:)"
// CHECK: load ptr, ptr @"\01L_selector(testX:xx:)"
// CHECK: load ptr, ptr @"\01L_selector(::)"
_ = SwiftNameTest.zz()
_ = SwiftNameTest.yy(aa: nil)
_ = SwiftNameTest.xx(nil, bb: nil)
_ = SwiftNameTest.empty(1, 2)
do {
// CHECK: call swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC5errorAByt_tKcfCTO"
// CHECK: call swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aa5errorABypSg_yttKcfCTO"
// CHECK: call swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: call swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC5error5blockAByt_yyctKcfCTO"
// CHECK: call swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aaABypSg_tKcfCTO"
// CHECK: call swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aa5blockABypSg_yyctKcfCTO"
// CHECK: call swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC5blockAByyc_tKcfCTO"
// CHECK: call swiftcc ptr @"$sSo18SwiftNameTestErrorC5errorAByt_tKcfCTO"
// CHECK: call swiftcc ptr @"$sSo18SwiftNameTestErrorC2aa5errorABypSg_yttKcfCTO"
// CHECK: call swiftcc ptr @"$sSo18SwiftNameTestErrorC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: call swiftcc ptr @"$sSo18SwiftNameTestErrorC5error5blockAByt_yyctKcfCTO"
// CHECK: call swiftcc ptr @"$sSo18SwiftNameTestErrorC2aaABypSg_tKcfCTO"
// CHECK: call swiftcc ptr @"$sSo18SwiftNameTestErrorC2aa5blockABypSg_yyctKcfCTO"
// CHECK: call swiftcc ptr @"$sSo18SwiftNameTestErrorC5blockAByyc_tKcfCTO"
_ = try SwiftNameTestError(error: ())
_ = try SwiftNameTestError(aa: nil, error: ())
_ = try SwiftNameTestError(aa: nil, error: (), block: {})
@@ -203,10 +196,10 @@ func customFactoryMethods() {
_ = try SwiftNameTestError(aa: nil, block: {})
_ = try SwiftNameTestError(block: {})
// CHECK: load i8*, i8** @"\01L_selector(testW:error:)"
// CHECK: load i8*, i8** @"\01L_selector(testW2:error:)"
// CHECK: load i8*, i8** @"\01L_selector(testV:)"
// CHECK: load i8*, i8** @"\01L_selector(testV2:)"
// CHECK: load ptr, ptr @"\01L_selector(testW:error:)"
// CHECK: load ptr, ptr @"\01L_selector(testW2:error:)"
// CHECK: load ptr, ptr @"\01L_selector(testV:)"
// CHECK: load ptr, ptr @"\01L_selector(testV2:)"
_ = try SwiftNameTestError.ww(nil)
_ = try SwiftNameTestError.w2(nil, error: ())
_ = try SwiftNameTestError.vv()
@@ -215,64 +208,64 @@ func customFactoryMethods() {
}
}
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo13SwiftNameTestC* @"$sSo13SwiftNameTestC10dummyParamAByt_tcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(b)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo13SwiftNameTestC10dummyParamAByt_tcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(b)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo13SwiftNameTestC* @"$sSo13SwiftNameTestC2ccABypSg_tcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(c:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo13SwiftNameTestC2ccABypSg_tcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(c:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC5errorAByt_tKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err1:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo18SwiftNameTestErrorC5errorAByt_tKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err1:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aa5errorABypSg_yttKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err2:error:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo18SwiftNameTestErrorC2aa5errorABypSg_yttKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err2:error:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err3:error:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo18SwiftNameTestErrorC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err3:error:callback:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC5error5blockAByt_yyctKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err4:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo18SwiftNameTestErrorC5error5blockAByt_yyctKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err4:callback:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aaABypSg_tKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err5:error:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo18SwiftNameTestErrorC2aaABypSg_tKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err5:error:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC2aa5blockABypSg_yyctKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err6:error:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo18SwiftNameTestErrorC2aa5blockABypSg_yyctKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err6:error:callback:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo18SwiftNameTestErrorC* @"$sSo18SwiftNameTestErrorC5blockAByyc_tKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err7:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo18SwiftNameTestErrorC5blockAByyc_tKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err7:callback:)"
// CHECK: }
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir29customFactoryMethodsInheritedyyF"() {{.*}} {
func customFactoryMethodsInherited() {
// CHECK: call swiftcc %TSo16SwiftNameTestSubC* @"$sSo16SwiftNameTestSubC10dummyParamAByt_tcfCTO"
// CHECK: call swiftcc %TSo16SwiftNameTestSubC* @"$sSo16SwiftNameTestSubC2ccABypSg_tcfCTO"
// CHECK: call swiftcc ptr @"$sSo16SwiftNameTestSubC10dummyParamAByt_tcfCTO"
// CHECK: call swiftcc ptr @"$sSo16SwiftNameTestSubC2ccABypSg_tcfCTO"
_ = SwiftNameTestSub(dummyParam: ())
_ = SwiftNameTestSub(cc: nil)
// CHECK: load i8*, i8** @"\01L_selector(testZ)"
// CHECK: load i8*, i8** @"\01L_selector(testY:)"
// CHECK: load i8*, i8** @"\01L_selector(testX:xx:)"
// CHECK: load ptr, ptr @"\01L_selector(testZ)"
// CHECK: load ptr, ptr @"\01L_selector(testY:)"
// CHECK: load ptr, ptr @"\01L_selector(testX:xx:)"
_ = SwiftNameTestSub.zz()
_ = SwiftNameTestSub.yy(aa: nil)
_ = SwiftNameTestSub.xx(nil, bb: nil)
do {
// CHECK: call swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC5errorAByt_tKcfCTO"
// CHECK: call swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aa5errorABypSg_yttKcfCTO"
// CHECK: call swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: call swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC5error5blockAByt_yyctKcfCTO"
// CHECK: call swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aaABypSg_tKcfCTO"
// CHECK: call swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aa5blockABypSg_yyctKcfCTO"
// CHECK: call swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC5blockAByyc_tKcfCTO"
// CHECK: call swiftcc ptr @"$sSo21SwiftNameTestErrorSubC5errorAByt_tKcfCTO"
// CHECK: call swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aa5errorABypSg_yttKcfCTO"
// CHECK: call swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: call swiftcc ptr @"$sSo21SwiftNameTestErrorSubC5error5blockAByt_yyctKcfCTO"
// CHECK: call swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aaABypSg_tKcfCTO"
// CHECK: call swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aa5blockABypSg_yyctKcfCTO"
// CHECK: call swiftcc ptr @"$sSo21SwiftNameTestErrorSubC5blockAByyc_tKcfCTO"
_ = try SwiftNameTestErrorSub(error: ())
_ = try SwiftNameTestErrorSub(aa: nil, error: ())
_ = try SwiftNameTestErrorSub(aa: nil, error: (), block: {})
@@ -282,10 +275,10 @@ func customFactoryMethodsInherited() {
_ = try SwiftNameTestErrorSub(aa: nil, block: {})
_ = try SwiftNameTestErrorSub(block: {})
// CHECK: load i8*, i8** @"\01L_selector(testW:error:)"
// CHECK: load i8*, i8** @"\01L_selector(testW2:error:)"
// CHECK: load i8*, i8** @"\01L_selector(testV:)"
// CHECK: load i8*, i8** @"\01L_selector(testV2:)"
// CHECK: load ptr, ptr @"\01L_selector(testW:error:)"
// CHECK: load ptr, ptr @"\01L_selector(testW2:error:)"
// CHECK: load ptr, ptr @"\01L_selector(testV:)"
// CHECK: load ptr, ptr @"\01L_selector(testV2:)"
_ = try SwiftNameTestErrorSub.ww(nil)
_ = try SwiftNameTestErrorSub.w2(nil, error: ())
_ = try SwiftNameTestErrorSub.vv()
@@ -294,54 +287,54 @@ func customFactoryMethodsInherited() {
}
}
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo16SwiftNameTestSubC* @"$sSo16SwiftNameTestSubC10dummyParamAByt_tcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(b)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo16SwiftNameTestSubC10dummyParamAByt_tcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(b)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo16SwiftNameTestSubC* @"$sSo16SwiftNameTestSubC2ccABypSg_tcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(c:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo16SwiftNameTestSubC2ccABypSg_tcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(c:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC5errorAByt_tKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err1:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo21SwiftNameTestErrorSubC5errorAByt_tKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err1:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aa5errorABypSg_yttKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err2:error:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aa5errorABypSg_yttKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err2:error:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err3:error:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aa5error5blockABypSg_ytyyctKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err3:error:callback:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC5error5blockAByt_yyctKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err4:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo21SwiftNameTestErrorSubC5error5blockAByt_yyctKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err4:callback:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aaABypSg_tKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err5:error:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aaABypSg_tKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err5:error:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC2aa5blockABypSg_yyctKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err6:error:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo21SwiftNameTestErrorSubC2aa5blockABypSg_yyctKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err6:error:callback:)"
// CHECK: }
// CHECK-LABEL: define linkonce_odr hidden swiftcc %TSo21SwiftNameTestErrorSubC* @"$sSo21SwiftNameTestErrorSubC5blockAByyc_tKcfCTO"
// CHECK: load i8*, i8** @"\01L_selector(err7:callback:)"
// CHECK-LABEL: define linkonce_odr hidden swiftcc ptr @"$sSo21SwiftNameTestErrorSubC5blockAByyc_tKcfCTO"
// CHECK: load ptr, ptr @"\01L_selector(err7:callback:)"
// CHECK: }
// CHECK-LABEL: define hidden swiftcc void @"$s7objc_ir30testCompatibilityAliasMangling3objySo13SwiftNameTestC_tF"
func testCompatibilityAliasMangling(obj: SwiftNameAlias) {
// CHECK: call void @llvm.dbg.declare(metadata %TSo13SwiftNameTestC** {{%.+}}, metadata ![[SWIFT_NAME_ALIAS_VAR:[0-9]+]], metadata !DIExpression())
// CHECK: call void @llvm.dbg.declare(metadata ptr {{%.+}}, metadata ![[SWIFT_NAME_ALIAS_VAR:[0-9]+]], metadata !DIExpression())
}
func testGenericCompatibilityAliasMangling(generic_obj: SwiftGenericNameAlias<NSNumber>) {
// CHECK: call void @llvm.dbg.declare(metadata %TSo20SwiftGenericNameTestCySo8NSNumberCG** {{%.+}}, metadata ![[SWIFT_GENERIC_NAME_ALIAS_VAR:[0-9]+]], metadata !DIExpression())
// CHECK: call void @llvm.dbg.declare(metadata ptr {{%.+}}, metadata ![[SWIFT_GENERIC_NAME_ALIAS_VAR:[0-9]+]], metadata !DIExpression())
}
func testConstrGenericCompatibilityAliasMangling(constr_generic_obj: SwiftConstrGenericNameAlias<NSNumber>) {
// CHECK: call void @llvm.dbg.declare(metadata %TSo26SwiftConstrGenericNameTestCySo8NSNumberCG** {{%.+}}, metadata ![[SWIFT_CONSTR_GENERIC_NAME_ALIAS_VAR:[0-9]+]], metadata !DIExpression())
// CHECK: call void @llvm.dbg.declare(metadata ptr {{%.+}}, metadata ![[SWIFT_CONSTR_GENERIC_NAME_ALIAS_VAR:[0-9]+]], metadata !DIExpression())
}
// CHECK-LABEL: s7objc_ir22testBlocksWithGenerics3hbaypSo13HasBlockArrayC_tF
@@ -353,8 +346,8 @@ func testBlocksWithGenerics(hba: HasBlockArray) -> Any {
// CHECK-LABEL: linkonce_odr hidden {{.*}} @"$sSo1BC3intABSgs5Int32V_tcfcTO"
// CHECK: load i8*, i8** @"\01L_selector(initWithInt:)"
// CHECK: call [[OPAQUE:%.*]]* bitcast (void ()* @objc_msgSend
// CHECK: load ptr, ptr @"\01L_selector(initWithInt:)"
// CHECK: call ptr @objc_msgSend
// CHECK: attributes [[NOUNWIND]] = { nounwind readonly }