@@ -42,6 +42,40 @@ extension Hive {
42
42
convenience init ( otherQueen other: Bee ) {
43
43
self . init ( queen: other)
44
44
}
45
+
46
+ // CHECK-LABEL: sil hidden [ossa] @$sSo4HiveC17objc_factory_initE15otherFlakyQueenABSo3BeeC_tKcfC
47
+ // CHECK: bb0([[QUEEN:%.*]] : @owned $Bee, [[META:%.*]] : $@thick Hive.Type):
48
+ // CHECK: [[SELF_BOX:%.*]] = alloc_box ${ var Hive }, let, name "self"
49
+ // CHECK: [[MU:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
50
+ // CHECK: [[PB_BOX:%.*]] = project_box [[MU]] : ${ var Hive }, 0
51
+ // CHECK: [[FOREIGN_ERROR_STACK:%.*]] = alloc_stack $Optional<NSError>
52
+ // CHECK: [[OBJC_META:%[0-9]+]] = thick_to_objc_metatype [[META]] : $@thick Hive.Type to $@objc_metatype Hive.Type
53
+ // CHECK: [[BORROWED_QUEEN:%.*]] = begin_borrow [[QUEEN]]
54
+ // CHECK: [[COPIED_BORROWED_QUEEN:%.*]] = copy_value [[BORROWED_QUEEN]]
55
+ // CHECK: [[OPT_COPIED_BORROWED_QUEEN:%.*]] = enum $Optional<Bee>, #Optional.some!enumelt.1, [[COPIED_BORROWED_QUEEN]]
56
+ // CHECK: [[FACTORY:%[0-9]+]] = objc_method [[OBJC_META]] : $@objc_metatype Hive.Type, #Hive.init!allocator.1.foreign : (Hive.Type) -> (Bee?) throws -> Hive, $@convention(objc_method) (Optional<Bee>, Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, @objc_metatype Hive.Type) -> @autoreleased Optional<Hive> // user: %25
57
+ // CHECK: [[ERROR_PTR_STACK:%.*]] = alloc_stack $AutoreleasingUnsafeMutablePointer<Optional<NSError>>
58
+ // CHECK: [[ERROR_PTR:%.*]] = load [trivial] [[ERROR_PTR_STACK]]
59
+ // CHECK: [[OPT_ERROR_PTR:%.*]] = enum $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, #Optional.some!enumelt.1, [[ERROR_PTR]]
60
+ // CHECK: [[OPT_NEW_HIVE:%.*]] = apply [[FACTORY]]([[OPT_COPIED_BORROWED_QUEEN]], [[OPT_ERROR_PTR]], [[OBJC_META]]) : $@convention(objc_method) (Optional<Bee>, Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, @objc_metatype Hive.Type) -> @autoreleased Optional<Hive>
61
+ // CHECK: switch_enum [[OPT_NEW_HIVE]] : $Optional<Hive>, case #Optional.some!enumelt.1: [[NORMAL_BB:bb[0-9]+]], case #Optional.none!enumelt: [[ERROR_BB:bb[0-9]+]] // id: %34
62
+ //
63
+ // CHECK: bb1([[HIVE:%.*]] : @owned $Hive):
64
+ // CHECK: assign [[HIVE]] to [[PB_BOX]]
65
+ // CHECK: dealloc_stack [[FOREIGN_ERROR_STACK]]
66
+ // CHECK: [[HIVE_COPY:%.*]] = load [copy] [[PB_BOX]]
67
+ // CHECK: return [[HIVE_COPY]]
68
+ // CHECK: bb2:
69
+ // CHECK: [[OPTIONAL_NSERROR:%.*]] = load [take] [[FOREIGN_ERROR_STACK]] : $*Optional<NSError>
70
+ // CHECK: [[CONVERT_NSERROR_TO_ERROR_FUNC:%.*]] = function_ref @$s10Foundation22_convertNSErrorToErrorys0E0_pSo0C0CSgF : $@convention(thin) (@guaranteed Optional<NSError>) -> @owned Error
71
+ // CHECK: [[ERROR:%.*]] = apply [[CONVERT_NSERROR_TO_ERROR_FUNC]]([[OPTIONAL_NSERROR]]) : $@convention(thin) (@guaranteed Optional<NSError>) -> @owned Error
72
+ // CHECK: "willThrow"([[ERROR]] : $Error)
73
+ // CHECK: dealloc_stack [[FOREIGN_ERROR_STACK]]
74
+ // CHECK: throw [[ERROR]] : $Error
75
+ // CHECK: } // end sil function '$sSo4HiveC17objc_factory_initE15otherFlakyQueenABSo3BeeC_tKcfC'
76
+ convenience init ( otherFlakyQueen other: Bee ) throws {
77
+ try self . init ( flakyQueen: other)
78
+ }
45
79
}
46
80
47
81
extension SomeClass {
0 commit comments