vsavchenko added a comment.

Great job!  Thank you for your work!

I would say, fixing a couple of minor style issues and testing it on a few more 
projects, and it is ready to land!

> Another point is that I don't know how to get printed stats from the 
> scan-build.

That option in `scan-build` is called `-internal-stats`.

> I completely agree with you. But, unfortunately, vim-proj is the only I could 
> squeeze from that bunch.

My opinion here is that any projects (with a good amount of users or stars on 
GitHub ^-^ ) will do.  If it is hard to build them on Windows, move to the next 
project.  I guess projects with a minimal number of dependencies should be 
fairly easy on any platform.



================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:80
+
+  static size_t IndexFromOp(BinaryOperatorKind OP) {
+    return static_cast<size_t>(OP - BO_LT);
----------------
ASDenysPetrov wrote:
> vsavchenko wrote:
> > I would prefer function names to comply with LLVM coding standards (start 
> > with a verb and a lowercase letter
> > https://llvm.org/docs/CodingStandards.html#name-types-functions-variables-and-enumerators-properly
> I'll add a **get **prefix. Saying about lower/uppercases, I'd say this is a 
> mess inside this file. I've just decided to use an upper one.
I agree that it is a mess, but if we want to reduce it with time, I'd say we 
should stick to the official style guide.


================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:689
+
+    // Loop goes through the all columns except the last `UnknownX2`
+    // We treat `UnknownX2` column separately at the end of the loop body.
----------------
ASDenysPetrov wrote:
> vsavchenko wrote:
> > Sorry for nitpicking, but it seems like the grammar is a bit off in the 
> > **the all columns except the last** part
> Do you mean to change to **all of the columns exept the last one 
> ('UnknownX2')**?
Yep, sounds good!


================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:696
+      const SymSymExpr *SymSym = SymMgr.getSymSymExpr(LHS, QueriedOP, RHS, T);
+      const RangeSet *RangeSet = State->get<ConstraintRange>(SymSym);
+
----------------
ASDenysPetrov wrote:
> vsavchenko wrote:
> > Maybe we can name this constant somehow differently to be more verbose? 
> What do you think about **FoundRangeSet**?
I was thinking about adding more context to the name, something like 
`RelatedRangeSet` or similar.  To show not only what it is (`RangeSet`) and how 
we got it (`found`), but also its purpose or meaning.


================
Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:700-705
+      if (!RangeSet) {
+        const BinaryOperatorKind ROP =
+            BinaryOperator::reverseComparisonOp(QueriedOP);
+        SymSym = SymMgr.getSymSymExpr(RHS, ROP, LHS, T);
+        RangeSet = State->get<ConstraintRange>(SymSym);
+      }
----------------
ASDenysPetrov wrote:
> vsavchenko wrote:
> > Please, correct me if I'm wrong, but I thought that we are iterating over 
> > //all// comparison operators (excluding `<=>`), which means that if we 
> > don't find it on this iteration for let's say `x < y` then we'll find it 
> > (or already did) for `x > y`.  So, my question is - why do we have this 
> > clause then?
> > 
> > And it confuses me that `RangeSet` now corresponds to a //reversed// 
> > operator, while `QueriedOP` remains the same.
> > 
> > Maybe a good commentary explaining why we need it could help!
> No-no. Please, look carefully.
> At first we try to find `X op Y`, when **op** is a comparison operator. If we 
> failed then try to find the reversed (flipped) version of the expression `Y 
> reversed(op) X`.
> Examples: `x > y and y < x`, `x != y and y != x`, `x <= y and y >= x`
> 
> We don't care about operand positions, we just want to find any of its 
> previous relation, and which branch of it we are now in.
Oh, I see now. I missed the part where `RHS` is on the left now :-) 


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

https://reviews.llvm.org/D78933



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

Reply via email to