================ @@ -1636,24 +1914,33 @@ class ULCArraySubscriptGadget : public FixableGadget { const ArraySubscriptExpr *Node; public: - ULCArraySubscriptGadget(const MatchFinder::MatchResult &Result) + ULCArraySubscriptGadget(const MatchResult &Result) : FixableGadget(Kind::ULCArraySubscript), - Node(Result.Nodes.getNodeAs<ArraySubscriptExpr>(ULCArraySubscriptTag)) { + Node(Result.getNodeAs<ArraySubscriptExpr>(ULCArraySubscriptTag)) { assert(Node != nullptr && "Expecting a non-null matching result"); } static bool classof(const Gadget *G) { return G->getKind() == Kind::ULCArraySubscript; } - static Matcher matcher() { - auto ArrayOrPtr = anyOf(hasPointerType(), hasArrayType()); - auto BaseIsArrayOrPtrDRE = hasBase( - ignoringParenImpCasts(declRefExpr(ArrayOrPtr, toSupportedVariable()))); - auto Target = - arraySubscriptExpr(BaseIsArrayOrPtrDRE).bind(ULCArraySubscriptTag); - - return expr(isInUnspecifiedLvalueContext(Target)); + static bool matches(const Stmt *S, llvm::SmallVector<MatchResult> &Results) { + bool Found = false; + findStmtsInUnspecifiedLvalueContext(S, [&Found, &Results](const Expr *E) { + const auto *ASE = dyn_cast<ArraySubscriptExpr>(E); + if (!ASE) + return; + const auto *DRE = + dyn_cast<DeclRefExpr>(ASE->getBase()->IgnoreParenImpCasts()); + if (!DRE || (!hasPointerType(*DRE) && !hasArrayType(*DRE)) || ---------------- ilya-biryukov wrote:
NIT: maybe replace with ` !(hasPointerType(*DRE) || hasArrayType(*DRE))`? it has less negations and (IMO) a little easier to follow 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