[Bug libfortran/20661] End of record not detected

2005-04-10 Thread tkoenig at gcc dot gnu dot org

--- Additional Comments From tkoenig at gcc dot gnu dot org  2005-04-10 
08:44 ---
Fixed in 4.1.0, waiting for 4.0 to reopen.

-- 
   What|Removed |Added

   Keywords||patch
  Known to work||4.1.0


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


[Bug libfortran/20661] End of record not detected

2005-04-10 Thread cvs-commit at gcc dot gnu dot org

--- Additional Comments From cvs-commit at gcc dot gnu dot org  2005-04-10 
08:36 ---
Subject: Bug 20661

CVSROOT:/cvs/gcc
Module name:gcc
Changes by: [EMAIL PROTECTED]   2005-04-10 08:35:40

Modified files:
libgfortran: ChangeLog 
libgfortran/io : transfer.c 
gcc/testsuite  : ChangeLog 
Added files:
gcc/testsuite/gfortran.dg: eor_handling_1.f90 eor_handling_2.f90 
   eor_handling_3.f90 eor_handling_4.f90 
   eor_handling_5.f90 noadv_size.f90 
   pad_no.f90 

Log message:
2005-04-10  Thomas Koenig <[EMAIL PROTECTED]>

PR libfortran/17992
PR libfortran/19568
PR libfortran/19595
PR libfortran/20005
PR libfortran/20092
PR libfortran/20131
PR libfortran/20138
PR libfortran/20661
PR libfortran/20744
* io/transfer.c (top level): eor_condition: New static variable.
(read_sf): Remove unnecessary zeroing of buffer (there is enough
information in its length).
Return a string of length 0 (to be padded by caller) if EOR was
seen previously.
Remove erroneous special casing of EOR for standard input.
Set eor_condition for non-advancing I/O if an end of line was
detected.
Increment ioparm.size if necessary.
(formatted_transfer):  Skip the function if there is an EOR condition.
(data_transfer_init):  Initialize eor_condition to zero (false).
(next_record_r):  Clear sf_seen_eor if a \n has been seen already.
(finalize_transfer):  If there is an EOR condition, raise the error.

2005-04-10   Thomas Koenig  <[EMAIL PROTECTED]>

* eor_handling_1.f90: New test case.
* eor_handling_2.f90: New test case.
* eor_handling_3.f90: New test case.
* eor_handling_4.f90: New test case.
* eor_handling_5.f90: New test case.
* noadv_size.f90: New test case.
* pad_no.f90: New test case.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/ChangeLog.diff?cvsroot=gcc&r1=1.188&r2=1.189
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/transfer.c.diff?cvsroot=gcc&r1=1.35&r2=1.36
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.5320&r2=1.5321
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/eor_handling_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/eor_handling_2.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/eor_handling_3.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/eor_handling_4.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/eor_handling_5.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/noadv_size.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pad_no.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1



-- 


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


[Bug libfortran/20661] End of record not detected

2005-04-01 Thread Thomas dot Koenig at online dot de

--- Additional Comments From Thomas dot Koenig at online dot de  2005-04-01 
13:34 ---
This patch fixes the test case.  It also includes my
EOR patch for advancing I/O.

This is regression-tested on mainline.  I'll submit a proper
patch when I have finished regression-testing it on 4.0.

--- transfer.c.orig 2005-03-25 14:35:29.0 +0100
+++ transfer.c  2005-04-01 15:34:19.0 +0200
@@ -150,7 +150,12 @@ read_sf (int *length)
   else
 p = base = data;

-  memset(base,'\0',*length);
+  memset(base,' ',*length);
+
+  /* If we have seen an eor previously, return blanks.  */
+
+  if (sf_seen_eor)
+return base;

   current_unit->bytes_left = options.default_recl;
   readlen = 1;
@@ -179,12 +184,6 @@ read_sf (int *length)

   if (readlen < 1 || *q == '\n' || *q == '\r')
{
- /* ??? What is this for?  */
-  if (current_unit->unit_number == options.stdin_unit)
-{
-  if (n <= 0)
-continue;
-}
  /* Unexpected end of line.  */
  if (current_unit->flags.pad == PAD_NO)
{
@@ -193,8 +192,13 @@ read_sf (int *length)
}

  current_unit->bytes_left = 0;
- *length = n;
   sf_seen_eor = 1;
+
+ if (advance_status == ADVANCE_NO)
+   ioparm.library_return = LIBRARY_EOR;
+ else
+   *length = n;
+
  break;
}

@@ -748,6 +752,9 @@ formatted_transfer (bt type, void *p, in
  internal_error ("Bad format node");
}

+  if (ioparm.library_return == LIBRARY_EOR)
+   generate_error (ERROR_EOR, NULL);
+
   /* Free a buffer that we had to allocate during a sequential
 formatted read of a block that was larger than the static
 buffer.  */
@@ -1223,7 +1230,10 @@ next_record_r (int done)
   length = 1;
   /* sf_read has already terminated input because of an '\n'  */
   if (sf_seen_eor)
- break;
+   {
+ sf_seen_eor=0;
+ break;
+   }

   do
 {


-- 


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


[Bug libfortran/20661] End of record not detected

2005-03-29 Thread Thomas dot Koenig at online dot de

--- Additional Comments From Thomas dot Koenig at online dot de  2005-03-29 
15:11 ---
I'll try and have a look.

Hopefully, my copyright papers that I sent off on 2005-03-19 will
come through sometime soon, because the end-of-record patch
at http://gcc.gnu.org/ml/gcc-patches/2005-03/msg00729.html (or
something that does the same job) needs to be applied before
going into this one.

Thomas

-- 


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


[Bug libfortran/20661] End of record not detected

2005-03-28 Thread tobi at gcc dot gnu dot org

--- Additional Comments From tobi at gcc dot gnu dot org  2005-03-28 17:48 
---
To clarify this:
! End of record is not detected
!on second READ
! iostats should be 0, 0, -2, -1

The standard says:
"Execution of an input/output statement containing the IOSTAT= specifier causes
the variable specified in the IOSTAT= specifier to become defined
(1) With a zero value if neither an error condition, and end-of-file condition,
nor an end-of-record condition occurs,
(2) With a processor-dependent positive integer value if an error condition 
occurs,
(3) With a processor-dependent negative integer value if an end-of-ile condition
occurs and no error condition occurs, or
(4) With a processor-dependent negative integer value different from the
end-of-file value if and end-of-record condition occurs and no error condition
or end-of-file condition occurs.

Current output from gfortran:
 iostat   0
 iostat   0 x
 iostat   0
 iostat  -1

-- 


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


[Bug libfortran/20661] End of record not detected

2005-03-27 Thread pinskia at gcc dot gnu dot org

--- Additional Comments From pinskia at gcc dot gnu dot org  2005-03-27 
22:02 ---
Confirmed.

-- 
   What|Removed |Added

 Status|UNCONFIRMED |NEW
  Component|fortran |libfortran
 Ever Confirmed||1
   Last reconfirmed|-00-00 00:00:00 |2005-03-27 22:02:41
   date||


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