@@ -181,20 +181,28 @@ class C {}
181
181
class D { }
182
182
183
183
// 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]]
184
192
func 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]]
189
193
return Builtin . castToNativeObject ( c)
190
194
}
191
195
192
196
// 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]]
193
205
func 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]]
198
206
return Builtin . castToUnknownObject ( c)
199
207
}
200
208
@@ -217,9 +225,16 @@ func class_archetype_to_unknown_object<T : C>(_ t: T) -> Builtin.UnknownObject {
217
225
}
218
226
219
227
// 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]]
220
237
func 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
223
238
return Builtin . castToNativeObject ( t)
224
239
}
225
240
0 commit comments