diff mbox

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

Message ID 20170706132518.GO3988@redhat.com
State New
Headers show

Commit Message

Daniel P. Berrangé July 6, 2017, 1:25 p.m. UTC
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.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
 gcc/ChangeLog       |   6 +
 gcc/doc/extend.texi | 614 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 620 insertions(+)

NB, I have not signed any FSF individual copyright assignment
agreement, as this patch is submitted under Red Hat copyright
ownership

Comments

Jeff Law July 7, 2017, 5:01 p.m. UTC | #1
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
Mike Stump July 7, 2017, 7:33 p.m. UTC | #2
On Jul 7, 2017, at 10:01 AM, 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.

> Keying on version #s is generally a terrible way to make your code
> portable.

> It's far better to actually *test* what your particular compiler
> compiler supports

So, if someone wanted to explore ways to make code that uses these better; a possibility might be to use __has_builtin a la clang:

  https://clang.llvm.org/docs/LanguageExtensions.html

It also has __has_feature and __has_extension.  At least it seems reasonably complete, and then people can feature test specific bits on a fine grained basis.

It doesn't solve history (without a re-release of old versions), but, it can provide a framework for solving the problem for the future.
Daniel P. Berrangé July 10, 2017, 8 a.m. UTC | #3
On Fri, Jul 07, 2017 at 11:01:51AM -0600, Jeff Law 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.

That could be done if the attributes are used for internal code, as you can
rely on having run autoconf before using the header file. If you are adding
attributes to public header files of a library, the usage has to be
self-contained to that applications can simply include your library's headers
without having to perform a bunch of extra checks. Keying off version appears
to be the only viable approach here, and is widely used for wrapping the
attribute usage, so I think this documentation still has value.

Regards,
Daniel
Sandra Loosemore July 12, 2017, 3:24 p.m. UTC | #4
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.

I have to reject this documentation patch as-is because the new material 
isn't in complete sentences ending with a period.

I'm also skeptical that it's a good idea overall to add this information 
to the GCC manual, although I'll bow to the wishes of the community on 
this.  The arguments I'd make against adding it are:

(1) The GCC manual is already tied to a specific version of GCC and 
searchable manuals for old versions of GCC are readily available online.

(2) Information about backward compatibility with old versions becomes 
less relevant as time goes on, and I've already removed a bunch of cruft 
describing changes that happened 10-20+ years ago.

(3) We don't have similar historical information for any other GCC 
language extensions, builtins, etc.

(4) The manual is already too long.

If the consensus of the community is that we really need this historical 
information in the current manual, I'll consider a revised patch.

-Sandra
Eric Gallager July 13, 2017, 8:25 p.m. UTC | #5
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)
Martin Sebor July 17, 2017, 5:16 p.m. UTC | #6
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.

A few years ago I created something like this for command line
options.  I used a script to download the GCC manual for each
version, extract new command line options from the index, and
tabulate them.

>
> 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.

I think this is great material.  I don't have a strong opinion
on where it belongs (the manual, the Wiki, or somewhere else),
but given how tedious it can be to get at this information I
think having it available somewhere in some form could be quite
useful.  (I specifically needed it in a tabular form, with
option names on left and versions in columns.)

Martin

PS The version information isn't just used by engineers writing
code (where I agree that having a portable API to query it would
be more robust than copying it from a static page).  In my
experience, it's also used to drive decisions about adopting
different versions of GCC or versions of other compilers that
aim to be (near) 100% GCC compatible (such as Intel ICC).
diff mbox

Patch

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2acf140..d693787 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@ 
+2017-07-06  Daniel P. Berrange  <berrange@redhat.com>
+
+	* doc/extend.texi (Function Attributes, Type Attributes)
+	Label Attributes, Enumerator Attributes, C++ Attributes): Add
+	version information for each listed attribute.
+
 2017-07-06  Christophe Lyon  <christophe.lyon@linaro.org>
 
 	* doc/sourcebuild.texi (Test Directives, Variants of
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 03ba8fc..7df85b0 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -2354,6 +2354,8 @@  is not defined in the same translation unit.
 This attribute requires assembler and object file support,
 and may not be available on all targets.
 
+Introduced before 4.0.0
+
 @item aligned (@var{alignment})
 @cindex @code{aligned} function attribute
 This attribute specifies a minimum alignment for the function,
@@ -2375,6 +2377,8 @@  further information.
 The @code{aligned} attribute can also be used for variables and fields
 (@pxref{Variable Attributes}.)
 
+Introduced before 4.0.0
+
 @item alloc_align
 @cindex @code{alloc_align} function attribute
 The @code{alloc_align} attribute is used to tell the compiler that the
@@ -2396,6 +2400,8 @@  void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))
 declares that @code{my_memalign} returns memory with minimum alignment
 given by parameter 1.
 
+Introduced in 4.9.0
+
 @item alloc_size
 @cindex @code{alloc_size} function attribute
 The @code{alloc_size} attribute is used to tell the compiler that the
@@ -2421,6 +2427,8 @@  declares that @code{my_calloc} returns memory of the size given by
 the product of parameter 1 and 2 and that @code{my_realloc} returns memory
 of the size given by parameter 2.
 
+Introduced in 4.9.0
+
 @item always_inline
 @cindex @code{always_inline} function attribute
 Generally, functions are not inlined unless optimization is specified.
@@ -2431,6 +2439,8 @@  Note that if such a function is called indirectly the compiler may
 or may not inline it depending on optimization level and a failure
 to inline an indirect call may or may not be diagnosed.
 
+Introduced before 4.0.0
+
 @item artificial
 @cindex @code{artificial} function attribute
 This attribute is useful for small inline wrappers that if possible
@@ -2439,6 +2449,8 @@  info format it either means marking the function as artificial
 or using the caller location for all instructions within the inlined
 body.
 
+Introduced in 4.3.0
+
 @item assume_aligned
 @cindex @code{assume_aligned} function attribute
 The @code{assume_aligned} attribute is used to tell the compiler that the
@@ -2458,12 +2470,16 @@  declares that @code{my_alloc1} returns 16-byte aligned pointer and
 that @code{my_alloc2} returns a pointer whose value modulo 32 is equal
 to 8.
 
+Introduced in 4.9.0
+
 @item bnd_instrument
 @cindex @code{bnd_instrument} function attribute
 The @code{bnd_instrument} attribute on functions is used to inform the
 compiler that the function should be instrumented when compiled
 with the @option{-fchkp-instrument-marked-only} option.
 
+Introduced in 5.1.0
+
 @item bnd_legacy
 @cindex @code{bnd_legacy} function attribute
 @cindex Pointer Bounds Checker attributes
@@ -2471,6 +2487,8 @@  The @code{bnd_legacy} attribute on functions is used to inform the
 compiler that the function should not be instrumented when compiled
 with the @option{-fcheck-pointer-bounds} option.
 
+Introduced in 5.1.0
+
 @item cold
 @cindex @code{cold} function attribute
 The @code{cold} attribute on functions is used to inform the compiler that
@@ -2486,6 +2504,8 @@  of hot functions that do call marked functions in rare occasions.
 When profile feedback is available, via @option{-fprofile-use}, cold functions
 are automatically detected and this attribute is ignored.
 
+Introduced in 4.3.0
+
 @item const
 @cindex @code{const} function attribute
 @cindex functions that have no side effects
@@ -2501,6 +2521,8 @@  function that calls a non-@code{const} function usually must not be
 @code{const}.  It does not make sense for a @code{const} function to
 return @code{void}.
 
+Introduced before 4.0.0
+
 @item constructor
 @itemx destructor
 @itemx constructor (@var{priority})
@@ -2529,6 +2551,8 @@  decorated with attribute @code{constructor} are invoked is unspecified.
 In mixed declarations, attribute @code{init_priority} can be used to
 impose a specific ordering.
 
+Introduced before 4.0.0
+
 @item deprecated
 @itemx deprecated (@var{msg})
 @cindex @code{deprecated} function attribute
@@ -2554,6 +2578,8 @@  present.
 The @code{deprecated} attribute can also be used for variables and
 types (@pxref{Variable Attributes}, @pxref{Type Attributes}.)
 
+Introduced before 4.0.0
+
 @item error ("@var{message}")
 @itemx warning ("@var{message}")
 @cindex @code{error} function attribute
@@ -2574,6 +2600,8 @@  when using these attributes the problem is diagnosed
 earlier and with exact location of the call even in presence of inline
 functions or when not emitting debugging information.
 
+Introduced in 4.3.0
+
 @item externally_visible
 @cindex @code{externally_visible} function attribute
 This attribute, attached to a global variable or function, nullifies
@@ -2589,6 +2617,8 @@  produced by @command{gold}.
 For other linkers that cannot generate resolution file,
 explicit @code{externally_visible} attributes are still necessary.
 
+Introduced in 4.1.0
+
 @item flatten
 @cindex @code{flatten} function attribute
 Generally, inlining into a function is limited.  For a function marked with
@@ -2596,6 +2626,8 @@  this attribute, every call inside this function is inlined, if possible.
 Whether the function itself is considered for inlining depends on its size and
 the current inlining parameters.
 
+Introduced in 4.1.0
+
 @item format (@var{archetype}, @var{string-index}, @var{first-to-check})
 @cindex @code{format} function attribute
 @cindex functions with @code{printf}, @code{scanf}, @code{strftime} or @code{strfmon} style arguments
@@ -2673,6 +2705,8 @@  The target may also provide additional types of format checks.
 @xref{Target Format Checks,,Format Checks Specific to Particular
 Target Machines}.
 
+Introduced before 4.0.0
+
 @item format_arg (@var{string-index})
 @cindex @code{format_arg} function attribute
 @opindex Wformat-nonliteral
@@ -2726,6 +2760,8 @@  The target may also allow additional types in @code{format-arg} attributes.
 @xref{Target Format Checks,,Format Checks Specific to Particular
 Target Machines}.
 
+Introduced before 4.0.0
+
 @item gnu_inline
 @cindex @code{gnu_inline} function attribute
 This attribute should be used with a function that is also declared
@@ -2764,6 +2800,8 @@  In C++, this attribute does not depend on @code{extern} in any way,
 but it still requires the @code{inline} keyword to enable its special
 behavior.
 
+Introduced in 4.2.0
+
 @item hot
 @cindex @code{hot} function attribute
 The @code{hot} attribute on a function is used to inform the compiler that
@@ -2775,6 +2813,8 @@  improving locality.
 When profile feedback is available, via @option{-fprofile-use}, hot functions
 are automatically detected and this attribute is ignored.
 
+Introduced in 4.3.0
+
 @item ifunc ("@var{resolver}")
 @cindex @code{ifunc} function attribute
 @cindex indirect functions
@@ -2824,6 +2864,8 @@  void *memcpy (void *, const void *, size_t)
 Indirect functions cannot be weak.  Binutils version 2.20.1 or higher
 and GNU C Library version 2.11.1 are required to use this feature.
 
+Introduced in 4.6.0
+
 @item interrupt
 @itemx interrupt_handler
 Many GCC back ends support attributes to indicate that a function is
@@ -2869,6 +2911,8 @@  units into one, for example, by using the link-time optimization.  For
 this reason the attribute is not allowed on types to annotate indirect
 calls.
 
+Introduced in 4.6.0
+
 @item malloc
 @cindex @code{malloc} function attribute
 @cindex functions that behave like malloc
@@ -2883,11 +2927,15 @@  a pointer to uninitialized or zeroed-out storage.  However, functions
 like @code{realloc} do not have this property, as they can return a
 pointer to storage containing pointers.
 
