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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits