Commit 917db97b by Hans-Peter Nilsson Committed by Hans-Peter Nilsson

invoke.texi (Optimize Options): Add anchor for the type-punning blurb.

	* doc/invoke.texi (Optimize Options) <fstrict-aliasing>: Add
	anchor for the type-punning blurb.  Cross-reference "Structures
	unions enumerations and bit-fields implementation".  Provide a
	cast-through-pointer example.  Make final sentence self-contained.
	* doc/implement-c.texi (Structures unions enumerations and
	bit-fields implementation): Cross-reference the type-punning blurb
	in the -fstrict-aliasing documentation.

From-SVN: r137095
parent 9af5483a
2008-06-25 Hans-Peter Nilsson <hp@axis.com>
* doc/invoke.texi (Optimize Options) <fstrict-aliasing>: Add
anchor for the type-punning blurb. Cross-reference "Structures
unions enumerations and bit-fields implementation". Provide a
cast-through-pointer example. Make final sentence self-contained.
* doc/implement-c.texi (Structures unions enumerations and
bit-fields implementation): Cross-reference the type-punning blurb
in the -fstrict-aliasing documentation.
2008-06-24 Andrew Pinski <andrew_pinski@playstation.sony.com> 2008-06-24 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR middle-end/36594 PR middle-end/36594
......
...@@ -433,8 +433,8 @@ used to determine if a function has not been inlined and why not. ...@@ -433,8 +433,8 @@ used to determine if a function has not been inlined and why not.
different type (C90 6.3.2.3).} different type (C90 6.3.2.3).}
The relevant bytes of the representation of the object are treated as The relevant bytes of the representation of the object are treated as
an object of the type used for the access. This may be a trap an object of the type used for the access. @xref{Type-punning}. This
representation. may be a trap representation.
@item @item
@cite{Whether a ``plain'' @code{int} bit-field is treated as a @cite{Whether a ``plain'' @code{int} bit-field is treated as a
......
...@@ -6146,7 +6146,7 @@ example, an @code{unsigned int} can alias an @code{int}, but not a ...@@ -6146,7 +6146,7 @@ example, an @code{unsigned int} can alias an @code{int}, but not a
@code{void*} or a @code{double}. A character type may alias any other @code{void*} or a @code{double}. A character type may alias any other
type. type.
Pay special attention to code like this: @anchor{Type-punning}Pay special attention to code like this:
@smallexample @smallexample
union a_union @{ union a_union @{
int i; int i;
...@@ -6163,7 +6163,8 @@ The practice of reading from a different union member than the one most ...@@ -6163,7 +6163,8 @@ The practice of reading from a different union member than the one most
recently written to (called ``type-punning'') is common. Even with recently written to (called ``type-punning'') is common. Even with
@option{-fstrict-aliasing}, type-punning is allowed, provided the memory @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
is accessed through the union type. So, the code above will work as is accessed through the union type. So, the code above will work as
expected. However, this code might not: expected. @xref{Structures unions enumerations and bit-fields
implementation}. However, this code might not:
@smallexample @smallexample
int f() @{ int f() @{
a_union t; a_union t;
...@@ -6174,7 +6175,18 @@ int f() @{ ...@@ -6174,7 +6175,18 @@ int f() @{
@} @}
@end smallexample @end smallexample
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}. Similarly, access by taking the address, casting the resulting pointer
and dereferencing the result has undefined behavior, even if the cast
uses a union type, e.g.:
@smallexample
int f() @{
double d = 3.0;
return ((union a_union *) &d)->i;
@}
@end smallexample
The @option{-fstrict-aliasing} option is enabled at levels
@option{-O2}, @option{-O3}, @option{-Os}.
@item -fstrict-overflow @item -fstrict-overflow
@opindex fstrict-overflow @opindex fstrict-overflow
......
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