[Bug c/40366] New: Array + XOR swap fails

ashutosh dot sharma dot 0204 at gmail dot com gcc-bugzilla@gcc.gnu.org
Sun Jun 7 07:15:00 GMT 2009


Compiler Version:
gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Sample code:

#include <stdio.h>

int main() {
        int a[2];
        a[0]=10;
        a[1]=20;
        printf("a[0] = %d a[1] = %d\n", a[0], a[1]);
        a[0]^=a[1]^=a[0]^=a[1];
        printf("a[0] = %d a[1] = %d\n", a[0], a[1]);
        return 0;
}

gcc test.c -o test -O2

a[0] = 10 a[1] = 20
a[0] = 20 a[1] = 10

gcc test.c -o test -O0

a[0] = 10 a[1] = 20
a[0] = 0 a[1] = 10

Bug: When compiled with -O0 swap fails.
Swap only fails in case of array. Following code works fine with -O0:

#include <stdio.h>

int main() {
        int a, b;
        a=10;
        b=20;
        printf("a = %d b = %d\n", a, b);
        a^=b^=a^=b;
        printf("a = %d b = %d\n", a, b);
        return 0;
}


-- 
           Summary: Array + XOR swap fails
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ashutosh dot sharma dot 0204 at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40366



More information about the Gcc-bugs mailing list