Problem report: Struct aliasing problem causes Thread_Ready_Chain corruption in 4.6.99.3

Kim Barrett 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 6.5.2.3 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 mailing list