From 51e9d74cb85e9640ce3958bb89fab245f44752c7 Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <coudert@clipper.ens.fr>
Date: Tue, 5 Apr 2005 16:20:10 +0200
Subject: [PATCH] re PR libfortran/20755 (gfortran - prints the same number
 with 1p4G12.3 two different ways)

	PR libfortran/20755
	* write.c (write_float): A G edit descriptor may locally change
	the scale factor, but it needs to be restored afterwards.

	* gfortran.dg/pr20755.f: New test.

From-SVN: r97627
---
 gcc/testsuite/ChangeLog             |  5 +++++
 gcc/testsuite/gfortran.dg/pr20755.f | 10 ++++++++++
 libgfortran/ChangeLog               |  6 ++++++
 libgfortran/io/write.c              |  4 +++-
 4 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr20755.f

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 58d473c18bb6..3c67aa3e9893 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-04-05  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+	PR libfortran/20755
+	* gfortran.dg/pr20755.f: New test.
+
 2005-04-05  Feng Wang  <fengwang@nudt.edu.cn>
 
 	* gfortran.dg/pr15959.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/pr20755.f b/gcc/testsuite/gfortran.dg/pr20755.f
new file mode 100644
index 000000000000..07c72ae4134e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr20755.f
@@ -0,0 +1,10 @@
+! PR libfortran/20755
+! { dg-do run }
+      character*30 s
+      
+      write (s,2000) 0.0, 0.02
+      if (s .ne. "    0.00       2.000E-02") call abort
+      write (s,2000) 0.01, 0.02
+      if (s .ne. "   1.000E-02   2.000E-02") call abort
+ 2000 format (1P2G12.3)
+      end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index ebcac0bb9193..51fe4a18ecd1 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-04-05  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+	PR libfortran/20755
+	* write.c (write_float): A G edit descriptor may locally change
+	the scale factor, but it needs to be restored afterwards.
+
 2005-04-03  Dale Ranta  <dir@lanl.gov>
             Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 556adea268ba..d97caec8bc79 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -674,7 +674,7 @@ static void
 write_float (fnode *f, const char *source, int len)
 {
   double n;
-  int nb =0, res;
+  int nb =0, res, save_scale_factor;
   char * p, fin;
   fnode *f2 = NULL;
 
@@ -723,8 +723,10 @@ write_float (fnode *f, const char *source, int len)
     }
   else
     {
+      save_scale_factor = g.scale_factor;
       f2 = calculate_G_format(f, n, len, &nb);
       output_float (f2, n, len);
+      g.scale_factor = save_scale_factor;
       if (f2 != NULL)
         free_mem(f2);
 
-- 
GitLab