================ @@ -1901,28 +2238,37 @@ class UUCAddAssignGadget : public FixableGadget { const Expr *Offset = nullptr; public: - UUCAddAssignGadget(const MatchFinder::MatchResult &Result) + UUCAddAssignGadget(const MatchResult &Result) : FixableGadget(Kind::UUCAddAssign), - Node(Result.Nodes.getNodeAs<BinaryOperator>(UUCAddAssignTag)), - Offset(Result.Nodes.getNodeAs<Expr>(OffsetTag)) { + Node(Result.getNodeAs<BinaryOperator>(UUCAddAssignTag)), + Offset(Result.getNodeAs<Expr>(OffsetTag)) { assert(Node != nullptr && "Expecting a non-null matching result"); } static bool classof(const Gadget *G) { return G->getKind() == Kind::UUCAddAssign; } - static Matcher matcher() { - // clang-format off - return stmt(isInUnspecifiedUntypedContext(expr(ignoringImpCasts( - binaryOperator(hasOperatorName("+="), - hasLHS( - declRefExpr( - hasPointerType(), - toSupportedVariable())), - hasRHS(expr().bind(OffsetTag))) - .bind(UUCAddAssignTag))))); - // clang-format on + static bool matches(const Stmt *S, llvm::SmallVector<MatchResult> &Results) { + bool Found = false; + findStmtsInUnspecifiedUntypedContext(S, [&Found, &Results](const Stmt *S) { + const auto *E = dyn_cast<Expr>(S); + if (!E) + return; + const auto *BO = dyn_cast<BinaryOperator>(E->IgnoreImpCasts()); + if (!BO || BO->getOpcode() != BO_AddAssign) + return; + const auto *DRE = dyn_cast<DeclRefExpr>(BO->getLHS()); + if (!DRE || !hasPointerType(*DRE) || !isSupportedVariable(*DRE) || + !isa<Expr>(BO->getRHS())) ---------------- ilya-biryukov wrote:
`RHS` is always an expression, so this check is redundant. Just remove it. https://github.com/llvm/llvm-project/pull/125492 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits