diff options
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 50d22b0..0f17585 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -4282,6 +4282,22 @@ resolve_symbol (gfc_symbol * sym) return; } + /* A module array's shape needs to be constant. */ + + if (sym->ns->proc_name + && sym->attr.flavor == FL_VARIABLE + && sym->ns->proc_name->attr.flavor == FL_MODULE + && !sym->attr.use_assoc + && !sym->attr.allocatable + && !sym->attr.pointer + && sym->as != NULL + && !gfc_is_compile_time_shape (sym->as)) + { + gfc_error ("Module array '%s' at %L cannot be automatic " + "or assumed shape", sym->name, &sym->declared_at); + return; + } + /* Make sure that character string variables with assumed length are dummy arguments. */ @@ -4465,7 +4481,7 @@ resolve_symbol (gfc_symbol * sym) switch (sym->attr.flavor) { case FL_VARIABLE: - /* Can the sybol have an initializer? */ + /* Can the symbol have an initializer? */ flag = 0; if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy || sym->attr.intrinsic || sym->attr.result) |