mem-stats.h (mem_alloc_description::unregister_descriptor): New method.
authorJason Merrill <jason@redhat.com>
Tue, 26 Mar 2019 13:38:53 +0000 (09:38 -0400)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 26 Mar 2019 13:38:53 +0000 (14:38 +0100)
* mem-stats.h (mem_alloc_description::unregister_descriptor): New
method.
(mem_alloc_description::release_object_overhead): Fix comment typos.
* hash-table.h (hash_table::~hash_table): Call
release_instance_overhead only if m_entries is non-NULL, otherwise
call unregister_descriptor.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r269943

gcc/ChangeLog
gcc/hash-table.h
gcc/mem-stats.h

index 2801b392057a4e8e95daaddb812ac7760fd3a746..132a8f926b9a7c99a4d71ccc6158702c8328217f 100644 (file)
@@ -1,3 +1,13 @@
+2019-03-26  Jason Merrill  <jason@redhat.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       * mem-stats.h (mem_alloc_description::unregister_descriptor): New
+       method.
+       (mem_alloc_description::release_object_overhead): Fix comment typos.
+       * hash-table.h (hash_table::~hash_table): Call
+       release_instance_overhead only if m_entries is non-NULL, otherwise
+       call unregister_descriptor.
+
 2019-03-26  Bin Cheng  <bin.cheng@linux.alibaba.com>
 
        PR tree-optimization/81740
index e5bbe677cecee656445634c8950903d94e85019d..37e4b83b876869c2cc7e46fcb05bdcd21573e8c9 100644 (file)
@@ -652,12 +652,13 @@ hash_table<Descriptor, Lazy, Allocator>::~hash_table ()
        Allocator <value_type> ::data_free (m_entries);
       else
        ggc_free (m_entries);
+      if (m_gather_mem_stats)
+       hash_table_usage ().release_instance_overhead (this,
+                                                      sizeof (value_type)
+                                                      * m_size, true);
     }
-
-  if (m_gather_mem_stats)
-    hash_table_usage ().release_instance_overhead (this,
-                                                  sizeof (value_type)
-                                                  * m_size, true);
+  else if (m_gather_mem_stats)
+    hash_table_usage ().unregister_descriptor (this);
 }
 
 /* This function returns an array of empty hash table elements.  */
index 7612e7de3d2fd5d4005c5f97a53276a2fe76d281..63ce8712e2b0f7a676b04dd8f55ad749231a761f 100644 (file)
@@ -342,9 +342,15 @@ public:
   T *release_instance_overhead (void *ptr, size_t size,
                                bool remove_from_map = false);
 
-  /* Release intance object identified by PTR pointer.  */
+  /* Release instance object identified by PTR pointer.  */
   void release_object_overhead (void *ptr);
 
+  /* Unregister a memory allocation descriptor registered with
+     register_descriptor (remove from reverse map), unless it is
+     unregistered through release_instance_overhead with
+     REMOVE_FROM_MAP = true.  */
+  void unregister_descriptor (void *ptr);
+
   /* Get sum value for ORIGIN type of allocation for the descriptor.  */
   T get_sum (mem_alloc_origin origin);
 
@@ -522,7 +528,7 @@ mem_alloc_description<T>::release_instance_overhead (void *ptr, size_t size,
   return usage;
 }
 
-/* Release intance object identified by PTR pointer.  */
+/* Release instance object identified by PTR pointer.  */
 
 template <class T>
 inline void
@@ -536,6 +542,17 @@ mem_alloc_description<T>::release_object_overhead (void *ptr)
     }
 }
 
+/* Unregister a memory allocation descriptor registered with
+   register_descriptor (remove from reverse map), unless it is
+   unregistered through release_instance_overhead with
+   REMOVE_FROM_MAP = true.  */
+template <class T>
+inline void
+mem_alloc_description<T>::unregister_descriptor (void *ptr)
+{
+  m_reverse_map->remove (ptr);
+}
+
 /* Default contructor.  */
 
 template <class T>