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)

Reply via email to