NoQ added a comment.

Looking good now! I still recommend eventually adding tests with casts of 
references.

In D65889#1620128 <https://reviews.llvm.org/D65889#1620128>, @Charusso wrote:

> - May it is better to also check for `getAsCXXRecordDecl()` for obtaining a 
> class.




In D65889#1621587 <https://reviews.llvm.org/D65889#1621587>, @Charusso wrote:

> - The call as `getAsCXXRecordDecl()` sometimes run into an assertion failure, 
> so we need to avoid it


Well, yeah, i was just about to say "good thing that you don't do this because 
we really don't want to get into business of modeling return-by-value `getAs` 
calls such as `SVal::getAs`".



================
Comment at: clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp:51
+
+  const CallDescriptionMap<CastCheck> SugarCastCDM = {
+      {{{"clang", "castAs"}, 0}, &CastValueChecker::evalCastAs},
----------------
Charusso wrote:
> NoQ wrote:
> > I'd rather have only one map from call descriptions to (callback, kind) 
> > pairs. This should make the `evalCall` code much more readable.
> The problem with that I really want to use something like that:
> ```
> auto &&[Check, Kind, MoreData] = *Lookup;
> ```
> but I cannot. Until that time it equally non-readable and difficult to scale 
> sadly. For now it is fine, but that C++17 feature would be more awesome.
I think it turned out pretty pretty (no pun intended).


================
Comment at: clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp:26
 class CastValueChecker : public Checker<eval::Call> {
+  enum class CastKind { Checking, Sugar };
+
----------------
Please explain "Checking" and "Sugar". Checking what? Sugar... you mean 
syntactic sugar? For what?


================
Comment at: clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp:220
 
-  // If we cannot obtain both of the classes we cannot be sure how to model it.
-  if (!CE->getType()->getPointeeCXXRecordDecl() ||
-      !CE->getArg(0)->getType()->getPointeeCXXRecordDecl())
-    return false;
+  const CastCheck *Check = &Lookup->first;
+  CastKind Kind = Lookup->second;
----------------
What's the point of making this a raw pointer? (no pun intended)


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