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