[clang] dadccf8 - [LifetimeSafety] Suppress false field-escape warnings in destructors (#209614)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 15 04:35:24 PDT 2026
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
More information about the cfe-commits
mailing list