+2018-06-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree.c (decl_value_expr_lookup): Revert latest change.
+ (decl_value_expr_insert): Likewise.
+
2018-06-17 Eric Botcazou <ebotcazou@adacore.com>
* gimplify.c (nonlocal_vlas): Delete.
&& sym->ns->proc_name->attr.entry_master
&& sym != sym->ns->proc_name)
{
- tree t = NULL, var, field;
+ tree t = NULL, var;
if (this_fake_result_decl != NULL)
for (t = TREE_CHAIN (this_fake_result_decl); t; t = TREE_CHAIN (t))
if (strcmp (IDENTIFIER_POINTER (TREE_PURPOSE (t)), sym->name) == 0)
break;
if (t)
return TREE_VALUE (t);
-
decl = gfc_get_fake_result_decl (sym->ns->proc_name, parent_flag);
if (parent_flag)
else
this_fake_result_decl = current_fake_result_decl;
- if (!sym->ns->proc_name->attr.mixed_entry_master)
- return decl;
+ if (decl && sym->ns->proc_name->attr.mixed_entry_master)
+ {
+ tree field;
- for (field = TYPE_FIELDS (TREE_TYPE (decl));
- field; field = DECL_CHAIN (field))
- if (strcmp (IDENTIFIER_POINTER (DECL_NAME (field)), sym->name) == 0)
- break;
+ for (field = TYPE_FIELDS (TREE_TYPE (decl));
+ field; field = DECL_CHAIN (field))
+ if (strcmp (IDENTIFIER_POINTER (DECL_NAME (field)),
+ sym->name) == 0)
+ break;
- gcc_assert (field != NULL_TREE);
- decl = fold_build3_loc (input_location, COMPONENT_REF,
- TREE_TYPE (field), decl, field, NULL_TREE);
+ gcc_assert (field != NULL_TREE);
+ decl = fold_build3_loc (input_location, COMPONENT_REF,
+ TREE_TYPE (field), decl, field, NULL_TREE);
+ }
var = create_tmp_var_raw (TREE_TYPE (decl), sym->name);
if (parent_flag)
h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from));
if (h)
- {
- /* Chains of value expressions may run afoul of garbage collection. */
- gcc_checking_assert (!(h->to
- && (TREE_CODE (h->to) == PARM_DECL
- || TREE_CODE (h->to) == VAR_DECL)
- && DECL_HAS_VALUE_EXPR_P (h->to)));
- return h->to;
- }
-
+ return h->to;
return NULL_TREE;
}
{
struct tree_decl_map *h;
- /* Chains of value expressions may run afoul of garbage collection. */
- gcc_checking_assert (!(to
- && (TREE_CODE (to) == PARM_DECL
- || TREE_CODE (to) == VAR_DECL)
- && DECL_HAS_VALUE_EXPR_P (to)));
-
h = ggc_alloc<tree_decl_map> ();
h->base.from = from;
h->to = to;