+Introduced before 4.0.0
+
 @item no_icf
 @cindex @code{no_icf} function attribute
 This function attribute prevents a functions from being merged with another
 semantically equivalent function.
 
+Introduced in 5.1.0
+
 @item no_instrument_function
 @cindex @code{no_instrument_function} function attribute
 @opindex finstrument-functions
@@ -2895,12 +2943,16 @@  If @option{-finstrument-functions} is given, profiling function calls are
 generated at entry and exit of most user-compiled functions.
 Functions with this attribute are not so instrumented.
 
+Introduced before 4.0.0
+
 @item no_profile_instrument_function
 @cindex @code{no_profile_instrument_function} function attribute
 The @code{no_profile_instrument_function} attribute on functions is used
 to inform the compiler that it should not process any profile feedback based
 optimization code instrumentation.
 
+Introduced in 7.1.0
+
 @item no_reorder
 @cindex @code{no_reorder} function attribute
 Do not reorder functions or variables marked @code{no_reorder}
@@ -2911,6 +2963,8 @@  This has a similar effect
 as the @option{-fno-toplevel-reorder} option, but only applies to the
 marked symbols.
 
+Introduced in 5.1.0
+
 @item no_sanitize ("@var{sanitize_option}")
 @cindex @code{no_sanitize} function attribute
 The @code{no_sanitize} attribute on functions is used
@@ -2923,6 +2977,8 @@  void __attribute__ ((no_sanitize ("alignment", "object-size")))
 f () @{ /* @r{Do something.} */; @}
 @end smallexample
 
+Introduced in 8.1.0
+
 @item no_sanitize_address
 @itemx no_address_safety_analysis
 @cindex @code{no_sanitize_address} function attribute
@@ -2933,18 +2989,24 @@  The @code{no_address_safety_analysis} is a deprecated alias of the
 @code{no_sanitize_address} attribute, new code should use
 @code{no_sanitize_address}.
 
+Introduced in 4.8.0
+
 @item no_sanitize_thread
 @cindex @code{no_sanitize_thread} function attribute
 The @code{no_sanitize_thread} attribute on functions is used
 to inform the compiler that it should not instrument memory accesses
 in the function when compiling with the @option{-fsanitize=thread} option.
 
+Introduced in 5.1.0
+
 @item no_sanitize_undefined
 @cindex @code{no_sanitize_undefined} function attribute
 The @code{no_sanitize_undefined} attribute on functions is used
 to inform the compiler that it should not check for undefined behavior
 in the function when compiling with the @option{-fsanitize=undefined} option.
 
+Introduced in 4.9.0
+
 @item no_split_stack
 @cindex @code{no_split_stack} function attribute
 @opindex fsplit-stack
@@ -2953,12 +3015,16 @@  prologue which decides whether to split the stack.  Functions with the
 @code{no_split_stack} attribute do not have that prologue, and thus
 may run with only a small amount of stack space available.
 
+Introduced in 4.6.0
+
 @item no_stack_limit
 @cindex @code{no_stack_limit} function attribute
 This attribute locally overrides the @option{-fstack-limit-register}
 and @option{-fstack-limit-symbol} command-line options; it has the effect
 of disabling stack limit checking in the function it applies to.
 
+Introduced before 4.0.0
+
 @item noclone
 @cindex @code{noclone} function attribute
 This function attribute prevents a function from being considered for
@@ -2966,6 +3032,8 @@  cloning---a mechanism that produces specialized copies of functions
 and which is (currently) performed by interprocedural constant
 propagation.
 
+Introduced in 4.5.0
+
 @item noinline
 @cindex @code{noinline} function attribute
 This function attribute prevents a function from being considered for
@@ -2984,6 +3052,8 @@  asm ("");
 (@pxref{Extended Asm}) in the called function, to serve as a special
 side-effect.
 
+Introduced before 4.0.0
+
 @item nonnull (@var{arg-index}, @dots{})
 @cindex @code{nonnull} function attribute
 @cindex functions with non-null pointer arguments
@@ -3014,6 +3084,8 @@  my_memcpy (void *dest, const void *src, size_t len)
         __attribute__((nonnull));
 @end smallexample
 
+Introduced before 4.0.0
+
 @item noplt
 @cindex @code{noplt} function attribute
 The @code{noplt} attribute is the counterpart to option @option{-fno-plt}.
@@ -3044,6 +3116,8 @@  in position-independent code.
 In position-dependent code, a few targets also convert calls to
 functions that are marked to not use the PLT to use the GOT instead.
 
+Introduced in 6.1.0
+
 @item noreturn
 @cindex @code{noreturn} function attribute
 @cindex functions that never return
@@ -3081,6 +3155,8 @@  restored before calling the @code{noreturn} function.
 It does not make sense for a @code{noreturn} function to have a return
 type other than @code{void}.
 
+Introduced before 4.0.0
+
 @item nothrow
 @cindex @code{nothrow} function attribute
 The @code{nothrow} attribute is used to inform the compiler that a
@@ -3089,6 +3165,8 @@  the standard C library can be guaranteed not to throw an exception
 with the notable exceptions of @code{qsort} and @code{bsearch} that
 take function pointer arguments.
 
+Introduced before 4.0.0
+
 @item optimize
 @cindex @code{optimize} function attribute
 The @code{optimize} attribute is used to specify that a function is to
@@ -3105,6 +3183,8 @@  that affect more than one function.
 This attribute should be used for debugging purposes only.  It is not
 suitable in production code.
 
+Introduced in 4.4.0
+
 @item pure
 @cindex @code{pure} function attribute
 @cindex functions that have no side effects
@@ -3128,6 +3208,8 @@  Interesting non-pure functions are functions with infinite loops or those
 depending on volatile memory or other system resource, that may change between
 two consecutive calls (such as @code{feof} in a multithreading environment).
 
+Introduced before 4.0.0
+
 @item returns_nonnull
 @cindex @code{returns_nonnull} function attribute
 The @code{returns_nonnull} attribute specifies that the function
@@ -3142,6 +3224,8 @@  mymalloc (size_t len) __attribute__((returns_nonnull));
 lets the compiler optimize callers based on the knowledge
 that the return value will never be null.
 
+Introduced in 4.9.0
+
 @item returns_twice
 @cindex @code{returns_twice} function attribute
 @cindex functions that return more than once
@@ -3153,6 +3237,8 @@  function.  Examples of such functions are @code{setjmp} and @code{vfork}.
 The @code{longjmp}-like counterpart of such function, if any, might need
 to be marked with the @code{noreturn} attribute.
 
+Introduced in 4.1.0
+
 @item section ("@var{section-name}")
 @cindex @code{section} function attribute
 @cindex functions in arbitrary sections
@@ -3174,6 +3260,8 @@  attribute is not available on all platforms.
 If you need to map the entire contents of a module to a particular
 section, consider using the facilities of the linker instead.
 
+Introduced before 4.0.0
+
 @item sentinel
 @cindex @code{sentinel} function attribute
 This function attribute ensures that a parameter in a function call is
@@ -3201,6 +3289,8 @@  with a copy that redefines NULL appropriately.
 The warnings for missing or incorrect sentinels are enabled with
 @option{-Wformat}.
 
+Introduced in 4.0.0
+
 @item simd
 @itemx simd("@var{mask}")
 @cindex @code{simd} function attribute
@@ -3225,12 +3315,16 @@  If the attribute is specified and @code{#pragma omp declare simd} is
 present on a declaration and the @option{-fopenmp} or @option{-fopenmp-simd}
 switch is specified, then the attribute is ignored.
 
+Introduced in 6.1.0
+
 @item stack_protect
 @cindex @code{stack_protect} function attribute
 This attribute adds stack protection code to the function if 
 flags @option{-fstack-protector}, @option{-fstack-protector-strong}
 or @option{-fstack-protector-explicit} are set.
 
+Introduced in 5.1.0
+
 @item target (@var{options})
 @cindex @code{target} function attribute
 Multiple target back ends implement the @code{target} attribute
@@ -3289,12 +3383,16 @@  the @code{ifunc} attribute above) that dynamically selects a clone
 suitable for current architecture.  The resolver is created only if there
 is a usage of a function with @code{target_clones} attribute.
 
+Introduced in 6.1.0
+
 @item unused
 @cindex @code{unused} function attribute
 This attribute, attached to a function, means that the function is meant
 to be possibly unused.  GCC does not produce a warning for this
 function.
 
+Introduced before 4.0.0
+
 @item used
 @cindex @code{used} function attribute
 This attribute, attached to a function, means that code must be emitted
@@ -3306,6 +3404,8 @@  When applied to a member function of a C++ class template, the
 attribute also means that the function is instantiated if the
 class itself is instantiated.
 
+Introduced before 4.0.0
+
 @item visibility ("@var{visibility_type}")
 @cindex @code{visibility} function attribute
 This attribute affects the linkage of the declaration to which it is attached.
@@ -3411,6 +3511,8 @@  visibility of their template.
 If both the template and enclosing class have explicit visibility, the
 visibility from the template is used.
 
+Introduced before 4.0.0
+
 @item warn_unused_result
 @cindex @code{warn_unused_result} function attribute
 The @code{warn_unused_result} attribute causes a warning to be emitted
@@ -3432,6 +3534,8 @@  int foo ()
 @noindent
 results in warning on line 5.
 
+Introduced before 4.0.0
+
 @item weak
 @cindex @code{weak} function attribute
 The @code{weak} attribute causes the declaration to be emitted as a weak
@@ -3441,6 +3545,8 @@  also be used with non-function declarations.  Weak symbols are supported
 for ELF targets, and also for a.out targets when using the GNU assembler
 and linker.
 
+Introduced before 4.0.0
+
 @item weakref
 @itemx weakref ("@var{target}")
 @cindex @code{weakref} function attribute
@@ -3476,6 +3582,7 @@  performing a reloadable link on them.
 At present, a declaration to which @code{weakref} is attached can
 only be @code{static}.
 
+Introduced in 4.1.0
 
 @end table
 
@@ -3498,6 +3605,8 @@  uses floating-point code, then the compiler gives an error.  This is
 the same behavior as that of the command-line option
 @option{-mgeneral-regs-only}.
 
+Introduced in 6.1.0
+
 @item fix-cortex-a53-835769
 @cindex @code{fix-cortex-a53-835769} function attribute, AArch64
 Indicates that the workaround for the Cortex-A53 erratum 835769 should be
@@ -3506,18 +3615,24 @@  function specify the negated form: @code{no-fix-cortex-a53-835769}.
 This corresponds to the behavior of the command line options
 @option{-mfix-cortex-a53-835769} and @option{-mno-fix-cortex-a53-835769}.
 
+Introduced in 6.1.0
+
 @item cmodel=
 @cindex @code{cmodel=} function attribute, AArch64
 Indicates that code should be generated for a particular code model for
 this function.  The behavior and permissible arguments are the same as
 for the command line option @option{-mcmodel=}.
 
+Introduced in 6.1.0
+
 @item strict-align
 @cindex @code{strict-align} function attribute, AArch64
 Indicates that the compiler should not assume that unaligned memory references
 are handled by the system.  The behavior is the same as for the command-line
 option @option{-mstrict-align}.
 
+Introduced in 6.1.0
+
 @item omit-leaf-frame-pointer
 @cindex @code{omit-leaf-frame-pointer} function attribute, AArch64
 Indicates that the frame pointer should be omitted for a leaf function call.
@@ -3526,36 +3641,48 @@  To keep the frame pointer, the inverse attribute
 the same behavior as the command-line options @option{-momit-leaf-frame-pointer}
 and @option{-mno-omit-leaf-frame-pointer}.
 
