manas added a comment.

The coverage showing unreachability of `VisitBinaryOperator<BO_NE>` for 
concrete integer cases. F23801808: RangeConstraintManager.cpp.html 
<https://reviews.llvm.org/F23801808>



================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:1415-1416
+
+  Range CoarseLHS = fillGaps(LHS);
+  Range CoarseRHS = fillGaps(RHS);
+
----------------
ASDenysPetrov wrote:
> Avoid filling the gaps, because it's completely possible to compare all the 
> ranges.
> E.g. //LHS //`[1,2]U[8,9]`  and  //RHS //`[5,6]` are not equal.
> And you don't need to fiil the gap in LHS, because it will lead you to a 
> wrong answer, like `[1,9] != [5,6]` => **UNKNOWN** instead of **TRUE**.
If we don't fill gaps, then we will be making this method O(n) instead of O(1) 
as of now. As I see it, filling RHS (and not filling LHS), it can iterate over 
all ranges in LHS, and check each range's intersection with CoarseRHS.

Before, I do this, I just wanted to point out the unreachability of concrete 
cases to this method. I have tried to explain this below.


================
Comment at: clang/test/Analysis/constant-folding.c:339
+  }
+}
----------------
ASDenysPetrov wrote:
> I'd like to see the cases with concrete integers as well.
I have checked the coverage reports which show that concrete values are not 
reaching `VisitBinaryOperator<BO_NE>`. This is due to them being trivially 
inferred in `RangedConstraintManager.cpp`. I attached the coverage for 
`RangeConstraintManager.cpp`.

I think that I should remove the handling of concrete APSInt all together from 
SymbolicRangeInferrer for above reason. What do you guys think?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D112621

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

Reply via email to