This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: help interpreting gcc 4.1.1 optimisation bug


On Mon, Jun 12, 2006 at 01:40:18PM +0100, Andrew Haley wrote:
> andrew@walrond.org writes:
>  > On Mon, Jun 12, 2006 at 12:30:50PM +0000, andrew@walrond.org wrote:
>  > > On Mon, Jun 12, 2006 at 02:21:21PM +0200, Richard Guenther wrote:
>  > > > On 6/12/06, andrew@walrond.org <andrew@walrond.org> wrote:
>  > > > >On Mon, Jun 12, 2006 at 01:01:47PM +0100, Andrew Haley wrote:
>  > > > >>
>  > > > >> I'm starting to be a little suspicious about host2little().  I wonder
>  > > > >> if that's well-defined.
>  > > > >>
>  > > > >> I'm just guessing here becasue I can't see the code.  Is it possible
>  > > > >
>  > > > >    template<typename T> T swap_endian(T x)
>  > > > >    {
>  > > > >        char* a = reinterpret_cast<char*>(&x);
>  > > > >        char* b = a + sizeof(T) - 1;
>  > > > >        while (a<b) {
>  > > > >            char tmp = *a;
>  > > > >            *a++ = *b;
>  > > > >            *b-- = tmp;
>  > > > >        }
>  > > > >        return x;
>  > > > >    }
>  > > > >
>  > > > >    template<typename T> T host2little(T x)
>  > > > >    {
>  > > > >        unsigned u = 1; return (*reinterpret_cast<char*>(&u) ? x : 
>  > > > >        swap_endian(x));
>  > > > >    }
>  > > > 
>  > > > You are violating aliasing rules.  Try -fno-strict-aliasing, which
>  > > > should make the code
>  > > > work, or fix it.
>  > > 
>  > > Hmmm - don't grok; I'll do some googling. Compiling now with
>  > > -fno-strict-aliasing, but the manual says -O2 includes
>  > > -strict-aliasing, so what gives?
>  > 
>  > Indeed, -fno-strict-aliasing makes no difference; its still broken.
>  
> Well, that is interesting!  I think both Richard Guenther and I both
> thought you had an aliasing problem somewhere: all those pointer casts
> are something of a red flag...

Well, my point above was that -strict-aliasing is included in -O2 and
my code works fine at -O2. Only -O3 causes problems, so I didn't expect
-fno-strict-aliasing to make any difference.

> 
> OK, well, we're stuck until you can make a test case.
> 

Oh well. brute force it is then ;)

I'll be back with test case asap. Thanks for comments!

> Andrew.
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]