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>
PR middle-end/36594
......
......@@ -433,8 +433,8 @@ used to determine if a function has not been inlined and why not.
different type (C90 6.3.2.3).}
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
representation.
an object of the type used for the access. @xref{Type-punning}. This
may be a trap representation.
@item
@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
@code{void*} or a @code{double}. A character type may alias any other
type.
Pay special attention to code like this:
@anchor{Type-punning}Pay special attention to code like this:
@smallexample
union a_union @{
int i;
......@@ -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
@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
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
int f() @{
a_union t;
......@@ -6174,7 +6175,18 @@ int f() @{
@}
@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
@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