https://github.com/usx95 created https://github.com/llvm/llvm-project/pull/150670
None >From e0d060af9a0a85424c6ea776465efeeddf5d213b Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Fri, 25 Jul 2025 18:11:45 +0000 Subject: [PATCH] fix-pruned-edges --- clang/lib/Analysis/LifetimeSafety.cpp | 2 ++ .../unittests/Analysis/LifetimeSafetyTest.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/clang/lib/Analysis/LifetimeSafety.cpp b/clang/lib/Analysis/LifetimeSafety.cpp index 94b8197bbf6f3..f39998cca56fe 100644 --- a/clang/lib/Analysis/LifetimeSafety.cpp +++ b/clang/lib/Analysis/LifetimeSafety.cpp @@ -603,6 +603,8 @@ class DataflowAnalysis { OutStates[B] = StateOut; Visited.set(B->getBlockID()); for (const CFGBlock *AdjacentB : isForward() ? B->succs() : B->preds()) { + if (!AdjacentB) + continue; Lattice OldInState = getInState(AdjacentB); Lattice NewInState = D.join(OldInState, StateOut); // Enqueue the adjacent block if its in-state has changed or if we have diff --git a/clang/unittests/Analysis/LifetimeSafetyTest.cpp b/clang/unittests/Analysis/LifetimeSafetyTest.cpp index a48dc45e4f806..7cd679e184f6c 100644 --- a/clang/unittests/Analysis/LifetimeSafetyTest.cpp +++ b/clang/unittests/Analysis/LifetimeSafetyTest.cpp @@ -512,6 +512,25 @@ TEST_F(LifetimeAnalysisTest, PointersAndExpirationInACycle) { EXPECT_THAT(LoansTo({"temp"}), AreExpiredAt("after_loop")); } +TEST_F(LifetimeAnalysisTest, InfiniteLoopPrunesEdges) { + SetupTest(R"( + void target(MyObj out) { + MyObj *p = &out; + POINT(before_loop); + + for (;;) { + POINT(begin); + MyObj in; + p = ∈ + POINT(end); + } + } + )"); + EXPECT_THAT(Origin("p"), HasLoansTo({"out"}, "before_loop")); + EXPECT_THAT(Origin("p"), HasLoansTo({"in", "out"}, "begin")); + EXPECT_THAT(Origin("p"), HasLoansTo({"in"}, "end")); +} + TEST_F(LifetimeAnalysisTest, NestedScopes) { SetupTest(R"( void target() { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits