]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/50404 (SIGSEGV in gfc_resolve_close)
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Tue, 8 Nov 2011 23:54:43 +0000 (23:54 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Tue, 8 Nov 2011 23:54:43 +0000 (23:54 +0000)
PR fortran/50404
* io.c (gfc_resolve_close): CLOSE requires a UNIT.
* gfortran.dg/io_constraints_3.f90: Improve testcase.

From-SVN: r181183

gcc/fortran/ChangeLog
gcc/fortran/io.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/io_constraints_3.f90

index 29294f7e740396d625ed1ffc86aa08e6f3f9a20a..0d1d7b6afc7c58eb9cca81b22b78521b3178e89d 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-08  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/50404
+       * io.c (gfc_resolve_close): CLOSE requires a UNIT.
+
 2011-11-08  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        PR fortran/50409
index a291bb8b167ce876f6b0c90691ec36d6c5d4a1c2..88f7a249e001377ffcd38f1c149ca43953687459 100644 (file)
@@ -2295,6 +2295,24 @@ gfc_resolve_close (gfc_close *close)
   if (gfc_reference_st_label (close->err, ST_LABEL_TARGET) == FAILURE)
     return FAILURE;
 
+  if (close->unit == NULL)
+    {
+      /* Find a locus from one of the arguments to close, when UNIT is
+        not specified.  */
+      locus loc = gfc_current_locus;
+      if (close->status)
+       loc = close->status->where;
+      else if (close->iostat)
+       loc = close->iostat->where;
+      else if (close->iomsg)
+       loc = close->iomsg->where;
+      else if (close->err)
+       loc = close->err->where;
+
+      gfc_error ("CLOSE statement at %L requires a UNIT number", &loc);
+      return FAILURE;
+    }
+
   if (close->unit->expr_type == EXPR_CONSTANT
       && close->unit->ts.type == BT_INTEGER
       && mpz_sgn (close->unit->value.integer) < 0)
index de8cdc441a564b742ff09b9030fd1e5305188bde..1e4616447953752d51328457cd527ddce51d602d 100644 (file)
@@ -1,7 +1,12 @@
+2011-11-08  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/50404
+       * gfortran.dg/io_constraints_3.f90: Improve testcase.
+
 2011-11-08  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        PR fortran/50409
-       * gcc/testsuite/gfortran.dg/string_5.f90: Improve testcase.
+       * gfortran.dg/string_5.f90: Improve testcase.
 
 2011-10-23  Jason Merrill  <jason@redhat.com>
 
index 7622a24861695f3ed194918af9338161a5f19178..dfba53baad6812dc331412c38fcf7bdd972830eb 100644 (file)
@@ -66,6 +66,7 @@
   close(10, iostat=u,status="keep")
   close(10, iostat=u,status="delete")
   close(10, iostat=u,status=foo) ! { dg-warning "STATUS specifier in CLOSE statement" }
+  close(iostat=u) ! { dg-error "requires a UNIT number" }