[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
https://github.com/tru closed https://github.com/llvm/llvm-project/pull/152027 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
https://github.com/tru updated https://github.com/llvm/llvm-project/pull/152027
>From 6419104d187807eafc61ae7dfda55b4101e8fd6f Mon Sep 17 00:00:00 2001
From: Utkarsh Saxena
Date: Tue, 22 Jul 2025 21:31:09 +0200
Subject: [PATCH] [LifetimeSafety] Add language option for experimental
lifetime safety (#149592)
Add a language option flag for experimental lifetime safety analysis in C++.
This change provides a language option to control the experimental lifetime
safety analysis feature, making it more explicit and easier to enable/disable.
Previously, the feature was controlled indirectly through a diagnostic warning
flag, which we do not want to accidentally enable with `-Weverything` (atm)!
- Added a new language option `EnableLifetimeSafety` in `LangOptions.def` for
experimental lifetime safety analysis in C++
- Added corresponding driver options `-fexperimental-lifetime-safety` and
`-fno-experimental-lifetime-safety` in `Options.td`
- Modified `AnalysisBasedWarnings.cpp` to use the new language option flag
instead of checking if a specific diagnostic is ignored
- Updated a test case to use the new flag instead of relying on the warning
flag alone
(cherry picked from commit 0d0478903474b2e53c874427e3d6eb2ed7567e50)
---
clang/include/clang/Basic/LangOptions.def | 2 ++
clang/include/clang/Driver/Options.td | 8
clang/lib/Sema/AnalysisBasedWarnings.cpp | 3 +--
clang/test/Sema/warn-lifetime-safety-dataflow.cpp | 2 +-
4 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/clang/include/clang/Basic/LangOptions.def
b/clang/include/clang/Basic/LangOptions.def
index 0d546cb3b8471..f5a5d84eefb80 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -496,6 +496,8 @@ 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(PreserveVec3Type, 1, 0, NotCompatible, "Preserve 3-component vector
type")
#undef LANGOPT
diff --git a/clang/include/clang/Driver/Options.td
b/clang/include/clang/Driver/Options.td
index bce29a76f3ac7..18e4ab406ce4e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1917,6 +1917,14 @@ defm bounds_safety : BoolFOption<
BothFlags<[], [CC1Option],
" experimental bounds safety extension for C">>;
+defm lifetime_safety : BoolFOption<
+ "experimental-lifetime-safety",
+ LangOpts<"EnableLifetimeSafety">, DefaultFalse,
+ PosFlag,
+ NegFlag,
+ BothFlags<[], [CC1Option],
+ " experimental lifetime safety for C++">>;
+
defm addrsig : BoolFOption<"addrsig",
CodeGenOpts<"Addrsig">, DefaultFalse,
PosFlag,
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp
b/clang/lib/Sema/AnalysisBasedWarnings.cpp
index 85ac3c06ec2c2..ec39bca6039f0 100644
--- a/clang/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp
@@ -2891,8 +2891,7 @@ void clang::sema::AnalysisBasedWarnings::IssueWarnings(
.setAlwaysAdd(Stmt::UnaryOperatorClass);
}
- bool EnableLifetimeSafetyAnalysis = !Diags.isIgnored(
- diag::warn_experimental_lifetime_safety_dummy_warning, D->getBeginLoc());
+ bool EnableLifetimeSafetyAnalysis = S.getLangOpts().EnableLifetimeSafety;
// Install the logical handler.
std::optional LEH;
if (LogicalErrorHandler::hasActiveDiagnostics(Diags, D->getBeginLoc())) {
diff --git a/clang/test/Sema/warn-lifetime-safety-dataflow.cpp
b/clang/test/Sema/warn-lifetime-safety-dataflow.cpp
index 38dfdb98f08fc..a956386ae9332 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 -mllvm -debug-only=LifetimeFacts,LifetimeDataflow
-Wexperimental-lifetime-safety %s 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -fexperimental-lifetime-safety -mllvm
-debug-only=LifetimeFacts,LifetimeDataflow -Wexperimental-lifetime-safety %s
2>&1 | FileCheck %s
// REQUIRES: asserts
struct MyObj {
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
https://github.com/tru approved this pull request. https://github.com/llvm/llvm-project/pull/152027 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
https://github.com/usx95 created
https://github.com/llvm/llvm-project/pull/152027
… (#149592)
Add a language option flag for experimental lifetime safety analysis in C++.
This change provides a language option to control the experimental lifetime
safety analysis feature, making it more explicit and easier to enable/disable.
Previously, the feature was controlled indirectly through a diagnostic warning
flag, which we do not want to accidentally enable with `-Weverything` (atm)!
- Added a new language option `EnableLifetimeSafety` in `LangOptions.def` for
experimental lifetime safety analysis in C++
- Added corresponding driver options `-fexperimental-lifetime-safety` and
`-fno-experimental-lifetime-safety` in `Options.td`
- Modified `AnalysisBasedWarnings.cpp` to use the new language option flag
instead of checking if a specific diagnostic is ignored
- Updated a test case to use the new flag instead of relying on the warning
flag alone
(cherry picked from commit 0d0478903474b2e53c874427e3d6eb2ed7567e50)
Fixes: https://github.com/llvm/llvm-project/issues/149537
>From 7d97c041e02f85ac66bd462acf6fa8fb82d6cb48 Mon Sep 17 00:00:00 2001
From: Utkarsh Saxena
Date: Tue, 22 Jul 2025 21:31:09 +0200
Subject: [PATCH] [LifetimeSafety] Add language option for experimental
lifetime safety (#149592)
Add a language option flag for experimental lifetime safety analysis in C++.
This change provides a language option to control the experimental lifetime
safety analysis feature, making it more explicit and easier to enable/disable.
Previously, the feature was controlled indirectly through a diagnostic warning
flag, which we do not want to accidentally enable with `-Weverything` (atm)!
- Added a new language option `EnableLifetimeSafety` in `LangOptions.def` for
experimental lifetime safety analysis in C++
- Added corresponding driver options `-fexperimental-lifetime-safety` and
`-fno-experimental-lifetime-safety` in `Options.td`
- Modified `AnalysisBasedWarnings.cpp` to use the new language option flag
instead of checking if a specific diagnostic is ignored
- Updated a test case to use the new flag instead of relying on the warning
flag alone
(cherry picked from commit 0d0478903474b2e53c874427e3d6eb2ed7567e50)
---
clang/include/clang/Basic/LangOptions.def | 2 ++
clang/include/clang/Driver/Options.td | 8
clang/lib/Sema/AnalysisBasedWarnings.cpp | 3 +--
clang/test/Sema/warn-lifetime-safety-dataflow.cpp | 2 +-
4 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/clang/include/clang/Basic/LangOptions.def
b/clang/include/clang/Basic/LangOptions.def
index 0d546cb3b8471..f5a5d84eefb80 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -496,6 +496,8 @@ 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(PreserveVec3Type, 1, 0, NotCompatible, "Preserve 3-component vector
type")
#undef LANGOPT
diff --git a/clang/include/clang/Driver/Options.td
b/clang/include/clang/Driver/Options.td
index bce29a76f3ac7..18e4ab406ce4e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1917,6 +1917,14 @@ defm bounds_safety : BoolFOption<
BothFlags<[], [CC1Option],
" experimental bounds safety extension for C">>;
+defm lifetime_safety : BoolFOption<
+ "experimental-lifetime-safety",
+ LangOpts<"EnableLifetimeSafety">, DefaultFalse,
+ PosFlag,
+ NegFlag,
+ BothFlags<[], [CC1Option],
+ " experimental lifetime safety for C++">>;
+
defm addrsig : BoolFOption<"addrsig",
CodeGenOpts<"Addrsig">, DefaultFalse,
PosFlag,
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp
b/clang/lib/Sema/AnalysisBasedWarnings.cpp
index 85ac3c06ec2c2..ec39bca6039f0 100644
--- a/clang/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp
@@ -2891,8 +2891,7 @@ void clang::sema::AnalysisBasedWarnings::IssueWarnings(
.setAlwaysAdd(Stmt::UnaryOperatorClass);
}
- bool EnableLifetimeSafetyAnalysis = !Diags.isIgnored(
- diag::warn_experimental_lifetime_safety_dummy_warning, D->getBeginLoc());
+ bool EnableLifetimeSafetyAnalysis = S.getLangOpts().EnableLifetimeSafety;
// Install the logical handler.
std::optional LEH;
if (LogicalErrorHandler::hasActiveDiagnostics(Diags, D->getBeginLoc())) {
diff --git a/clang/test/Sema/warn-lifetime-safety-dataflow.cpp
b/clang/test/Sema/warn-lifetime-safety-dataflow.cpp
index 38dfdb98f08fc..a956386ae9332 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 -mllvm -debug-only=LifetimeFacts,LifetimeDataflow
-Wexperimental-lifetime-safety %s 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -fexper
[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
llvmbot wrote:
@llvm/pr-subscribers-clang
Author: Utkarsh Saxena (usx95)
Changes
… (#149592)
Add a language option flag for experimental lifetime safety analysis in C++.
This change provides a language option to control the experimental lifetime
safety analysis feature, making it more explicit and easier to enable/disable.
Previously, the feature was controlled indirectly through a diagnostic warning
flag, which we do not want to accidentally enable with `-Weverything` (atm)!
- Added a new language option `EnableLifetimeSafety` in `LangOptions.def` for
experimental lifetime safety analysis in C++
- Added corresponding driver options `-fexperimental-lifetime-safety` and
`-fno-experimental-lifetime-safety` in `Options.td`
- Modified `AnalysisBasedWarnings.cpp` to use the new language option flag
instead of checking if a specific diagnostic is ignored
- Updated a test case to use the new flag instead of relying on the warning
flag alone
(cherry picked from commit 0d0478903474b2e53c874427e3d6eb2ed7567e50)
Fixes: https://github.com/llvm/llvm-project/issues/149537
---
Full diff: https://github.com/llvm/llvm-project/pull/152027.diff
4 Files Affected:
- (modified) clang/include/clang/Basic/LangOptions.def (+2)
- (modified) clang/include/clang/Driver/Options.td (+8)
- (modified) clang/lib/Sema/AnalysisBasedWarnings.cpp (+1-2)
- (modified) clang/test/Sema/warn-lifetime-safety-dataflow.cpp (+1-1)
``diff
diff --git a/clang/include/clang/Basic/LangOptions.def
b/clang/include/clang/Basic/LangOptions.def
index 0d546cb3b8471..f5a5d84eefb80 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -496,6 +496,8 @@ 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(PreserveVec3Type, 1, 0, NotCompatible, "Preserve 3-component vector
type")
#undef LANGOPT
diff --git a/clang/include/clang/Driver/Options.td
b/clang/include/clang/Driver/Options.td
index bce29a76f3ac7..18e4ab406ce4e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1917,6 +1917,14 @@ defm bounds_safety : BoolFOption<
BothFlags<[], [CC1Option],
" experimental bounds safety extension for C">>;
+defm lifetime_safety : BoolFOption<
+ "experimental-lifetime-safety",
+ LangOpts<"EnableLifetimeSafety">, DefaultFalse,
+ PosFlag,
+ NegFlag,
+ BothFlags<[], [CC1Option],
+ " experimental lifetime safety for C++">>;
+
defm addrsig : BoolFOption<"addrsig",
CodeGenOpts<"Addrsig">, DefaultFalse,
PosFlag,
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp
b/clang/lib/Sema/AnalysisBasedWarnings.cpp
index 85ac3c06ec2c2..ec39bca6039f0 100644
--- a/clang/lib/Sema/AnalysisBasedWarnings.cpp
+++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp
@@ -2891,8 +2891,7 @@ void clang::sema::AnalysisBasedWarnings::IssueWarnings(
.setAlwaysAdd(Stmt::UnaryOperatorClass);
}
- bool EnableLifetimeSafetyAnalysis = !Diags.isIgnored(
- diag::warn_experimental_lifetime_safety_dummy_warning, D->getBeginLoc());
+ bool EnableLifetimeSafetyAnalysis = S.getLangOpts().EnableLifetimeSafety;
// Install the logical handler.
std::optional LEH;
if (LogicalErrorHandler::hasActiveDiagnostics(Diags, D->getBeginLoc())) {
diff --git a/clang/test/Sema/warn-lifetime-safety-dataflow.cpp
b/clang/test/Sema/warn-lifetime-safety-dataflow.cpp
index 38dfdb98f08fc..a956386ae9332 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 -mllvm -debug-only=LifetimeFacts,LifetimeDataflow
-Wexperimental-lifetime-safety %s 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -fexperimental-lifetime-safety -mllvm
-debug-only=LifetimeFacts,LifetimeDataflow -Wexperimental-lifetime-safety %s
2>&1 | FileCheck %s
// REQUIRES: asserts
struct MyObj {
``
https://github.com/llvm/llvm-project/pull/152027
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
https://github.com/usx95 edited https://github.com/llvm/llvm-project/pull/152027 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
https://github.com/usx95 edited https://github.com/llvm/llvm-project/pull/152027 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [LifetimeSafety] Add language option for experimental lifetime safety… (PR #152027)
https://github.com/usx95 milestoned https://github.com/llvm/llvm-project/pull/152027 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
