Skip to content

Commit a4d661d

Browse files
committed
Add tests for rdar://98018067
1 parent 6c24bc5 commit a4d661d

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@import Foundation;
2+
3+
#define SENDABLE __attribute__((__swift_attr__("@Sendable")))
4+
5+
SENDABLE
6+
@interface NSTouchGrass : NSObject
7+
@property (nullable, copy) void (SENDABLE ^cancellationHandler)(void);
8+
@property (nonnull, copy) void (SENDABLE ^exceptionHandler)(void);
9+
@end

test/SILGen/objc_preconcurrency.swift

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
// RUN: %target-swift-emit-silgen -module-name objc_preconcurrency -sdk %S/Inputs -I %S/Inputs -enable-source-import %s -disable-objc-attr-requires-foundation-module | %FileCheck %s
1+
// RUN: %target-swift-emit-silgen -module-name objc_preconcurrency -sdk %S/Inputs -I %S/Inputs -enable-source-import -import-objc-header %S/Inputs/objc_preconcurrency.h %s -disable-objc-attr-requires-foundation-module | %FileCheck %s
22

33
// REQUIRES: objc_interop
44

55
@objc protocol P {
66
@preconcurrency @objc optional func f(_ completionHandler: @Sendable @escaping () -> Void)
7+
@preconcurrency var sendyHandler: @Sendable () -> Void { get set }
78
}
89

910
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency19testDynamicDispatch1p17completionHandleryAA1P_p_yyctF
@@ -16,3 +17,29 @@ func testDynamicDispatch(p: P, completionHandler: @escaping () -> Void) {
1617
// CHECK: bb{{[0-9]+}}(%{{[0-9]+}} : $@convention(objc_method) (@convention(block) @Sendable () -> (), @opened
1718
let _ = p.f
1819
}
20+
21+
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency21testOptionalVarAccessyySo12NSTouchGrassCF
22+
// CHECK: unchecked_addr_cast {{.*}} : $*Optional<@Sendable @callee_guaranteed () -> ()> to $*Optional<@callee_guaranteed () -> ()>
23+
// CHECK: } // end sil function '$s19objc_preconcurrency21testOptionalVarAccessyySo12NSTouchGrassCF'
24+
func testOptionalVarAccess(_ grass: NSTouchGrass) {
25+
grass.cancellationHandler?()
26+
}
27+
28+
func modify(_ v: inout () -> Void) {
29+
v = {}
30+
}
31+
32+
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency15testInoutAccessyySo12NSTouchGrassCF
33+
// CHECK: unchecked_addr_cast {{.*}} : $*@Sendable @callee_guaranteed () -> () to $*@callee_guaranteed () -> ()
34+
// CHECK: } // end sil function '$s19objc_preconcurrency15testInoutAccessyySo12NSTouchGrassCF'
35+
func testInoutAccess(_ grass: NSTouchGrass) {
36+
modify(&grass.exceptionHandler)
37+
}
38+
39+
40+
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency21testProtocolVarAccess1pyAA1P_p_tF
41+
// CHECK: unchecked_addr_cast {{.*}} : $*@Sendable @callee_guaranteed () -> () to $*@callee_guaranteed () -> ()
42+
// CHECK: } // end sil function '$s19objc_preconcurrency21testProtocolVarAccess1pyAA1P_p_tF'
43+
func testProtocolVarAccess(p: P) {
44+
modify(&p.sendyHandler)
45+
}

0 commit comments

Comments
 (0)