aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2018-06-18 07:52:22 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2018-06-18 07:52:22 +0000
commita7fc274f87deeeacb1e0b41bcb571b097b4c929f (patch)
tree1ff97e1950b442ad666448813af413b19951033b /gcc
parent3b4f040822af5b7dd6a03573f53f51a89a57b578 (diff)
downloadgcc-a7fc274f87deeeacb1e0b41bcb571b097b4c929f.zip
gcc-a7fc274f87deeeacb1e0b41bcb571b097b4c929f.tar.gz
gcc-a7fc274f87deeeacb1e0b41bcb571b097b4c929f.tar.bz2
tree.c (decl_value_expr_lookup): Revert latest change.
* tree.c (decl_value_expr_lookup): Revert latest change. (decl_value_expr_insert): Likewise. fortran/ * trans-decl.c (gfc_get_fake_result_decl): Revert latest change. From-SVN: r261696
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/fortran/ChangeLog4
-rw-r--r--gcc/fortran/trans-decl.c24
-rw-r--r--gcc/tree.c16
4 files changed, 23 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 78bfd9a..13e5c10 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+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.
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ec40bca..0ea7a51 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,7 @@
+2018-06-18 Eric Botcazou <ebotcazou@adacore.com>
+
+ * trans-decl.c (gfc_get_fake_result_decl): Revert latest change.
+
2018-06-17 Eric Botcazou <ebotcazou@adacore.com>
* trans-decl.c (nonlocal_dummy_decl_pset): Delete.
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 79ff01f..254768c 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -2908,14 +2908,13 @@ gfc_get_fake_result_decl (gfc_symbol * sym, int parent_flag)
&& 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)
@@ -2923,17 +2922,20 @@ gfc_get_fake_result_decl (gfc_symbol * sym, int 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)
diff --git a/gcc/tree.c b/gcc/tree.c
index 8082932..2d3b26e 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -6337,15 +6337,7 @@ decl_value_expr_lookup (tree from)
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;
}
@@ -6356,12 +6348,6 @@ decl_value_expr_insert (tree from, tree to)
{
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;