@@ -10,6 +10,7 @@ import Foundation
10
10
import Builtin
11
11
12
12
sil @$ss11AnyHashableVyABxcSHRzlufC : $@convention(method) <τ_0_0 where τ_0_0 : Hashable> (@in τ_0_0, @thin AnyHashable.Type) -> @out AnyHashable
13
+ sil @guaranteed_swift_array_user : $@convention(thin) <τ_0_0> (@guaranteed Array<τ_0_0>) -> ()
13
14
14
15
// CHECK-LABEL: sil [ossa] @bridged_cast_anyhashable : $@convention(method) (@guaranteed NSArray) -> @out Optional<AnyHashable> {
15
16
// CHECK: [[FUNC:%.*]] = function_ref @$ss37_forceBridgeFromObjectiveC_bridgeableyx01_D5CTypeQz_xmts01_D11CBridgeableRzlF :
@@ -36,3 +37,97 @@ bb0(%0 : $*Optional<AnyHashable>, %1 : @guaranteed $NSArray):
36
37
%19 = tuple ()
37
38
return %19 : $()
38
39
}
40
+
41
+ // CHECK-LABEL: sil [ossa] @array_downcast_copyonsuccess : $@convention(thin) (@guaranteed NSArray) -> () {
42
+ // CHECK-NOT: checked_cast_addr_br
43
+ // CHECK: } // end sil function 'array_downcast_copyonsuccess'
44
+ sil [ossa] @array_downcast_copyonsuccess : $@convention(thin) (@guaranteed NSArray) -> () {
45
+ bb0(%0 : @guaranteed $NSArray):
46
+ %4 = alloc_stack $NSArray
47
+ %5 = copy_value %0 : $NSArray
48
+ store %5 to [init] %4 : $*NSArray
49
+ %7 = alloc_stack $Array<String>
50
+ checked_cast_addr_br copy_on_success NSArray in %4 : $*NSArray to Array<String> in %7 : $*Array<String>, bb2, bb3
51
+
52
+ bb2:
53
+ %9 = load [take] %7 : $*Array<String>
54
+ %10 = function_ref @guaranteed_swift_array_user : $@convention(thin) <τ_0_0> (@guaranteed Array<τ_0_0>) -> ()
55
+ apply %10<String>(%9) : $@convention(thin) <τ_0_0> (@guaranteed Array<τ_0_0>) -> ()
56
+ destroy_value %9 : $Array<String>
57
+ dealloc_stack %7 : $*Array<String>
58
+ destroy_addr %4 : $*NSArray
59
+ dealloc_stack %4 : $*NSArray
60
+ br bb4
61
+
62
+ bb3:
63
+ dealloc_stack %7 : $*Array<String>
64
+ destroy_addr %4 : $*NSArray
65
+ dealloc_stack %4 : $*NSArray
66
+ br bb4
67
+
68
+ bb4:
69
+ %9999 = tuple()
70
+ return %9999 : $()
71
+ }
72
+
73
+ // CHECK-LABEL: sil [ossa] @array_downcast_takeonsuccess : $@convention(thin) (@guaranteed NSArray) -> () {
74
+ // CHECK-NOT: checked_cast_addr_br
75
+ // CHECK: } // end sil function 'array_downcast_takeonsuccess'
76
+ sil [ossa] @array_downcast_takeonsuccess : $@convention(thin) (@guaranteed NSArray) -> () {
77
+ bb0(%0 : @guaranteed $NSArray):
78
+ %4 = alloc_stack $NSArray
79
+ %5 = copy_value %0 : $NSArray
80
+ store %5 to [init] %4 : $*NSArray
81
+ %7 = alloc_stack $Array<String>
82
+ checked_cast_addr_br take_on_success NSArray in %4 : $*NSArray to Array<String> in %7 : $*Array<String>, bb2, bb3
83
+
84
+ bb2:
85
+ %9 = load [take] %7 : $*Array<String>
86
+ %10 = function_ref @guaranteed_swift_array_user : $@convention(thin) <τ_0_0> (@guaranteed Array<τ_0_0>) -> ()
87
+ apply %10<String>(%9) : $@convention(thin) <τ_0_0> (@guaranteed Array<τ_0_0>) -> ()
88
+ destroy_value %9 : $Array<String>
89
+ dealloc_stack %7 : $*Array<String>
90
+ dealloc_stack %4 : $*NSArray
91
+ br bb4
92
+
93
+ bb3:
94
+ dealloc_stack %7 : $*Array<String>
95
+ destroy_addr %4 : $*NSArray
96
+ dealloc_stack %4 : $*NSArray
97
+ br bb4
98
+
99
+ bb4:
100
+ %9999 = tuple()
101
+ return %9999 : $()
102
+ }
103
+
104
+ // CHECK-LABEL: sil [ossa] @array_downcast_takealways : $@convention(thin) (@guaranteed NSArray) -> () {
105
+ // CHECK-NOT: checked_cast_addr_br
106
+ // CHECK: } // end sil function 'array_downcast_takealways'
107
+ sil [ossa] @array_downcast_takealways : $@convention(thin) (@guaranteed NSArray) -> () {
108
+ bb0(%0 : @guaranteed $NSArray):
109
+ %4 = alloc_stack $NSArray
110
+ %5 = copy_value %0 : $NSArray
111
+ store %5 to [init] %4 : $*NSArray
112
+ %7 = alloc_stack $Array<String>
113
+ checked_cast_addr_br take_always NSArray in %4 : $*NSArray to Array<String> in %7 : $*Array<String>, bb2, bb3
114
+
115
+ bb2:
116
+ %9 = load [take] %7 : $*Array<String>
117
+ %10 = function_ref @guaranteed_swift_array_user : $@convention(thin) <τ_0_0> (@guaranteed Array<τ_0_0>) -> ()
118
+ apply %10<String>(%9) : $@convention(thin) <τ_0_0> (@guaranteed Array<τ_0_0>) -> ()
119
+ destroy_value %9 : $Array<String>
120
+ dealloc_stack %7 : $*Array<String>
121
+ dealloc_stack %4 : $*NSArray
122
+ br bb4
123
+
124
+ bb3:
125
+ dealloc_stack %7 : $*Array<String>
126
+ dealloc_stack %4 : $*NSArray
127
+ br bb4
128
+
129
+ bb4:
130
+ %9999 = tuple()
131
+ return %9999 : $()
132
+ }
133
+
0 commit comments