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

Reply via email to