From: Hans-Peter Nilsson Date: Wed, 25 Jun 2008 01:36:58 +0000 (+0000) Subject: invoke.texi (Optimize Options): Add anchor for the type-punning blurb. X-Git-Tag: releases/gcc-4.4.0~4172 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=917db97b023775f3031e99040ed9d058ffdcbd21;p=thirdparty%2Fgcc.git invoke.texi (Optimize Options): Add anchor for the type-punning blurb. * doc/invoke.texi (Optimize Options) : 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c68706eeb9b3..90b7966ca6a1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2008-06-25 Hans-Peter Nilsson + + * doc/invoke.texi (Optimize Options) : 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 PR middle-end/36594 diff --git a/gcc/doc/implement-c.texi b/gcc/doc/implement-c.texi index b7d34ee290c8..6a1b59b7e85c 100644 --- a/gcc/doc/implement-c.texi +++ b/gcc/doc/implement-c.texi @@ -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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index fd438122f5bc..f69f0019decf 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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