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]
Other format: [Raw text]

g++ optimization bug version 4.2.3 and version 4.1.3


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

root@edubuntu:/home/junk/prog# g++ bug_gccopt.cpp -O2
root@edubuntu:/home/junk/prog# ./a.out
1
10000000000000333
3135439247023686131
root@edubuntu:/home/junk/prog# g++ bug_gccopt.cpp
root@edubuntu:/home/junk/prog# ./a.out
1
10000000000000333
4511787964595
root@edubuntu:/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.




junk@edubuntu:~/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)
junk@edubuntu:~/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)
junk@edubuntu:~/prog$

Attachment: bug_gccopt.cpp
Description: Binary data


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