GCC has so many attributes nowadays that having a dedicated index for
them seems long overdue.

gcc/ChangeLog
        PR other/88472
        * doc/extend.texi (Common Attributes): Change @cindex entries for
        attributes to @atindex.  Add some additional @cindex entries.
        (AArch64 Attributes): Likewise.
        (AMD GCN Attributes): Likewise.
        (ARC Attributes): Likewise.
        (ARM Attributes): Likewise.
        (AVR Attributes): Likewise.
        (Blackfin Attributes): Likewise.
        (BPF Attributes): Likewise.
        (C-SKY Attributes): Likewise.
        (Epiphany Attributes): Likewise.
        (H8/300 Attributes): Likewise.
        (IA-64 Attributes): Likewise.
        (LoongArch Attributes): Likewise.
        (M32C Attributes): Likewise.
        (M32R/D Attributes): Likewise.
        (m68k Attributes): Likewise.
        (MicroBlaze Attributes): Likewise.
        (Microsoft Windows Attributes): Likewise.
        (MIPS Attributes): Likewise.
        (MSP430 Attributes): Likewise.
        (NDS32 Attributes): Likewise.
        (Nvidia PTX Attributes): Likewise.
        (PowerPC Attributes): Likewise.
        (RISC-V Attributes): Likewise.
        (RL78 Attributes): Likewise.
        (RX Attributes): Likewise.
        (S/390 Attributes): Likewise.
        (SH Attributes): Likewise.
        (Symbian OS Attributes): Likewise.
        (V850 Attributes): Likewise.
        (Visium Attributes): Likewise.
        (x86 Attributes): Likewise.
        (Xstormy16 Attributes): Likewise.
        (C++ Attributes): Likewise.
        * doc/gcc.texi: Define a new "at" index for attributes.
        (Attribute Index): New appendix.
---
 gcc/doc/extend.texi | 1029 +++++++++++++++++++++++--------------------
 gcc/doc/gcc.texi    |   16 +-
 2 files changed, 574 insertions(+), 471 deletions(-)

diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 4a96fd0a529..a22ef39226a 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -1809,7 +1809,8 @@ directives, with names prefixed with @samp{omp::}, using 
the standard
 @c Every entry should start with a sentence that says where the attribute
 @c may appear.
 
-@cindex @code{access} function attribute
+@atindex @code{access}
+@cindex functions that restrict access to pointer arguments
 @item access (@var{access-mode}, @var{ref-index})
 @itemx access (@var{access-mode}, @var{ref-index}, @var{size-index})
 This attribute applies to functions.
@@ -1910,7 +1911,7 @@ that unconditionally manipulates a buffer via a pointer 
argument.  See the
 documented later in this section, for more information and
 caveats.
 
-@cindex @code{alias} attribute
+@atindex @code{alias}
 @item alias ("@var{target}")
 This attribute applies to variables and functions.
 
@@ -1950,7 +1951,8 @@ in a translation unit without a declaration of the alias 
with the attribute.
 This attribute requires assembler and object file support,
 and may not be available on all targets.
 
-@cindex @code{aligned} attribute
+@atindex @code{aligned}
+@cindex alignment of functions and data
 @item aligned
 @itemx aligned (@var{alignment})
 This attribute applies to functions, variables, typedefs, structs, and
@@ -2051,7 +2053,8 @@ further information.
 Stack variables are not affected by linker restrictions; GCC can properly
 align them on any target.
 
-@cindex @code{alloc_align} function attribute
+@atindex @code{alloc_align}
+@cindex alignment of allocated data
 @item alloc_align (@var{position})
 The @code{alloc_align} attribute may be applied to a function that
 returns a pointer and takes at least one argument of an integer or
@@ -2076,7 +2079,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.
 
-@cindex @code{alloc_size} attribute
+@atindex @code{alloc_size}
+@cindex size of objects
 @item alloc_size (@var{position})
 @itemx alloc_size (@var{position-1}, @var{position-2})
 The @code{alloc_size} attribute may be applied to a function that
@@ -2125,7 +2129,9 @@ is given by the product of arguments 1 and 2, and 
similarly, that
 is a pointer to a function that returns an object whose size is
 given by argument 1 to the function.
 
-@cindex @code{always_inline} function attribute
+@atindex @code{always_inline}
+@cindex inlining
+@cindex function inlining
 @item always_inline
 The @code{always_inline} attribute applies to functions.
 
@@ -2144,7 +2150,7 @@ where the function is used.  Link-time optimization can 
inline
 functions across translation units, but only if an optimization level
 that normally enables inlining is additionally specified.
 
-@cindex @code{artificial} function attribute
+@atindex @code{artificial}
 @item artificial
 This attribute applies to functions.
 
@@ -2155,7 +2161,7 @@ info format it either means marking the function as 
artificial
 or using the caller location for all instructions within the inlined
 body.
 
-@cindex @code{assume} statement attribute
+@atindex @code{assume}
 @item assume
 This is a statement attribute that can appear only as an
 attribute declaration.
@@ -2181,7 +2187,8 @@ foo (int x, int y)
 @code{y} is not actually incremented and the compiler can but does not
 have to optimize it to just @code{return 42 + 42;}.
 
-@cindex @code{assume_aligned} function attribute
+@atindex @code{assume_aligned}
+@cindex alignment of data
 @item assume_aligned (@var{alignment})
 @itemx assume_aligned (@var{alignment}, @var{offset})
 The @code{assume_aligned} attribute may be applied to a function that
@@ -2205,7 +2212,7 @@ declares that @code{my_alloc1} returns 16-byte aligned 
pointers and
 that @code{my_alloc2} returns a pointer whose value modulo 32 is equal
 to 8.
 
-@cindex @code{btf_decl_tag} attribute
+@atindex @code{btf_decl_tag}
 @item btf_decl_tag
 This attribute can be applied to functions, variables, struct or union member
 declarations, and function parameter declarations.
@@ -2242,7 +2249,7 @@ when compiled with @option{-gbtf} results in an additional
 associating the string @samp{__percpu} with the @code{BTF_KIND_VAR}
 record for the variable @code{foo}.
 
-@cindex @code{btf_type_tag} type attribute
+@atindex @code{btf_type_tag}
 @item btf_type_tag (@var{argument})
 This attribute applies to types.
 
@@ -2281,7 +2288,8 @@ Note that the BTF format currently only has a 
representation for type
 tags associated with pointer types.  Type tags on non-pointer types
 may be silently skipped when generating BTF.
 
-@cindex @code{cleanup} variable attribute
+@atindex @code{cleanup}
+@cindex cleanup functions
 @item cleanup (@var{cleanup_function})
 This attribute applies to variables.
 
@@ -2304,8 +2312,10 @@ 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.
 
-@cindex @code{cold} attribute
-@cindex @code{hot} attribute
+@atindex @code{cold}
+@atindex @code{hot}
+@cindex cold functions and code regions
+@cindex hot functions and code regions
 @item cold
 @itemx hot
 
@@ -2346,8 +2356,9 @@ annotated.  This attribute
 is used in cases where @code{__builtin_expect} cannot be used, for instance
 with computed goto or @code{asm goto}.
 
-@cindex @code{common} variable attribute
-@cindex @code{nocommon} variable attribute
+@atindex @code{common}
+@atindex @code{nocommon}
+@cindex common storage
 @opindex fcommon
 @opindex fno-common
 @item common
@@ -2361,7 +2372,7 @@ opposite---to allocate space for it directly.
 These attributes override the default chosen by the
 @option{-fno-common} and @option{-fcommon} flags respectively.
 
-@cindex @code{const} function attribute
+@atindex @code{const}
 @cindex functions that have no side effects
 @item const
 This attribute applies to functions.
@@ -2406,8 +2417,9 @@ from data that cannot, const functions should never take 
pointer or,
 in C++, reference arguments. Likewise, a function that calls a non-const
 function usually must not be const itself.
 
-@cindex @code{constructor} function attribute
-@cindex @code{destructor} function attribute
+@atindex @code{constructor}
+@atindex @code{destructor}
+@cindex functions that are called on program startup or exit
 @item constructor
 @itemx destructor
 @itemx constructor (@var{priority})
@@ -2449,7 +2461,7 @@ supported is rejected with an error.  Only a few targets 
(typically
 those not using ELF object format, or the GNU linker) reject this
 usage.
 
-@cindex @code{copy} attribute
+@atindex @code{copy}
 @item copy
 @itemx copy (@var{name})
 The @code{copy} attribute can appear on function, variable, and type
@@ -2499,7 +2511,8 @@ A @{ /* @r{@dots{}} */ @};
 struct __attribute__ ((copy ( (struct A *)0)) B @{ /* @r{@dots{}} */ @};
 @end smallexample
 
-@cindex @code{counted_by} variable attribute
+@atindex @code{counted_by}
+@cindex flexible array members
 @item counted_by (@var{count})
 The @code{counted_by} attribute may be attached to a C99 flexible array
 member or a pointer field of a structure.
@@ -2609,7 +2622,8 @@ in @code{p->array}.
 
 Note, however, the above feature is not valid for the pointer field.
 
-@cindex @code{deprecated} attribute
+@atindex @code{deprecated}
+@cindex deprecated entities
 @item deprecated
 @itemx deprecated (@var{msg})
 This attribute can appear on function, variable, type, or enumerator
@@ -2678,7 +2692,7 @@ Control characters in the @var{msg} string are replaced 
with
 escape sequences, and if the @option{-fmessage-length} option is set
 to 0 (its default value) then any newline characters are ignored.
 
-@cindex @code{designated_init} type attribute
+@atindex @code{designated_init}
 @item designated_init
 This attribute may only be applied to structure types.
 
@@ -2691,8 +2705,9 @@ positional initialization will result in future breakage.
 GCC emits warnings based on this attribute by default; use
 @option{-Wno-designated-init} to suppress them.
 
-@cindex @code{error} function attribute
-@cindex @code{warning} function attribute
+@atindex @code{error}
+@atindex @code{warning}
+@cindex functions that are supposed to be optimized away
 @item error ("@var{message}")
 @itemx warning ("@var{message}")
 This attribute applies to functions.
@@ -2713,7 +2728,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.
 
-@cindex @code{expected_throw} function attribute
+@atindex @code{expected_throw}
+@cindex functions that are expected to throw exceptions
 @item expected_throw
 This attribute applies to functions.
 
@@ -2726,7 +2742,7 @@ it's applied to @code{noreturn} functions and
 @samp{-fharden-control-flow-redundancy} is enabled, and
 @samp{-fhardcfr-check-noreturn-calls=not-always} is not overridden.
 
-@cindex @code{externally_visible} attribute
+@atindex @code{externally_visible}
 @item externally_visible
 This attribute applies to global variables and functions.
 
@@ -2743,7 +2759,9 @@ produced by @command{gold}.
 For other linkers that cannot generate resolution file,
 explicit @code{externally_visible} attributes are still necessary.
 
-@cindex @code{fallthrough} statement attribute
+@atindex @code{fallthrough}
+@cindex fallthrough in switch statements
+@cindex switch statement fallthrough
 @item fallthrough
 This statement attribute can appear only as an attribute declaration.
 
@@ -2772,9 +2790,10 @@ switch (cond)
   @}
 @end smallexample
 
-@cindex @code{fd_arg} function attribute
-@cindex @code{fd_arg_read} function attribute
-@cindex @code{fd_arg_write} function attribute
+@atindex @code{fd_arg}
+@atindex @code{fd_arg_read}
+@atindex @code{fd_arg_write}
+@cindex functions that take file descriptor arguments
 @item fd_arg (@var{N})
 @itemx fd_arg_read (@var{N})
 @itemx fd_arg_write (@var{N})
@@ -2820,7 +2839,9 @@ that its enumerators are used in bitwise operations, so 
e.g. @option{-Wswitch}
 should not warn about a @code{case} that corresponds to a bitwise
 combination of enumerators.
 
-@cindex @code{flatten} function attribute
+@atindex @code{flatten}
+@cindex inlining
+@cindex function inlining
 @item flatten
 This attribute applies to functions.
 
@@ -2832,8 +2853,9 @@ Functions declared with attribute @code{noinline} and 
similar are not
 inlined.  Whether the function itself is considered for inlining depends
 on its size and the current inlining parameters.
 
-@cindex @code{format} function attribute
+@atindex @code{format}
 @cindex functions with @code{printf}, @code{scanf}, @code{strftime} or 
@code{strfmon} style arguments
+@cindex functions that have format string arguments
 @opindex Wformat
 @item format (@var{archetype}, @var{string-index}, @var{first-to-check})
 The @code{format} attribute applies to functions.
@@ -2926,7 +2948,8 @@ standard modes, the X/Open function @code{strfmon} is 
also checked as
 are @code{printf_unlocked} and @code{fprintf_unlocked}.
 @xref{C Dialect Options,,Options Controlling C Dialect}.
 
-@cindex @code{format_arg} function attribute
+@atindex @code{format_arg}
+@cindex functions that have format string arguments
 @opindex Wformat-nonliteral
 @item format_arg (@var{string-index})
 The @code{format_arg} attribute applies to functions.
@@ -2993,7 +3016,9 @@ system documentation provide descriptions of 
@code{CFString},
 @code{CFStringRefs} and associated functions.
 
 
-@cindex @code{gnu_inline} function attribute
+@atindex @code{gnu_inline}
+@cindex inlining
+@cindex function inlining
 @item gnu_inline
 This attribute applies to functions.
 
@@ -3033,7 +3058,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.
 
-@cindex @code{hardbool} type attribute
+@atindex @code{hardbool}
+@cindex hardened boolean types
 @item hardbool
 @itemx hardbool (@var{false_value})
 @itemx hardbool (@var{false_value}, @var{true_value})
@@ -3099,7 +3125,7 @@ Ada Booleans defined with the same size and equivalent 
representation
 clauses, and with enumerations or other languages' integral types that
 correspond to C's chosen integral type.
 
-@cindex @code{ifunc} function attribute
+@atindex @code{ifunc}
 @cindex indirect functions
 @cindex functions that are dynamically resolved
 @item ifunc ("@var{resolver}")
@@ -3193,8 +3219,10 @@ int S::interface (int) __attribute__ ((ifunc 
("_ZN1S8resolverEv")));
 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.
 
-@cindex @code{interrupt_handler} function attribute
-@cindex @code{interrupt} function attribute
+@atindex @code{interrupt_handler}
+@atindex @code{interrupt}
+@cindex interrupt handlers
+@cindex functions that handle interrupts
 @item interrupt
 @itemx interrupt_handler
 These attributes apply to functions.
@@ -3205,7 +3233,7 @@ entry and exit sequences that differ from those from 
regular
 functions.  The exact syntax and behavior are target-specific;
 refer to the following subsections for details.
 
-@cindex @code{leaf} function attribute
+@atindex @code{leaf}
 @item leaf
 This attribute applies to functions.
 
@@ -3244,7 +3272,7 @@ 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.
 
-@cindex @code{malloc} function attribute
+@atindex @code{malloc}
 @cindex functions that behave like malloc
 @item malloc
 @item malloc (@var{deallocator})
@@ -3363,7 +3391,8 @@ pointer.  If this is not the case, the deallocator can be 
marked with
 a @option{-Wanalyzer-possible-null-argument} diagnostic for code paths
 in which the deallocator is called with null.
 
-@cindex @code{may_alias} type attribute
+@atindex @code{may_alias}
+@cindex pointer aliasing
 @item may_alias
 The @code{may_alias} attribute applies to pointer type declarations.
 
@@ -3406,7 +3435,7 @@ declaration, the above program would abort when compiled 
with
 @option{-fstrict-aliasing}, which is on by default at @option{-O2} or
 above.
 
-@cindex @code{mode} attribute
+@atindex @code{mode}
 @item mode (@var{mode})
 This attribute can apply to a variable or type declaration.
 
@@ -3421,7 +3450,9 @@ 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.
 
-@cindex @code{musttail} statement attribute
+@atindex @code{musttail}
+@cindex tail recursion
+@cindex functions that return via tail call
 @item musttail
 This attribute can be applied to a @code{return} statement
 with a return-value expression that is a function call.
@@ -3511,7 +3542,9 @@ It is not possible to avoid the warning in this way if 
the maybe-escaped
 variable is a function argument, because those are in scope
 for the whole function.
 
-@cindex @code{naked} function attribute
+@atindex @code{naked}
+@cindex naked functions
+@cindex functions that do not have prologue/epilogue code
 @item naked
 This attribute applies to functions.
 
@@ -3527,14 +3560,16 @@ are not supported.
 Not all targets support this attribute.  Those that do include ARC, ARM,
 AVR, BPF, C-SKY, MCORE, MSP430, NDS32, RISC-V, RL78, RX, and x86.
 
