diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2012-12-27 18:09:13 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2012-12-27 18:09:13 +0000 |
commit | 93e8af199cc829c12790873935a4fa4c51c89044 (patch) | |
tree | 6f4d966648a1add073849598d28e700c75419c8f | |
parent | 797332eda948b694d2e5199869ebd8e748b938db (diff) | |
download | gcc-93e8af199cc829c12790873935a4fa4c51c89044.zip gcc-93e8af199cc829c12790873935a4fa4c51c89044.tar.gz gcc-93e8af199cc829c12790873935a4fa4c51c89044.tar.bz2 |
re PR fortran/48976 (INQUIRE with STREAM= not supported)
2012-12-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/48976
* gfortran.h (gfc_inquire struct): Add pointer for inquire stream.
* io.c (io_tag): Add tag for inquire stream. (match_inquire_element):
Add matcher for new tag. (gfc_resolve_inquire): Resolve new tag.
* ioparm.def: Add new parameter for inquire stream.
* trans-io.c (gfc_trans_inquire): Add tranlste code for inquire
stream.
From-SVN: r194734
-rw-r--r-- | gcc/fortran/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 3 | ||||
-rw-r--r-- | gcc/fortran/io.c | 5 | ||||
-rw-r--r-- | gcc/fortran/ioparm.def | 1 | ||||
-rw-r--r-- | gcc/fortran/trans-io.c | 3 |
5 files changed, 20 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b3dab05..a8d6a21 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2012-12-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/48976 + * gfortran.h (gfc_inquire struct): Add pointer for inquire stream. + * io.c (io_tag): Add tag for inquire stream. (match_inquire_element): + Add matcher for new tag. (gfc_resolve_inquire): Resolve new tag. + * ioparm.def: Add new parameter for inquire stream. + * trans-io.c (gfc_trans_inquire): Add tranlste code for inquire + stream. + 2012-12-23 Tobias Burnus <burnus@net-b.de> PR fortran/54884 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index f120992..a419af3 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -2008,7 +2008,8 @@ typedef struct *name, *access, *sequential, *direct, *form, *formatted, *unformatted, *recl, *nextrec, *blank, *position, *action, *read, *write, *readwrite, *delim, *pad, *iolength, *iomsg, *convert, *strm_pos, - *asynchronous, *decimal, *encoding, *pending, *round, *sign, *size, *id; + *asynchronous, *decimal, *encoding, *pending, *round, *sign, *size, *id, + *iqstream; gfc_st_label *err; diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index bd84f1f..7eb52a9 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -97,7 +97,8 @@ static const io_tag tag_eor = {"EOR", " eor =", " %l", BT_UNKNOWN}, tag_id = {"ID", " id =", " %v", BT_INTEGER}, tag_pending = {"PENDING", " pending =", " %v", BT_LOGICAL}, - tag_newunit = {"NEWUNIT", " newunit =", " %v", BT_INTEGER}; + tag_newunit = {"NEWUNIT", " newunit =", " %v", BT_INTEGER}, + tag_s_iqstream = {"STREAM", " stream =", " %v", BT_CHARACTER}; static gfc_dt *current_dt; @@ -3912,6 +3913,7 @@ match_inquire_element (gfc_inquire *inquire) RETM m = match_out_tag (&tag_strm_out, &inquire->strm_pos); RETM m = match_vtag (&tag_pending, &inquire->pending); RETM m = match_vtag (&tag_id, &inquire->id); + RETM m = match_vtag (&tag_s_iqstream, &inquire->iqstream); RETM return MATCH_NO; } @@ -4101,6 +4103,7 @@ gfc_resolve_inquire (gfc_inquire *inquire) INQUIRE_RESOLVE_TAG (&tag_pending, inquire->pending); INQUIRE_RESOLVE_TAG (&tag_size, inquire->size); INQUIRE_RESOLVE_TAG (&tag_s_decimal, inquire->decimal); + INQUIRE_RESOLVE_TAG (&tag_s_iqstream, inquire->iqstream); #undef INQUIRE_RESOLVE_TAG if (gfc_reference_st_label (inquire->err, ST_LABEL_TARGET) == FAILURE) diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def index 5ccd869..c9c271d 100644 --- a/gcc/fortran/ioparm.def +++ b/gcc/fortran/ioparm.def @@ -88,6 +88,7 @@ IOPARM (inquire, sign, 1 << 4, char1) IOPARM (inquire, pending, 1 << 5, pint4) IOPARM (inquire, size, 1 << 6, pintio) IOPARM (inquire, id, 1 << 7, pint4) +IOPARM (inquire, iqstream, 1 << 8, char1) IOPARM (wait, common, 0, common) IOPARM (wait, id, 1 << 7, pint4) #ifndef IOPARM_dt_list_format diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index 940129e..921edd0 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -1364,6 +1364,9 @@ gfc_trans_inquire (gfc_code * code) if (p->id) mask2 |= set_parameter_ref (&block, &post_block,var, IOPARM_inquire_id, p->id); + if (p->iqstream) + mask2 |= set_string (&block, &post_block, var, IOPARM_inquire_iqstream, + p->iqstream); if (mask2) mask |= set_parameter_const (&block, var, IOPARM_inquire_flags2, mask2); |