1d4a4ab
From fb211db6cbcf25bbdeaa39b6685fae7228c92b3a Mon Sep 17 00:00:00 2001
1d4a4ab
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
1d4a4ab
Date: Thu, 24 Nov 2016 16:34:09 +0100
1d4a4ab
Subject: [PATCH] Fix const correctness in hv_func.h
1d4a4ab
MIME-Version: 1.0
1d4a4ab
Content-Type: text/plain; charset=UTF-8
1d4a4ab
Content-Transfer-Encoding: 8bit
1d4a4ab
1d4a4ab
Building an XS code with -Wcast-qual yielded warnings about discarding
1d4a4ab
const qualifiers from pointer targets like:
1d4a4ab
1d4a4ab
$ printf '#include "EXTERN.h"\n#include "perl.h"\n' | gcc -Wcast-qual -I/usr/lib64/perl5/CORE -c -x c -
1d4a4ab
In file included from /usr/lib64/perl5/CORE/hv.h:629:0,
1d4a4ab
                 from /usr/lib64/perl5/CORE/perl.h:3740,
1d4a4ab
                 from <stdin>:2:
1d4a4ab
/usr/lib64/perl5/CORE/hv_func.h: In function ‘S_perl_hash_siphash_2_4’:
1d4a4ab
/usr/lib64/perl5/CORE/hv_func.h:213:17: warning: cast discards ‘const’ qualifier from pointer target type [-Wcast-qual]
1d4a4ab
   U64TYPE k0 = ((U64TYPE*)seed)[0];
1d4a4ab
                 ^
1d4a4ab
1d4a4ab
Petr Písař: Ported to 5.22.2.
1d4a4ab
1d4a4ab
Signed-off-by: Petr Písař <ppisar@redhat.com>
1d4a4ab
---
1d4a4ab
 hv_func.h | 22 +++++++++++-----------
1d4a4ab
 1 file changed, 11 insertions(+), 11 deletions(-)
1d4a4ab
1d4a4ab
diff --git a/hv_func.h b/hv_func.h
1d4a4ab
index 49a677e..e64d21f 100644
1d4a4ab
--- a/hv_func.h
1d4a4ab
+++ b/hv_func.h
1d4a4ab
@@ -118,7 +118,7 @@
1d4a4ab
 
1d4a4ab
 #if (BYTEORDER == 0x1234 || BYTEORDER == 0x12345678) && U32SIZE == 4
1d4a4ab
   /* CPU endian matches murmurhash algorithm, so read 32-bit word directly */
1d4a4ab
-  #define U8TO32_LE(ptr)   (*((U32*)(ptr)))
1d4a4ab
+  #define U8TO32_LE(ptr)   (*((const U32*)(ptr)))
1d4a4ab
 #elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
1d4a4ab
   /* TODO: Add additional cases below where a compiler provided bswap32 is available */
1d4a4ab
   #if defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3))
