From: Janne Blomqvist Date: Tue, 25 Dec 2012 22:11:16 +0000 (+0200) Subject: PR fortran/55539 Fix regression in -fno-sign-zero. X-Git-Tag: releases/gcc-4.8.0~1245 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb3119f90fb7a12cd7fe7ad83e3622a064d28ace;p=thirdparty%2Fgcc.git PR fortran/55539 Fix regression in -fno-sign-zero. libgfortran ChangeLog: 2012-12-26 Janne Blomqvist PR fortran/55539 * io/write_float.def (output_float): Take into account decimal dot. testsuite ChangeLog: 2012-12-26 Janne Blomqvist PR fortran/55539 * gfortran.dg/nosigned_zero_3.f90: New testcase. From-SVN: r194717 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8a99e06a5448..59f344106c11 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-12-26 Janne Blomqvist + + PR fortran/55539 + * gfortran.dg/nosigned_zero_3.f90: New testcase. + 2012-12-23 Tobias Burnus PR fortran/54884 diff --git a/gcc/testsuite/gfortran.dg/nosigned_zero_3.f90 b/gcc/testsuite/gfortran.dg/nosigned_zero_3.f90 new file mode 100644 index 000000000000..3f0f7101f26b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/nosigned_zero_3.f90 @@ -0,0 +1,15 @@ +! { dg-do run } +! { dg-options "-fno-sign-zero" } +! +! PR fortran/55539 +! +program nosigned_zero_3 + implicit none + character(len=20) :: s + real(4) :: x = -1.2e-3 + real(8) :: y = -1.2e-3 + write(s,'(7f10.3)') x + if (trim(adjustl(s)) /= "-0.001") call abort + write(s, '(7f10.3)') y + if (trim(adjustl(s)) /= "-0.001") call abort +end program nosigned_zero_3 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 566a24bd55bf..debd88c8f4f6 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2012-12-26 Janne Blomqvist + + PR fortran/55539 + * io/write_float.def (output_float): Take into account decimal + dot. + 2012-12-21 Thomas Koenig PR libfortran/30162 diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def index 6521f3c06232..1e30dde29ce2 100644 --- a/libgfortran/io/write_float.def +++ b/libgfortran/io/write_float.def @@ -483,16 +483,19 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, /* Scan the digits string and count the number of zeros. If we make it all the way through the loop, we know the value is zero after the rounding completed above. */ - for (i = 0; i < ndigits; i++) + int hasdot = 0; + for (i = 0; i < ndigits + hasdot; i++) { - if (digits[i] != '0' && digits[i] != '.') + if (digits[i] == '.') + hasdot = 1; + else if (digits[i] != '0') break; } /* To format properly, we need to know if the rounded result is zero and if so, we set the zero_flag which may have been already set for actual zero. */ - if (i == ndigits) + if (i == ndigits + hasdot) { zero_flag = true; /* The output is zero, so set the sign according to the sign bit unless