When I introduced tree-form bitmaps I forgot to think about GC. The following drops the chain_prev annotation to make the marker work for trees. I've also maked the obstack member GTY skip (and prevent bitmap_obstack from gengtype processing) because the obstack isn't used for GC allocated bitmaps.
Bootstrap & regtest running on x86_64-unknown-linux-gnu. Richard. 2019-02-04 Richard Biener <rguent...@suse.de> PR middle-end/89150 * bitmap.h (struct bitmap_obstack): Do not mark GTY. (struct bitmap_element): Drop chain_prev so we properly recurse on the prev member, supporting tree views. (struct bitmap_head): GTY skip the obstack member. Index: gcc/bitmap.h =================================================================== --- gcc/bitmap.h (revision 268509) +++ gcc/bitmap.h (working copy) @@ -288,10 +288,10 @@ typedef unsigned long BITMAP_WORD; #define BITMAP_ELEMENT_ALL_BITS (BITMAP_ELEMENT_WORDS * BITMAP_WORD_BITS) /* Obstack for allocating bitmaps and elements from. */ -struct GTY (()) bitmap_obstack { +struct bitmap_obstack { struct bitmap_element *elements; struct bitmap_head *heads; - struct obstack GTY ((skip)) obstack; + struct obstack obstack; }; /* Bitmap set element. We use a linked list to hold only the bits that @@ -306,7 +306,7 @@ struct GTY (()) bitmap_obstack { bitmap_elt_clear_from to be implemented in unit time rather than linear in the number of elements to be freed. */ -struct GTY((chain_next ("%h.next"), chain_prev ("%h.prev"))) bitmap_element { +struct GTY((chain_next ("%h.next"))) bitmap_element { /* In list form, the next element in the linked list; in tree form, the left child node in the tree. */ struct bitmap_element *next; @@ -340,7 +340,7 @@ struct GTY(()) bitmap_head { /* Last element looked at. */ bitmap_element * GTY((skip(""))) current; /* Obstack to allocate elements from. If NULL, then use GGC allocation. */ - bitmap_obstack *obstack; + bitmap_obstack * GTY((skip(""))) obstack; void dump (); };