+Introduced in 6.1.0
+
 @item tls-dialect=
 @cindex @code{tls-dialect=} function attribute, AArch64
 Specifies the TLS dialect to use for this function.  The behavior and
 permissible arguments are the same as for the command-line option
 @option{-mtls-dialect=}.
 
+Introduced in 6.1.0
+
 @item arch=
 @cindex @code{arch=} function attribute, AArch64
 Specifies the architecture version and architectural extensions to use
 for this function.  The behavior and permissible arguments are the same as
 for the @option{-march=} command-line option.
 
+Introduced in 6.1.0
+
 @item tune=
 @cindex @code{tune=} function attribute, AArch64
 Specifies the core for which to tune the performance of this function.
 The behavior and permissible arguments are the same as for the @option{-mtune=}
 command-line option.
 
+Introduced in 6.1.0
+
 @item cpu=
 @cindex @code{cpu=} function attribute, AArch64
 Specifies the core for which to tune the performance of this function and also
 whose architectural features to use.  The behavior and valid arguments are the
 same as for the @option{-mcpu=} command-line option.
 
+Introduced in 6.1.0
+
 @item sign-return-address
 @cindex @code{sign-return-address} function attribute, AArch64
 Select the function scope on which return address signing will be applied.  The
 behavior and permissible arguments are the same as for the command-line option
 @option{-msign-return-address=}.  The default value is @code{none}.
 
+Introduced in 7.1.0
+
 @end table
 
 The above target attributes can be specified as follows:
@@ -3650,6 +3777,8 @@  void f () __attribute__ ((interrupt ("ilink1")));
 Permissible values for this parameter are: @w{@code{ilink1}} and
 @w{@code{ilink2}}.
 
+Introduced before 4.0.0
+
 @item long_call
 @itemx medium_call
 @itemx short_call
@@ -3672,6 +3801,9 @@  the call site.  A function marked with the @code{short_call}
 attribute will always be close enough to be called with a conditional
 branch-and-link instruction, which has a 21-bit offset from
 the call site.
+
+Introduced in 4.9.0
+
 @end table
 
 @node ARM Function Attributes
@@ -3701,11 +3833,15 @@  Permissible values for this parameter are: @code{IRQ}, @code{FIQ},
 On ARMv7-M the interrupt type is ignored, and the attribute means the function
 may be called with a word-aligned stack pointer.
 
+Introduced before 4.0.0
+
 @item isr
 @cindex @code{isr} function attribute, ARM
 Use this attribute on ARM to write Interrupt Service Routines. This is an
 alias to the @code{interrupt} attribute above.
 
+Introduced before 4.0.0
+
 @item long_call
 @itemx short_call
 @cindex @code{long_call} function attribute, ARM
@@ -3721,6 +3857,8 @@  calling sequence.   The @code{short_call} attribute always places
 the offset to the function from the call site into the @samp{BL}
 instruction directly.
 
+Introduced before 4.0.0
+
 @item naked
 @cindex @code{naked} function attribute, ARM
 This attribute allows the compiler to construct the
@@ -3732,6 +3870,8 @@  prologue/epilogue sequences generated by the compiler. Only basic
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
 
+Introduced before 4.0.0
+
 @item pcs
 @cindex @code{pcs} function attribute, ARM
 
@@ -3754,6 +3894,8 @@  double f2d (float) __attribute__((pcs("aapcs")));
 Variadic functions always use the @code{"aapcs"} calling convention and
 the compiler rejects attempts to specify an alternative.
 
+Introduced in 4.5.0
+
 @item target (@var{options})
 @cindex @code{target} function attribute
 As discussed in @ref{Common Function Attributes}, this attribute 
@@ -3767,18 +3909,24 @@  On ARM, the following options are allowed:
 Force code generation in the Thumb (T16/T32) ISA, depending on the
 architecture level.
 
+Introduced in 6.1.0
+
 @item arm
 @cindex @code{target("arm")} function attribute, ARM
 Force code generation in the ARM (A32) ISA.
 
 Functions from different modes can be inlined in the caller's mode.
 
+Introduced in 6.1.0
+
 @item fpu=
 @cindex @code{target("fpu=")} function attribute, ARM
 Specifies the fpu for which to tune the performance of this function.
 The behavior and permissible arguments are the same as for the @option{-mfpu=}
 command-line option.
 
+Introduced in 6.1.0
+
 @end table
 
 @end table
@@ -3804,6 +3952,8 @@  that does not insert a @code{SEI} instruction.  If both @code{signal} and
 @code{interrupt} are specified for the same function, @code{signal}
 is silently ignored.
 
+Introduced before 4.0.0
+
 @item naked
 @cindex @code{naked} function attribute, AVR
 This attribute allows the compiler to construct the
@@ -3815,6 +3965,8 @@  prologue/epilogue sequences generated by the compiler. Only basic
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
 
+Introduced before 4.0.0
+
 @item OS_main
 @itemx OS_task
 @cindex @code{OS_main} function attribute, AVR
@@ -3833,6 +3985,8 @@  is entered like for, e@.g@. task functions in a multi-threading operating
 system. In that case, changing the stack pointer register is
 guarded by save/clear/restore of the global interrupt enable flag.
 
+Introduced in 4.3.0
+
 The differences to the @code{naked} function attribute are:
 @itemize @bullet
 @item @code{naked} functions do not have a return instruction whereas 
@@ -3843,6 +3997,10 @@  or a frame pointer whereas @code{OS_main} and @code{OS_task} do this
 as needed.
 @end itemize
 
+Introduced in 4.3.0 (@code{OS_task})
+
+Introduced in 4.4.0 (@code{OS_main})
+
 @item signal
 @cindex @code{signal} function attribute, AVR
 Use this attribute on the AVR to indicate that the specified
@@ -3861,6 +4019,9 @@  application which is responsibility of the application.
 
 If both @code{signal} and @code{interrupt} are specified for the same
 function, @code{signal} is silently ignored.
+
+Introduced before 4.0.0
+
 @end table
 
 @node Blackfin Function Attributes
@@ -3878,6 +4039,8 @@  is an exception handler.  The compiler generates function entry and
 exit sequences suitable for use in an exception handler when this
 attribute is present.
 
+Introduced in 4.1.0
+
 @item interrupt_handler
 @cindex @code{interrupt_handler} function attribute, Blackfin
 Use this attribute to
@@ -3885,6 +4048,8 @@  indicate that the specified function is an interrupt handler.  The compiler
 generates function entry and exit sequences suitable for use in an
 interrupt handler when this attribute is present.
 
+Introduced in 4.1.0
+
 @item kspisusp
 @cindex @code{kspisusp} function attribute, Blackfin
 @cindex User stack pointer in interrupts on the Blackfin
@@ -3892,6 +4057,8 @@  When used together with @code{interrupt_handler}, @code{exception_handler}
 or @code{nmi_handler}, code is generated to load the stack pointer
 from the USP register in the function prologue.
 
+Introduced in 4.1.0
+
 @item l1_text
 @cindex @code{l1_text} function attribute, Blackfin
 This attribute specifies a function to be placed into L1 Instruction
@@ -3899,6 +4066,8 @@  SRAM@. The function is put into a specific section named @code{.l1.text}.
 With @option{-mfdpic}, function calls with a such function as the callee
 or caller uses inlined PLT.
 
+Introduced in 4.3.0
+
 @item l2
 @cindex @code{l2} function attribute, Blackfin
 This attribute specifies a function to be placed into L2
@@ -3906,6 +4075,8 @@  SRAM. The function is put into a specific section named
 @code{.l2.text}. With @option{-mfdpic}, callers of such functions use
 an inlined PLT.
 
+Introduced in 4.5.0
+
 @item longcall
 @itemx shortcall
 @cindex indirect calls, Blackfin
@@ -3918,6 +4089,8 @@  require a different (more expensive) calling sequence.  The
 enough for the shorter calling sequence to be used.  These attributes
 override the @option{-mlongcall} switch.
 
+Introduced in 4.1.0
+
 @item nesting
 @cindex @code{nesting} function attribute, Blackfin
 @cindex Allow nesting in an interrupt handler on the Blackfin processor
@@ -3925,6 +4098,8 @@  Use this attribute together with @code{interrupt_handler},
 @code{exception_handler} or @code{nmi_handler} to indicate that the function
 entry code should enable nested interrupts or exceptions.
 
+Introduced in 4.1.0
+
 @item nmi_handler
 @cindex @code{nmi_handler} function attribute, Blackfin
 @cindex NMI handler functions on the Blackfin processor
@@ -3933,12 +4108,17 @@  is an NMI handler.  The compiler generates function entry and
 exit sequences suitable for use in an NMI handler when this
 attribute is present.
 
+Introduced in 4.1.0
+
 @item saveall
 @cindex @code{saveall} function attribute, Blackfin
 @cindex save all registers on the Blackfin
 Use this attribute to indicate that
 all registers except the stack pointer should be saved in the prologue
 regardless of whether they are used or not.
+
+Introduced in 4.1.0
+
 @end table
 
 @node CR16 Function Attributes
@@ -3953,6 +4133,9 @@  Use this attribute to indicate
 that the specified function is an interrupt handler.  The compiler generates
 function entry and exit sequences suitable for use in an interrupt handler
 when this attribute is present.
+
+Introduced in 4.7.0
+
 @end table
 
 @node Epiphany Function Attributes
@@ -3967,6 +4150,8 @@  This attribute causes the compiler to emit
 instructions to disable interrupts for the duration of the given
 function.
 
+Introduced in 4.7.0
+
 @item forwarder_section
 @cindex @code{forwarder_section} function attribute, Epiphany
 This attribute modifies the behavior of an interrupt handler.
@@ -3975,6 +4160,8 @@  reached by a branch instruction, so generate a local memory trampoline
 to transfer control.  The single parameter identifies the section where
 the trampoline is placed.
 
+Introduced in 4.7.0
+
 @item interrupt
 @cindex @code{interrupt} function attribute, Epiphany
 Use this attribute to indicate
