From c4ee121ad51fa7aa7322b4da7f66e9a813b0d549 Mon Sep 17 00:00:00 2001
From: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date: Fri, 28 Apr 2006 23:55:30 +0000
Subject: [PATCH] re PR fortran/27304 (gfortran: Warn/abort when format in
 write does not fit passed arguments)

2006-04-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/27304
	* io/transfer.c (formatted_transfer_scalar):  Generate error if data
	descriptors are exhausted.
	* io/format.c (next_format0): Fix comment.

From-SVN: r113363
---
 libgfortran/ChangeLog     | 7 +++++++
 libgfortran/io/format.c   | 2 +-
 libgfortran/io/transfer.c | 8 +++++++-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 00acecfd0e36..c8ecbfcc07ec 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,10 @@
+2006-04-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+	PR libgfortran/27304
+	* io/transfer.c (formatted_transfer_scalar):  Generate error if data
+	descriptors are exhausted.
+	* io/format.c (next_format0): Fix comment.
+
 2006-04-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
 	PR libgfortran/20257
diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c
index 9528dbad277e..96d7019eedcd 100644
--- a/libgfortran/io/format.c
+++ b/libgfortran/io/format.c
@@ -1059,7 +1059,7 @@ next_format0 (fnode * f)
 /* next_format()-- Return the next format node.  If the format list
  * ends up being exhausted, we do reversion.  Reversion is only
  * allowed if the we've seen a data descriptor since the
- * initialization or the last reversion.  We return NULL if the there
+ * initialization or the last reversion.  We return NULL if there
  * are no more data descriptors to return (which is an error
  * condition). */
 
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 743840102dbd..43af8fbc9387 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -670,7 +670,13 @@ formatted_transfer_scalar (st_parameter_dt *dtp, bt type, void *p, int len,
 
       f = next_format (dtp);
       if (f == NULL)
-	return;	      /* No data descriptors left (already raised).  */
+	{
+	  /* No data descriptors left.  */
+	  if (n > 0)
+	    generate_error (&dtp->common, ERROR_FORMAT,
+		"Insufficient data descriptors in format after reversion");
+	  return;
+	}
 
       /* Now discharge T, TR and X movements to the right.  This is delayed
 	 until a data producing format to suppress trailing spaces.  */
-- 
GitLab