-@cindex @code{no_icf} attribute
+@atindex @code{no_icf}
 @item no_icf
 This attribute can be applied to functions or variables.
 
 It prevents the entity from being
 merged with another semantically equivalent function or variable.
 
-@cindex @code{no_instrument_function} function attribute
+@atindex @code{no_instrument_function}
+@cindex functions that should not be instrumented
+@cindex function instrumentation
 @opindex finstrument-functions
 @opindex p
 @opindex pg
@@ -3555,7 +3590,7 @@ The @code{no_profile_instrument_function} attribute 
informs
 the compiler that it should not process any code instrumentation
 for profile-feedback-based optimization code instrumentation.
 
-@cindex @code{no_reorder} attribute
+@atindex @code{no_reorder}
 @item no_reorder
 This attribute applies to functions or variables.
 
@@ -3568,6 +3603,7 @@ as the @option{-fno-toplevel-reorder} option, but only 
applies to the
 marked symbols.
 
 @cindex @code{no_sanitize} function attribute
+@cindex functions that should not be sanitized
 @item no_sanitize ("@var{sanitize_option}")
 This attribute applies to functions.
 
@@ -3583,7 +3619,8 @@ void __attribute__ ((no_sanitize 
("alignment,object-size")))
 g () @{ /* @r{Do something.} */; @}
 @end smallexample
 
-@cindex @code{no_sanitize_address} function attribute
+@atindex @code{no_sanitize_address}
+@cindex functions that should not be sanitized
 @item no_sanitize_address
 @itemx no_address_safety_analysis
 This attribute applies to functions.
@@ -3597,6 +3634,7 @@ in the function when compiling with the 
@option{-fsanitize=address} option.
 @code{no_sanitize_address}.
 
 @cindex @code{no_sanitize_coverage} function attribute
+@cindex functions that should not be sanitized
 @item no_sanitize_coverage
 This attribute applies to functions.
 
@@ -3604,7 +3642,8 @@ The @code{no_sanitize_coverage} attribute
 informs the compiler that it should not do coverage-guided
 fuzzing code instrumentation (@option{-fsanitize-coverage}).
 
-@cindex @code{no_sanitize_thread} function attribute
+@atindex @code{no_sanitize_thread}
+@cindex functions that should not be sanitized
 @item no_sanitize_thread
 This attribute applies to functions.
 
@@ -3612,7 +3651,8 @@ The @code{no_sanitize_thread} attribute
 informs the compiler that it should not instrument memory accesses
 in the function when compiling with the @option{-fsanitize=thread} option.
 
-@cindex @code{no_sanitize_undefined} function attribute
+@atindex @code{no_sanitize_undefined}
+@cindex functions that should not be sanitized
 @item no_sanitize_undefined
 This attribute applies to functions.
 
@@ -3620,7 +3660,7 @@ The @code{no_sanitize_undefined} attribute
 informs the compiler that it should not check for undefined behavior
 in the function when compiling with the @option{-fsanitize=undefined} option.
 
-@cindex @code{no_split_stack} function attribute
+@atindex @code{no_split_stack}
 @opindex fsplit-stack
 @item no_split_stack
 This attribute applies to functions.
@@ -3630,7 +3670,9 @@ 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.
 
-@cindex @code{no_stack_limit} function attribute
+@atindex @code{no_stack_limit}
+@cindex stack protection
+@cindex functions that should not have stack limit checking
 @item no_stack_limit
 This attribute applies to functions.
 
@@ -3638,13 +3680,15 @@ 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.
 
-@cindex @code{no_stack_protector} function attribute
+@atindex @code{no_stack_protector}
+@cindex stack protection
+@cindex functions that should not have stack protection
 @item no_stack_protector
 This attribute applies to functions.
 
 It prevents GCC from generating stack protection code for the function.
 
-@cindex @code{noclone} function attribute
+@atindex @code{noclone}
 @item noclone
 This attribute applies to functions.
 
@@ -3653,7 +3697,8 @@ cloning---a mechanism that produces specialized copies of 
functions
 and which is (currently) performed by interprocedural constant
 propagation.
 
-@cindex @code{noinit} variable attribute
+@atindex @code{noinit}
+@cindex variables that should not be initialized
 @item noinit
 This attribute applies to variables.
 
@@ -3665,7 +3710,10 @@ This attribute is specific to ELF targets and relies on 
the linker
 script to place sections with the @code{.noinit} prefix in the right
 location.
 
-@cindex @code{noinline} function attribute
+@atindex @code{noinline}
+@cindex inlining, suppressing
+@cindex function inlining, suppressing
+@cindex suppressing inlining
 @item noinline
 This attribute applies to functions.
 
@@ -3689,7 +3737,7 @@ asm ("");
 (@pxref{Extended Asm}) in the called function, to serve as a special
 side effect.
 
-@cindex @code{noipa} function attribute
+@atindex @code{noipa}
 @item noipa
 This attribute applies to functions.
 
@@ -3703,8 +3751,8 @@ existing and future optimizations employing 
interprocedural analysis,
 including those that do not have an attribute suitable for disabling
 them individually.
 
-@cindex @code{nonnull} function attribute
-@cindex functions with non-null pointer arguments
+@atindex @code{nonnull}
+@cindex functions that have non-null pointer arguments
 @item nonnull
 @itemx nonnull (@var{arg-index}, @dots{})
 The @code{nonnull} attribute may be applied to a function that takes at
@@ -3762,7 +3810,8 @@ my_memcpy (void *dest, const void *src, size_t len)
         __attribute__((nonnull));
 @end smallexample
 
-@cindex @code{nonnull_if_nonzero} function attribute
+@atindex @code{nonnull_if_nonzero}
+@cindex functions that have non-null pointer arguments
 @item nonnull_if_nonzero (@var{arg-index}, @var{arg2-index})
 @itemx nonnull_if_nonzero (@var{arg-index}, @var{arg2-index}, @var{arg3-index})
 This attribute may be applied to a function that takes at
@@ -3806,7 +3855,9 @@ to call @code{my_memcpy2 (NULL, NULL, 0);} or
 used on declarations which have e.g.@: an exception for zero sizes,
 in which case null may be passed.
 
-@cindex @code{nonstring} variable attribute
+@atindex @code{nonstring}
+@cindex nonstring character arrays
+@cindex character arrays, non-null-terminated
 @item nonstring
 This attribute applies to variables or members of a struct, union, or class
 that have type array of @code{char}, @code{signed char}, or
@@ -3844,7 +3895,7 @@ int f (struct Data *pd, const char *s)
 @}
 @end smallexample
 
-@cindex @code{noplt} function attribute
+@atindex @code{noplt}
 @item noplt
 This attribute applies to functions.
 
@@ -3876,7 +3927,7 @@ 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.
 
-@cindex @code{noreturn} function attribute
+@atindex @code{noreturn}
 @cindex functions that never return
 @item noreturn
 This attribute applies to functions.
@@ -3919,7 +3970,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}.
 
-@cindex @code{nothrow} function attribute
+@atindex @code{nothrow}
+@cindex functions that do not throw exceptions
 @item nothrow
 This attribute applies to functions.
 
@@ -3929,7 +3981,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.
 
-@cindex @code{null_terminated_string_arg} function attribute
+@atindex @code{null_terminated_string_arg}
+@cindex character arrays, null-terminated
 @item null_terminated_string_arg
 @itemx null_terminated_string_arg (@var{N})
 The @code{null_terminated_string_arg} attribute may be applied to a
@@ -3988,7 +4041,7 @@ the analyzer requires the first parameter to be non-null, 
and either
 be validly null-terminated, or validly readable up to the size specified by
 the second parameter.
 
-@cindex @code{objc_nullability} variable attribute
+@atindex @code{objc_nullability}
 @item objc_nullability (@var{nullability kind}) @r{(Objective-C and 
Objective-C++ only)}
 This attribute applies to pointer variables only.
 
@@ -4016,7 +4069,7 @@ property setter may take the value @code{nil} (which 
perhaps causes the
 property to be reset in some manner to a default) but for which the property
 getter will never validly return @code{nil}.
 
-@cindex @code{objc_root_class} type attribute
+@atindex @code{objc_root_class}
 @item objc_root_class @r{(Objective-C and Objective-C++ only)}
 This attribute applies to Objective-C and Objective-C++ classes.
 
@@ -4024,7 +4077,9 @@ It marks the class as being a root class, and thus allows
 the compiler to elide any warnings about a missing superclass and to
 make additional checks for mandatory methods as needed.
 
-@cindex @code{optimize} function attribute
+@atindex @code{optimize}
+@cindex optimization, per-function
+@cindex functions that are compiled with specific optimizations
 @item optimize (@var{level}, @dots{})
 @item optimize (@var{string}, @dots{})
 This attribute applies to functions.
@@ -4056,7 +4111,9 @@ specified by the attribute necessarily has an effect on 
the function.
 The @code{optimize} attribute should be used for debugging purposes only.
 It is not suitable in production code.
 
-@cindex @code{packed} attribute
+@atindex @code{packed}
+@cindex packed data
+@cindex alignment of structure fields
 @item packed
 This attribute can be attached to a @code{struct}, @code{union}, or
 C++ @code{class} definition, to a member of one, or to an @code{enum}
@@ -4112,7 +4169,7 @@ struct __attribute__ ((__packed__)) my_packed_struct
 @end smallexample
 
 @opindex fshort-enums
-When attached to an @code{enum} definition, the @code{packed} attribute
+When attached to an @code{enum}
 indicates that the smallest integral type should be used to represent the type.
 Specifying the @option{-fshort-enums} flag on the command line
 is equivalent to specifying the @code{packed}
@@ -4123,8 +4180,9 @@ of an @code{enum}, @code{struct}, @code{union}, or 
@code{class},
 not on a @code{typedef} that does not also define the enumerated type,
 structure, union, or class.
 
-@cindex @code{patchable_function_entry} function attribute
+@atindex @code{patchable_function_entry}
 @cindex extra NOP instructions at the function entry point
+@cindex functions that have patchable entries
 @item patchable_function_entry
 This attribute applies to functions.
 
@@ -4146,7 +4204,8 @@ instrumentation on all functions that are part of the 
instrumentation
 framework with the attribute @code{patchable_function_entry (0)}
 to prevent recursion.
 
-@cindex @code{persistent} variable attribute
+@atindex @code{persistent}
+@cindex persistent data
 @item persistent
 This attribute applies to variables.
 
@@ -4160,7 +4219,7 @@ script to place the sections with the @code{.persistent} 
prefix in the
 right location.  Specifically, some type of non-volatile, writable
 memory is required.
 
-@cindex @code{pure} function attribute
+@atindex @code{pure}
 @cindex functions that have no side effects
 @item pure
 This attribute applies to functions.
@@ -4211,7 +4270,7 @@ diagnosed.  Because a pure function cannot have any 
observable side
 effects it does not make sense for such a function to return @code{void}.
 Declaring such a function is diagnosed.
 
-@cindex @code{reproducible} function type attribute
+@atindex @code{reproducible}
 @cindex functions that have no side effects
 @item reproducible
 This attribute applies to function types.
@@ -4242,7 +4301,8 @@ Reproducible functions with pointer or reference 
arguments can store
 additional results through those pointers or references or references to
 pointers.
 
-@cindex @code{retain} attribute
+@atindex @code{retain}
+@cindex linker garbage collection
 @item retain
 This attribute applies to functions and variables.
 
@@ -4255,7 +4315,7 @@ or @code{-fdata-sections} options) are placed in new, 
unique sections.
 
 This additional functionality requires Binutils version 2.36 or later.
 
-@cindex @code{returns_nonnull} function attribute
+@atindex @code{returns_nonnull}
 @item returns_nonnull
 This attribute applies to functions returning a pointer type.
 
@@ -4271,7 +4331,7 @@ mymalloc (size_t len) __attribute__((returns_nonnull));
 lets the compiler optimize callers based on the knowledge
 that the return value will never be null.
 
-@cindex @code{returns_twice} function attribute
+@atindex @code{returns_twice}
 @cindex functions that return more than once
 @item returns_twice
 This attribute applies to functions.
@@ -4284,7 +4344,9 @@ 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.
 
-@cindex @code{scalar_storage_order} type attribute
+@atindex @code{scalar_storage_order}
+@cindex endianness
+@cindex byte order
 @item scalar_storage_order ("@var{endianness}")
 This attribute applies to a @code{union} or @code{struct}.
 
@@ -4329,9 +4391,10 @@ is not supported; that is to say, if a given scalar 
object can be accessed
 through distinct types that assign a different storage order to it, then the
 behavior is undefined.
 
-@cindex @code{section} attribute
+@atindex @code{section}
 @cindex functions in arbitrary sections
 @cindex variables in arbitrary sections
+@cindex program sections
 @item section ("@var{section-name}")
 This attribute applies to functions and variables.
 
@@ -4391,7 +4454,9 @@ 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.
 
-@cindex @code{sentinel} function attribute
+@atindex @code{sentinel}
+@cindex variadic function sentinel
+@cindex functions that have a null-terminated argument list
 @item sentinel
 @itemx sentinel (@var{position})
 This attribute applies to functions.
@@ -4422,7 +4487,9 @@ a copy that redefines NULL appropriately.
 The warnings for missing or incorrect sentinels are enabled with
 @option{-Wformat}.
 
-@cindex @code{simd} function attribute
+@atindex @code{simd}
+@cindex SIMD function cloning
+@cindex functions that have SIMD clones
 @item simd
 @itemx simd("@var{mask}")
 This attribute applies to functions.
@@ -4445,7 +4512,9 @@ 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.
 
-@cindex @code{stack_protect} function attribute
+@atindex @code{stack_protect}
+@cindex stack protection
+@cindex functions that should have stack protection
 @item stack_protect
 This attribute applies to functions.
 
@@ -4453,7 +4522,8 @@ It adds stack protection code to the function it applies 
to if
 flags @option{-fstack-protector}, @option{-fstack-protector-strong}
 or @option{-fstack-protector-explicit} are set.
 
-@cindex @code{strict_flex_array} variable attribute
+@atindex @code{strict_flex_array}
+@cindex flexible array members
 @item strict_flex_array (@var{level})
 The @code{strict_flex_array} attribute can be attached to the trailing
 array field of a structure.
@@ -4487,7 +4557,8 @@ The @code{strict_flex_array} attribute interacts with the
 @option{-Wstrict-flex-arrays} option.  @xref{Warning Options}, for more
 information.
 
-@cindex @code{strub} type attribute
+@atindex @code{strub}
+@cindex stack scrubbing
 @item strub
 This attribute applies to types, and may also appear in variable and function
 declarations.
@@ -4753,7 +4824,8 @@ __attribute__ ((noipa)) void flop (void) @{@}
 inline __attribute__ ((noclone, always_inline)) void flip (void) @{@}
 @end smallexample
 
-@cindex @code{symver} function attribute
+@atindex @code{symver}
+@cindex symbol versioning
 @item symver ("@var{name2}@@@var{nodename}")
 This attribute applies to functions.
 
@@ -4808,7 +4880,9 @@ addition to creating a symbol version (as if
 @code{"@var{name2}@@@var{nodename}"} was used) the version is also used
 to resolve @var{name2} by the linker.
 
-@cindex @code{tainted_args} function attribute
+@atindex @code{tainted_args}
+@cindex tainted arguments
+@cindex functions that have tainted arguments
 @item tainted_args
 This attribute applies to functions.
 
@@ -4829,7 +4903,8 @@ The analyzer pays particular attention to such functions 
when
 @option{-Wanalyzer-tainted-offset},
 and @option{-Wanalyzer-tainted-size}.
 
-@cindex @code{target} function attribute
+@atindex @code{target}
+@cindex target-specific code generation attributes
 @item target (@var{string}, @dots{})
 This attribute applies to functions.
 
@@ -4892,7 +4967,8 @@ function definition.
 
 @xref{Function Multiversioning} for more details.
 
-@cindex @code{target_version} function attribute
+@atindex @code{target_version}
+@cindex function multiversioning
 @item target_version (@var{option})
 This attribute applies to functions.
 
@@ -4904,7 +4980,8 @@ version set.
 
 @xref{Function Multiversioning} for more details.
 
-@cindex @code{target_clones} function attribute
+@atindex @code{target_clones}
+@cindex function multiversioning
 @item target_clones (@var{options})
 This attribute applies to functions.
 
@@ -4942,7 +5019,7 @@ the @code{target_version} attribute.
 
 @xref{Function Multiversioning} for more details.
 
-@cindex @code{tls_model} variable attribute
+@atindex @code{tls_model}
 @item tls_model ("@var{tls_model}")
 This attribute applies to variables.
 
