diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-10-24 21:42:29 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-10-24 21:42:29 +0000 |
commit | 13926b249f974bcb0428e4379f0338da45bbcd70 (patch) | |
tree | cf05fdc76f680d7d48536813516af7143972b359 /libgfortran | |
parent | c708217135607d42ff3926164f0472ef6aa66719 (diff) | |
download | gcc-13926b249f974bcb0428e4379f0338da45bbcd70.zip gcc-13926b249f974bcb0428e4379f0338da45bbcd70.tar.gz gcc-13926b249f974bcb0428e4379f0338da45bbcd70.tar.bz2 |
re PR libfortran/77828 (Linking gfortran-7 compiled program with libgfortran of 5.x allowed but crashes when containing write to string)
2016-10-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/77828
* io/io.h (st_parameter_dt): Reorder for readability and sanity.
* io/transfer.c (data_transfer_init): Remove TODO and enable the
runtime error message, rec= specifier not allowed in STREAM
access.
* libtool-version: Bump major version of libgfortran to 4.
* ioparm.def: Reorder dt parameters to match libgfortran.
* libgfortran.h: Swap definitions of GFC_INTERNAL_UNIT and
GFC_INTERNAL_UNIT4.
From-SVN: r241497
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 9 | ||||
-rw-r--r-- | libgfortran/io/io.h | 24 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 9 | ||||
-rw-r--r-- | libgfortran/libtool-version | 2 |
4 files changed, 23 insertions, 21 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 167a0f9..2e3056f 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,12 @@ +2016-10-24 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/77828 + * io/io.h (st_parameter_dt): Reorder for readability and sanity. + * io/transfer.c (data_transfer_init): Remove TODO and enable the + runtime error message, rec= specifier not allowed in STREAM + access. + * libtool-version: Bump major version of libgfortran to 4. + 2016-10-21 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/78055 diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h index 8b20389..8c6caef 100644 --- a/libgfortran/io/io.h +++ b/libgfortran/io/io.h @@ -424,6 +424,15 @@ typedef struct st_parameter_dt CHARACTER2 (advance); CHARACTER1 (internal_unit); CHARACTER2 (namelist_name); + GFC_INTEGER_4 *id; + GFC_IO_INT pos; + CHARACTER1 (asynchronous); + CHARACTER2 (blank); + CHARACTER1 (decimal); + CHARACTER2 (delim); + CHARACTER1 (pad); + CHARACTER2 (round); + CHARACTER1 (sign); /* Private part of the structure. The compiler just needs to reserve enough space. */ union @@ -440,7 +449,8 @@ typedef struct st_parameter_dt unit_blank blank_status; unit_sign sign_status; int scale_factor; - int max_pos; /* Maximum righthand column written to. */ + /* Maximum righthand column written to. */ + int max_pos; /* Number of skips + spaces to be done for T and X-editing. */ int skips; /* Number of spaces to be done for T and X-editing. */ @@ -494,8 +504,7 @@ typedef struct st_parameter_dt are an unsigned char, EOF, or EOF - 1 used to mark the field as not valid. */ int last_char; /* No longer used, moved to gfc_unit. */ - char nml_delim; - + int nml_delim; int repeat_count; int saved_length; int saved_used; @@ -523,15 +532,6 @@ typedef struct st_parameter_dt must be smaller or equal to this array. */ char pad[16 * sizeof (char *) + 32 * sizeof (int)]; } u; - GFC_INTEGER_4 *id; - GFC_IO_INT pos; - CHARACTER1 (asynchronous); - CHARACTER2 (blank); - CHARACTER1 (decimal); - CHARACTER2 (delim); - CHARACTER1 (pad); - CHARACTER2 (round); - CHARACTER1 (sign); } st_parameter_dt; diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 0879ca7..e3f75b6 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -3026,20 +3026,13 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag) return; } - /* TODO: This is required to maintain compatibility between - 4.3 and 4.4 runtime. Remove when ABI changes from 4.3 */ - - if (is_stream_io (dtp)) - dtp->u.p.current_unit->strm_pos = dtp->rec; - - /* TODO: Un-comment this code when ABI changes from 4.3. if (dtp->u.p.current_unit->flags.access == ACCESS_STREAM) { generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, "Record number not allowed for stream access " "data transfer"); return; - } */ + } } /* Bugware for badly written mixed C-Fortran I/O. */ diff --git a/libgfortran/libtool-version b/libgfortran/libtool-version index f787e37..7121990 100644 --- a/libgfortran/libtool-version +++ b/libgfortran/libtool-version @@ -3,4 +3,4 @@ # This is a separate file so that version updates don't involve re-running # automake. # CURRENT:REVISION:AGE -3:0:0 +4:0:0 |