diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2016-12-07 10:22:09 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2016-12-07 10:22:09 +0300 |
commit | 18985f65b411b9fee8f69f6608f07de7f27ee6c9 (patch) | |
tree | 23e36f42017e47c33596dc88087d494d6ae0809e /gcj_mlc.c | |
parent | 8d43b72f2a690c77bdb376c461ee1c6360710745 (diff) | |
download | bdwgc-18985f65b411b9fee8f69f6608f07de7f27ee6c9.tar.gz |
Fix '32-bit value shift followed by expansion to 64-bit' code defect
* gcj_mlc.c [GC_GCJ_SUPPORT] (GC_core_gcj_malloc,
GC_gcj_malloc_ignore_off_page): Cast lg local variable to word before
passing it to GRANULES_TO_BYTES (so that value type widening does not
occur after the value left shift).
* malloc.c (GC_generic_malloc_inner, GC_malloc_kind_global,
GC_generic_malloc_uncollectable): Likewise.
* typd_mlc.c (GC_malloc_explicitly_typed_ignore_off_page): Likewise.
* misc.c (block_add_size): Cast hhdr->hb_sz to word before passing it
to WORDS_TO_BYTES; cast HBLKSIZE-1 to word before "~" operation.
Diffstat (limited to 'gcj_mlc.c')
-rw-r--r-- | gcj_mlc.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -177,7 +177,7 @@ static void maybe_finalize(void) } } else { GC_gcjobjfreelist[lg] = obj_link(op); - GC_bytes_allocd += GRANULES_TO_BYTES(lg); + GC_bytes_allocd += GRANULES_TO_BYTES((word)lg); } *(void **)op = ptr_to_struct_containing_descr; GC_ASSERT(((void **)op)[1] == 0); @@ -250,7 +250,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_gcj_malloc_ignore_off_page(size_t lb, } } else { GC_gcjobjfreelist[lg] = obj_link(op); - GC_bytes_allocd += GRANULES_TO_BYTES(lg); + GC_bytes_allocd += GRANULES_TO_BYTES((word)lg); } } else { LOCK(); |