re PR libfortran/33055 (Runtime error in INQUIRE unit existance with -fdefault-integer-8)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 15 Oct 2007 13:59:02 +0000 (13:59 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 15 Oct 2007 13:59:02 +0000 (13:59 +0000)
2007-10-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/33055
* io/inquire.c (inquire_via_unit):  If inquiring by unit, check for
an error condition from the IOSTAT variable and set EXIST to false if
there was a bad unit number.

From-SVN: r129344

libgfortran/ChangeLog
libgfortran/io/inquire.c

index 2b9e67e..34df500 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/33055
+       * io/inquire.c (inquire_via_unit):  If inquiring by unit, check for
+       an error condition from the IOSTAT variable and set EXIST to false if
+       there was a bad unit number.
+
 2007-10-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/33672
index 2c16a3b..493b223 100644 (file)
@@ -45,7 +45,18 @@ inquire_via_unit (st_parameter_inquire *iqp, gfc_unit * u)
   GFC_INTEGER_4 cf = iqp->common.flags;
 
   if ((cf & IOPARM_INQUIRE_HAS_EXIST) != 0)
-    *iqp->exist = iqp->common.unit >= 0;
+    {
+      *iqp->exist = (iqp->common.unit >= 0
+                    && iqp->common.unit <= GFC_INTEGER_4_HUGE);
+
+      if ((cf & IOPARM_INQUIRE_HAS_FILE) == 0)
+       {
+         if (!(*iqp->exist))
+           *iqp->common.iostat = LIBERROR_BAD_UNIT;
+         *iqp->exist = *iqp->exist
+                       && (*iqp->common.iostat != LIBERROR_BAD_UNIT);
+       }
+    }
 
   if ((cf & IOPARM_INQUIRE_HAS_OPENED) != 0)
     *iqp->opened = (u != NULL);