[U-Boot] [PATCH] board/flagadm/flash.c: fix compile warning

Scott Wood scottwood at freescale.com
Fri Sep 11 20:28:02 CEST 2009


Wolfgang Denk wrote:
> Dear Scott Wood,
> 
> In message <20090911163321.GB13783 at b07421-ec1.am.freescale.net> you wrote:
>>> -	ushort * d = (ushort*)&da;
>>> +	ulong *dla = &da;
>>> +	ushort *d = (ushort*)dla;
>> I don't see how this is any more legal under strict aliasing rules -- you
>> just made it a little more complicated and fooled the compiler into not
>> warning.
> 
> Hm... I apologize if I don;t understand this any better, but for me
> silencing the compiler was all that I intended at this moment ;-)

I find that ironic given the previous claim that -fno-strict-aliasing was just 
silencing warnings. :-)

Especially since that actually turned off the problematic language feature 
(which is more intended for number crunching code than device drivers).

Much like your argument in favor of leaving d-cache disabled, this is a 
bootloader -- why complicate it to deal with a fancy compiler optimization that 
isn't going to make any performance difference that matters, could break things 
even in places where GCC doesn't warn, and is easily disabled?

> Do you have any better approach?

union {
	u32 data32;
	u16 data16[2];
} data;

data.data32 = da;

if ((addr[0] & data.data16[0]) != data.data16[0] ||
     (addr[1] & data.data16[1]) != data.data16[1])
	return 2;

etc.

-Scott


More information about the U-Boot mailing list