@@ -4016,6 +4203,8 @@  void __attribute__ ((interrupt ("dma0, dma1"),
   external_dma_handler ();
 @end smallexample
 
+Introduced in 4.7.0
+
 @item long_call
 @itemx short_call
 @cindex @code{long_call} function attribute, Epiphany
@@ -4025,6 +4214,9 @@  These attributes specify how a particular function is called.
 These attributes override the
 @option{-mlong-calls} (@pxref{Adapteva Epiphany Options})
 command-line switch and @code{#pragma long_calls} settings.
+
+Introduced in 4.7.0
+
 @end table
 
 
@@ -4043,6 +4235,8 @@  the function vector has a limited size (maximum 128 entries on the H8/300
 and 64 entries on the H8/300H and H8S)
 and shares space with the interrupt vector.
 
+Introduced before 4.0.0
+
 @item interrupt_handler
 @cindex @code{interrupt_handler} function attribute, H8/300
 Use this attribute on the H8/300, H8/300H, and H8S to
@@ -4050,12 +4244,17 @@  indicate that the specified function is an interrupt handler.  The compiler
 generates function entry and exit sequences suitable for use in an
 interrupt handler when this attribute is present.
 
+Introduced before 4.0.0
+
 @item saveall
 @cindex @code{saveall} function attribute, H8/300
 @cindex save all registers on the H8/300, H8/300H, and H8S
 Use this attribute on the H8/300, H8/300H, and H8S to indicate that
 all registers except the stack pointer should be saved in the prologue
 regardless of whether they are used or not.
+
+Introduced before 4.0.0
+
 @end table
 
 @node IA-64 Function Attributes
@@ -4072,6 +4271,8 @@  to restart a system call after an interrupt without having to save/restore
 the input registers.  This also prevents kernel data from leaking into
 application code.
 
+Introduced before 4.0.0
+
 @item version_id
 @cindex @code{version_id} function attribute, IA-64
 This IA-64 HP-UX attribute, attached to a global variable or function, renames a
@@ -4085,6 +4286,9 @@  extern int foo () __attribute__((version_id ("20040821")));
 
 @noindent
 Calls to @code{foo} are mapped to calls to @code{foo@{20040821@}}.
+
+Introduced in 4.3.0
+
 @end table
 
 @node M32C Function Attributes
@@ -4099,6 +4303,8 @@  When added to an interrupt handler with the M32C port, causes the
 prologue and epilogue to use bank switching to preserve the registers
 rather than saving them on the stack.
 
+Introduced in 4.5.0
+
 @item fast_interrupt
 @cindex @code{fast_interrupt} function attribute, M32C
 Use this attribute on the M32C port to indicate that the specified
@@ -4106,6 +4312,8 @@  function is a fast interrupt handler.  This is just like the
 @code{interrupt} attribute, except that @code{freit} is used to return
 instead of @code{reit}.
 
+Introduced in 4.5.0
+
 @item function_vector
 @cindex @code{function_vector} function attribute, M16C/M32C
 On M16C/M32C targets, the @code{function_vector} attribute declares a
@@ -4142,12 +4350,17 @@  then be sure to write this declaration in both files.
 
 This attribute is ignored for R8C target.
 
+Introduced in 4.3.0
+
 @item interrupt
 @cindex @code{interrupt} function attribute, M32C
 Use this attribute to indicate
 that the specified function is an interrupt handler.  The compiler generates
 function entry and exit sequences suitable for use in an interrupt handler
 when this attribute is present.
+
+Introduced in 4.1.0
+
 @end table
 
 @node M32R/D Function Attributes
@@ -4163,6 +4376,8 @@  that the specified function is an interrupt handler.  The compiler generates
 function entry and exit sequences suitable for use in an interrupt handler
 when this attribute is present.
 
+Introduced before 4.0.0
+
 @item model (@var{model-name})
 @cindex @code{model} function attribute, M32R/D
 @cindex function addressability on the M32R/D
@@ -4184,6 +4399,9 @@  Large model objects may live anywhere in the 32-bit address space (the
 compiler generates @code{seth/add3} instructions to load their addresses),
 and may not be reachable with the @code{bl} instruction (the compiler
 generates the much slower @code{seth/add3/jl} instruction sequence).
+
+Introduced before 4.0.0
+
 @end table
 
 @node m68k Function Attributes
@@ -4201,6 +4419,10 @@  indicate that the specified function is an interrupt handler.  The compiler
 generates function entry and exit sequences suitable for use in an
 interrupt handler when this attribute is present.  Either name may be used.
 
+Introduced before 4.0.0 (@code{interrupt_handler})
+
+Introduced in 4.3.0 (@code{interrupt})
+
 @item interrupt_thread
 @cindex @code{interrupt_thread} function attribute, fido
 Use this attribute on fido, a subarchitecture of the m68k, to indicate
@@ -4208,6 +4430,9 @@  that the specified function is an interrupt handler that is designed
 to run as a thread.  The compiler omits generate prologue/epilogue
 sequences and replaces the return instruction with a @code{sleep}
 instruction.  This attribute is available only on fido.
+
+Introduced in 4.3.0
+
 @end table
 
 @node MCORE Function Attributes
@@ -4226,6 +4451,9 @@  prologue/epilogue sequences generated by the compiler. Only basic
 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
+
+Introduced before 4.0.0
+
 @end table
 
 @node MeP Function Attributes
@@ -4240,6 +4468,8 @@  On MeP targets, this attribute causes the compiler to emit
 instructions to disable interrupts for the duration of the given
 function.
 
+Introduced in 4.5.0
+
 @item interrupt
 @cindex @code{interrupt} function attribute, MeP
 Use this attribute to indicate
@@ -4247,24 +4477,33 @@  that the specified function is an interrupt handler.  The compiler generates
 function entry and exit sequences suitable for use in an interrupt handler
 when this attribute is present.
 
+Introduced in 4.5.0
+
 @item near
 @cindex @code{near} function attribute, MeP
 This attribute causes the compiler to assume the called
 function is close enough to use the normal calling convention,
 overriding the @option{-mtf} command-line option.
 
+Introduced in 4.5.0
+
 @item far
 @cindex @code{far} function attribute, MeP
 On MeP targets this causes the compiler to use a calling convention
 that assumes the called function is too far away for the built-in
 addressing modes.
 
+Introduced in 4.5.0
+
 @item vliw
 @cindex @code{vliw} function attribute, MeP
 The @code{vliw} attribute tells the compiler to emit
 instructions in VLIW mode instead of core mode.  Note that this
 attribute is not allowed unless a VLIW coprocessor has been configured
 and enabled through command-line options.
+
+Introduced in 4.5.0
+
 @end table
 
 @node MicroBlaze Function Attributes
@@ -4281,6 +4520,8 @@  registers) are saved in the function prologue.  If the function is a leaf
 function, only volatiles used by the function are saved.  A normal function
 return is generated instead of a return from interrupt.
 
+Introduced in 4.6.0
+
 @item break_handler
 @cindex @code{break_handler} function attribute, MicroBlaze
 @cindex break handler functions
@@ -4294,16 +4535,24 @@  the @code{rtbd} instead of @code{rtsd}.
 void f () __attribute__ ((break_handler));
 @end smallexample
 
+Introduced in 5.1.0
+
 @item interrupt_handler
 @itemx fast_interrupt 
 @cindex @code{interrupt_handler} function attribute, MicroBlaze
 @cindex @code{fast_interrupt} function attribute, MicroBlaze
+
 These attributes indicate that the specified function is an interrupt
 handler.  Use the @code{fast_interrupt} attribute to indicate handlers
 used in low-latency interrupt mode, and @code{interrupt_handler} for
 interrupts that do not use low-latency handlers.  In both cases, GCC
 emits appropriate prologue code and generates a return from the handler
 using @code{rtid} instead of @code{rtsd}.
+
+Introduced in 4.6.0 (@code{interrupt_handler})
+
+Introduced in 4.8.0 (@code{fast_interrupt})
+
 @end table
 
 @node Microsoft Windows Function Attributes
@@ -4349,6 +4598,8 @@  including the symbol in the DLL's export table such as using a
 @file{.def} file with an @code{EXPORTS} section or, with GNU ld, using
 the @option{--export-all} linker flag.
 
+Introduced before 4.0.0
+
 @item dllimport
 @cindex @code{dllimport} function attribute
 @cindex @code{__declspec(dllimport)}
@@ -4402,6 +4653,9 @@  address. However, a pointer to a @emph{function} with the
 this case, the address of a stub function in the import lib is
 referenced.  On Microsoft Windows targets, the attribute can be disabled
 for functions by setting the @option{-mnop-fun-dllimport} flag.
+
+Introduced before 4.0.0
+
 @end table
 
 @node MIPS Function Attributes
@@ -4465,6 +4719,8 @@  void __attribute__ ((interrupt("eic"))) v8 ();
 void __attribute__ ((interrupt("vector=hw3"))) v9 ();
 @end smallexample
 
+Introduced in 4.5.0
+
 @item long_call
 @itemx near
 @itemx far
@@ -4481,6 +4737,10 @@  the contents of that register.  The @code{near} attribute has the opposite
 effect; it specifies that non-PIC calls should be made using the more
 efficient @code{jal} instruction.
 
+Introduced in 4.2.0 (@code{long_call})
+
+introduced in 4.3.0 (@code{near}, @code{far})
+
 @item mips16
 @itemx nomips16
 @cindex @code{mips16} function attribute, MIPS
@@ -4500,6 +4760,8 @@  not that within individual functions.  Mixed MIPS16 and non-MIPS16 code
 may interact badly with some GCC extensions such as @code{__builtin_apply}
 (@pxref{Constructing Calls}).
 
+Introduced in 4.3.0
+
 @item micromips, MIPS
 @itemx nomicromips, MIPS
 @cindex @code{micromips} function attribute
@@ -4520,12 +4782,17 @@  not that within individual functions.  Mixed microMIPS and non-microMIPS code
 may interact badly with some GCC extensions such as @code{__builtin_apply}
 (@pxref{Constructing Calls}).
 
+Introduced in 4.9.0
+
 @item nocompression
 @cindex @code{nocompression} function attribute, MIPS
 On MIPS targets, you can use the @code{nocompression} function attribute
 to locally turn off MIPS16 and microMIPS code generation.  This attribute
 overrides the @option{-mips16} and @option{-mmicromips} options on the
 command line (@pxref{MIPS Options}).
+
+Introduced in 4.9.0
+
 @end table
 
 @node MSP430 Function Attributes
@@ -4541,6 +4808,8 @@  previous interrupt state upon exit.  Critical functions cannot also
 have the @code{naked} or @code{reentrant} attributes.  They can have
 the @code{interrupt} attribute.
 
+Introduced in 4.9.0
+
 @item interrupt
 @cindex @code{interrupt} function attribute, MSP430
 Use this attribute to indicate
@@ -4557,6 +4826,8 @@  match up with appropriate entries in the linker script.  By default
 the names @code{watchdog} for vector 26, @code{nmi} for vector 30 and
 @code{reset} for vector 31 are recognized.
 
+Introduced in 4.9.0
+
 @item naked
 @cindex @code{naked} function attribute, MSP430
 This attribute allows the compiler to construct the
@@ -4568,6 +4839,8 @@  prologue/epilogue sequences generated by the compiler. Only basic
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
 
+Introduced in 4.9.0
+
 @item reentrant
 @cindex @code{reentrant} function attribute, MSP430
 Reentrant functions disable interrupts upon entry and enable them
@@ -4575,6 +4848,8 @@  upon exit.  Reentrant functions cannot also have the @code{naked}
 or @code{critical} attributes.  They can have the @code{interrupt}
 attribute.
 
+Introduced in 4.9.0
+
 @item wakeup
 @cindex @code{wakeup} function attribute, MSP430
 This attribute only applies to interrupt functions.  It is silently
@@ -4582,6 +4857,8 @@  ignored if applied to a non-interrupt function.  A wakeup interrupt
 function will rouse the processor from any low-power state that it
 might be in when the function exits.
 
+Introduced in 4.9.0
+
 @item lower
 @itemx upper
 @itemx either
@@ -4613,6 +4890,9 @@  one pass over the objects and does the best that it can.  Using the
 @option{-ffunction-sections} and @option{-fdata-sections} command-line
 options can help the packing, however, since they produce smaller,
 easier to pack regions.
+
+Introduced in 6.1.0
+
 @end table
 
 @node NDS32 Function Attributes
@@ -4628,6 +4908,8 @@  Use this attribute on the NDS32 target to indicate that the specified function
 is an exception handler.  The compiler will generate corresponding sections
 for use in an exception handler.
 
+Introduced in 4.9.0
+
 @item interrupt
 @cindex @code{interrupt} function attribute, NDS32
 On NDS32 target, this attribute indicates that the specified function
@@ -4656,6 +4938,8 @@  The system will help save caller registers into stack before entering
 interrupt handler.
 @end table
 
+Introduced in 4.9.0
+
 @item naked
 @cindex @code{naked} function attribute, NDS32
 This attribute allows the compiler to construct the
@@ -4667,6 +4951,8 @@  prologue/epilogue sequences generated by the compiler. Only basic
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
 
+Introduced in 4.9.0
+
 @item reset
 @cindex @code{reset} function attribute, NDS32
 @cindex reset handler functions
@@ -4682,6 +4968,9 @@  Provide a user-defined function to handle NMI exception.
 @cindex @code{warm} function attribute, NDS32
 Provide a user-defined function to handle warm reset exception.
 @end table
+
+Introduced in 4.9.0
+
 @end table
 
 @node Nios II Function Attributes
@@ -4734,6 +5023,9 @@  library.
 By default functions are only callable only from other PTX functions.
 
 Kernel functions must have @code{void} return type.
+
+Introduced in 5.1.0
+
 @end table
 
 @node PowerPC Function Attributes
@@ -4758,6 +5050,8 @@  the @code{#pragma longcall} setting.
 @xref{RS/6000 and PowerPC Options}, for more information on whether long
 calls are necessary.
 
+Introduced before 4.0.0
+
 @item target (@var{options})
 @cindex @code{target} function attribute
 As discussed in @ref{Common Function Attributes}, this attribute 
@@ -4773,6 +5067,8 @@  Generate code that uses (does not use) AltiVec instructions.  In
 32-bit code, you cannot enable AltiVec instructions unless
 @option{-mabi=altivec} is used on the command line.
 
+Introduced in 4.6.0
+
 @item cmpb
 @itemx no-cmpb
 @cindex @code{target("cmpb")} function attribute, PowerPC
@@ -4780,6 +5076,8 @@  Generate code that uses (does not use) the compare bytes instruction
 implemented on the POWER6 processor and other processors that support
 the PowerPC V2.05 architecture.
 
+Introduced in 4.6.0
+
 @item dlmzb
 @itemx no-dlmzb
 @cindex @code{target("dlmzb")} function attribute, PowerPC
@@ -4787,6 +5085,8 @@  Generate code that uses (does not use) the string-search @samp{dlmzb}
 instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
 generated by default when targeting those processors.
 
+Introduced in 4.6.0
+
 @item fprnd
 @itemx no-fprnd
 @cindex @code{target("fprnd")} function attribute, PowerPC
@@ -4794,17 +5094,23 @@  Generate code that uses (does not use) the FP round to integer
 instructions implemented on the POWER5+ processor and other processors
 that support the PowerPC V2.03 architecture.
 
+Introduced in 4.6.0
+
 @item hard-dfp
 @itemx no-hard-dfp
 @cindex @code{target("hard-dfp")} function attribute, PowerPC
 Generate code that uses (does not use) the decimal floating-point
 instructions implemented on some POWER processors.
 
+Introduced in 4.6.0
+
 @item isel
 @itemx no-isel
 @cindex @code{target("isel")} function attribute, PowerPC
 Generate code that uses (does not use) ISEL instruction.
 
+Introduced in 4.6.0
+
 @item mfcrf
 @itemx no-mfcrf
 @cindex @code{target("mfcrf")} function attribute, PowerPC
@@ -4812,6 +5118,8 @@  Generate code that uses (does not use) the move from condition
 register field instruction implemented on the POWER4 processor and
 other processors that support the PowerPC V2.01 architecture.
 
+Introduced in 4.6.0
+
 @item mfpgpr
 @itemx no-mfpgpr
 @cindex @code{target("mfpgpr")} function attribute, PowerPC
@@ -4819,6 +5127,8 @@  Generate code that uses (does not use) the FP move to/from general
 purpose register instructions implemented on the POWER6X processor and
 other processors that support the extended PowerPC V2.05 architecture.
 
+Introduced in 4.6.0
+
 @item mulhw
 @itemx no-mulhw
 @cindex @code{target("mulhw")} function attribute, PowerPC
@@ -4827,12 +5137,16 @@  multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
 These instructions are generated by default when targeting those
 processors.
 
+Introduced in 4.6.0
+
 @item multiple
 @itemx no-multiple
 @cindex @code{target("multiple")} function attribute, PowerPC
 Generate code that uses (does not use) the load multiple word
 instructions and the store multiple word instructions.
 
+Introduced in 4.6.0
+
 @item update
 @itemx no-update
 @cindex @code{target("update")} function attribute, PowerPC
@@ -4840,6 +5154,8 @@  Generate code that uses (does not use) the load or store instructions
 that update the base register to the address of the calculated memory
 location.
 
+Introduced in 4.6.0
+
 @item popcntb
 @itemx no-popcntb
 @cindex @code{target("popcntb")} function attribute, PowerPC
@@ -4848,6 +5164,8 @@  FP reciprocal estimate instruction implemented on the POWER5
 processor and other processors that support the PowerPC V2.02
 architecture.
 
+Introduced in 4.6.0
+
 @item popcntd
 @itemx no-popcntd
 @cindex @code{target("popcntd")} function attribute, PowerPC
@@ -4855,6 +5173,8 @@  Generate code that uses (does not use) the popcount instruction
 implemented on the POWER7 processor and other processors that support
 the PowerPC V2.06 architecture.
 
+Introduced in 4.6.0
+
 @item powerpc-gfxopt
 @itemx no-powerpc-gfxopt
 @cindex @code{target("powerpc-gfxopt")} function attribute, PowerPC
@@ -4862,6 +5182,8 @@  Generate code that uses (does not use) the optional PowerPC
 architecture instructions in the Graphics group, including
 floating-point select.
 
+Introduced in 4.6.0
+
 @item powerpc-gpopt
 @itemx no-powerpc-gpopt
 @cindex @code{target("powerpc-gpopt")} function attribute, PowerPC
@@ -4869,6 +5191,8 @@  Generate code that uses (does not use) the optional PowerPC
 architecture instructions in the General Purpose group, including
 floating-point square root.
 
+Introduced in 4.6.0
+
 @item recip-precision
 @itemx no-recip-precision
 @cindex @code{target("recip-precision")} function attribute, PowerPC
@@ -4876,6 +5200,8 @@  Assume (do not assume) that the reciprocal estimate instructions
 provide higher-precision estimates than is mandated by the PowerPC
 ABI.
 
+Introduced in 4.6.0
+
 @item string
 @itemx no-string
 @cindex @code{target("string")} function attribute, PowerPC
@@ -4883,6 +5209,8 @@  Generate code that uses (does not use) the load string instructions
 and the store string word instructions to save multiple registers and
 do small block moves.
 
+Introduced in 4.6.0
+
 @item vsx
 @itemx no-vsx
 @cindex @code{target("vsx")} function attribute, PowerPC
@@ -4892,6 +5220,8 @@  more direct access to the VSX instruction set.  In 32-bit code, you
 cannot enable VSX or AltiVec instructions unless
 @option{-mabi=altivec} is used on the command line.
 
+Introduced in 4.6.0
+
 @item friz
 @itemx no-friz
 @cindex @code{target("friz")} function attribute, PowerPC
@@ -4901,24 +5231,32 @@  rounding a floating-point value to 64-bit integer and back to floating
 point.  The @code{friz} instruction does not return the same value if
 the floating-point number is too large to fit in an integer.
 
+Introduced in 4.6.0
+
 @item avoid-indexed-addresses
 @itemx no-avoid-indexed-addresses
 @cindex @code{target("avoid-indexed-addresses")} function attribute, PowerPC
 Generate code that tries to avoid (not avoid) the use of indexed load
 or store instructions.
 
+Introduced in 4.6.0
+
 @item paired
 @itemx no-paired
 @cindex @code{target("paired")} function attribute, PowerPC
 Generate code that uses (does not use) the generation of PAIRED simd
 instructions.
 
+Introduced in 4.6.0
+
 @item longcall
 @itemx no-longcall
 @cindex @code{target("longcall")} function attribute, PowerPC
 Generate code that assumes (does not assume) that all calls are far
 away so that a longer more expensive calling sequence is required.
 
+Introduced in 4.6.0
+
 @item cpu=@var{CPU}
 @cindex @code{target("cpu=@var{CPU}")} function attribute, PowerPC
 Specify the architecture to generate code for when compiling the
@@ -4926,6 +5264,8 @@  function.  If you select the @code{target("cpu=power7")} attribute when
 generating 32-bit code, VSX and AltiVec instructions are not generated
 unless you use the @option{-mabi=altivec} option on the command line.
 
+Introduced in 4.6.0
+
 @item tune=@var{TUNE}
 @cindex @code{target("tune=@var{TUNE}")} function attribute, PowerPC
 Specify the architecture to tune for when compiling the function.  If
@@ -4933,6 +5273,9 @@  you do not specify the @code{target("tune=@var{TUNE}")} attribute and
 you do specify the @code{target("cpu=@var{CPU}")} attribute,
 compilation tunes for the @var{CPU} architecture, and not the
 default tuning specified on the command line.
+
+Introduced in 4.6.0
+
 @end table
 
 On the PowerPC, the inliner does not inline a
@@ -4959,6 +5302,8 @@  Use @code{brk_interrupt} instead of @code{interrupt} for
 handlers intended to be used with the @code{BRK} opcode (i.e.@: those
 that must end with @code{RETB} instead of @code{RETI}).
 
+Introduced in 4.7.0
+
 @item naked
 @cindex @code{naked} function attribute, RL78
 This attribute allows the compiler to construct the
@@ -4969,6 +5314,9 @@  prologue/epilogue sequences generated by the compiler. Only basic
 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
+
+Introduced in 4.9.0
+
 @end table
 
 @node RX Function Attributes
@@ -4984,6 +5332,8 @@  function is a fast interrupt handler.  This is just like the
 @code{interrupt} attribute, except that @code{freit} is used to return
 instead of @code{reit}.
 
+Introduced in 4.5.0
+
 @item interrupt
 @cindex @code{interrupt} function attribute, RX
 Use this attribute to indicate
@@ -5013,6 +5363,8 @@  void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
 	txd1_handler ();
 @end smallexample
 
+Introduced in 4.5.0
+
 @item naked
 @cindex @code{naked} function attribute, RX
 This attribute allows the compiler to construct the
@@ -5024,12 +5376,17 @@  prologue/epilogue sequences generated by the compiler. Only basic
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
 
+Introduced in 4.5.0
+
 @item vector
 @cindex @code{vector} function attribute, RX
 This RX attribute is similar to the @code{interrupt} attribute, including its
 parameters, but does not make the function an interrupt-handler type
 function (i.e. it retains the normal C function calling ABI).  See the
 @code{interrupt} attribute for a description of its arguments.
+
+Introduced in 5.1.0
+
 @end table
 
 @node S/390 Function Attributes
@@ -5052,6 +5409,8 @@  both arguments the maximum allowed value is 1000000.
 
 If both arguments are zero, hotpatching is disabled.
 
+Introduced in 4.9.0
+
 @item target (@var{options})
 @cindex @code{target} function attribute
 As discussed in @ref{Common Function Attributes}, this attribute
@@ -5122,6 +5481,8 @@  saves at least 8 bytes of code; and if other successive calls are being
 made to the same function, it saves 2 bytes of code per each of these
 calls.
 
+Introduced in 4.4.0
+
 @item interrupt_handler
 @cindex @code{interrupt_handler} function attribute, SH
 Use this attribute to
@@ -5129,6 +5490,8 @@  indicate that the specified function is an interrupt handler.  The compiler
 generates function entry and exit sequences suitable for use in an
 interrupt handler when this attribute is present.
 
+Introduced before 4.0.0
+
 @item nosave_low_regs
 @cindex @code{nosave_low_regs} function attribute, SH
 Use this attribute on SH targets to indicate that an @code{interrupt_handler}
@@ -5136,11 +5499,15 @@  function should not save and restore registers R0..R7.  This can be used on SH3*
 and SH4* targets that have a second R0..R7 register bank for non-reentrant
 interrupt handlers.
 
+Introduced before 4.0.0
+
 @item renesas
 @cindex @code{renesas} function attribute, SH
 On SH targets this attribute specifies that the function or struct follows the
 Renesas ABI.
 
+Introduced before 4.0.0
+
 @item resbank
 @cindex @code{resbank} function attribute, SH
 On the SH2A target, this attribute enables the high-speed register
@@ -5154,6 +5521,8 @@  vector table address offset are saved into a register bank.  Register
 banks are stacked in first-in last-out (FILO) sequence.  Restoration
 from the bank is executed by issuing a RESBANK instruction.
 
+Introduced in 4.4.0
+
 @item sp_switch
 @cindex @code{sp_switch} function attribute, SH
 Use this attribute on the SH to indicate an @code{interrupt_handler}
@@ -5167,16 +5536,23 @@  void f () __attribute__ ((interrupt_handler,
                           sp_switch ("alt_stack")));
 @end smallexample
 
+Introduced before 4.0.0
+
 @item trap_exit
 @cindex @code{trap_exit} function attribute, SH
 Use this attribute on the SH for an @code{interrupt_handler} to return using
 @code{trapa} instead of @code{rte}.  This attribute expects an integer
 argument specifying the trap number to be used.
 
+Introduced before 4.0.0
+
 @item trapa_handler
 @cindex @code{trapa_handler} function attribute, SH
 On SH targets this function attribute is similar to @code{interrupt_handler}
 but it does not save and restore all registers.
+
+Introduced in 4.1.0
+
 @end table
 
 @node SPU Function Attributes
@@ -5195,6 +5571,9 @@  prologue/epilogue sequences generated by the compiler. Only basic
 (@pxref{Basic Asm}). While using extended @code{asm} or a mixture of
 basic @code{asm} and C code may appear to work, they cannot be
 depended upon to work reliably and are not supported.
+
+Introduced in 4.3.0
+
 @end table
 
 @node Symbian OS Function Attributes
@@ -5217,6 +5596,9 @@  Use these attributes to indicate
 that the specified function is an interrupt handler.  The compiler generates
 function entry and exit sequences suitable for use in an interrupt handler
 when either attribute is present.
+
+Introduced before 4.0.0
+
 @end table
 
 @node Visium Function Attributes
@@ -5231,6 +5613,9 @@  Use this attribute to indicate
 that the specified function is an interrupt handler.  The compiler generates
 function entry and exit sequences suitable for use in an interrupt handler
 when this attribute is present.
+
+Introduced in 5.1.0
+
 @end table
 
 @node x86 Function Attributes
@@ -5248,6 +5633,8 @@  assume that the calling function pops off the stack space used to
 pass arguments.  This is
 useful to override the effects of the @option{-mrtd} switch.
 
+Introduced in 4.1.0
+
 @item fastcall
 @cindex @code{fastcall} function attribute, x86-32
 @cindex functions that pop the argument stack on x86-32
@@ -5258,6 +5645,8 @@  and other typed arguments are passed on the stack.  The called function
 pops the arguments off the stack.  If the number of arguments is variable all
 arguments are pushed on the stack.
 
+Introduced before 4.0.0
+
 @item thiscall
 @cindex @code{thiscall} function attribute, x86-32
 @cindex functions that pop the argument stack on x86-32
@@ -5271,6 +5660,8 @@  The @code{thiscall} attribute is intended for C++ non-static member functions.
 As a GCC extension, this calling convention can be used for C functions
 and for static member methods.
 
+Introduced in 4.6.0
+
 @item ms_abi
 @itemx sysv_abi
 @cindex @code{ms_abi} function attribute, x86
@@ -5286,6 +5677,8 @@  when targeting Windows.  On all other systems, the default is the x86/AMD ABI.
 Note, the @code{ms_abi} attribute for Microsoft Windows 64-bit targets currently
 requires the @option{-maccumulate-outgoing-args} option.
 
+Introduced in 4.4.0
+
 @item callee_pop_aggregate_return (@var{number})
 @cindex @code{callee_pop_aggregate_return} function attribute, x86
 
@@ -5300,6 +5693,8 @@  stack for hidden pointer.  However, on x86-32 Microsoft Windows targets,
 the compiler assumes that the
 caller pops the stack for hidden pointer.
 
+Introduced in 4.6.0
+
 @item ms_hook_prologue
 @cindex @code{ms_hook_prologue} function attribute, x86
 
@@ -5308,6 +5703,8 @@  this function attribute to make GCC generate the ``hot-patching'' function
 prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2
 and newer.
 
+Introduced in 4.5.0
+
 @item regparm (@var{number})
 @cindex @code{regparm} function attribute, x86
 @cindex functions that are passed arguments in registers on x86-32
@@ -5328,6 +5725,8 @@  safe since the loaders there save EAX, EDX and ECX.  (Lazy binding can be
 disabled with the linker or the loader if desired, to avoid the
 problem.)
 
+Introduced before 4.0.0
+
 @item sseregparm
 @cindex @code{sseregparm} function attribute, x86
 On x86-32 targets with SSE support, the @code{sseregparm} attribute
@@ -5336,6 +5735,8 @@  SSE registers instead of on the stack.  Functions that take a
 variable number of arguments continue to pass all of their
 floating-point arguments on the stack.
 
+Introduced in 4.1.0
+
 @item force_align_arg_pointer
 @cindex @code{force_align_arg_pointer} function attribute, x86
 On x86 targets, the @code{force_align_arg_pointer} attribute may be
@@ -5344,6 +5745,8 @@  prologue and epilogue that realigns the run-time stack if necessary.
 This supports mixing legacy codes that run with a 4-byte aligned stack
 with modern codes that keep a 16-byte stack for SSE compatibility.
 
+Introduced in 4.2.0
+
 @item stdcall
 @cindex @code{stdcall} function attribute, x86-32
 @cindex functions that pop the argument stack on x86-32
@@ -5351,6 +5754,8 @@  On x86-32 targets, the @code{stdcall} attribute causes the compiler to
 assume that the called function pops off the stack space used to
 pass arguments, unless it takes a variable number of arguments.
 
+Introduced before 4.0.0
+
 @item no_caller_saved_registers
 @cindex @code{no_caller_saved_registers} function attribute, x86
 Use this attribute to indicate that the specified function has no
@@ -5362,6 +5767,8 @@  the EFLAGS register.  Since GCC doesn't preserve MPX, SSE, MMX nor x87
 states, the GCC option @option{-mgeneral-regs-only} should be used to
 compile functions with @code{no_caller_saved_registers} attribute.
 
+Introduced in 7.1.0
+
 @item interrupt
 @cindex @code{interrupt} function attribute, x86
 Use this attribute to indicate that the specified function is an
@@ -5424,6 +5831,8 @@  Exception handlers should only be used for exceptions that push an error
 code; you should use an interrupt handler in other cases.  The system
 will crash if the wrong kind of handler is used.
 
+Introduced in 7.1.0
+
 @item target (@var{options})
 @cindex @code{target} function attribute
 As discussed in @ref{Common Function Attributes}, this attribute 
@@ -5436,119 +5845,165 @@  On the x86, the following options are allowed:
 @cindex @code{target("abm")} function attribute, x86
 Enable/disable the generation of the advanced bit instructions.
 
+Introduced in 4.4.0
+
 @item aes
 @itemx no-aes
 @cindex @code{target("aes")} function attribute, x86
 Enable/disable the generation of the AES instructions.
 
+Introduced in 4.4.0
+
 @item default
 @cindex @code{target("default")} function attribute, x86
 @xref{Function Multiversioning}, where it is used to specify the
 default function version.
 
+Introduced in 4.8.0
+
 @item mmx
 @itemx no-mmx
 @cindex @code{target("mmx")} function attribute, x86
 Enable/disable the generation of the MMX instructions.
 
+Introduced in 4.4.0
+
 @item pclmul
 @itemx no-pclmul
 @cindex @code{target("pclmul")} function attribute, x86
 Enable/disable the generation of the PCLMUL instructions.
 
+Introduced in 4.4.0
+
 @item popcnt
 @itemx no-popcnt
 @cindex @code{target("popcnt")} function attribute, x86
 Enable/disable the generation of the POPCNT instruction.
 
+Introduced in 4.4.0
+
 @item sse
 @itemx no-sse
 @cindex @code{target("sse")} function attribute, x86
 Enable/disable the generation of the SSE instructions.
 
+Introduced in 4.4.0
+
 @item sse2
 @itemx no-sse2
 @cindex @code{target("sse2")} function attribute, x86
 Enable/disable the generation of the SSE2 instructions.
 
+Introduced in 4.4.0
+
 @item sse3
 @itemx no-sse3
 @cindex @code{target("sse3")} function attribute, x86
 Enable/disable the generation of the SSE3 instructions.
 
+Introduced in 4.4.0
+
 @item sse4
 @itemx no-sse4
 @cindex @code{target("sse4")} function attribute, x86
 Enable/disable the generation of the SSE4 instructions (both SSE4.1
 and SSE4.2).
 
+Introduced in 4.4.0
+
 @item sse4.1
 @itemx no-sse4.1
 @cindex @code{target("sse4.1")} function attribute, x86
 Enable/disable the generation of the sse4.1 instructions.
 
+Introduced in 4.4.0
+
 @item sse4.2
 @itemx no-sse4.2
 @cindex @code{target("sse4.2")} function attribute, x86
 Enable/disable the generation of the sse4.2 instructions.
 
+Introduced in 4.4.0
+
 @item sse4a
 @itemx no-sse4a
 @cindex @code{target("sse4a")} function attribute, x86
 Enable/disable the generation of the SSE4A instructions.
 
+Introduced in 4.4.0
+
 @item fma4
 @itemx no-fma4
 @cindex @code{target("fma4")} function attribute, x86
 Enable/disable the generation of the FMA4 instructions.
 
+Introduced in 4.9.0
+
 @item xop
 @itemx no-xop
 @cindex @code{target("xop")} function attribute, x86
 Enable/disable the generation of the XOP instructions.
 
+Introduced in 4.9.0
+
 @item lwp
 @itemx no-lwp
 @cindex @code{target("lwp")} function attribute, x86
 Enable/disable the generation of the LWP instructions.
 
+Introduced in 4.5.0
+
 @item ssse3
 @itemx no-ssse3
 @cindex @code{target("ssse3")} function attribute, x86
 Enable/disable the generation of the SSSE3 instructions.
 
+Introduced in 4.4.0
+
 @item cld
 @itemx no-cld
 @cindex @code{target("cld")} function attribute, x86
 Enable/disable the generation of the CLD before string moves.
 
+Introduced in 4.4.0
+
 @item fancy-math-387
 @itemx no-fancy-math-387
 @cindex @code{target("fancy-math-387")} function attribute, x86
 Enable/disable the generation of the @code{sin}, @code{cos}, and
 @code{sqrt} instructions on the 387 floating-point unit.
 
+Introduced in 4.4.0
+
 @item ieee-fp
 @itemx no-ieee-fp
 @cindex @code{target("ieee-fp")} function attribute, x86
 Enable/disable the generation of floating point that depends on IEEE arithmetic.
 
+Introduced in 4.4.0
+
 @item inline-all-stringops
 @itemx no-inline-all-stringops
 @cindex @code{target("inline-all-stringops")} function attribute, x86
 Enable/disable inlining of string operations.
 
+Introduced in 4.4.0
+
 @item inline-stringops-dynamically
 @itemx no-inline-stringops-dynamically
 @cindex @code{target("inline-stringops-dynamically")} function attribute, x86
 Enable/disable the generation of the inline code to do small string
 operations and calling the library routines for large operations.
 
+Introduced in 4.4.0
+
 @item align-stringops
 @itemx no-align-stringops
 @cindex @code{target("align-stringops")} function attribute, x86
 Do/do not align destination of inlined string operations.
 
+Introduced in 4.4.0
+
 @item recip
 @itemx no-recip
 @cindex @code{target("recip")} function attribute, x86
@@ -5556,20 +6011,29 @@  Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and RSQRTPS
 instructions followed an additional Newton-Raphson step instead of
 doing a floating-point division.
 
+Introduced in 4.4.0
+
 @item arch=@var{ARCH}
 @cindex @code{target("arch=@var{ARCH}")} function attribute, x86
 Specify the architecture to generate code for in compiling the function.
 
+Introduced in 4.4.0
+
 @item tune=@var{TUNE}
 @cindex @code{target("tune=@var{TUNE}")} function attribute, x86
 Specify the architecture to tune for in compiling the function.
 
+Introduced in 4.4.0
+
 @item fpmath=@var{FPMATH}
 @cindex @code{target("fpmath=@var{FPMATH}")} function attribute, x86
 Specify which floating-point unit to use.  You must specify the
 @code{target("fpmath=sse,387")} option as
 @code{target("fpmath=sse+387")} because the comma would separate
 different options.
+
+Introduced in 4.4.0
+
 @end table
 
 On the x86, the inliner does not inline a
@@ -5591,6 +6055,9 @@  Use this attribute to indicate
 that the specified function is an interrupt handler.  The compiler generates
 function entry and exit sequences suitable for use in an interrupt handler
 when this attribute is present.
+
+Introduced before 4.0.0
+
 @end table
 
 @node Variable Attributes
@@ -5707,6 +6174,8 @@  alignment.  See your linker documentation for further information.
 The @code{aligned} attribute can also be used for functions
 (@pxref{Common Function Attributes}.)
 
+Introduced before 4.0.0
+
 @item cleanup (@var{cleanup_function})
 @cindex @code{cleanup} variable attribute
 The @code{cleanup} attribute runs a function when the variable goes
@@ -5723,6 +6192,8 @@  does not allow the exception to be caught, only to perform an action.
 It is undefined what happens if @var{cleanup_function} does not
 return normally.
 
+Introduced before 4.0.0
+
 @item common
 @itemx nocommon
 @cindex @code{common} variable attribute
@@ -5736,6 +6207,8 @@  opposite---to allocate space for it directly.
 These attributes override the default chosen by the
 @option{-fno-common} and @option{-fcommon} flags respectively.
 
+Introduced before 4.0.0
+
 @item deprecated
 @itemx deprecated (@var{msg})
 @cindex @code{deprecated} variable attribute
@@ -5762,6 +6235,8 @@  The @code{deprecated} attribute can also be used for functions and
 types (@pxref{Common Function Attributes},
 @pxref{Common Type Attributes}).
 
+Introduced before 4.0.0
+
 @item mode (@var{mode})
 @cindex @code{mode} variable attribute
 This attribute specifies the data type for the declaration---whichever
@@ -5775,6 +6250,8 @@  indicate the mode corresponding to a one-byte integer, @code{word} or
 @code{__word__} for the mode of a one-word integer, and @code{pointer}
 or @code{__pointer__} for the mode used to represent pointers.
 
+Introduced before 4.0.0
+
 @item packed
 @cindex @code{packed} variable attribute
 The @code{packed} attribute specifies that a variable or structure field
@@ -5799,6 +6276,8 @@  been fixed in GCC 4.4 but the change can lead to differences in the
 structure layout.  See the documentation of
 @option{-Wpacked-bitfield-compat} for more information.
 
+Introduced before 4.0.0
+
 @item section ("@var{section-name}")
 @cindex @code{section} variable attribute
 Normally, the compiler places the objects it generates in sections like
@@ -5848,6 +6327,8 @@  attribute is not available on all platforms.
 If you need to map the entire contents of a module to a particular
 section, consider using the facilities of the linker instead.
 
+Introduced before 4.0.0
+
 @item tls_model ("@var{tls_model}")
 @cindex @code{tls_model} variable attribute
 The @code{tls_model} attribute sets thread-local storage model
@@ -5859,12 +6340,16 @@  The @var{tls_model} argument should be one of @code{global-dynamic},
 
 Not all targets support this attribute.
 
+Introduced before 4.0.0
+
 @item unused
 @cindex @code{unused} variable attribute
 This attribute, attached to a variable, means that the variable is meant
 to be possibly unused.  GCC does not produce a warning for this
 variable.
 
+Introduced before 4.0.0
+
 @item used
 @cindex @code{used} variable attribute
 This attribute, attached to a variable with static storage, means that
@@ -5875,6 +6360,8 @@  When applied to a static data member of a C++ class template, the
 attribute also means that the member is instantiated if the
 class itself is instantiated.
 
+Introduced before 4.0.0
+
 @item vector_size (@var{bytes})
 @cindex @code{vector_size} variable attribute
 This attribute specifies the vector size for the variable, measured in
@@ -5905,17 +6392,23 @@  struct S  __attribute__ ((vector_size (16))) foo;
 is invalid even if the size of the structure is the same as the size of
 the @code{int}.
 
+Introduced before 4.0.0
+
 @item visibility ("@var{visibility_type}")
 @cindex @code{visibility} variable attribute
 This attribute affects the linkage of the declaration to which it is attached.
 The @code{visibility} attribute is described in
 @ref{Common Function Attributes}.
 
+Introduced before 4.0.0
+
 @item weak
 @cindex @code{weak} variable attribute
 The @code{weak} attribute is described in
 @ref{Common Function Attributes}.
 
+Introduced before 4.0.0
+
 @end table
 
 @node AVR Variable Attributes
@@ -5996,6 +6489,8 @@  at all.
 
 @end table
 
+Introduced before 4.0.0
+
 @item io
 @itemx io (@var{addr})
 @cindex @code{io} variable attribute, AVR
@@ -6021,6 +6516,8 @@  Example:
 extern volatile int porta __attribute__((io));
 @end smallexample
 
+Introduced in 5.1.0
+
 @item io_low
 @itemx io_low (@var{addr})
 @cindex @code{io_low} variable attribute, AVR
@@ -6029,6 +6526,8 @@  compiler that the object lies in the lower half of the I/O area,
 allowing the use of @code{cbi}, @code{sbi}, @code{sbic} and @code{sbis}
 instructions.
 
+Introduced in 5.1.0
+
 @item address
 @itemx address (@var{addr})
 @cindex @code{address} variable attribute, AVR
@@ -6039,6 +6538,8 @@  memory-mapped peripherals that may lie outside the io address range.
 volatile int porta __attribute__((address (0x600)));
 @end smallexample
 
+Introduced in 5.1.0
+
 @item absdata
 @cindex @code{absdata} variable attribute, AVR
 Variables in static storage and with the @code{absdata} attribute can
@@ -6068,6 +6569,8 @@  warning like
 
 See also the @option{-mabsdata} @ref{AVR Options,command-line option}.
 
+Introduced in 7.1.0
+
 @end table
 
 @node Blackfin Variable Attributes
@@ -6088,11 +6591,16 @@  named @code{.l1.data}. Those with @code{l1_data_A} attribute are put into
 the specific section named @code{.l1.data.A}. Those with @code{l1_data_B}
 attribute are put into the specific section named @code{.l1.data.B}.
 
+Introduced in 4.3.0
+
 @item l2
 @cindex @code{l2} variable attribute, Blackfin
 Use this attribute on the Blackfin to place the variable into L2 SRAM.
 Variables with @code{l2} attribute are put into the specific section
 named @code{.l2.data}.
+
+Introduced in 4.5.0
+
 @end table
 
 @node H8/300 Variable Attributes
@@ -6113,6 +6621,8 @@  on data in the eight-bit data area.  Note the eight-bit data area is limited to
 You must use GAS and GLD from GNU binutils version 2.7 or later for
 this attribute to work correctly.
 
+Introduced before 4.0.0
+
 @item tiny_data
 @cindex @code{tiny_data} variable attribute, H8/300
 @cindex tiny data section on the H8/300H and H8S
@@ -6122,6 +6632,8 @@  The compiler generates more efficient code for loads and stores
 on data in the tiny data section.  Note the tiny data area is limited to
 slightly under 32KB of data.
 
+Introduced before 4.0.0
+
 @end table
 
 @node IA-64 Variable Attributes
@@ -6141,6 +6653,8 @@  instruction).  Caveat: such addressing is by definition not position
 independent and hence this attribute must not be used for objects
 defined by shared libraries.
 
+Introduced before 4.0.0
+
 @end table
 
 @node M32R/D Variable Attributes
@@ -6162,6 +6676,9 @@  addresses can be loaded with the @code{ld24} instruction).
 Medium and large model objects may live anywhere in the 32-bit address space
 (the compiler generates @code{seth/add3} instructions to load their
 addresses).
+
+Introduced before 4.0.0
+
 @end table
 
 @node MeP Variable Attributes
@@ -6184,11 +6701,15 @@  Any variable with the @code{based} attribute is assigned to the
 @code{.based} section, and is accessed with relative to the
 @code{$tp} register.
 
+Introduced in 4.5.0
+
 @item tiny
 @cindex @code{tiny} variable attribute, MeP
 Likewise, the @code{tiny} attribute assigned variables to the
 @code{.tiny} section, relative to the @code{$gp} register.
 
+Introduced in 4.5.0
+
 @item near
 @cindex @code{near} variable attribute, MeP
 Variables with the @code{near} attribute are assumed to have addresses
@@ -6196,6 +6717,8 @@  that fit in a 24-bit addressing mode.  This is the default for large
 variables (@code{-mtiny=4} is the default) but this attribute can
 override @code{-mtiny=} for small variables, or override @code{-ml}.
 
+Introduced in 4.5.0
+
 @item far
 @cindex @code{far} variable attribute, MeP
 Variables with the @code{far} attribute are addressed using a full
@@ -6203,6 +6726,8 @@  Variables with the @code{far} attribute are addressed using a full
 allows modules to make no assumptions about where variables might be
 stored.
 
+Introduced in 4.5.0
+
 @item io
 @cindex @code{io} variable attribute, MeP
 @itemx io (@var{addr})
@@ -6215,6 +6740,8 @@  assumed some other module assigns an address).  Example:
 int timer_count __attribute__((io(0x123)));
 @end smallexample
 
