re PR middle-end/89150 (Tree form bitmaps break GC)
authorRichard Biener <rguenther@suse.de>
Tue, 5 Feb 2019 08:32:16 +0000 (08:32 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 5 Feb 2019 08:32:16 +0000 (08:32 +0000)
2019-02-05  Richard Biener  <rguenther@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.

From-SVN: r268530

gcc/ChangeLog
gcc/bitmap.h

index 21d80ad..f7c8b50 100644 (file)
@@ -1,3 +1,11 @@
+2019-02-05  Richard Biener  <rguenther@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.
+
 2019-02-04  Alexander Monakov  <amonakov@ispras.ru>
 
        PR c/88698
index 4e3254e..11c75e9 100644 (file)
@@ -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 ();
 };