@@ -4955,7 +5032,8 @@ The @var{tls_model} argument should be one of 
@code{global-dynamic},
 
 Not all targets support this attribute.
 
-@cindex @code{transparent_union} type attribute
+@atindex @code{transparent_union}
+@cindex transparent unions
 @item transparent_union
 This attribute applies to @code{union} type definitions.
 
@@ -5018,7 +5096,7 @@ pid_t wait (wait_status_ptr_t p)
 @}
 @end smallexample
 
-@cindex @code{unavailable} attribute
+@atindex @code{unavailable}
 @item unavailable
 @itemx unavailable (@var{msg})
 The @code{unavailable} attribute can apply to functions, variables, types,
@@ -5032,7 +5110,7 @@ interface.  Other than emitting an error rather than a 
warning, the
 @code{unavailable} attribute behaves in the same manner as
 @code{deprecated}.
 
-@cindex @code{uninitialized} variable attribute
+@atindex @code{uninitialized}
 @item uninitialized
 This variable applies to variables with automatic storage.
 
@@ -5050,7 +5128,7 @@ overhead.
 This attribute has no effect when the option @code{-ftrivial-auto-var-init}
 is not present.
 
-@cindex @code{unsequenced} function type attribute
+@atindex @code{unsequenced}
 @cindex functions that have no side effects
 @item unsequenced
 This type attribute can appear on both function declarations and declarations
@@ -5086,7 +5164,8 @@ the @code{const} attribute, so during optimization 
@code{const} has
 precedence over @code{unsequenced} which has precedence over
 @code{reproducible}.
 
-@cindex @code{unused} attribute
+@atindex @code{unused}
+@cindex unused entities
 @item unused
 This attribute can be attached to a function, variable, structure field,
 type declaration, or label.
@@ -5111,7 +5190,8 @@ not normally appropriate to use it in 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.
 
-@cindex @code{used} attribute
+@atindex @code{used}
+@cindex used entities
 @item used
 The @code{used} attribute applies to functions and variables.
 
@@ -5132,7 +5212,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.
 
-@cindex @code{vector_size} attribute
+@atindex @code{vector_size}
+@cindex vector types
 @item vector_size (@var{bytes})
 The @code{vector_size} attribute can be attached to type, variable,
 and function declarations.
@@ -5198,7 +5279,9 @@ the @code{int}.
 
 @xref{Vector Extensions}, for details of manipulating objects of vector types.
 
-@cindex @code{visibility} attribute
+@atindex @code{visibility}
+@cindex visibility of symbols
+@cindex linker visibility
 @item visibility ("@var{visibility_type}")
 This attribute can be applied to functions, variables, and types.
 
@@ -5315,6 +5398,7 @@ Otherwise the two shared objects are unable to use the 
same
 typeinfo node and exception handling will break.
 
 @cindex @code{warn_if_not_aligned} attribute
+@cindex alignment of structure fields
 @item warn_if_not_aligned (@var{alignment})
 This attribute applies to structure fields.
 
@@ -5371,7 +5455,9 @@ has similar behavior to the first example above.
 
 This warning can be disabled by @option{-Wno-if-not-aligned}.
 
-@cindex @code{warn_unused_result} function attribute
+@atindex @code{warn_unused_result}
+@cindex unused function result
+@cindex functions whose return value must be used
 @item warn_unused_result
 This attribute applies to functions.
 
@@ -5394,7 +5480,8 @@ int foo ()
 @noindent
 results in warning on line 5.
 
-@cindex @code{weak} attribute
+@atindex @code{weak}
+@cindex weak symbols
 @item weak
 This attribute applies to function and variable declarations.
 
@@ -5407,7 +5494,8 @@ designates a variable it must also have the same size and 
alignment as
 the weak symbol.  Weak symbols are supported for ELF targets, and also
 for a.out targets when using the GNU assembler and linker.
 
-@cindex @code{weakref} attribute
+@atindex @code{weakref}
+@cindex weak symbols
 @item weakref
 @itemx weakref ("@var{target}")
 This attribute applies to function or variable declarations.
@@ -5455,7 +5543,7 @@ performing a link with relocatable output (i.e.@: 
@code{ld -r}) on them.
 A declaration to which @code{weakref} is attached and that is associated
 with a named @code{target} must be @code{static}.
 
-@cindex @code{zero_call_used_regs} function attribute
+@atindex @code{zero_call_used_regs}
 @item zero_call_used_regs ("@var{choice}")
 This attribute applies to functions.
 
@@ -5616,7 +5704,8 @@ AArch64 target.
 
 @table @code
 
-@cindex @code{target} function attribute, AArch64
+@atindex @code{target}, AArch64
+@cindex AArch64 code generation attributes
 @item target (@var{options})
 This attribute applies to functions.
 
@@ -5676,7 +5765,7 @@ and @code{crypto} extensions, and tunes it for 
@code{cortex-a53}.
 These are the permitted options:
 
 @table @samp
-@cindex @code{target("general-regs-only")} function attribute, AArch64
+@atindex @code{target("general-regs-only")}, AArch64
 @item general-regs-only
 Indicates that no floating-point or Advanced SIMD registers should be
 used when generating code for this function.  If the function explicitly
@@ -5684,7 +5773,7 @@ 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}.
 
-@cindex @code{target("fix-cortex-a53-835769")} function attribute, AArch64
+@atindex @code{target("fix-cortex-a53-835769")}, AArch64
 @item fix-cortex-a53-835769
 Indicates that the workaround for the Cortex-A53 erratum 835769 should be
 applied to this function.  To explicitly disable the workaround for this
@@ -5692,13 +5781,13 @@ 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}.
 
-@cindex @code{target("cmodel=")} function attribute, AArch64
+@atindex @code{target("cmodel=")}, AArch64
 @item cmodel=
 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=}.
 
-@cindex @code{target("strict-align")} function attribute, AArch64
+@atindex @code{target("strict-align")}, AArch64
 @item strict-align
 @itemx no-strict-align
 @code{strict-align} indicates that the compiler should not assume that 
unaligned
@@ -5707,7 +5796,7 @@ that aligned memory references are handled by the system, 
the inverse attribute
 @code{no-strict-align} can be specified.  The behavior is same as for the
 command-line option @option{-mstrict-align} and @option{-mno-strict-align}.
 
-@cindex @code{target("omit-leaf-frame-pointer")} function attribute, AArch64
+@atindex @code{target("omit-leaf-frame-pointer")}, AArch64
 @item omit-leaf-frame-pointer
 Indicates that the frame pointer should be omitted for a leaf function call.
 To keep the frame pointer, the inverse attribute
@@ -5715,31 +5804,31 @@ 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}.
 
-@cindex @code{target("tls-dialect=")} function attribute, AArch64
+@atindex @code{target("tls-dialect=")}, AArch64
 @item tls-dialect=
 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=}.
 
-@cindex @code{target("arch=")} function attribute, AArch64
+@atindex @code{target("arch=")}, AArch64
 @item arch=
 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.
 
-@cindex @code{target("tune=")} function attribute, AArch64
+@atindex @code{target("tune=")}, AArch64
 @item tune=
 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.
 
-@cindex @code{target("cpu=")} function attribute, AArch64
+@atindex @code{target("cpu=")}, AArch64
 @item cpu=
 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.
 
-@cindex @code{target("sign-return-address")} function attribute, AArch64
+@atindex @code{target("sign-return-address")}, AArch64
 @item sign-return-address
 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
@@ -5747,20 +5836,20 @@ behavior and permissible arguments are the same as for 
the command-line option
 attribute is deprecated.  The @code{branch-protection} attribute should
 be used instead.
 
-@cindex @code{target("branch-protection")} function attribute, AArch64
+@atindex @code{target("branch-protection")}, AArch64
 @item branch-protection
 Select the function scope on which branch protection will be applied.  The
 behavior and permissible arguments are the same as for the command-line option
 @option{-mbranch-protection=}.  The default value is @code{none}.
 
-@cindex @code{target("outline-atomics")} function attribute, AArch64
+@atindex @code{target("outline-atomics")}, AArch64
 @item outline-atomics
 @itemx no-outline-atomics
 Enable or disable calls to out-of-line helpers to implement atomic operations.
 This corresponds to the behavior of the command-line options
 @option{-moutline-atomics} and @option{-mno-outline-atomics}.
 
-@cindex @code{target("max-vectorization")} function attribute, AArch64
+@atindex @code{target("max-vectorization")}, AArch64
 @item max-vectorization
 @itemx no-max-vectorization
 @code{max-vectorization} tells GCC's vectorizer to treat all vector
@@ -5770,7 +5859,7 @@ this behavior.
 This corresponds to the behavior of the command-line options
 @option{-mmax-vectorization} and @option{-mno-max-vectorization}.
 
-@cindex @code{target("indirect_return")} function attribute, AArch64
+@atindex @code{target("indirect_return")}, AArch64
 @item indirect_return
 The @code{indirect_return} attribute can be applied to a function type
 to indicate that the function may return via an indirect branch instead
@@ -5780,7 +5869,7 @@ threads, such as the POSIX @code{swapcontext} function.  
This attribute
 adds a @code{BTI J} instruction when BTI is enabled e.g. via
 @option{-mbranch-protection}.
 
-@cindex @code{target("preserve_none")} function attribute, AArch64
+@atindex @code{target("preserve_none")}, AArch64
 @item preserve_none
 Use this attribute to change the procedure call standard of the specified
 function to the preserve-none variant.
@@ -5835,7 +5924,7 @@ architectural feature rules specified above.
 These attributes are supported by the AMD GCN back end:
 
 @table @code
-@cindex @code{amdgpu_hsa_kernel} function attribute, AMD GCN
+@atindex @code{amdgpu_hsa_kernel}, AMD GCN
 @item amdgpu_hsa_kernel
 This attribute applies to functions.
 
@@ -5927,7 +6016,7 @@ OpenACC/OpenMP).
 These attributes are supported by the ARC back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, ARC
+@atindex @code{interrupt}, ARC
 @item interrupt
 This attribute applies to functions.
 
@@ -5947,9 +6036,9 @@ Permissible values for this parameter are: 
@w{@code{ilink1}} and
 @w{@code{ilink2}} for ARCv1 architecture, and @w{@code{ilink}} and
 @w{@code{firq}} for ARCv2 architecture.
 
-@cindex @code{long_call} function attribute, ARC
-@cindex @code{medium_call} function attribute, ARC
-@cindex @code{short_call} function attribute, ARC
+@atindex @code{long_call}, ARC
+@atindex @code{medium_call}, ARC
+@atindex @code{short_call}, ARC
 @cindex indirect calls, ARC
 @item long_call
 @itemx medium_call
@@ -5972,7 +6061,7 @@ 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.
 
-@cindex @code{jli_always} function attribute, ARC
+@atindex @code{jli_always}, ARC
 @item jli_always
 This attribute applies to functions.
 
@@ -5981,14 +6070,14 @@ instruction.  The @code{jli} instruction makes use of a 
table stored
 into @code{.jlitab} section, which holds the location of the functions
 which are addressed using this instruction.
 
-@cindex @code{jli_fixed} function attribute, ARC
+@atindex @code{jli_fixed}, ARC
 @item jli_fixed
 This attribute applies to functions.
 
 Identical to @code{jli_always} above, but the location of the function in the
 @code{jli} table is known and given as an attribute parameter.
 
-@cindex @code{secure_call} function attribute, ARC
+@atindex @code{secure_call}, ARC
 @item secure_call
 This attribute applies to functions.
 
@@ -5996,7 +6085,7 @@ It allows you to mark secure-code functions that are
 callable from normal mode.  The location of the secure call function
 into the @code{sjli} table needs to be passed as argument.
 
-@cindex @code{aux} variable attribute, ARC
+@atindex @code{aux}, ARC
 @item aux
 This attribute applies to variables.
 
@@ -6005,7 +6094,7 @@ auxiliary register space from C.  The auxiliary register 
number is
 given via attribute argument.
 
 @item uncached
-@cindex @code{uncached} type attribute, ARC
+@atindex @code{uncached}, ARC
 This attribute applies to types.
 
 Declaring objects with the @code{uncached} type attribute
@@ -6023,7 +6112,7 @@ These attributes are supported for ARM targets:
 
 @table @code
 
-@cindex @code{general-regs-only} function attribute, ARM
+@atindex @code{general-regs-only}, ARM
 @item general-regs-only
 This attribute applies to functions.
 
@@ -6033,7 +6122,7 @@ 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}.
 
-@cindex @code{interrupt} function attribute, ARM
+@atindex @code{interrupt}, ARM
 @item interrupt
 This attribute applies to functions.
 
@@ -6056,15 +6145,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.
 
-@cindex @code{isr} function attribute, ARM
+@atindex @code{isr}, ARM
 @item isr
 This attribute applies to functions.
 
 Use this attribute on ARM to write Interrupt Service Routines. This is an
 alias to the @code{interrupt} attribute above.
 
-@cindex @code{long_call} function attribute, ARM
-@cindex @code{short_call} function attribute, ARM
+@atindex @code{long_call}, ARM
+@atindex @code{short_call}, ARM
 @cindex indirect calls, ARM
 @item long_call
 @itemx short_call
@@ -6081,7 +6170,7 @@ calling sequence.   The @code{short_call} attribute 
always places
 the offset to the function from the call site into the @samp{BL}
 instruction directly.
 
-@cindex @code{pcs} function attribute, ARM
+@atindex @code{pcs}, ARM
 @item pcs
 This attribute applies to functions.
 
@@ -6104,7 +6193,7 @@ double f2d (float) __attribute__((pcs("aapcs")));
 Variadic functions always use the @code{"aapcs"} calling convention and
 the compiler rejects attempts to specify an alternative.
 
-@cindex @code{target} function attribute
+@atindex @code{target}, ARM
 @item target (@var{options})
 This attribute applies to functions.
 
@@ -6114,24 +6203,24 @@ allows specification of target-specific compilation 
options.
 On ARM, the following options are allowed:
 
 @table @samp
-@cindex @code{target("thumb")} function attribute, ARM
+@atindex @code{target("thumb")}, ARM
 @item thumb
 Force code generation in the Thumb (T16/T32) ISA, depending on the
 architecture level.
 
-@cindex @code{target("arm")} function attribute, ARM
+@atindex @code{target("arm")}, ARM
 @item arm
 Force code generation in the ARM (A32) ISA.
 
 Functions from different modes can be inlined in the caller's mode.
 
-@cindex @code{target("fpu=")} function attribute, ARM
+@atindex @code{target("fpu=")}, ARM
 @item fpu=
 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.
 
-@cindex @code{arch=} function attribute, ARM
+@atindex @code{arch=}, ARM
 @item arch=
 Specifies the architecture version and architectural extensions to use
 for this function.  The behavior and permissible arguments are the same as
@@ -6167,7 +6256,7 @@ without modifying an existing @option{-march=} or 
@option{-mcpu} option.
 
 @end table
 
-@cindex @code{notshared} type attribute, ARM
+@atindex @code{notshared}, ARM
 @item notshared
 This attributes applies to class types.
 
@@ -6201,8 +6290,8 @@ most Symbian OS code uses @code{__declspec}.)
 These attributes are supported by the AVR back end:
 
 @table @code
-@cindex @code{signal} function attribute, AVR
-@cindex @code{interrupt} function attribute, AVR
+@atindex @code{signal}, AVR
+@atindex @code{interrupt}, AVR
 @item signal
 @itemx interrupt
 These attributes apply to functions.
@@ -6247,8 +6336,8 @@ ISR (ADC_vect, ISR_NOBLOCK) // Uses the "interrupt" 
attribute.
 When both @code{signal} and @code{interrupt} are specified for the same
 function, then @code{signal} is silently ignored.
 
-@cindex @code{signal(@var{num})} function attribute, AVR
-@cindex @code{interrupt(@var{num})} function attribute, AVR
+@atindex @code{signal(@var{num})}, AVR
+@atindex @code{interrupt(@var{num})}, AVR
 @item signal(@var{num})
 @itemx interrupt(@var{num})
 These attributes apply to functions.
@@ -6293,7 +6382,7 @@ is similar to the @code{ISR_ALIASOF} macro provided by 
AVR-LibC, but
 without the overhead introduced by @code{ISR_ALIASOF}.
 
 
-@cindex @code{noblock} function attribute, AVR
+@atindex @code{noblock}, AVR
 @item noblock
 This attribute applies to functions.
 
@@ -6304,7 +6393,7 @@ and @code{noblock} together has the same effect like 
using the @code{interrupt}
 attribute.  Using the @code{noblock} attribute without @code{signal} has no
 effect.
 
-@cindex @code{no_gccisr} function attribute, AVR
+@atindex @code{no_gccisr}, AVR
 @item no_gccisr
 This attribute applies to functions.
 
