shuaiwang added a comment. In https://reviews.llvm.org/D52219#1238423, @JonasToth wrote:
> Do you think it would be possible to the analysis for `>const?< int > ***`-cases? (recursively checking through the pointer levels) I think that should be possible, will do after single-layer pointee analysis is done. I believe we can build multi-layer analysis based on much of the single-layer analysis. ================ Comment at: lib/Analysis/ExprMutationAnalyzer.cpp:198 const Stmt *ExprMutationAnalyzer::findDirectMutation(const Expr *Exp) { + // `Exp` can be *directly* mutated if the type of `Exp` is not const. + // Bail out early otherwise. ---------------- JonasToth wrote: > Just to be sure that i understand: > the changes here are more performance optimizations then directly related to > detect pointee mutations? Yes :) ================ Comment at: lib/Analysis/ExprMutationAnalyzer.cpp:481 + const auto AsArg = + anyOf(callExpr(hasAnyArgument(equalsNode(Exp))), + cxxConstructExpr(hasAnyArgument(equalsNode(Exp))), ---------------- 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 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