[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