aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2018-02-18 15:32:39 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2018-02-18 15:32:39 +0000
commitb56dd8eb4b1d1684e78f67e7b425dbfd4817297d (patch)
treec964e1236096628ad7e54d9596ccc526e960313f
parent39ba1ab1421bb0f3791b1cece210740121ca49c2 (diff)
2018-02-18 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/84412 * io/transfer.c (finalize_transfer): After completng an internal unit I/O operation, clear internal_unit_kind. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@257791 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/gfortran.dg/inquire_18.f9011
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/transfer.c4
3 files changed, 21 insertions, 0 deletions
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/ChangeLog b/libgfortran/ChangeLog
index 2220ec2bae6..20a13e46a4f 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-18 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/84412
+ * io/transfer.c (finalize_transfer): After completng an internal unit
+ I/O operation, clear internal_unit_kind.
+
2018-02-12 Thomas Koenig <tkoenig@gcc.gnu.org>
* libgfortran.h (GFC_ARRAY_DESCRIPTOR): Remove dimension
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)