From: Francois-Xavier Coudert Date: Tue, 8 Nov 2011 23:54:43 +0000 (+0000) Subject: re PR fortran/50404 (SIGSEGV in gfc_resolve_close) X-Git-Tag: releases/gcc-4.7.0~2335 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b35f6a97ab0d40701c3545d99f45b614ce9b5553;p=thirdparty%2Fgcc.git re PR fortran/50404 (SIGSEGV in gfc_resolve_close) PR fortran/50404 * io.c (gfc_resolve_close): CLOSE requires a UNIT. * gfortran.dg/io_constraints_3.f90: Improve testcase. From-SVN: r181183 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 29294f7e7403..0d1d7b6afc7c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2011-11-08 Francois-Xavier Coudert + + PR fortran/50404 + * io.c (gfc_resolve_close): CLOSE requires a UNIT. + 2011-11-08 Francois-Xavier Coudert PR fortran/50409 diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index a291bb8b167c..88f7a249e001 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index de8cdc441a56..1e4616447953 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,7 +1,12 @@ +2011-11-08 Francois-Xavier Coudert + + PR fortran/50404 + * gfortran.dg/io_constraints_3.f90: Improve testcase. + 2011-11-08 Francois-Xavier Coudert PR fortran/50409 - * gcc/testsuite/gfortran.dg/string_5.f90: Improve testcase. + * gfortran.dg/string_5.f90: Improve testcase. 2011-10-23 Jason Merrill diff --git a/gcc/testsuite/gfortran.dg/io_constraints_3.f90 b/gcc/testsuite/gfortran.dg/io_constraints_3.f90 index 7622a2486169..dfba53baad68 100644 --- a/gcc/testsuite/gfortran.dg/io_constraints_3.f90 +++ b/gcc/testsuite/gfortran.dg/io_constraints_3.f90 @@ -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" }