diff options
Diffstat (limited to 'gcc/fortran/trans-expr.c')
| -rw-r--r-- | gcc/fortran/trans-expr.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 890b880..783583c 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -324,34 +324,31 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr) /* Deal with references to a parent results or entries by storing the current_function_decl and moving to the parent_decl. */ - parent_flag = 0; - return_value = sym->attr.function && sym->result == sym; alternate_entry = sym->attr.function && sym->attr.entry - && sym->result == sym; + && sym->result == sym; entry_master = sym->attr.result - && sym->ns->proc_name->attr.entry_master - && !gfc_return_by_reference (sym->ns->proc_name); + && sym->ns->proc_name->attr.entry_master + && !gfc_return_by_reference (sym->ns->proc_name); parent_decl = DECL_CONTEXT (current_function_decl); if ((se->expr == parent_decl && return_value) - || (sym->ns && sym->ns->proc_name - && sym->ns->proc_name->backend_decl == parent_decl - && (alternate_entry || entry_master))) + || (sym->ns && sym->ns->proc_name + && sym->ns->proc_name->backend_decl == parent_decl + && (alternate_entry || entry_master))) parent_flag = 1; else parent_flag = 0; /* Special case for assigning the return value of a function. Self recursive functions must have an explicit return value. */ - if (sym->attr.function && sym->result == sym - && (se->expr == current_function_decl || parent_flag)) + if (return_value && (se->expr == current_function_decl || parent_flag)) se_expr = gfc_get_fake_result_decl (sym, parent_flag); /* Similarly for alternate entry points. */ else if (alternate_entry - && (sym->ns->proc_name->backend_decl == current_function_decl - || parent_flag)) + && (sym->ns->proc_name->backend_decl == current_function_decl + || parent_flag)) { gfc_entry_list *el = NULL; @@ -364,8 +361,8 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr) } else if (entry_master - && (sym->ns->proc_name->backend_decl == current_function_decl - || parent_flag)) + && (sym->ns->proc_name->backend_decl == current_function_decl + || parent_flag)) se_expr = gfc_get_fake_result_decl (sym, parent_flag); if (se_expr) |
