Skip to content

Commit 2d29049

Browse files
committed
SILGen: Add test for partial_apply return type
1 parent 0b4e3df commit 2d29049

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

test/SILGen/dynamic_lookup.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,33 @@ func downcast(var obj: AnyObject) -> X {
201201
// CHECK-NEXT: return [[X]] : $X
202202
return obj as! X
203203
}
204+
205+
@objc class Juice { }
206+
207+
@objc protocol Fruit {
208+
optional var juice: Juice { get }
209+
}
210+
211+
// CHECK-LABEL: sil hidden @_TF14dynamic_lookup7consumeFPS_5Fruit_T_
212+
// CHECK: bb0(%0 : $Fruit):
213+
// CHECK: [[BOX:%.*]] = alloc_stack $Optional<Juice>
214+
// CHECK: dynamic_method_br [[SELF:%.*]] : $@opened("{{.*}}") Fruit, #Fruit.juice!getter.1.foreign, bb1, bb2
215+
216+
// CHECK: bb1([[FN:%.*]] : $@convention(objc_method) (@opened("{{.*}}") Fruit) -> @autoreleased Juice):
217+
// CHECK: [[METHOD:%.*]] = partial_apply [[FN]]([[SELF]]) : $@convention(objc_method) (@opened("{{.*}}") Fruit) -> @autoreleased Juice
218+
// CHECK: [[RESULT:%.*]] = apply [[METHOD]]() : $@callee_owned () -> @owned Juice
219+
// CHECK: [[PAYLOAD:%.*]] = init_enum_data_addr [[BOX]] : $*Optional<Juice>, #Optional.Some!enumelt.1
220+
// CHECK: store [[RESULT]] to [[PAYLOAD]]
221+
// CHECK: inject_enum_addr [[BOX]] : $*Optional<Juice>, #Optional.Some!enumelt.1
222+
// CHECK: br bb3
223+
224+
// CHECK: bb2:
225+
// CHECK: inject_enum_addr [[BOX]] : $*Optional<Juice>, #Optional.None!enumelt
226+
// CHECK: br bb3
227+
228+
// CHECK: bb3:
229+
// CHECK: return
230+
231+
func consume(fruit: Fruit) {
232+
_ = fruit.juice
233+
}

0 commit comments

Comments
 (0)