https://github.com/usx95 created https://github.com/llvm/llvm-project/pull/176821
None >From a68c5bf9acf132c3fa0d78071d59d34f4868ca6f Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <[email protected]> Date: Mon, 19 Jan 2026 21:05:46 +0000 Subject: [PATCH] Remove experimental from lifetime-safety --- clang/include/clang/Basic/DiagnosticGroups.td | 12 ++++++------ clang/include/clang/Basic/LangOptions.def | 6 +++--- clang/include/clang/Options/Options.td | 4 ++-- clang/lib/Sema/AnalysisBasedWarnings.cpp | 12 +++++++++++- clang/test/Analysis/LifetimeSafety/benchmark.py | 2 +- clang/test/Sema/warn-lifetime-analysis-nocfg.cpp | 4 ++-- clang/test/Sema/warn-lifetime-safety-dataflow.cpp | 2 +- .../warn-lifetime-safety-missing-origin-stats.cpp | 2 +- clang/test/Sema/warn-lifetime-safety-suggestions.cpp | 2 +- clang/test/Sema/warn-lifetime-safety.cpp | 4 ++-- 10 files changed, 30 insertions(+), 20 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index de1d1e13ea712..34624dd3eed3a 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -533,20 +533,20 @@ def Dangling : DiagGroup<"dangling", [DanglingAssignment, DanglingGsl, ReturnStackAddress]>; -def LifetimeSafetyPermissive : DiagGroup<"experimental-lifetime-safety-permissive">; -def LifetimeSafetyStrict : DiagGroup<"experimental-lifetime-safety-strict">; -def LifetimeSafety : DiagGroup<"experimental-lifetime-safety", +def LifetimeSafetyPermissive : DiagGroup<"lifetime-safety-permissive">; +def LifetimeSafetyStrict : DiagGroup<"lifetime-safety-strict">; +def LifetimeSafety : DiagGroup<"lifetime-safety", [LifetimeSafetyPermissive, LifetimeSafetyStrict]> { code Documentation = [{ Experimental warnings to detect use-after-free and related temporal safety bugs based on lifetime safety analysis. }]; } def LifetimeSafetyCrossTUSuggestions - : DiagGroup<"experimental-lifetime-safety-cross-tu-suggestions">; + : DiagGroup<"lifetime-safety-cross-tu-suggestions">; def LifetimeSafetyIntraTUSuggestions - : DiagGroup<"experimental-lifetime-safety-intra-tu-suggestions">; + : DiagGroup<"lifetime-safety-intra-tu-suggestions">; def LifetimeSafetySuggestions - : DiagGroup<"experimental-lifetime-safety-suggestions", + : DiagGroup<"lifetime-safety-suggestions", [LifetimeSafetyCrossTUSuggestions, LifetimeSafetyIntraTUSuggestions]> { code Documentation = [{ diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 36fec24638363..2cccaef24a63a 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -501,12 +501,12 @@ LANGOPT(CheckConstexprFunctionBodies, 1, 1, Benign, LANGOPT(BoundsSafety, 1, 0, NotCompatible, "Bounds safety extension for C") -LANGOPT(EnableLifetimeSafety, 1, 0, NotCompatible, "Experimental lifetime safety analysis for C++") +LANGOPT(EnableLifetimeSafety, 1, 1, NotCompatible, "Lifetime safety analysis for C++") -LANGOPT(EnableLifetimeSafetyInference, 1, 0, NotCompatible, "Experimental lifetime safety inference analysis for C++") +LANGOPT(EnableLifetimeSafetyInference, 1, 0, NotCompatible, "Lifetime safety inference analysis for C++") // TODO: Remove flag and default to end-of-TU analysis for lifetime safety after performance validation. -LANGOPT(EnableLifetimeSafetyTUAnalysis, 1, 0, NotCompatible, "Experimental lifetime safety at translation-unit end, analyzing functions in call graph post-order for C++") +LANGOPT(EnableLifetimeSafetyTUAnalysis, 1, 0, NotCompatible, "Lifetime safety at translation-unit end, analyzing functions in call graph post-order for C++") LANGOPT(PreserveVec3Type, 1, 0, NotCompatible, "Preserve 3-component vector type") diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index 188739e72434a..b84f01cb8f252 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -1961,7 +1961,7 @@ defm bounds_safety : BoolFOption< " experimental bounds safety extension for C">>; defm lifetime_safety : BoolFOption< - "experimental-lifetime-safety", + "lifetime-safety", LangOpts<"EnableLifetimeSafety">, DefaultFalse, PosFlag<SetTrue, [], [CC1Option], "Enable">, NegFlag<SetFalse, [], [CC1Option], "Disable">, @@ -1969,7 +1969,7 @@ defm lifetime_safety : BoolFOption< " experimental lifetime safety for C++">>; defm lifetime_safety_inference - : BoolFOption<"experimental-lifetime-safety-inference", + : BoolFOption<"lifetime-safety-inference", LangOpts<"EnableLifetimeSafetyInference">, DefaultFalse, PosFlag<SetTrue, [], [CC1Option], "Enable">, NegFlag<SetFalse, [], [CC1Option], "Disable">, diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index c7170f48e0bc2..7278de6e2c21c 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -3063,9 +3063,19 @@ void clang::sema::AnalysisBasedWarnings::IssueWarnings( AC.getCFGBuildOptions().AddCXXNewAllocator = false; AC.getCFGBuildOptions().AddCXXDefaultInitExprInCtors = true; + bool IsLifetimeSafetyDiagnosticEnabled = + !Diags.isIgnored(diag::warn_lifetime_safety_loan_expires_permissive, + D->getBeginLoc()) || + !Diags.isIgnored(diag::warn_lifetime_safety_loan_expires_strict, + D->getBeginLoc()) || + !Diags.isIgnored(diag::warn_lifetime_safety_return_stack_addr_permissive, + D->getBeginLoc()) || + !Diags.isIgnored(diag::warn_lifetime_safety_return_stack_addr_strict, + D->getBeginLoc()); bool EnableLifetimeSafetyAnalysis = S.getLangOpts().EnableLifetimeSafety && - !S.getLangOpts().EnableLifetimeSafetyTUAnalysis; + !S.getLangOpts().EnableLifetimeSafetyTUAnalysis && + IsLifetimeSafetyDiagnosticEnabled; if (EnableLifetimeSafetyAnalysis) AC.getCFGBuildOptions().AddLifetime = true; diff --git a/clang/test/Analysis/LifetimeSafety/benchmark.py b/clang/test/Analysis/LifetimeSafety/benchmark.py index cd5b30818a4a8..3623af8674ec4 100644 --- a/clang/test/Analysis/LifetimeSafety/benchmark.py +++ b/clang/test/Analysis/LifetimeSafety/benchmark.py @@ -351,7 +351,7 @@ def run_single_test( "/dev/null", "-ftime-trace=" + trace_file, "-Xclang", - "-fexperimental-lifetime-safety", + "-flifetime-safety", "-std=c++17", source_file, ] diff --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp index df1bd6ee88a6c..0a4027ab96d5b 100644 --- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp +++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp @@ -1,6 +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 +// RUN: %clang_cc1 -fsyntax-only -flifetime-safety -Wlifetime-safety -Wno-dangling -verify=cfg %s +// RUN: %clang_cc1 -fsyntax-only -flifetime-safety -flifetime-safety-inference -fexperimental-lifetime-safety-tu-analysis -Wlifetime-safety -Wno-dangling -verify=cfg %s #include "Inputs/lifetime-analysis.h" diff --git a/clang/test/Sema/warn-lifetime-safety-dataflow.cpp b/clang/test/Sema/warn-lifetime-safety-dataflow.cpp index 6fc7c776f935c..7fbfa50377e70 100644 --- a/clang/test/Sema/warn-lifetime-safety-dataflow.cpp +++ b/clang/test/Sema/warn-lifetime-safety-dataflow.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fexperimental-lifetime-safety -mllvm -debug-only=LifetimeFacts -Wexperimental-lifetime-safety %s 2>&1 | FileCheck %s +// RUN: %clang_cc1 -flifetime-safety -mllvm -debug-only=LifetimeFacts -Wlifetime-safety %s 2>&1 | FileCheck %s // REQUIRES: asserts struct MyObj { diff --git a/clang/test/Sema/warn-lifetime-safety-missing-origin-stats.cpp b/clang/test/Sema/warn-lifetime-safety-missing-origin-stats.cpp index 446bbe0e06b13..9ec3e8d05a599 100644 --- a/clang/test/Sema/warn-lifetime-safety-missing-origin-stats.cpp +++ b/clang/test/Sema/warn-lifetime-safety-missing-origin-stats.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -print-stats -fexperimental-lifetime-safety -Wexperimental-lifetime-safety %s 2>&1 | FileCheck %s +// RUN: %clang_cc1 -print-stats -flifetime-safety -Wlifetime-safety %s 2>&1 | FileCheck %s // CHECK: *** LifetimeSafety Missing Origin per QualType: (QualType : count) : diff --git a/clang/test/Sema/warn-lifetime-safety-suggestions.cpp b/clang/test/Sema/warn-lifetime-safety-suggestions.cpp index 6e3a6f1fd9117..9b6f42ff10285 100644 --- a/clang/test/Sema/warn-lifetime-safety-suggestions.cpp +++ b/clang/test/Sema/warn-lifetime-safety-suggestions.cpp @@ -1,6 +1,6 @@ // RUN: rm -rf %t // RUN: split-file %s %t -// RUN: %clang_cc1 -fsyntax-only -fexperimental-lifetime-safety -fexperimental-lifetime-safety-inference -fexperimental-lifetime-safety-tu-analysis -Wexperimental-lifetime-safety-suggestions -Wexperimental-lifetime-safety -Wno-dangling -I%t -verify %t/test_source.cpp +// RUN: %clang_cc1 -fsyntax-only -flifetime-safety -flifetime-safety-inference -fexperimental-lifetime-safety-tu-analysis -Wlifetime-safety-suggestions -Wlifetime-safety -Wno-dangling -I%t -verify %t/test_source.cpp View definition_before_header(View a); diff --git a/clang/test/Sema/warn-lifetime-safety.cpp b/clang/test/Sema/warn-lifetime-safety.cpp index fc6dfc9fd9c51..1deadc3399142 100644 --- a/clang/test/Sema/warn-lifetime-safety.cpp +++ b/clang/test/Sema/warn-lifetime-safety.cpp @@ -1,5 +1,5 @@ -// 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 +// RUN: %clang_cc1 -fsyntax-only -flifetime-safety -Wlifetime-safety -Wno-dangling -verify=expected,function %s +// RUN: %clang_cc1 -fsyntax-only -flifetime-safety -flifetime-safety-inference -fexperimental-lifetime-safety-tu-analysis -Wlifetime-safety -Wno-dangling -verify %s #include "Inputs/lifetime-analysis.h" _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
