tree.c (decl_value_expr_lookup): Revert latest change.
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 18 Jun 2018 07:52:22 +0000 (07:52 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 18 Jun 2018 07:52:22 +0000 (07:52 +0000)
* 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

gcc/ChangeLog
gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c
gcc/tree.c

index 78bfd9af82d042064250001d624ea4f689ae2f82..13e5c1047c422a9afcebe490503c161264ca366a 100644 (file)
@@ -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.
index ec40bca081f7258f2eb61dc2a375b15d8c01fb6b..0ea7a51fb40c6af2efc4f4b8b8ff1d5fc8ea3b36 100644 (file)
@@ -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.
index 79ff01fc76dcce6e8b68cc82613cdf4d8b54c248..254768c5828838f526a4d3926037d1d4e34a435d 100644 (file)
@@ -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)
index 8082932988ba4c8238abd1dfb6fbf69957de6677..2d3b26ed66b29df68bab3835b4a7dea8a3116ebf 100644 (file)
@@ -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;