From 9bb4d91fe7ce4f1eac7ea1604d5b49317ff9fa73 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 14 Jun 2018 11:50:03 +0300 Subject: [PATCH] Fix comment about inv_sz computation in setup_header (a cherry-pick of commit e55f4632 from 'master') * allchblk.c [MARK_BIT_PER_OBJ] (setup_header): Fix comment (sz*inv_sz>=2**32). * allchblk.c [MARK_BIT_PER_OBJ && INV_SZ_COMPUTATION_CHECK] (setup_header): Add assertion to check the computation of inv_sz. --- allchblk.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/allchblk.c b/allchblk.c index 8dc730d0..461d9286 100644 --- a/allchblk.c +++ b/allchblk.c @@ -243,7 +243,7 @@ static GC_bool setup_header(hdr * hhdr, struct hblk *block, size_t byte_sz, # ifdef MARK_BIT_PER_OBJ /* Set hb_inv_sz as portably as possible. */ - /* We set it to the smallest value such that sz * inv_sz > 2**32 */ + /* We set it to the smallest value such that sz * inv_sz >= 2**32 */ /* This may be more precision than necessary. */ if (byte_sz > MAXOBJBYTES) { hhdr -> hb_inv_sz = LARGE_INV_SZ; @@ -258,6 +258,9 @@ static GC_bool setup_header(hdr * hhdr, struct hblk *block, size_t byte_sz, inv_sz = ((unsigned)1 << 31)/byte_sz; inv_sz *= 2; while (inv_sz*byte_sz > byte_sz) ++inv_sz; +# endif +# ifdef INV_SZ_COMPUTATION_CHECK + GC_ASSERT(((1ULL << 32) + byte_sz - 1) / byte_sz == inv_sz); # endif hhdr -> hb_inv_sz = inv_sz; } -- 2.40.0