@@ -6337,8 +6426,8 @@ expects (parts of) the prologue code as outlined above to 
be present.
 To disable @code{__gcc_isr} generation for the whole compilation unit,
 use option @option{-mno-gas-isr-prologues}, @pxref{AVR Options}.
 
-@cindex @code{OS_main} function attribute, AVR
-@cindex @code{OS_task} function attribute, AVR
+@atindex @code{OS_main}, AVR
+@atindex @code{OS_task}, AVR
 @item OS_main
 @itemx OS_task
 This attribute applies to functions.
@@ -6367,7 +6456,7 @@ or a frame pointer whereas @code{OS_main} and 
@code{OS_task} do this
 as needed.
 @end itemize
 
-@cindex @code{progmem} variable attribute, AVR
+@atindex @code{progmem}, AVR
 @item progmem
 This attribute applies to variables.
 
@@ -6443,7 +6532,7 @@ at all.
 
 @end table
 
-@cindex @code{io} variable attribute, AVR
+@atindex @code{io}, AVR
 @item io
 @itemx io (@var{addr})
 This attribute applies to variables.
@@ -6469,7 +6558,7 @@ Example:
 extern volatile int porta __attribute__((io));
 @end smallexample
 
-@cindex @code{io_low} variable attribute, AVR
+@atindex @code{io_low}, AVR
 @item io_low
 @itemx io_low (@var{addr})
 The @code{io_low} attribute applies to variables.
@@ -6479,7 +6568,7 @@ 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.
 
-@cindex @code{address} variable attribute, AVR
+@atindex @code{address}, AVR
 @item address (@var{addr})
 This attribute applies to variables.
 
@@ -6505,7 +6594,7 @@ will be compiled to
 a_symbol = 1234
 @end smallexample
 
-@cindex @code{absdata} variable attribute, AVR
+@atindex @code{absdata}, AVR
 @item absdata
 This attribute applies to variables.
 
@@ -6545,7 +6634,7 @@ These attributes are supported by the Blackfin back end:
 
 @table @code
 
-@cindex @code{exception_handler} function attribute
+@atindex @code{exception_handler}, Blackfin
 @cindex exception handler functions, Blackfin
 @item exception_handler
 This attribute applies to functions.
@@ -6555,7 +6644,7 @@ is an exception handler.  The compiler generates function 
entry and
 exit sequences suitable for use in an exception handler when this
 attribute is present.
 
-@cindex @code{interrupt_handler} function attribute, Blackfin
+@atindex @code{interrupt_handler}, Blackfin
 @item interrupt_handler
 This attribute applies to functions.
 
@@ -6564,7 +6653,7 @@ 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.
 
-@cindex @code{kspisusp} function attribute, Blackfin
+@atindex @code{kspisusp}, Blackfin
 @cindex User stack pointer in interrupts on the Blackfin
 @item kspisusp
 This attribute applies to functions.
@@ -6573,7 +6662,7 @@ 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.
 
-@cindex @code{l1_text} function attribute, Blackfin
+@atindex @code{l1_text}, Blackfin
 @item l1_text
 This attribute applies to functions.
 
@@ -6582,7 +6671,7 @@ 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.
 
-@cindex @code{l2} attribute, Blackfin
+@atindex @code{l2}, Blackfin
 @item l2
 
 This attribute applies to functions and variables.
@@ -6597,8 +6686,8 @@ Variables with @code{l2} attribute are put into the 
specific section
 named @code{.l2.data}.
 
 @cindex indirect calls, Blackfin
-@cindex @code{longcall} function attribute, Blackfin
-@cindex @code{shortcall} function attribute, Blackfin
+@atindex @code{longcall}, Blackfin
+@atindex @code{shortcall}, Blackfin
 @item longcall
 @itemx shortcall
 This attribute applies to functions.
@@ -6610,7 +6699,7 @@ require a different (more expensive) calling sequence.  
The
 enough for the shorter calling sequence to be used.  These attributes
 override the @option{-mlongcall} switch.
 
-@cindex @code{nesting} function attribute, Blackfin
+@atindex @code{nesting}, Blackfin
 @cindex Allow nesting in an interrupt handler on the Blackfin processor
 @item nesting
 This attribute applies to functions.
@@ -6619,7 +6708,7 @@ 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.
 
-@cindex @code{nmi_handler} function attribute, Blackfin
+@atindex @code{nmi_handler}, Blackfin
 @cindex NMI handler functions on the Blackfin processor
 @item nmi_handler
 This attribute applies to functions.
@@ -6629,7 +6718,7 @@ is an NMI handler.  The compiler generates function entry 
and
 exit sequences suitable for use in an NMI handler when this
 attribute is present.
 
-@cindex @code{saveall} function attribute, Blackfin
+@atindex @code{saveall}, Blackfin
 @cindex save all registers on the Blackfin
 @item saveall
 This attribute applies to functions.
@@ -6638,9 +6727,9 @@ It indicates that
 all registers except the stack pointer should be saved in the prologue
 regardless of whether they are used or not.
 
-@cindex @code{l1_data} variable attribute, Blackfin
-@cindex @code{l1_data_A} variable attribute, Blackfin
-@cindex @code{l1_data_B} variable attribute, Blackfin
+@atindex @code{l1_data}, Blackfin
+@atindex @code{l1_data_A}, Blackfin
+@atindex @code{l1_data_B}, Blackfin
 @item l1_data
 @itemx l1_data_A
 @itemx l1_data_B
@@ -6660,7 +6749,7 @@ attribute are put into the specific section named 
@code{.l1.data.B}.
 These attributes are supported by the BPF back end:
 
 @table @code
-@cindex @code{kernel helper}, function attribute, BPF
+@atindex @code{kernel helper}, BPF
 @item kernel_helper
 This attribute applies to functions.
 
@@ -6673,7 +6762,7 @@ int bpf_probe_read (void *dst, int size, const void 
*unsafe_ptr)
   __attribute__ ((kernel_helper (4)));
 @end smallexample
 
-@cindex @code{preserve_access_index} type attribute, BPF
+@atindex @code{preserve_access_index}, BPF
 @item preserve_access_index
 This attribute applies to types.
 
@@ -6692,8 +6781,8 @@ wrapping every such access with 
@code{__builtin_preserve_access_index}.
 These attributes are supported by the C-SKY back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, C-SKY
-@cindex @code{isr} function attribute, C-SKY
+@atindex @code{interrupt}, C-SKY
+@atindex @code{isr}, C-SKY
 @item interrupt
 @itemx isr
 These attributes apply to functions.
@@ -6715,7 +6804,7 @@ are ignored with a warning otherwise.  @xref{C-SKY 
Options}.
 These attributes are supported by the Epiphany back end:
 
 @table @code
-@cindex @code{disinterrupt} function attribute, Epiphany
+@atindex @code{disinterrupt}, Epiphany
 @item disinterrupt
 This attribute applies to functions.
 
@@ -6723,7 +6812,7 @@ It causes the compiler to emit
 instructions to disable interrupts for the duration of the given
 function.
 
-@cindex @code{forwarder_section} function attribute, Epiphany
+@atindex @code{forwarder_section}, Epiphany
 @item forwarder_section
 This attribute applies to functions.
 
@@ -6733,7 +6822,7 @@ 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.
 
-@cindex @code{interrupt} function attribute, Epiphany
+@atindex @code{interrupt}, Epiphany
 @item interrupt
 This attribute applies to functions.
 
@@ -6776,8 +6865,8 @@ void __attribute__ ((interrupt ("dma0, dma1"),
   external_dma_handler ();
 @end smallexample
 
-@cindex @code{long_call} function attribute, Epiphany
-@cindex @code{short_call} function attribute, Epiphany
+@atindex @code{long_call}, Epiphany
+@atindex @code{short_call}, Epiphany
 @cindex indirect calls, Epiphany
 @item long_call
 @itemx short_call
@@ -6796,7 +6885,7 @@ command-line switch and @code{#pragma long_calls} 
settings.
 These attributes are available for H8/300 targets:
 
 @table @code
-@cindex @code{function_vector} function attribute, H8/300
+@atindex @code{function_vector}, H8/300
 @item function_vector
 This attribute applies to functions.
 
@@ -6807,7 +6896,7 @@ 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.
 
-@cindex @code{interrupt_handler} function attribute, H8/300
+@atindex @code{interrupt_handler}, H8/300
 @item interrupt_handler
 This attribute applies to functions.
 
@@ -6816,7 +6905,7 @@ 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.
 
-@cindex @code{saveall} function attribute, H8/300
+@atindex @code{saveall}, H8/300
 @cindex save all registers on the H8/300, H8/300H, and H8S
 @item saveall
 This attribute applies to functions.
@@ -6825,7 +6914,7 @@ Use it 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.
 
-@cindex @code{monitor} function attribute, H8/300
+@atindex @code{monitor}, H8/300
 @item monitor
 This attribute applies to functions.
 
@@ -6833,7 +6922,7 @@ Use it to indicate a monitor function.  It tells GCC
 to generate entry and exit sequences that disable interrupts during
 execution of the function.
 
-@cindex @code{OS_Task} function attribute, H8/300
+@atindex @code{OS_Task}, H8/300
 @item OS_Task
 This attribute applies to functions.
 
@@ -6841,7 +6930,7 @@ Use it to disable the normal register and stack save and
 restore sequences on function entry and exit.  The function epilogue
 generated by GCC includes only a return instruction.
 
-@cindex @code{eightbit_data} variable attribute, H8/300
+@atindex @code{eightbit_data}, H8/300
 @cindex eight-bit data on the H8/300, H8/300H, and H8S
 @item eightbit_data
 This attribute applies to variable declarations.
@@ -6853,7 +6942,7 @@ The compiler generates more efficient code for certain 
operations
 on data in the eight-bit data area.  Note the eight-bit data area is limited to
 256 bytes of data.
 
-@cindex @code{tiny_data} variable attribute, H8/300
+@atindex @code{tiny_data}, H8/300
 @cindex tiny data section on the H8/300H and H8S
 @item tiny_data
 This attribute applies to variable declarations.
@@ -6871,7 +6960,7 @@ slightly under 32KB of data.
 These attributes are supported on IA-64 targets:
 
 @table @code
-@cindex @code{syscall_linkage} function attribute, IA-64
+@atindex @code{syscall_linkage}, IA-64
 @item syscall_linkage
 This attribute applies to functions.
 
@@ -6881,7 +6970,7 @@ 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.
 
-@cindex @code{version_id} attribute, IA-64
+@atindex @code{version_id}, IA-64
 @item version_id
 This attribute applies to global variables or functions.
 
@@ -6897,7 +6986,7 @@ extern int foo () __attribute__((version_id 
("20040821")));
 @noindent
 Calls to @code{foo} are mapped to calls to @code{foo@{20040821@}}.
 
-@cindex @code{model} variable attribute, IA-64
+@atindex @code{model}, IA-64
 @item model (@var{model-name})
 This attribute applies to variables.
 
@@ -6917,9 +7006,7 @@ The following attributes are supported by the LoongArch 
back end:
 
 @table @code
 
-@cindex @code{target (option,...)} loongarch function attribute target
-@item target (option,...)
-@cindex @code{target} LoongArch function attribute
+@atindex @code{target}, LoongArch
 @item target (@var{options})
 This attribute applies to functions.
 
@@ -6947,7 +7034,7 @@ is valid and compiles function @code{foo} for LA64V1.1 
with @code{lasx}.
 These are the permitted options:
 
 @table @samp
-@cindex @code{target("strict-align")} function attribute, LoongArch
+@atindex @code{target("strict-align")}, LoongArch
 @item strict-align
 @itemx no-strict-align
 @code{strict-align} indicates that the compiler should not assume that 
unaligned
@@ -6956,25 +7043,25 @@ that aligned memory references are handled by the 
system, the inverse attribute
 @code{no-strict-align} can be specified.  The behavior is same as for the
 command-line option @option{-mstrict-align} and @option{-mno-strict-align}.
 
-@cindex @code{target("cmodel=")} function attribute, LoongArch
+@atindex @code{target("cmodel=")}, LoongArch
 @item cmodel=
 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=}.
 
-@cindex @code{target("arch=")} function attribute, LoongArch
+@atindex @code{target("arch=")}, LoongArch
 @item arch=
 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.
 
-@cindex @code{target("tune=")} function attribute, LoongArch
+@atindex @code{target("tune=")}, LoongArch
 @item tune=
 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.
 
-@cindex @code{target("lsx")} function attribute, LoongArch
+@atindex @code{target("lsx")}, LoongArch
 @item lsx
 @itemx no-lsx
 @code{lsx} indicates that vector instruction generation is allowed
@@ -6982,7 +7069,7 @@ command-line option.
 The behavior is same as for the command-line option
 @option{-mlsx} and @option{-mno-lsx}.
 
-@cindex @code{target("lasx")} function attribute, LoongArch
+@atindex @code{target("lasx")}, LoongArch
 @item lasx
 @itemx no-lasx
 @code{lasx} indicates that lasx instruction generation is allowed (not allowed)
@@ -7019,7 +7106,7 @@ But the following method cannot perform 128-bit 
vectorization.
 $ gcc test.c -o test.s -O2 -mlasx -mno-lasx
 @end smallexample
 
-@cindex @code{target("recipe")} function attribute, LoongArch
+@atindex @code{target("recipe")}, LoongArch
 @item recipe
 @itemx no-recipe
 @code{recipe} indicates that frecipe.@{s/d@} and frsqrt.@{s/d@}
@@ -7027,7 +7114,7 @@ instruction generation is allowed (not allowed) when 
compiling the function.
 The behavior is same as for the command-line options
 @option{-mrecipe} and @option{-mno-recipe}.
 
-@cindex @code{target("div32")} function attribute, LoongArch
+@atindex @code{target("div32")}, LoongArch
 @item div32
 @itemx no-div32
 @code{div32} determines whether div.w[u] and mod.w[u] instructions on
@@ -7036,7 +7123,7 @@ are evaluated based only on the lower 32 bits of the 
input registers.
 The behavior is same as for the command-line options
 @option{-mdiv32} and @option{-mno-div32}.
 
-@cindex @code{target("lam-bh")} function attribute, LoongArch
+@atindex @code{target("lam-bh")}, LoongArch
 @item lam-bh
 @itemx no-lam-bh
 @code{lam-bh} indicates that am@{swap/add@}[_db].@{b/h@} instruction generation
@@ -7044,7 +7131,7 @@ is allowed (not allowed) when compiling the function.
 The behavior is same as for the command-line options
 @option{-mlam-bh} and @option{-mno-lam-bh}.
 
-@cindex @code{target("lamcas")} function attribute, LoongArch
+@atindex @code{target("lamcas")}, LoongArch
 @item lamcas
 @itemx no-lamcas
 @code{lamcas} indicates that amcas[_db].@{b/h/w/d@} instruction generation
@@ -7052,7 +7139,7 @@ is allowed (not allowed) when compiling the function.
 The behavior is same as for the command-line options
 @option{-mlamcas} and @option{-mno-lamcas}.
 
-@cindex @code{target("scq")} function attribute, LoongArch
+@atindex @code{target("scq")}, LoongArch
 @item scq
 @itemx no-scq
 @code{scq} indicates that sc.q instruction generation is allowed (not allowed)
@@ -7060,7 +7147,7 @@ when compiling the function.
 The behavior is same as for the command-line options
 @option{-mscq} and @option{-mno-scq}.
 
-@cindex @code{target("ld-seq-sa")} function attribute, LoongArch
+@atindex @code{target("ld-seq-sa")}, LoongArch
 @item ld-seq-sa
 @itemx no-ld-seq-sa
 @code{ld-seq-sa} indicates that same-address load-load barriers (dbar 0x700)
@@ -7084,7 +7171,7 @@ attribute,
 it is not inlined if the code model of the caller function is different
 from the code model of the callee function.
 
-@cindex @code{target_clones (string,...)} LoongArch function attribute
+@atindex @code{target_clones}, LoongArch
 @item target_clones (@var{options})
 This attribute applies to functions.
 
@@ -7177,7 +7264,7 @@ than that of @samp{lsx;priority=1}.
 Note that the option values on the GCC command line are not considered when
 calculating the priority.
 
-@cindex @code{target_version} LoongArch function attribute
+@atindex @code{target_version}, LoongArch
 @item target_version (@var{option})
 This attribute applies to functions.
 
@@ -7228,7 +7315,7 @@ foo (int a)
 @}
 @end smallexample
 
-@cindex @code{model} variable attribute, LoongArch
+@atindex @code{model}, LoongArch
 @item model("@var{name}")
 This attribute applies to variables.
 
@@ -7246,7 +7333,7 @@ specially.  Currently the only supported values of 
@var{name} are
 These attributes are supported by the M32C back end:
 
 @table @code
-@cindex @code{bank_switch} function attribute, M32C
+@atindex @code{bank_switch}, M32C
 @item bank_switch
 This attribute applies to functions.
 
@@ -7254,7 +7341,7 @@ 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.
 
-@cindex @code{fast_interrupt} function attribute, M32C
+@atindex @code{fast_interrupt}, M32C
 @item fast_interrupt
 This attribute applies to functions.
 
@@ -7263,7 +7350,7 @@ 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}.
 
