[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-fortran
Subject:    [patch, libgfortran] PR25594 LAPACK regression in schkbl.f
From:       Jerry DeLisle <jvdelisle () verizon ! net>
Date:       2005-12-30 8:16:27
Message-ID: 43B4ECDB.1070803 () verizon ! net
[Download RAW message or body]

:ADDPATCH fortran:

The following patch fixes this regression in LAPACK.  I could not reduce the 
test case.  This patch also is a new fix for PR25419.  The original fix for 
this caused the regression.    I added some comments to clarify whats going on 
here.  The original problem is that an initial comma for the first item of a 
list directed read was being skipped.  This patch adds a check for that 
condition which is already being detected in eat_separator.  The if-else clause 
in the patch here is the original code in place before the pr25419 patch was 
applied.

NIST Tested, LAPACK tested, regression tested.  All OK.  Original test case 
comma.f has already been committed to 4.2.  OK for 4.2 and 4.1?

Regards,

Jerry

2005-12-30  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/25594
	PR libgfortran/25419
	* io/list_read.c (list_formatted_read_scalar): Test for comma to return
	a null value (default). Revert patch of 25419 on 2005-12-28.

Index: io/list_read.c
===================================================================
*** io/list_read.c      (revision 109123)
--- io/list_read.c      (working copy)
*************** list_formatted_read_scalar (st_parameter
*** 1353,1359 ****
         {                       /* Found a null value.  */
           eat_separator (dtp);
           dtp->u.p.repeat_count = 0;
!         goto cleanup;
         }

       }
--- 1353,1368 ----
         {                       /* Found a null value.  */
           eat_separator (dtp);
           dtp->u.p.repeat_count = 0;
!
!         /* eat_separator sets this flag if the separator was a comma */
!         if (dtp->u.p.comma_flag)
!           goto cleanup;
!
!         /* eat_separator sets this flag if the separator was a \n or \r */
!         if (dtp->u.p.at_eol)
!           finish_separator (dtp);
!         else
!           goto cleanup;
         }

       }

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic