diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2020-05-14 18:30:27 +0200 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2020-05-14 18:33:24 +0200 |
commit | cdc34b505796327b3eee9e97bc5f27ba71fd9e7a (patch) | |
tree | 479abea4f28b9b3d1593a4b360e307dde3210f8f /libgfortran/io | |
parent | 8d286dd118a5bd16f7ae0fb9dfcdcfd020bea803 (diff) | |
download | gcc-cdc34b505796327b3eee9e97bc5f27ba71fd9e7a.zip gcc-cdc34b505796327b3eee9e97bc5f27ba71fd9e7a.tar.gz gcc-cdc34b505796327b3eee9e97bc5f27ba71fd9e7a.tar.bz2 |
Add early return for invalid STATUS for close.
2020-05-14 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/95119
* io/close.c (close_status): Add CLOSE_INVALID.
(st_close): Return early on invalid STATUS parameter.
2020-05-14 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/95119
* testsuite/libgomp.fortran/close_errors_1.f90: New test.
Diffstat (limited to 'libgfortran/io')
-rw-r--r-- | libgfortran/io/close.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libgfortran/io/close.c b/libgfortran/io/close.c index 8aaa003..17e064b 100644 --- a/libgfortran/io/close.c +++ b/libgfortran/io/close.c @@ -31,7 +31,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif typedef enum -{ CLOSE_DELETE, CLOSE_KEEP, CLOSE_UNSPECIFIED } +{ CLOSE_INVALID = - 1, CLOSE_DELETE, CLOSE_KEEP, CLOSE_UNSPECIFIED } close_status; static const st_option status_opt[] = { @@ -61,6 +61,12 @@ st_close (st_parameter_close *clp) find_option (&clp->common, clp->status, clp->status_len, status_opt, "Bad STATUS parameter in CLOSE statement"); + if (status == CLOSE_INVALID) + { + library_end (); + return; + } + u = find_unit (clp->common.unit); if (ASYNC_IO && u && u->au) |