-@cindex @code{function_vector} function attribute, M16C/M32C
+@atindex @code{function_vector}, M16C/M32C
 @item function_vector
 This attribute applies to functions.
 
@@ -7301,7 +7388,7 @@ then be sure to write this declaration in both files.
 
 This attribute is ignored for R8C target.
 
-@cindex @code{interrupt} function attribute, M32C
+@atindex @code{interrupt}, M32C
 @item interrupt
 This attribute applies to functions.
 
@@ -7317,7 +7404,7 @@ when this attribute is present.
 These attributes are supported by the M32R/D back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, M32R/D
+@atindex @code{interrupt}, M32R/D
 @item interrupt
 This attribute applies to functions.
 
@@ -7326,7 +7413,7 @@ 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.
 
-@cindex @code{model} attribute, M32R/D
+@atindex @code{model}, M32R/D
 @cindex function addressability on the M32R/D
 @cindex variable addressability on the M32R/D
 @item model (@var{model-name})
@@ -7357,8 +7444,8 @@ generates the much slower @code{seth/add3/jl} instruction 
sequence).
 These attributes are supported by the m68k back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, m68k
-@cindex @code{interrupt_handler} function attribute, m68k
+@atindex @code{interrupt}, m68k
+@atindex @code{interrupt_handler}, m68k
 @item interrupt
 @itemx interrupt_handler
 These attributes apply to functions.
@@ -7368,7 +7455,7 @@ 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.
 
-@cindex @code{interrupt_thread} function attribute, fido
+@atindex @code{interrupt_thread}, fido
 @item interrupt_thread
 This attribute applies to functions.
 
@@ -7385,7 +7472,7 @@ instruction.  This attribute is available only on fido.
 These attributes are supported on MicroBlaze targets:
 
 @table @code
-@cindex @code{save_volatiles} function attribute, MicroBlaze
+@atindex @code{save_volatiles}, MicroBlaze
 @item save_volatiles
 This attribute applies to functions.
 
@@ -7395,7 +7482,7 @@ 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.
 
-@cindex @code{break_handler} function attribute, MicroBlaze
+@atindex @code{break_handler}, MicroBlaze
 @cindex break handler functions
 @item break_handler
 This attribute applies to functions.
@@ -7410,8 +7497,8 @@ the @code{rtbd} instead of @code{rtsd}.
 void f () __attribute__ ((break_handler));
 @end smallexample
 
-@cindex @code{interrupt_handler} function attribute, MicroBlaze
-@cindex @code{fast_interrupt} function attribute, MicroBlaze
+@atindex @code{interrupt_handler}, MicroBlaze
+@atindex @code{fast_interrupt}, MicroBlaze
 @item interrupt_handler
 @itemx fast_interrupt
 These attributes apply to functions.
@@ -7427,12 +7514,18 @@ using @code{rtid} instead of @code{rtsd}.
 @node Microsoft Windows Attributes
 @subsubsection Microsoft Windows Attributes
 
-The following attributes are available on Microsoft Windows and Symbian OS
-targets.
+@cindex @code{__declspec}
+On Microsoft Windows and Symbian OS targets, GCC supports the
+@code{__declspec} keyword in addition to @code{__attribute__} and
+the standard C or C++ attribute syntax, for compatibility with other
+compilers.  The @code{__declspec} syntax
+supported by GCC is limited and should only be used as explicitly
+documented in this section.
+
+The following attributes are available on Microsoft Windows and Symbian OS:
 
 @table @code
-@cindex @code{dllexport} attribute
-@cindex @code{__declspec(dllexport)}
+@atindex @code{dllexport}, Microsoft Windows
 @item dllexport
 This attribute can be applied to functions, variables, and C++ classes.
 
@@ -7469,8 +7562,7 @@ 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.
 
-@cindex @code{dllimport} attribute
-@cindex @code{__declspec(dllimport)}
+@atindex @code{dllimport}, Microsoft Windows
 @item dllimport
 This attribute applies to functions, variables, and C++ classes.
 
@@ -7525,7 +7617,7 @@ 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.
 
-@cindex @code{selectany} variable attribute
+@atindex @code{selectany}, Microsoft Windows
 @item selectany
 This attribute applies to variables.
 
@@ -7548,7 +7640,7 @@ targets.  You can use @code{__declspec (selectany)} as a 
synonym for
 @code{__attribute__ ((selectany))} for compatibility with other
 compilers.
 
-@cindex @code{shared} variable attribute
+@atindex @code{shared}, Microsoft Windows
 @item shared
 This attribute applies to variables.
 
@@ -7584,7 +7676,7 @@ The @code{shared} attribute is only available on 
Microsoft Windows@.
 These attributes are supported by the MIPS back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, MIPS
+@atindex @code{interrupt}, MIPS
 @item interrupt
 This attribute applies to functions.
 
@@ -7604,14 +7696,14 @@ all interrupts from sw0 up to and including the 
specified interrupt vector.
 You can use the following attributes to modify the behavior
 of an interrupt handler:
 @table @code
-@cindex @code{use_shadow_register_set} function attribute, MIPS
+@atindex @code{use_shadow_register_set}, MIPS
 @item use_shadow_register_set
 Assume that the handler uses a shadow register set, instead of
 the main general-purpose registers.  An optional argument @code{intstack} is
 supported to indicate that the shadow register set contains a valid stack
 pointer.
 
-@cindex @code{keep_interrupts_masked} function attribute, MIPS
+@atindex @code{keep_interrupts_masked}, MIPS
 @item keep_interrupts_masked
 This attribute applies to functions.
 
@@ -7619,7 +7711,7 @@ It tells GCC to keep interrupts masked for the whole 
function.
 Without this attribute,
 GCC tries to reenable interrupts for as much of the function as it can.
 
-@cindex @code{use_debug_exception_return} function attribute, MIPS
+@atindex @code{use_debug_exception_return}, MIPS
 @item use_debug_exception_return
 This attribute applies to functions.
 
@@ -7648,10 +7740,10 @@ void __attribute__ ((interrupt("vector=hw3"))) v9 ();
 @end smallexample
 
 @cindex indirect calls, MIPS
-@cindex @code{long_call} function attribute, MIPS
-@cindex @code{short_call} function attribute, MIPS
-@cindex @code{near} function attribute, MIPS
-@cindex @code{far} function attribute, MIPS
+@atindex @code{long_call}, MIPS
+@atindex @code{short_call}, MIPS
+@atindex @code{near}, MIPS
+@atindex @code{far}, MIPS
 @item long_call
 @itemx short_call
 @itemx near
@@ -7668,8 +7760,8 @@ attributes are synonyms, and have the opposite
 effect; they specify that non-PIC calls should be made using the more
 efficient @code{jal} instruction.
 
-@cindex @code{mips16} function attribute, MIPS
-@cindex @code{nomips16} function attribute, MIPS
+@atindex @code{mips16}, MIPS
+@atindex @code{nomips16}, MIPS
 @item mips16
 @itemx nomips16
 
@@ -7689,8 +7781,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}).
 
-@cindex @code{micromips} function attribute
-@cindex @code{nomicromips} function attribute
+@atindex @code{micromips}, MIPS
+@atindex @code{nomicromips}, MIPS
 @item micromips, MIPS
 @itemx nomicromips, MIPS
 This attribute applies to functions.
@@ -7710,7 +7802,7 @@ 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}).
 
-@cindex @code{nocompression} function attribute, MIPS
+@atindex @code{nocompression}, MIPS
 @item nocompression
 This attribute applies to functions.
 
@@ -7719,7 +7811,7 @@ 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}).
 
-@cindex @code{use_hazard_barrier_return} function attribute, MIPS
+@atindex @code{use_hazard_barrier_return}, MIPS
 @item use_hazard_barrier_return
 This attribute applies to functions.
 
@@ -7728,7 +7820,7 @@ return that clears all execution and instruction hazards 
while returning,
 instead of generating a normal return instruction.
 
 @item code_readable
-@cindex @code{code_readable} function attribute, MIPS
+@atindex @code{code_readable}, MIPS
 This attribute applies to functions.
 
 For MIPS targets that support PC-relative addressing modes, this attribute
@@ -7753,7 +7845,7 @@ If there is no argument supplied, the default of 
@code{"yes"} applies.
 These attributes are supported by the MSP430 back end:
 
 @table @code
-@cindex @code{critical} function attribute, MSP430
+@atindex @code{critical}, MSP430
 @item critical
 This attribute applies to functions.
 
@@ -7766,7 +7858,7 @@ The MSP430 hardware ensures that interrupts are disabled 
on entry to
 on exit. The @code{critical} attribute is therefore redundant on
 @code{interrupt} functions.
 
-@cindex @code{interrupt} function attribute, MSP430
+@atindex @code{interrupt}, MSP430
 @item interrupt
 This attribute applies to functions.
 
@@ -7784,7 +7876,7 @@ 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.
 
-@cindex @code{reentrant} function attribute, MSP430
+@atindex @code{reentrant}, MSP430
 @item reentrant
 This attribute applies to functions.
 
@@ -7793,7 +7885,7 @@ upon exit.  Reentrant functions cannot also have the 
@code{naked}
 or @code{critical} attributes.  They can have the @code{interrupt}
 attribute.
 
-@cindex @code{wakeup} function attribute, MSP430
+@atindex @code{wakeup}, MSP430
 @item wakeup
 This attribute only applies to interrupt functions.  It is silently
 ignored if applied to a non-interrupt function.
@@ -7802,9 +7894,9 @@ A wakeup interrupt
 function rouses the processor from any low-power state that it
 might be in when the function exits.
 
-@cindex @code{lower} attribute, MSP430
-@cindex @code{upper} attribute, MSP430
-@cindex @code{either} attribute, MSP430
+@atindex @code{lower}, MSP430
+@atindex @code{upper}, MSP430
+@atindex @code{either}, MSP430
 @item lower
 @itemx upper
 @itemx either
@@ -7857,7 +7949,7 @@ is used, and the @code{.lower} prefix is not added.
 These attributes are supported by the NDS32 back end:
 
 @table @code
-@cindex @code{exception} function attribute
+@atindex @code{exception}, NDS32
 @cindex exception handler functions, NDS32
 @item exception
 This attribute applies to functions.
@@ -7866,7 +7958,7 @@ 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.
 
-@cindex @code{interrupt} function attribute, NDS32
+@atindex @code{interrupt}, NDS32
 @item interrupt
 This attribute applies to functions.
 
@@ -7875,28 +7967,28 @@ is an interrupt handler.  The compiler generates 
corresponding sections
 for use in an interrupt handler.  You can use the following attributes
 to modify the behavior:
 @table @code
-@cindex @code{nested} function attribute, NDS32
+@atindex @code{nested}, NDS32
 @item nested
 This interrupt service routine is interruptible.
-@cindex @code{not_nested} function attribute, NDS32
+@atindex @code{not_nested}, NDS32
 @item not_nested
 This interrupt service routine is not interruptible.
-@cindex @code{nested_ready} function attribute, NDS32
+@atindex @code{nested_ready}, NDS32
 @item nested_ready
 This interrupt service routine is interruptible after @code{PSW.GIE}
 (global interrupt enable) is set.  This allows interrupt service routine to
 finish some short critical code before enabling interrupts.
-@cindex @code{save_all} function attribute, NDS32
+@atindex @code{save_all}, NDS32
 @item save_all
 The system will help save all registers into stack before entering
 interrupt handler.
-@cindex @code{partial_save} function attribute, NDS32
+@atindex @code{partial_save}, NDS32
 @item partial_save
 The system will help save caller registers into stack before entering
 interrupt handler.
 @end table
 
-@cindex @code{reset} function attribute, NDS32
+@atindex @code{reset}, NDS32
 @cindex reset handler functions
 @item reset
 This attribute applies to functions.
@@ -7906,10 +7998,10 @@ is a reset handler.  The compiler will generate 
corresponding sections
 for use in a reset handler.  You can use the following attributes
 to provide extra exception handling:
 @table @code
-@cindex @code{nmi} function attribute, NDS32
+@atindex @code{nmi}, NDS32
 @item nmi
 Provide a user-defined function to handle NMI exception.
-@cindex @code{warm} function attribute, NDS32
+@atindex @code{warm}, NDS32
 @item warm
 Provide a user-defined function to handle warm reset exception.
 @end table
@@ -7921,7 +8013,7 @@ Provide a user-defined function to handle warm reset 
exception.
 These attributes are supported by the Nvidia PTX back end:
 
 @table @code
-@cindex @code{kernel} function attribute, Nvidia PTX
+@atindex @code{kernel}, Nvidia PTX
 @item kernel
 This attribute applies to functions.
 
@@ -7932,7 +8024,7 @@ By default functions are only callable only from other 
PTX functions.
 
 Kernel functions must have @code{void} return type.
 
-@cindex @code{shared} variable attribute, Nvidia PTX
+@atindex @code{shared}, Nvidia PTX
 @item shared
 This attribute applies to variables.
 
@@ -7949,8 +8041,8 @@ These attributes are supported by the PowerPC back end:
 
 @table @code
 @cindex indirect calls, PowerPC
-@cindex @code{longcall} function attribute, PowerPC
-@cindex @code{shortcall} function attribute, PowerPC
+@atindex @code{longcall}, PowerPC
+@atindex @code{shortcall}, PowerPC
 @item longcall
 @itemx shortcall
 These attributes apply to functions.
