@@ -274,6 +274,44 @@ bb0(%0 : @guaranteed $C):
274274 return %99 : $()
275275}
276276
277+ // CHECK-LABEL: testInteriorUnconditionalAddrCast: interior-liveness with: %1
278+ // CHECK: Interior liveness: %1 = argument of bb0 : $D
279+ // CHECK-NEXT: bb0: LiveWithin
280+ // CHECK-NEXT: regular user: [[FIELD:%.*]] = ref_element_addr %1 : $D, #D.object
281+ // CHECK-NEXT: regular user: unconditional_checked_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
282+ // CHECK-NEXT: regular user: copy_addr [take] %4 to [init] [[FIELD]] : $*C
283+ // CHECK-NEXT: regular user: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
284+ // CHECK-NEXT: Complete liveness
285+ // CHECK-NEXT: Unenclosed phis {
286+ // CHECK-NEXT: }
287+ // CHECK-NEXT: last user: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
288+ // CHECK-NEXT: testInteriorUnconditionalAddrCast: interior-liveness with: %1
289+
290+ // CHECK-LABEL: testInteriorUnconditionalAddrCast: interior_liveness_swift with: %1
291+ // CHECK: Interior liveness: %1 = argument of bb0 : $D
292+ // CHECK-NEXT: begin: [[FIELD]] = ref_element_addr %1 : $D, #D.object
293+ // CHECK-NEXT: ends: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
294+ // CHECK-NEXT: exits:
295+ // CHECK-NEXT: interiors: copy_addr [take] %4 to [init] [[FIELD]] : $*C
296+ // CHECK-NEXT: unconditional_checked_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
297+ // CHECK-NEXT: [[FIELD]] = ref_element_addr %1 : $D, #D.object
298+ // CHECK-NEXT: Unenclosed phis {
299+ // CHECK-NEXT: }
300+ // CHECK-NEXT: last user: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
301+ // CHECK-NEXT: testInteriorUnconditionalAddrCast: interior_liveness_swift with: %1
302+ sil [ossa] @testInteriorUnconditionalAddrCast : $@convention(thin) (@guaranteed D) -> @out D {
303+ bb0(%0 : $*D, %1 : @guaranteed $D):
304+ specify_test "interior-liveness %1"
305+ specify_test "interior_liveness_swift %1"
306+ %c1 = ref_element_addr %1 : $D, #D.object
307+ unconditional_checked_cast_addr C in %c1 : $*C to D in %0 : $*D
308+ %c2 = unchecked_addr_cast %0 : $*D to $*C
309+ copy_addr [take] %c2 to [init] %c1 : $*C
310+ unchecked_ref_cast_addr C in %c1 : $*C to D in %0 : $*D
311+ %99 = tuple()
312+ return %99 : $()
313+ }
314+
277315// CHECK-LABEL: testInteriorReborrow: interior-liveness with: %borrow
278316// CHECK: Complete liveness
279317// CHECK-NEXT: Unenclosed phis {
0 commit comments