[clang] [LifetimeSafety] Remove FactMgr parameter from buildOriginFlowChain (PR #201054)
Yuan Suo via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 2 01:23:21 PDT 2026
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 <suoyuan666 at s5n.xyz>
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 <suoyuan666 at s5n.xyz>
---
.../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;
More information about the cfe-commits
mailing list