diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 5120a433f29bd562b15122bfc13fbd8a6184cf43..436b598443aaa38b164215837f6f0af2c7a2492a 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,8 @@
+2016-02-17  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+	PR libgfortran/69651
+	* io/list_read.c (push_char4): Fix the pointer usage for xrealloc.
+
 2016-02-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
 	PR libgfortran/69651
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index fcd4b6e25e97073ca7f2ed23b8eec9eb91c7bd52..bebdd8cf3013693f736bbbe769d9936708d502b1 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -119,7 +119,10 @@ push_char4 (st_parameter_dt *dtp, int c)
   if (dtp->u.p.saved_used >= dtp->u.p.saved_length)
     {
       dtp->u.p.saved_length = 2 * dtp->u.p.saved_length;
-      p = xrealloc (p, dtp->u.p.saved_length * sizeof (gfc_char4_t));
+      dtp->u.p.saved_string =
+	xrealloc (dtp->u.p.saved_string,
+		  dtp->u.p.saved_length * sizeof (gfc_char4_t));
+      p = (gfc_char4_t *) dtp->u.p.saved_string;
     }
 
   p[dtp->u.p.saved_used++] = c;