http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50392
--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-09-14
16:40:08 UTC ---
(In reply to comment #3)
> Patch:
I have accidentally submitted the patch before testing finished. It does not
work. The problem is that it does create the required declaration - but it does
not get used as one later calls gfc_get_fake_result_decl, which does not
propagate this information on.
That's fixed by applying additionally the following patch, which feels slightly
hackish.
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -2557,6 +2561,9 @@ gfc_get_fake_result_decl (gfc_symbol * sym, int
parent_flag)
else
current_fake_result_decl = build_tree_list (NULL, decl);
+ if (sym->attr.assign)
+ DECL_LANG_SPECIFIC (decl) = DECL_LANG_SPECIFIC (sym->backend_decl);
+
return decl;
}
... maybe by moving the gfc_add_assign_aux_vars to gfc_get_fake_result_decl -
like below?
@@ -2501,6 +2501,10 @@ gfc_get_fake_result_decl (gfc_symbol * sym, int
parent_flag)
if (!sym)
return NULL_TREE;
+ if (sym->attr.assign
+ && GFC_DECL_ASSIGN (sym->backend_decl) == 0)
+ gfc_add_assign_aux_vars (sym);
+
if (sym->ts.type == BT_CHARACTER)
{
if (sym->ts.u.cl->backend_decl == NULL_TREE)