mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
216 lines
8.7 KiB
Swift
216 lines
8.7 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %build-irgen-test-overlays
|
|
// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -emit-ir -primary-file %s | %FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-%target-ptrauth
|
|
|
|
// REQUIRES: PTRSIZE=64
|
|
// REQUIRES: objc_interop
|
|
|
|
import Foundation
|
|
|
|
// CHECK: @_INSTANCE_METHODS__TtC11objc_bridge3Bas = internal constant { i32, i32, [17 x { ptr, ptr, ptr }] } {
|
|
// CHECK: i32 24,
|
|
// CHECK: i32 17,
|
|
// CHECK: [17 x { ptr, ptr, ptr }] [
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(strRealProp)",
|
|
// CHECK: ptr @".str.7.@16@0:8",
|
|
// CHECK-noptrauth: @"$s11objc_bridge3BasC11strRealPropSSvgTo"
|
|
// CHECK-ptrauth: @"$s11objc_bridge3BasC11strRealPropSSvgTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(setStrRealProp:)",
|
|
// CHECK: ptr @".str.10.v24@0:8@16",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC11strRealPropSSvsTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC11strRealPropSSvsTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(strFakeProp)",
|
|
// CHECK: ptr @".str.7.@16@0:8",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC11strFakePropSSvgTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC11strFakePropSSvgTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(setStrFakeProp:)",
|
|
// CHECK: ptr @".str.10.v24@0:8@16",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC11strFakePropSSvsTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC11strFakePropSSvsTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(nsstrRealProp)",
|
|
// CHECK: ptr @".str.7.@16@0:8",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC13nsstrRealPropSo8NSStringCvgTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC13nsstrRealPropSo8NSStringCvgTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(setNsstrRealProp:)",
|
|
// CHECK: ptr @".str.10.v24@0:8@16",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC13nsstrRealPropSo8NSStringCvsTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC13nsstrRealPropSo8NSStringCvsTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(nsstrFakeProp)",
|
|
// CHECK: ptr @".str.7.@16@0:8",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC13nsstrFakePropSo8NSStringCvgTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC13nsstrFakePropSo8NSStringCvgTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(setNsstrFakeProp:)",
|
|
// CHECK: ptr @".str.10.v24@0:8@16",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC13nsstrFakePropSo8NSStringCvsTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC13nsstrFakePropSo8NSStringCvsTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(strResult)",
|
|
// CHECK: ptr @".str.7.@16@0:8",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC9strResultSSyFTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC9strResultSSyFTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(strArgWithS:)"
|
|
// CHECK: ptr @".str.10.v24@0:8@16",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC6strArg1sySS_tFTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC6strArg1sySS_tFTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(nsstrResult)",
|
|
// CHECK: ptr @".str.7.@16@0:8",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC11nsstrResultSo8NSStringCyFTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC11nsstrResultSo8NSStringCyFTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(nsstrArgWithS:)",
|
|
// CHECK: ptr @".str.10.v24@0:8@16",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC8nsstrArg1sySo8NSStringC_tFTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC8nsstrArg1sySo8NSStringC_tFTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(init)",
|
|
// CHECK: ptr @".str.7.@16@0:8",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasCACycfcTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasCACycfcTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(dealloc)",
|
|
// CHECK: ptr @".str.7.v16@0:8",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasCfDTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasCfDTo.ptrauth"
|
|
// CHECK: },
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(acceptSet:)",
|
|
// CHECK: ptr @".str.10.v24@0:8@16",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasC9acceptSetyyShyACGFTo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasC9acceptSetyyShyACGFTo.ptrauth"
|
|
// CHECK: }
|
|
// CHECK: { ptr, ptr, ptr } {
|
|
// CHECK: ptr @"\01L_selector_data(.cxx_destruct)",
|
|
// CHECK: ptr @"{{[^"]*}}",
|
|
// CHECK-noptrauth: ptr @"$s11objc_bridge3BasCfETo"
|
|
// CHECK-ptrauth: ptr @"$s11objc_bridge3BasCfETo.ptrauth"
|
|
// CHECK: }
|
|
// CHECK: ]
|
|
// CHECK: }, section "__DATA, {{.*}}", align 8
|
|
|
|
// CHECK: @_PROPERTIES__TtC11objc_bridge3Bas = internal constant { i32, i32, [5 x { ptr, ptr }] } {
|
|
|
|
// CHECK: [[OBJC_BLOCK_PROPERTY:@.*]] = private unnamed_addr constant [8 x i8] c"T@?,N,C\00"
|
|
// CHECK: @_PROPERTIES__TtC11objc_bridge21OptionalBlockProperty = internal constant {{.*}} [[OBJC_BLOCK_PROPERTY]]
|
|
|
|
func getDescription(_ o: NSObject) -> String {
|
|
return o.description
|
|
}
|
|
|
|
func getUppercaseString(_ s: NSString) -> String {
|
|
return s.uppercase()
|
|
}
|
|
|
|
// @interface Foo -(void) setFoo: (NSString*)s; @end
|
|
func setFoo(_ f: Foo, s: String) {
|
|
f.setFoo(s)
|
|
}
|
|
|
|
// NSString *bar(int);
|
|
func callBar() -> String {
|
|
return bar(0)
|
|
}
|
|
|
|
// void setBar(NSString *s);
|
|
func callSetBar(_ s: String) {
|
|
setBar(s)
|
|
}
|
|
|
|
var NSS : NSString = NSString()
|
|
|
|
// -- NSString methods don't convert 'self'
|
|
extension NSString {
|
|
// CHECK: define internal ptr @"$sSo8NSStringC11objc_bridgeE13nsstrFakePropABvgTo"(ptr %0, ptr %1) {{[#0-9]*}} {
|
|
// CHECK: define internal void @"$sSo8NSStringC11objc_bridgeE13nsstrFakePropABvsTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc var nsstrFakeProp : NSString {
|
|
get {
|
|
return NSS
|
|
}
|
|
set {}
|
|
}
|
|
|
|
// CHECK: define internal ptr @"$sSo8NSStringC11objc_bridgeE11nsstrResultAByFTo"(ptr %0, ptr %1) {{[#0-9]*}} {
|
|
@objc func nsstrResult() -> NSString { return NSS }
|
|
|
|
// CHECK: define internal void @"$sSo8NSStringC11objc_bridgeE8nsstrArg1syAB_tFTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc func nsstrArg(s s: NSString) { }
|
|
}
|
|
|
|
class Bas : NSObject {
|
|
// CHECK: define internal ptr @"$s11objc_bridge3BasC11strRealPropSSvgTo"(ptr %0, ptr %1) {{[#0-9]*}} {
|
|
// CHECK: define internal void @"$s11objc_bridge3BasC11strRealPropSSvsTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc var strRealProp : String
|
|
|
|
// CHECK: define internal ptr @"$s11objc_bridge3BasC11strFakePropSSvgTo"(ptr %0, ptr %1) {{[#0-9]*}} {
|
|
// CHECK: define internal void @"$s11objc_bridge3BasC11strFakePropSSvsTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc var strFakeProp : String {
|
|
get {
|
|
return ""
|
|
}
|
|
set {}
|
|
}
|
|
|
|
// CHECK: define internal ptr @"$s11objc_bridge3BasC13nsstrRealPropSo8NSStringCvgTo"(ptr %0, ptr %1) {{[#0-9]*}} {
|
|
// CHECK: define internal void @"$s11objc_bridge3BasC13nsstrRealPropSo8NSStringCvsTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc var nsstrRealProp : NSString
|
|
|
|
// CHECK: define hidden swiftcc ptr @"$s11objc_bridge3BasC13nsstrFakePropSo8NSStringCvg"(ptr swiftself %0) {{.*}} {
|
|
// CHECK: define internal void @"$s11objc_bridge3BasC13nsstrFakePropSo8NSStringCvsTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc var nsstrFakeProp : NSString {
|
|
get {
|
|
return NSS
|
|
}
|
|
set {}
|
|
}
|
|
|
|
// CHECK: define internal ptr @"$s11objc_bridge3BasC9strResultSSyFTo"(ptr %0, ptr %1) {{[#0-9]*}} {
|
|
@objc func strResult() -> String { return "" }
|
|
// CHECK: define internal void @"$s11objc_bridge3BasC6strArg1sySS_tFTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc func strArg(s s: String) { }
|
|
|
|
// CHECK: define internal ptr @"$s11objc_bridge3BasC11nsstrResultSo8NSStringCyFTo"(ptr %0, ptr %1) {{[#0-9]*}} {
|
|
@objc func nsstrResult() -> NSString { return NSS }
|
|
// CHECK: define internal void @"$s11objc_bridge3BasC8nsstrArg1sySo8NSStringC_tFTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} {
|
|
@objc func nsstrArg(s s: NSString) { }
|
|
|
|
override init() {
|
|
strRealProp = String()
|
|
nsstrRealProp = NSString()
|
|
super.init()
|
|
}
|
|
|
|
deinit { var x = 10 }
|
|
|
|
override var hash: Int { return 0 }
|
|
|
|
@objc func acceptSet(_ set: Set<Bas>) { }
|
|
}
|
|
|
|
func ==(lhs: Bas, rhs: Bas) -> Bool { return true }
|
|
|
|
class OptionalBlockProperty: NSObject {
|
|
@objc var x: (([AnyObject]) -> [AnyObject])?
|
|
}
|