+Introduced in 4.5.0
+
 @item cb
 @itemx cb (@var{addr})
 @cindex @code{cb} variable attribute, MeP
@@ -6226,6 +6753,8 @@  address.  Example:
 int cpu_clock __attribute__((cb(0x123)));
 @end smallexample
 
+Introduced in 4.5.0
+
 @end table
 
 @node Microsoft Windows Variable Attributes
@@ -6243,6 +6772,8 @@  attributes available on all x86 targets.
 The @code{dllimport} and @code{dllexport} attributes are described in
 @ref{Microsoft Windows Function Attributes}.
 
+Introduced before 4.0.0
+
 @item selectany
 @cindex @code{selectany} variable attribute
 The @code{selectany} attribute causes an initialized global variable to
@@ -6264,6 +6795,8 @@  targets.  You can use @code{__declspec (selectany)} as a synonym for
 @code{__attribute__ ((selectany))} for compatibility with other
 compilers.
 
+Introduced in 4.1.0
+
 @item shared
 @cindex @code{shared} variable attribute
 On Microsoft Windows, in addition to putting variable definitions in a named
@@ -6291,6 +6824,8 @@  linkers work.  See @code{section} attribute for more information.
 
 The @code{shared} attribute is only available on Microsoft Windows@.
 
+Introduced before 4.0.0
+
 @end table
 
 @node MSP430 Variable Attributes
