Patchwork [Fortran] PR52335 - allow OPEN(..., DELIM=) with -std=f95

login
register
mail settings
Submitter Tobias Burnus
Date Feb. 22, 2012, 9:55 a.m.
Message ID <4F44BB82.6000409@net-b.de>
Download mbox | patch
Permalink /patch/142428/
State New
Headers show

Comments

Tobias Burnus - Feb. 22, 2012, 9:55 a.m.
The following patch fixes a 4.4 to 4.7 regression. Already Fortran 95 
allows DELIM= in OPEN and INQUIRE. Fortran 2003 only added it to data 
transfer statements (i.e. WRITE; not allowed for READ and not possible 
for PRINT). Cf. F95/F2003 standard and the PR.

Build and regtested on x86-64-linux.
OK for the trunk and the 4.4 to 4.6 branches?

Tobias

PS: I am not sure how far I will back port, maybe only to 4.5.
Steve Kargl - Feb. 22, 2012, 4:55 p.m.
On Wed, Feb 22, 2012 at 10:55:14AM +0100, Tobias Burnus wrote:
> The following patch fixes a 4.4 to 4.7 regression. Already Fortran 95 
> allows DELIM= in OPEN and INQUIRE. Fortran 2003 only added it to data 
> transfer statements (i.e. WRITE; not allowed for READ and not possible 
> for PRINT). Cf. F95/F2003 standard and the PR.
> 
> Build and regtested on x86-64-linux.
> OK for the trunk and the 4.4 to 4.6 branches?
> 
> Tobias
> 
> PS: I am not sure how far I will back port, maybe only to 4.5.

OK for 4.5 to trunk.  I doubt that 4.4 will see a new
release anytime soon.

Patch

2012-02-22  Tobias Burnus  <burnus@net-b.de>

	PR fortran/52335
	* io.c (gfc_match_open): Remove bogus F2003 DELIM= check.

2012-02-22  Tobias Burnus  <burnus@net-b.de>

	PR fortran/52335
	* gfortran.dg/io_constraints_10.f90: New.

Index: gcc/fortran/io.c
===================================================================
--- gcc/fortran/io.c	(revision 184459)
+++ gcc/fortran/io.c	(working copy)
@@ -1947,10 +1947,6 @@  gfc_match_open (void)
   /* Checks on the DELIM specifier.  */
   if (open->delim)
     {
-      if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DELIM= at %C "
-	  "not allowed in Fortran 95") == FAILURE)
-	goto cleanup;
-
       if (open->delim->expr_type == EXPR_CONSTANT)
 	{
 	  static const char *delim[] = { "APOSTROPHE", "QUOTE", "NONE", NULL };
Index: gcc/testsuite/gfortran.dg/io_constraints_10.f90
===================================================================
--- gcc/testsuite/gfortran.dg/io_constraints_10.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/io_constraints_10.f90	(working copy)
@@ -0,0 +1,16 @@ 
+! { dg-do compile }
+! { dg-options "-std=f95" }
+!
+! PR fortran/52335
+!
+
+integer :: lun
+character(len=20) :: str
+
+! VALID Fortran 95:
+open(unit=lun,file=str,delim='apostrophe',status='old')
+inquire(lun, delim=str)
+
+! Fortran 2003:
+write(*,*, delim='apostrophe') 'a' ! { dg-error "Fortran 2003: DELIM= at .1. not allowed in Fortran 95" }
+end