On Tue, Dec 18, 2012 at 08:45:49PM +0100, Tobias Burnus wrote:
> Or one of the examples from PR55733. The example above gives
> currently (w/o your patch):
>
> static character(kind=1)[1:.str] * str = 0B;
> integer(kind=4) .str;
Yeah, that is not a problem for ABI.
> >Where would be TREE_STATIC set on the length variable with -fno-automatic,
> >and on which testcase?
>
> As written, TREE_STATIC is currently not set (which is a bug, cf.
> PR55733); I think one needs a patch like:
>
> --- a/gcc/fortran/trans-decl.c
> +++ b/gcc/fortran/trans-decl.c
> @@ -1107,3 +1107,4 @@ gfc_create_string_length (gfc_symbol * sym)
>
> - if (sym->attr.save || sym->ns->proc_name->attr.flavor == FL_MODULE)
> + if (sym->attr.save || sym->ns->proc_name->attr.flavor == FL_MODULE
> + || gfc_option.flag_max_stack_var_size == 0)
> TREE_STATIC (length) = 1;
If that is changed, surely the name must be mangled too.
Perhaps best to set a bool variable to the condition and use it in both
places.
bool static_length = sym->attr.save
|| sym->ns->proc_name->attr.flavor == FL_MODULE
|| gfc_option.flag_max_stack_var_size == 0;
if (static_length)
{
name mangling;
}
else ...
...
if (static_length)
TREE_STATIC (length) = 1;
Jakub