aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/io.c')
-rw-r--r--gcc/fortran/io.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index a291bb8..88f7a249e 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)