aaron.ballman added a comment. I think all that's missing are some C++ tests and some nits.
================ Comment at: include/clang/Basic/Attr.td:1072 def AllocSize : InheritableAttr { let Spellings = [GCC<"alloc_size">]; + let Subjects = SubjectList<[HasFunctionProto]>; ---------------- arichardson wrote: > aaron.ballman wrote: > > arichardson wrote: > > > aaron.ballman wrote: > > > > arichardson wrote: > > > > > aaron.ballman wrote: > > > > > > Does GCC support writing `alloc_size` on function pointers? > > > > > Yes it does and it seems to be used by some projects. I first > > > > > discovered this while compiling libxml2: > > > > > https://github.com/GNOME/libxml2/blob/35e83488505d501864826125cfe6a7950d6cba78/include/libxml/xmlmemory.h#L66 > > > > Parsed and ignored is different than supported. For instance, I can't > > > > seem to get GCC to produce different behavior here: > > > > https://godbolt.org/z/MI5k_m > > > > > > > > Am I missing something? > > > Ah yes, it does seem like it is ignored. I assumed it would work for GCC > > > since it handles, e.g. the format attribute on function pointers. > > > > > > However, I would like it if we could support it on function pointers even > > > if GCC just ignores is. > > > However, I would like it if we could support it on function pointers even > > > if GCC just ignores is. > > > > We can, but the question is: under what spelling(s)? I think we can support > > this under `__attribute__((alloc_size(N)))` without issue. If GCC is > > looking to implement this same behavior, then I think we can also support > > it under `[[gnu::alloc_size(N)]]`. > > > > If GCC doesn't have plans to add this functionality any time soon, we'd be > > stepping on their implementation namespace by implementing this > > functionality under the gnu vendor namespace and users would then be > > confused as to whose bug it is. In that case, I'd recommend we add > > `[[clang::alloc_size(N)]]` that behaves identically to > > `[[gnu::alloc_size(N)]]' except that it can be applied to function pointer > > types, and not change the behavior of `[[gnu::alloc_size(N)]]`. This can be > > implemented as a single semantic attribute by looking at the semantic > > spelling of the attribute and issuing a compatibility warning if you see > > `[[gnu::alloc_size(N)]]` being applied to a function pointer type, and can > > even recommend a fix-it to switch to `[[clang::alloc_size(N)]]` in that > > case. (See uses of `getSemanticSpelling()` elsewhere in the project for > > examples of how to test which spelling a given sematic attribute was > > spelled with.) > It seems like GCC will also implement this behaviour so using > `[[gnu::alloc_size()]]` > (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88372#c1) should be fine. Fantastic, thank you for coordinating this! I think using the `GCC` spelling is the right way to go then. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D55212/new/ https://reviews.llvm.org/D55212 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits