diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-12-06 04:13:34 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-12-06 04:13:34 +0000 |
commit | 4c934d41d257f2dc351383992abf783199695a21 (patch) | |
tree | 1a43d93b6dfb18632fadb7aba84fb6dd58edb485 /gcc | |
parent | a2a6f3cf6be67b838c80b304a9bf29887b831d26 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/io.c | 5 |
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); |