re PR fortran/56477 (ICE on invalid with pointer assignment to function result)
authorMikael Morin <mikael@gcc.gnu.org>
Sun, 3 Mar 2013 19:58:49 +0000 (19:58 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Sun, 3 Mar 2013 19:58:49 +0000 (19:58 +0000)
fortran/
PR fortran/56477
* expr.c (gfc_check_pointer_assign): Avoid NULL pointer dereference.

testsuite/
PR fortran/56477
* gfortran.dg/pointer_check_13.f90: New test.

From-SVN: r196417

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pointer_check_13.f90 [new file with mode: 0644]

index c12dd98221934d5112d0c8e2a6178d2e39a315f8..4431327a5ec4c7767854b51f332dcbcffee4ae0b 100644 (file)
@@ -1,3 +1,8 @@
+2013-03-03  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/56477
+       * expr.c (gfc_check_pointer_assign): Avoid NULL pointer dereference.
+
 2013-03-03  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/54730
index 3843c2e3c5a82f11ecbfa84a14adf9c4f9ff096f..fd17a05f361c33d17912f2ba6dd38d85cbaca52f 100644 (file)
@@ -3732,7 +3732,7 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
          && rvalue->symtree->n.sym->ns->proc_name->attr.flavor != FL_PROCEDURE
          && rvalue->symtree->n.sym->ns->proc_name->attr.flavor != FL_PROGRAM)
        for (ns = rvalue->symtree->n.sym->ns;
-           ns->proc_name && ns->proc_name->attr.flavor != FL_PROCEDURE;
+           ns && ns->proc_name && ns->proc_name->attr.flavor != FL_PROCEDURE;
            ns = ns->parent)
        if (ns->parent == lvalue->symtree->n.sym->ns)
          warn = true;
index c34cd0f4a74aab085282831d2fa4d6d9d27eb3e2..e2ceeeb0b5bdbc31af148279ae23d9b5f3722176 100644 (file)
@@ -1,3 +1,8 @@
+2013-03-03  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/56477
+       * gfortran.dg/pointer_check_13.f90: New test.
+
 2013-03-03  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/54730
diff --git a/gcc/testsuite/gfortran.dg/pointer_check_13.f90 b/gcc/testsuite/gfortran.dg/pointer_check_13.f90
new file mode 100644 (file)
index 0000000..f936f2d
--- /dev/null
@@ -0,0 +1,19 @@
+! { dg-do compile }
+! { dg-options "-Wall -Wno-uninitialized" }
+!
+! PR fortran/56477
+! The pointer target live range checking code used to trigger a NULL pointer
+! dereference with the following case.
+!
+! Contributed by Andrew Benson <abensonca@gmail.com>
+!
+module s
+contains
+  function so()
+    implicit none
+    integer, target  :: so
+    integer, pointer :: sp
+    sp => so
+    return
+  end function So
+end module s