diff options
author | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-25 22:11:16 +0000 |
---|---|---|
committer | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-12-25 22:11:16 +0000 |
commit | 49bbaf357ce357b961ee699141ae197302ca42ff (patch) | |
tree | d25ef69d03aac5fc041242a79c04c1cde4b3a5d1 /libgfortran | |
parent | 5da54e196d3e1680f2c2be8ff3041dbc1575e858 (diff) | |
download | gcc-49bbaf357ce357b961ee699141ae197302ca42ff.tar.gz |
PR fortran/55539 Fix regression in -fno-sign-zero.
libgfortran ChangeLog:
2012-12-26 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/55539
* io/write_float.def (output_float): Take into account decimal dot.
testsuite ChangeLog:
2012-12-26 Janne Blomqvist <jb@gcc.gnu.org>
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
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 6 | ||||
-rw-r--r-- | libgfortran/io/write_float.def | 9 |
2 files changed, 12 insertions, 3 deletions
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 <jb@gcc.gnu.org> + + PR fortran/55539 + * io/write_float.def (output_float): Take into account decimal + dot. + 2012-12-21 Thomas Koenig <tkoenig@gcc.gnu.org> 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 |