ASDenysPetrov marked 4 inline comments as done.
ASDenysPetrov added a comment.

@martong Just FYI. I've been working on reworking this solution to using 
`EquivalenceClasses` for several weeks. It turned out that this is an extremely 
hard task to acomplish. There a lot of cast cases like: `(int8)x==y, 
(uint16)a==(int64)b, (uint8)y == b`, Merging and inferring all of this without 
going beyond the complexity O(n) is really tricky.



================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:1289-1291
+      auto It = llvm::find_if(*CM, [MinBitWidth](CastMap::value_type &Item) {
+        return Item.first >= MinBitWidth;
+      });
----------------
martong wrote:
> There might be a problem here because the iteration of the map is 
> non-deterministic. We should probably have a copy that is sorted, or the 
> container should be sorted (sorted immutable list maybe?).
> 
> Your tests below passed probably because the cast chains are too small. Could 
> you please have a test, where the chain is really long (20 maybe) and 
> shuffled.
> (My thanks for @steakhal for this additional comment.)
I've checked. `ImmutableSet` gave me a sorted order. But I agree that it could 
be just a coincidence. I'll try to add more tests.


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

https://reviews.llvm.org/D103096

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

Reply via email to