Hello,

I'm testing the attached patch which fixes the PR56477 test case.

Will commit as obvious tonight.

Mikael


2013-03-03  Mikael Morin  <mik...@gcc.gnu.org>

        PR fortran/56477
        * expr.c (gfc_check_pointer_assign): Avoid NULL pointer dereference.

2013-03-03  Mikael Morin  <mik...@gcc.gnu.org>

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


Index: fortran/expr.c
===================================================================
--- fortran/expr.c	(révision 196416)
+++ fortran/expr.c	(copie de travail)
@@ -3732,7 +3732,7 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_ex
 	  && 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;


! { dg-do compile }
!
! PR fortran/56477
! The pointer target live range checking code using to trigger an ICE on
! the following
!
! Contributed by Andrew Benson <abenso...@gmail.com>
!
module s
contains
  function so()
    implicit none
    integer, target  :: so
    integer, pointer :: sp
    sp => so
    return
  end function So
end module s

Reply via email to