re PR bootstrap/81926 (go/parse.o differs between stage2 and stage3)
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 22 Sep 2017 20:20:25 +0000 (20:20 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 22 Sep 2017 20:20:25 +0000 (20:20 +0000)
PR bootstrap/81926
* cp-objcp-common.c (cp_get_debug_type): Do only one lookup.

From-SVN: r253109

gcc/cp/ChangeLog
gcc/cp/cp-objcp-common.c

index 6288dcaf7279a9480f77f33f3043e03a1f921e62..58e6f25ff204c499ccf18827fd113ca507ceee6a 100644 (file)
@@ -1,3 +1,8 @@
+2017-09-22  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR bootstrap/81926
+       * cp-objcp-common.c (cp_get_debug_type): Do only one lookup.
+
 2017-09-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR sanitizer/81929
index 183e7f7bf5714accb23ec2c220403846d08c3a20..267fcca7319e6c253574538552f21d203752eb53 100644 (file)
@@ -162,13 +162,13 @@ cp_get_debug_type (const_tree type)
         types on the fly for the debug info only, they would not be attached
         to any GC root and always be swept, so we would make the contents of
         the debug info depend on the collection points.  */
-      struct tree_map in, *h;
+      struct tree_map in, *h, **slot;
 
       in.base.from = CONST_CAST_TREE (type);
       in.hash = htab_hash_pointer (type);
-      h = debug_type_hash->find_with_hash (&in, in.hash);
-      if (h)
-       return h->to;
+      slot = debug_type_hash->find_slot_with_hash (&in, in.hash, INSERT);
+      if (*slot)
+       return (*slot)->to;
 
       tree t = build_offset_type (TYPE_PTRMEMFUNC_OBJECT_TYPE (type),
                                  TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type)));
@@ -177,7 +177,7 @@ cp_get_debug_type (const_tree type)
       h->base.from = CONST_CAST_TREE (type);
       h->hash = htab_hash_pointer (type);
       h->to = t;
-      *debug_type_hash->find_slot_with_hash (h, h->hash, INSERT) = h;
+      *slot = h;
 
       return t;
     }