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.
This commit is contained in:
parent
8d286dd118
commit
cdc34b5057
|
@ -1,3 +1,13 @@
|
|||
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 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure: Regenerated.
|
||||
|
||||
2020-05-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure: Regenerated.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,3 +1,16 @@
|
|||
2020-05-14 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR libfortran/95119
|
||||
* testsuite/libgomp.fortran/close_errors_1.f90: New test.
|
||||
|
||||
2020-05-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure: Regenerated.
|
||||
|
||||
2020-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* testsuite/libgomp.c-c++-common/target-40.c: New test.
|
||||
|
||||
2020-05-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure: Regenerated.
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
! { dg-do run }
|
||||
! PR 95115 - this used to hang with -pthread. Original test case by
|
||||
! Bill Long.
|
||||
|
||||
program test
|
||||
character(len=16) my_status
|
||||
character(len=1000) :: iomsg
|
||||
open (unit=10, file='test.dat')
|
||||
print *,42
|
||||
write (10, *) 'weird'
|
||||
rewind (10)
|
||||
read (10, *) my_status
|
||||
close (10)
|
||||
open (unit=10, file='test.dat')
|
||||
close (unit=10, status=my_status, iostat=ios, iomsg=iomsg)
|
||||
if (ios == 0) stop 1
|
||||
if (iomsg /= "Bad STATUS parameter in CLOSE statement") stop 2
|
||||
close (10, status='delete')
|
||||
end program test
|
Loading…
Reference in New Issue