From 6ae786d29d88806d1a1f3572c405238cae53b43f Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Mon, 15 Oct 2007 13:59:02 +0000 Subject: [PATCH] re PR libfortran/33055 (Runtime error in INQUIRE unit existance with -fdefault-integer-8) 2007-10-15 Jerry DeLisle 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 | 7 +++++++ libgfortran/io/inquire.c | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 2b9e67e4b4e1..34df5007e92a 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2007-10-15 Jerry DeLisle + + 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 PR libfortran/33672 diff --git a/libgfortran/io/inquire.c b/libgfortran/io/inquire.c index 2c16a3b922d2..493b2230f9d0 100644 --- a/libgfortran/io/inquire.c +++ b/libgfortran/io/inquire.c @@ -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);