[clang] [Clang] Optimize -Wunsafe-buffer-usage. (PR #125492)

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 27 03:52:09 PST 2025


================
@@ -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


More information about the cfe-commits mailing list