* decl.c (add_init_expr_to_sym): Check for variable size arrays.
authorVictor Leikehman <lei@haifasphere.co.il>
Sat, 15 May 2004 18:20:09 +0000 (21:20 +0300)
committerPaul Brook <pbrook@gcc.gnu.org>
Sat, 15 May 2004 18:20:09 +0000 (18:20 +0000)
From-SVN: r81894

gcc/fortran/ChangeLog
gcc/fortran/decl.c

index 549b82daeacbffe8d761ad54f4c61c28c6783817..00e6be2f6db7423f57523dc4ff65f65102d6a4a0 100644 (file)
@@ -1,3 +1,7 @@
+2004-05-15  Victor Leikehman  <lei@haifasphere.co.il>
+
+       * decl.c (add_init_expr_to_sym): Check for variable size arrays.
+
 2004-05-15  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
 
        * primary.c (match_boz_constant): Use gfc_notify_std() for
index 2aed9b248d6f7c3b41fb25fe6ec810e3ae38f2f8..c36c7bad51d3073e4ea18bc7606ec61df19b0638 100644 (file)
@@ -254,6 +254,7 @@ static try
 add_init_expr_to_sym (const char *name, gfc_expr ** initp,
                      locus * var_locus)
 {
+  int i;
   symbol_attribute attr;
   gfc_symbol *sym;
   gfc_expr *init;
@@ -287,7 +288,7 @@ add_init_expr_to_sym (const char *name, gfc_expr ** initp,
   else
     {
       /* If a variable appears in a DATA block, it cannot have an
-         initializer.  */
+        initializer.  */
       if (sym->attr.data)
        {
          gfc_error
@@ -301,6 +302,19 @@ add_init_expr_to_sym (const char *name, gfc_expr ** initp,
          && gfc_check_assign_symbol (sym, init) == FAILURE)
        return FAILURE;
 
+      for (i = 0; i < sym->attr.dimension; i++)
+       {
+         if (sym->as->lower[i] == NULL
+             || sym->as->lower[i]->expr_type != EXPR_CONSTANT
+             || sym->as->upper[i] == NULL
+             || sym->as->upper[i]->expr_type != EXPR_CONSTANT)
+           {
+             gfc_error ("Array '%s' at %C cannot have initializer",
+                        sym->name);
+             return FAILURE;
+           }
+       }
+
       /* Add initializer.  Make sure we keep the ranks sane.  */
       if (sym->attr.dimension && init->rank == 0)
        init->rank = sym->as->rank;