mirror of git://gcc.gnu.org/git/gcc.git
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. From-SVN: r194717
This commit is contained in:
parent
e255044e71
commit
eb3119f90f
|
|
@ -1,3 +1,8 @@
|
||||||
|
2012-12-26 Janne Blomqvist <jb@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/55539
|
||||||
|
* gfortran.dg/nosigned_zero_3.f90: New testcase.
|
||||||
|
|
||||||
2012-12-23 Tobias Burnus <burnus@net-b.de>
|
2012-12-23 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR fortran/54884
|
PR fortran/54884
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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>
|
2012-12-21 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||||
|
|
||||||
PR libfortran/30162
|
PR libfortran/30162
|
||||||
|
|
|
||||||
|
|
@ -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
|
/* 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
|
all the way through the loop, we know the value is zero after the
|
||||||
rounding completed above. */
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* To format properly, we need to know if the rounded result is zero and if
|
/* 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
|
so, we set the zero_flag which may have been already set for
|
||||||
actual zero. */
|
actual zero. */
|
||||||
if (i == ndigits)
|
if (i == ndigits + hasdot)
|
||||||
{
|
{
|
||||||
zero_flag = true;
|
zero_flag = true;
|
||||||
/* The output is zero, so set the sign according to the sign bit unless
|
/* The output is zero, so set the sign according to the sign bit unless
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue