46 lines
2 KiB
Diff
46 lines
2 KiB
Diff
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118779
|
|
|
|
--- src/package.d.orig 2024-12-28 00:47:59.000000000 -0700
|
|
+++ src/package.d 2025-02-07 12:00:00.646094825 -0700
|
|
@@ -188,12 +188,12 @@ local maygc object rehash_symtab (object
|
|
first process the symbols, that sit in lists
|
|
(maybe Conses become free): */
|
|
{
|
|
- var gcv_object_t* offset = 0; /* offset = sizeof(gcv_object_t)*index */
|
|
+ var aint offset = 0; /* offset = sizeof(gcv_object_t)*index */
|
|
var uintC count = oldsize;
|
|
do {
|
|
var object oldentry = /* entry with number index in oldtable */
|
|
*(gcv_object_t*)(pointerplus(&TheSvector(STACK_2)->data[0],
|
|
- (aint)offset));
|
|
+ offset));
|
|
if (consp(oldentry)) /* this time process only non-empty symbol-lists */
|
|
do {
|
|
pushSTACK(Cdr(oldentry)); /* save rest-list */
|
|
@@ -205,22 +205,22 @@ local maygc object rehash_symtab (object
|
|
newinsert(Car(oldentry),newsize);
|
|
oldentry = popSTACK(); /* rest-list */
|
|
} while (consp(oldentry));
|
|
- offset++;
|
|
+ offset += sizeof(gcv_object_t);
|
|
} while (--count);
|
|
}
|
|
{ /* then process symbols, that sit there collision-free: */
|
|
- var gcv_object_t* offset = 0; /* offset = sizeof(gcv_object_t)*index */
|
|
+ var aint offset = 0; /* offset = sizeof(gcv_object_t)*index */
|
|
var uintC count;
|
|
dotimespC(count,oldsize, {
|
|
var object oldentry = /* entry with number index in oldtable */
|
|
*(gcv_object_t*)(pointerplus(&TheSvector(STACK_2)->data[0],
|
|
- (aint)offset));
|
|
+ offset));
|
|
if (!listp(oldentry)) { /* this time process only symbols /= NIL */
|
|
pushSTACK(oldentry); /* dummy, so that the stack is fine */
|
|
newinsert(oldentry,newsize); /* enter into the new table */
|
|
skipSTACK(1);
|
|
}
|
|
- offset++;
|
|
+ offset += sizeof(gcv_object_t);
|
|
});
|
|
}
|
|
/* stack layout: tab, oldtable, free-conses, newtable. */
|