[clang] [LifetimeSafety] Remove FactMgr parameter from buildOriginFlowChain (PR #201054)

via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 2 01:23:59 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-analysis

@llvm/pr-subscribers-clang

Author: Yuan Suo (suoyuan666)

<details>
<summary>Changes</summary>

`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.


---
Full diff: https://github.com/llvm/llvm-project/pull/201054.diff


3 Files Affected:

- (modified) clang/include/clang/Analysis/Analyses/LifetimeSafety/LoanPropagation.h (+4-2) 
- (modified) clang/lib/Analysis/LifetimeSafety/LoanPropagation.cpp (+12-4) 
- (modified) clang/unittests/Analysis/LifetimeSafetyTest.cpp (-1) 


``````````diff
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;

``````````

</details>


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


More information about the cfe-commits mailing list