Cf. http://gcc.gnu.org/ml/fortran/2012-08/msg00034.html The following program ICEs in check_assumed_size_reference's 1386 if ((e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL) as e->ref == NULL. implicit none contains function g() integer :: g(*) end function g subroutine test() procedure(g), pointer :: x x => g end subroutine test end
Trivial patch: Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (revision 199388) +++ gcc/fortran/resolve.c (working copy) @@ -1459,7 +1459,7 @@ check_assumed_size_reference (gfc_symbol *sym, gfc /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong. What should it be? */ - if ((e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL) + if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL) && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE) && (e->ref->u.ar.type == AR_FULL)) {
(In reply to janus from comment #1) > Trivial patch: Regtests cleanly. Will commit as obvious.
Fixed with r199445. Closing. Author: janus Date: Thu May 30 10:19:16 2013 New Revision: 199445 URL: http://gcc.gnu.org/viewcvs?rev=199445&root=gcc&view=rev Log: 2013-05-30 Janus Weil <janus@gcc.gnu.org> PR fortran/54189 * resolve.c (check_assumed_size_reference): Check for e->ref. 2013-05-30 Janus Weil <janus@gcc.gnu.org> PR fortran/54189 * gfortran.dg/assumed_size_1.f90: New. Added: trunk/gcc/testsuite/gfortran.dg/assumed_size_1.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/resolve.c trunk/gcc/testsuite/ChangeLog