JonasToth added inline comments.

================
Comment at: lib/Analysis/ExprMutationAnalyzer.cpp:481
+  const auto AsArg =
+      anyOf(callExpr(hasAnyArgument(equalsNode(Exp))),
+            cxxConstructExpr(hasAnyArgument(equalsNode(Exp))),
----------------
shuaiwang wrote:
> JonasToth wrote:
> > shouldn't be the constness of the argument considered here?
> We need that for non-pointee version, but not for pointee version, for 
> example:
> ```
> void g1(int * const);
> 
> void f1() {
>   int *x;
>   g1(x); // <-- x is passed to `g1`, we consider that as a mutation, the 
> argument type do have a top-level const
> }
> 
> void g2(const int *);
> 
> void f2() {
>   int *x;
>   g2(x); // <-- declRefExp(to(x)) is NOT directly passed to `g2`, there's a 
> layer a ImplicitCastExpr<NoOp> in between, and after the implicit cast, the 
> type of the expression becomes "const int *" instead of just "int*", so it'll 
> fail the `isPointeeMutable` check at the beginning of 
> `findPointeeDirectMutation`
> }
> ```
> 
> In summary, we rely on:
> - Checking whether pointee is actually mutable at the beginning
> - Carefully handling casts by not trivially ignoring them unless absolutely 
> safe
I see. That makes sense, thanks for clarification :)


Repository:
  rC Clang

https://reviews.llvm.org/D52219



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

Reply via email to