This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Bug report: in g++, -O2 only


Hello - I have seen discussions about errors induced by -O in the mailing
list; I have one minimal program that produces wrong output.  Here it is:

#include <iostream>
int main() {
  unsigned long i;
  unsigned short *p = reinterpret_cast<unsigned short *>(&i);
  *p++ = 0x1234;
  *p   = 0x5678;
  switch (i) {
    case 0x12345678: std::cout << "bigendian\n";    break;
    case 0x56781234: std::cout << "littleendian\n"; break;
    default:         std::cout << "???\n";
  }
  return 0;
}

The program is in foo.cxx.  Here is what happens:

MLO@mlinux 59 $ g++ -v
Reading specs from /usr/local/gcc/lib/gcc-lib/i686-pc-linux-gnu/2.97/specs
Configured with: ../gcc-20010205/configure --prefix=/usr/local/gcc
--enable-libstdcxx-v3
gcc version 2.97 20010205 (experimental)
MLO@mlinux 60 $ g++ -ansi -Wall -o foo foo.cxx && ./foo
littleendian
MLO@mlinux 61 $ g++ -ansi -Wall -O -o foo foo.cxx && ./foo
littleendian
MLO@mlinux 62 $ g++ -ansi -Wall -O2 -o foo foo.cxx && ./foo
???

I hope that the above bug report will be useful in your developement of
g++.

-- 
Maurizio Loreti                         http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            loreti@pd.infn.it


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]