1d4a4ab
@@ -210,8 +210,8 @@ S_perl_hash_siphash_2_4(const unsigned char * const seed, const unsigned char *i
1d4a4ab
   U64TYPE v3 = UINT64_C(0x7465646279746573);
1d4a4ab
 
1d4a4ab
   U64TYPE b;
1d4a4ab
-  U64TYPE k0 = ((U64TYPE*)seed)[0];
1d4a4ab
-  U64TYPE k1 = ((U64TYPE*)seed)[1];
1d4a4ab
+  U64TYPE k0 = ((const U64TYPE*)seed)[0];
1d4a4ab
+  U64TYPE k1 = ((const U64TYPE*)seed)[1];
1d4a4ab
   U64TYPE m;
1d4a4ab
   const int left = inlen & 7;
1d4a4ab
   const U8 *end = in + inlen - left;
1d4a4ab
@@ -269,7 +269,7 @@ S_perl_hash_siphash_2_4(const unsigned char * const seed, const unsigned char *i
1d4a4ab
 
1d4a4ab
 PERL_STATIC_INLINE U32
1d4a4ab
 S_perl_hash_superfast(const unsigned char * const seed, const unsigned char *str, STRLEN len) {
1d4a4ab
-    U32 hash = *((U32*)seed) + (U32)len;
1d4a4ab
+    U32 hash = *((const U32*)seed) + (U32)len;
1d4a4ab
     U32 tmp;
1d4a4ab
     int rem= len & 3;
1d4a4ab
     len >>= 2;
1d4a4ab
@@ -373,7 +373,7 @@ S_perl_hash_superfast(const unsigned char * const seed, const unsigned char *str
1d4a4ab
 /* now we create the hash function */
1d4a4ab
 PERL_STATIC_INLINE U32
1d4a4ab
 S_perl_hash_murmur3(const unsigned char * const seed, const unsigned char *ptr, STRLEN len) {
1d4a4ab
-    U32 h1 = *((U32*)seed);
1d4a4ab
+    U32 h1 = *((const U32*)seed);
1d4a4ab
     U32 k1;
1d4a4ab
     U32 carry = 0;
1d4a4ab
 
1d4a4ab
@@ -467,7 +467,7 @@ S_perl_hash_murmur3(const unsigned char * const seed, const unsigned char *ptr,
1d4a4ab
 PERL_STATIC_INLINE U32
1d4a4ab
 S_perl_hash_djb2(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
1d4a4ab
     const unsigned char * const end = (const unsigned char *)str + len;
1d4a4ab
-    U32 hash = *((U32*)seed) + (U32)len;
1d4a4ab
+    U32 hash = *((const U32*)seed) + (U32)len;
1d4a4ab
     while (str < end) {
1d4a4ab
         hash = ((hash << 5) + hash) + *str++;
1d4a4ab
     }
1d4a4ab
@@ -477,7 +477,7 @@ S_perl_hash_djb2(const unsigned char * const seed, const unsigned char *str, con
1d4a4ab
 PERL_STATIC_INLINE U32
1d4a4ab
 S_perl_hash_sdbm(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
1d4a4ab
     const unsigned char * const end = (const unsigned char *)str + len;
1d4a4ab
-    U32 hash = *((U32*)seed) + (U32)len;
1d4a4ab
+    U32 hash = *((const U32*)seed) + (U32)len;
1d4a4ab
     while (str < end) {
1d4a4ab
         hash = (hash << 6) + (hash << 16) - hash + *str++;
1d4a4ab
     }
1d4a4ab
@@ -503,7 +503,7 @@ S_perl_hash_sdbm(const unsigned char * const seed, const unsigned char *str, con
1d4a4ab
 PERL_STATIC_INLINE U32
1d4a4ab
 S_perl_hash_one_at_a_time(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
1d4a4ab
     const unsigned char * const end = (const unsigned char *)str + len;
1d4a4ab
-    U32 hash = *((U32*)seed) + (U32)len;
1d4a4ab
+    U32 hash = *((const U32*)seed) + (U32)len;
1d4a4ab
     while (str < end) {
1d4a4ab
         hash += *str++;
1d4a4ab
         hash += (hash << 10);
1d4a4ab
@@ -518,7 +518,7 @@ S_perl_hash_one_at_a_time(const unsigned char * const seed, const unsigned char
1d4a4ab
 PERL_STATIC_INLINE U32
1d4a4ab
 S_perl_hash_one_at_a_time_hard(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
1d4a4ab
     const unsigned char * const end = (const unsigned char *)str + len;
1d4a4ab
-    U32 hash = *((U32*)seed) + (U32)len;
1d4a4ab
+    U32 hash = *((const U32*)seed) + (U32)len;
1d4a4ab
     
1d4a4ab
     while (str < end) {
1d4a4ab
         hash += (hash << 10);
1d4a4ab
@@ -553,7 +553,7 @@ S_perl_hash_one_at_a_time_hard(const unsigned char * const seed, const unsigned
1d4a4ab
 PERL_STATIC_INLINE U32
1d4a4ab
 S_perl_hash_old_one_at_a_time(const unsigned char * const seed, const unsigned char *str, const STRLEN len) {
1d4a4ab
     const unsigned char * const end = (const unsigned char *)str + len;
1d4a4ab
-    U32 hash = *((U32*)seed);
1d4a4ab
+    U32 hash = *((const U32*)seed);
1d4a4ab
     while (str < end) {
1d4a4ab
         hash += *str++;
1d4a4ab
         hash += (hash << 10);
1d4a4ab
@@ -581,7 +581,7 @@ S_perl_hash_murmur_hash_64a (const unsigned char * const seed, const unsigned ch
1d4a4ab
 {
1d4a4ab
         const U64TYPE m = 0xc6a4a7935bd1e995;
1d4a4ab
         const int r = 47;
1d4a4ab
-        U64TYPE h = *((U64TYPE*)seed) ^ len;
1d4a4ab
+        U64TYPE h = *((const U64TYPE*)seed) ^ len;
1d4a4ab
         const U64TYPE * data = (const U64TYPE *)str;
1d4a4ab
         const U64TYPE * end = data + (len/8);
1d4a4ab
         const unsigned char * data2;
1d4a4ab
-- 
1d4a4ab
2.7.4
1d4a4ab