On Thu, 3 Jul 2008, Diego Novillo wrote:

> Kaveh,
>
> I'm testing trunk as of revision 137346 with
> --enable-gather-detailed-memory-stats and I'm getting a bootstrap
> failure due to C++ cast problems.  Since you've been hacking at this
> and added the stricter checking, could you fix the invalid casts?  If
> not, I may try to produce a patch soonish.
> Thanks.  Diego.

Actually it's --enable-gather-detailed-mem-stats ("mem" not "memory"),
this threw me for a while as I was unable to reproduce any failures until
I figured that out. :-)

Patch completed bootstrapped on x86_64-unknown-linux-gnu configured with
--enable-gather-detailed-mem-stats.  Okay for mainline?

                --Kaveh


2008-07-03  Kaveh R. Ghazi  <[EMAIL PROTECTED]>

        * alloc-pool.c (hash_descriptor, eq_descriptor,
        alloc_pool_descriptor): Fix -Wc++-compat warnings.
        * bitmap.c (hash_descriptor, eq_descriptor, bitmap_descriptor):
        Likewise.
        * ggc-common.c (hash_descriptor, eq_descriptor, hash_ptr, eq_ptr,
        loc_descriptor, ggc_prune_ptr, ggc_free_overhead,
        final_cmp_statistic, cmp_statistic, dump_ggc_loc_statistics):
        Likewise.
        * varray.c (hash_descriptor, eq_descriptor, varray_descriptor):
        Likewise.

diff -rup orig/egcc-SVN20080703/gcc/alloc-pool.c 
egcc-SVN20080703/gcc/alloc-pool.c
--- orig/egcc-SVN20080703/gcc/alloc-pool.c      2008-06-29 07:37:45.000000000 
+0200
+++ egcc-SVN20080703/gcc/alloc-pool.c   2008-07-03 19:18:54.000000000 +0200
@@ -81,13 +81,15 @@ static htab_t alloc_pool_hash;
 static hashval_t
 hash_descriptor (const void *p)
 {
-  const struct alloc_pool_descriptor *d = p;
+  const struct alloc_pool_descriptor *const d =
+    (const struct alloc_pool_descriptor * )p;
   return htab_hash_pointer (d->name);
 }
 static int
 eq_descriptor (const void *p1, const void *p2)
 {
-  const struct alloc_pool_descriptor *d = p1;
+  const struct alloc_pool_descriptor *const d =
+    (const struct alloc_pool_descriptor *) p1;
   return d->name == p2;
 }

@@ -106,7 +108,7 @@ alloc_pool_descriptor (const char *name)
                              1);
   if (*slot)
     return *slot;
-  *slot = xcalloc (sizeof (**slot), 1);
+  *slot = XCNEW (struct alloc_pool_descriptor);
   (*slot)->name = name;
   return *slot;
 }
diff -rup orig/egcc-SVN20080703/gcc/bitmap.c egcc-SVN20080703/gcc/bitmap.c
--- orig/egcc-SVN20080703/gcc/bitmap.c  2008-07-03 02:00:18.000000000 +0200
+++ egcc-SVN20080703/gcc/bitmap.c       2008-07-03 19:21:22.000000000 +0200
@@ -51,7 +51,8 @@ static htab_t bitmap_desc_hash;
 static hashval_t
 hash_descriptor (const void *p)
 {
-  const struct bitmap_descriptor *const d = p;
+  const struct bitmap_descriptor *const d =
+    (const struct bitmap_descriptor *) p;
   return htab_hash_pointer (d->file) + d->line;
 }
 struct loc
@@ -63,8 +64,9 @@ struct loc
 static int
 eq_descriptor (const void *p1, const void *p2)
 {
-  const struct bitmap_descriptor *const d = p1;
-  const struct loc *const l = p2;
+  const struct bitmap_descriptor *const d =
+    (const struct bitmap_descriptor *) p1;
+  const struct loc *const l = (const struct loc *) p2;
   return d->file == l->file && d->function == l->function && d->line == 
l->line;
 }

@@ -88,7 +90,7 @@ bitmap_descriptor (const char *file, con
                              1);
   if (*slot)
     return *slot;
-  *slot = xcalloc (sizeof (**slot), 1);
+  *slot = XCNEW (struct bitmap_descriptor);
   (*slot)->file = file;
   (*slot)->function = function;
   (*slot)->line = line;
diff -rup orig/egcc-SVN20080703/gcc/ggc-common.c 
egcc-SVN20080703/gcc/ggc-common.c
--- orig/egcc-SVN20080703/gcc/ggc-common.c      2008-06-26 02:31:32.000000000 
+0200
+++ egcc-SVN20080703/gcc/ggc-common.c   2008-07-03 19:28:44.000000000 +0200
@@ -791,7 +791,7 @@ static htab_t loc_hash;
 static hashval_t
 hash_descriptor (const void *p)
 {
-  const struct loc_descriptor *const d = p;
+  const struct loc_descriptor *const d = (const struct loc_descriptor *) p;

   return htab_hash_pointer (d->function) | d->line;
 }
