Problem report: Struct aliasing problem causes Thread_Ready_Chain corruption in 22.214.171.124
kab at irobot.com
Mon Dec 4 19:59:46 UTC 2006
At 8:30 AM -0800 12/4/06, Till Straumann wrote:
>While the optimization is optional, programs that violate the
>aliasing rule are unfortunately not C99 compliant - the
>standard does *not* declare this rule optional, unfortunately.
De-lurking briefly, in this very interesting discussion, to ask:
Am I confused, or is POSIX riddled with strict-aliasing violations?
I'm thinking, for example, of the struct sockaddr variants, where
one allocates space for a sockaddr_in or sockaddr_un or whatever,
but often passes it around as a (cast to) sockaddr*. While sockaddr
has a "common initial sequence" (C99 126.96.36.199 para5) with sockaddr_in
&etc, there is nothing I can find that would indicate that they are
"compatible types" (C99 6.2.7 &etc), and 6.7.7 example 2 seems to
explicitly indicate that they are not.
And since the aliasing rules are written in terms of "compatible
types", this makes me suspicious.
More information about the users