aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2025-04-12 19:51:23 -0700
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2025-04-13 08:39:32 -0700
commitee6173800ed1f9b653a85019ad2fa8e6d883823a (patch)
treed55f9b7e457d6e53f449cace2f336f870734b1dc /gcc
parent5869a881442aa4214d5deed7cfe0d352bcca1fd4 (diff)
downloadgcc-ee6173800ed1f9b653a85019ad2fa8e6d883823a.zip
gcc-ee6173800ed1f9b653a85019ad2fa8e6d883823a.tar.gz
gcc-ee6173800ed1f9b653a85019ad2fa8e6d883823a.tar.bz2
Fortran: Fix runtime segfault closing negative unit
When closing a UNIT with an invalid negative unit number, a segfault ensued. This patch adds checks for these conditions and issues errors. PR libfortran/119502 libgfortran/ChangeLog: * io/close.c (st_close): Issue an error and avoid calling close_share when there is no stream assigned. * io/open.c (st_open): If there is no stream assigned to the unit, unlock the unit and issue an error. gcc/testsuite/ChangeLog: * gfortran.dg/pr119502.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gfortran.dg/pr119502.f9015
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/pr119502.f90 b/gcc/testsuite/gfortran.dg/pr119502.f90
new file mode 100644
index 0000000..80d7c61
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr119502.f90
@@ -0,0 +1,15 @@
+! { dg-do run }
+
+! PR119502, negative unit numbers are not allowed without using NEWUNIT
+
+program foo
+ integer :: iun = -1
+ integer :: ios
+ open (iun, iostat=ios)
+ if (ios == 0) stop 1
+ write(iun,*, iostat=ios) "This is a test."
+ if (ios == 0) stop 2
+ close (iun, iostat=ios)
+ if (ios == 0) stop 3
+end
+