@@ -6303,6 +6838,8 @@  Any data with the @code{noinit} attribute will not be initialised by
 the C runtime startup code, or the program loader.  Not initialising
 data in this way can reduce program startup times.
 
+Introduced in 6.1.0
+
 @item persistent
 @cindex @code{persistent} variable attribute, MSP430 
 Any variable with the @code{persistent} attribute will not be
@@ -6314,6 +6851,8 @@  value will be retained across resets.  The linker script being used to
 create the application should ensure that persistent data is correctly
 placed.
 
+Introduced in 6.1.0
+
 @item lower
 @itemx upper
 @itemx either
@@ -6323,6 +6862,11 @@  placed.
 These attributes are the same as the MSP430 function attributes of the
 same name (@pxref{MSP430 Function Attributes}).  
 These attributes can be applied to both functions and variables.
+
+Introduced in 4.5.0 (@code{either})
+
+Introduced in 6.1.0 (@code{lower}, @code{upper})
+
 @end table
 
 @node Nvidia PTX Variable Attributes
@@ -6337,6 +6881,9 @@  Use this attribute to place a variable in the @code{.shared} memory space.
 This memory space is private to each cooperative thread array; only threads
 within one thread block refer to the same instance of the variable.
 The runtime does not initialize variables in this memory space.
