From dc04311d573ff9f15239325ba7f4e720cb91f2d5 Mon Sep 17 00:00:00 2001
From: jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Nov 2005 09:12:36 +0000
Subject: [PATCH] libgfortran ChangeLog:

2005-11-26  Janne Blomqvist  <jb@gcc.gnu.org>

	PR libgfortran/24945
	* io/open.c (edit_modes): Check for STATUS_UNKNOWN flag.

testsuite ChangeLog

2005-11-26  Janne Blomqvist  <jb@gcc.gnu.org>

	PR libgfortran/24945
	* gfortran.dg/open_status_2.f90: New test.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107538 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/testsuite/ChangeLog                     |  5 +++++
 gcc/testsuite/gfortran.dg/open_status_2.f90 | 12 ++++++++++++
 libgfortran/ChangeLog                       |  5 +++++
 libgfortran/io/open.c                       |  5 +++--
 4 files changed, 25 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/open_status_2.f90

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 99342b2e8716..4f73095150e6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-26  Janne Blomqvist  <jb@gcc.gnu.org>
+
+	PR libgfortran/24945
+	* gfortran.dg/open_status_2.f90: New test.
+	
 2005-11-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* gcc.c-torture/execute/builtins/fprintf.c,
diff --git a/gcc/testsuite/gfortran.dg/open_status_2.f90 b/gcc/testsuite/gfortran.dg/open_status_2.f90
new file mode 100644
index 000000000000..8b4b5776c7fe
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/open_status_2.f90
@@ -0,0 +1,12 @@
+! { dg-do run } 
+! PR 25036
+! Test reopening file without status specifier or with
+! status='unknown'. The standard says that these two must behave
+! identically, but the actual behaviour is processor dependent.
+program open_status_2
+  open(10, file="f", form='unformatted', status='unknown')
+  open(10, file="f", form='unformatted', status='unknown')
+  open(10, file="f", form='unformatted')
+  close(10, status='delete')
+end program open_status_2
+ 
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index a637ee475362..03629e24f88a 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-26  Janne Blomqvist  <jb@gcc.gnu.org>
+
+	PR libgfortran/24945
+	* io/open.c (edit_modes): Check for STATUS_UNKNOWN flag.
+	
 2005-11-25  Richard Henderson  <rth@redhat.com>
 
 	* io/list_read.c (nml_parse_qualifier): Use memcpy to extract
diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c
index 54595097049b..7e42cc6a2c84 100644
--- a/libgfortran/io/open.c
+++ b/libgfortran/io/open.c
@@ -144,9 +144,10 @@ edit_modes (st_parameter_open *opp, gfc_unit * u, unit_flags * flags)
 
   /* Status must be OLD if present.  */
 
-  if (flags->status != STATUS_UNSPECIFIED && flags->status != STATUS_OLD)
+  if (flags->status != STATUS_UNSPECIFIED && flags->status != STATUS_OLD &&
+      flags->status != STATUS_UNKNOWN)
     generate_error (&opp->common, ERROR_BAD_OPTION,
-		    "OPEN statement must have a STATUS of OLD");
+		    "OPEN statement must have a STATUS of OLD or UNKNOWN");
 
   if (u->flags.form == FORM_UNFORMATTED)
     {
-- 
GitLab