Fortran: ICE in gfc_compare_array_spec [PR108528]

gcc/fortran/ChangeLog:

	PR fortran/108528
	* array.cc (compare_bounds): Return false instead of generating an
	internal error on an invalid argument type.

gcc/testsuite/ChangeLog:

	PR fortran/108528
	* gfortran.dg/pr108528.f90: New test.
This commit is contained in:
Steve Kargl 2023-01-25 20:38:43 +01:00 committed by Harald Anlauf
parent 80cf2c5e8f
commit 9fb9da3d38
2 changed files with 11 additions and 2 deletions

View file

@ -967,7 +967,7 @@ gfc_copy_array_spec (gfc_array_spec *src)
/* Returns nonzero if the two expressions are equal.
We should not need to support more than constant values, as thats what is
We should not need to support more than constant values, as that's what is
allowed in derived type component array spec. However, we may create types
with non-constant array spec for dummy variable class container types, for
which the _data component holds the array spec of the variable declaration.
@ -979,7 +979,7 @@ compare_bounds (gfc_expr *bound1, gfc_expr *bound2)
if (bound1 == NULL || bound2 == NULL
|| bound1->ts.type != BT_INTEGER
|| bound2->ts.type != BT_INTEGER)
gfc_internal_error ("gfc_compare_array_spec(): Array spec clobbered");
return false;
/* What qualifies as identical bounds? We could probably just check that the
expressions are exact clones. We avoid rewriting a specific comparison

View file

@ -0,0 +1,9 @@
! { dg-do compile }
! PR fortran/108528 -
! Contributed by G.Steinmetz
function f() ! { dg-error "mismatched array specifications" }
integer :: f((2.)) ! { dg-error "must be of INTEGER type" }
integer :: g((2))
entry g()
end