NoQ accepted this revision.
NoQ added a comment.
This revision is now accepted and ready to land.

Aha, ok!



================
Comment at: clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp:26
 class CastValueChecker : public Checker<eval::Call> {
+  enum class CastKind { Checking, Sugar };
+
----------------
Charusso wrote:
> NoQ wrote:
> > Please explain "Checking" and "Sugar". Checking what? Sugar... you mean 
> > syntactic sugar? For what?
> I have no idea what devs mean by those names:
> - `Checking` kind:
> > The cast<> operator is a “checked cast” operation.
> > The dyn_cast<> operator is a “checking cast” operation.
> from 
> http://llvm.org/docs/ProgrammersManual.html#the-isa-cast-and-dyn-cast-templates
> 
> - `Sugar` kind:
> > Member-template castAs<specific type>. Look through sugar for the 
> > underlying instance of <specific type>.
> > Member-template getAs<specific type>'. Look through sugar for an instance 
> > of <specific type>.
> from 
> https://clang.llvm.org/doxygen/classclang_1_1Type.html#a436b8b08ae7f2404b4712d37986194ce
> and 
> https://clang.llvm.org/doxygen/classclang_1_1Type.html#adae68e1f4c85ede2d36da45fbefc48a2
> 
> - `isa()` would be `Instance` kind:
> > The isa<> operator works exactly like the Java “instanceof” operator.
> from 
> http://llvm.org/docs/ProgrammersManual.html#the-isa-cast-and-dyn-cast-templates
> 
> If you could imagine better names, please let me know. I have tried to use 
> the definitions.
`{ Function, Method }`?


================
Comment at: clang/test/Analysis/cast-value.cpp:156-167
+void evalNonNullParamNonNullReturn(const Shape *S) {
+  const auto *C = cast<Circle>(S);
+  // expected-note@-1 {{Dynamic cast from 'Shape' to 'Circle' succeeds}}
+  // expected-note@-2 {{Assuming pointer value is null}}
+  // expected-note@-3 {{'C' initialized here}}
+
+  (void)(1 / !(bool)C);
----------------
Charusso wrote:
> NoQ wrote:
> > Mmm, wait a sec. That's a false positive. `cast<>` doesn't accept null 
> > pointers. We have `cast_or_null` for this.
> This `Assuming pointer value is null` note is very random. I believe it is 
> not made by me and my code is fine, so I have printed a graph:
> {F9759380}
> Do you see any problem?
Whoops, sorry, i didn't notice the `!`. Seems fine.

Yeah, the note is broken. I have another interesting reproducer for a problem 
with the same note: https://bugs.llvm.org/show_bug.cgi?id=42938


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

https://reviews.llvm.org/D65889



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

Reply via email to