-fno-strict-aliasing in CWARNFLAGS?
sandmann at daimi.au.dk
Wed Feb 3 10:55:22 PST 2010
Dan Nicholson <dbn.lists at gmail.com> writes:
> Here's one link:
> > Traditionally, -fno-strict-aliasing was definitely necessary for the X
> > server and/or some drivers to work correctly.
> I know in mesa it's been required. Here are two bugs fixed/worked
> around by -fno-strict-aliasing.
I recently turned it on in pixman because completely reasonable code
pixman_contract (uint32_t * dst,
const uint64_t *src,
/* Start at the beginning so that we can do the contraction in
* place when src == dst
for (i = 0; i < width; i++)
const uint8_t a = src[i] >> 56,
r = src[i] >> 40,
g = src[i] >> 24,
b = src[i] >> 8;
dst[i] = a << 24 | r << 16 | g << 8 | b;
is actually illegal under the C aliasing rules, and GCC can and will
break it unless you use -fno-strict-aliasing. I don't think any other
compiler makes use of type based aliasing, perhaps because they
rightly - consider the standard broken.
More information about the xorg-devel