Commit ba829325 by Jerry DeLisle

re PR fortran/56660 (Fails to read NAMELIST with certain form array syntax)

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
parent a7175123
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> 2013-03-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/56786 PR libfortran/56786
......
...@@ -2490,9 +2490,9 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset, ...@@ -2490,9 +2490,9 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
size_t obj_name_len; size_t obj_name_len;
void * pdata; void * pdata;
/* This object not touched in name parsing. */ /* If we have encountered a previous read error or this object has not been
touched in name parsing, just return. */
if (!nl->touched) if (dtp->u.p.nml_read_error || !nl->touched)
return true; return true;
dtp->u.p.repeat_count = 0; dtp->u.p.repeat_count = 0;
...@@ -2532,10 +2532,8 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset, ...@@ -2532,10 +2532,8 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
- GFC_DESCRIPTOR_LBOUND(nl,dim)) - GFC_DESCRIPTOR_LBOUND(nl,dim))
* GFC_DESCRIPTOR_STRIDE(nl,dim) * nl->size); * GFC_DESCRIPTOR_STRIDE(nl,dim) * nl->size);
/* Reset the error flag and try to read next value, if /* If we are finished with the repeat count, try to read next value. */
dtp->u.p.repeat_count=0 */
dtp->u.p.nml_read_error = 0;
nml_carry = 0; nml_carry = 0;
if (--dtp->u.p.repeat_count <= 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, ...@@ -2564,8 +2562,8 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
break; break;
case BT_REAL: case BT_REAL:
/* Need to copy data back from the real location to the temp in order /* Need to copy data back from the real location to the temp in
to handle nml reads into arrays. */ order to handle nml reads into arrays. */
read_real (dtp, pdata, len); read_real (dtp, pdata, len);
memcpy (dtp->u.p.value, pdata, dlen); memcpy (dtp->u.p.value, pdata, dlen);
break; break;
...@@ -3022,6 +3020,7 @@ get_name: ...@@ -3022,6 +3020,7 @@ get_name:
nl = first_nl; 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, if (!nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, nml_err_msg_size,
clow, chigh)) clow, chigh))
goto nml_err_ret; goto nml_err_ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment