http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47694

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2011.02.14 14:54:08
     Ever Confirmed|0                           |1

--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-02-14 
14:54:08 UTC ---
I have now added in io/unix.c's raw_read the following:

  fprintf(stderr, "raw_read - buf size: %d\n", (int) nbyte);
  n = read (s->fd, buf, nbyte);
  fprintf(stderr, " .... read %d, '", (int) n);
  for (i = 0; i < n; i++)
    fprintf(stderr, "%c", ((char*) buf)[i]);
  fprintf(stderr, "'\n");
  return n;

If I now paste in "cat > tmpfifo" the following:
line 1
line 2
line 3
line 4 <no linebreak>


I see on the other side:

raw_read - buf size: 1024
 .... read 14, 'line 1
line 2
'
           1 line 1
raw_read - buf size: 1017
 .... read 7, 'line 3
'
           2 line 2
raw_read - buf size: 1017

Thus, "raw_read" reads two lines at once - but gfortran only outputs one line.
For the next Fortran READ, "raw-read" is again invoked although in the buffer
there is still the second half of the first read: The second line including a
terminating line break. Thus, the Fortran output lags one line behind.


Expected: gfortran first uses the buffer and invokes read_raw only if the
buffer does not contain sufficient data (e.g. not a full line ending with a
line break).

Reply via email to