Tres Melton wrote:

Has anyone actually looked into why this is failing?

By the rules of Discreet Math/Boolean Algebra:

    something xor something = 0
    something_else xor 0 = something_else

        so

    valA ^ ( valA ^ valB ) = valB

If that is not working then you may have found a compiler bug (probably
in the register allocator).  The appropriate output code should resemble
this (AT&T syntax: op src, dest):

Tres,

Its not the xor thats failing. Its the cast of the LHS of the assignments.
The problem line in libast.h is:

# define BINSWAP(a, b) (((long) (a)) ^= ((long) (b)) ^= ((long) (a)) ^= ((long) (b)))


With gcc4 the following is invalid:

  int a=1, b=2;
  (long)a = (long)b;

and that is the test I proposed for configure.


I understand that this is a ISO C99 restriction and that gcc4 is just a bit more pedantic
than gcc3.

John


-------------------------------------------------------
This SF.Net email is sponsored by Yahoo.
Introducing Yahoo! Search Developer Network - Create apps using Yahoo!
Search APIs Find out how you can build Yahoo! directly into your own
Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to