https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92569

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|fortran                     |libfortran

--- Comment #5 from anlauf at gcc dot gnu.org ---
Running the failing testcase under the debugger, it appears that the
end-of-file condition is not properly dealt with in the library:

transfer.c:
2542
2543      data = GFC_DESCRIPTOR_DATA (desc);
2544
2545      while (data)
2546        {
2547          dtp->u.p.transfer (dtp, iotype, data, kind, size, tsize);
2548          data += stride0 * tsize;
2549          count[0] += tsize;
2550          n = 0;
2551          while (count[n] == extent[n])

(gdb) p dtp->u.p.current_unit->endfile

one gets after the last valid read

$2 = NO_ENDFILE

and after the first attempt pase EOF:

(gdb) p dtp->u.p.current_unit->endfile

$5 = AFTER_ENDFILE

and after the next attempt:

At line 8 of file res.f (unit = 1, file = 'resultav4.dat')
Fortran runtime error: Read past ENDFILE record

So one needs to check and properly catch the ENDFILE condition.

Who knows the right way to deal with such conditions?

Reply via email to