From: Harald Anlauf Date: Sun, 28 Jun 2020 14:24:15 +0000 (+0200) Subject: PR fortran/95340 - ICE in gfc_match_select_rank, at fortran/match.c:6690 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b62cac6d92ff251213753475b69ec0b269cb7fae;p=gcc.git PR fortran/95340 - ICE in gfc_match_select_rank, at fortran/match.c:6690 Do not dereference NULL pointer when querying array shape of possibly improperly delared variable. gcc/fortran/ PR fortran/95340 * match.c (gfc_match_select_rank): Do not dereference NULL pointer. --- diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index b011634792e..db5174f3f21 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -6695,7 +6695,8 @@ gfc_match_select_rank (void) if (expr1->symtree) { sym = expr1->symtree->n.sym; - as = sym->ts.type == BT_CLASS ? CLASS_DATA (sym)->as : sym->as; + as = (sym->ts.type == BT_CLASS + && CLASS_DATA (sym)) ? CLASS_DATA (sym)->as : sym->as; } if (expr1->expr_type != EXPR_VARIABLE diff --git a/gcc/testsuite/gfortran.dg/pr95340.f90 b/gcc/testsuite/gfortran.dg/pr95340.f90 new file mode 100644 index 00000000000..edcdc935057 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95340.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR fortran/95340 - ICE in gfc_match_select_rank, at fortran/match.c:6690 + +program p + type t + end type t + class(t) :: z ! { dg-error "must be dummy, allocatable or pointer" } + select rank (z) ! { dg-error "must be an assumed rank variable" } + end select ! { dg-error "Expecting END PROGRAM" } +end