re PR fortran/56660 (Fails to read NAMELIST with certain form array syntax)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 1 Apr 2013 20:30:41 +0000 (20:30 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 1 Apr 2013 20:30:41 +0000 (20:30 +0000)
2013-04-01  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/56660
* io/list_read.c (nml_read_obj): Do not reset the read error flag
inside nml_read_obj. If the read error flag is found set just exit.
Fix some whitespace on comments.
(nml_read_obj_data): Reset the read error flag before the first call
to nml_read_object.

From-SVN: r197321

libgfortran/ChangeLog
libgfortran/io/list_read.c

index 4b8e03a557b4fa56a2f4101527f037ab1f4ef37f..fe9ae95a8558dda65a36c38d79fe28e1923b95f7 100644 (file)
@@ -1,3 +1,12 @@
+2013-04-01  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/56660
+       * io/list_read.c (nml_read_obj): Do not reset the read error flag
+       inside nml_read_obj. If the read error flag is found set just exit.
+       Fix some whitespace on comments.
+       (nml_read_obj_data): Reset the read error flag before the first call
+       to nml_read_object.
+
 2013-03-31  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/56786
index be961f1661e1bb8f34997f8195d08012735bb7e2..0693e50f4aaefb92f45cf1a909207a1374ae791a 100644 (file)
@@ -2490,9 +2490,9 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
   size_t obj_name_len;
   void * pdata;
 
-  /* This object not touched in name parsing.  */
-
-  if (!nl->touched)
+  /* If we have encountered a previous read error or this object has not been
+     touched in name parsing, just return.  */
+  if (dtp->u.p.nml_read_error || !nl->touched)
     return true;
 
   dtp->u.p.repeat_count = 0;
@@ -2532,10 +2532,8 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
                                 - GFC_DESCRIPTOR_LBOUND(nl,dim))
                        * GFC_DESCRIPTOR_STRIDE(nl,dim) * nl->size);
 
-      /* Reset the error flag and try to read next value, if
-        dtp->u.p.repeat_count=0  */
+      /* If we are finished with the repeat count, try to read next value.  */
 
-      dtp->u.p.nml_read_error = 0;
       nml_carry = 0;
       if (--dtp->u.p.repeat_count <= 0)
        {
@@ -2564,8 +2562,8 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
            break;
 
          case BT_REAL:
-           /* Need to copy data back from the real location to the temp in order
-              to handle nml reads into arrays.  */
+           /* Need to copy data back from the real location to the temp in
+              order to handle nml reads into arrays.  */
            read_real (dtp, pdata, len);
            memcpy (dtp->u.p.value, pdata, dlen);
            break;
@@ -3022,6 +3020,7 @@ get_name:
        nl = first_nl;
     }
 
+  dtp->u.p.nml_read_error = 0;
   if (!nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, nml_err_msg_size,
                    clow, chigh))
     goto nml_err_ret;