From 49bbaf357ce357b961ee699141ae197302ca42ff Mon Sep 17 00:00:00 2001 From: jb Date: Tue, 25 Dec 2012 22:11:16 +0000 Subject: 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194717 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgfortran/ChangeLog | 6 ++++++ libgfortran/io/write_float.def | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'libgfortran') diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 566a24bd55b..debd88c8f4f 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 6521f3c0623..1e30dde29ce 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 -- cgit v1.2.1