------- Comment #5 from sebpop at gmail dot com  2010-06-25 05:49 -------
Subject: Re:  [regression 4.4/4.5/4.6] ICE in 
        resolve_equivalence()

On Thu, Jun 24, 2010 at 23:02, kargl at gcc dot gnu dot org
<gcc-bugzi...@gcc.gnu.org> wrote:
>
>
> ------- Comment #1 from kargl at gcc dot gnu dot org  2010-06-25 04:02 -------
> Index: resolve.c
> ===================================================================
> --- resolve.c   (revision 161047)
> +++ resolve.c   (working copy)
> @@ -12506,6 +12506,9 @@ resolve_equivalence (gfc_equiv *eq)
>   int object, cnt_protected;
>   const char *msg;
>
> +  if (eq->expr->symtree->n.sym == NULL)
> +    return;
> +
>   last_ts = &eq->expr->symtree->n.sym->ts;
>
>   first_sym = eq->expr->symtree->n.sym;
>
>

This patch doesn't fix the problem I am seeing.  If I'm testing this
in the loop before taking the value of e->symtree->n.sym->ts, then it
passes without ICE:

diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 48bb618..7f66be4 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -12360,6 +12360,9 @@ resolve_equivalence (gfc_equiv *eq)
     {
       e = eq->expr;

+      if (eq->expr->symtree->n.sym == NULL)
+       return;
+
       e->ts = e->symtree->n.sym->ts;
       /* match_varspec might not know yet if it is seeing
         array reference or substring reference, as it doesn't


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44660

Reply via email to