Both of these are undefined. Look up about sequence point rules.
Sent from my iPhone
On Jun 7, 2009, at 12:15 AM, "ashutosh dot sharma dot 0204 at gmail
dot com" <gcc-bugzi...@gcc.gnu.org> wrote:
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