From: Mark Eggleston Date: Tue, 30 Jun 2020 09:15:05 +0000 (+0100) Subject: Fortran : ICE in gfc_find_array_ref(): No ref found PR95981 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3f069011019c9df670969ea283fd4d139f34a925;p=gcc.git Fortran : ICE in gfc_find_array_ref(): No ref found PR95981 When looking for an array reference allow NULL references. If no array reference is found dim_rank_check should return false. 2020-07-13 Steven G. Kargl gcc/fortran/ PR fortran/95981 * check.c (dim_rank_check): Allow NULL references in call to gfc_find_array_ref and return false if no reference is found. 2020-07-13 Mark Eggleston gcc/testsuite/ PR fortran/95981 * gfortran.dg/pr95981.f90: New test. --- diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 8ecf4ff4f50..89cc158fab1 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -1142,7 +1142,9 @@ dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed) if (array->expr_type == EXPR_VARIABLE) { - ar = gfc_find_array_ref (array); + ar = gfc_find_array_ref (array, true); + if (!ar) + return false; if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed && ar->type != AR_ELEMENT diff --git a/gcc/testsuite/gfortran.dg/pr95981.f90 b/gcc/testsuite/gfortran.dg/pr95981.f90 new file mode 100644 index 00000000000..7da6e9bd3dd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95981.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } + +program p + type t + end type + class(t) :: x(:) ! { dg-error "must be dummy, allocatable or pointer" } + type(t) :: y(size(x,1)) ! { dg-error "must be constant of INTEGER type" } +end +