diff options
author | Mark Eggleston <markeggleston@gcc.gnu.org> | 2020-06-30 10:15:05 +0100 |
---|---|---|
committer | Mark Eggleston <markeggleston@gcc.gnu.org> | 2020-07-13 15:11:45 +0100 |
commit | 3f069011019c9df670969ea283fd4d139f34a925 (patch) | |
tree | 127481e64e7228960e35f124f96ef9ff5db11ef0 | |
parent | a1faa8e2470b33e92f6274804bf7941fbb6e2d38 (diff) | |
download | gcc-3f069011019c9df670969ea283fd4d139f34a925.zip gcc-3f069011019c9df670969ea283fd4d139f34a925.tar.gz gcc-3f069011019c9df670969ea283fd4d139f34a925.tar.bz2 |
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 <kargl@gcc.gnu.org>
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 <markeggleston@gcc.gnu.org>
gcc/testsuite/
PR fortran/95981
* gfortran.dg/pr95981.f90: New test.
-rw-r--r-- | gcc/fortran/check.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr95981.f90 | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 8ecf4ff..89cc158 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 0000000..7da6e9b --- /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 + |