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