@@ -799,8 +799,8 @@ hash_descriptor (const void *p)
 static int
 eq_descriptor (const void *p1, const void *p2)
 {
-  const struct loc_descriptor *const d = p1;
-  const struct loc_descriptor *const d2 = p2;
+  const struct loc_descriptor *const d = (const struct loc_descriptor *) p1;
+  const struct loc_descriptor *const d2 = (const struct loc_descriptor *) p2;

   return (d->file == d2->file && d->line == d2->line
          && d->function == d2->function);
@@ -819,7 +819,7 @@ struct ptr_hash_entry
 static hashval_t
 hash_ptr (const void *p)
 {
-  const struct ptr_hash_entry *const d = p;
+  const struct ptr_hash_entry *const d = (const struct ptr_hash_entry *) p;

   return htab_hash_pointer (d->ptr);
 }
@@ -827,7 +827,7 @@ hash_ptr (const void *p)
 static int
 eq_ptr (const void *p1, const void *p2)
 {
-  const struct ptr_hash_entry *const p = p1;
+  const struct ptr_hash_entry *const p = (const struct ptr_hash_entry *) p1;

   return (p->ptr == p2);
 }
@@ -848,7 +848,7 @@ loc_descriptor (const char *name, int li
   slot = (struct loc_descriptor **) htab_find_slot (loc_hash, &loc, 1);
   if (*slot)
     return *slot;
-  *slot = xcalloc (sizeof (**slot), 1);
+  *slot = XCNEW (struct loc_descriptor);
   (*slot)->file = name;
   (*slot)->line = line;
   (*slot)->function = function;
@@ -883,7 +883,7 @@ ggc_record_overhead (size_t allocated, s
 static int
 ggc_prune_ptr (void **slot, void *b ATTRIBUTE_UNUSED)
 {
-  struct ptr_hash_entry *p = *slot;
+  struct ptr_hash_entry *p = (struct ptr_hash_entry *) *slot;
   if (!ggc_marked_p (p->ptr))
     {
       p->loc->collected += p->size;
@@ -907,7 +907,7 @@ ggc_free_overhead (void *ptr)
 {
   PTR *slot = htab_find_slot_with_hash (ptr_hash, ptr, htab_hash_pointer (ptr),
                                        NO_INSERT);
-  struct ptr_hash_entry *p = *slot;
+  struct ptr_hash_entry *p = (struct ptr_hash_entry *) *slot;
   p->loc->freed += p->size;
   htab_clear_slot (ptr_hash, slot);
   free (p);
@@ -917,8 +917,10 @@ ggc_free_overhead (void *ptr)
 static int
 final_cmp_statistic (const void *loc1, const void *loc2)
 {
-  struct loc_descriptor *l1 = *(struct loc_descriptor **) loc1;
-  struct loc_descriptor *l2 = *(struct loc_descriptor **) loc2;
+  const struct loc_descriptor *const l1 =
+    *(const struct loc_descriptor *const *) loc1;
+  const struct loc_descriptor *const l2 =
+    *(const struct loc_descriptor *const *) loc2;
   long diff;
   diff = ((long)(l1->allocated + l1->overhead - l1->freed) -
          (l2->allocated + l2->overhead - l2->freed));
@@ -929,8 +931,10 @@ final_cmp_statistic (const void *loc1, c
 static int
 cmp_statistic (const void *loc1, const void *loc2)
 {
-  struct loc_descriptor *l1 = *(struct loc_descriptor **) loc1;
-  struct loc_descriptor *l2 = *(struct loc_descriptor **) loc2;
+  const struct loc_descriptor *const l1 =
+    *(const struct loc_descriptor *const *) loc1;
+  const struct loc_descriptor *const l2 =
+    *(const struct loc_descriptor *const *) loc2;
   long diff;

   diff = ((long)(l1->allocated + l1->overhead - l1->freed - l1->collected) -
@@ -967,7 +971,7 @@ dump_ggc_loc_statistics (bool final ATTR
   ggc_force_collect = true;
   ggc_collect ();

-  loc_array = xcalloc (sizeof (*loc_array), loc_hash->n_elements);
+  loc_array = XCNEWVEC (struct loc_descriptor *, loc_hash->n_elements);
   fprintf (stderr, 
"-------------------------------------------------------\n");
   fprintf (stderr, "\n%-48s %10s       %10s       %10s       %10s       
%10s\n",
           "source location", "Garbage", "Freed", "Leak", "Overhead", "Times");
diff -rup orig/egcc-SVN20080703/gcc/varray.c egcc-SVN20080703/gcc/varray.c
--- orig/egcc-SVN20080703/gcc/varray.c  2008-06-20 20:34:53.000000000 +0200
+++ egcc-SVN20080703/gcc/varray.c       2008-07-03 19:30:06.000000000 +0200
@@ -49,13 +49,13 @@ static htab_t varray_hash;
 static hashval_t
 hash_descriptor (const void *p)
 {
-  const struct varray_descriptor *d = p;
+  const struct varray_descriptor *d = (const struct varray_descriptor *) p;
   return htab_hash_pointer (d->name);
 }
 static int
 eq_descriptor (const void *p1, const void *p2)
 {
-  const struct varray_descriptor *d = p1;
+  const struct varray_descriptor *d = (const struct varray_descriptor *) p1;
   return d->name == p2;
 }

@@ -74,7 +74,7 @@ varray_descriptor (const char *name)
                              1);
   if (*slot)
     return *slot;
-  *slot = xcalloc (sizeof (**slot), 1);
+  *slot = XCNEW (struct varray_descriptor);
   (*slot)->name = name;
   return *slot;
 }

Reply via email to