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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
