re PR libfortran/20660 (INQUIRE incorrectly reports the existence of UNITS)
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>
Thu, 31 Mar 2005 15:30:06 +0000 (17:30 +0200)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Thu, 31 Mar 2005 15:30:06 +0000 (15:30 +0000)
    PR libfortran/20660
    * io/inquire.c (inquire_via_unit): Non-opened units should still be
    reported by an INQUIRE statement as existing.
    * io/transfer.c (data_transfer_init): Never accept negative units.

    PR libfortran/20660
    * gfortran.dg/negative_unit.f: New test.

From-SVN: r97326

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/negative_unit.f [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/inquire.c
libgfortran/io/transfer.c

index 4d30efb3dae3296d0b9b21352a3f2319a55af919..b6714aa40b26a78b772518dc72997b18bf828241 100644 (file)
@@ -1,3 +1,8 @@
+2005-03-31  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/20660
+       * gfortran.dg/negative_unit.f: New test.
+
 2005-03-31 Mostafa Hagog <mustafa@il.ibm.com>
 
        * gcc.dg/20050330-1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/negative_unit.f b/gcc/testsuite/gfortran.dg/negative_unit.f
new file mode 100644 (file)
index 0000000..ba0d3cd
--- /dev/null
@@ -0,0 +1,22 @@
+! {dg-do run}
+!
+! PR libfortran/20660 and other bugs (not filed in bugzilla) relating
+! to negative units
+!
+! Bugs submitted by Walt Brainerd
+      integer i
+      logical l
+      
+      i = 0
+! gfortran created a 'fort.-1' file and wrote "Hello" in it
+      write (unit=-1, fmt=*, iostat=i) "Hello"
+      if (i <= 0) call abort
+      
+      i = 0
+      open (unit=-11, file="xxx", iostat=i)
+      if (i <= 0) call abort
+
+      inquire (unit=-42, exist=l)
+      if (l) call abort
+
+      end
index edc23af6ce93413c55e5de925c09203bf2b9fb03..027263899d0828dd553f9188f673454d9765e564 100644 (file)
@@ -1,3 +1,10 @@
+2005-03-31  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/20660
+       * io/inquire.c (inquire_via_unit): Non-opened units should still be
+       reported by an INQUIRE statement as existing.
+       * io/transfer.c (data_transfer_init): Never accept negative units.
+
 2005-03-29  Dale Ranta  <dir@lanl.gov>
            Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
index 28c2f6afbc5cb9bc4505213dbafbbc1e83e3a5e4..1f0fcac6530fa40697fad6e1d64f9a8daf670e47 100644 (file)
@@ -46,7 +46,12 @@ inquire_via_unit (gfc_unit * u)
   const char *p;
 
   if (ioparm.exist != NULL)
-    *ioparm.exist = (u != NULL);
+  {
+    if (ioparm.unit >= 0)
+      *ioparm.exist = 1;
+    else
+      *ioparm.exist = 0;
+  }
 
   if (ioparm.opened != NULL)
     *ioparm.opened = (u != NULL);
index aed0aa90dbc8a4f9e4d20a9aa9346ea1c0be21f5..4d4832395d956a70c8566449e29494b7b18bb819 100644 (file)
@@ -935,6 +935,12 @@ data_transfer_init (int read_flag)
   current_unit = get_unit (read_flag);
   if (current_unit == NULL)
   {  /* Open the unit with some default flags.  */
+     if (ioparm.unit < 0)
+     {
+       generate_error (ERROR_BAD_OPTION, "Bad unit number in OPEN statement");
+       library_end ();
+       return;
+     }
      memset (&u_flags, '\0', sizeof (u_flags));
      u_flags.access = ACCESS_SEQUENTIAL;
      u_flags.action = ACTION_READWRITE;