@@ -181,20 +181,28 @@ class C {}
181181class D { }
182182
183183// CHECK-LABEL: sil hidden @_T08builtins22class_to_native_object{{[_0-9a-zA-Z]*}}F
184+ // CHECK: bb0([[ARG:%.*]] : $C):
185+ // CHECK-NEXT: debug_value
186+ // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
187+ // CHECK-NEXT: [[COPY_BORROWED_ARG:%.*]] = copy_value [[BORROWED_ARG]]
188+ // CHECK-NEXT: [[OBJ:%.*]] = unchecked_ref_cast [[COPY_BORROWED_ARG:%.*]] to $Builtin.NativeObject
189+ // CHECK-NEXT: end_borrow [[BORROWED_ARG]] from [[ARG]]
190+ // CHECK-NEXT: destroy_value [[ARG]]
191+ // CHECK-NEXT: return [[OBJ]]
184192func class_to_native_object( _ c: C ) -> Builtin . NativeObject {
185- // CHECK: [[OBJ:%.*]] = unchecked_ref_cast [[C:%.*]] to $Builtin.NativeObject
186- // CHECK-NOT: destroy_value [[C]]
187- // CHECK-NOT: destroy_value [[OBJ]]
188- // CHECK: return [[OBJ]]
189193 return Builtin . castToNativeObject ( c)
190194}
191195
192196// CHECK-LABEL: sil hidden @_T08builtins23class_to_unknown_object{{[_0-9a-zA-Z]*}}F
197+ // CHECK: bb0([[ARG:%.*]] : $C):
198+ // CHECK-NEXT: debug_value
199+ // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
200+ // CHECK-NEXT: [[COPY_BORROWED_ARG:%.*]] = copy_value [[BORROWED_ARG]]
201+ // CHECK-NEXT: [[OBJ:%.*]] = unchecked_ref_cast [[COPY_BORROWED_ARG:%.*]] to $Builtin.UnknownObject
202+ // CHECK-NEXT: end_borrow [[BORROWED_ARG]] from [[ARG]]
203+ // CHECK-NEXT: destroy_value [[ARG]]
204+ // CHECK-NEXT: return [[OBJ]]
193205func class_to_unknown_object( _ c: C ) -> Builtin . UnknownObject {
194- // CHECK: [[OBJ:%.*]] = unchecked_ref_cast [[C:%.*]] to $Builtin.UnknownObject
195- // CHECK-NOT: destroy_value [[C]]
196- // CHECK-NOT: destroy_value [[OBJ]]
197- // CHECK: return [[OBJ]]
198206 return Builtin . castToUnknownObject ( c)
199207}
200208
@@ -217,9 +225,16 @@ func class_archetype_to_unknown_object<T : C>(_ t: T) -> Builtin.UnknownObject {
217225}
218226
219227// CHECK-LABEL: sil hidden @_T08builtins34class_existential_to_native_object{{[_0-9a-zA-Z]*}}F
228+ // CHECK: bb0([[ARG:%.*]] : $ClassProto):
229+ // CHECK-NEXT: debug_value
230+ // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
231+ // CHECK-NEXT: [[COPY_BORROWED_ARG:%.*]] = copy_value [[BORROWED_ARG]]
232+ // CHECK-NEXT: [[REF:%[0-9]+]] = open_existential_ref [[COPY_BORROWED_ARG]] : $ClassProto
233+ // CHECK-NEXT: [[PTR:%[0-9]+]] = unchecked_ref_cast [[REF]] : $@opened({{.*}}) ClassProto to $Builtin.NativeObject
234+ // CHECK-NEXT: end_borrow [[BORROWED_ARG]] from [[ARG]]
235+ // CHECK-NEXT: destroy_value [[ARG]]
236+ // CHECK-NEXT: return [[PTR]]
220237func class_existential_to_native_object( _ t: ClassProto ) -> Builtin . NativeObject {
221- // CHECK: [[REF:%[0-9]+]] = open_existential_ref [[T:%[0-9]+]] : $ClassProto
222- // CHECK: [[PTR:%[0-9]+]] = unchecked_ref_cast [[REF]] : $@opened({{.*}}) ClassProto to $Builtin.NativeObject
223238 return Builtin . castToNativeObject ( t)
224239}
225240
0 commit comments