https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103223
--- Comment #9 from Martin Sebor <msebor at gcc dot gnu.org> --- Outside of code comments only the user-visible attribute access interface is documented in the manual. The main difference is probably that attribute access can be added by the user for any pair of arguments (without a limit on the number of arguments). Another difference is that the implicit attribute access captures the VLA argument bounds and the [static N] specifier that tells us that array must have at least N elements (this latter part could be used for optimization). The attribute access mode none means that the argument isn't dereferenced but must point to an object of the specified size (I'm guessing that's not quite the same as the 'x' character in fn spec). For the common subset it might make sense to transform attribute access to fnspec when it applies to the first N arguments (with N being the fnspec limit). Come to think of it, an alternate approach to solving the IPA problem with lost attribute access might be to extend attr fnspec to encode the same things as it and for the warnings to use fnspec instead. The same caveat applies that not all of what attribute access describes can be used for optimization, so the API would have to make the distinction quite clear.