[PATCH] D148381: [Clang] Implement the 'counted_by' attribute
Erich Keane via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 13 11:56:20 PDT 2023
erichkeane added inline comments.
================
Comment at: clang/include/clang/AST/DeclBase.h:482
+ /// Whether it resembles a flexible array member.
+ static bool isFlexibleArrayMemberLike(
+ ASTContext &Context, const Decl *D, QualType Ty,
----------------
Why isn't this a member function?
================
Comment at: clang/include/clang/Basic/Attr.td:4246
+ private:
+ SourceRange countedByFieldLoc;
+ public:
----------------
aaron.ballman wrote:
> Teeny tiniest of coding style nits :-D
Should we instead be capturing the field itself, rather than its location? It seems to me that would be more useful?
================
Comment at: clang/include/clang/Basic/AttrDocs.td:7203
+same structure holding the count of elements in the flexible array. This
+information can be used to improve the results of array bound sanitizer and the
+``__builtin_dynamic_object_size``.
----------------
As this is the purpose of this attribute, it seems to me that the documentation should headline/more obviously highlight that the purpose here is to improve the result of the sanitizer when it comes to flexible array members.
================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:6371
+def err_flexible_array_counted_by_attr_refers_to_self : Error<
+ "counted_by field %0 cannot refer to the flexible array">;
+def err_flexible_array_counted_by_attr_field_not_integral : Error<
----------------
aaron.ballman wrote:
> We try to wrap syntax elements in single quotes in our diagnostics so it's more visually distinct
This one isn't clear... something more specifically about 'cannot point to itself' is perhaps more useful/explainatory.
Also, the beginning of all of these is really quite awkward as well, perhaps something like:
`field %0 referenced by 'counted_by' attribute ...` ?
================
Comment at: clang/lib/AST/DeclBase.cpp:482
+
+ RecordDecl::field_iterator FI(
+ DeclContext::decl_iterator(const_cast<FieldDecl *>(FD)));
----------------
Whats going on here? Is this simply an attempt to see if this is the last one? Can we combine this effort with the 'getLastFieldDecl' above? Alternatively, can we get a good comment here?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148381/new/
https://reviews.llvm.org/D148381
More information about the cfe-commits
mailing list