+
+Introduced before 4.0.0
+
 @end table
 
 @node PowerPC Variable Attributes
@@ -6350,10 +6897,14 @@  Three attributes currently are defined for PowerPC configurations:
 For full documentation of the struct attributes please see the
 documentation in @ref{x86 Variable Attributes}.
 
+Introduced in 4.2.0
+
 @cindex @code{altivec} variable attribute, PowerPC
 For documentation of @code{altivec} attribute please see the
 documentation in @ref{PowerPC Type Attributes}.
 
+Introduced before 4.0.0
+
 @node RL78 Variable Attributes
 @subsection RL78 Variable Attributes
 
@@ -6362,6 +6913,8 @@  The RL78 back end supports the @code{saddr} variable attribute.  This
 specifies placement of the corresponding variable in the SADDR area,
 which can be accessed more efficiently than the default memory region.
 
+Introduced in 5.1.0
+
 @node SPU Variable Attributes
 @subsection SPU Variable Attributes
 
@@ -6370,6 +6923,8 @@  The SPU supports the @code{spu_vector} attribute for variables.  For
 documentation of this attribute please see the documentation in
 @ref{SPU Type Attributes}.
 
+Introduced in 4.3.0
+
 @node V850 Variable Attributes
 @subsection V850 Variable Attributes
 
