summaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-28 20:04:40 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-28 20:04:40 +0000
commite9389957ad71366e7db47450a43ed0d85ffcc610 (patch)
tree6c019cf873b129f993fd59f070c6f6e47c3df1ba /libgfortran
parentd3237426929c302bcab9d683353b041667b22488 (diff)
downloadgcc-e9389957ad71366e7db47450a43ed0d85ffcc610.tar.gz
2010-06-28 Tobias Burnus <burnus@net-b.de>
PR fortran/43298 * list_read.c (parse_real, read_real): Support NAN(alphanum). 2010-06-28 Tobias Burnus <burnus@net-b.de> PR fortran/43298 * gfortran.dg/nan_6.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161510 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog5
-rw-r--r--libgfortran/io/list_read.c29
2 files changed, 34 insertions, 0 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 3c2c75cd1b1..33a312cebdc 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,8 @@
+2010-06-28 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/43298
+ * list_read.c (parse_real, read_real): Support NAN(alphanum).
+
2010-06-25 Tobias Burnus <burnus@net-b.de>
* intrinsics/selected_real_kind.f90
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 798521d62ad..72016b73e29 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -1199,6 +1199,21 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length)
push_char (dtp, 'n');
push_char (dtp, 'a');
push_char (dtp, 'n');
+
+ /* Match "NAN(alphanum)". */
+ if (c == '(')
+ {
+ for ( ; c != ')'; c = next_char (dtp))
+ if (is_separator (c))
+ goto bad;
+ else
+ push_char (dtp, c);
+
+ push_char (dtp, ')');
+ c = next_char (dtp);
+ if (is_separator (c))
+ unget_char (dtp, c);
+ }
goto done;
}
@@ -1576,6 +1591,20 @@ read_real (st_parameter_dt *dtp, void * dest, int length)
goto unwind;
c = next_char (dtp);
l_push_char (dtp, c);
+
+ /* Match NAN(alphanum). */
+ if (c == '(')
+ {
+ for (c = next_char (dtp); c != ')'; c = next_char (dtp))
+ if (is_separator (c))
+ goto unwind;
+ else
+ l_push_char (dtp, c);
+
+ l_push_char (dtp, ')');
+ c = next_char (dtp);
+ l_push_char (dtp, c);
+ }
}
if (!is_separator (c))