bitmap.c (bitmap_head::crashme): Define.
authorRichard Biener <rguenther@suse.de>
Thu, 6 Dec 2018 11:32:09 +0000 (11:32 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 6 Dec 2018 11:32:09 +0000 (11:32 +0000)
2018-12-06  Richard Biener  <rguenther@suse.de>

* bitmap.c (bitmap_head::crashme): Define.
* bitmap.h (bitmap_head): Add constexpr default constructor
poisoning the obstack member.
(bitmap_head::crashme): Declare.
(bitmap_release): New function clearing a bitmap and poisoning
the obstack member.
* gengtype.c (main): Make it recognize CONSTEXPR.

* lra-constraints.c (lra_inheritance): Use bitmap_release
instead of bitmap_clear.

* ira.c (ira): Work around class-memaccess warning.
* regrename.c (create_new_chain): Likewise.

From-SVN: r266850

gcc/ChangeLog
gcc/bitmap.c
gcc/bitmap.h
gcc/gengtype.c
gcc/ira.c
gcc/lra-constraints.c
gcc/regrename.c

index a40d99e1ada95f656fbbc721a7ce023287c2524b..e52f2f946f698c2ba132e980ac381e6f30461847 100644 (file)
@@ -1,3 +1,17 @@
+2018-12-06  Richard Biener  <rguenther@suse.de>
+
+       * bitmap.c (bitmap_head::crashme): Define.
+       * bitmap.h (bitmap_head): Add constexpr default constructor
+       poisoning the obstack member.
+       (bitmap_head::crashme): Declare.
+       (bitmap_release): New function clearing a bitmap and poisoning
+       the obstack member.
+       * gengtype.c (main): Make it recognize CONSTEXPR.
+       * lra-constraints.c (lra_inheritance): Use bitmap_release
+       instead of bitmap_clear.
+       * ira.c (ira): Work around class-memaccess warning.
+       * regrename.c (create_new_chain): Likewise.
+
 2018-12-06  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/85726
index 025594400f94e7bab583d18485b0c3ed3535d784..05525795c344ed36879147808d188cb2bf0a36a4 100644 (file)
@@ -26,6 +26,10 @@ along with GCC; see the file COPYING3.  If not see
 /* Memory allocation statistics purpose instance.  */
 mem_alloc_description<bitmap_usage> bitmap_mem_desc;
 
+/* Static zero-initialized bitmap obstack used for default initialization
+   of bitmap_head.  */
+bitmap_obstack bitmap_head::crashme;
+
 static bitmap_element *bitmap_tree_listify_from (bitmap, bitmap_element *);
 
 /* Register new bitmap.  */
index 9a180daa7454722756d9acccc273eb2d22e45a63..7499ebebb00f7db89652097c54473c6fece67bea 100644 (file)
@@ -323,6 +323,12 @@ struct GTY((chain_next ("%h.next"), chain_prev ("%h.prev"))) bitmap_element {
    already pointed to by the chain started by first, so GTY((skip)) it.  */
 
 struct GTY(()) bitmap_head {
+  static bitmap_obstack crashme;
+  /* Poison obstack to not make it not a valid initialized GC bitmap.  */
+  CONSTEXPR bitmap_head()
+    : indx(0), tree_form(false), first(NULL), current(NULL),
+      obstack (&crashme)
+  {}
   /* Index of last element looked at.  */
   unsigned int indx;
   /* False if the bitmap is in list form; true if the bitmap is in tree form.
@@ -441,6 +447,18 @@ bitmap_initialize (bitmap head, bitmap_obstack *obstack CXX_MEM_STAT_INFO)
     bitmap_register (head PASS_MEM_STAT);
 }
 
+/* Release a bitmap (but not its head).  This is suitable for pairing with
+   bitmap_initialize.  */
+
+static inline void
+bitmap_release (bitmap head)
+{
+  bitmap_clear (head);
+  /* Poison the obstack pointer so the obstack can be safely released.
+     Do not zero it as the bitmap then becomes initialized GC.  */
+  head->obstack = &bitmap_head::crashme;
+}
+
 /* Allocate and free bitmaps from obstack, malloc and gc'd memory.  */
 extern bitmap bitmap_alloc (bitmap_obstack *obstack CXX_MEM_STAT_INFO);
 #define BITMAP_ALLOC bitmap_alloc
index 40406dfa88f53b5f236f9ce86bcb7d2fb6ddc805..49393dd394cba5899a120747aa5632199a05b532 100644 (file)
@@ -5205,6 +5205,7 @@ main (int argc, char **argv)
       POS_HERE (do_scalar_typedef ("void", &pos));
       POS_HERE (do_scalar_typedef ("machine_mode", &pos));
       POS_HERE (do_scalar_typedef ("fixed_size_mode", &pos));
+      POS_HERE (do_scalar_typedef ("CONSTEXPR", &pos));
       POS_HERE (do_typedef ("PTR", 
                            create_pointer (resolve_typedef ("void", &pos)),
                            &pos));
index def194a0782ca68a9edd5a0e252d49e18f459e4c..8258750650621731f5ffb7bc5d4892cb0e3dd187 100644 (file)
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -5417,7 +5417,7 @@ ira (FILE *f)
            = ((struct ira_spilled_reg_stack_slot *)
               ira_allocate (max_regno
                             * sizeof (struct ira_spilled_reg_stack_slot)));
-         memset (ira_spilled_reg_stack_slots, 0,
+         memset ((void *)ira_spilled_reg_stack_slots, 0,
                  max_regno * sizeof (struct ira_spilled_reg_stack_slot));
        }
     }
index 09bd7aa7c3592fa2864a13f97c09e0776553a2cb..ba35b95b2cca884a2cf6b14e23146e6fdadd65f8 100644 (file)
@@ -6651,11 +6651,11 @@ lra_inheritance (void)
           inherit_in_ebb.  */
        update_ebb_live_info (BB_HEAD (start_bb), BB_END (bb));
     }
-  bitmap_clear (&ebb_global_regs);
-  bitmap_clear (&temp_bitmap);
-  bitmap_clear (&live_regs);
-  bitmap_clear (&invalid_invariant_regs);
-  bitmap_clear (&check_only_regs);
+  bitmap_release (&ebb_global_regs);
+  bitmap_release (&temp_bitmap);
+  bitmap_release (&live_regs);
+  bitmap_release (&invalid_invariant_regs);
+  bitmap_release (&check_only_regs);
   free (usage_insns);
 
   timevar_pop (TV_LRA_INHERITANCE);
index 84240930e3a5b14ec648fb977b9323580b585233..7294107461b1df077aa83511c120805ad4e2817c 100644 (file)
@@ -231,7 +231,7 @@ create_new_chain (unsigned this_regno, unsigned this_nregs, rtx *loc,
   struct du_chain *this_du;
   int nregs;
 
-  memset (head, 0, sizeof *head);
+  memset ((void *)head, 0, sizeof *head);
   head->next_chain = open_chains;
   head->regno = this_regno;
   head->nregs = this_nregs;