>>> On 3/21/2013 at 12:20 AM, in message <[email protected]>,
Michael Brown <[email protected]> wrote: 
> On 20/03/13 08:34, Bo Yang wrote: 
> > Signed-off-by: Bo Yang<[email protected]> 
> > --- 
> >   src/arch/i386/include/bits/byteswap.h |    4 ++-- 
> >   1 files changed, 2 insertions(+), 2 deletions(-) 
> > 
> > diff --git a/src/arch/i386/include/bits/byteswap.h  
> b/src/arch/i386/include/bits/byteswap.h 
> > index f3d30a2..0d9cb96 100644 
> > --- a/src/arch/i386/include/bits/byteswap.h 
> > +++ b/src/arch/i386/include/bits/byteswap.h 
> > @@ -53,8 +53,8 @@ __bswap_variable_64 ( uint64_t x ) { 
> >   static inline __attribute__ (( always_inline )) void 
> >   __bswap_64s ( uint64_t *x ) { 
> >     struct { 
> > -           uint32_t low; 
> > -           uint32_t high; 
> > +           uint32_t __attribute__ (( may_alias )) low; 
> > +           uint32_t __attribute__ (( may_alias )) high; 
> >     } __attribute__ (( may_alias )) *dwords = ( ( void * ) x ); 
> >     uint32_t discard; 
>  
> I'm puzzled by this; as far as I know, the may_alias which is already  
> present on the structure type should be sufficient.  I have tested gcc  
> versions 4.3.0, 4.3.1, 4.3.2, 4.3.3, 4.3.4 and 4.3.5 (using the GCC  
> compile farm) and have not been able to reproduce any problem with the  
> original, unmodified code. 
>  
> Could you let me know precisely which gcc version is causing problems,  
> and what the error message is? 

I am sorry that I missed the architecture. gcc 4.3 on x86. My testing
uses gcc 4.3.4 on x86 system(SLES11SP2).

I don't understand this either. :( It looks like that the 32-bit gcc 4.3 does 
some optimization and checks into the structure. Here is the message:


arch/i386/include/bits/byteswap.h:61: error: likely type-punning may break 
strict-aliasing rules: object ‘*{unknown}’ of main type ‘unsigned int’ is 
referenced at or around arch/i386/include/bits/byteswap.h:61 and may be aliased 
to object ‘test64’ of main type ‘long long unsigned int’ which is referenced at 
or around tests/byteswap_test.c:83.
arch/i386/include/bits/byteswap.h:61: error: likely type-punning may break 
strict-aliasing rules: object ‘*{unknown}’ of main type ‘unsigned int’ is 
referenced at or around arch/i386/include/bits/byteswap.h:61 and may be aliased 
to object ‘test64’ of main type ‘long long unsigned int’ which is referenced at 
or around tests/byteswap_test.c:83.

Thanks!

>  
> Thanks, 
>  
> Michael 
>  
>  

_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to