================ @@ -1986,112 +2327,142 @@ class DerefSimplePtrArithFixableGadget : public FixableGadget { } }; -/// Scan the function and return a list of gadgets found with provided kits. -static void findGadgets(const Stmt *S, ASTContext &Ctx, - const UnsafeBufferUsageHandler &Handler, - bool EmitSuggestions, FixableGadgetList &FixableGadgets, - WarningGadgetList &WarningGadgets, - DeclUseTracker &Tracker) { +class EvaluatedStmtMatcher : public CustomMatcher { - struct GadgetFinderCallback : MatchFinder::MatchCallback { - GadgetFinderCallback(FixableGadgetList &FixableGadgets, - WarningGadgetList &WarningGadgets, - DeclUseTracker &Tracker) - : FixableGadgets(FixableGadgets), WarningGadgets(WarningGadgets), - Tracker(Tracker) {} - - void run(const MatchFinder::MatchResult &Result) override { - // In debug mode, assert that we've found exactly one gadget. - // This helps us avoid conflicts in .bind() tags. -#if NDEBUG -#define NEXT return -#else - [[maybe_unused]] int numFound = 0; -#define NEXT ++numFound -#endif +public: + WarningGadgetList &WarningGadgets; - if (const auto *DRE = Result.Nodes.getNodeAs<DeclRefExpr>("any_dre")) { - Tracker.discoverUse(DRE); - NEXT; - } + EvaluatedStmtMatcher(WarningGadgetList &WarningGadgets) + : WarningGadgets(WarningGadgets) {} - if (const auto *DS = Result.Nodes.getNodeAs<DeclStmt>("any_ds")) { - Tracker.discoverDecl(DS); - NEXT; - } + bool matches(const DynTypedNode &DynNode, ASTContext &Ctx, + const UnsafeBufferUsageHandler &Handler) override { + const Stmt *S = DynNode.get<Stmt>(); + if (!S) + return false; + + MatchResult Result; +#define WARNING_GADGET(name) \ ---------------- ivanaivanovska wrote:
Done. (I kept the original macros and added the missing parameters where needed.) https://github.com/llvm/llvm-project/pull/124554 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits