Use htab_up in type copying
authorTom Tromey <tom@tromey.com>
Thu, 17 Sep 2020 17:47:50 +0000 (11:47 -0600)
committerTom Tromey <tom@tromey.com>
Thu, 17 Sep 2020 17:58:56 +0000 (11:58 -0600)
This changes create_copied_types_hash to return an htab_up, then
modifies the callers to avoid explicit use of htab_delete.

gdb/ChangeLog
2020-09-17  Tom Tromey  <tom@tromey.com>

* value.c (preserve_values): Update.
* python/py-type.c (save_objfile_types): Update.
* guile/scm-type.c (save_objfile_types): Update.
* gdbtypes.h (create_copied_types_hash): Return htab_up.
* gdbtypes.c (create_copied_types_hash): Return htab_up.
* compile/compile-object-run.c (compile_object_run): Update.

gdb/ChangeLog
gdb/compile/compile-object-run.c
gdb/gdbtypes.c
gdb/gdbtypes.h
gdb/guile/scm-type.c
gdb/python/py-type.c
gdb/value.c

index 375fa335f3a0233ce2598ca54a31b13b5c805303..b7e93c127ba45b7c68279bfe15fddcc120ec362a 100644 (file)
@@ -1,3 +1,12 @@
+2020-09-17  Tom Tromey  <tom@tromey.com>
+
+       * value.c (preserve_values): Update.
+       * python/py-type.c (save_objfile_types): Update.
+       * guile/scm-type.c (save_objfile_types): Update.
+       * gdbtypes.h (create_copied_types_hash): Return htab_up.
+       * gdbtypes.c (create_copied_types_hash): Return htab_up.
+       * compile/compile-object-run.c (compile_object_run): Update.
+
 2020-09-17  Tom Tromey  <tom@tromey.com>
 
        * typeprint.h (class typedef_hash_table) <~typedef_hash_table>:
index a2f39900053255d7f7ad1ebdad94f362fd78422e..533478a0fb46c8b25646a7a06415bee0668f547f 100644 (file)
@@ -140,14 +140,12 @@ compile_object_run (struct compile_module *module)
   try
     {
       struct type *func_type = SYMBOL_TYPE (func_sym);
-      htab_t copied_types;
       int current_arg = 0;
       struct value **vargs;
 
       /* OBJFILE may disappear while FUNC_TYPE still will be in use.  */
-      copied_types = create_copied_types_hash (objfile);
-      func_type = copy_type_recursive (objfile, func_type, copied_types);
-      htab_delete (copied_types);
+      htab_up copied_types = create_copied_types_hash (objfile);
+      func_type = copy_type_recursive (objfile, func_type, copied_types.get ());
 
       gdb_assert (func_type->code () == TYPE_CODE_FUNC);
       func_val = value_from_pointer (lookup_pointer_type (func_type),
index f1f4ec52c7bbeb0928aaa36b314d99282c60dfd5..63f0d7c84895e0d69552a1a447ea066cd6424ac5 100644 (file)
@@ -5227,13 +5227,13 @@ type_pair_eq (const void *item_lhs, const void *item_rhs)
    types without duplicates.  We use OBJFILE's obstack, because
    OBJFILE is about to be deleted.  */
 
-htab_t
+htab_up
 create_copied_types_hash (struct objfile *objfile)
 {
-  return htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
-                              NULL, &objfile->objfile_obstack,
-                              hashtab_obstack_allocate,
-                              dummy_obstack_deallocate);
+  return htab_up (htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
+                                       NULL, &objfile->objfile_obstack,
+                                       hashtab_obstack_allocate,
+                                       dummy_obstack_deallocate));
 }
 
 /* Recursively copy (deep copy) a dynamic attribute list of a type.  */
index d28622d46cead7b03bf165dbdb02589591f9c08f..4b67efe3cbfb04e5d1fc5e0dae3af0e61aa5a67f 100644 (file)
@@ -2472,7 +2472,7 @@ extern int class_or_union_p (const struct type *);
 
 extern void maintenance_print_type (const char *, int);
 
-extern htab_t create_copied_types_hash (struct objfile *objfile);
+extern htab_up create_copied_types_hash (struct objfile *objfile);
 
 extern struct type *copy_type_recursive (struct objfile *objfile,
                                         struct type *type,
index 19b7996c9467a301a0eb30cba719bee02cc2c651..8fc9629eb0d0911913912e8c3304fe84ada15ad2 100644 (file)
@@ -387,20 +387,17 @@ static void
 save_objfile_types (struct objfile *objfile, void *datum)
 {
   htab_t htab = (htab_t) datum;
-  htab_t copied_types;
 
   if (!gdb_scheme_initialized)
     return;
 
-  copied_types = create_copied_types_hash (objfile);
+  htab_up copied_types = create_copied_types_hash (objfile);
 
   if (htab != NULL)
     {
-      htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types);
+      htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types.get ());
       htab_delete (htab);
     }
-
-  htab_delete (copied_types);
 }
 \f
 /* Administrivia for field smobs.  */
index 951dac261742ae58984169a569f486b4fff56907..55d8264fea9891b56cce57153325c97ececde891 100644 (file)
@@ -1066,7 +1066,6 @@ static void
 save_objfile_types (struct objfile *objfile, void *datum)
 {
   type_object *obj = (type_object *) datum;
-  htab_t copied_types;
 
   if (!gdb_python_initialized)
     return;
@@ -1075,23 +1074,22 @@ save_objfile_types (struct objfile *objfile, void *datum)
      operating on.  */
   gdbpy_enter enter_py (objfile->arch (), current_language);
 
-  copied_types = create_copied_types_hash (objfile);
+  htab_up copied_types = create_copied_types_hash (objfile);
 
   while (obj)
     {
       type_object *next = obj->next;
 
-      htab_empty (copied_types);
+      htab_empty (copied_types.get ());
 
-      obj->type = copy_type_recursive (objfile, obj->type, copied_types);
+      obj->type = copy_type_recursive (objfile, obj->type,
+                                      copied_types.get ());
 
       obj->next = NULL;
       obj->prev = NULL;
 
       obj = next;
     }
-
-  htab_delete (copied_types);
 }
 
 static void
index c8d94149bb8cece2cde7c2c2d9c39ad384ce4ecc..4b28213594a830dbf5d2263e301ebf3246c93de3 100644 (file)
@@ -2519,22 +2519,19 @@ preserve_one_internalvar (struct internalvar *var, struct objfile *objfile,
 void
 preserve_values (struct objfile *objfile)
 {
-  htab_t copied_types;
   struct internalvar *var;
 
   /* Create the hash table.  We allocate on the objfile's obstack, since
      it is soon to be deleted.  */
-  copied_types = create_copied_types_hash (objfile);
+  htab_up copied_types = create_copied_types_hash (objfile);
 
   for (const value_ref_ptr &item : value_history)
-    preserve_one_value (item.get (), objfile, copied_types);
+    preserve_one_value (item.get (), objfile, copied_types.get ());
 
   for (var = internalvars; var; var = var->next)
-    preserve_one_internalvar (var, objfile, copied_types);
+    preserve_one_internalvar (var, objfile, copied_types.get ());
 
-  preserve_ext_lang_values (objfile, copied_types);
-
-  htab_delete (copied_types);
+  preserve_ext_lang_values (objfile, copied_types.get ());
 }
 
 static void