There is no unsigned overflow because descr has a negative value
actually when it is subtracted from type_descr.
* mark.c (GC_mark_from): Cast descr to signed_word
in (type_descr-(descr+...)).
continue;
}
descr = *(word *)(type_descr
- - (descr + (GC_INDIR_PER_OBJ_BIAS
- - GC_DS_PER_OBJECT)));
+ - ((signed_word)descr + (GC_INDIR_PER_OBJ_BIAS
+ - GC_DS_PER_OBJECT)));
}
if (0 == descr) {
/* Can happen either because we generated a 0 descriptor */