Author: Utkarsh Saxena Date: 2026-07-15T11:35:19Z New Revision: dadccf8e6ddb9d87f5b48431a0417dc7b39d9742
URL: https://github.com/llvm/llvm-project/commit/dadccf8e6ddb9d87f5b48431a0417dc7b39d9742 DIFF: https://github.com/llvm/llvm-project/commit/dadccf8e6ddb9d87f5b48431a0417dc7b39d9742.diff LOG: [LifetimeSafety] Suppress false field-escape warnings in destructors (#209614) Added: Modified: clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp clang/test/Sema/LifetimeSafety/dangling-field.cpp Removed: ################################################################################ diff --git a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp index 095bee8135c20..dd2bffe22f4f5 100644 --- a/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp +++ b/clang/lib/Analysis/LifetimeSafety/FactsGenerator.cpp @@ -856,9 +856,12 @@ void FactsGenerator::handleFullExprCleanup( } void FactsGenerator::handleExitBlock() { + bool IsDestructor = isa_and_nonnull<CXXDestructorDecl>(AC.getDecl()); for (const Origin &O : FactMgr.getOriginMgr().getOrigins()) - if (auto *FD = dyn_cast_if_present<FieldDecl>(O.getDecl())) - // Create FieldEscapeFacts for all field origins that remain live at exit. + // Create FieldEscapeFacts for all field origins that remain live at exit. + // Fields in destructors do not escape since the object is being destroyed. + if (auto *FD = dyn_cast_if_present<FieldDecl>(O.getDecl()); + FD && !IsDestructor) EscapesInCurrentBlock.push_back( FactMgr.createFact<FieldEscapeFact>(O.ID, FD)); else if (auto *VD = dyn_cast_if_present<VarDecl>(O.getDecl())) { diff --git a/clang/test/Sema/LifetimeSafety/dangling-field.cpp b/clang/test/Sema/LifetimeSafety/dangling-field.cpp index b1eb31c4ee486..bc73c4f7e8644 100644 --- a/clang/test/Sema/LifetimeSafety/dangling-field.cpp +++ b/clang/test/Sema/LifetimeSafety/dangling-field.cpp @@ -245,3 +245,13 @@ struct HasUniquePtrField { } }; } // namespace MakeUnique + +namespace DtorNoWarn { +struct DtorSet { + std::string_view view; + ~DtorSet() { + std::string s; + view = s; + } +}; +} // namespace DtorNoWarn _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
