8<------------
#include <iostream>

double foo(unsigned nb) {
  /* volatile */ double sum = 0.9;
  for (unsigned i=0; i<nb;++i) sum+=0.1;
  return sum;
}

int main() {
  double old = 1.0;
  double diff = old - foo(1);
  std::cout << diff << std::endl;
}
8<------------

g++-3.3.4 foo.cpp
RESULT 0
g++-3.3.4 -O foo.cpp
RESULT -2.77556e-17
http://gcc.gnu.org/onlinedocs/gcc-3.3.4/gcc/Optimize-Options.html#Optimize%20Options
(-O equivalent to 10 or 11 options)
g++-3.3.4 -fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize
-fcrossjumping -fif-conversion -fif-conversion2 -fdelayed-branch
-fguess-branch-probability -fcprop-registers (-fomit-frame-pointer) foo.cpp
RESULT 0

g++-3.4.2 foo.cpp
RESULT 0
g++-3.4.2 -O foo.cpp
RESULT -2.77556e-17
http://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/Optimize-Options.html#Optimize-Options
(-O equivalent to 9 or 10 options)
g++-3.4 -fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize 
-fif-conversion -fif-conversion2 -fdelayed-branch -fguess-branch-probability
-fcprop-registers (-fomit-frame-pointer) foo.cpp
RESULT 0

With volatile "sum" or -ffloat-store, RESULT 0.

-- 
           Summary: Wrong "-O" description in manual ?
           Product: gcc
           Version: 3.4.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: benoit dot sibaud at rd dot francetelecom dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to