[Patch, Fortran] PR57508 - Fix ICE/Reject-valid issue with get_temp_from_expr (intrinsic assignment with defined assignment)
Mikael Morin
mikael.morin@sfr.fr
Sun Jun 9 08:51:00 GMT 2013
Hello,
Le 03/06/2013 16:06, Tobias Burnus a écrit :
> Dear all,
>
> Due to copying the attributes, the temporary variable could get marked
> as function (attr.function, attr.flavor == FL_PROCEDURE). This either
> lead to leaking those attributes into the assembler file - or to cause
> an error due to the call to gfc_add_flavor. With this patch, I now
> explicitly unset those attribues. (Fund when building ForTrilinos.)
>
> diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
> index b2e8fdc..655d3c1 100644
> --- a/gcc/fortran/resolve.c
> +++ b/gcc/fortran/resolve.c
> @@ -9293,8 +9293,12 @@ get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
> }
> }
>
> /* Add the attributes and the arrayspec to the temporary. */
> /* Add the attributes and the arrayspec to the temporary. */
> tmp->n.sym->attr = gfc_expr_attr (e);
> + tmp->n.sym->attr.function = 0;
> + tmp->n.sym->attr.result = 0;
> + tmp->n.sym->attr.flavor = FL_VARIABLE;
> +
> if (as)
> {
> tmp->n.sym->as = gfc_copy_array_spec (as);
This fixes the problem, but shouldn't the fix be in gfc_expr_attr instead?
It seems to me that most symbol attributes don't make sense in any case
for non-variables, except for some of the standard ones
(allocatable,...) and possibly a couple more.
Mikael
More information about the Fortran
mailing list