OSDN Git Service

2010-02-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Feb 2010 05:47:10 +0000 (05:47 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Feb 2010 05:47:10 +0000 (05:47 +0000)
* io/transfer.c (require_type): Subtract one from item_count for output
of error message.  Add comment before formatted_transfer function
explaining why the item_count is off by one.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157060 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/transfer.c

index b674f5c..785a3a8 100644 (file)
@@ -1,3 +1,9 @@
+2010-02-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       * io/transfer.c (require_type): Subtract one from item_count for output
+       of error message.  Add comment before formatted_transfer function
+       explaining why the item_count is off by one.
+
 2010-02-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * io/write_float.def (WRITE_FLOAT): Use __builtin_signbit.
index e627a1c..63a18a6 100644 (file)
@@ -925,8 +925,9 @@ require_type (st_parameter_dt *dtp, bt expected, bt actual, const fnode *f)
   if (actual == expected)
     return 0;
 
+  /* Adjust item_count before emitting error message.  */
   sprintf (buffer, "Expected %s for item %d in formatted transfer, got %s",
-          type_name (expected), dtp->u.p.item_count, type_name (actual));
+          type_name (expected), dtp->u.p.item_count - 1, type_name (actual));
 
   format_error (dtp, f, buffer);
   return 1;
@@ -1703,6 +1704,12 @@ formatted_transfer_scalar_write (st_parameter_dt *dtp, bt type, void *p, int kin
   unget_format (dtp, f);
 }
 
+  /* This function is first called from data_init_transfer to initiate the loop
+     over each item in the format, transferring data as required.  Subsequent
+     calls to this function occur for each data item foound in the READ/WRITE
+     statement.  The item_count is incremented for each call.  Since the first
+     call is from data_transfer_init, the item_count is always one greater than
+     the actual count number of the item being transferred.  */
 
 static void
 formatted_transfer (st_parameter_dt *dtp, bt type, void *p, int kind,