@@ -6382,15 +6937,22 @@  These variable attributes are supported by the V850 back end:
 Use this attribute to explicitly place a variable in the small data area,
 which can hold up to 64 kilobytes.
 
+Introduced before 4.0.0
+
 @item tda
 @cindex @code{tda} variable attribute, V850
 Use this attribute to explicitly place a variable in the tiny data area,
 which can hold up to 256 bytes in total.
 
+Introduced before 4.0.0
+
 @item zda
 @cindex @code{zda} variable attribute, V850
 Use this attribute to explicitly place a variable in the first 32 kilobytes
 of memory.
+
+Introduced before 4.0.0
+
 @end table
 
 @node x86 Variable Attributes
@@ -6419,6 +6981,8 @@  see @ref{x86 Options}, for details of how structure layout is affected.
 @xref{x86 Type Attributes}, for information about the corresponding
 attributes on types.
 
+Introduced before 4.0.0
+
 @end table
 
 @node Xstormy16 Variable Attributes
@@ -6437,6 +7001,8 @@  memory and use special opcodes to access it.  Such variables are
 placed in either the @code{.bss_below100} section or the
 @code{.data_below100} section.
 
+Introduced in 4.0.0
+
 @end table
 
 @node Type Attributes
@@ -6560,6 +7126,8 @@  alignment.  See your linker documentation for further information.
 The @code{aligned} attribute can only increase alignment.  Alignment
 can be decreased by specifying the @code{packed} attribute.  See below.
 
+Introduced before 4.0.0
+
 @item bnd_variable_size
 @cindex @code{bnd_variable_size} type attribute
 @cindex Pointer Bounds Checker attributes
@@ -6592,6 +7160,8 @@  S *p = (S *)malloc (sizeof(S) + 100);
 p->data[10] = 0; //OK
 @end smallexample
 
+Introduced in 5.1.0
+
 @item deprecated
 @itemx deprecated (@var{msg})
 @cindex @code{deprecated} type attribute
@@ -6625,6 +7195,8 @@  present.
 The @code{deprecated} attribute can also be used for functions and
 variables (@pxref{Function Attributes}, @pxref{Variable Attributes}.)
 
+Introduced before 4.0.0
+
 @item designated_init
 @cindex @code{designated_init} type attribute
 This attribute may only be applied to structure types.  It indicates
@@ -6637,6 +7209,8 @@  initialization will result in future breakage.
 GCC emits warnings based on this attribute by default; use
 @option{-Wno-designated-init} to suppress them.
 
+Introduced in 5.1.0
+
 @item may_alias
 @cindex @code{may_alias} type attribute
 Accesses through pointers to types with this attribute are not subject
@@ -6678,6 +7252,8 @@  declaration, the above program would abort when compiled with
 @option{-fstrict-aliasing}, which is on by default at @option{-O2} or
 above.
 
+Introduced before 4.0.0
+
 @item packed
 @cindex @code{packed} type attribute
 This attribute, attached to @code{struct} or @code{union} type
@@ -6717,6 +7293,8 @@  You may only specify the @code{packed} attribute attribute on the definition
 of an @code{enum}, @code{struct} or @code{union}, not on a @code{typedef}
 that does not also define the enumerated type, structure or union.
 
+Introduced before 4.0.0
+
 @item scalar_storage_order ("@var{endianness}")
 @cindex @code{scalar_storage_order} type attribute
 When attached to a @code{union} or a @code{struct}, this attribute sets
@@ -6757,6 +7335,8 @@  Moreover, the use of type punning or aliasing to toggle the storage order
 is not supported; that is to say, a given scalar object cannot be accessed
 through distinct types that assign a different storage order to it.
 
+Introduced in 6.1.0
+
 @item transparent_union
 @cindex @code{transparent_union} type attribute
 
@@ -6819,6 +7399,8 @@  pid_t wait (wait_status_ptr_t p)
 @}
 @end smallexample
 
+Introduced before 4.0.0
+
 @item unused
 @cindex @code{unused} type attribute
 When attached to a type (including a @code{union} or a @code{struct}),
@@ -6829,6 +7411,8 @@  the case with lock or thread classes, which are usually defined and then
 not referenced, but contain constructors and destructors that have
 nontrivial bookkeeping functions.
 
+Introduced before 4.0.0
+
 @item visibility
 @cindex @code{visibility} type attribute
 In C++, attribute visibility (@pxref{Function Attributes}) can also be
@@ -6843,6 +7427,8 @@  and caught in another, the class must have default visibility.
 Otherwise the two shared objects are unable to use the same
 typeinfo node and exception handling will break.
 
+Introduced before 4.0.0
+
 @end table
 
 To specify multiple attributes, separate them by commas within the
@@ -6875,6 +7461,8 @@  virtual table for @code{C} is not exported.  (You can use
 @code{__attribute__} instead of @code{__declspec} if you prefer, but
 most Symbian OS code uses @code{__declspec}.)
 
+Introduced in 4.0.0
+
 @node MeP Type Attributes
 @subsection MeP Type Attributes
 
@@ -6887,6 +7475,8 @@  Specifically, the @code{based}, @code{tiny}, @code{near}, and
 @code{far} attributes may be applied to either.  The @code{io} and
 @code{cb} attributes may not be applied to types.
 
+Introduced in 4.5.0
+
 @node PowerPC Type Attributes
 @subsection PowerPC Type Attributes
 
@@ -6898,6 +7488,8 @@  Three attributes currently are defined for PowerPC configurations:
 For full documentation of the @code{ms_struct} and @code{gcc_struct}
 attributes please see the documentation in @ref{x86 Type Attributes}.
 
+Introduced in 4.2.0
+
 @cindex @code{altivec} type attribute, PowerPC
 The @code{altivec} attribute allows one to declare AltiVec vector data
 types supported by the AltiVec Programming Interface Manual.  The
@@ -6914,6 +7506,8 @@  __attribute__((altivec(bool__))) unsigned
 These attributes mainly are intended to support the @code{__vector},
 @code{__pixel}, and @code{__bool} AltiVec keywords.
 
+Introduced before 4.0.0
+
 @node SPU Type Attributes
 @subsection SPU Type Attributes
 
@@ -6923,6 +7517,8 @@  allows one to declare vector data types supported by the Sony/Toshiba/IBM SPU
 Language Extensions Specification.  It is intended to support the
 @code{__vector} keyword.
 
+Introduced in 4.3.0
+
 @node x86 Type Attributes
 @subsection x86 Type Attributes
 
@@ -6950,6 +7546,8 @@  see @ref{x86 Options}, for details of how structure layout is affected.
 @xref{x86 Variable Attributes}, for information about the corresponding
 attributes on variables.
 
+Introduced before 4.0.0
+
 @end table
 
 @node Label Attributes
@@ -6991,6 +7589,8 @@  not normally appropriate to use in it human-written code, though it
 could be useful in cases where the code that jumps to the label is
 contained within an @code{#ifdef} conditional.
 
+Introduced before 4.0.0
+
 @item hot
 @cindex @code{hot} label attribute
 The @code{hot} attribute on a label is used to inform the compiler that
@@ -6998,6 +7598,8 @@  the path following the label is more likely than paths that are not so
 annotated.  This attribute is used in cases where @code{__builtin_expect}
 cannot be used, for instance with computed goto or @code{asm goto}.
 
+Introduced in 4.3.0
+
 @item cold
 @cindex @code{cold} label attribute
 The @code{cold} attribute on labels is used to inform the compiler that
@@ -7005,6 +7607,8 @@  the path following the label is unlikely to be executed.  This attribute
 is used in cases where @code{__builtin_expect} cannot be used, for instance
 with computed goto or @code{asm goto}.
 
+Introduced in 4.3.0
+
 @end table
 
 @node Enumerator Attributes
@@ -7044,6 +7648,8 @@  of the deprecated enumerator, to enable users to easily find further
 information about why the enumerator is deprecated, or what they should
 do instead.  Note that the warnings only occurs for uses.
 
+Introduced before 4.0.0
+
 @end table
 
 @node Statement Attributes
@@ -7084,6 +7690,8 @@  be used in a switch statement (the compiler will issue an error
 otherwise), after a preceding statement and before a logically
 succeeding case label, or user-defined label.
 
+Introduced in 7.1.0
+
 @end table
 
 @node Attribute Syntax
@@ -22491,6 +23099,8 @@  variable or function.  @option{-Wabi-tag} also warns about this
 situation; this warning can be avoided by explicitly tagging the
 variable or function or moving it into a tagged inline namespace.
 
+Introduced in 4.8.0
+
 @item init_priority (@var{priority})
 @cindex @code{init_priority} variable attribute
 
@@ -22515,6 +23125,8 @@  Some_Class  B  __attribute__ ((init_priority (543)));
 Note that the particular values of @var{priority} do not matter; only their
 relative ordering.
 
+Introduced before 4.0.0
+
 @item warn_unused
 @cindex @code{warn_unused} type attribute
 
@@ -22532,6 +23144,8 @@  control a resource, such as @code{std::lock_guard}.
 This attribute is also accepted in C, but it is unnecessary because C
 does not have constructors or destructors.
 
+Introduced in 4.9.0
+
 @end table
 
 @node Function Multiversioning