From: Mikael Morin Date: Sun, 3 Mar 2013 19:58:49 +0000 (+0000) Subject: re PR fortran/56477 (ICE on invalid with pointer assignment to function result) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1216b4d21d04278222774cd255c4699b656f4fef;p=gcc.git re PR fortran/56477 (ICE on invalid with pointer assignment to function result) 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 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c12dd982219..4431327a5ec 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2013-03-03 Mikael Morin + + PR fortran/56477 + * expr.c (gfc_check_pointer_assign): Avoid NULL pointer dereference. + 2013-03-03 Mikael Morin PR fortran/54730 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 3843c2e3c5a..fd17a05f361 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c34cd0f4a74..e2ceeeb0b5b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-03-03 Mikael Morin + + PR fortran/56477 + * gfortran.dg/pointer_check_13.f90: New test. + 2013-03-03 Mikael Morin 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 index 00000000000..f936f2d745b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pointer_check_13.f90 @@ -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 +! +module s +contains + function so() + implicit none + integer, target :: so + integer, pointer :: sp + sp => so + return + end function So +end module s