Fix BorrowingOperand::visitScopeEndingUses() invariants.

This API only makes sense for a scoped borrow-introducer such as:
- reborrow
- owned mark_dependence

Borrowing operands that forward guaranteed values do not have scope-ending uses.
This commit is contained in:
Andrew Trick
2025-02-25 01:12:26 -08:00
parent 6fa0b2ec98
commit 1cb4d50877
3 changed files with 26 additions and 9 deletions

View File

@@ -2022,10 +2022,13 @@ visitRecursivelyLifetimeEndingUses(
// the dependent value.
bool MarkDependenceInst::visitNonEscapingLifetimeEnds(
llvm::function_ref<bool (Operand *)> visitScopeEnd,
llvm::function_ref<bool (Operand *)> visitUnknownUse) const {
llvm::function_ref<bool (Operand *)> visitUnknownUse) {
assert(getFunction()->hasOwnership() && isNonEscaping()
&& "only meaningful for nonescaping dependencies");
assert(getType().isObject() && "lifetime ends only exist for values");
assert(getOwnershipKind() == OwnershipKind::Owned
&& getType().isEscapable(*getFunction())
&& "only correct for owned escapable values");
bool noUsers = true;
if (!visitRecursivelyLifetimeEndingUses(this, noUsers, visitScopeEnd,
visitUnknownUse)) {