@@ -7966,7 +8058,7 @@ the @code{#pragma longcall} setting.
 @xref{RS/6000 and PowerPC Options}, for more information on whether long
 calls are necessary.
 
-@cindex @code{target} function attribute
+@atindex @code{target}, PowerPC
 @item target (@var{options})
 This attribute applies to functions.
 
@@ -7976,53 +8068,53 @@ allows specification of target-specific compilation 
options.
 On the PowerPC, the following options are allowed:
 
 @table @samp
-@cindex @code{target("altivec")} function attribute, PowerPC
+@atindex @code{target("altivec")}, PowerPC
 @item altivec
 @itemx no-altivec
 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.
 
-@cindex @code{target("cmpb")} function attribute, PowerPC
+@atindex @code{target("cmpb")}, PowerPC
 @item cmpb
 @itemx no-cmpb
 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.
 
-@cindex @code{target("dlmzb")} function attribute, PowerPC
+@atindex @code{target("dlmzb")}, PowerPC
 @item dlmzb
 @itemx no-dlmzb
 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.
 
-@cindex @code{target("fprnd")} function attribute, PowerPC
+@atindex @code{target("fprnd")}, PowerPC
 @item fprnd
 @itemx no-fprnd
 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.
 
-@cindex @code{target("hard-dfp")} function attribute, PowerPC
+@atindex @code{target("hard-dfp")}, PowerPC
 @item hard-dfp
 @itemx no-hard-dfp
 Generate code that uses (does not use) the decimal floating-point
 instructions implemented on some POWER processors.
 
-@cindex @code{target("isel")} function attribute, PowerPC
+@atindex @code{target("isel")}, PowerPC
 @item isel
 @itemx no-isel
 Generate code that uses (does not use) ISEL instruction.
 
-@cindex @code{target("mfcrf")} function attribute, PowerPC
+@atindex @code{target("mfcrf")}, PowerPC
 @item mfcrf
 @itemx no-mfcrf
 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.
 
-@cindex @code{target("mulhw")} function attribute, PowerPC
+@atindex @code{target("mulhw")}, PowerPC
 @item mulhw
 @itemx no-mulhw
 Generate code that uses (does not use) the half-word multiply and
@@ -8030,20 +8122,20 @@ multiply-accumulate instructions on the IBM 405, 440, 
464 and 476 processors.
 These instructions are generated by default when targeting those
 processors.
 
-@cindex @code{target("multiple")} function attribute, PowerPC
+@atindex @code{target("multiple")}, PowerPC
 @item multiple
 @itemx no-multiple
 Generate code that uses (does not use) the load multiple word
 instructions and the store multiple word instructions.
 
-@cindex @code{target("update")} function attribute, PowerPC
+@atindex @code{target("update")}, PowerPC
 @item update
 @itemx no-update
 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.
 
-@cindex @code{target("popcntb")} function attribute, PowerPC
+@atindex @code{target("popcntb")}, PowerPC
 @item popcntb
 @itemx no-popcntb
 Generate code that uses (does not use) the popcount and double-precision
@@ -8051,42 +8143,42 @@ FP reciprocal estimate instruction implemented on the 
POWER5
 processor and other processors that support the PowerPC V2.02
 architecture.
 
-@cindex @code{target("popcntd")} function attribute, PowerPC
+@atindex @code{target("popcntd")}, PowerPC
 @item popcntd
 @itemx no-popcntd
 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.
 
-@cindex @code{target("powerpc-gfxopt")} function attribute, PowerPC
+@atindex @code{target("powerpc-gfxopt")}, PowerPC
 @item powerpc-gfxopt
 @itemx no-powerpc-gfxopt
 Generate code that uses (does not use) the optional PowerPC
 architecture instructions in the Graphics group, including
 floating-point select.
 
-@cindex @code{target("powerpc-gpopt")} function attribute, PowerPC
+@atindex @code{target("powerpc-gpopt")}, PowerPC
 @item powerpc-gpopt
 @itemx no-powerpc-gpopt
 Generate code that uses (does not use) the optional PowerPC
 architecture instructions in the General Purpose group, including
 floating-point square root.
 
-@cindex @code{target("recip-precision")} function attribute, PowerPC
+@atindex @code{target("recip-precision")}, PowerPC
 @item recip-precision
 @itemx no-recip-precision
 Assume (do not assume) that the reciprocal estimate instructions
 provide higher-precision estimates than is mandated by the PowerPC
 ABI.
 
-@cindex @code{target("string")} function attribute, PowerPC
+@atindex @code{target("string")}, PowerPC
 @item string
 @itemx no-string
 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.
 
-@cindex @code{target("vsx")} function attribute, PowerPC
+@atindex @code{target("vsx")}, PowerPC
 @item vsx
 @itemx no-vsx
 Generate code that uses (does not use) vector/scalar (VSX)
@@ -8095,7 +8187,7 @@ 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.
 
-@cindex @code{target("friz")} function attribute, PowerPC
+@atindex @code{target("friz")}, PowerPC
 @item friz
 @itemx no-friz
 Generate (do not generate) the @code{friz} instruction when the
@@ -8104,32 +8196,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.
 
-@cindex @code{target("avoid-indexed-addresses")} function attribute, PowerPC
+@atindex @code{target("avoid-indexed-addresses")}, PowerPC
 @item avoid-indexed-addresses
 @itemx no-avoid-indexed-addresses
 Generate code that tries to avoid (not avoid) the use of indexed load
 or store instructions.
 
-@cindex @code{target("paired")} function attribute, PowerPC
+@atindex @code{target("paired")}, PowerPC
 @item paired
 @itemx no-paired
 Generate code that uses (does not use) the generation of PAIRED simd
 instructions.
 
-@cindex @code{target("longcall")} function attribute, PowerPC
+@atindex @code{target("longcall")}, PowerPC
 @item longcall
 @itemx no-longcall
 Generate code that assumes (does not assume) that all calls are far
 away so that a longer more expensive calling sequence is required.
 
-@cindex @code{target("cpu=@var{CPU}")} function attribute, PowerPC
+@atindex @code{target("cpu=@var{CPU}")}, PowerPC
 @item cpu=@var{CPU}
 Specify the architecture to generate code for when compiling the
 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.
 
-@cindex @code{target("tune=@var{TUNE}")} function attribute, PowerPC
+@atindex @code{target("tune=@var{TUNE}")}, PowerPC
 @item tune=@var{TUNE}
 Specify the architecture to tune for when compiling the function.  If
 you do not specify the @code{target("tune=@var{TUNE}")} attribute and
@@ -8142,8 +8234,8 @@ On the PowerPC, the inliner does not inline a
 function that has different target options than the caller, unless the
 callee has a subset of the target options of the caller.
 
-@cindex @code{ms_struct} attribute, PowerPC
-@cindex @code{gcc_struct} attribute, PowerPC
+@atindex @code{ms_struct}, PowerPC
+@atindex @code{gcc_struct}, PowerPC
 @item ms_struct
 @itemx gcc_struct
 These attributes can be applied to variables and struct declarations.
@@ -8151,7 +8243,7 @@ These attributes can be applied to variables and struct 
declarations.
 For full documentation of the struct attributes please see the
 documentation in @ref{x86 Attributes}.
 
-@cindex @code{altivec} attribute, PowerPC
+@atindex @code{altivec}, PowerPC
 @item altivec
 The @code{altivec} attribute applies to variables and types.
 
@@ -8177,7 +8269,7 @@ These attributes mainly are intended to support the 
@code{__vector},
 These attributes are supported by the RISC-V back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, RISC-V
+@atindex @code{interrupt}, RISC-V
 @item interrupt
 This attribute applies to functions.
 
@@ -8196,7 +8288,7 @@ Permissible values for this parameter are 
@code{supervisor},
 @code{machine}, and @code{rnmi}.  If there is no parameter, then it
 defaults to @code{machine}.
 
-@cindex @code{riscv_vector_cc} function attribute, RISC-V
+@atindex @code{riscv_vector_cc}, RISC-V
 @item riscv_vector_cc
 This attribute applies to functions.
 
@@ -8208,7 +8300,7 @@ void foo() __attribute__((riscv_vector_cc));
 [[riscv::vector_cc]] void foo(); // For C++11 and C23
 @end smallexample
 
-@cindex @code{target} function attribute
+@atindex @code{target}, RISC-V
 @item target (@var{options})
 This attribute applies to functions.
 
@@ -8221,7 +8313,7 @@ similar command-line options (@pxref{RISC-V Options}), 
but on a
 per-function basis.
 
 @table @samp
-@cindex @code{target("arch=")} function attribute, RISC-V
+@atindex @code{target("arch=")}, RISC-V
 @item arch=
 Specifies the architecture version and architectural extensions to use
 for this function.  The behavior and permissible arguments are the same as
@@ -8231,19 +8323,19 @@ like @code{arch=+zba} means enable @code{zba} extension.
 Multiple extension can be enabled by separating them with a comma.  For 
example:
 @code{arch=+zba,+zbb}.
 
-@cindex @code{target("tune=")} function attribute, RISC-V
+@atindex @code{target("tune=")}, RISC-V
 @item tune=
 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.
 
-@cindex @code{target("cpu=")} function attribute, RISC-V
+@atindex @code{target("cpu=")}, RISC-V
 @item cpu=
 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.
 
-@cindex @code{target("max-vectorization")} function attribute, RISC-V
+@atindex @code{target("max-vectorization")}, RISC-V
 @item max-vectorization
 @itemx no-max-vectorization
 @code{max-vectorization} tells GCC's vectorizer to treat all vector
@@ -8291,8 +8383,8 @@ and @code{zbb} extensions and tunes it for @code{rocket}.
 These attributes are supported by the RL78 back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, RL78
-@cindex @code{brk_interrupt} function attribute, RL78
+@atindex @code{interrupt}, RL78
+@atindex @code{brk_interrupt}, RL78
 @item interrupt
 @itemx brk_interrupt
 These attributes apply to functions.
@@ -8306,7 +8398,7 @@ 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}).
 
-@cindex @code{saddr} variable attribute, RL78
+@atindex @code{saddr}, RL78
 @item saddr
 This attribute applies to variables.
 
@@ -8322,7 +8414,7 @@ which can be accessed more efficiently than the default 
memory region.
 These attributes are supported by the RX back end:
 
 @table @code
-@cindex @code{fast_interrupt} function attribute, RX
+@atindex @code{fast_interrupt}, RX
 @item fast_interrupt
 This attribute applies to functions.
 
@@ -8331,7 +8423,7 @@ 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}.
 
-@cindex @code{interrupt} function attribute, RX
+@atindex @code{interrupt}, RX
 @item interrupt
 This attribute applies to functions.
 
@@ -8362,7 +8454,7 @@ void __attribute__ ((interrupt 
(RXD1_VECT,RXD2_VECT,"dct","$default")))
        txd1_handler ();
 @end smallexample
 
-@cindex @code{vector} function attribute, RX
+@atindex @code{vector}, RX
 @item vector
 This attribute applies to functions.
 
@@ -8378,7 +8470,7 @@ function (i.e.@: it retains the normal C function calling 
ABI).  See the
 These attributes are supported on the S/390:
 
 @table @code
-@cindex @code{hotpatch} function attribute, S/390
+@atindex @code{hotpatch}, S/390
 @item hotpatch 
(@var{halfwords-before-function-label},@var{halfwords-after-function-label})
 This attribute applies to functions.
 
@@ -8393,7 +8485,7 @@ both arguments the maximum allowed value is 1000000.
 
 If both arguments are zero, hotpatching is disabled.
 
-@cindex @code{target} function attribute
+@atindex @code{target}, S/390
 @item target (@var{options})
 This attribute applies to functions.
 
@@ -8447,7 +8539,7 @@ does not undefine the @code{__VEC__} macro.
 These attributes are supported on the SH family of processors:
 
 @table @code
-@cindex @code{function_vector} function attribute, SH
+@atindex @code{function_vector}, SH
 @cindex calling functions through the function vector on SH2A
 @item function_vector
 This attribute applies to functions.
@@ -8467,7 +8559,7 @@ 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.
 
-@cindex @code{interrupt_handler} function attribute, SH
+@atindex @code{interrupt_handler}, SH
 @item interrupt_handler
 This attribute applies to functions.
 
@@ -8475,7 +8567,7 @@ It indicates 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.
 
-@cindex @code{nosave_low_regs} function attribute, SH
+@atindex @code{nosave_low_regs}, SH
 @item nosave_low_regs
 This attribute applies to functions.
 
@@ -8484,14 +8576,14 @@ 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.
 
-@cindex @code{renesas} function attribute, SH
+@atindex @code{renesas}, SH
 @item renesas
 This attribute applies to functions.
 
 On SH targets this attribute specifies that the function or struct follows the
 Renesas ABI.
 
-@cindex @code{resbank} function attribute, SH
+@atindex @code{resbank}, SH
 @item resbank
 This attribute applies to functions.
 
@@ -8506,7 +8598,7 @@ 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.
 
-@cindex @code{sp_switch} function attribute, SH
+@atindex @code{sp_switch}, SH
 @item sp_switch
 This attribute applies to functions.
 
@@ -8521,7 +8613,7 @@ void f () __attribute__ ((interrupt_handler,
                           sp_switch ("alt_stack")));
 @end smallexample
 
-@cindex @code{trap_exit} function attribute, SH
+@atindex @code{trap_exit}, SH
 @item trap_exit
 This attribute applies to functions.
 
@@ -8529,7 +8621,7 @@ 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.
 
-@cindex @code{trapa_handler} function attribute, SH
+@atindex @code{trapa_handler}, SH
 @item trapa_handler
 This attribute applies to functions.
 
@@ -8549,8 +8641,8 @@ but it does not save and restore all registers.
 The V850 back end supports these attributes:
 
 @table @code
-@cindex @code{interrupt} function attribute, V850
-@cindex @code{interrupt_handler} function attribute, V850
+@atindex @code{interrupt}, V850
+@atindex @code{interrupt_handler}, V850
 @item interrupt
 @itemx interrupt_handler
 This attribute applies to functions.
@@ -8560,21 +8652,21 @@ 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.
 
-@cindex @code{sda} variable attribute, V850
+@atindex @code{sda}, V850
 @item sda
 This attribute applies to variables.
 
 Use it to explicitly place a variable in the small data area,
 which can hold up to 64 kilobytes.
 
-@cindex @code{tda} variable attribute, V850
+@atindex @code{tda}, V850
 @item tda
 This attribute applies to variables.
 
 Use it to explicitly place a variable in the tiny data area,
 which can hold up to 256 bytes in total.
 
-@cindex @code{zda} variable attribute, V850
+@atindex @code{zda}, V850
 @item zda
 This attribute applies to variables.
 
@@ -8588,7 +8680,7 @@ of memory.
 These attributes are supported by the Visium back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, Visium
+@atindex @code{interrupt}, Visium
 @item interrupt
 This attribute applies to functions.
 
@@ -8604,7 +8696,7 @@ when this attribute is present.
 These attributes are supported by the x86 back end:
 
 @table @code
-@cindex @code{cdecl} function attribute, x86-32
+@atindex @code{cdecl}, x86-32
 @cindex functions that pop the argument stack on x86-32
 @opindex mrtd
 @item cdecl
@@ -8615,7 +8707,7 @@ 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.
 
-@cindex @code{fastcall} function attribute, x86-32
+@atindex @code{fastcall}, x86-32
 @cindex functions that pop the argument stack on x86-32
 @item fastcall
 This attribute applies to functions.
@@ -8627,7 +8719,7 @@ 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.
 
-@cindex @code{thiscall} function attribute, x86-32
+@atindex @code{thiscall}, x86-32
 @cindex functions that pop the argument stack on x86-32
 @item thiscall
 This attribute applies to functions.
@@ -8642,8 +8734,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.
 
-@cindex @code{ms_abi} function attribute, x86
-@cindex @code{sysv_abi} function attribute, x86
+@atindex @code{ms_abi}, x86
+@atindex @code{sysv_abi}, x86
 @item ms_abi
 @itemx sysv_abi
 These attributes apply to functions.
@@ -8659,7 +8751,7 @@ is the System V ELF ABI.
 Note, the @code{ms_abi} attribute for Microsoft Windows 64-bit targets 
currently
 requires the @option{-maccumulate-outgoing-args} option.
 
-@cindex @code{callee_pop_aggregate_return} function attribute, x86
+@atindex @code{callee_pop_aggregate_return}, x86
 @item callee_pop_aggregate_return (@var{number})
 This attribute applies to functions.
 
@@ -8674,7 +8766,7 @@ stack for hidden pointer.  However, on x86-32 Microsoft 
Windows targets,
 the compiler assumes that the
 caller pops the stack for hidden pointer.
 
-@cindex @code{ms_hook_prologue} function attribute, x86
+@atindex @code{ms_hook_prologue}, x86
 @item ms_hook_prologue
 This attribute applies to functions.
 
@@ -8683,7 +8775,7 @@ 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.
 
-@cindex @code{regparm} function attribute, x86
+@atindex @code{regparm}, x86
 @cindex functions that are passed arguments in registers on x86-32
 @item regparm (@var{number})
 This attribute applies to functions.
@@ -8705,7 +8797,7 @@ 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.)
 
-@cindex @code{sseregparm} function attribute, x86
+@atindex @code{sseregparm}, x86
 @item sseregparm
 This attribute applies to functions.
 
@@ -8715,7 +8807,7 @@ 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.
 
-@cindex @code{force_align_arg_pointer} function attribute, x86
+@atindex @code{force_align_arg_pointer}, x86
 @item force_align_arg_pointer
 This attribute applies to functions.
 
@@ -8725,7 +8817,7 @@ 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.
 
-@cindex @code{stdcall} function attribute, x86-32
+@atindex @code{stdcall}, x86-32
 @cindex functions that pop the argument stack on x86-32
 @item stdcall
 This attribute applies to functions.
@@ -8734,7 +8826,7 @@ 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.
 
-@cindex @code{no_callee_saved_registers} function attribute, x86
+@atindex @code{no_callee_saved_registers}, x86
 @item no_callee_saved_registers
 This attribute applies to functions.
 
@@ -8745,7 +8837,7 @@ attribute can be used for a function called from the 
interrupt handler
 assembly stub which will preserve all registers and return from
 interrupt.
 
-@cindex @code{preserve_none} function attribute, x86
+@atindex @code{preserve_none}, x86
 @item preserve_none
 This attribute applies to functions.
 
@@ -8754,7 +8846,7 @@ on x86-64, r12, r13, r14, r15, rdi and rsi registers are 
used for
 integer parameter passing and this calling convention is subject to
 change.
 
-@cindex @code{no_caller_saved_registers} function attribute, x86
+@atindex @code{no_caller_saved_registers}, x86
 @item no_caller_saved_registers
 This attribute applies to functions.
 
@@ -8768,7 +8860,7 @@ the EFLAGS register.  Since GCC doesn't preserve YMM nor 
ZMM registers,
 with AVX enabled.  Note that MMX and x87 registers aren't preserved by
 @code{no_caller_saved_registers} attribute.
 
-@cindex @code{interrupt} function attribute, x86
+@atindex @code{interrupt}, x86
 @item interrupt
 This attribute applies to functions.
 
@@ -8832,7 +8924,7 @@ 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.
 
-@cindex @code{target} function attribute
+@atindex @code{target}, x86
 @item target (@var{options})
 This attribute applies to functions.
 
