PR 83036 Make NEXTREC specifier for INQUIRE work for large record numbers
authorJanne Blomqvist <jb@gcc.gnu.org>
Sat, 18 Nov 2017 16:56:21 +0000 (18:56 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Sat, 18 Nov 2017 16:56:21 +0000 (18:56 +0200)
This is accomplished by making the NEXTREC specifier be a 8 byte
integer where supported.

I wasn't able to come up with a testcase that does not create a large
file that could be added to the testsuite, but here's one which
creates a 2 GB file:

program nextrec
  implicit none
  integer(8) :: ii, n
  open(10, file="foo.dat", recl=1, access="direct", form="unformatted", &
       status="replace")
  do ii = 1, huge(1) + 2_8
     write(10, rec=ii) 'a'
  end do
  inquire(10, nextrec=n)
  if (n /= huge(1) + 3_8) then
     call abort()
  end if
  close(10, status="delete")
end program nextrec

Regtested on x86_64-pc-linux-gnu.

gcc/fortran/ChangeLog:

2017-11-18  Janne Blomqvist  <jb@gcc.gnu.org>

PR fortran/83036
* ioparm.def (IOPARM): Make nextrec a pintio.

libgfortran/ChangeLog:

2017-11-18  Janne Blomqvist  <jb@gcc.gnu.org>

PR fortran/83036
* io/io.h: Make nextrec a GFC_IO_INT*.
---
 gcc/fortran/ioparm.def | 2 +-
 libgfortran/io/io.h    | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def
index 5fc04bc..59cc7cd 100644
--- a/gcc/fortran/ioparm.def
+++ b/gcc/fortran/ioparm.def
@@ -62,7 +62,7 @@ IOPARM (inquire, exist, 1 << 7,  pint4)
 IOPARM (inquire, opened, 1 << 8,  pint4)
 IOPARM (inquire, number, 1 << 9,  pint4)
 IOPARM (inquire, named, 1 << 10, pint4)
-IOPARM (inquire, nextrec, 1 << 11, pint4)
+IOPARM (inquire, nextrec, 1 << 11, pintio)
 IOPARM (inquire, recl_out, 1 << 12, pintio)
 IOPARM (inquire, strm_pos_out, 1 << 13, pintio)
 IOPARM (inquire, file, 1 << 14, char1)
diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h
index 3330bce..d29b112 100644
--- a/libgfortran/io/io.h
+++ b/libgfortran/io/io.h
@@ -388,8 +388,7 @@ typedef struct
 {
   st_parameter_common common;
   GFC_INTEGER_4 *exist, *opened, *number, *named;
-  GFC_INTEGER_4 *nextrec;
-  GFC_IO_INT  *recl_out, *strm_pos_out;
+  GFC_IO_INT *nextrec, *recl_out, *strm_pos_out;
   CHARACTER1 (file);
   CHARACTER2 (access);
   CHARACTER1 (form);
--
2.7.4

From-SVN: r254916

gcc/fortran/ChangeLog
gcc/fortran/ioparm.def
libgfortran/ChangeLog
libgfortran/io/io.h

index 43349019b6f2009c861c0419b13cbd20951e29fd..2e8bbd82ce11b9efd072e9e9642b604e8b98ccf6 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-18  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       PR fortran/83036
+       * ioparm.def (IOPARM): Make nextrec a pintio.
+
 2017-11-18  Janne Blomqvist  <jb@gcc.gnu.org>
 
        PR fortran/44292
index 5fc04bc9019b332ddcc13adb341d1c9f541723e9..59cc7cdb432df6661a435b139ded48e33cf8e0a1 100644 (file)
@@ -62,7 +62,7 @@ IOPARM (inquire, exist,               1 << 7,  pint4)
 IOPARM (inquire, opened,       1 << 8,  pint4)
 IOPARM (inquire, number,       1 << 9,  pint4)
 IOPARM (inquire, named,                1 << 10, pint4)
-IOPARM (inquire, nextrec,      1 << 11, pint4)
+IOPARM (inquire, nextrec,      1 << 11, pintio)
 IOPARM (inquire, recl_out,     1 << 12, pintio)
 IOPARM (inquire, strm_pos_out, 1 << 13, pintio)
 IOPARM (inquire, file,         1 << 14, char1)
index fa5646ba94f2c8f8df9b6d4d7416d669b140ce1e..3af699d1640e40e3931f74825a8efc970ce840e5 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-18  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       PR fortran/83036
+       * io/io.h: Make nextrec a GFC_IO_INT*.
+
 2017-11-18  Janne Blomqvist  <jb@gcc.gnu.org>
 
        PR fortran/44292
index 3330bcee6259e491d911f9a6a667c45893c8eb9a..d29b112b9c4474788989fd008df35ecb13292604 100644 (file)
@@ -388,8 +388,7 @@ typedef struct
 {
   st_parameter_common common;
   GFC_INTEGER_4 *exist, *opened, *number, *named;
-  GFC_INTEGER_4 *nextrec;
-  GFC_IO_INT  *recl_out, *strm_pos_out;
+  GFC_IO_INT *nextrec, *recl_out, *strm_pos_out;
   CHARACTER1 (file);
   CHARACTER2 (access);
   CHARACTER1 (form);