re PR fortran/55818 (Reading a REAL from a file which doesn't end in a new line fails)
2013-01-02 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/55818 * io/list_read.c (read_real): Do not call hit_eof when EOF can be treated as a value separator. (parse_real): Likewise. (read_logical): Likewise. (read_character): Likewise. (read_complex): Likewise. From-SVN: r194809
This commit is contained in:
parent
8c075fb4a3
commit
cc1863452c
|
@ -1,3 +1,13 @@
|
|||
2013-01-02 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libfortran/55818
|
||||
* io/list_read.c (read_real): Do not call hit_eof when EOF can be
|
||||
treated as a value separator.
|
||||
(parse_real): Likewise.
|
||||
(read_logical): Likewise.
|
||||
(read_character): Likewise.
|
||||
(read_complex): Likewise.
|
||||
|
||||
2012-12-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libfortran/48976
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
|
||||
2013
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Andy Vaught
|
||||
Namelist input contributed by Paul Thomas
|
||||
|
@ -697,6 +698,7 @@ read_logical (st_parameter_dt *dtp, int length)
|
|||
break;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
unget_char (dtp, c);
|
||||
eat_separator (dtp);
|
||||
return; /* Null value. */
|
||||
|
@ -951,6 +953,7 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
|
|||
break;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
unget_char (dtp, c); /* NULL value. */
|
||||
eat_separator (dtp);
|
||||
return;
|
||||
|
@ -975,8 +978,7 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
|
|||
|
||||
for (;;)
|
||||
{
|
||||
if ((c = next_char (dtp)) == EOF)
|
||||
goto eof;
|
||||
c = next_char (dtp);
|
||||
switch (c)
|
||||
{
|
||||
CASE_DIGITS:
|
||||
|
@ -984,6 +986,7 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
|
|||
break;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
unget_char (dtp, c);
|
||||
goto done; /* String was only digits! */
|
||||
|
||||
|
@ -1041,7 +1044,7 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
|
|||
the string. */
|
||||
|
||||
if ((c = next_char (dtp)) == EOF)
|
||||
goto eof;
|
||||
goto done_eof;
|
||||
if (c == quote)
|
||||
{
|
||||
push_char (dtp, quote);
|
||||
|
@ -1167,6 +1170,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
|
|||
goto exp2;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
goto done;
|
||||
|
||||
default:
|
||||
|
@ -1202,6 +1206,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
|
|||
break;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
unget_char (dtp, c);
|
||||
goto done;
|
||||
|
||||
|
@ -1243,7 +1248,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
|
|||
&& ((c = next_char (dtp)) == 'y' || c == 'Y')
|
||||
&& (c = next_char (dtp))))
|
||||
{
|
||||
if (is_separator (c))
|
||||
if (is_separator (c) || (c == EOF))
|
||||
unget_char (dtp, c);
|
||||
push_char (dtp, 'i');
|
||||
push_char (dtp, 'n');
|
||||
|
@ -1255,7 +1260,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
|
|||
&& ((c = next_char (dtp)) == 'n' || c == 'N')
|
||||
&& (c = next_char (dtp)))
|
||||
{
|
||||
if (is_separator (c))
|
||||
if (is_separator (c) || (c == EOF))
|
||||
unget_char (dtp, c);
|
||||
push_char (dtp, 'n');
|
||||
push_char (dtp, 'a');
|
||||
|
@ -1269,7 +1274,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
|
|||
goto bad;
|
||||
|
||||
c = next_char (dtp);
|
||||
if (is_separator (c))
|
||||
if (is_separator (c) || (c == EOF))
|
||||
unget_char (dtp, c);
|
||||
}
|
||||
goto done_infnan;
|
||||
|
@ -1315,6 +1320,7 @@ read_complex (st_parameter_dt *dtp, void * dest, int kind, size_t size)
|
|||
break;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
unget_char (dtp, c);
|
||||
eat_separator (dtp);
|
||||
return;
|
||||
|
@ -1369,7 +1375,7 @@ eol_4:
|
|||
goto bad_complex;
|
||||
|
||||
c = next_char (dtp);
|
||||
if (!is_separator (c))
|
||||
if (!is_separator (c) && (c != EOF))
|
||||
goto bad_complex;
|
||||
|
||||
unget_char (dtp, c);
|
||||
|
@ -1429,6 +1435,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
|
|||
goto got_sign;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
unget_char (dtp, c); /* Single null. */
|
||||
eat_separator (dtp);
|
||||
return;
|
||||
|
@ -1484,6 +1491,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
|
|||
goto got_repeat;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
if (c != '\n' && c != ',' && c != '\r' && c != ';')
|
||||
unget_char (dtp, c);
|
||||
goto done;
|
||||
|
@ -1612,6 +1620,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
|
|||
break;
|
||||
|
||||
CASE_SEPARATORS:
|
||||
case EOF:
|
||||
goto done;
|
||||
|
||||
default:
|
||||
|
@ -1647,7 +1656,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
|
|||
goto unwind;
|
||||
c = next_char (dtp);
|
||||
l_push_char (dtp, c);
|
||||
if (!is_separator (c))
|
||||
if (!is_separator (c) && (c != EOF))
|
||||
{
|
||||
if (c != 'i' && c != 'I')
|
||||
goto unwind;
|
||||
|
@ -1700,7 +1709,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
|
|||
}
|
||||
}
|
||||
|
||||
if (!is_separator (c))
|
||||
if (!is_separator (c) && (c != EOF))
|
||||
goto unwind;
|
||||
|
||||
if (dtp->u.p.namelist_mode)
|
||||
|
|
Loading…
Reference in New Issue