diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 6ce8b5f9fcfa801a32cd3e8d762610878f7072e9..7e741b3b502353293ae144b8914a1c61dbd879a9 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 1e2dee89d835e886573038a913992502740299bc..c63db4e77ef6076a7f5b9721431642d4a8b5ebb8 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';