[clang] Add FixableGadget for AddAssign in UnspecifiedUntypedContext (PR #71862)

via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 9 12:45:25 PST 2023


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff a2d9d2e1d96a3e81f4eed7f70e0a62cbc0e77cfd ec71495b80e209e7c2dffaaadb1f05814cfafaed -- clang/test/SemaCXX/warn-unsafe-buffer-usage-fixits-add-assign.cpp clang/lib/Analysis/UnsafeBufferUsage.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/Analysis/UnsafeBufferUsage.cpp b/clang/lib/Analysis/UnsafeBufferUsage.cpp
index 54923620274c..fbe20750838f 100644
--- a/clang/lib/Analysis/UnsafeBufferUsage.cpp
+++ b/clang/lib/Analysis/UnsafeBufferUsage.cpp
@@ -1033,20 +1033,20 @@ public:
 class UUCAddAssignGadget : public FixableGadget {
 private:
   static constexpr const char *const UUCAddAssignTag =
-    "PointerAddAssignUnderUUC";
+      "PointerAddAssignUnderUUC";
   static constexpr const char *const IntOffsetTag = "IntOffset";
   static constexpr const char *const OffsetTag = "Offset";
-  
+
   const BinaryOperator *Node; // the `Ptr += n` node
   const IntegerLiteral *IntOffset = nullptr;
   const DeclRefExpr *Offset = nullptr;
 
 public:
   UUCAddAssignGadget(const MatchFinder::MatchResult &Result)
-    : FixableGadget(Kind::UUCAddAssign),
-      Node(Result.Nodes.getNodeAs<BinaryOperator>(UUCAddAssignTag)),
-      IntOffset(Result.Nodes.getNodeAs<IntegerLiteral>(IntOffsetTag)),
-      Offset(Result.Nodes.getNodeAs<DeclRefExpr>(OffsetTag)) {
+      : FixableGadget(Kind::UUCAddAssign),
+        Node(Result.Nodes.getNodeAs<BinaryOperator>(UUCAddAssignTag)),
+        IntOffset(Result.Nodes.getNodeAs<IntegerLiteral>(IntOffsetTag)),
+        Offset(Result.Nodes.getNodeAs<DeclRefExpr>(OffsetTag)) {
     assert(Node != nullptr && "Expecting a non-null matching result");
   }
 
@@ -1056,13 +1056,11 @@ public:
 
   static Matcher matcher() {
     return stmt(isInUnspecifiedUntypedContext(expr(ignoringImpCasts(
-                    binaryOperator(hasOperatorName("+="),
-                      hasLHS(declRefExpr(
-                                                    toSupportedVariable())),
-                      hasRHS(expr(anyOf(
-                                        ignoringImpCasts(declRefExpr().bind(OffsetTag)),
-                                        integerLiteral().bind(IntOffsetTag))))
-                      ).bind(UUCAddAssignTag)))));
+        binaryOperator(
+            hasOperatorName("+="), hasLHS(declRefExpr(toSupportedVariable())),
+            hasRHS(expr(anyOf(ignoringImpCasts(declRefExpr().bind(OffsetTag)),
+                              integerLiteral().bind(IntOffsetTag)))))
+            .bind(UUCAddAssignTag)))));
   }
 
   virtual std::optional<FixItList> getFixits(const Strategy &S) const override;
@@ -1812,7 +1810,8 @@ fixUPCAddressofArraySubscriptWithSpan(const UnaryOperator *Node) {
       FixItHint::CreateReplacement(Node->getSourceRange(), SS.str())};
 }
 
-std::optional<FixItList> UUCAddAssignGadget::getFixits(const Strategy &S) const {
+std::optional<FixItList>
+UUCAddAssignGadget::getFixits(const Strategy &S) const {
   DeclUseList DREs = getClaimedVarUseSites();
 
   if (DREs.size() != 1)
@@ -1825,34 +1824,35 @@ std::optional<FixItList> UUCAddAssignGadget::getFixits(const Strategy &S) const
       const Stmt *AddAssignNode = getBaseStmt();
       StringRef varName = VD->getName();
       const ASTContext &Ctx = VD->getASTContext();
-      
+
       std::string SubSpanOffset;
       if (IntOffset) {
         auto ConstVal = IntOffset->getIntegerConstantExpr(Ctx);
         if (ConstVal->isNegative())
           return std::nullopt;
-        
+
         SmallString<256> OffsetStr;
         ConstVal->toString(OffsetStr);
         SubSpanOffset = OffsetStr.c_str();
-        // To transform UUC(p += IntegerLiteral) to UUC(p = p.subspan(IntegerLiteral)):
+        // To transform UUC(p += IntegerLiteral) to UUC(p =
+        // p.subspan(IntegerLiteral)):
         SubSpanOffset = OffsetStr.c_str();
-      }
-      else {
+      } else {
         SubSpanOffset = Offset->getDecl()->getName().str();
       }
-      
+
       // To transform UUC(p += n) to UUC(p = p.subspan(..)):
-      SS << varName.data() << " = " << varName.data()
-         << ".subspan(" << SubSpanOffset << ")";
-      
-      std::optional<SourceLocation> AddAssignLocation =
-          getEndCharLoc(AddAssignNode, Ctx.getSourceManager(), Ctx.getLangOpts());
+      SS << varName.data() << " = " << varName.data() << ".subspan("
+         << SubSpanOffset << ")";
+
+      std::optional<SourceLocation> AddAssignLocation = getEndCharLoc(
+          AddAssignNode, Ctx.getSourceManager(), Ctx.getLangOpts());
       if (!AddAssignLocation)
         return std::nullopt;
 
       Fixes.push_back(FixItHint::CreateReplacement(
-          SourceRange(AddAssignNode->getBeginLoc(), *AddAssignLocation), SS.str()));
+          SourceRange(AddAssignNode->getBeginLoc(), *AddAssignLocation),
+          SS.str()));
       return Fixes;
     }
   }

``````````

</details>


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


More information about the cfe-commits mailing list