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
