[Bug middle-end/44852] New: [4.6 Regression]: miscompilation of newlib dtoa.c after mem-ref2 merge

hp at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Wed Jul 7 03:39:00 GMT 2010


Revision 161654 compiles the attached test-case correctly at -O2.
Revision 161655 does not (except at -O0).

I guess the bug is apparent for other targets too, but I haven't checked.

Note for cris-elf this bb, correctly compiled (path for *s = '0' to sf return):
.L7:
        move.b 48,$r13
        move.b $r13,[$r11]
        addq 1,$r13
        ret
        move.b $r13,[$r9]

and incorrectly:
.L7:
        move.b 48,$r9
        move.b $r9,[$r10-1]
        addq 10,$r9
        move.b $r9,[$r10-1]
        ret
        nop

(storing '0' and then adding 10 to it, making ':')

The test-case is distilled from newlib/libc/stdlib/dtoa.c, where the bug causes
a store of ':' directly, without bothering to first store '0' :) but apparently
the same bug.

The miscompilation is exposed as regressions in three fortran test-cases from
r161655 and on, up to and including at least r161893:

Running /tmp/regress-0630-55/gcc/gcc/testsuite/gfortran.dg/dg.exp ...
... (non-regressions elided)
FAIL: gfortran.dg/edit_real_1.f90  -O0  execution test
FAIL: gfortran.dg/edit_real_1.f90  -O1  execution test
FAIL: gfortran.dg/edit_real_1.f90  -O2  execution test
FAIL: gfortran.dg/edit_real_1.f90  -O3 -fomit-frame-pointer  execution test
FAIL: gfortran.dg/edit_real_1.f90  -O3 -fomit-frame-pointer -funroll-loops 
execution test
FAIL: gfortran.dg/edit_real_1.f90  -O3 -fomit-frame-pointer -funroll-all-loops
-finline-functions  execution test
FAIL: gfortran.dg/edit_real_1.f90  -O3 -g  execution test
FAIL: gfortran.dg/edit_real_1.f90  -Os  execution test
FAIL: gfortran.dg/fmt_float.f90  -O0  output pattern test, is            
0.10E+01            0.10E+00            0.:0E\
(...verbosity elided but note the ":"; there's a "1" expected there)
FAIL: gfortran.dg/fmt_float.f90  -O1  output pattern test, is            
0.10E+01            0.10E+00            0.:0E\
(...further similar fmt_float results elided)
FAIL: gfortran.dg/fmt_zero_precision.f90  -O0  output pattern test, is  1.<
(...verbosity elided)
FAIL: gfortran.dg/fmt_zero_precision.f90  -O1  output pattern test, is  1.<
(...further similar fmt_zero_precision results elided)


-- 
           Summary: [4.6 Regression]: miscompilation of newlib dtoa.c after
                    mem-ref2 merge
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: hp at gcc dot gnu dot org
  GCC host triplet: x86_64-linux
GCC target triplet: cris-elf


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



More information about the Gcc-bugs mailing list