@@ -282,3 +282,52 @@ sil_vtable SuperBase {
282
282
sil_vtable SuperSub {
283
283
}
284
284
285
+ class X {
286
+ @objc func foo() -> BitfieldOne
287
+ }
288
+ sil_vtable X {}
289
+
290
+ sil @$S22big_types_corner_cases1XC3fooSo11BitfieldOneVyFTo : $@convention(objc_method) (X) -> BitfieldOne {
291
+ bb0(%1 : $X):
292
+ %4 = function_ref @$getLargeObjCType : $@convention(thin) () -> BitfieldOne
293
+ %7 = apply %4() : $@convention(thin) () -> BitfieldOne
294
+ return %7 : $BitfieldOne
295
+ }
296
+
297
+ sil @$getLargeObjCType : $@convention(thin) () -> BitfieldOne
298
+
299
+ // CHECK-LABAL: define {{.*}} swiftcc void @"$crash_on_objc_apply"(%objc_object*)
300
+ // CHECK: entry:
301
+ // CHECK: [[LOADS:%.*]] = load i8*, i8** @"\01L_selector(foo)"
302
+ // CHECK: [[RESS:%.*]] = load i8*, i8** @"\01L_selector(respondsToSelector:)"
303
+ // CHECK: call i1 bitcast (void ()* @objc_msgSend to i1 (%objc_object*, i8*, i8*)*)(%objc_object* %0, i8* [[RESS]], i8* [[LOADS]])
304
+ sil @$crash_on_objc_apply : $@convention(thin) (@guaranteed AnyObject) -> () {
305
+ // %0 // users: %2, %1
306
+ bb0(%0 : $AnyObject):
307
+ debug_value %0 : $AnyObject, let, name "object", argno 1
308
+ %2 = open_existential_ref %0 : $AnyObject to $@opened("E5D03528-36AD-11E8-A0AB-D0817AD47398") AnyObject
309
+ strong_retain %2 : $@opened("E5D03528-36AD-11E8-A0AB-D0817AD47398") AnyObject
310
+ %4 = alloc_stack $Optional<BitfieldOne>
311
+ dynamic_method_br %2 : $@opened("E5D03528-36AD-11E8-A0AB-D0817AD47398") AnyObject, #X.foo!1.foreign, bb1, bb2
312
+
313
+ bb1(%6 : $@convention(objc_method) (@opened("E5D03528-36AD-11E8-A0AB-D0817AD47398") AnyObject) -> BitfieldOne): // Preds: bb0
314
+ strong_retain %2 : $@opened("E5D03528-36AD-11E8-A0AB-D0817AD47398") AnyObject
315
+ %8 = partial_apply [callee_guaranteed] %6(%2) : $@convention(objc_method) (@opened("E5D03528-36AD-11E8-A0AB-D0817AD47398") AnyObject) -> BitfieldOne
316
+ %9 = apply %8() : $@callee_guaranteed () -> BitfieldOne
317
+ %10 = init_enum_data_addr %4 : $*Optional<BitfieldOne>, #Optional.some!enumelt.1
318
+ store %9 to %10 : $*BitfieldOne
319
+ inject_enum_addr %4 : $*Optional<BitfieldOne>, #Optional.some!enumelt.1
320
+ strong_release %8 : $@callee_guaranteed () -> BitfieldOne
321
+ br bb3
322
+
323
+ bb2: // Preds: bb0
324
+ inject_enum_addr %4 : $*Optional<BitfieldOne>, #Optional.none!enumelt
325
+ br bb3
326
+
327
+ bb3: // Preds: bb2 bb1
328
+ %17 = load %4 : $*Optional<BitfieldOne>
329
+ dealloc_stack %4 : $*Optional<BitfieldOne>
330
+ strong_release %2 : $@opened("E5D03528-36AD-11E8-A0AB-D0817AD47398") AnyObject
331
+ %20 = tuple ()
332
+ return %20 : $()
333
+ } // end sil function '$crash_on_objc_apply'
0 commit comments