aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-03-29 10:39:47 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2013-03-29 10:39:47 +0100
commit357aee9210ca33f9ed7eec62edeabb4ca4522828 (patch)
treeeda13fe58102b14d23f491ae0f6f0b237affce74 /libgfortran/io
parentd80b9b477774b0e783f943cd86334ca64b9a477b (diff)
downloadgcc-357aee9210ca33f9ed7eec62edeabb4ca4522828.zip
gcc-357aee9210ca33f9ed7eec62edeabb4ca4522828.tar.gz
gcc-357aee9210ca33f9ed7eec62edeabb4ca4522828.tar.bz2
re PR libfortran/56737 (Wrong I/O result with format cache for Hollerith strings)
2012-03-29 Tobias Burnus <burnus@net-b.de> PR fortran/56737 * io/format.c (parse_format_list): Also cache FMT_STRING. (parse_format): Update call. From-SVN: r197230
Diffstat (limited to 'libgfortran/io')
-rw-r--r--libgfortran/io/format.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c
index db95e49..d5a3548 100644
--- a/libgfortran/io/format.c
+++ b/libgfortran/io/format.c
@@ -586,16 +586,15 @@ format_lex (format_data *fmt)
* parenthesis node which contains the rest of the list. */
static fnode *
-parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
+parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
{
fnode *head, *tail;
format_token t, u, t2;
int repeat;
format_data *fmt = dtp->u.p.fmt;
- bool saveit, seen_data_desc = false;
+ bool seen_data_desc = false;
head = tail = NULL;
- saveit = *save_ok;
/* Get the next format item */
format_item:
@@ -612,7 +611,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
}
get_fnode (fmt, &head, &tail, FMT_LPAREN);
tail->repeat = -2; /* Signifies unlimited format. */
- tail->u.child = parse_format_list (dtp, &saveit, &seen_data_desc);
+ tail->u.child = parse_format_list (dtp, &seen_data_desc);
if (fmt->error != NULL)
goto finished;
if (!seen_data_desc)
@@ -631,7 +630,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
case FMT_LPAREN:
get_fnode (fmt, &head, &tail, FMT_LPAREN);
tail->repeat = repeat;
- tail->u.child = parse_format_list (dtp, &saveit, &seen_data_desc);
+ tail->u.child = parse_format_list (dtp, &seen_data_desc);
*seen_dd = seen_data_desc;
if (fmt->error != NULL)
goto finished;
@@ -659,7 +658,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
case FMT_LPAREN:
get_fnode (fmt, &head, &tail, FMT_LPAREN);
tail->repeat = 1;
- tail->u.child = parse_format_list (dtp, &saveit, &seen_data_desc);
+ tail->u.child = parse_format_list (dtp, &seen_data_desc);
*seen_dd = seen_data_desc;
if (fmt->error != NULL)
goto finished;
@@ -723,8 +722,6 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
goto between_desc;
case FMT_STRING:
- /* TODO: Find out why it is necessary to turn off format caching. */
- saveit = false;
get_fnode (fmt, &head, &tail, FMT_STRING);
tail->u.string.p = fmt->string;
tail->u.string.length = fmt->value;
@@ -1104,8 +1101,6 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
finished:
- *save_ok = saveit;
-
return head;
}
@@ -1255,8 +1250,7 @@ parse_format (st_parameter_dt *dtp)
fmt->avail++;
if (format_lex (fmt) == FMT_LPAREN)
- fmt->array.array[0].u.child = parse_format_list (dtp, &format_cache_ok,
- &seen_data_desc);
+ fmt->array.array[0].u.child = parse_format_list (dtp, &seen_data_desc);
else
fmt->error = "Missing initial left parenthesis in format";