ggc-page.c (ggc_allocated_p): Rename to ...
authorRichard Biener <rguenther@suse.de>
Thu, 20 Apr 2017 14:25:11 +0000 (14:25 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 20 Apr 2017 14:25:11 +0000 (14:25 +0000)
2017-04-20  Richard Biener  <rguenther@suse.de>

* ggc-page.c (ggc_allocated_p): Rename to ...
(safe_lookup_page_table_entry): ... this and return the lookup
result.
(gt_ggc_m_S): Use safe_lookup_page_table_entry.

From-SVN: r247025

gcc/ChangeLog
gcc/ggc-page.c

index 97fb5f3..fc12607 100644 (file)
@@ -1,5 +1,12 @@
 2017-04-20  Richard Biener  <rguenther@suse.de>
 
+       * ggc-page.c (ggc_allocated_p): Rename to ...
+       (safe_lookup_page_table_entry): ... this and return the lookup
+       result.
+       (gt_ggc_m_S): Use safe_lookup_page_table_entry.
+
+2017-04-20  Richard Biener  <rguenther@suse.de>
+
        PR tree-optimization/80453
        * tree-ssa-sccvn.h (struct vn_phi_s): Add cclhs and ccrhs members.
        * tree-ssa-sccvn.c (cond_stmts_equal_p): Use recorded lhs and rhs
index 1aef94e..dd65560 100644 (file)
@@ -522,7 +522,6 @@ static bool in_gc = false;
 /* Initial guess as to how many page table entries we might need.  */
 #define INITIAL_PTE_COUNT 128
 \f
-static int ggc_allocated_p (const void *);
 static page_entry *lookup_page_table_entry (const void *);
 static void set_page_table_entry (void *, page_entry *);
 #ifdef USING_MMAP
@@ -587,10 +586,11 @@ push_by_depth (page_entry *p, unsigned long *s)
 #define save_in_use_p(__p) \
   (save_in_use_p_i (__p->index_by_depth))
 
-/* Returns nonzero if P was allocated in GC'able memory.  */
+/* Traverse the page table and find the entry for a page.
+   If the object wasn't allocated in GC return NULL.  */
 
-static inline int
-ggc_allocated_p (const void *p)
+static inline page_entry *
+safe_lookup_page_table_entry (const void *p)
 {
   page_entry ***base;
   size_t L1, L2;
@@ -603,7 +603,7 @@ ggc_allocated_p (const void *p)
   while (1)
     {
       if (table == NULL)
-       return 0;
+       return NULL;
       if (table->high_bits == high_bits)
        break;
       table = table->next;
@@ -614,8 +614,10 @@ ggc_allocated_p (const void *p)
   /* Extract the level 1 and 2 indices.  */
   L1 = LOOKUP_L1 (p);
   L2 = LOOKUP_L2 (p);
+  if (! base[L1])
+    return NULL;
 
-  return base[L1] && base[L1][L2];
+  return base[L1][L2];
 }
 
 /* Traverse the page table and find the entry for a page.
@@ -1455,12 +1457,14 @@ gt_ggc_m_S (const void *p)
   unsigned long mask;
   unsigned long offset;
 
-  if (!p || !ggc_allocated_p (p))
+  if (!p)
     return;
 
-  /* Look up the page on which the object is alloced.  .  */
-  entry = lookup_page_table_entry (p);
-  gcc_assert (entry);
+  /* Look up the page on which the object is alloced.  If it was not
+     GC allocated, gracefully bail out.  */
+  entry = safe_lookup_page_table_entry (p);
+  if (!entry)
+    return;
 
   /* Calculate the index of the object on the page; this is its bit
      position in the in_use_p bitmap.  Note that because a char* might