Add (size_t) casts to MALLOCX_ALIGN().

Add (size_t) casts to MALLOCX_ALIGN() macros so that passing the integer
constant 0x80000000 does not cause a compiler warning about invalid
shift amount.

This resolves #354.
This commit is contained in:
Jason Evans 2016-03-11 10:11:56 -08:00
parent ca18f2834e
commit 824b947be0
2 changed files with 14 additions and 17 deletions

View File

@ -13,11 +13,11 @@
# define MALLOCX_LG_ALIGN(la) ((int)(la)) # define MALLOCX_LG_ALIGN(la) ((int)(la))
# if LG_SIZEOF_PTR == 2 # if LG_SIZEOF_PTR == 2
# define MALLOCX_ALIGN(a) ((int)(ffs(a)-1)) # define MALLOCX_ALIGN(a) ((int)(ffs((int)(a))-1))
# else # else
# define MALLOCX_ALIGN(a) \ # define MALLOCX_ALIGN(a) \
((int)(((a) < (size_t)INT_MAX) ? ffs((int)(a))-1 : \ ((int)(((size_t)(a) < (size_t)INT_MAX) ? ffs((int)(a))-1 : \
ffs((int)((a)>>32))+31)) ffs((int)(((size_t)(a))>>32))+31))
# endif # endif
# define MALLOCX_ZERO ((int)0x40) # define MALLOCX_ZERO ((int)0x40)
/* /*
@ -29,7 +29,7 @@
/* /*
* Bias arena index bits so that 0 encodes "use an automatically chosen arena". * Bias arena index bits so that 0 encodes "use an automatically chosen arena".
*/ */
# define MALLOCX_ARENA(a) ((int)(((a)+1) << 20)) # define MALLOCX_ARENA(a) ((((int)(a))+1) << 20)
#if defined(__cplusplus) && defined(JEMALLOC_USE_CXX_THROW) #if defined(__cplusplus) && defined(JEMALLOC_USE_CXX_THROW)
# define JEMALLOC_CXX_THROW throw() # define JEMALLOC_CXX_THROW throw()

View File

@ -69,18 +69,14 @@ TEST_END
TEST_BEGIN(test_oom) TEST_BEGIN(test_oom)
{ {
size_t hugemax, size, alignment;
hugemax = get_huge_size(get_nhuge()-1);
/* /*
* It should be impossible to allocate two objects that each consume * It should be impossible to allocate two objects that each consume
* more than half the virtual address space. * more than half the virtual address space.
*/ */
{ {
void *p; size_t hugemax = get_huge_size(get_nhuge()-1);
void *p = mallocx(hugemax, 0);
p = mallocx(hugemax, 0);
if (p != NULL) { if (p != NULL) {
assert_ptr_null(mallocx(hugemax, 0), assert_ptr_null(mallocx(hugemax, 0),
"Expected OOM for mallocx(size=%#zx, 0)", hugemax); "Expected OOM for mallocx(size=%#zx, 0)", hugemax);
@ -89,15 +85,16 @@ TEST_BEGIN(test_oom)
} }
#if LG_SIZEOF_PTR == 3 #if LG_SIZEOF_PTR == 3
size = ZU(0x8000000000000000); assert_ptr_null(mallocx(0x8000000000000000ULL,
alignment = ZU(0x8000000000000000); MALLOCX_ALIGN(0x8000000000000000ULL)),
"Expected OOM for mallocx()");
assert_ptr_null(mallocx(0x8000000000000000ULL,
MALLOCX_ALIGN(0x80000000)),
"Expected OOM for mallocx()");
#else #else
size = ZU(0x80000000); assert_ptr_null(mallocx(0x80000000UL, MALLOCX_ALIGN(0x80000000UL)),
alignment = ZU(0x80000000); "Expected OOM for mallocx()");
#endif #endif
assert_ptr_null(mallocx(size, MALLOCX_ALIGN(alignment)),
"Expected OOM for mallocx(size=%#zx, MALLOCX_ALIGN(%#zx)", size,
alignment);
} }
TEST_END TEST_END