[PATCH] D77792: [analyzer] Extend constraint manager to be able to compare simple SymSymExprs

Artem Dergachev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue May 5 05:53:04 PDT 2020


NoQ added inline comments.


================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:814
 
+Optional<ProgramStateRef> RangeConstraintManager::tryAssumeSymSymOp(
+    ProgramStateRef State, BinaryOperator::Opcode Op, SymbolRef LHSSym,
----------------
I believe you don't need to return an optional here. The method simply acknowledges any assumptions it could make in the existing state and returns the updated state. Therefore, if it wasn't able to record any assumptions, it returns the existing state. Because the only reasonable behavior the caller could implement when the current implementation returns `None` is to roll back to the existing state anyway.


================
Comment at: clang/test/Analysis/constraint-manager-sym-sym.c:182
+void test_range18(int l, int r) {
+  assert((9 <= r && r <= 9) || (11 <= r && r <= 42) || (44 <= r && r <= 44));
+  assert((0 <= l && l <= 1) || (20 <= l && l <= 20));
----------------
You can also explicitly create a single path with disconnected ranges (as opposed to like 3 different paths on each of which the range is a single segment) like this:
```lang=c++
assert(r >= 9 && r <= 44 && r != 10 && r != 43);
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77792/new/

https://reviews.llvm.org/D77792





More information about the cfe-commits mailing list