]> granicus.if.org Git - php/commitdiff
Fix allocator for 64bit zend_long with 32bit long
authorNikita Popov <nikic@php.net>
Thu, 16 Oct 2014 10:38:44 +0000 (12:38 +0200)
committerNikita Popov <nikic@php.net>
Thu, 16 Oct 2014 10:42:23 +0000 (12:42 +0200)
Zend/zend_alloc.c
Zend/zend_multiply.h

index f5ffb6491b00a841ac5ea68783a24236350a5ff8..bae723f27883adfeadef10f1f3554d710dae1777 100644 (file)
@@ -482,7 +482,11 @@ static void zend_mm_munmap(void *addr, size_t size)
 static zend_always_inline int zend_mm_bitset_nts(zend_mm_bitset bitset)
 {
 #if defined(__GNUC__)
+# if SIZEOF_ZEND_LONG == SIZEOF_LONG
        return __builtin_ctzl(~bitset);
+# else
+       return __builtin_ctzll(~bitset);
+# endif
 #elif defined(_WIN32)
        unsigned long index;
 
@@ -519,7 +523,11 @@ static zend_always_inline int zend_mm_bitset_nts(zend_mm_bitset bitset)
 static zend_always_inline int zend_mm_bitset_ntz(zend_mm_bitset bitset)
 {
 #if defined(__GNUC__)
+# if SIZEOF_ZEND_LONG == SIZEOF_LONG
        return __builtin_ctzl(bitset);
+# else
+       return __builtin_ctzll(bitset);
+# endif
 #elif defined(_WIN32)
        unsigned long index;
 
index ad874ba03906e0f8d2ef351d5085e1547f83616f..6dce8fb6ac20f379cdf9aea801d7b037c27b35c0 100644 (file)
 static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow)
 {
        size_t res = nmemb;
-       zend_ulong m_overflow = 0;
+       size_t m_overflow = 0;
 
        __asm__ ("mull %3\n\taddl %4,%0\n\tadcl $0,%1"
             : "=&a"(res), "=&d" (m_overflow)