Re: [Patch, Fortran, 4.8/4.9/5 Regression] PR59513 READ or WRITE not allowed after EOF

2015-03-22 Thread Dominique Dhumieres
Dear Jerry,

IMO the patch is in the obvious range, but needs to document the extension and 
may be
a test case.

Cheers,

Dominique


Re: [Patch, Fortran, 4.8/4.9/5 Regression] PR59513 READ or WRITE not allowed after EOF

2015-03-22 Thread Janne Blomqvist
On Sat, Mar 21, 2015 at 12:24 AM, Jerry DeLisle jvdeli...@charter.net wrote:
 The attached patch allows the attempt to READ or WRITE after an EOF for
 legacy code.  The runtime error is suppressed for -std=legacy and -std=gnu.
 For standard conformance the error is retained as is now.

Since it's a standard violation rather than a GNU extension, I'd
prefer if it were enabled only with -std=legacy.

Ok with this change.


-- 
Janne Blomqvist


Re: [Patch, Fortran, 4.8/4.9/5 Regression] PR59513 READ or WRITE not allowed after EOF

2015-03-22 Thread Jerry DeLisle

On 03/22/2015 08:47 AM, Janne Blomqvist wrote:

On Sat, Mar 21, 2015 at 12:24 AM, Jerry DeLisle jvdeli...@charter.net wrote:

The attached patch allows the attempt to READ or WRITE after an EOF for
legacy code.  The runtime error is suppressed for -std=legacy and -std=gnu.
For standard conformance the error is retained as is now.


Since it's a standard violation rather than a GNU extension, I'd
prefer if it were enabled only with -std=legacy.

Ok with this change.




The attached patch adds documentation under 'extensions' in gfortran.texi.

Tested with make html.

I will commit soon with a ChangeLog entry

Regards,

Jerry
Index: gfortran.texi
===
--- gfortran.texi	(revision 221544)
+++ gfortran.texi	(working copy)
@@ -1404,6 +1404,7 @@ without warning.
 * OpenMP::
 * OpenACC::
 * Argument list functions::
+* Read/Write after EOF marker::
 @end menu
 
 @node Old-style kind specifications
@@ -2049,7 +2050,19 @@ For details refer to the g77 manual
 Also, @code{c_by_val.f} and its partner @code{c_by_val.c} of the
 GNU Fortran testsuite are worth a look.
 
+@node Read/Write after EOF marker
+@subsection Read/Write after EOF marker
+@cindex @code{EOF}
+@cindex @code{BACKSPACE}
+@cindex @code{REWIND}
 
+Some legacy codes rely on allowing @code{READ} or @code{WRITE} after the
+EOF file marker in order to find the end of a file. GNU Fortran normally
+rejects these codes with a run-time error message and suggests the user
+consider @code{BACKSPACE} or @code{REWIND} to properly position
+the file before the EOF marker.  As an extension, the run-time error may
+be disabled using -std=legacy.
+
 @node Extensions not implemented in GNU Fortran
 @section Extensions not implemented in GNU Fortran
 @cindex extensions, not implemented


Re: [Patch, Fortran, 4.8/4.9/5 Regression] PR59513 READ or WRITE not allowed after EOF

2015-03-22 Thread Jerry DeLisle

On 03/22/2015 08:47 AM, Janne Blomqvist wrote:

On Sat, Mar 21, 2015 at 12:24 AM, Jerry DeLisle jvdeli...@charter.net wrote:

The attached patch allows the attempt to READ or WRITE after an EOF for
legacy code.  The runtime error is suppressed for -std=legacy and -std=gnu.
For standard conformance the error is retained as is now.


Since it's a standard violation rather than a GNU extension, I'd
prefer if it were enabled only with -std=legacy.

Ok with this change.




Done.  No need for new test case, it is covered by endfile_3.f90 as is.

SendingChangeLog
Sendingio/transfer.c
Transmitting file data ..
Committed revision 221572.

Thanks and best regards,

Jerry


[Patch, Fortran, 4.8/4.9/5 Regression] PR59513 READ or WRITE not allowed after EOF

2015-03-20 Thread Jerry DeLisle
The attached patch allows the attempt to READ or WRITE after an EOF for legacy 
code.  The runtime error is suppressed for -std=legacy and -std=gnu. For 
standard conformance the error is retained as is now.


Regression tested on x86-64.  Test case endfile_3.f90 is updated by the patch.

OK for trunk and then 4.9, 4.8?

Regards,

Jerry

2015-03-20 Jerry DeLisle  jvdeli...@gcc.gnu.org

PR libgfortran/59513
* io/transfer.c (data_transfer_init): Only error if -std=f95 or
higher.
Index: libgfortran/io/transfer.c
===
--- libgfortran/io/transfer.c	(revision 221543)
+++ libgfortran/io/transfer.c	(working copy)
@@ -2533,7 +2533,8 @@ data_transfer_init (st_parameter_dt *dtp, int read
 	  return;
 	}
 
-  if (dtp-u.p.current_unit-endfile == AFTER_ENDFILE)
+  if (!(compile_options.allow_std  GFC_STD_GNU) 
+	  dtp-u.p.current_unit-endfile == AFTER_ENDFILE)
   	{
 	  generate_error (dtp-common, LIBERROR_OPTION_CONFLICT,
 			Sequential READ or WRITE not allowed after 
Index: gcc/testsuite/gfortran.dg/endfile_3.f90
===
--- gcc/testsuite/gfortran.dg/endfile_3.f90	(revision 221473)
+++ gcc/testsuite/gfortran.dg/endfile_3.f90	(working copy)
@@ -1,9 +1,10 @@
 ! { dg-do run { target fd_truncate } }
+! { dg-options -std=f95 }
 ! pr44477 READ/WRITE not allowed after ENDFILE 
 !---
   open(10, form='formatted', 
 action='write', position='rewind', status=scratch)
   endfile(10)
-  write(10,'(a)') aa ! { dg-shouldfail Cannot perform ENDFILE }
+  write(10,'(a)')aa! { dg-shouldfail not allowed after EOF marker }
 end