lebedev.ri added a comment.

In D58894#1416691 <https://reviews.llvm.org/D58894#1416691>, @djtodoro wrote:

> @lebedev.ri Thanks for your comment!
>
> > Is there any way to model this more generically?
> > I.e don't duplicate every naive matcher (ignoring possible presence of , 
> > op) with an variant that does not ignore ,.
> > E.g. will this handle (a,b)+=1 ?
>
> Hmm, I am not sure if there is a place for that, since this is very specific 
> to comma operators. Any suggestions ?
>  It handles the situation (`(a,b)+=1`).
>
> > What about (a,b).callNonConstMethod(), (a,b).callConstMethod() ?
>
> This needs to be extended to support function/method calls. I guess 
> `ExprMutationAnalyzer::findFunctionArgMutation` requires an improvement.


Well, given

  // LHS of any assignment operators.
  const auto AsAssignmentLhs =
      binaryOperator(isAssignmentOperator(), hasLHS(equalsNode(Exp)));

The problem is that `hasLHS()` may get `,` op.
In `isAssigmentWithCommma()`, you check if that is `,` op, and if so, return 
it's right hand.
And this duplication is the problem as far as i can see.

Now, i don't know the final solution, but have you considered adding something 
like:

  AST_MATCHER_P(Expr, skipCommaOps,
                ast_matchers::internal::Matcher<Expr>, InnerMatcher) {
    const Expr* Result = Node;
    while (const auto *BOComma =
                 dyn_cast_or_null<BinaryOperator>(Result->IgnoreParens())) {
      if (!BOComma->isCommaOp())
        break;
      Result = BOComma->getRHS();
    }
    return Result;
  }

and then simply changing

  // LHS of any assignment operators.
  const auto AsAssignmentLhs =
      binaryOperator(isAssignmentOperator(), hasLHS(equalsNode(Exp)));

to

  // LHS of any assignment operators.
  const auto AsAssignmentLhs =
      binaryOperator(isAssignmentOperator(), 
hasLHS(skipCommaOps(equalsNode(Exp))));

?


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

https://reviews.llvm.org/D58894



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

Reply via email to