[PATCH] D105273: [analyzer] Introduce range-based reasoning for subtraction operator

Valeriy Savchenko via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 2 08:10:15 PDT 2021


vsavchenko added a comment.

Hey Manas!  Great job, you put this together real quick!



================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:1490
+  // the resulting range should be [Min, Max].
+  if (ResultType.isUnsigned()) {
+    return {RangeFactory, ValueFactory.getValue(Min),
----------------
Maybe you can include this as yet another condition in the next `if` statement?  Their bodies are identical.


================
Comment at: clang/test/Analysis/constant-folding.c:399
+    // (a - b) = [0, 5] U [UINT_MAX - 9, UINT_MAX]
+    clang_analyzer_eval((a - b) != 6); // expected-warning{{TRUE}}
+    clang_analyzer_eval((a - b) != UINT_MAX - 10); // expected-warning{{TRUE}}
----------------
Maybe you can check `(a - b) > 5 && (a - b) < UINT_MAX - 9` to cover the whole range?


================
Comment at: clang/test/Analysis/constant-folding.c:405
+
+  if (c >= INT_MAX - 5 && d >= INT_MAX - 5) {
+    // (c - d) = [-5, 5]
----------------
This is also Min and Max overflowing on the positive side.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105273



More information about the cfe-commits mailing list