[SIL] Key consume addr checking off var_decl attr.

Previously, the lexical attribute on allock_stack instructions was used.
This doesn't work for values without lexical lifetimes which are
consumed, e.g. stdlib CoW types.  Here, the new var_decl attribute on
alloc_stack is keyed off of instead.  This flag encodes exactly that a
value corresponds to a source-level VarDecl, which is the condition
under which checking needs to run.
This commit is contained in:
Nate Chandler
2024-03-08 21:12:00 -08:00
parent 08a832b803
commit a54a8ddaa3
5 changed files with 24 additions and 19 deletions

View File

@@ -2475,8 +2475,8 @@ class ConsumeOperatorCopyableAddressesCheckerPass
++ii;
if (auto *asi = dyn_cast<AllocStackInst>(inst)) {
// Only check lexical alloc_stack that were not emitted as vars.
if (asi->isLexical()) {
// Only check var_decl alloc_stack insts.
if (asi->isFromVarDecl()) {
LLVM_DEBUG(llvm::dbgs() << "Found lexical alloc_stack: " << *asi);
addressesToCheck.insert(asi);
continue;