From b7ca376ae90189fa089aef474e2d0bde0d9aca87 Mon Sep 17 00:00:00 2001
From: John David Anglin <danglin@gcc.gnu.org>
Date: Mon, 25 Mar 2019 11:48:36 +0000
Subject: [PATCH] re PR libfortran/79540 (FAIL: gfortran.dg/fmt_fw_d.f90   -O0 
 execution test)

	PR libgfortran/79540
	* io/write_float.def (build_float_string): Don't copy digits when
	ndigits is negative.

From-SVN: r269911
---
 libgfortran/ChangeLog          | 6 ++++++
 libgfortran/io/write_float.def | 5 +++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 6ce8b5f9fcfa..7e741b3b5023 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-03-25  John David Anglin  <danglin@gcc.gnu.org>
+
+	PR libgfortran/79540
+	* io/write_float.def (build_float_string): Don't copy digits when
+	ndigits is negative.
+
 2019-03-05  Jakub Jelinek  <jakub@redhat.com>
 
 	PR libgfortran/89593
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def
index 1e2dee89d835..c63db4e77ef6 100644
--- a/libgfortran/io/write_float.def
+++ b/libgfortran/io/write_float.def
@@ -620,14 +620,15 @@ build_float_string (st_parameter_dt *dtp, const fnode *f, char *buffer,
     }
 
   /* Set digits after the decimal point, padding with zeros.  */
-  if (nafter > 0)
+  if (ndigits >= 0 && nafter > 0)
     {
       if (nafter > ndigits)
 	i = ndigits;
       else
 	i = nafter;
 
-      memcpy (put, digits, i);
+      if (i > 0)
+	memcpy (put, digits, i);
       while (i < nafter)
 	put[i++] = '0';
 
-- 
GitLab