Hi,
When i run with the options g++ prog.c -o prog and run the exectuable it gives me the correct output but when i do g++ prog.c -o prog -O2 i get the wrong output The inputs are below [EMAIL PROTECTED]:/home/junk/prog# g++ bug_gccopt.cpp -O2 [EMAIL PROTECTED]:/home/junk/prog# ./a.out 1 10000000000000333 3135439247023686131 [EMAIL PROTECTED]:/home/junk/prog# g++ bug_gccopt.cpp [EMAIL PROTECTED]:/home/junk/prog# ./a.out 1 10000000000000333 4511787964595 [EMAIL PROTECTED]:/home/junk/prog# the file is attached. i think i know where the bug is because i did it the wrong way and then later corrected the overflow. ull is unsigned long long. for (it = pm.begin (); it != pm.end (); it++) { ull a = it->first, b = it->second; /* These lines are getting optimized and overflow is occuring */ ## ull num= (ull) (pow (( double) a, (double) b + 1) - 1); ## ull den=a-1; ## gg=gcd(num,den); ## num/=gg; ## den/=gg; numprod *=num; denprod *=den; gg = gcd (numprod, denprod); numprod /= gg; denprod /= gg; } i got the wrong result when it were (the optimized code is giving the answer when the actual code was below The result i got from the below code is the same that i get from -O2 of the above code which is resulting in overflow ) for (it = pm.begin (); it != pm.end (); it++) { ull a = it->first, b = it->second; nprod*= (ull) (pow (( double) a, (double) b + 1) - 1); denprod*=a-1; gg = gcd (numprod, denprod); numprod /= gg; denprod /= gg; } Am i doing anything wrong above ? is the typecast of ull and double wrong. [EMAIL PROTECTED]:~/prog$ g++ -v Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu Thread model: posix gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7) [EMAIL PROTECTED]:~/prog$ g++-4.1 -v Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.1.3 --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu Thread model: posix gcc version 4.1.3 20080308 (prerelease) (Ubuntu 4.1.2-21ubuntu1) [EMAIL PROTECTED]:~/prog$
bug_gccopt.cpp
Description: Binary data