@@ -8841,592 +8933,592 @@ allows specification of target-specific compilation 
options.
 
 On the x86, the following options are allowed:
 @table @samp
-@cindex @code{target("3dnow")} function attribute, x86
+@atindex @code{target("3dnow")}, x86
 @item 3dnow
 @itemx no-3dnow
 Enable/disable the generation of the 3DNow!@: instructions.
 
-@cindex @code{target("3dnowa")} function attribute, x86
+@atindex @code{target("3dnowa")}, x86
 @item 3dnowa
 @itemx no-3dnowa
 Enable/disable the generation of the enhanced 3DNow!@: instructions.
 
-@cindex @code{target("abm")} function attribute, x86
+@atindex @code{target("abm")}, x86
 @item abm
 @itemx no-abm
 Enable/disable the generation of the advanced bit instructions.
 
-@cindex @code{target("adx")} function attribute, x86
+@atindex @code{target("adx")}, x86
 @item adx
 @itemx no-adx
 Enable/disable the generation of the ADX instructions.
 
-@cindex @code{target("aes")} function attribute, x86
+@atindex @code{target("aes")}, x86
 @item aes
 @itemx no-aes
 Enable/disable the generation of the AES instructions.
 
-@cindex @code{target("avx")} function attribute, x86
+@atindex @code{target("avx")}, x86
 @item avx
 @itemx no-avx
 Enable/disable the generation of the AVX instructions.
 
-@cindex @code{target("avx2")} function attribute, x86
+@atindex @code{target("avx2")}, x86
 @item avx2
 @itemx no-avx2
 Enable/disable the generation of the AVX2 instructions.
 
-@cindex @code{target("avx512bitalg")} function attribute, x86
+@atindex @code{target("avx512bitalg")}, x86
 @item avx512bitalg
 @itemx no-avx512bitalg
 Enable/disable the generation of the AVX512BITALG instructions.
 
-@cindex @code{target("avx512bw")} function attribute, x86
+@atindex @code{target("avx512bw")}, x86
 @item avx512bw
 @itemx no-avx512bw
 Enable/disable the generation of the AVX512BW instructions.
 
-@cindex @code{target("avx512cd")} function attribute, x86
+@atindex @code{target("avx512cd")}, x86
 @item avx512cd
 @itemx no-avx512cd
 Enable/disable the generation of the AVX512CD instructions.
 
-@cindex @code{target("avx512dq")} function attribute, x86
+@atindex @code{target("avx512dq")}, x86
 @item avx512dq
 @itemx no-avx512dq
 Enable/disable the generation of the AVX512DQ instructions.
 
-@cindex @code{target("avx512er")} function attribute, x86
+@atindex @code{target("avx512er")}, x86
 @item avx512er
 @itemx no-avx512er
 Enable/disable the generation of the AVX512ER instructions.
 
-@cindex @code{target("avx512f")} function attribute, x86
+@atindex @code{target("avx512f")}, x86
 @item avx512f
 @itemx no-avx512f
 Enable/disable the generation of the AVX512F instructions.
 
-@cindex @code{target("avx512ifma")} function attribute, x86
+@atindex @code{target("avx512ifma")}, x86
 @item avx512ifma
 @itemx no-avx512ifma
 Enable/disable the generation of the AVX512IFMA instructions.
 
-@cindex @code{target("avx512vbmi")} function attribute, x86
+@atindex @code{target("avx512vbmi")}, x86
 @item avx512vbmi
 @itemx no-avx512vbmi
 Enable/disable the generation of the AVX512VBMI instructions.
 
-@cindex @code{target("avx512vbmi2")} function attribute, x86
+@atindex @code{target("avx512vbmi2")}, x86
 @item avx512vbmi2
 @itemx no-avx512vbmi2
 Enable/disable the generation of the AVX512VBMI2 instructions.
 
-@cindex @code{target("avx512vl")} function attribute, x86
+@atindex @code{target("avx512vl")}, x86
 @item avx512vl
 @itemx no-avx512vl
 Enable/disable the generation of the AVX512VL instructions.
 
-@cindex @code{target("avx512vnni")} function attribute, x86
+@atindex @code{target("avx512vnni")}, x86
 @item avx512vnni
 @itemx no-avx512vnni
 Enable/disable the generation of the AVX512VNNI instructions.
 
-@cindex @code{target("avx512vpopcntdq")} function attribute, x86
+@atindex @code{target("avx512vpopcntdq")}, x86
 @item avx512vpopcntdq
 @itemx no-avx512vpopcntdq
 Enable/disable the generation of the AVX512VPOPCNTDQ instructions.
 
-@cindex @code{target("bmi")} function attribute, x86
+@atindex @code{target("bmi")}, x86
 @item bmi
 @itemx no-bmi
 Enable/disable the generation of the BMI instructions.
 
-@cindex @code{target("bmi2")} function attribute, x86
+@atindex @code{target("bmi2")}, x86
 @item bmi2
 @itemx no-bmi2
 Enable/disable the generation of the BMI2 instructions.
 
-@cindex @code{target("cldemote")} function attribute, x86
+@atindex @code{target("cldemote")}, x86
 @item cldemote
 @itemx no-cldemote
 Enable/disable the generation of the CLDEMOTE instructions.
 
-@cindex @code{target("clflushopt")} function attribute, x86
+@atindex @code{target("clflushopt")}, x86
 @item clflushopt
 @itemx no-clflushopt
 Enable/disable the generation of the CLFLUSHOPT instructions.
 
-@cindex @code{target("clwb")} function attribute, x86
+@atindex @code{target("clwb")}, x86
 @item clwb
 @itemx no-clwb
 Enable/disable the generation of the CLWB instructions.
 
-@cindex @code{target("clzero")} function attribute, x86
+@atindex @code{target("clzero")}, x86
 @item clzero
 @itemx no-clzero
 Enable/disable the generation of the CLZERO instructions.
 
-@cindex @code{target("crc32")} function attribute, x86
+@atindex @code{target("crc32")}, x86
 @item crc32
 @itemx no-crc32
 Enable/disable the generation of the CRC32 instructions.
 
-@cindex @code{target("cx16")} function attribute, x86
+@atindex @code{target("cx16")}, x86
 @item cx16
 @itemx no-cx16
 Enable/disable the generation of the CMPXCHG16B instructions.
 
-@cindex @code{target("default")} function attribute, x86
+@atindex @code{target("default")}, x86
 @item default
 @xref{Function Multiversioning}, where it is used to specify the
 default function version.
 
-@cindex @code{target("f16c")} function attribute, x86
+@atindex @code{target("f16c")}, x86
 @item f16c
 @itemx no-f16c
 Enable/disable the generation of the F16C instructions.
 
-@cindex @code{target("fma")} function attribute, x86
+@atindex @code{target("fma")}, x86
 @item fma
 @itemx no-fma
 Enable/disable the generation of the FMA instructions.
 
-@cindex @code{target("fma4")} function attribute, x86
+@atindex @code{target("fma4")}, x86
 @item fma4
 @itemx no-fma4
 Enable/disable the generation of the FMA4 instructions.
 
-@cindex @code{target("fsgsbase")} function attribute, x86
+@atindex @code{target("fsgsbase")}, x86
 @item fsgsbase
 @itemx no-fsgsbase
 Enable/disable the generation of the FSGSBASE instructions.
 
-@cindex @code{target("fxsr")} function attribute, x86
+@atindex @code{target("fxsr")}, x86
 @item fxsr
 @itemx no-fxsr
 Enable/disable the generation of the FXSR instructions.
 
-@cindex @code{target("gfni")} function attribute, x86
+@atindex @code{target("gfni")}, x86
 @item gfni
 @itemx no-gfni
 Enable/disable the generation of the GFNI instructions.
 
-@cindex @code{target("hle")} function attribute, x86
+@atindex @code{target("hle")}, x86
 @item hle
 @itemx no-hle
 Enable/disable the generation of the HLE instruction prefixes.
 
-@cindex @code{target("lwp")} function attribute, x86
+@atindex @code{target("lwp")}, x86
 @item lwp
 @itemx no-lwp
 Enable/disable the generation of the LWP instructions.
 
-@cindex @code{target("lzcnt")} function attribute, x86
+@atindex @code{target("lzcnt")}, x86
 @item lzcnt
 @itemx no-lzcnt
 Enable/disable the generation of the LZCNT instructions.
 
-@cindex @code{target("mmx")} function attribute, x86
+@atindex @code{target("mmx")}, x86
 @item mmx
 @itemx no-mmx
 Enable/disable the generation of the MMX instructions.
 
-@cindex @code{target("movbe")} function attribute, x86
+@atindex @code{target("movbe")}, x86
 @item movbe
 @itemx no-movbe
 Enable/disable the generation of the MOVBE instructions.
 
-@cindex @code{target("movdir64b")} function attribute, x86
+@atindex @code{target("movdir64b")}, x86
 @item movdir64b
 @itemx no-movdir64b
 Enable/disable the generation of the MOVDIR64B instructions.
 
-@cindex @code{target("movdiri")} function attribute, x86
+@atindex @code{target("movdiri")}, x86
 @item movdiri
 @itemx no-movdiri
 Enable/disable the generation of the MOVDIRI instructions.
 
-@cindex @code{target("mwait")} function attribute, x86
+@atindex @code{target("mwait")}, x86
 @item mwait
 @itemx no-mwait
 Enable/disable the generation of the MWAIT and MONITOR instructions.
 
-@cindex @code{target("mwaitx")} function attribute, x86
+@atindex @code{target("mwaitx")}, x86
 @item mwaitx
 @itemx no-mwaitx
 Enable/disable the generation of the MWAITX instructions.
 
-@cindex @code{target("pclmul")} function attribute, x86
+@atindex @code{target("pclmul")}, x86
 @item pclmul
 @itemx no-pclmul
 Enable/disable the generation of the PCLMUL instructions.
 
-@cindex @code{target("pconfig")} function attribute, x86
+@atindex @code{target("pconfig")}, x86
 @item pconfig
 @itemx no-pconfig
 Enable/disable the generation of the PCONFIG instructions.
 
-@cindex @code{target("pku")} function attribute, x86
+@atindex @code{target("pku")}, x86
 @item pku
 @itemx no-pku
 Enable/disable the generation of the PKU instructions.
 
-@cindex @code{target("popcnt")} function attribute, x86
+@atindex @code{target("popcnt")}, x86
 @item popcnt
 @itemx no-popcnt
 Enable/disable the generation of the POPCNT instruction.
 
-@cindex @code{target("prfchw")} function attribute, x86
+@atindex @code{target("prfchw")}, x86
 @item prfchw
 @itemx no-prfchw
 Enable/disable the generation of the PREFETCHW instruction.
 
-@cindex @code{target("ptwrite")} function attribute, x86
+@atindex @code{target("ptwrite")}, x86
 @item ptwrite
 @itemx no-ptwrite
 Enable/disable the generation of the PTWRITE instructions.
 
-@cindex @code{target("rdpid")} function attribute, x86
+@atindex @code{target("rdpid")}, x86
 @item rdpid
 @itemx no-rdpid
 Enable/disable the generation of the RDPID instructions.
 
-@cindex @code{target("rdrnd")} function attribute, x86
+@atindex @code{target("rdrnd")}, x86
 @item rdrnd
 @itemx no-rdrnd
 Enable/disable the generation of the RDRND instructions.
 
-@cindex @code{target("rdseed")} function attribute, x86
+@atindex @code{target("rdseed")}, x86
 @item rdseed
 @itemx no-rdseed
 Enable/disable the generation of the RDSEED instructions.
 
-@cindex @code{target("rtm")} function attribute, x86
+@atindex @code{target("rtm")}, x86
 @item rtm
 @itemx no-rtm
 Enable/disable the generation of the RTM instructions.
 
-@cindex @code{target("sahf")} function attribute, x86
+@atindex @code{target("sahf")}, x86
 @item sahf
 @itemx no-sahf
 Enable/disable the generation of the SAHF instructions.
 
-@cindex @code{target("sgx")} function attribute, x86
+@atindex @code{target("sgx")}, x86
 @item sgx
 @itemx no-sgx
 Enable/disable the generation of the SGX instructions.
 
-@cindex @code{target("sha")} function attribute, x86
+@atindex @code{target("sha")}, x86
 @item sha
 @itemx no-sha
 Enable/disable the generation of the SHA instructions.
 
-@cindex @code{target("shstk")} function attribute, x86
+@atindex @code{target("shstk")}, x86
 @item shstk
 @itemx no-shstk
 Enable/disable the shadow stack built-in functions from CET.
 
-@cindex @code{target("sse")} function attribute, x86
+@atindex @code{target("sse")}, x86
 @item sse
 @itemx no-sse
 Enable/disable the generation of the SSE instructions.
 
-@cindex @code{target("sse2")} function attribute, x86
+@atindex @code{target("sse2")}, x86
 @item sse2
 @itemx no-sse2
 Enable/disable the generation of the SSE2 instructions.
 
-@cindex @code{target("sse3")} function attribute, x86
+@atindex @code{target("sse3")}, x86
 @item sse3
 @itemx no-sse3
 Enable/disable the generation of the SSE3 instructions.
 
-@cindex @code{target("sse4")} function attribute, x86
+@atindex @code{target("sse4")}, x86
 @item sse4
 @itemx no-sse4
 Enable/disable the generation of the SSE4 instructions (both SSE4.1
 and SSE4.2).
 
-@cindex @code{target("sse4.1")} function attribute, x86
+@atindex @code{target("sse4.1")}, x86
 @item sse4.1
 @itemx no-sse4.1
 Enable/disable the generation of the SSE4.1 instructions.
 
-@cindex @code{target("sse4.2")} function attribute, x86
+@atindex @code{target("sse4.2")}, x86
 @item sse4.2
 @itemx no-sse4.2
 Enable/disable the generation of the SSE4.2 instructions.
 
-@cindex @code{target("sse4a")} function attribute, x86
+@atindex @code{target("sse4a")}, x86
 @item sse4a
 @itemx no-sse4a
 Enable/disable the generation of the SSE4A instructions.
 
-@cindex @code{target("ssse3")} function attribute, x86
+@atindex @code{target("ssse3")}, x86
 @item ssse3
 @itemx no-ssse3
 Enable/disable the generation of the SSSE3 instructions.
 
-@cindex @code{target("tbm")} function attribute, x86
+@atindex @code{target("tbm")}, x86
 @item tbm
 @itemx no-tbm
 Enable/disable the generation of the TBM instructions.
 
-@cindex @code{target("vaes")} function attribute, x86
+@atindex @code{target("vaes")}, x86
 @item vaes
 @itemx no-vaes
 Enable/disable the generation of the VAES instructions.
 
-@cindex @code{target("vpclmulqdq")} function attribute, x86
+@atindex @code{target("vpclmulqdq")}, x86
 @item vpclmulqdq
 @itemx no-vpclmulqdq
 Enable/disable the generation of the VPCLMULQDQ instructions.
 
-@cindex @code{target("waitpkg")} function attribute, x86
+@atindex @code{target("waitpkg")}, x86
 @item waitpkg
 @itemx no-waitpkg
 Enable/disable the generation of the WAITPKG instructions.
 
-@cindex @code{target("wbnoinvd")} function attribute, x86
+@atindex @code{target("wbnoinvd")}, x86
 @item wbnoinvd
 @itemx no-wbnoinvd
 Enable/disable the generation of the WBNOINVD instructions.
 
-@cindex @code{target("xop")} function attribute, x86
+@atindex @code{target("xop")}, x86
 @item xop
 @itemx no-xop
 Enable/disable the generation of the XOP instructions.
 
-@cindex @code{target("xsave")} function attribute, x86
+@atindex @code{target("xsave")}, x86
 @item xsave
 @itemx no-xsave
 Enable/disable the generation of the XSAVE instructions.
 
-@cindex @code{target("xsavec")} function attribute, x86
+@atindex @code{target("xsavec")}, x86
 @item xsavec
 @itemx no-xsavec
 Enable/disable the generation of the XSAVEC instructions.
 
-@cindex @code{target("xsaveopt")} function attribute, x86
+@atindex @code{target("xsaveopt")}, x86
 @item xsaveopt
 @itemx no-xsaveopt
 Enable/disable the generation of the XSAVEOPT instructions.
 
-@cindex @code{target("xsaves")} function attribute, x86
+@atindex @code{target("xsaves")}, x86
 @item xsaves
 @itemx no-xsaves
 Enable/disable the generation of the XSAVES instructions.
 
-@cindex @code{target("amx-tile")} function attribute, x86
+@atindex @code{target("amx-tile")}, x86
 @item amx-tile
 @itemx no-amx-tile
 Enable/disable the generation of the AMX-TILE instructions.
 
