[PATCH] gcc/doc: list what version each attribute was introduced in

Eric Gallager egall@gwmail.gwu.edu
Thu Jul 13 20:25:00 GMT 2017


On 7/7/17, Jeff Law <law@redhat.com> wrote:
> On 07/06/2017 07:25 AM, Daniel P. Berrange wrote:
>> There are several hundred named attribute keys that have been
>> introduced over many GCC releases. Applications typically need
>> to be compilable with multiple GCC versions, so it is important
>> for developers to know when GCC introduced support for each
>> attribute.
>>
>> This augments the texi docs that list attribute keys with
>> a note of what version introduced the feature. The version
>> information was obtained through archaeology of the GCC source
>> repository release tags, back to gcc-4_0_0-release. For
>> attributes added in 4.0.0 or later, an explicit version will
>> be noted. Any attribute that predates 4.0.0 will simply note
>> that it has existed prior to 4.0.0. It is thought there is
>> little need to go further back in time than 4.0.0 since few,
>> if any, apps will still be using such old compiler versions.
>>
>> Where a named attribute can be used in many contexts (ie the
>> 'visibility' attribute can be used for both functions or
>> variables), it was assumed that the attribute was supported
>> in all use contexts at the same time.
>>
>> Future patches that add new attributes to GCC should be
>> required to follow this new practice, by documenting the
>> version.
> Keying on version #s is generally a terrible way to make your code
> portable.  It's easy to get wrong and due to backporting there's not
> always a strong tie between a version number and the existence of a
> particular feature.
>
> It's far better to actually *test* what your particular compiler
> compiler supports.  I suspect autoconf, for example, probably has some
> infrastructure for testing if specific attributes are supported by the
> compiler.
>
> Jeff
>

gcc sources themselves have tests for attribute availability based on
gcc version number; see include/ansidecl.h:
https://gcc.gnu.org/viewcvs/gcc/trunk/include/ansidecl.h?revision=248205&view=markup
(this is instead of doing things the autoconf way)



More information about the Gcc-patches mailing list