re PR libfortran/24892 (ACCESS argument to the OPEN statement)

PR fortran/24892
	* io/io.h (unit_access): Add ACCESS_APPEND.
	* io/open.c (access_opt): Add APPEND value for ACCESS keyword.
	(st_open): Use that new value to set the POSITION accordingly.

	* gfortran.dg/open_access_append_1.f90: New test.
	* gfortran.dg/open_access_append_2.f90: New test.

From-SVN: r107119
This commit is contained in:
Francois-Xavier Coudert 2005-11-17 13:46:57 +01:00 committed by François-Xavier Coudert
parent 0bc52d42a8
commit 1c2e7a3ab3
6 changed files with 53 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2005-11-17 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR fortran/24892
* gfortran.dg/open_access_append_1.f90: New test.
* gfortran.dg/open_access_append_2.f90: New test.
2005-11-16 Richard Guenther <rguenther@suse.de>
PR middle-end/24851

View File

@ -0,0 +1,20 @@
! { dg-do run }
! Testcase for the GNU extension OPEN(...,ACCESS="APPEND")
open (10,file="foo")
close (10,status="delete")
open (10,file="foo",access="append") ! { dg-output ".*Extension.*" }
write (10,*) 42
close (10,status="keep")
open (10,file="foo",access="append") ! { dg-output ".*Extension.*" }
write (10,*) -42
close (10,status="keep")
open (10,file="foo")
read (10,*) i
if (i /= 42) call abort
read (10,*) i
if (i /= -42) call abort
close (10,status="delete")
end

View File

@ -0,0 +1,5 @@
! { dg-do run }
! Testcase for the GNU extension OPEN(...,ACCESS="APPEND")
open (10,err=900,access="append",position="asis") ! { dg-output ".*Extension.*" }
call abort
900 end

View File

@ -1,3 +1,10 @@
2005-11-17 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR fortran/24892
* io/io.h (unit_access): Add ACCESS_APPEND.
* io/open.c (access_opt): Add APPEND value for ACCESS keyword.
(st_open): Use that new value to set the POSITION accordingly.
2005-11-14 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/21468

View File

@ -153,7 +153,7 @@ namelist_info;
/* Options for the OPEN statement. */
typedef enum
{ ACCESS_SEQUENTIAL, ACCESS_DIRECT,
{ ACCESS_SEQUENTIAL, ACCESS_DIRECT, ACCESS_APPEND,
ACCESS_UNSPECIFIED
}
unit_access;

View File

@ -39,6 +39,7 @@ Boston, MA 02110-1301, USA. */
static const st_option access_opt[] = {
{"sequential", ACCESS_SEQUENTIAL},
{"direct", ACCESS_DIRECT},
{"append", ACCESS_APPEND},
{NULL, 0}
};
@ -486,6 +487,19 @@ st_open (void)
generate_error (ERROR_BAD_OPTION,
"Cannot use POSITION with direct access files");
if (flags.access == ACCESS_APPEND)
{
if (flags.position != POSITION_UNSPECIFIED
&& flags.position != POSITION_APPEND)
generate_error (ERROR_BAD_OPTION, "Conflicting ACCESS and POSITION "
"flags in OPEN statement");
notify_std (GFC_STD_GNU,
"Extension: APPEND as a value for ACCESS in OPEN statement");
flags.access = ACCESS_SEQUENTIAL;
flags.position = POSITION_APPEND;
}
if (flags.position == POSITION_UNSPECIFIED)
flags.position = POSITION_ASIS;