re PR fortran/13201 (PARAMETER variables of nonconstant shape are accepted)
PR fortran/13201 * resolve.c (resolve_symbol): Verify that the shape of a parameter array is not only explicit, but also constant. * array.c (gfc_is_compile_time_shape): New function. * gfortran.h (gfc_is_compile_time_shape): Add prototype. From-SVN: r84400
This commit is contained in:
parent
1f33f6b4c7
commit
4077d20743
4 changed files with 35 additions and 5 deletions
|
@ -1,3 +1,11 @@
|
|||
2004-07-09 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/13201
|
||||
* resolve.c (resolve_symbol): Verify that the shape of a
|
||||
parameter array is not only explicit, but also constant.
|
||||
* array.c (gfc_is_compile_time_shape): New function.
|
||||
* gfortran.h (gfc_is_compile_time_shape): Add prototype.
|
||||
|
||||
2004-07-09 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/15481
|
||||
|
|
|
@ -1973,3 +1973,22 @@ gfc_find_array_ref (gfc_expr * e)
|
|||
|
||||
return &ref->u.ar;
|
||||
}
|
||||
|
||||
|
||||
/* Find out if an array shape is known at compile time. */
|
||||
|
||||
int
|
||||
gfc_is_compile_time_shape (gfc_array_spec *as)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (as->type != AS_EXPLICIT)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < as->rank; i++)
|
||||
if (!gfc_is_constant_expr (as->lower[i])
|
||||
|| !gfc_is_constant_expr (as->upper[i]))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -1645,6 +1645,7 @@ void gfc_insert_constructor (gfc_expr *, gfc_constructor *);
|
|||
gfc_constructor *gfc_get_constructor (void);
|
||||
tree gfc_conv_array_initializer (tree type, gfc_expr * expr);
|
||||
try spec_size (gfc_array_spec *, mpz_t *);
|
||||
int gfc_is_compile_time_shape (gfc_array_spec *);
|
||||
|
||||
/* interface.c -- FIXME: some of these should be in symbol.c */
|
||||
void gfc_free_interface (gfc_interface *);
|
||||
|
|
|
@ -3745,12 +3745,14 @@ resolve_symbol (gfc_symbol * sym)
|
|||
return;
|
||||
}
|
||||
|
||||
if (sym->attr.flavor == FL_PARAMETER
|
||||
&& sym->as != NULL && sym->as->type != AS_EXPLICIT)
|
||||
/* A parameter array's shape needs to be constant. */
|
||||
|
||||
if (sym->attr.flavor == FL_PARAMETER && sym->as != NULL
|
||||
&& !gfc_is_compile_time_shape (sym->as))
|
||||
{
|
||||
gfc_error ("Parameter array '%s' at %L must have an explicit shape",
|
||||
sym->name, &sym->declared_at);
|
||||
return;
|
||||
gfc_error ("Parameter 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
|
||||
|
|
Loading…
Add table
Reference in a new issue