================ @@ -121,6 +121,25 @@ struct EvalCallOptions { EvalCallOptions() {} }; +/// Simple control flow statements like `if` only produce a single state split, +/// so the fact that they are included in the source code implies that both +/// branches are possible (at least under some conditions) and the analyzer can +/// freely assume either of them. (This is not entirely true, because there may +/// be unmarked logical correlations between `if` statements, but is a good +/// enough heuristic and the analyzer strongly relies on it.) +/// On the other hand, in a loop the state may be split repeatedly at each +/// evaluation of the loop condition, and this can lead to following "weak" +/// assumptions even though the code does not imply that they're valid and the +/// programmer intended to cover them. ---------------- NagyDonat wrote:
See my top-level comment for a detailed explanation. 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