Skip to content

Commit 6975663

Browse files
authored
Merge pull request swiftlang#79731 from atrick/fix-markdep-walk
Fix TransitiveAddressWalker with mark_dependence
2 parents ee2450f + 45cac09 commit 6975663

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

include/swift/SIL/AddressWalker.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,11 @@ TransitiveAddressWalker<Impl>::walk(SILValue projectedAddress) && {
293293
}
294294

295295
if (auto *mdi = dyn_cast<MarkDependenceInst>(user)) {
296-
// If this is the base, just treat it as a liveness use.
296+
// TODO: continue walking the dependent value, which may not be an
297+
// address. See AddressUtils.swift. Until that is implemented, this must
298+
// be considered a pointer escape.
297299
if (op->get() == mdi->getBase()) {
300+
meet(AddressUseKind::PointerEscape);
298301
callVisitUse(op);
299302
continue;
300303
}

test/SILOptimizer/ownership_liveness_unit.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,7 +1798,7 @@ bb0(%0 : @guaranteed $D, %1 : @guaranteed $C):
17981798
// CHECK-NEXT: bb0: LiveWithin
17991799
// CHECK-NEXT: regular user: %{{.*}} = ref_element_addr %0 : $D, #D.object
18001800
// CHECK-NEXT: regular user: %{{.*}} = mark_dependence [nonescaping] %{{.*}} : $*C on %{{.*}} : $*C
1801-
// CHECK-NEXT: Complete liveness
1801+
// CHECK-NEXT: Incomplete liveness: Escaping address
18021802
// CHECK-NEXT: last user: %{{.*}} = mark_dependence [nonescaping] %{{.*}} : $*C on %{{.*}} : $*C
18031803
// CHECK-NEXT: testInteriorMarkDepAddressBase: interior_liveness with: %0
18041804

@@ -1832,7 +1832,7 @@ bb0(%0 : @guaranteed $D, %1 : @guaranteed $D):
18321832
// CHECK-NEXT: regular user: %{{.*}} = ref_element_addr %0 : $D, #D.object
18331833
// CHECK-NEXT: regular user: %{{.*}} = mark_dependence [nonescaping] %{{.*}} : $C on %{{.*}} : $*C
18341834
// CHECK-NEXT: regular user: end_access %{{.*}} : $*C
1835-
// CHECK-NEXT: Complete liveness
1835+
// CHECK-NEXT: Incomplete liveness: Escaping address
18361836
// CHECK-NEXT: last user: end_access %{{.*}} : $*C
18371837
// CHECK-NEXT: testInteriorMarkDepAddressDependent: interior_liveness with: %0
18381838

0 commit comments

Comments
 (0)