================
@@ -323,12 +342,13 @@ class ExprEngine {
 
   /// ProcessBranch - Called by CoreEngine.  Used to generate successor
   ///  nodes by processing the 'effects' of a branch condition.
-  void processBranch(const Stmt *Condition,
-                     NodeBuilderContext& BuilderCtx,
-                     ExplodedNode *Pred,
-                     ExplodedNodeSet &Dst,
-                     const CFGBlock *DstT,
-                     const CFGBlock *DstF);
+  /// If the branch condition is a loop condition, IterationsFinishedInLoop is
+  /// the number of already finished iterations (0, 1, 2...); otherwise it's
+  /// std::nullopt.
----------------
NagyDonat wrote:

> Can't IterationsFinishedInLoop be a state trait? 

We could introduce it, but we'd need to maintain a nested stack of loops (1 
iteration in that `while`, then 2 iterations in the `for`, then 1 iteration in 
this other `for` in the function called there...) to correctly monitor the 
number of iterations.

This would make the heuristic introduced in this commit slightly more accurate, 
but I think that for practical purposes the current code is already good 
enough, so I didn't invest time into implementing this loop iteration count 
stack. (However it would be a nice follow-up commit if I have time.)

https://github.com/llvm/llvm-project/pull/109804
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to