martong added a comment.

Awesome!



================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:1512-1516
+        if (IsFirst) {
+          IsFirst = false;
+          RS = *RSPtr;
+        } else
+          RS = RangeFactory.unite(RS, *RSPtr);
----------------
`unite` should be working with an empty set as well, shouldn't it?


================
Comment at: clang/test/Analysis/range-inferring-from-disequality-map.cpp:10-11
+     clang_analyzer_value(x); // expected-warning {{32s:{ [0, 0] }}}
+  // TODO:  TODO: Keep x range correct even if associated disequalities are
+  // already dead.
+  (void)tmp; // Keep alive.
----------------
Good point.

We should have an additional check in `removeDeadBindings` that goes through 
the disequality map of the dead symbol. And if any of the mapped classes are 
not dead then we shall not delete the dead symbol's equivalent class.


================
Comment at: clang/test/Analysis/range-inferring-from-disequality-map.cpp:50-51
+    if(x != tmp1 && x != tmp2)
+      // TODO: This condition should be infeasible.
+      //       Thus, the branch should be unreachable.
+      clang_analyzer_value(x); // expected-warning {{{ empty }}}
----------------
Why can't we return an empty set from `getInvertedRangeFromDisequalityMap` in 
this case? `intersect` should handle the rest then.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D131006

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to