Use PTR2IV() instead of casting a pointer to IV, to avoid warnings.
authorRobin Barker <rmbarker@cpan.org>
Wed, 1 May 2013 17:39:26 +0000 (18:39 +0100)
committerNicholas Clark <nick@ccl4.org>
Mon, 6 May 2013 07:57:23 +0000 (09:57 +0200)
The cast to IV was added to avoid problems on platforms where pointers are
larger than longs. However, the change instead generates warnings on
platforms where IVs are larger than pointers. Instead, use the PTR2IV()
macro provided by perl.h to make everyone happy.

Also change the type of the variable on that line, because it is cast to
STRLEN the first time it is used, and then passed to a macro that assigns it
to an int regardless.

hv_func.h

index 0a66356..9dfe158 100644 (file)
--- a/hv_func.h
+++ b/hv_func.h
@@ -392,8 +392,8 @@ S_perl_hash_murmur3(const unsigned char * const seed, const unsigned char *ptr,
     /* This CPU does not handle unaligned word access */
 
     /* Consume enough so that the next data byte is word aligned */
-    int i = -(IV)ptr & 3;
-    if(i && (STRLEN)i <= len) {
+    STRLEN i = -PTR2IV(ptr) & 3;
+    if(i && i <= len) {
       MURMUR_DOBYTES(i, h1, carry, bytes_in_carry, ptr, len);
     }