https://github.com/suoyuan666 updated 
https://github.com/llvm/llvm-project/pull/204124

>From 7e1fabdbb693bb100b8b49da3ccc415ff9dbd20d Mon Sep 17 00:00:00 2001
From: Yuan Suo <[email protected]>
Date: Tue, 16 Jun 2026 19:06:40 +0800
Subject: [PATCH 1/2] [LifetimeSafety] Add additional test for
 buildOriginFlowChain

These are test case improvements suggested in previous PRs.

Signed-off-by: Yuan Suo <[email protected]>
---
 clang/test/Sema/LifetimeSafety/safety.cpp       | 10 ++++++++++
 clang/unittests/Analysis/LifetimeSafetyTest.cpp |  6 +++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/clang/test/Sema/LifetimeSafety/safety.cpp 
b/clang/test/Sema/LifetimeSafety/safety.cpp
index 56226f954fee3..c5e8882c6c76e 100644
--- a/clang/test/Sema/LifetimeSafety/safety.cpp
+++ b/clang/test/Sema/LifetimeSafety/safety.cpp
@@ -1250,6 +1250,16 @@ void conditional_operator_lifetimebound_nested_deep(bool 
cond) {
   (void)*p;  // expected-note 4 {{later used here}}
 }
 
+void simpleparen() {
+  MyObj* p;
+  {
+    MyObj a;
+    MyObj* b = &a;  // expected-warning {{local variable 'a' does not live 
long enough}}
+    p = (((b)));
+  }                 // expected-note {{destroyed here}}
+  (void)*p;         // expected-note {{later used here}}
+}
+
 void parentheses(bool cond) {
   MyObj* p;
   {
diff --git a/clang/unittests/Analysis/LifetimeSafetyTest.cpp 
b/clang/unittests/Analysis/LifetimeSafetyTest.cpp
index febecb472455a..78b7449958140 100644
--- a/clang/unittests/Analysis/LifetimeSafetyTest.cpp
+++ b/clang/unittests/Analysis/LifetimeSafetyTest.cpp
@@ -213,7 +213,7 @@ class LifetimeTestHelper {
     std::vector<LoanID> EndLoanIDs = getLoansForVar(EndLoanVar);
 
     for (LoanID LID : EndLoanIDs) {
-      const llvm::SmallVector<OriginID> OriginFlowChain =
+      llvm::SmallVector<OriginID> OriginFlowChain =
           Runner.getAnalysis().getLoanPropagation().buildOriginFlowChain(
               getProgramPoint(Annotation), *StartOriginID, LID);
       if (!OriginFlowChain.empty())
@@ -2025,6 +2025,8 @@ TEST_F(LifetimeAnalysisTest, 
BuildOriginFlowChainWithMultiAssignInSameStmt) {
       Helper->buildOriginFlowChainInOneBlock("s", "tgt", "after_use");
 
   EXPECT_THAT(OriginFlowChain, Contains(*Helper->getOriginForDecl("a")));
+  EXPECT_THAT(OriginFlowChain, Contains(*Helper->getOriginForDecl("b")));
+  EXPECT_THAT(OriginFlowChain, Contains(*Helper->getOriginForDecl("c")));
 }
 
 TEST_F(LifetimeAnalysisTest, BuildOriginFlowChainWithOverwritingAssignments) {
@@ -2044,6 +2046,8 @@ TEST_F(LifetimeAnalysisTest, 
BuildOriginFlowChainWithOverwritingAssignments) {
       Helper->buildOriginFlowChainInOneBlock("s", "tgt1", "after_use");
 
   EXPECT_THAT(OriginFlowChain, Contains(*Helper->getOriginForDecl("a")));
+  EXPECT_THAT(OriginFlowChain, Contains(*Helper->getOriginForDecl("b")));
+  EXPECT_THAT(OriginFlowChain, Contains(*Helper->getOriginForDecl("c")));
 }
 
 TEST_F(LifetimeAnalysisTest, BuildOriginFlowChainWithLifetimeBound) {

>From 48e617b476ae6cf1186cc8a3b4681f6d346457e9 Mon Sep 17 00:00:00 2001
From: Yuan Suo <[email protected]>
Date: Tue, 16 Jun 2026 20:33:44 +0800
Subject: [PATCH 2/2] Add a FIXME

Signed-off-by: Yuan Suo <[email protected]>
---
 clang/test/Sema/LifetimeSafety/safety.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/clang/test/Sema/LifetimeSafety/safety.cpp 
b/clang/test/Sema/LifetimeSafety/safety.cpp
index c5e8882c6c76e..0736974d1738c 100644
--- a/clang/test/Sema/LifetimeSafety/safety.cpp
+++ b/clang/test/Sema/LifetimeSafety/safety.cpp
@@ -1250,6 +1250,8 @@ void conditional_operator_lifetimebound_nested_deep(bool 
cond) {
   (void)*p;  // expected-note 4 {{later used here}}
 }
 
+// FIXME: Ignore ParenExpr and treat it as `p = b`.
+// So that we can see {{local variable 'p' aliases the storage of local 
variable 'b'}}
 void simpleparen() {
   MyObj* p;
   {

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to