PR 78534 Regression on 32-bit targets
By switching from int to size_t in order to handle larger values, r256322 introduced a bug that manifested itself on 32-bit targets. Fixed by using the correct type to store the result of a next_array_record call. Regtested on x86_64-pc-linux-gnu and i686-pc-linux-gnu, committed to trunk as obvious. libgfortran/ChangeLog: 2018-01-08 Janne Blomqvist <jb@gcc.gnu.org> PR 78534, bugfix for r256322 * io/transfer.c (next_record_w): Use correct type for return value of next_array_record. From-SVN: r256337
This commit is contained in:
parent
4c035a2394
commit
4135a21f4d
2 changed files with 13 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
2018-01-08 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
PR 78534, bugfix for r256322
|
||||
* io/transfer.c (next_record_w): Use correct type for return value
|
||||
of next_array_record.
|
||||
|
||||
2018-01-07 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
* libgfortran.h (GFC_DTYPE_COPY): New macro.
|
||||
|
|
|
@ -3691,7 +3691,7 @@ next_record_w (st_parameter_dt *dtp, int done)
|
|||
{
|
||||
char *p;
|
||||
/* Internal unit, so must fit in memory. */
|
||||
size_t length, m, record;
|
||||
size_t length, m;
|
||||
size_t max_pos = max_pos_off;
|
||||
if (is_array_io (dtp))
|
||||
{
|
||||
|
@ -3730,14 +3730,16 @@ next_record_w (st_parameter_dt *dtp, int done)
|
|||
memset (p, ' ', length);
|
||||
|
||||
/* Now that the current record has been padded out,
|
||||
determine where the next record in the array is. */
|
||||
record = next_array_record (dtp, dtp->u.p.current_unit->ls,
|
||||
&finished);
|
||||
determine where the next record in the array is.
|
||||
Note that this can return a negative value, so it
|
||||
needs to be assigned to a signed value. */
|
||||
gfc_offset record = next_array_record
|
||||
(dtp, dtp->u.p.current_unit->ls, &finished);
|
||||
if (finished)
|
||||
dtp->u.p.current_unit->endfile = AT_ENDFILE;
|
||||
|
||||
/* Now seek to this record */
|
||||
record = record * ((size_t) dtp->u.p.current_unit->recl);
|
||||
record = record * dtp->u.p.current_unit->recl;
|
||||
|
||||
if (sseek (dtp->u.p.current_unit->s, record, SEEK_SET) < 0)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue