$ gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with:
/var/tmp/portage/sys-devel/gcc-4.4.0_pre9999/work/gcc-4.4.0-9999/configure
--prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.4.0-pre9999
--includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.4.0-pre9999/include
--datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.4.0-pre9999
--mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.4.0-pre9999/man
--infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.4.0-pre9999/info
--with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.4.0-pre9999/include/g++-v4
--host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec
--disable-fixed-point --enable-nls --without-included-gettext
--with-system-zlib --disable-checking --disable-werror --enable-secureplt
--disable-multilib --enable-libmudflap --disable-libssp --disable-libgomp
--enable-cld --disable-libgcj --with-arch=i686 --enable-languages=c,c++
--enable-shared --enable-threads=posix --enable-__cxa_atexit
--enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion=
Thread model: posix
gcc version 4.4.0-pre9999 built 20090310 (Gentoo SVN ebuild) rev. 144732 () 

The command to trigger the bug:
gcc prdtoa.i -g -c -O2

The symptom of the bug:
In the output of objdump -S -l prdtoa.o
/tmp/prdtoa.c:1837
#endif
    /* rv = */ rounded_product(dval(rv), tens[e]);
    goto ret;
#endif
    }
  i = DBL_DIG - nd;
These 6 lines of code only generate one instruction
25de:       ba 25 00 00 00          mov    $0x25,%edx

If use gcc 4.3.3, the output is like this:
/tmp/prdtoa.c:1833
                                if (sign) {
                                        rv = -rv;
                                        sign = 0;
                                        }
#endif
                                /* rv = */ rounded_product(dval(rv), tens[e]);
    284e:       8b 5d 90                mov    -0x70(%ebp),%ebx
    2851:       dd 45 d0                fldl   -0x30(%ebp)
    2854:       dc 0c dd e0 00 00 00    fmull  0xe0(,%ebx,8)
    285b:       8b 5d 98                mov    -0x68(%ebp),%ebx
    285e:       e9 cd fd ff ff          jmp    2630 <PR_strtod+0x210>
    2863:       90                      nop    
    2864:       8d 74 26 00             lea    0x0(%esi,%eiz,1),%esi

The impact of this bug:
prdtoa.c is from NSPR, NetScape Portable Runtime, which is used by firefox.
This bug will cause font size of certain tags become extremely large because of
the abnormal behavior of function PR_strtod. For example, given "1.5" as a
parameter, PR_strtod will return 15.0. I found this when trying firefox on N32
ABI Loongson system. Since Loongson specific support only avaiable in gcc 4.4.

Will post the prdtoa.i soon.


-- 
           Summary: [4.4 Regression] code mistakenly optimized out when -O2
                    is enabled
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: regression
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: r0bertz at gentoo 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=39418

Reply via email to