]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
invoke.texi (Optimize Options): Add anchor for the type-punning blurb.
authorHans-Peter Nilsson <hp@axis.com>
Wed, 25 Jun 2008 01:36:58 +0000 (01:36 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Wed, 25 Jun 2008 01:36:58 +0000 (01:36 +0000)
* 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

gcc/ChangeLog
gcc/doc/implement-c.texi
gcc/doc/invoke.texi

index c68706eeb9b350aa58c62dc8f087f2730df2affc..90b7966ca6a1e6b384555a7e8be214191d9fe575 100644 (file)
@@ -1,3 +1,13 @@
+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
index b7d34ee290c82cb2a1012df55df5de4419f8cb21..6a1b59b7e85c9b9abdf2a2ddebeb576506c53960 100644 (file)
@@ -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
index fd438122f5bc7e79721a26d210b2be78346dd435..f69f0019decfdbf680ef26a91273361e7ddcdab0 100644 (file)
@@ -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