https://github.com/suoyuan666 created 
https://github.com/llvm/llvm-project/pull/201054

`LoanPropagationAnalysis` already takes `FactMgr` during construction since it 
is required by the dataflow analysis itself. Expose an accessor instead of 
requiring callers to provide the same object explicitly.


>From 1fd610e6d5f9bbd016ae2353c64d5cd6ee6bb676 Mon Sep 17 00:00:00 2001
From: Yuan Suo <[email protected]>
Date: Tue, 2 Jun 2026 16:03:12 +0800
Subject: [PATCH] [LifetimeSafety] Remove FactMgr parameter from
 buildOriginFlowChain

LoanPropagationAnalysis already takes FactMgr during construction since
it is required by the dataflow analysis itself. Expose an accessor
instead of requiring callers to provide the same object explicitly.

Signed-off-by: Yuan Suo <[email protected]>
---
 .../Analyses/LifetimeSafety/LoanPropagation.h    |  6 ++++--
 .../Analysis/LifetimeSafety/LoanPropagation.cpp  | 16 ++++++++++++----
 clang/unittests/Analysis/LifetimeSafetyTest.cpp  |  1 -
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git 
a/clang/include/clang/Analysis/Analyses/LifetimeSafety/LoanPropagation.h 
b/clang/include/clang/Analysis/Analyses/LifetimeSafety/LoanPropagation.h
index 168223c42e2b2..f687eb29d3910 100644
--- a/clang/include/clang/Analysis/Analyses/LifetimeSafety/LoanPropagation.h
+++ b/clang/include/clang/Analysis/Analyses/LifetimeSafety/LoanPropagation.h
@@ -45,10 +45,12 @@ class LoanPropagationAnalysis {
   /// sequence of origins through which the loan flowed, ending at the origin
   /// where the loan was originally issued.
   llvm::SmallVector<OriginID>
-  buildOriginFlowChain(const FactManager &FactMgr, ProgramPoint StartPoint,
-                       const OriginID StartOID, const LoanID TargetLoan) const;
+  buildOriginFlowChain(ProgramPoint StartPoint, const OriginID StartOID,
+                       const LoanID TargetLoan) const;
 
 private:
+  FactManager &getFactManager() const;
+
   class Impl;
   std::unique_ptr<Impl> PImpl;
 };
diff --git a/clang/lib/Analysis/LifetimeSafety/LoanPropagation.cpp 
b/clang/lib/Analysis/LifetimeSafety/LoanPropagation.cpp
index cc24829281214..c6631eebd1673 100644
--- a/clang/lib/Analysis/LifetimeSafety/LoanPropagation.cpp
+++ b/clang/lib/Analysis/LifetimeSafety/LoanPropagation.cpp
@@ -198,6 +198,8 @@ class AnalysisImpl
     return getLoans(getState(P), OID);
   }
 
+  FactManager &getFactManager() const { return FactMgr; }
+
 private:
   /// Returns true if the origin is persistent (referenced in multiple blocks).
   bool isPersistent(OriginID OID) const {
@@ -248,15 +250,21 @@ LoanSet LoanPropagationAnalysis::getLoans(OriginID OID, 
ProgramPoint P) const {
   return PImpl->getLoans(OID, P);
 }
 
-llvm::SmallVector<OriginID> LoanPropagationAnalysis::buildOriginFlowChain(
-    const FactManager &FactMgr, ProgramPoint StartPoint,
-    const OriginID StartOID, const LoanID TargetLoan) const {
+FactManager &LoanPropagationAnalysis::getFactManager() const {
+  return PImpl->getFactManager();
+}
+
+llvm::SmallVector<OriginID>
+LoanPropagationAnalysis::buildOriginFlowChain(ProgramPoint StartPoint,
+                                              const OriginID StartOID,
+                                              const LoanID TargetLoan) const {
   assert(getLoans(StartOID, StartPoint).contains(TargetLoan) &&
          "TargetLoan must be present in the StartOID at the StartPoint");
 
   OriginID CurrOID = StartOID;
   llvm::SmallVector<OriginID> OriginFlowChain;
-  llvm::ArrayRef<const Fact *> Facts = FactMgr.getBlockContaining(StartPoint);
+  llvm::ArrayRef<const Fact *> Facts =
+      getFactManager().getBlockContaining(StartPoint);
   const auto *StartIt = llvm::find(Facts, StartPoint);
   assert(StartIt != Facts.end());
 
diff --git a/clang/unittests/Analysis/LifetimeSafetyTest.cpp 
b/clang/unittests/Analysis/LifetimeSafetyTest.cpp
index 7105f3de2891e..febecb472455a 100644
--- a/clang/unittests/Analysis/LifetimeSafetyTest.cpp
+++ b/clang/unittests/Analysis/LifetimeSafetyTest.cpp
@@ -215,7 +215,6 @@ class LifetimeTestHelper {
     for (LoanID LID : EndLoanIDs) {
       const llvm::SmallVector<OriginID> OriginFlowChain =
           Runner.getAnalysis().getLoanPropagation().buildOriginFlowChain(
-              Runner.getAnalysis().getFactManager(),
               getProgramPoint(Annotation), *StartOriginID, LID);
       if (!OriginFlowChain.empty())
         return OriginFlowChain;

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

Reply via email to