[PATCH] D138253: [-Wunsafe-buffer-usage] NFC: Implement fix-strategies and variable-use-claiming.
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 30 07:59:46 PST 2022
aaron.ballman added inline comments.
================
Comment at: clang/include/clang/Analysis/Analyses/UnsafeBufferUsage.h:30
+ /// of primitive fixits (individual insertions/removals/replacements).
+ using FixItList = llvm::SmallVector<FixItHint, 2>;
+
----------------
steakhal wrote:
> Unless we have a well-formed idea of how many elements we are going to have, we should probably omit it.
Better yet, use a `SmallVectorImpl` (since this shows up in an interface)
================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:11654-11657
+def warn_unsafe_buffer_expression : Warning<"unchecked operation on raw buffer in expression">,
+ InGroup<UnsafeBufferUsage>, DefaultIgnore;
+def warn_unsafe_buffer_variable : Warning<"variable %0 participates in unchecked buffer operations">,
+ InGroup<UnsafeBufferUsage>, DefaultIgnore;
----------------
================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:17-19
+// Because the analysis revolves around variables and their types, we'll need to
+// track uses of variables (aka DeclRefExprs).
+using DeclUseList = SmallVector<const DeclRefExpr *, 1>;
----------------
Do we have to care about data member accesses (which would be a `MemberExpr` and not a `DeclRefExpr`)?
Also, because this shows up in interfaces, it should probably be a `SmallVectorImpl` so the size doesn't matter.
================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:266-271
+ for (const Decl *D: DS->decls()) {
+ if (const auto *VD = dyn_cast<VarDecl>(D)) {
+ assert(Defs.count(VD) == 0 && "Definition already discovered!");
+ Defs[VD] = DS;
+ }
+ }
----------------
Use a `specific_decl_iterator<VarDecl>` instead?
================
Comment at: clang/lib/Analysis/UnsafeBufferUsage.cpp:329-335
+ if (const auto *DRE = Result.Nodes.getNodeAs<DeclRefExpr>("any_dre")) {
+ Tracker.discoverUse(DRE);
+ }
+
+ if (const auto *DS = Result.Nodes.getNodeAs<DeclStmt>("any_ds")) {
+ Tracker.discoverDecl(DS);
+ }
----------------
================
Comment at: clang/lib/Sema/AnalysisBasedWarnings.cpp:2161-2163
+ for (const auto &F: Fixes) {
+ D << F;
+ }
----------------
Hmmm... `llvm::for_each` instead?
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D138253/new/
https://reviews.llvm.org/D138253
More information about the cfe-commits
mailing list