diff options
Diffstat (limited to 'gcc/fortran/io.c')
-rw-r--r-- | gcc/fortran/io.c | 18 |
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) |