https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91729

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org

--- Comment #1 from kargl at gcc dot gnu.org ---
This patch avoids the ICE.

Index: gcc/fortran/match.c
===================================================================
--- gcc/fortran/match.c (revision 275703)
+++ gcc/fortran/match.c (working copy)
@@ -6510,7 +6510,7 @@ gfc_match_select_rank (void)
   char name[GFC_MAX_SYMBOL_LEN];
   gfc_symbol *sym, *sym2;
   gfc_namespace *ns = gfc_current_ns;
-  gfc_array_spec *as;
+  gfc_array_spec *as = NULL;

   m = gfc_match_label ();
   if (m == MATCH_ERROR)
@@ -6583,12 +6583,20 @@ gfc_match_select_rank (void)
          return m;
        }

-      sym = expr1->symtree->n.sym;
-      as = sym->ts.type == BT_CLASS ? CLASS_DATA (sym)->as : sym->as;
+      if (expr1->symtree)
+       {
+         sym = expr1->symtree->n.sym;
+         as = sym->ts.type == BT_CLASS ? CLASS_DATA (sym)->as : sym->as;
+       }
+
       if (expr1->expr_type != EXPR_VARIABLE
          || !(as && as->type == AS_ASSUMED_RANK))
-       gfc_error_now ("The SELECT RANK selector at %C must be an assumed "
-                      "rank variable");
+       {
+         gfc_error ("The SELECT RANK selector at %C must be an assumed "
+                        "rank variable");
+         m = MATCH_ERROR;
+         goto cleanup;
+       }
     }

   m = gfc_match (" )%t");

Reply via email to