Commit 90eb63a3 by Sandra Loosemore Committed by Sandra Loosemore

extend.texi (Variable Attributes): Add menu and proper @nodes to subsections.

2015-05-01  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* doc/extend.texi (Variable Attributes): Add menu and proper
	@nodes to subsections.  Move Microsoft Windows attributes to
	their own subsection.
	(Type Attributes): Reorganize introduction to remove duplicate
	list of attributes.  Add menu and proper @nodes to subsections.
	Alphabetize the main table of common attributes.

From-SVN: r222714
parent 9c0717ed
2015-05-01 Sandra Loosemore <sandra@codesourcery.com>
* doc/extend.texi (Variable Attributes): Add menu and proper
@nodes to subsections. Move Microsoft Windows attributes to
their own subsection.
(Type Attributes): Reorganize introduction to remove duplicate
list of attributes. Add menu and proper @nodes to subsections.
Alphabetize the main table of common attributes.
2015-05-01 Rasmus Villemoes <rv@rasmusvillemoes.dk> 2015-05-01 Rasmus Villemoes <rv@rasmusvillemoes.dk>
* match.pd: New simplification patterns. * match.pd: New simplification patterns.
......
...@@ -5400,6 +5400,26 @@ Other front ends might define more attributes ...@@ -5400,6 +5400,26 @@ Other front ends might define more attributes
@xref{Attribute Syntax}, for details of the exact syntax for using @xref{Attribute Syntax}, for details of the exact syntax for using
attributes. attributes.
@menu
* Common Variable Attributes::
* AVR Variable Attributes::
* Blackfin Variable Attributes::
* H8/300 Variable Attributes::
* IA-64 Variable Attributes::
* M32R/D Variable Attributes::
* MeP Variable Attributes::
* Microsoft Windows Variable Attributes::
* PowerPC Variable Attributes::
* SPU Variable Attributes::
* x86 Variable Attributes::
* Xstormy16 Variable Attributes::
@end menu
@node Common Variable Attributes
@subsection Common Variable Attributes
The following attributes are supported on most targets.
@table @code @table @code
@cindex @code{aligned} variable attribute @cindex @code{aligned} variable attribute
@item aligned (@var{alignment}) @item aligned (@var{alignment})
...@@ -5522,7 +5542,8 @@ argument, which must be a string, is printed in the warning if ...@@ -5522,7 +5542,8 @@ argument, which must be a string, is printed in the warning if
present. present.
The @code{deprecated} attribute can also be used for functions and The @code{deprecated} attribute can also be used for functions and
types (@pxref{Common Function Attributes}, @pxref{Type Attributes}). types (@pxref{Common Function Attributes},
@pxref{Common Type Attributes}).
@item mode (@var{mode}) @item mode (@var{mode})
@cindex @code{mode} variable attribute @cindex @code{mode} variable attribute
...@@ -5608,33 +5629,6 @@ attribute is not available on all platforms. ...@@ -5608,33 +5629,6 @@ attribute is not available on all platforms.
If you need to map the entire contents of a module to a particular If you need to map the entire contents of a module to a particular
section, consider using the facilities of the linker instead. section, consider using the facilities of the linker instead.
@item shared
@cindex @code{shared} variable attribute
On Microsoft Windows, in addition to putting variable definitions in a named
section, the section can also be shared among all running copies of an
executable or DLL@. For example, this small program defines shared data
by putting it in a named section @code{shared} and marking the section
shareable:
@smallexample
int foo __attribute__((section ("shared"), shared)) = 0;
int
main()
@{
/* @r{Read and write foo. All running
copies see the same value.} */
return 0;
@}
@end smallexample
@noindent
You may only use the @code{shared} attribute along with @code{section}
attribute with a fully-initialized global definition because of the way
linkers work. See @code{section} attribute for more information.
The @code{shared} attribute is only available on Microsoft Windows@.
@item tls_model ("@var{tls_model}") @item tls_model ("@var{tls_model}")
@cindex @code{tls_model} variable attribute @cindex @code{tls_model} variable attribute
The @code{tls_model} attribute sets thread-local storage model The @code{tls_model} attribute sets thread-local storage model
...@@ -5692,45 +5686,14 @@ struct S __attribute__ ((vector_size (16))) foo; ...@@ -5692,45 +5686,14 @@ struct S __attribute__ ((vector_size (16))) foo;
is invalid even if the size of the structure is the same as the size of is invalid even if the size of the structure is the same as the size of
the @code{int}. the @code{int}.
@item selectany
@cindex @code{selectany} variable attribute
The @code{selectany} attribute causes an initialized global variable to
have link-once semantics. When multiple definitions of the variable are
encountered by the linker, the first is selected and the remainder are
discarded. Following usage by the Microsoft compiler, the linker is told
@emph{not} to warn about size or content differences of the multiple
definitions.
Although the primary usage of this attribute is for POD types, the
attribute can also be applied to global C++ objects that are initialized
by a constructor. In this case, the static initialization and destruction
code for the object is emitted in each translation defining the object,
but the calls to the constructor and destructor are protected by a
link-once guard variable.
The @code{selectany} attribute is only available on Microsoft Windows
targets. You can use @code{__declspec (selectany)} as a synonym for
@code{__attribute__ ((selectany))} for compatibility with other
compilers.
@item weak @item weak
@cindex @code{weak} variable attribute @cindex @code{weak} variable attribute
The @code{weak} attribute is described in The @code{weak} attribute is described in
@ref{Common Function Attributes}. @ref{Common Function Attributes}.
@item dllimport
@cindex @code{dllimport} variable attribute
The @code{dllimport} attribute is described in
@ref{Microsoft Windows Function Attributes}.
@item dllexport
@cindex @code{dllexport} variable attribute
The @code{dllexport} attribute is described in
@ref{Microsoft Windows Function Attributes}.
@end table @end table
@anchor{AVR Variable Attributes} @node AVR Variable Attributes
@subsection AVR Variable Attributes @subsection AVR Variable Attributes
@table @code @table @code
...@@ -5813,6 +5776,7 @@ volatile int porta __attribute__((address (0x600))); ...@@ -5813,6 +5776,7 @@ volatile int porta __attribute__((address (0x600)));
@end table @end table
@node Blackfin Variable Attributes
@subsection Blackfin Variable Attributes @subsection Blackfin Variable Attributes
Three attributes are currently defined for the Blackfin. Three attributes are currently defined for the Blackfin.
...@@ -5837,6 +5801,7 @@ Variables with @code{l2} attribute are put into the specific section ...@@ -5837,6 +5801,7 @@ Variables with @code{l2} attribute are put into the specific section
named @code{.l2.data}. named @code{.l2.data}.
@end table @end table
@node H8/300 Variable Attributes
@subsection H8/300 Variable Attributes @subsection H8/300 Variable Attributes
These variable attributes are available for H8/300 targets: These variable attributes are available for H8/300 targets:
...@@ -5865,6 +5830,7 @@ slightly under 32KB of data. ...@@ -5865,6 +5830,7 @@ slightly under 32KB of data.
@end table @end table
@node IA-64 Variable Attributes
@subsection IA-64 Variable Attributes @subsection IA-64 Variable Attributes
The IA-64 back end supports the following variable attribute: The IA-64 back end supports the following variable attribute:
...@@ -5883,6 +5849,7 @@ defined by shared libraries. ...@@ -5883,6 +5849,7 @@ defined by shared libraries.
@end table @end table
@node M32R/D Variable Attributes
@subsection M32R/D Variable Attributes @subsection M32R/D Variable Attributes
One attribute is currently defined for the M32R/D@. One attribute is currently defined for the M32R/D@.
...@@ -5903,7 +5870,7 @@ Medium and large model objects may live anywhere in the 32-bit address space ...@@ -5903,7 +5870,7 @@ Medium and large model objects may live anywhere in the 32-bit address space
addresses). addresses).
@end table @end table
@anchor{MeP Variable Attributes} @node MeP Variable Attributes
@subsection MeP Variable Attributes @subsection MeP Variable Attributes
The MeP target has a number of addressing modes and busses. The The MeP target has a number of addressing modes and busses. The
...@@ -5967,6 +5934,72 @@ int cpu_clock __attribute__((cb(0x123))); ...@@ -5967,6 +5934,72 @@ int cpu_clock __attribute__((cb(0x123)));
@end table @end table
@node Microsoft Windows Variable Attributes
@subsection Microsoft Windows Variable Attributes
You can use these attributes on Microsoft Windows targets.
@ref{x86 Variable Attributes} for additional Windows compatibility
attributes available on all x86 targets.
@table @code
@item dllimport
@itemx dllexport
@cindex @code{dllimport} variable attribute
@cindex @code{dllexport} variable attribute
The @code{dllimport} and @code{dllexport} attributes are described in
@ref{Microsoft Windows Function Attributes}.
@item selectany
@cindex @code{selectany} variable attribute
The @code{selectany} attribute causes an initialized global variable to
have link-once semantics. When multiple definitions of the variable are
encountered by the linker, the first is selected and the remainder are
discarded. Following usage by the Microsoft compiler, the linker is told
@emph{not} to warn about size or content differences of the multiple
definitions.
Although the primary usage of this attribute is for POD types, the
attribute can also be applied to global C++ objects that are initialized
by a constructor. In this case, the static initialization and destruction
code for the object is emitted in each translation defining the object,
but the calls to the constructor and destructor are protected by a
link-once guard variable.
The @code{selectany} attribute is only available on Microsoft Windows
targets. You can use @code{__declspec (selectany)} as a synonym for
@code{__attribute__ ((selectany))} for compatibility with other
compilers.
@item shared
@cindex @code{shared} variable attribute
On Microsoft Windows, in addition to putting variable definitions in a named
section, the section can also be shared among all running copies of an
executable or DLL@. For example, this small program defines shared data
by putting it in a named section @code{shared} and marking the section
shareable:
@smallexample
int foo __attribute__((section ("shared"), shared)) = 0;
int
main()
@{
/* @r{Read and write foo. All running
copies see the same value.} */
return 0;
@}
@end smallexample
@noindent
You may only use the @code{shared} attribute along with @code{section}
attribute with a fully-initialized global definition because of the way
linkers work. See @code{section} attribute for more information.
The @code{shared} attribute is only available on Microsoft Windows@.
@end table
@node PowerPC Variable Attributes
@subsection PowerPC Variable Attributes @subsection PowerPC Variable Attributes
Three attributes currently are defined for PowerPC configurations: Three attributes currently are defined for PowerPC configurations:
...@@ -5981,6 +6014,7 @@ documentation in @ref{x86 Variable Attributes}. ...@@ -5981,6 +6014,7 @@ documentation in @ref{x86 Variable Attributes}.
For documentation of @code{altivec} attribute please see the For documentation of @code{altivec} attribute please see the
documentation in @ref{PowerPC Type Attributes}. documentation in @ref{PowerPC Type Attributes}.
@node SPU Variable Attributes
@subsection SPU Variable Attributes @subsection SPU Variable Attributes
@cindex @code{spu_vector} variable attribute, SPU @cindex @code{spu_vector} variable attribute, SPU
...@@ -5988,7 +6022,7 @@ The SPU supports the @code{spu_vector} attribute for variables. For ...@@ -5988,7 +6022,7 @@ The SPU supports the @code{spu_vector} attribute for variables. For
documentation of this attribute please see the documentation in documentation of this attribute please see the documentation in
@ref{SPU Type Attributes}. @ref{SPU Type Attributes}.
@anchor{x86 Variable Attributes} @node x86 Variable Attributes
@subsection x86 Variable Attributes @subsection x86 Variable Attributes
Two attributes are currently defined for x86 configurations: Two attributes are currently defined for x86 configurations:
...@@ -6126,6 +6160,7 @@ Here, @code{t5} takes up 2 bytes. ...@@ -6126,6 +6160,7 @@ Here, @code{t5} takes up 2 bytes.
@end enumerate @end enumerate
@end table @end table
@node Xstormy16 Variable Attributes
@subsection Xstormy16 Variable Attributes @subsection Xstormy16 Variable Attributes
One attribute is currently defined for xstormy16 configurations: One attribute is currently defined for xstormy16 configurations:
...@@ -6149,27 +6184,39 @@ placed in either the @code{.bss_below100} section or the ...@@ -6149,27 +6184,39 @@ placed in either the @code{.bss_below100} section or the
@cindex type attributes @cindex type attributes
The keyword @code{__attribute__} allows you to specify special The keyword @code{__attribute__} allows you to specify special
attributes of @code{struct} and @code{union} types when you define attributes of types. Some type attributes apply only to @code{struct}
such types. This keyword is followed by an attribute specification and @code{union} types, while others can apply to any type defined
inside double parentheses. Eight attributes are currently defined for via a @code{typedef} declaration. Other attributes are defined for
types: @code{aligned}, @code{packed}, @code{transparent_union},
@code{unused}, @code{deprecated}, @code{visibility}, @code{may_alias}
and @code{bnd_variable_size}. Other attributes are defined for
functions (@pxref{Function Attributes}), labels (@pxref{Label functions (@pxref{Function Attributes}), labels (@pxref{Label
Attributes}) and for variables (@pxref{Variable Attributes}). Attributes}) and for variables (@pxref{Variable Attributes}).
You may specify type attributes in an enum, struct or union type The @code{__attribute__} keyword is followed by an attribute specification
declaration or definition, or for other types in a @code{typedef} inside double parentheses.
declaration.
For an enum, struct or union type, you may specify attributes either You may specify type attributes in an enum, struct or union type
between the enum, struct or union tag and the name of the type, or declaration or definition by placing them immediately after the
just past the closing curly brace of the @emph{definition}. The @code{struct}, @code{union} or @code{enum} keyword. A less preferred
former syntax is preferred. syntax is to place them just past the closing curly brace of the
definition.
You can also include type attributes in a @code{typedef} declaration.
@xref{Attribute Syntax}, for details of the exact syntax for using @xref{Attribute Syntax}, for details of the exact syntax for using
attributes. attributes.
@menu
* Common Type Attributes::
* ARM Type Attributes::
* MeP Type Attributes::
* PowerPC Type Attributes::
* SPU Type Attributes::
* x86 Type Attributes::
@end menu
@node Common Type Attributes
@subsection Common Type Attributes
The following type attributes are supported on most targets.
@table @code @table @code
@cindex @code{aligned} type attribute @cindex @code{aligned} type attribute
@item aligned (@var{alignment}) @item aligned (@var{alignment})
...@@ -6250,14 +6297,6 @@ up to a maximum of 8-byte alignment, then specifying @code{aligned(16)} ...@@ -6250,14 +6297,6 @@ up to a maximum of 8-byte alignment, then specifying @code{aligned(16)}
in an @code{__attribute__} still only provides you with 8-byte in an @code{__attribute__} still only provides you with 8-byte
alignment. See your linker documentation for further information. alignment. See your linker documentation for further information.
@item packed
@cindex @code{packed} type attribute
This attribute, attached to @code{struct} or @code{union} type
definition, specifies that each member (other than zero-width bit-fields)
of the structure or union is placed to minimize the memory required. When
attached to an @code{enum} definition, it indicates that the smallest
integral type should be used.
@opindex fshort-enums @opindex fshort-enums
Specifying this attribute for @code{struct} and @code{union} types is Specifying this attribute for @code{struct} and @code{union} types is
equivalent to specifying the @code{packed} attribute on each of the equivalent to specifying the @code{packed} attribute on each of the
...@@ -6289,78 +6328,38 @@ You may only specify this attribute on the definition of an @code{enum}, ...@@ -6289,78 +6328,38 @@ You may only specify this attribute on the definition of an @code{enum},
@code{struct} or @code{union}, not on a @code{typedef} that does not @code{struct} or @code{union}, not on a @code{typedef} that does not
also define the enumerated type, structure or union. also define the enumerated type, structure or union.
@item transparent_union @item bnd_variable_size
@cindex @code{transparent_union} type attribute @cindex @code{bnd_variable_size} type attribute
@cindex Pointer Bounds Checker attributes
This attribute, attached to a @code{union} type definition, indicates When applied to a structure field, this attribute tells Pointer
that any function parameter having that union type causes calls to that Bounds Checker that the size of this field should not be computed
function to be treated in a special way. using static type information. It may be used to mark variably-sized
static array fields placed at the end of a structure.
First, the argument corresponding to a transparent union type can be of
any type in the union; no cast is required. Also, if the union contains
a pointer type, the corresponding argument can be a null pointer
constant or a void pointer expression; and if the union contains a void
pointer type, the corresponding argument can be any pointer expression.
If the union member type is a pointer, qualifiers like @code{const} on
the referenced type must be respected, just as with normal pointer
conversions.
Second, the argument is passed to the function using the calling
conventions of the first member of the transparent union, not the calling
conventions of the union itself. All members of the union must have the
same machine representation; this is necessary for this argument passing
to work properly.
Transparent unions are designed for library functions that have multiple
interfaces for compatibility reasons. For example, suppose the
@code{wait} function must accept either a value of type @code{int *} to
comply with POSIX, or a value of type @code{union wait *} to comply with
the 4.1BSD interface. If @code{wait}'s parameter were @code{void *},
@code{wait} would accept both kinds of arguments, but it would also
accept any other pointer type and this would make argument type checking
less useful. Instead, @code{<sys/wait.h>} might define the interface
as follows:
@smallexample
typedef union __attribute__ ((__transparent_union__))
@{
int *__ip;
union wait *__up;
@} wait_status_ptr_t;
pid_t wait (wait_status_ptr_t);
@end smallexample
@noindent
This interface allows either @code{int *} or @code{union wait *}
arguments to be passed, using the @code{int *} calling convention.
The program can call @code{wait} with arguments of either type:
@smallexample @smallexample
int w1 () @{ int w; return wait (&w); @} struct S
int w2 () @{ union wait w; return wait (&w); @} @{
int size;
char data[1];
@}
S *p = (S *)malloc (sizeof(S) + 100);
p->data[10] = 0; //Bounds violation
@end smallexample @end smallexample
@noindent @noindent
With this interface, @code{wait}'s implementation might look like this: By using an attribute for the field we may avoid unwanted bound
violation checks:
@smallexample @smallexample
pid_t wait (wait_status_ptr_t p) struct S
@{ @{
return waitpid (-1, p.__ip, 0); int size;
char data[1] __attribute__((bnd_variable_size));
@} @}
S *p = (S *)malloc (sizeof(S) + 100);
p->data[10] = 0; //OK
@end smallexample @end smallexample
@item unused
@cindex @code{unused} type attribute
When attached to a type (including a @code{union} or a @code{struct}),
this attribute means that variables of that type are meant to appear
possibly unused. GCC does not produce a warning for any variables of
that type, even if the variable appears to do nothing. This is often
the case with lock or thread classes, which are usually defined and then
not referenced, but contain constructors and destructors that have
nontrivial bookkeeping functions.
@item deprecated @item deprecated
@itemx deprecated (@var{msg}) @itemx deprecated (@var{msg})
@cindex @code{deprecated} type attribute @cindex @code{deprecated} type attribute
...@@ -6394,6 +6393,18 @@ present. ...@@ -6394,6 +6393,18 @@ present.
The @code{deprecated} attribute can also be used for functions and The @code{deprecated} attribute can also be used for functions and
variables (@pxref{Function Attributes}, @pxref{Variable Attributes}.) variables (@pxref{Function Attributes}, @pxref{Variable Attributes}.)
@item designated_init
@cindex @code{designated_init} type attribute
This attribute may only be applied to structure types. It indicates
that any initialization of an object of this type must use designated
initializers rather than positional initializers. The intent of this
attribute is to allow the programmer to indicate that a structure's
layout may change, and that therefore relying on positional
initialization will result in future breakage.
GCC emits warnings based on this attribute by default; use
@option{-Wno-designated-init} to suppress them.
@item may_alias @item may_alias
@cindex @code{may_alias} type attribute @cindex @code{may_alias} type attribute
Accesses through pointers to types with this attribute are not subject Accesses through pointers to types with this attribute are not subject
...@@ -6435,70 +6446,107 @@ declaration, the above program would abort when compiled with ...@@ -6435,70 +6446,107 @@ declaration, the above program would abort when compiled with
@option{-fstrict-aliasing}, which is on by default at @option{-O2} or @option{-fstrict-aliasing}, which is on by default at @option{-O2} or
above. above.
@item visibility @item packed
@cindex @code{visibility} type attribute @cindex @code{packed} type attribute
In C++, attribute visibility (@pxref{Function Attributes}) can also be This attribute, attached to @code{struct} or @code{union} type
applied to class, struct, union and enum types. Unlike other type definition, specifies that each member (other than zero-width bit-fields)
attributes, the attribute must appear between the initial keyword and of the structure or union is placed to minimize the memory required. When
the name of the type; it cannot appear after the body of the type. attached to an @code{enum} definition, it indicates that the smallest
integral type should be used.
Note that the type visibility is applied to vague linkage entities @item transparent_union
associated with the class (vtable, typeinfo node, etc.). In @cindex @code{transparent_union} type attribute
particular, if a class is thrown as an exception in one shared object
and caught in another, the class must have default visibility.
Otherwise the two shared objects are unable to use the same
typeinfo node and exception handling will break.
@item designated_init This attribute, attached to a @code{union} type definition, indicates
@cindex @code{designated_init} type attribute that any function parameter having that union type causes calls to that
This attribute may only be applied to structure types. It indicates function to be treated in a special way.
that any initialization of an object of this type must use designated
initializers rather than positional initializers. The intent of this
attribute is to allow the programmer to indicate that a structure's
layout may change, and that therefore relying on positional
initialization will result in future breakage.
GCC emits warnings based on this attribute by default; use First, the argument corresponding to a transparent union type can be of
@option{-Wno-designated-init} to suppress them. any type in the union; no cast is required. Also, if the union contains
a pointer type, the corresponding argument can be a null pointer
constant or a void pointer expression; and if the union contains a void
pointer type, the corresponding argument can be any pointer expression.
If the union member type is a pointer, qualifiers like @code{const} on
the referenced type must be respected, just as with normal pointer
conversions.
@item bnd_variable_size Second, the argument is passed to the function using the calling
@cindex @code{bnd_variable_size} type attribute conventions of the first member of the transparent union, not the calling
@cindex Pointer Bounds Checker attributes conventions of the union itself. All members of the union must have the
When applied to a structure field, this attribute tells Pointer same machine representation; this is necessary for this argument passing
Bounds Checker that the size of this field should not be computed to work properly.
using static type information. It may be used to mark variably-sized
static array fields placed at the end of a structure. Transparent unions are designed for library functions that have multiple
interfaces for compatibility reasons. For example, suppose the
@code{wait} function must accept either a value of type @code{int *} to
comply with POSIX, or a value of type @code{union wait *} to comply with
the 4.1BSD interface. If @code{wait}'s parameter were @code{void *},
@code{wait} would accept both kinds of arguments, but it would also
accept any other pointer type and this would make argument type checking
less useful. Instead, @code{<sys/wait.h>} might define the interface
as follows:
@smallexample @smallexample
struct S typedef union __attribute__ ((__transparent_union__))
@{ @{
int size; int *__ip;
char data[1]; union wait *__up;
@} @} wait_status_ptr_t;
S *p = (S *)malloc (sizeof(S) + 100);
p->data[10] = 0; //Bounds violation pid_t wait (wait_status_ptr_t);
@end smallexample @end smallexample
@noindent @noindent
By using an attribute for the field we may avoid unwanted bound This interface allows either @code{int *} or @code{union wait *}
violation checks: arguments to be passed, using the @code{int *} calling convention.
The program can call @code{wait} with arguments of either type:
@smallexample @smallexample
struct S int w1 () @{ int w; return wait (&w); @}
int w2 () @{ union wait w; return wait (&w); @}
@end smallexample
@noindent
With this interface, @code{wait}'s implementation might look like this:
@smallexample
pid_t wait (wait_status_ptr_t p)
@{ @{
int size; return waitpid (-1, p.__ip, 0);
char data[1] __attribute__((bnd_variable_size));
@} @}
S *p = (S *)malloc (sizeof(S) + 100);
p->data[10] = 0; //OK
@end smallexample @end smallexample
@item unused
@cindex @code{unused} type attribute
When attached to a type (including a @code{union} or a @code{struct}),
this attribute means that variables of that type are meant to appear
possibly unused. GCC does not produce a warning for any variables of
that type, even if the variable appears to do nothing. This is often
the case with lock or thread classes, which are usually defined and then
not referenced, but contain constructors and destructors that have
nontrivial bookkeeping functions.
@item visibility
@cindex @code{visibility} type attribute
In C++, attribute visibility (@pxref{Function Attributes}) can also be
applied to class, struct, union and enum types. Unlike other type
attributes, the attribute must appear between the initial keyword and
the name of the type; it cannot appear after the body of the type.
Note that the type visibility is applied to vague linkage entities
associated with the class (vtable, typeinfo node, etc.). In
particular, if a class is thrown as an exception in one shared object
and caught in another, the class must have default visibility.
Otherwise the two shared objects are unable to use the same
typeinfo node and exception handling will break.
@end table @end table
To specify multiple attributes, separate them by commas within the To specify multiple attributes, separate them by commas within the
double parentheses: for example, @samp{__attribute__ ((aligned (16), double parentheses: for example, @samp{__attribute__ ((aligned (16),
packed))}. packed))}.
@node ARM Type Attributes
@subsection ARM Type Attributes @subsection ARM Type Attributes
@cindex @code{notshared} type attribute, ARM @cindex @code{notshared} type attribute, ARM
...@@ -6524,7 +6572,7 @@ virtual table for @code{C} is not exported. (You can use ...@@ -6524,7 +6572,7 @@ virtual table for @code{C} is not exported. (You can use
@code{__attribute__} instead of @code{__declspec} if you prefer, but @code{__attribute__} instead of @code{__declspec} if you prefer, but
most Symbian OS code uses @code{__declspec}.) most Symbian OS code uses @code{__declspec}.)
@anchor{MeP Type Attributes} @node MeP Type Attributes
@subsection MeP Type Attributes @subsection MeP Type Attributes
@cindex @code{based} type attribute, MeP @cindex @code{based} type attribute, MeP
...@@ -6536,7 +6584,7 @@ Specifically, the @code{based}, @code{tiny}, @code{near}, and ...@@ -6536,7 +6584,7 @@ Specifically, the @code{based}, @code{tiny}, @code{near}, and
@code{far} attributes may be applied to either. The @code{io} and @code{far} attributes may be applied to either. The @code{io} and
@code{cb} attributes may not be applied to types. @code{cb} attributes may not be applied to types.
@anchor{PowerPC Type Attributes} @node PowerPC Type Attributes
@subsection PowerPC Type Attributes @subsection PowerPC Type Attributes
Three attributes currently are defined for PowerPC configurations: Three attributes currently are defined for PowerPC configurations:
...@@ -6563,7 +6611,7 @@ __attribute__((altivec(bool__))) unsigned ...@@ -6563,7 +6611,7 @@ __attribute__((altivec(bool__))) unsigned
These attributes mainly are intended to support the @code{__vector}, These attributes mainly are intended to support the @code{__vector},
@code{__pixel}, and @code{__bool} AltiVec keywords. @code{__pixel}, and @code{__bool} AltiVec keywords.
@anchor{SPU Type Attributes} @node SPU Type Attributes
@subsection SPU Type Attributes @subsection SPU Type Attributes
@cindex @code{spu_vector} type attribute, SPU @cindex @code{spu_vector} type attribute, SPU
...@@ -6572,7 +6620,7 @@ allows one to declare vector data types supported by the Sony/Toshiba/IBM SPU ...@@ -6572,7 +6620,7 @@ allows one to declare vector data types supported by the Sony/Toshiba/IBM SPU
Language Extensions Specification. It is intended to support the Language Extensions Specification. It is intended to support the
@code{__vector} keyword. @code{__vector} keyword.
@anchor{x86 Type Attributes} @node x86 Type Attributes
@subsection x86 Type Attributes @subsection x86 Type Attributes
Two attributes are currently defined for x86 configurations: Two attributes are currently defined for x86 configurations:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment