aboutsummaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2020-05-14 18:30:27 +0200
committerThomas Koenig <tkoenig@gcc.gnu.org>2020-05-14 18:33:24 +0200
commitcdc34b505796327b3eee9e97bc5f27ba71fd9e7a (patch)
tree479abea4f28b9b3d1593a4b360e307dde3210f8f /libgomp
parent8d286dd118a5bd16f7ae0fb9dfcdcfd020bea803 (diff)
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 'libgomp')
-rw-r--r--libgomp/ChangeLog13
-rw-r--r--libgomp/testsuite/libgomp.fortran/close_errors_1.f9019
2 files changed, 32 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 8a66266d7c6..3339ffb3b22 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -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.
diff --git a/libgomp/testsuite/libgomp.fortran/close_errors_1.f90 b/libgomp/testsuite/libgomp.fortran/close_errors_1.f90
new file mode 100644
index 00000000000..6edb7da4116
--- /dev/null
+++ b/libgomp/testsuite/libgomp.fortran/close_errors_1.f90
@@ -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