[Bug fortran/91729] [10 Regression] ICE in gfc_match_select_rank, at fortran/match.c:6586

2019-09-13 Thread kargl at gcc dot gnu.org
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");

[Bug fortran/91729] [10 Regression] ICE in gfc_match_select_rank, at fortran/match.c:6586

2019-09-11 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91729

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P4
   Target Milestone|--- |10.0