From dcdeec06a01f230623864bbfa564c71d9f11f201 Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <coudert@clipper.ens.fr>
Date: Wed, 16 Mar 2005 19:09:03 +0100
Subject: [PATCH] write.c (output_float): special check when writing 0.0 with
 EN and ES formats.

        * write.c (output_float): special check when writing 0.0 with
          EN and ES formats.

        * pr20480.f90: New test.

From-SVN: r96566
---
 gcc/testsuite/ChangeLog               | 5 +++++
 gcc/testsuite/gfortran.dg/pr20480.f90 | 9 +++++++++
 libgfortran/ChangeLog                 | 6 ++++++
 libgfortran/io/write.c                | 6 ++++--
 4 files changed, 24 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr20480.f90

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 466b77e98168..e3e9cec70b99 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-03-16  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+	PR libfortran/20480
+	* pr20480.f90: New test.
+
 2005-03-16  Richard Henderson  <rth@redhat.com>
 
 	PR middle-end/15700
diff --git a/gcc/testsuite/gfortran.dg/pr20480.f90 b/gcc/testsuite/gfortran.dg/pr20480.f90
new file mode 100644
index 000000000000..12e53009d916
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr20480.f90
@@ -0,0 +1,9 @@
+! { dg-do run }
+! PR libfortran/20480
+! fxcoudert@gcc.gnu.org
+  character(len=80) c
+  write (c,'(ES12.3)') 0.0
+  if (trim(adjustl(c)) .ne. '0.000E+00') call abort ()
+  write (c,'(EN12.3)') 0.0
+  if (trim(adjustl(c)) .ne. '0.000E+00') call abort ()
+  end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index ac7e067e5c90..43a2d9d39fb4 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-16  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+	PR libfortran/20480
+	* write.c (output_float): special check when writing 0.0 with
+	  EN and ES formats.
+
 2005-03-11  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
 	PR libfortran/20124
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 9c255d7d69ee..88e5280b3383 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -411,7 +411,8 @@ output_float (fnode *f, double value, int len)
     case FMT_EN:
       /* The exponent must be a multiple of three, with 1-3 digits before
 	 the decimal point.  */
-      e--;
+      if (value != 0.0)
+        e--;
       if (e >= 0)
 	nbefore = e % 3;
       else
@@ -428,7 +429,8 @@ output_float (fnode *f, double value, int len)
       break;
 
     case FMT_ES:
-      e--;
+      if (value != 0.0)
+        e--;
       nbefore = 1;
       nzero = 0;
       nafter = d;
-- 
GitLab