Skip to content

Commit a1fe258

Browse files
committed
Update tests for new trivial moves and extend_lifetimes.
1 parent 4915bfa commit a1fe258

30 files changed

+199
-99
lines changed

test/AutoDiff/SILGen/autodiff_builtins.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func test_context_builtins_with_type<T>(t: T) {
9999
// CHECK: [[CTX:%.*]] = builtin "autoDiffCreateLinearMapContextWithType"<T>({{%.*}} : $@thick T.Type) : $Builtin.NativeObject
100100
// CHECK: [[CTX_LIFETIME:%.*]] = move_value [lexical] [var_decl] [[CTX]]
101101
// CHECK: [[BORROWED_CTX:%.*]] = begin_borrow [[CTX_LIFETIME]]
102-
// CHECK: [[BUF:%.*]] = builtin "autoDiffProjectTopLevelSubcontext"([[BORROWED_CTX]] : $Builtin.NativeObject) : $Builtin.RawPointer // users: {{.*}}
102+
// CHECK: [[BUF:%.*]] = builtin "autoDiffProjectTopLevelSubcontext"([[BORROWED_CTX]] : $Builtin.NativeObject) : $Builtin.RawPointer
103103
// CHECK: [[BORROWED_CTX:%.*]] = begin_borrow [[CTX_LIFETIME]]
104-
// CHECK: [[BUF:%.*]] = builtin "autoDiffAllocateSubcontextWithType"<T>([[BORROWED_CTX]] : $Builtin.NativeObject, {{.*}} : $@thick T.Type) : $Builtin.RawPointer // users: {{.*}}
104+
// CHECK: [[BUF:%.*]] = builtin "autoDiffAllocateSubcontextWithType"<T>([[BORROWED_CTX]] : $Builtin.NativeObject, {{.*}} : $@thick T.Type) : $Builtin.RawPointer
105105
// CHECK: destroy_value [[CTX_LIFETIME]]

test/AutoDiff/SILOptimizer/activity_analysis.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,11 @@ func checked_cast_addr_active_result<T: Differentiable>(x: T) -> T {
220220
// CHECK: bb3:
221221
// CHECK: [ACTIVE] %14 = argument of bb3 : $Optional<Float>
222222
// CHECK: bb4:
223-
// CHECK: [ACTIVE] %16 = argument of bb4 : $Float
224-
// CHECK: [ACTIVE] %19 = alloc_stack $Float
223+
// CHECK: [ACTIVE] [[ARG4:%.*]] = argument of bb4 : $Float
224+
// CHECK: [ACTIVE] [[ALLOC4:%.*]] = alloc_stack $Float
225225
// CHECK: bb5:
226226
// CHECK: bb6:
227-
// CHECK: [NONE] %27 = tuple ()
227+
// CHECK: [NONE] %{{[0-9]+}} = tuple ()
228228

229229
// CHECK-LABEL: sil hidden [ossa] @${{.*}}checked_cast_addr_active_result{{.*}} : $@convention(thin) <T where T : Differentiable> (@in_guaranteed T) -> @out T {
230230
// CHECK: checked_cast_addr_br take_always T in %3 : $*T to Float in %5 : $*Float, bb1, bb2
@@ -832,15 +832,15 @@ func testActiveEnumValue(_ e: DirectEnum, _ x: Float) -> Float {
832832
// CHECK: bb2:
833833
// CHECK: [ACTIVE] %6 = argument of bb2 : $Float
834834
// CHECK: bb3:
835-
// CHECK: [ACTIVE] %9 = argument of bb3 : $(Float, Float)
836-
// CHECK: [ACTIVE] (**%10**, %11) = destructure_tuple %9 : $(Float, Float)
837-
// CHECK: [ACTIVE] (%10, **%11**) = destructure_tuple %9 : $(Float, Float)
838-
// CHECK: [USEFUL] %14 = metatype $@thin Float.Type
835+
// CHECK: [ACTIVE] [[ARG3:%.*]] = argument of bb3 : $(Float, Float)
836+
// CHECK: [ACTIVE] (**[[D1:%.*]]**, [[D2:%.*]]) = destructure_tuple [[ARG3]] : $(Float, Float)
837+
// CHECK: [ACTIVE] ([[D1]], **[[D2]]**) = destructure_tuple [[ARG3]] : $(Float, Float)
838+
// CHECK: [USEFUL] %{{.*}} = metatype $@thin Float.Type
839839
// CHECK: [NONE] // function_ref static Float.+ infix(_:_:)
840-
// CHECK: %15 = function_ref @$sSf1poiyS2f_SftFZ : $@convention(method) (Float, Float, @thin Float.Type) -> Float
841-
// CHECK: [ACTIVE] %16 = apply %15(%10, %11, %14) : $@convention(method) (Float, Float, @thin Float.Type) -> Float
840+
// CHECK: %{{.*}} = function_ref @$sSf1poiyS2f_SftFZ : $@convention(method) (Float, Float, @thin Float.Type) -> Float
841+
// CHECK: [ACTIVE] %{{.*}} = apply %{{[0-9]+}}(%{{[0-9]+}}, %{{[0-9]+}}, %{{[0-9]+}}) : $@convention(method) (Float, Float, @thin Float.Type) -> Float
842842
// CHECK: bb4:
843-
// CHECK: [ACTIVE] %18 = argument of bb4 : $Float
843+
// CHECK: [ACTIVE] %{{[0-9]+}} = argument of bb4 : $Float
844844

845845
enum IndirectEnum<T: Differentiable>: Differentiable & AdditiveArithmetic {
846846
case case1(T)

test/AutoDiff/SILOptimizer/derivative_sil.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@ func foo(_ x: Float) -> Float {
4141
// CHECK-SIL: [[ADD_JVP_FN:%.*]] = differentiable_function_extract [jvp] [[ADD_DIFF_FN]]
4242
// CHECK-SIL: [[ADD_RESULT:%.*]] = apply [[ADD_JVP_FN]]([[X]], [[X]], {{.*}})
4343
// CHECK-SIL: ([[ORIG_RES:%.*]], [[ADD_DF:%.*]]) = destructure_tuple [[ADD_RESULT]]
44+
// CHECK-SIL: [[MV_RES:%.*]] = move_value [var_decl] [[ORIG_RES]] : $Float
4445
// CHECK-SIL: [[DF_STRUCT:%.*]] = tuple ([[ADD_DF]] : $@callee_guaranteed (Float, Float) -> Float)
4546
// CHECK-SIL: [[DF_REF:%.*]] = function_ref @fooTJdSpSr : $@convention(thin) (Float, @owned (_: @callee_guaranteed (Float, Float) -> Float)) -> Float
4647
// CHECK-SIL: [[DF_FN:%.*]] = partial_apply [callee_guaranteed] [[DF_REF]]([[DF_STRUCT]])
47-
// CHECK-SIL: [[VJP_RESULT:%.*]] = tuple ([[ORIG_RES]] : $Float, [[DF_FN]] : $@callee_guaranteed (Float) -> Float)
48+
// CHECK-SIL: [[VJP_RESULT:%.*]] = tuple ([[MV_RES]] : $Float, [[DF_FN]] : $@callee_guaranteed (Float) -> Float)
4849
// CHECK-SIL: return [[VJP_RESULT]] : $(Float, @callee_guaranteed (Float) -> Float)
4950
// CHECK-SIL: }
5051

@@ -67,7 +68,7 @@ func foo(_ x: Float) -> Float {
6768
// CHECK-SIL: ([[ORIG_RES:%.*]], [[ADD_PB:%.*]]) = destructure_tuple [[ADD_RESULT]]
6869
// CHECK-SIL: [[PB_REF:%.*]] = function_ref @fooTJpSpSr : $@convention(thin) (Float, @owned @callee_guaranteed (Float) -> (Float, Float)) -> Float
6970
// CHECK-SIL: [[PB_FN:%.*]] = partial_apply [callee_guaranteed] [[PB_REF]]([[ADD_PB]])
70-
// CHECK-SIL: [[VJP_RESULT:%.*]] = tuple ([[ORIG_RES]] : $Float, [[PB_FN]] : $@callee_guaranteed (Float) -> Float)
71+
// CHECK-SIL: [[VJP_RESULT:%.*]] = tuple ([[MV_RES]] : $Float, [[PB_FN]] : $@callee_guaranteed (Float) -> Float)
7172
// CHECK-SIL: return [[VJP_RESULT]] : $(Float, @callee_guaranteed (Float) -> Float)
7273
// CHECK-SIL: }
7374

test/Interop/Cxx/class/function-call-macosx.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ public func testARCWeak() {
2020
// CHECK: sil [ossa] @$s4main26testARCWeakFunctionPointeryyF : $@convention(thin) () -> () {
2121
// CHECK: %[[V0:.*]] = function_ref @_Z9getFnPtr2v : $@convention(c) () -> @convention(c) (@in ARCWeak) -> ()
2222
// CHECK: %[[V1:.*]] = apply %[[V0]]() : $@convention(c) () -> @convention(c) (@in ARCWeak) -> ()
23+
// CHECK: %[[MV1:.*]] = move_value [var_decl] %[[V1]] : $@convention(c) (@in ARCWeak) -> ()
2324
// CHECK: %[[V3:.*]] = alloc_stack $ARCWeak
2425
// CHECK: %[[V6:.*]] = function_ref @_ZN7ARCWeakC1Ev : $@convention(c) () -> @out ARCWeak
2526
// CHECK: apply %[[V6]](%[[V3]]) : $@convention(c) () -> @out ARCWeak
26-
// CHECK: apply %[[V1]](%[[V3]]) : $@convention(c) (@in ARCWeak) -> ()
27+
// CHECK: apply %[[MV1]](%[[V3]]) : $@convention(c) (@in ARCWeak) -> ()
2728
// CHECK-NEXT: dealloc_stack %[[V3]] : $*ARCWeak
29+
// CHECK-NEXT: extend_lifetime %[[MV1]] : $@convention(c) (@in ARCWeak) -> ()
2830
// CHECK-NEXT: %[[V9:.*]] = tuple ()
2931
// CHECK-NEXT: return %[[V9]] : $()
3032

test/Interop/Cxx/foreign-reference/reference-counted-silgen.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import ReferenceCounted
99
// CHECK-NOT: retain
1010
// CHECK-NOT: release
1111
// CHECK-NOT: copy_value
12-
// CHECK-NOT: destroy_value
1312
// CHECK-NOT: begin_borrow
1413
// CHECK-NOT: end_borrow
1514
// CHECK: return

test/SILGen/access_marker_gen.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,9 @@ func testClassInstanceProperties(c: C) {
111111
// CHECK-NEXT: debug_value
112112
// CHECK-NEXT: [[CX:%.*]] = ref_element_addr [[C]] : $C, #C.x
113113
// CHECK-NEXT: [[ACCESS:%.*]] = begin_access [read] [dynamic] [[CX]] : $*Int
114-
// CHECK-NEXT: [[Y:%.*]] = load [trivial] [[ACCESS]]
114+
// CHECK-NEXT: [[L:%.*]] = load [trivial] [[ACCESS]]
115115
// CHECK-NEXT: end_access [[ACCESS]]
116+
// CHECK-NEXT: [[Y:%.*]] = move_value [var_decl] [[L]]
116117
// CHECK-NEXT: debug_value
117118
// CHECK-NEXT: [[CX:%.*]] = ref_element_addr [[C]] : $C, #C.x
118119
// CHECK-NEXT: [[ACCESS:%.*]] = begin_access [modify] [dynamic] [[CX]] : $*Int

test/SILGen/async_conversion.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ actor A: P2 {
4747
// CHECK: hop_to_executor {{.*}} : $MainActor
4848
// CHECK: [[F:%.*]] = function_ref @$s4test11mainActorFnyyF : $@convention(thin) () -> ()
4949
// CHECK: [[THICK_F:%.*]] = thin_to_thick_function [[F]] : $@convention(thin) () -> () to $@callee_guaranteed () -> ()
50-
// CHECK: [[THICK_F_VAR:%.*]] = move_value [var_decl] [[THICK_F]]
50+
// CHECK: [[THICK_F_VAR:%.*]] = move_value [lexical] [var_decl] [[THICK_F]]
5151
// CHECK: [[THICK_F_BORROW:%.*]] = begin_borrow [[THICK_F_VAR]]
5252
// CHECK: [[THICK_F_COPY:%.*]] = copy_value [[THICK_F_BORROW]]
5353
// CHECK: [[THUNK:%.*]] = function_ref @$sIeg_IegH_TR : $@convention(thin) @async (@guaranteed @callee_guaranteed () -> ()) -> ()

test/SILGen/builtins.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -782,8 +782,10 @@ func bindMemory<T>(ptr: Builtin.RawPointer, idx: Builtin.Word, _: T.Type) {
782782
// CHECK-LABEL: sil hidden [ossa] @$s8builtins12rebindMemory{{[_0-9a-zA-Z]*}}F
783783
// CHECK: bb0([[P:%.*]] : $Builtin.RawPointer, [[I:%.*]] : $Builtin.Word, [[T:%.*]] : $@thick T.Type):
784784
// CHECK: [[BIND:%.*]] = bind_memory [[P]] : $Builtin.RawPointer, [[I]] : $Builtin.Word to $*T
785-
// CHECK: [[REBIND:%.*]] = rebind_memory [[P]] : $Builtin.RawPointer to [[BIND]] : $Builtin.Word
786-
// CHECK: %{{.*}} = rebind_memory [[P]] : $Builtin.RawPointer to [[REBIND]] : $Builtin.Word
785+
// CHECK: [[MV1:%.*]] = move_value [var_decl] [[BIND]] : $Builtin.Word
786+
// CHECK: [[REBIND:%.*]] = rebind_memory [[P]] : $Builtin.RawPointer to [[MV1]] : $Builtin.Word
787+
// CHECK: [[MV2:%.*]] = move_value [var_decl] [[REBIND]] : $Builtin.Word
788+
// CHECK: %{{.*}} = rebind_memory [[P]] : $Builtin.RawPointer to [[MV2]] : $Builtin.Word
787789
// CHECK: return {{%.*}} : $()
788790
// CHECK: }
789791
func rebindMemory<T>(ptr: Builtin.RawPointer, idx: Builtin.Word, _: T.Type) {

test/SILGen/cf_members.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ public func foo(_ x: Double) {
1919
// CHECK: [[GLOBALVAR:%.*]] = global_addr @IAMStruct1GlobalVar
2020
// CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[GLOBALVAR]] : $*Double
2121
// CHECK: [[ZZ:%.*]] = load [trivial] [[READ]]
22+
// CHECK: [[MV:%.*]] = move_value [var_decl] [[ZZ]] : $Double
2223
let zz = Struct1.globalVar
2324
// CHECK: [[WRITE:%.*]] = begin_access [modify] [dynamic] [[GLOBALVAR]] : $*Double
24-
// CHECK: assign [[ZZ]] to [[WRITE]]
25+
// CHECK: assign [[MV]] to [[WRITE]]
2526
Struct1.globalVar = zz
2627

2728
// CHECK: [[Z:%.*]] = project_box
@@ -39,7 +40,7 @@ public func foo(_ x: Double) {
3940

4041
// CHECK: [[FN:%.*]] = function_ref @$s10cf_members3fooyySdFSo10IAMStruct1VSdcfu_ : $@convention(thin) (Double) -> Struct1
4142
// CHECK: [[A:%.*]] = thin_to_thick_function [[FN]]
42-
// CHECK: [[MOVED_A:%.*]] = move_value [var_decl] [[A]]
43+
// CHECK: [[MOVED_A:%.*]] = move_value [lexical] [var_decl] [[A]]
4344
// CHECK: [[BORROWED_A:%.*]] = begin_borrow [[MOVED_A]]
4445
// CHECK: [[COPIED_A:%.*]] = copy_value [[BORROWED_A]]
4546
// CHECK: [[BORROWED_A:%.*]] = begin_borrow [[COPIED_A]]
@@ -81,7 +82,7 @@ public func foo(_ x: Double) {
8182
z = c(x)
8283
// CHECK: [[THUNK:%.*]] = function_ref @$s10cf_members3fooyySdFSo10IAMStruct1VSdcADcfu2_ : $@convention(thin) (Struct1) -> @owned @callee_guaranteed (Double) -> Struct1
8384
// CHECK: [[THICK:%.*]] = thin_to_thick_function [[THUNK]]
84-
// CHECK: [[MOVED_THICK:%.*]] = move_value [var_decl] [[THICK]]
85+
// CHECK: [[MOVED_THICK:%.*]] = move_value [lexical] [var_decl] [[THICK]]
8586
// CHECK: [[BORROWED_THICK:%.*]] = begin_borrow [[MOVED_THICK]]
8687
// CHECK: [[COPIED_THICK:%.*]] = copy_value [[BORROWED_THICK]]
8788
let d: (Struct1) -> (Double) -> Struct1 = Struct1.translate(radians:)
@@ -162,7 +163,7 @@ public func foo(_ x: Double) {
162163
var y = Struct1.staticMethod()
163164
// CHECK: [[THUNK:%.*]] = function_ref @$s10cf_members3fooyySdFs5Int32Vycfu8_ : $@convention(thin) () -> Int32
164165
// CHECK: [[I2:%.*]] = thin_to_thick_function [[THUNK]]
165-
// CHECK: [[MOVED_I2:%.*]] = move_value [var_decl] [[I2]]
166+
// CHECK: [[MOVED_I2:%.*]] = move_value [lexical] [var_decl] [[I2]]
166167
// CHECK: [[BORROWED_I2:%.*]] = begin_borrow [[MOVED_I2]]
167168
// CHECK: [[COPIED_I2:%.*]] = copy_value [[BORROWED_I2]]
168169
let i = Struct1.staticMethod

test/SILGen/closure_literal_reabstraction.swift

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,35 +132,41 @@ func reabstractDynamicGenericStaticMemberRef<T: Buttable>(t: T.Type) {
132132
}
133133

134134
// CHECK-LABEL: sil {{.*}} @{{.*}}reabstractExistentialInitializerRef
135+
// CHECK: [[MV:%.*]] = move_value [var_decl] %0 : $@thick any Buttable.Type
135136
// CHECK: [[CLOSURE_FN:%.*]] = function_ref {{.*}}u_
136-
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]](%0)
137+
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]([[MV]])
137138
// CHECK: [[CLOSURE_NE:%.*]] = convert_escape_to_noescape [not_guaranteed] [[CLOSURE]]
138139
// CHECK: apply {{.*}}<Int, any Buttable>([[CLOSURE_NE]])
139140
func reabstractExistentialInitializerRef(butt: any Buttable.Type) {
140141
gen(f: butt.init)
141142
}
142143

143144
// CHECK-LABEL: sil {{.*}} @{{.*}}reabstractExistentialStaticMemberRef
145+
// CHECK: [[MV:%.*]] = move_value [var_decl] %0 : $@thick any Buttable.Type
144146
// CHECK: [[CLOSURE_FN:%.*]] = function_ref {{.*}}u_
145-
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]](%0)
147+
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]([[MV]])
146148
// CHECK: [[CLOSURE_NE:%.*]] = convert_escape_to_noescape [not_guaranteed] [[CLOSURE]]
147149
// CHECK: apply {{.*}}<Int, any Buttable>([[CLOSURE_NE]])
148150
func reabstractExistentialStaticMemberRef(butt: any Buttable.Type) {
149151
gen(f: butt.create)
150152
}
151153

154+
// TODO: The move_value [var_decl]'s here are an unexpected consequence of how SILGen generates reabstractions.
155+
//
152156
// CHECK-LABEL: sil {{.*}} @{{.*}}reabstractClassCompInitializerRefs
153157
func reabstractClassCompInitializerRefs<T>(
154158
butt: any (AbstractGenericButt<T> & Buttable).Type
155159
) {
160+
// CHECK: [[MV1:%.*]] = move_value [var_decl] %0
156161
// CHECK: [[CLOSURE_FN:%.*]] = function_ref {{.*}}u_
157-
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>(%0)
162+
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>([[MV1]])
158163
// CHECK: [[CLOSURE_C:%.*]] = convert_function [[CLOSURE]]
159164
// CHECK: [[CLOSURE_NE:%.*]] = convert_escape_to_noescape [not_guaranteed] [[CLOSURE_C]]
160165
// CHECK: apply {{.*}}<Int, any (AbstractGenericButt<T> & Buttable)>([[CLOSURE_NE]])
161166
gen(f: butt.init(c:))
167+
// CHECK: [[MV2:%.*]] = move_value [var_decl] %0
162168
// CHECK: [[CLOSURE_FN:%.*]] = function_ref {{.*}}u0_
163-
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>(%0)
169+
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>([[MV2]])
164170
// CHECK: [[CLOSURE_C:%.*]] = convert_function [[CLOSURE]]
165171
// CHECK: [[CLOSURE_NE:%.*]] = convert_escape_to_noescape [not_guaranteed] [[CLOSURE_C]]
166172
// CHECK: apply {{.*}}<Int, any (AbstractGenericButt<T> & Buttable)>([[CLOSURE_NE]])
@@ -171,14 +177,16 @@ func reabstractClassCompInitializerRefs<T>(
171177
func reabstractClassCompStaticMemberRefs<T>(
172178
butt: any (AbstractGenericButt<T> & Buttable).Type
173179
) {
180+
// CHECK: [[MV1:%.*]] = move_value [var_decl] %0
174181
// CHECK: [[CLOSURE_FN:%.*]] = function_ref {{.*}}u_
175-
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>(%0)
182+
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>([[MV1]])
176183
// CHECK: [[CLOSURE_C:%.*]] = convert_function [[CLOSURE]]
177184
// CHECK: [[CLOSURE_NE:%.*]] = convert_escape_to_noescape [not_guaranteed] [[CLOSURE_C]]
178185
// CHECK: apply {{.*}}<Int, any (AbstractGenericButt<T> & Buttable)>([[CLOSURE_NE]])
179186
gen(f: butt.create(c:))
187+
// CHECK: [[MV2:%.*]] = move_value [var_decl] %0
180188
// CHECK: [[CLOSURE_FN:%.*]] = function_ref {{.*}}u0_
181-
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>(%0)
189+
// CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CLOSURE_FN]]<T>([[MV2]])
182190
// CHECK: [[CLOSURE_C:%.*]] = convert_function [[CLOSURE]]
183191
// CHECK: [[CLOSURE_NE:%.*]] = convert_escape_to_noescape [not_guaranteed] [[CLOSURE_C]]
184192
// CHECK: apply {{.*}}<Int, any (AbstractGenericButt<T> & Buttable)>([[CLOSURE_NE]])

0 commit comments

Comments
 (0)