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:
parent
80cf2c5e8f
commit
9fb9da3d38
2 changed files with 11 additions and 2 deletions
|
@ -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 that’s 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
|
||||
|
|
9
gcc/testsuite/gfortran.dg/pr108528.f90
Normal file
9
gcc/testsuite/gfortran.dg/pr108528.f90
Normal 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
|
Loading…
Add table
Reference in a new issue