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@-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() { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
