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");