[clang] a2472bb - [LifetimeSafety] Enable temporary destructors in intra-TU analysis (#176812)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 20 05:20:56 PST 2026
Author: Utkarsh Saxena
Date: 2026-01-20T14:20:51+01:00
New Revision: a2472bb4d6e0b2fd19a30dcec28ff251dd9afc74
URL: https://github.com/llvm/llvm-project/commit/a2472bb4d6e0b2fd19a30dcec28ff251dd9afc74
DIFF: https://github.com/llvm/llvm-project/commit/a2472bb4d6e0b2fd19a30dcec28ff251dd9afc74.diff
LOG: [LifetimeSafety] Enable temporary destructors in intra-TU analysis (#176812)
Enable implicit and temporary destructors in lifetime safety analysis CFG build options.
Updated test cases to verify the changes:
- Added a new test run configuration in `warn-lifetime-analysis-nocfg.cpp` that includes the experimental lifetime safety inference and TU analysis flags
- Modified `warn-lifetime-safety.cpp` to also verify both function-only and TU-level analysis
Note that we miss instantiation chain in the diagnostics in intra-TU mode of the analysis!
Added:
Modified:
clang/lib/Sema/AnalysisBasedWarnings.cpp
clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
clang/test/Sema/warn-lifetime-safety.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp
index ed743bf192c10..793ece2c937de 100644
--- a/clang/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp
@@ -2951,6 +2951,8 @@ LifetimeSafetyTUAnalysis(Sema &S, TranslationUnitDecl *TU,
AnalysisDeclContext AC(nullptr, FD);
AC.getCFGBuildOptions().PruneTriviallyFalseEdges = false;
AC.getCFGBuildOptions().AddLifetime = true;
+ AC.getCFGBuildOptions().AddImplicitDtors = true;
+ AC.getCFGBuildOptions().AddTemporaryDtors = true;
AC.getCFGBuildOptions().setAllAlwaysAdd();
if (AC.getCFG())
runLifetimeSafetyAnalysis(AC, &Reporter, LSStats, S.CollectStats);
@@ -3065,9 +3067,6 @@ void clang::sema::AnalysisBasedWarnings::IssueWarnings(
S.getLangOpts().EnableLifetimeSafety &&
!S.getLangOpts().EnableLifetimeSafetyTUAnalysis;
- if (EnableLifetimeSafetyAnalysis)
- AC.getCFGBuildOptions().AddLifetime = true;
-
// Force that certain expressions appear as CFGElements in the CFG. This
// is used to speed up various analyses.
// FIXME: This isn't the right factoring. This is here for initial
@@ -3088,9 +3087,8 @@ void clang::sema::AnalysisBasedWarnings::IssueWarnings(
.setAlwaysAdd(Stmt::ImplicitCastExprClass)
.setAlwaysAdd(Stmt::UnaryOperatorClass);
}
- if (EnableLifetimeSafetyAnalysis) {
+ if (EnableLifetimeSafetyAnalysis)
AC.getCFGBuildOptions().AddLifetime = true;
- }
// Install the logical handler.
std::optional<LogicalErrorHandler> LEH;
diff --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
index cb06ec4930907..86634e70eb4eb 100644
--- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
+++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
@@ -1,5 +1,6 @@
// RUN: %clang_cc1 -fsyntax-only -Wdangling -Wdangling-field -Wreturn-stack-address -verify %s
// RUN: %clang_cc1 -fsyntax-only -fexperimental-lifetime-safety -Wexperimental-lifetime-safety -Wno-dangling -verify=cfg %s
+// RUN: %clang_cc1 -fsyntax-only -fexperimental-lifetime-safety -fexperimental-lifetime-safety-inference -fexperimental-lifetime-safety-tu-analysis -Wexperimental-lifetime-safety -Wno-dangling -verify=cfg %s
#include "Inputs/lifetime-analysis.h"
diff --git a/clang/test/Sema/warn-lifetime-safety.cpp b/clang/test/Sema/warn-lifetime-safety.cpp
index 253d4ccd2b776..11c86d23d89f6 100644
--- a/clang/test/Sema/warn-lifetime-safety.cpp
+++ b/clang/test/Sema/warn-lifetime-safety.cpp
@@ -1,4 +1,5 @@
-// RUN: %clang_cc1 -fsyntax-only -fexperimental-lifetime-safety -Wexperimental-lifetime-safety -Wno-dangling -verify %s
+// RUN: %clang_cc1 -fsyntax-only -fexperimental-lifetime-safety -Wexperimental-lifetime-safety -Wno-dangling -verify=expected,function %s
+// RUN: %clang_cc1 -fsyntax-only -fexperimental-lifetime-safety -fexperimental-lifetime-safety-inference -fexperimental-lifetime-safety-tu-analysis -Wexperimental-lifetime-safety -Wno-dangling -verify %s
#include "Inputs/lifetime-analysis.h"
@@ -949,7 +950,7 @@ View lifetimebound_return_by_value_param_template(T t) {
// expected-note at -1 {{returned here}}
}
void use_lifetimebound_return_by_value_param_template() {
- lifetimebound_return_by_value_param_template(MyObj{}); // expected-note {{in instantiation of}}
+ lifetimebound_return_by_value_param_template(MyObj{}); // function-note {{in instantiation of}}
}
void lambda_uar_param() {
More information about the cfe-commits
mailing list