7
7
@preconcurrency var sendyHandler : @Sendable ( ) -> Void { get set }
8
8
}
9
9
10
+ @preconcurrency class OldWorld {
11
+ @preconcurrency var handler : ( @Sendable ( ) -> Void ) ?
12
+ @preconcurrency var nonOptionalHandler : @Sendable ( ) -> Void = { }
13
+ }
14
+
10
15
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency19testDynamicDispatch1p17completionHandleryAA1P_p_yyctF
11
16
// CHECK: dynamic_method_br
12
17
// CHECK: bb{{[0-9]+}}(%{{[0-9]+}} : $@convention(objc_method) (@convention(block) @Sendable () -> (), @opened
@@ -19,26 +24,52 @@ func testDynamicDispatch(p: P, completionHandler: @escaping () -> Void) {
19
24
}
20
25
21
26
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency21testOptionalVarAccessyySo12NSTouchGrassCF
22
- // CHECK: unchecked_addr_cast {{.*}} : $* Optional<@Sendable @callee_guaranteed () -> ()> to $* Optional<@callee_guaranteed () -> ()>
27
+ // CHECK: unchecked_bitwise_cast {{.*}} : $Optional<@Sendable @callee_guaranteed () -> ()> to $Optional<@callee_guaranteed () -> ()>
23
28
// CHECK: } // end sil function '$s19objc_preconcurrency21testOptionalVarAccessyySo12NSTouchGrassCF'
24
29
func testOptionalVarAccess( _ grass: NSTouchGrass ) {
25
30
grass. cancellationHandler ? ( )
26
31
}
27
32
33
+ // CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency25testOptionalAssignSetter1yyAA8OldWorldCF
34
+ // CHECK: unchecked_bitwise_cast {{.*}} : $Optional<@callee_guaranteed () -> ()> to $Optional<@Sendable @callee_guaranteed () -> ()>
35
+ // CHECK: #OldWorld.handler!setter : (OldWorld) -> ((@Sendable () -> ())?) -> ()
36
+ // CHECK: } // end sil function '$s19objc_preconcurrency25testOptionalAssignSetter1yyAA8OldWorldCF'
37
+ func testOptionalAssignSetter1( _ oldWorld: OldWorld ) {
38
+ oldWorld. handler = { }
39
+ }
40
+
41
+ // CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency25testOptionalAssignSetter2yyAA8OldWorldCF
42
+ // CHECK: convert_function {{.*}} : $@callee_guaranteed () -> () to $@Sendable @callee_guaranteed () -> ()
43
+ // CHECK: $OldWorld, #OldWorld.nonOptionalHandler!setter : (OldWorld) -> (@escaping @Sendable () -> ()) -> ()
44
+ // CHECK: } // end sil function '$s19objc_preconcurrency25testOptionalAssignSetter2yyAA8OldWorldCF'
45
+ func testOptionalAssignSetter2( _ oldWorld: OldWorld ) {
46
+ oldWorld. nonOptionalHandler = { }
47
+ }
48
+
28
49
func modify( _ v: inout ( ) -> Void ) {
29
50
v = { }
30
51
}
31
52
32
53
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency15testInoutAccessyySo12NSTouchGrassCF
33
- // CHECK: unchecked_addr_cast {{.*}} : $*@Sendable @callee_guaranteed () -> () to $*@callee_guaranteed () -> ()
54
+ // CHECK: [[BEFORE_MODIFY:%[0-9]+]] = convert_function {{.*}} : $@Sendable @callee_guaranteed () -> () to $@callee_guaranteed () -> ()
55
+ // CHECK: store [[BEFORE_MODIFY]] to [init] [[INOUT_ALLOC:%[0-9]+]] : $*@callee_guaranteed () -> ()
56
+ // CHECK: [[MODIFY_FN:%[0-9]+]] = function_ref @$s19objc_preconcurrency6modifyyyyyczF : $@convention(thin) (@inout @callee_guaranteed () -> ()) -> ()
57
+ // CHECK: = apply [[MODIFY_FN]]([[INOUT_ALLOC]])
58
+ // CHECK: [[AFTER_MODIFY:%[0-9]+]] = load [take] [[INOUT_ALLOC]] : $*@callee_guaranteed () -> ()
59
+ // CHECK: convert_function [[AFTER_MODIFY]] : $@callee_guaranteed () -> () to $@Sendable @callee_guaranteed () -> ()
34
60
// CHECK: } // end sil function '$s19objc_preconcurrency15testInoutAccessyySo12NSTouchGrassCF'
35
61
func testInoutAccess( _ grass: NSTouchGrass ) {
36
62
modify ( & grass. exceptionHandler)
37
63
}
38
64
39
65
40
66
// CHECK-LABEL: sil hidden [ossa] @$s19objc_preconcurrency21testProtocolVarAccess1pyAA1P_p_tF
41
- // CHECK: unchecked_addr_cast {{.*}} : $*@Sendable @callee_guaranteed () -> () to $*@callee_guaranteed () -> ()
67
+ // CHECK: [[BEFORE_MODIFY:%[0-9]+]] = convert_function {{.*}} : $@Sendable @callee_guaranteed () -> () to $@callee_guaranteed () -> ()
68
+ // CHECK: store [[BEFORE_MODIFY]] to [init] [[INOUT_ALLOC:%[0-9]+]] : $*@callee_guaranteed () -> ()
69
+ // CHECK: [[MODIFY_FN:%[0-9]+]] = function_ref @$s19objc_preconcurrency6modifyyyyyczF : $@convention(thin) (@inout @callee_guaranteed () -> ()) -> ()
70
+ // CHECK: = apply [[MODIFY_FN]]([[INOUT_ALLOC]])
71
+ // CHECK: [[AFTER_MODIFY:%[0-9]+]] = load [take] [[INOUT_ALLOC]] : $*@callee_guaranteed () -> ()
72
+ // CHECK: convert_function [[AFTER_MODIFY]] : $@callee_guaranteed () -> () to $@Sendable @callee_guaranteed () -> ()
42
73
// CHECK: } // end sil function '$s19objc_preconcurrency21testProtocolVarAccess1pyAA1P_p_tF'
43
74
func testProtocolVarAccess( p: P ) {
44
75
modify ( & p. sendyHandler)
0 commit comments