https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88048
--- Comment #3 from kargl at gcc dot gnu.org ---
(In reply to G. Steinmetz from comment #0)
> With invalid code :
>
>
> $ cat z1.f90
> program p
> integer, parameter :: a(2) = 1
> data a(2) /a(1)/
> print *, a
> end
>
>
> $ gfortran-7 -g -O0 -Wall -Wextra -fcheck=all z1.f90
> $ a.out
> 1 1
>
>
> $ gfortran-9-20181111 -c z1.f90
> f951: internal compiler error: check_data_variable(): Bad expression
Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c (revision 266386)
+++ gcc/fortran/resolve.c (working copy)
@@ -15492,7 +15492,10 @@ check_data_variable (gfc_data_variable *var, locus *wh
e = e->value.function.actual->expr;
if (e->expr_type != EXPR_VARIABLE)
- gfc_internal_error ("check_data_variable(): Bad expression");
+ {
+ gfc_error ("Expecting definable entity near %L", where);
+ return false;
+ }
sym = e->symtree->n.sym;
@@ -15500,6 +15503,7 @@ check_data_variable (gfc_data_variable *var, locus *wh
{
gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
sym->name, &sym->declared_at);
+ return false;
}
if (e->ref == NULL && sym->as)