aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wainwright <prw@ceiriog1.demon.co.uk>2005-05-22 21:17:42 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2005-05-22 21:17:42 +0000
commitc220bdaec9733bbeb9bfd96dedb706db9af73338 (patch)
treed78fc134f7ad49b35645da8bf676568d8cf59dd4
parent8ba8f7e5571e59c2efeebf1b5da9f3491658a8c7 (diff)
downloadgcc-c220bdaec9733bbeb9bfd96dedb706db9af73338.zip
gcc-c220bdaec9733bbeb9bfd96dedb706db9af73338.tar.gz
gcc-c220bdaec9733bbeb9bfd96dedb706db9af73338.tar.bz2
re PR libfortran/21376 (libfortran "E" output format causes FPE)
PR libfortran/21376 * io/write.c (output_float): Rework logic to avoid call to log10 with argument equal to zero. From-SVN: r100068
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/write.c7
2 files changed, 11 insertions, 2 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 7e34ec8..0715482 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-22 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR libfortran/21376
+ * io/write.c (output_float): Rework logic to avoid call to log10
+ with argument equal to zero.
+
2005-05-21 Eric Botcazou <ebotcazou@libertysurf.fr>
* configure.ac: Check for trunc and truncf in libm.
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 36fee92..793031a 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -296,6 +296,7 @@ output_float (fnode *f, double value)
int nblanks;
int i;
sign_t sign;
+ double abslog;
ft = f->format;
w = f->u.real.w;
@@ -320,9 +321,11 @@ output_float (fnode *f, double value)
edigits = 2;
else
{
- edigits = 1 + (int) log10 (fabs(log10 (value)));
- if (edigits < 2)
+ abslog = fabs(log10 (value));
+ if (abslog < 100)
edigits = 2;
+ else
+ edigits = 1 + (int) log10 (abslog);
}
if (ft == FMT_F || ft == FMT_EN