[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
================
@@ -1636,24 +1914,33 @@ class ULCArraySubscriptGadget : public FixableGadget {
const ArraySubscriptExpr *Node;
public:
- ULCArraySubscriptGadget(const MatchFinder::MatchResult &Result)
+ ULCArraySubscriptGadget(const MatchResult &Result)
: FixableGadget(Kind::ULCArraySubscript),
- Node(Result.Nodes.getNodeAs<ArraySubscriptExpr>(ULCArraySubscriptTag)) {
+ Node(Result.getNodeAs<ArraySubscriptExpr>(ULCArraySubscriptTag)) {
assert(Node != nullptr && "Expecting a non-null matching result");
}
static bool classof(const Gadget *G) {
return G->getKind() == Kind::ULCArraySubscript;
}
- static Matcher matcher() {
- auto ArrayOrPtr = anyOf(hasPointerType(), hasArrayType());
- auto BaseIsArrayOrPtrDRE = hasBase(
- ignoringParenImpCasts(declRefExpr(ArrayOrPtr, toSupportedVariable())));
- auto Target =
- arraySubscriptExpr(BaseIsArrayOrPtrDRE).bind(ULCArraySubscriptTag);
-
- return expr(isInUnspecifiedLvalueContext(Target));
+ static bool matches(const Stmt *S, llvm::SmallVector<MatchResult> &Results) {
+ bool Found = false;
+ findStmtsInUnspecifiedLvalueContext(S, [&Found, &Results](const Expr *E) {
+ const auto *ASE = dyn_cast<ArraySubscriptExpr>(E);
+ if (!ASE)
+ return;
+ const auto *DRE =
+ dyn_cast<DeclRefExpr>(ASE->getBase()->IgnoreParenImpCasts());
+ if (!DRE || (!hasPointerType(*DRE) && !hasArrayType(*DRE)) ||
----------------
ilya-biryukov wrote:
NIT: maybe replace with ` !(hasPointerType(*DRE) || hasArrayType(*DRE))`? it has less negations and (IMO) a little easier to follow
https://github.com/llvm/llvm-project/pull/125492
More information about the cfe-commits
mailing list