[libgfortran] PR84412 [7/8 Regression] Erroneous "Inquire statement identifies an internal file" error

Message ID cc87855a-cb43-5d87-acfa-89c1c7d156a3@charter.net
State New
Headers show
Series
  • [libgfortran] PR84412 [7/8 Regression] Erroneous "Inquire statement identifies an internal file" error
Related show

Commit Message

Jerry Feb. 18, 2018, 4:57 a.m.
Hi all,

The following patch is trivial and I plan to commit in the next day or 
so to trunk and gcc 7.

Regression tested on x86_64-pc-gnu-linux.

Regards,

Jerry

2018-02-18  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/84412
	* io/transfer.c (finalize_transfer): After completing
	  an internal unit I/O operation, clear internal_unit_kind.

Patch

diff --git a/gcc/testsuite/gfortran.dg/inquire_18.f90 
b/gcc/testsuite/gfortran.dg/inquire_18.f90
new file mode 100644
index 00000000000..9829688225b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/inquire_18.f90
@@ -0,0 +1,11 @@ 
+! { dg-do run }
+! PR84412 Wrong "Inquire statement identifies an internal file" error
+program bug
+  implicit none
+  integer          :: i
+  character(len=1) :: s
+  write (s,'(i1)') 0
+  open(newUnit=i,file='inquire_18.txt',status='unknown')
+  inquire(unit=i)
+  close(i, status="delete")
+end program bug
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 8bc828c0214..df33bed1561 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -3993,6 +3993,10 @@  finalize_transfer (st_parameter_dt *dtp)

    if (dtp->u.p.unit_is_internal)
      {
+      /* The unit structure may be reused later so clear the
+	 internal unit kind.  */
+      dtp->u.p.current_unit->internal_unit_kind = 0;
+
        fbuf_destroy (dtp->u.p.current_unit);
        if (dtp->u.p.current_unit
  	  && (dtp->u.p.current_unit->child_dtio  == 0)