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
