PR libfortran/20660
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Mar 2005 15:30:06 +0000 (15:30 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Mar 2005 15:30:06 +0000 (15:30 +0000)
    * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97326 138bc75d-0d04-0410-961f-82ee72b054a4

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 4d30efb..b6714aa 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 edc23af..0272638 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 28c2f6a..1f0fcac 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 aed0aa9..4d48323 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;