Fix SILMem2Reg while marking end_borrow of store_borrow as deinit point

Fixes rdar://99229461
This commit is contained in:
Meghana Gupta
2022-08-27 20:56:12 -07:00
parent 150aca3db7
commit e0f8711b23
2 changed files with 35 additions and 2 deletions

View File

@@ -795,14 +795,15 @@ SILInstruction *StackAllocationPromoter::promoteAllocationInBlock(
continue;
}
if (!runningVals.hasValue()) {
assert(!deinitializationPoints[blockPromotingWithin]);
deinitializationPoints[blockPromotingWithin] = inst;
continue;
}
if (sbi->getSrc() != runningVals->value.stored) {
continue;
}
// Mark storage as invalid and mark end_borrow as a deinit point.
runningVals->isStorageValid = false;
assert(!deinitializationPoints[blockPromotingWithin]);
deinitializationPoints[blockPromotingWithin] = inst;
if (!canEndLexicalLifetime(runningVals->value)) {
continue;
}