On Tue, Apr 20, 2021 at 02:03:00PM -0600, Martin Sebor via Gcc wrote: > I have a static hash_map object that needs to persist across passes: > > static GTY(()) hash_map<tree, bitmap> *map; > > I initialize the map like so: > > map = hash_map<tree, bitmap>::create_ggc (4); > > But I see crashes when accessing the map after adding and removing > some number of entries in a few passes. The crashes are due to > the map having been garbage-collected and the memory allocated to > it poisoned (it has the 0xa5a5a5a5a5a5a5a5 bit pattern that I see > in GDD being written into the map by poison_pages()). > > I assumed marking the map pointer GTY(()) would keep the garbage > collector from touching the map. Is there something else I need > to do to keep it from doing that? > > Thanks > Martin > > PS Just in case it matters, the bitmap in the table is allocated > via BITMAP_ALLOC() with a bitmap_obstack variable defined alongside > the map.
My sense is that this is the problem. What happens if you use BITMAP_GGC_ALLOC? Marek