diff options
author | Jason Merrill <jason@redhat.com> | 2017-11-14 11:02:57 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-11-14 11:02:57 -0500 |
commit | 21faa10189001f70361ca13133b01a815d2b342c (patch) | |
tree | 931e4ec35ba245c1ce72ae664a03ce5b25f38cb6 /gcc/hash-table.h | |
parent | 55518e0f5df1f1693e060ddd595a86ac816ec291 (diff) | |
download | gcc-21faa10189001f70361ca13133b01a815d2b342c.zip gcc-21faa10189001f70361ca13133b01a815d2b342c.tar.gz gcc-21faa10189001f70361ca13133b01a815d2b342c.tar.bz2 |
Support GTY((cache)) on hash_map.
gcc/
* hash-traits.h (ggc_remove): Add ggc_maybe_mx member function.
(ggc_cache_remove): Override it instead of ggc_mx.
* hash-table.h (gt_ggc_mx): Call it instead of ggc_mx.
(gt_cleare_cache): Call ggc_mx instead of gt_ggc_mx.
* hash-map-traits.h (simple_hashmap_traits): Add maybe_mx member.
(simple_cache_map_traits): Override maybe_mx.
* hash-map.h (hash_entry): Add ggc_maybe_mx and keep_cache_entry.
(hash_map): Friend gt_cleare_cache.
(gt_cleare_cache): New.
* tree.h (tree_cache_traits): New hash_map traits class.
(tree_cache_map): New typedef.
gcc/cp/
* decl.c (decomp_type_table): Use tree_cache_map.
* init.c (nsdmi_inst): Likewise.
* pt.c (defarg_ints): Likewise.
* cp-objcp-common.c (cp_get_debug_type): Likewise.
From-SVN: r254731
Diffstat (limited to 'gcc/hash-table.h')
-rw-r--r-- | gcc/hash-table.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/hash-table.h b/gcc/hash-table.h index 64d3157..b86a1d1 100644 --- a/gcc/hash-table.h +++ b/gcc/hash-table.h @@ -1044,7 +1044,9 @@ gt_ggc_mx (hash_table<E> *h) || table::is_deleted (h->m_entries[i])) continue; - E::ggc_mx (h->m_entries[i]); + /* Use ggc_maxbe_mx so we don't mark right away for cache tables; we'll + mark in gt_cleare_cache if appropriate. */ + E::ggc_maybe_mx (h->m_entries[i]); } } @@ -1094,7 +1096,6 @@ template<typename H> inline void gt_cleare_cache (hash_table<H> *h) { - extern void gt_ggc_mx (typename H::value_type &t); typedef hash_table<H> table; if (!h) return; @@ -1106,7 +1107,7 @@ gt_cleare_cache (hash_table<H> *h) if (res == 0) h->clear_slot (&*iter); else if (res != -1) - gt_ggc_mx (*iter); + H::ggc_mx (*iter); } } |