This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: endless loop in compute_inverse bootstrapping on alpha
> Breakpoint 6, compute_inverse (order=32)
> at
> /home/ritzert/nfs/compile/gcc/HEAD/gcc/gcc/ggc-page.c:1084
> 1084 e = 0;
> 1: size = 0
>
> Here obviously size % 2 == 0 will always be true.
This keeps bugging me...
I went on with debugging and much to my surprise found:
(gdb) p object_size_table
$8 = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192,
16384,
32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304,
8388608,
16777216, 33554432, 67108864, 134217728, 268435456, 536870912,
1073741824,
2147483648, 4294967296, 8589934592, 17179869184, 34359738368,
68719476736,
137438953472, 274877906944, 549755813888, 1099511627776,
2199023255552,
4398046511104, 8796093022208, 17592186044416, 35184372088832,
70368744177664, 140737488355328, 281474976710656, 562949953421312,
1125899906842624, 2251799813685248, 4503599627370496,
9007199254740992,
18014398509481984, 36028797018963968, 72057594037927936,
144115188075855872,
288230376151711744, 576460752303423488, 1152921504606846976,
2305843009213693952, 4611686018427387904, 9223372036854775808, 216,
40, 24,
88}
With OBJECT_SIZE defined as a lookup in that table, OBJECT_SIZE(32)
should definitively by non-zero. Maybe it should be defined as size_t
as is object_size_table (untested patch follows)? On alpha
sizeof(unsigned)==4 while sizeof(size_t)==8.
Michael
2002-08-23 Michael Ritzert <michael@ritzert.de>
* ggc-page.c (compute_inverse): Define size and inv as
size_t.
Index: ggc-page.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ggc-page.c,v
retrieving revision 1.53
diff -u -3 -p -r1.53 ggc-page.c
--- ggc-page.c 22 Aug 2002 19:17:04 -0000 1.53
+++ ggc-page.c 23 Aug 2002 15:34:17 -0000
@@ -1078,7 +1078,8 @@ static void
compute_inverse (order)
unsigned order;
{
- unsigned size, inv, e;
+ size_t size, inv;
+ unsigned e;
size = OBJECT_SIZE (order);
e = 0;