Following program works differently - if compiled with flag -g or without: -------------- #include <iostream> using namespace std;
int main(){ unsigned char a[10]; a[0] = 'A'; a[2] = 'B'; a[0] ^= a[2] ^= a[0] ^= a[2]; cout <<"a0="<<a[0]<<" a2="<<a[2]<<endl; } ============================== VITALY:/tmp>g++_4.0.2 -O3 a.cc VITALY:/tmp>./a.out a0=B a2=A VITALY:/tmp>g++_4.0.2 -g a.cc VITALY:/tmp>./a.out a0= a2=A =============================== :/tmp>g++_4.0.2 -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../gcc-4.0.2/configure --prefix=/jer/sys/contrib/linux/gcc-4.0.2_i686/ --with-static-libgcc --disable-shared -enable-languages=c,c++ Thread model: posix gcc version 4.0.2 -- Summary: A ^= B ^= A ^=B doesn't work if compiled with -g Product: gcc Version: 4.0.2 Status: UNCONFIRMED Severity: major Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: vitaly at siliconds dot com GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26060