From d8f92af2cf130270d367242c9e1ac34004e6c3bb Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <coudert@clipper.ens.fr>
Date: Sun, 27 Feb 2005 20:47:12 +0100
Subject: [PATCH] re PR libfortran/20101 (zero prints incorrectly with 1pe12.4)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

libgfortran/
2005-02-27  Fran��ois-Xavier Coudert  <coudert@clipper.ens.fr>

 PR libfortran/20101
* write.c (output_float): Adding special check for value 0.0 in
PE format.

gcc/testsuite/
2005-02-27  Fran��ois-Xavier Coudert  <coudert@clipper.ens.fr>

PR libfortran/20101
* gfortran.dg/write_0_pe_format.f90: New test.

From-SVN: r95628
---
 gcc/testsuite/ChangeLog                         | 5 +++++
 gcc/testsuite/gfortran.dg/write_0_pe_format.f90 | 9 +++++++++
 libgfortran/ChangeLog                           | 6 ++++++
 libgfortran/io/write.c                          | 3 ++-
 4 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/write_0_pe_format.f90

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aebf34b5f6ef..5c55f5ff7183 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-02-27  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+	PR libfortran/20101
+	* gfortran.dg/write_0_pe_format.f90: New test.
+
 2005-02-27  Jakub Jelinek  <jakub@redhat.com>
 
 	PR c++/20206
diff --git a/gcc/testsuite/gfortran.dg/write_0_pe_format.f90 b/gcc/testsuite/gfortran.dg/write_0_pe_format.f90
new file mode 100644
index 000000000000..3890c32ecc02
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/write_0_pe_format.f90
@@ -0,0 +1,9 @@
+! { dg-do run }
+! PR libfortran/20101
+! With format "PE", 0.0 must still have "+00" as exponent
+character(len=10) :: c1, c2
+write(c1,"(1pe9.2)") 0.0
+write(c2,"(1pe9.2)") 1.0
+if (trim(adjustl(c1)) .ne. "0.00E+00") call abort()
+if (trim(adjustl(c2)) .ne. "1.00E+00") call abort()
+end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index c7b5821e890d..052664c10685 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-02-27  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+	PR libfortran/20101
+	* write.c (output_float): Added special check for value 0.0 in
+	PE format.
+
 2004-02-27  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
 
 	* io/write.c (output_float): Fix typo in condition.
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index d4ee605de298..9b71cc5a7f43 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -375,7 +375,8 @@ output_float (fnode *f, double value, int len)
     case FMT_E:
     case FMT_D:
       i = g.scale_factor;
-      e -= i;
+      if (value != 0.0)
+	e -= i;
       if (i < 0)
 	{
 	  nbefore = 0;
-- 
GitLab