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

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


================
@@ -1460,30 +1694,32 @@ class UnsafeBufferUsageAttrGadget : public WarningGadget {
   DeclUseList getClaimedVarUseSites() const override { return {}; }
 };
 
-/// A call of a constructor that performs unchecked buffer operations
-/// over one of its pointer parameters, or constructs a class object that will
-/// perform buffer operations that depend on the correctness of the parameters.
+// A call of a constructor that performs unchecked buffer operations
+// over one of its pointer parameters, or constructs a class object that will
+// perform buffer operations that depend on the correctness of the parameters.
 class UnsafeBufferUsageCtorAttrGadget : public WarningGadget {
   constexpr static const char *const OpTag = "cxx_construct_expr";
   const CXXConstructExpr *Op;
 
 public:
-  UnsafeBufferUsageCtorAttrGadget(const MatchFinder::MatchResult &Result)
+  UnsafeBufferUsageCtorAttrGadget(const MatchResult &Result)
       : WarningGadget(Kind::UnsafeBufferUsageCtorAttr),
-        Op(Result.Nodes.getNodeAs<CXXConstructExpr>(OpTag)) {}
+        Op(Result.getNodeAs<CXXConstructExpr>(OpTag)) {}
 
   static bool classof(const Gadget *G) {
     return G->getKind() == Kind::UnsafeBufferUsageCtorAttr;
   }
 
-  static Matcher matcher() {
-    auto HasUnsafeCtorDecl =
-        hasDeclaration(cxxConstructorDecl(hasAttr(attr::UnsafeBufferUsage)));
-    // std::span(ptr, size) ctor is handled by SpanTwoParamConstructorGadget.
-    auto HasTwoParamSpanCtorDecl = SpanTwoParamConstructorGadget::matcher();
-    return stmt(
-        cxxConstructExpr(HasUnsafeCtorDecl, unless(HasTwoParamSpanCtorDecl))
-            .bind(OpTag));
+  static bool matches(const Stmt *S, const ASTContext &Ctx,
+                      MatchResult &Result) {
+    const auto *CE = dyn_cast<CXXConstructExpr>(S);
+    if (!CE || !CE->getConstructor()->hasAttr<UnsafeBufferUsageAttr>())
+      return false;
+    MatchResult tmp;
----------------
ilya-biryukov wrote:

NIT: per LLVM naming style, use `Tmp`.

https://github.com/llvm/llvm-project/pull/125492


More information about the cfe-commits mailing list