diff options
author | Victor Leikehman <lei@haifasphere.co.il> | 2004-05-15 21:20:09 +0300 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2004-05-15 18:20:09 +0000 |
commit | 1de8a83646644d4486ddceea6a6c102133b8f1be (patch) | |
tree | ee975035bf26be32393490e253e09668af0046ff /gcc/fortran/decl.c | |
parent | e2bb53e59a21c042db3e0b605752e683d62618cc (diff) | |
download | gcc-1de8a83646644d4486ddceea6a6c102133b8f1be.zip gcc-1de8a83646644d4486ddceea6a6c102133b8f1be.tar.gz gcc-1de8a83646644d4486ddceea6a6c102133b8f1be.tar.bz2 |
* decl.c (add_init_expr_to_sym): Check for variable size arrays.
From-SVN: r81894
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r-- | gcc/fortran/decl.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 2aed9b2..c36c7ba 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -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; |