================
@@ -202,53 +203,93 @@ class AnalysisImpl
     return getLoans(getState(P), OID);
   }
 
-  llvm::SmallVector<OriginID>
-  buildOriginFlowChain(ProgramPoint StartPoint, const OriginID StartOID,
-                       const LoanID TargetLoan) const {
+  llvm::SmallVector<OriginID> buildOriginFlowChain(ProgramPoint StartPoint,
+                                                   const OriginID StartOID,
+                                                   const LoanID TargetLoan,
+                                                   const CFG *Cfg) 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);
-    const auto *StartIt = llvm::find(Facts, StartPoint);
-    assert(StartIt != Facts.end());
-
-    for (const Fact *F :
-         llvm::reverse(llvm::make_range(Facts.begin(), StartIt))) {
-      if (const auto *IF = F->getAs<IssueFact>())
-        if (IF->getLoanID() == TargetLoan) {
-          assert(IF->getOriginID() == CurrOID);
-          return OriginFlowChain;
+    const auto ShouldTrack = [&](const CFGBlock *Block, OriginID StartOID) {
+      for (const Fact *F : llvm::reverse(FactMgr.getFacts(Block))) {
+        const auto *OFF = llvm::dyn_cast<OriginFlowFact>(F);
+        if (!OFF)
+          continue;
+        if (OFF->getDestOriginID() == StartOID) {
+          if (getLoans(StartOID, OFF).contains(TargetLoan))
+            return true;
+          return false;
         }
+      }
+      return true;
+    };
----------------
usx95 wrote:

this can be replaced by checking `getLoans` at the last program point of the 
block.
`getLoans(getOutState(Block), StartOID).contains(TargetLoan);`

Also inline this at callsite.

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

Reply via email to