1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
base / third_party / cityhash / patches / 0002-warnings.patch [blame]
diff --git a/base/third_party/cityhash/city.cc b/base/third_party/cityhash/city.cc
index 2ab3db20f4fa1..913d91f4c9a1b 100644
--- a/base/third_party/cityhash/city.cc
+++ b/base/third_party/cityhash/city.cc
@@ -181,7 +181,7 @@ static uint32 Hash32Len13to24(const char* s, size_t len) {
uint32 d = Fetch32(s + (len >> 1));
uint32 e = Fetch32(s);
uint32 f = Fetch32(s + len - 4);
- uint32 h = len;
+ uint32 h = static_cast<uint32>(len);
return fmix(Mur(f, Mur(e, Mur(d, Mur(c, Mur(b, Mur(a, h)))))));
}
@@ -191,14 +191,14 @@ static uint32 Hash32Len0to4(const char* s, size_t len) {
uint32 c = 9;
for (size_t i = 0; i < len; i++) {
signed char v = s[i];
- b = b * c1 + v;
+ b = b * c1 + static_cast<uint32>(v);
c ^= b;
}
- return fmix(Mur(b, Mur(len, c)));
+ return fmix(Mur(b, Mur(static_cast<uint32>(len), c)));
}
static uint32 Hash32Len5to12(const char* s, size_t len) {
- uint32 a = len, b = len * 5, c = 9, d = b;
+ uint32 a = static_cast<uint32>(len), b = a * 5, c = 9, d = b;
a += Fetch32(s);
b += Fetch32(s + len - 4);
c += Fetch32(s + ((len >> 1) & 4));
@@ -213,7 +213,7 @@ uint32 CityHash32(const char* s, size_t len) {
}
// len > 24
- uint32 h = len, g = c1 * len, f = g;
+ uint32 h = static_cast<uint32>(len), g = c1 * h, f = g;
uint32 a0 = Rotate32(Fetch32(s + len - 4) * c1, 17) * c2;
uint32 a1 = Rotate32(Fetch32(s + len - 8) * c1, 17) * c2;
uint32 a2 = Rotate32(Fetch32(s + len - 16) * c1, 17) * c2;
@@ -314,11 +314,11 @@ static uint64 HashLen0to16(const char* s, size_t len) {
return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul);
}
if (len > 0) {
- uint8 a = s[0];
- uint8 b = s[len >> 1];
- uint8 c = s[len - 1];
+ uint8 a = static_cast<uint8>(s[0]);
+ uint8 b = static_cast<uint8>(s[len >> 1]);
+ uint8 c = static_cast<uint8>(s[len - 1]);
uint32 y = static_cast<uint32>(a) + (static_cast<uint32>(b) << 8);
- uint32 z = len + (static_cast<uint32>(c) << 2);
+ uint32 z = static_cast<uint32>(len) + (static_cast<uint32>(c) << 2);
return ShiftMix(y * k2 ^ z * k0) * k2;
}
return k2;
@@ -439,15 +439,15 @@ static uint128 CityMurmur(const char* s, size_t len, uint128 seed) {
uint64 b = Uint128High64(seed);
uint64 c = 0;
uint64 d = 0;
- signed long l = len - 16;
- if (l <= 0) { // len <= 16
+ if (len <= 16) {
a = ShiftMix(a * k1) * k1;
c = b * k1 + HashLen0to16(s, len);
d = ShiftMix(a + (len >= 8 ? Fetch64(s) : c));
- } else { // len > 16
+ } else {
c = HashLen16(Fetch64(s + len - 8) + k1, a);
d = HashLen16(b + len, c + Fetch64(s + len - 16));
a += d;
+ // len > 16 here, so do...while is safe
do {
a ^= ShiftMix(Fetch64(s) * k1) * k1;
a *= k1;
@@ -456,8 +456,8 @@ static uint128 CityMurmur(const char* s, size_t len, uint128 seed) {
c *= k1;
d ^= c;
s += 16;
- l -= 16;
- } while (l > 0);
+ len -= 16;
+ } while (len > 16);
}
a = HashLen16(a, c);
b = HashLen16(d, b);