[gcc(refs/vendors/ARM/heads/arm-perf-staging)] PR fortran/95104 - Segfault on a legal WAIT statement
Tamar Christina
tnfchris@gcc.gnu.org
Fri Jul 17 15:17:56 GMT 2020
https://gcc.gnu.org/g:e1396ee72e68cc8fba99ce986f2910cd39e335b8
commit e1396ee72e68cc8fba99ce986f2910cd39e335b8
Author: Harald Anlauf <anlauf@gmx.de>
Date: Thu May 28 21:53:17 2020 +0200
PR fortran/95104 - Segfault on a legal WAIT statement
The initial commit for this PR uncovered a latent issue with unit locking
in the Fortran run-time library. Add check for valid unit.
2020-05-28 Harald Anlauf <anlauf@gmx.de>
libgfortran/
PR libfortran/95104
* io/unit.c (unlock_unit): Guard by check for NULL pointer.
(cherry picked from commit 6ce3d791dfcba469e709935aba5743640f7d4959)
Diff:
---
libgfortran/io/unit.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c
index 0030d7e8701..a3b0656cb90 100644
--- a/libgfortran/io/unit.c
+++ b/libgfortran/io/unit.c
@@ -767,9 +767,12 @@ close_unit_1 (gfc_unit *u, int locked)
void
unlock_unit (gfc_unit *u)
{
- NOTE ("unlock_unit = %d", u->unit_number);
- UNLOCK (&u->lock);
- NOTE ("unlock_unit done");
+ if (u)
+ {
+ NOTE ("unlock_unit = %d", u->unit_number);
+ UNLOCK (&u->lock);
+ NOTE ("unlock_unit done");
+ }
}
/* close_unit()-- Close a unit. The stream is closed, and any memory
More information about the Gcc-cvs
mailing list