[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