aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2008-12-06 04:13:34 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2008-12-06 04:13:34 +0000
commit4c934d41d257f2dc351383992abf783199695a21 (patch)
tree1a43d93b6dfb18632fadb7aba84fb6dd58edb485 /gcc
parenta2a6f3cf6be67b838c80b304a9bf29887b831d26 (diff)
downloadgcc-4c934d41d257f2dc351383992abf783199695a21.zip
gcc-4c934d41d257f2dc351383992abf783199695a21.tar.gz
gcc-4c934d41d257f2dc351383992abf783199695a21.tar.bz2
re PR fortran/38291 (Rejects I/O with POS= if FMT=*)
2008-12-05 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/38291 * io.c (match_dt_element): Use dt->pos in matcher. (gfc_free_dt): Free dt->pos after use. (gfc_resolve_dt): Use dt->pos in resolution of stream position tag. 2008-12-05 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/38291 * io/transfer.c (data_transfer_init): Add checks for POS= valid range. Add check for unit opened with ACCESS="stream". Flush and seek if current stream position does not match. Check ENDFILE on read. From-SVN: r142515
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/io.c5
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index f17cbac..5cdbb23 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/38291
+ * io.c (match_dt_element): Use dt->pos in matcher.
+ (gfc_free_dt): Free dt->pos after use.
+ (gfc_resolve_dt): Use dt->pos in resolution of stream position tag.
+
2008-12-05 Sebastian Pop <sebastian.pop@amd.com>
PR bootstrap/38262
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index 85b712f..97f304b 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -2412,7 +2412,7 @@ match_dt_element (io_kind k, gfc_dt *dt)
m = match_etag (&tag_rec, &dt->rec);
if (m != MATCH_NO)
return m;
- m = match_etag (&tag_spos, &dt->rec);
+ m = match_etag (&tag_spos, &dt->pos);
if (m != MATCH_NO)
return m;
m = match_out_tag (&tag_iomsg, &dt->iomsg);
@@ -2478,6 +2478,7 @@ gfc_free_dt (gfc_dt *dt)
gfc_free_expr (dt->blank);
gfc_free_expr (dt->decimal);
gfc_free_expr (dt->extra_comma);
+ gfc_free_expr (dt->pos);
gfc_free (dt);
}
@@ -2491,7 +2492,7 @@ gfc_resolve_dt (gfc_dt *dt)
RESOLVE_TAG (&tag_format, dt->format_expr);
RESOLVE_TAG (&tag_rec, dt->rec);
- RESOLVE_TAG (&tag_spos, dt->rec);
+ RESOLVE_TAG (&tag_spos, dt->pos);
RESOLVE_TAG (&tag_advance, dt->advance);
RESOLVE_TAG (&tag_id, dt->id);
RESOLVE_TAG (&tag_iomsg, dt->iomsg);