On 4/20/21 2:13 PM, Marek Polacek wrote:
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?
Same thing :(
Martin
Marek