aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2016-02-23 18:38:31 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2016-02-23 18:38:31 +0000
commit64a454d9f74cecd95241e96fef281b64715049c4 (patch)
treef181cd7389d8bad1a96d98fe725f9b3dc253f400 /libgfortran/io
parent35886f0bd4a8bcb1fe8b5f60d76fb94e5a0d4f9a (diff)
downloadgcc-64a454d9f74cecd95241e96fef281b64715049c4.zip
gcc-64a454d9f74cecd95241e96fef281b64715049c4.tar.gz
gcc-64a454d9f74cecd95241e96fef281b64715049c4.tar.bz2
re PR fortran/69456 (Namelist value with trailing sign is ignored without error)
2016-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/69456 * io/list_read.c (read_real): If digit is missing from exponent issue an error. (parse_real): Likewise and adjusted error message to clarify it is part of a complex number. (nml_read_obj): Bump item count and add comment that this is used to identify which item in a namelist read has a problem. PR libgfortran/69456 * gfortran.dg/namelist_89.f90: New test. * gfortran.dg/pr59700.f90: Update test.. From-SVN: r233641
Diffstat (limited to 'libgfortran/io')
-rw-r--r--libgfortran/io/list_read.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index bebdd8c..e24b392 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -1374,7 +1374,7 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
exp2:
if (!isdigit (c))
- goto bad;
+ goto bad_exponent;
push_char (dtp, c);
@@ -1472,6 +1472,8 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
if (nml_bad_return (dtp, c))
return 0;
+ bad_exponent:
+
free_saved (dtp);
if (c == EOF)
{
@@ -1482,8 +1484,8 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
else if (c != '\n')
eat_line (dtp);
- snprintf (message, MSGLEN, "Bad floating point number for item %d",
- dtp->u.p.item_count);
+ snprintf (message, MSGLEN, "Bad complex floating point "
+ "number for item %d", dtp->u.p.item_count);
free_line (dtp);
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
@@ -1814,7 +1816,8 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
exp2:
if (!isdigit (c))
- goto bad_real;
+ goto bad_exponent;
+
push_char (dtp, c);
for (;;)
@@ -1983,6 +1986,8 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
if (nml_bad_return (dtp, c))
return;
+ bad_exponent:
+
free_saved (dtp);
if (c == EOF)
{
@@ -2810,6 +2815,7 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset,
if (dtp->u.p.nml_read_error || !nl->touched)
return true;
+ dtp->u.p.item_count++; /* Used in error messages. */
dtp->u.p.repeat_count = 0;
eat_spaces (dtp);