-@cindex @code{target("amx-int8")} function attribute, x86
+@atindex @code{target("amx-int8")}, x86
 @item amx-int8
 @itemx no-amx-int8
 Enable/disable the generation of the AMX-INT8 instructions.
 
-@cindex @code{target("amx-bf16")} function attribute, x86
+@atindex @code{target("amx-bf16")}, x86
 @item amx-bf16
 @itemx no-amx-bf16
 Enable/disable the generation of the AMX-BF16 instructions.
 
-@cindex @code{target("uintr")} function attribute, x86
+@atindex @code{target("uintr")}, x86
 @item uintr
 @itemx no-uintr
 Enable/disable the generation of the UINTR instructions.
 
-@cindex @code{target("hreset")} function attribute, x86
+@atindex @code{target("hreset")}, x86
 @item hreset
 @itemx no-hreset
 Enable/disable the generation of the HRESET instruction.
 
-@cindex @code{target("kl")} function attribute, x86
+@atindex @code{target("kl")}, x86
 @item kl
 @itemx no-kl
 Enable/disable the generation of the KEYLOCKER instructions.
 
-@cindex @code{target("widekl")} function attribute, x86
+@atindex @code{target("widekl")}, x86
 @item widekl
 @itemx no-widekl
 Enable/disable the generation of the WIDEKL instructions.
 
-@cindex @code{target("avxvnni")} function attribute, x86
+@atindex @code{target("avxvnni")}, x86
 @item avxvnni
 @itemx no-avxvnni
 Enable/disable the generation of the AVXVNNI instructions.
 
-@cindex @code{target("avxifma")} function attribute, x86
+@atindex @code{target("avxifma")}, x86
 @item avxifma
 @itemx no-avxifma
 Enable/disable the generation of the AVXIFMA instructions.
 
-@cindex @code{target("avxvnniint8")} function attribute, x86
+@atindex @code{target("avxvnniint8")}, x86
 @item avxvnniint8
 @itemx no-avxvnniint8
 Enable/disable the generation of the AVXVNNIINT8 instructions.
 
-@cindex @code{target("avxneconvert")} function attribute, x86
+@atindex @code{target("avxneconvert")}, x86
 @item avxneconvert
 @itemx no-avxneconvert
 Enable/disable the generation of the AVXNECONVERT instructions.
 
-@cindex @code{target("cmpccxadd")} function attribute, x86
+@atindex @code{target("cmpccxadd")}, x86
 @item cmpccxadd
 @itemx no-cmpccxadd
 Enable/disable the generation of the CMPccXADD instructions.
 
-@cindex @code{target("amx-fp16")} function attribute, x86
+@atindex @code{target("amx-fp16")}, x86
 @item amx-fp16
 @itemx no-amx-fp16
 Enable/disable the generation of the AMX-FP16 instructions.
 
-@cindex @code{target("prefetchi")} function attribute, x86
+@atindex @code{target("prefetchi")}, x86
 @item prefetchi
 @itemx no-prefetchi
 Enable/disable the generation of the PREFETCHI instructions.
 
-@cindex @code{target("raoint")} function attribute, x86
+@atindex @code{target("raoint")}, x86
 @item raoint
 @itemx no-raoint
 Enable/disable the generation of the RAOINT instructions.
 
-@cindex @code{target("amx-complex")} function attribute, x86
+@atindex @code{target("amx-complex")}, x86
 @item amx-complex
 @itemx no-amx-complex
 Enable/disable the generation of the AMX-COMPLEX instructions.
 
-@cindex @code{target("avxvnniint16")} function attribute, x86
+@atindex @code{target("avxvnniint16")}, x86
 @item avxvnniint16
 @itemx no-avxvnniint16
 Enable/disable the generation of the AVXVNNIINT16 instructions.
 
-@cindex @code{target("sm3")} function attribute, x86
+@atindex @code{target("sm3")}, x86
 @item sm3
 @itemx no-sm3
 Enable/disable the generation of the SM3 instructions.
 
-@cindex @code{target("sha512")} function attribute, x86
+@atindex @code{target("sha512")}, x86
 @item sha512
 @itemx no-sha512
 Enable/disable the generation of the SHA512 instructions.
 
-@cindex @code{target("sm4")} function attribute, x86
+@atindex @code{target("sm4")}, x86
 @item sm4
 @itemx no-sm4
 Enable/disable the generation of the SM4 instructions.
 
-@cindex @code{target("usermsr")} function attribute, x86
+@atindex @code{target("usermsr")}, x86
 @item usermsr
 @itemx no-usermsr
 Enable/disable the generation of the USER_MSR instructions.
 
-@cindex @code{target("apxf")} function attribute, x86
+@atindex @code{target("apxf")}, x86
 @item apxf
 @itemx no-apxf
 Enable/disable the generation of the APX features, including
 EGPR, PUSH2POP2, NDD and PPX.
 
-@cindex @code{target("avx10.1")} function attribute, x86
+@atindex @code{target("avx10.1")}, x86
 @item avx10.1
 @itemx no-avx10.1
 Enable/Disable the generation of the AVX10.1 instructions.
 
-@cindex @code{target("avx10.2")} function attribute, x86
+@atindex @code{target("avx10.2")}, x86
 @item avx10.2
 @itemx no-avx10.2
 Enable/Disable the generation of the AVX10.2 instructions.
 
-@cindex @code{target("amx-avx512")} function attribute, x86
+@atindex @code{target("amx-avx512")}, x86
 @item amx-avx512
 @itemx no-amx-avx512
 Enable/disable the generation of the AMX-AVX512 instructions.
 
-@cindex @code{target("amx-tf32")} function attribute, x86
+@atindex @code{target("amx-tf32")}, x86
 @item amx-tf32
 @itemx no-amx-tf32
 Enable/disable the generation of the AMX-TF32 instructions.
 
-@cindex @code{target("amx-fp8")} function attribute, x86
+@atindex @code{target("amx-fp8")}, x86
 @item amx-fp8
 @itemx no-amx-fp8
 Enable/disable the generation of the AMX-FP8 instructions.
 
-@cindex @code{target("movrs")} function attribute, x86
+@atindex @code{target("movrs")}, x86
 @item movrs
 @itemx no-movrs
 Enable/disable the generation of the MOVRS instructions.
 
-@cindex @code{target("amx-movrs")} function attribute, x86
+@atindex @code{target("amx-movrs")}, x86
 @item amx-movrs
 @itemx no-amx-movrs
 Enable/disable the generation of the AMX-MOVRS instructions.
 
-@cindex @code{target("cld")} function attribute, x86
+@atindex @code{target("cld")}, x86
 @item cld
 @itemx no-cld
 Enable/disable the generation of the CLD before string moves.
 
-@cindex @code{target("fancy-math-387")} function attribute, x86
+@atindex @code{target("fancy-math-387")}, x86
 @item fancy-math-387
 @itemx no-fancy-math-387
 Enable/disable the generation of the @code{sin}, @code{cos}, and
 @code{sqrt} instructions on the 387 floating-point unit.
 
-@cindex @code{target("ieee-fp")} function attribute, x86
+@atindex @code{target("ieee-fp")}, x86
 @item ieee-fp
 @itemx no-ieee-fp
 Enable/disable the generation of floating point that depends on IEEE 
arithmetic.
 
-@cindex @code{target("inline-all-stringops")} function attribute, x86
+@atindex @code{target("inline-all-stringops")}, x86
 @item inline-all-stringops
 @itemx no-inline-all-stringops
 Enable/disable inlining of string operations.
 
-@cindex @code{target("inline-stringops-dynamically")} function attribute, x86
+@atindex @code{target("inline-stringops-dynamically")}, x86
 @item inline-stringops-dynamically
 @itemx no-inline-stringops-dynamically
 Enable/disable the generation of the inline code to do small string
 operations and calling the library routines for large operations.
 
-@cindex @code{target("align-stringops")} function attribute, x86
+@atindex @code{target("align-stringops")}, x86
 @item align-stringops
 @itemx no-align-stringops
 Do/do not align destination of inlined string operations.
 
-@cindex @code{target("recip")} function attribute, x86
+@atindex @code{target("recip")}, x86
 @item recip
 @itemx no-recip
 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and RSQRTPS
 instructions followed an additional Newton-Raphson step instead of
 doing a floating-point division.
 
-@cindex @code{target("80387")} function attribute, x86
+@atindex @code{target("80387")}, x86
 @item 80387
 @itemx no-80387
 Generate code containing 80387 instructions for floating point.
 
-@cindex @code{target("general-regs-only")} function attribute, x86
+@atindex @code{target("general-regs-only")}, x86
 @item general-regs-only
 Generate code which uses only the general registers.
 
-@cindex @code{target("arch=@var{ARCH}")} function attribute, x86
+@atindex @code{target("arch=@var{ARCH}")}, x86
 @item arch=@var{ARCH}
 Specify the architecture to generate code for in compiling the function.
 
-@cindex @code{target("tune=@var{TUNE}")} function attribute, x86
+@atindex @code{target("tune=@var{TUNE}")}, x86
 @item tune=@var{TUNE}
 Specify the architecture to tune for in compiling the function.
 
-@cindex @code{target("fpmath=@var{FPMATH}")} function attribute, x86
+@atindex @code{target("fpmath=@var{FPMATH}")}, x86
 @item fpmath=@var{FPMATH}
 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.
 
-@cindex @code{prefer-vector-width} function attribute, x86
+@atindex @code{prefer-vector-width}, x86
 @item prefer-vector-width=@var{OPT}
 On x86 targets, the @code{prefer-vector-width} attribute informs the
 compiler to use @var{OPT}-bit vector width in instructions
@@ -9463,7 +9555,7 @@ a function with default @option{-march=x86-64} and
 of ISA features and marked with always_inline.
 @end table
 
-@cindex @code{indirect_branch} function attribute, x86
+@atindex @code{indirect_branch}, x86
 @item indirect_branch("@var{choice}")
 This attribute applies to functions.
 
@@ -9475,7 +9567,7 @@ indirect call and jump to inlined call and return thunk.
 @samp{thunk-extern} converts indirect call and jump to external call
 and return thunk provided in a separate object file.
 
-@cindex @code{function_return} function attribute, x86
+@atindex @code{function_return}, x86
 @item function_return("@var{choice}")
 This attribute applies to functions.
 
@@ -9486,7 +9578,7 @@ return thunk.  @samp{thunk-inline} converts function 
return to inlined
 call and return thunk.  @samp{thunk-extern} converts function return to
 external call and return thunk provided in a separate object file.
 
-@cindex @code{nocf_check} function attribute
+@atindex @code{nocf_check}, x86
 @item nocf_check
 This attribute applies to functions and function types.
 
@@ -9544,7 +9636,7 @@ foo (void)
 @}
 @end smallexample
 
-@cindex @code{cf_check} function attribute, x86
+@atindex @code{cf_check}, x86
 @item cf_check
 This attribute applies to functions.
 
@@ -9552,7 +9644,7 @@ The @code{cf_check} attribute on a function is used to 
inform the
 compiler that ENDBR instruction should be placed at the function
 entry when @option{-fcf-protection=branch} is enabled.
 
-@cindex @code{indirect_return} function attribute, x86
+@atindex @code{indirect_return}, x86
 @item indirect_return
 This attribute applies to functions.
 
@@ -9560,7 +9652,7 @@ The @code{indirect_return} attribute can be applied to a 
function,
 as well as variable or type of function pointer to inform the
 compiler that the function may return via indirect branch.
 
-@cindex @code{fentry_name} function attribute, x86
+@atindex @code{fentry_name}, x86
 @item fentry_name("@var{name}")
 This attribute applies to functions.
 
@@ -9569,7 +9661,7 @@ call on function entry when function instrumentation is 
enabled
 with @option{-pg -mfentry}. When @var{name} is nop then a 5 byte
 nop sequence is generated.
 
-@cindex @code{fentry_section} function attribute, x86
+@atindex @code{fentry_section}, x86
 @item fentry_section("@var{name}")
 This attribute applies to functions.
 
@@ -9577,7 +9669,7 @@ On x86 targets, the @code{fentry_section} attribute sets 
the name
 of the section to record function entry instrumentation calls in when
 enabled with @option{-pg -mrecord-mcount}
 
-@cindex @code{nodirect_extern_access} attribute
+@atindex @code{nodirect_extern_access}, x86
 @opindex mno-direct-extern-access
 @item nodirect_extern_access
 This attribute applies to functions and variables.
@@ -9585,8 +9677,8 @@ This attribute applies to functions and variables.
 This attribute, attached to a global variable or function, is the
 counterpart to option @option{-mno-direct-extern-access}.
 
-@cindex @code{ms_struct} attribute, x86
-@cindex @code{gcc_struct} attribute, x86
+@atindex @code{ms_struct}, x86
+@atindex @code{gcc_struct}, x86
 @item ms_struct
 @itemx gcc_struct
 These attributes can be applied to variables and struct types.
@@ -9612,7 +9704,7 @@ see @ref{x86 Options}, for details of how structure 
layout is affected.
 These attributes are supported by the Xstormy16 back end:
 
 @table @code
-@cindex @code{interrupt} function attribute, Xstormy16
+@atindex @code{interrupt}, Xstormy16
 @item interrupt
 This attribute applies to functions.
 
@@ -9621,7 +9713,7 @@ 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.
 
-@cindex @code{below100} variable attribute, Xstormy16
+@atindex @code{below100}, Xstormy16
 @item below100
 This attribute applies to variables.
 
@@ -30872,7 +30964,7 @@ You must specify @option{-Wno-pmf-conversions} to use 
this extension.
 Some attributes only make sense for C++ programs.
 
 @table @code
-@cindex @code{abi_tag} attribute
+@atindex @code{abi_tag}
 @item abi_tag ("@var{tag}", ...)
 The @code{abi_tag} attribute can be applied to a function, variable, class
 declaration, or inline namespace.
@@ -30916,7 +31008,7 @@ variable or function.  @option{-Wabi-tag} also warns 
about this
 situation; you can avoid this warning by explicitly tagging the
 variable or function or moving it into a tagged inline namespace.
 
-@cindex @code{init_priority} variable attribute
+@atindex @code{init_priority}
 @item init_priority (@var{priority})
 This attribute applies to namespace-scope variables.
 
@@ -30946,7 +31038,7 @@ As with the @var{priority} argument to the 
@code{constructor} and
 @code{init_priority} attribute.  In that case the attribute is rejected
 with an error rather than ignored.
 
-@cindex @code{no_dangling} attribute
+@atindex @code{no_dangling}
 @item no_dangling
 
 This attribute can be applied to a class type, function, or member
@@ -30998,7 +31090,7 @@ decltype(auto) foo(T&& t) @{
 @};
 @end smallexample
 
-@cindex @code{warn_unused} type attribute
+@atindex @code{warn_unused}
 @item warn_unused
 This attribute applies to types.
 
@@ -31016,9 +31108,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.
 
-@cindex @code{cold} type attribute
-@item cold
-@cindex @code{hot} type attribute
+@atindex @code{cold}
+@atindex @code{hot}
 @item cold
 @itemx hot
 In addition to functions and labels, GNU C++ allows the @code{cold} and
diff --git a/gcc/doc/gcc.texi b/gcc/doc/gcc.texi
index 2d0655512eb..495f09bc9d3 100644
--- a/gcc/doc/gcc.texi
+++ b/gcc/doc/gcc.texi
@@ -28,6 +28,8 @@
 
 @c Create a separate index for command line options.
 @defcodeindex op
+@c Likewise create a separate index for attributes.
+@defindex at
 @c Merge the standard indexes into a single one.
 @syncodeindex fn cp
 @syncodeindex vr cp
@@ -207,13 +209,14 @@ object files.
 
 @menu
 * Option Index::                Index to command line options.
-* Concept and Symbol Index::    Index of concepts and symbols names.
+* Attribute Index::             Index of GNU extension attributes.
+* Concept and Symbol Index::    Index of concepts and symbol names.
 @end menu
 
 @node Option Index
 @appendixsec Option Index
 
-GCC's command line options are indexed here without any initial
+GCC's command-line options are indexed here without any initial
 @samp{-} or @samp{--}.  Where an option has both positive and negative
 forms (such as @option{-f@var{option}} and
 @option{-fno-@var{option}}), relevant entries in the manual are
@@ -222,6 +225,15 @@ look up both forms.
 
 @printindex op
 
+@node Attribute Index
+@appendixsec Attribute Index
+
+This index lists GNU extension attributes only, e.g. those that should
+use the @samp{gnu::} namespace prefix in the standard C and C++
+attribute syntax.
+
+@printindex at
+
 @node Concept and Symbol Index
 @appendixsec Concept and Symbol Index
 
-- 
2.39.5

Reply via email to