re PR fortran/66979 (gfortran internal compiler error with malformed FLUSH statement)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 2 Oct 2015 00:49:28 +0000 (00:49 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Fri, 2 Oct 2015 00:49:28 +0000 (00:49 +0000)
2015-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/66979
* io.c (gfc_resolve_filepos): Check for a UNIT number.  Add a nearby
missing 'return false'.

2015-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/66979
gfortran.dg/pr66979.f90: new test.

From-SVN: r228364

gcc/fortran/ChangeLog
gcc/fortran/io.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr66979.f90 [new file with mode: 0644]

index 2a306e55f69a1031e61d8048bfd3205bf78f2681..9e6f2bdbcd530ee955327445a9d68195066d180e 100644 (file)
@@ -1,3 +1,9 @@
+2015-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/66979
+       * io.c (gfc_resolve_filepos): Check for a UNIT number.  Add a nearby
+       missing 'return false'.
+
 2015-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/67616
index cff2b689786726dd50845ac944c7ef814e5c7b43..e5d68fb60badc52f51b5c62f761b6d6ff792bd64 100644 (file)
@@ -2515,12 +2515,21 @@ gfc_resolve_filepos (gfc_filepos *fp)
   if (!gfc_reference_st_label (fp->err, ST_LABEL_TARGET))
     return false;
 
+  if (!fp->unit && (fp->iostat || fp->iomsg))
+    {
+      locus where;
+      where = fp->iostat ? fp->iostat->where : fp->iomsg->where;
+      gfc_error ("UNIT number missing in statement at %L", &where);
+      return false;
+    }
+
   if (fp->unit->expr_type == EXPR_CONSTANT
       && fp->unit->ts.type == BT_INTEGER
       && mpz_sgn (fp->unit->value.integer) < 0)
     {
       gfc_error ("UNIT number in statement at %L must be non-negative",
                 &fp->unit->where);
+      return false;
     }
 
   return true;
index bf9b3e406f2d3e894eb7d9c24e1ecebda896ea1b..ea748b92adc4117bfa3d77b3a20d2dfbc6e2e5f3 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/66979
+       gfortran.dg/pr66979.f90: new test.
+
 2015-10-01  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/67616
diff --git a/gcc/testsuite/gfortran.dg/pr66979.f90 b/gcc/testsuite/gfortran.dg/pr66979.f90
new file mode 100644 (file)
index 0000000..c102e91
--- /dev/null
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/66979
+program p
+  implicit none
+  integer::i
+  flush (iostat=i) ! { dg-error "UNIT number missing" }
+end program p