- FIXME: fails if offset is a multiple of HBLKSIZE which becomes 0 \
- if (inv_sz == LARGE_INV_SZ) { \
- size_t obj_displ; \
- base = (ptr_t)(hhdr -> hb_block); \
- obj_displ = (ptr_t)(current) - base; \
- if (obj_displ != displ) { \
- GC_ASSERT(obj_displ < hhdr -> hb_sz); \
- /* Must be in all_interior_pointer case, not first block */ \
- /* already did validity check on cache miss. */ \
- ; \
- } else { \
- if (do_offset_check && !GC_valid_offsets[obj_displ]) { \
- GC_ADD_TO_BLACK_LIST_NORMAL(current, source); \
- goto exit_label; \
- } \
- } \
- GC_ASSERT(hhdr -> hb_sz > HBLKSIZE || \
- hhdr -> hb_block == HBLKPTR(current)); \
- GC_ASSERT((ptr_t)(hhdr -> hb_block) < (ptr_t) current); \
- } else { \
- /* Accurate enough if HBLKSIZE <= 2**15. */ \
- GC_ASSERT(HBLKSIZE <= (1 << 15)); \
- size_t obj_displ = (((low_prod >> 16) + 1) * (hhdr -> hb_sz)) >> 16; \
- if (do_offset_check && !GC_valid_offsets[obj_displ]) { \
- GC_ADD_TO_BLACK_LIST_NORMAL(current, source); \
- goto exit_label; \
- } \
- base -= obj_displ; \
- } \
+ FIXME: fails if offset is a multiple of HBLKSIZE which becomes 0 \
+ if (inv_sz == LARGE_INV_SZ) { \
+ size_t obj_displ; \
+ base = (ptr_t)(hhdr -> hb_block); \
+ obj_displ = (ptr_t)(current) - base; \
+ if (obj_displ != displ) { \
+ GC_ASSERT(obj_displ < hhdr -> hb_sz); \
+ /* Must be in all_interior_pointer case, not first block */ \
+ /* already did validity check on cache miss. */ \
+ } else { \
+ if (do_offset_check && !GC_valid_offsets[obj_displ]) { \
+ GC_ADD_TO_BLACK_LIST_NORMAL(current, source); \
+ goto exit_label; \
+ } \
+ } \
+ GC_ASSERT(hhdr -> hb_sz > HBLKSIZE || \
+ hhdr -> hb_block == HBLKPTR(current)); \
+ GC_ASSERT((ptr_t)(hhdr -> hb_block) < (ptr_t) current); \
+ } else { \
+ /* Accurate enough if HBLKSIZE <= 2**15. */ \
+ GC_STATIC_ASSERT(HBLKSIZE <= (1 << 15)); \
+ size_t obj_displ = (((low_prod >> 16) + 1) * (hhdr->hb_sz)) >> 16; \
+ if (do_offset_check && !GC_valid_offsets[obj_displ]) { \
+ GC_ADD_TO_BLACK_LIST_NORMAL(current, source); \
+ goto exit_label; \
+ } \
+ base -= obj_displ; \
+ } \