summaryrefslogtreecommitdiff
path: root/src/include/intpack.i
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@wiredtiger.com>2011-09-19 17:01:19 +1000
committerMichael Cahill <michael.cahill@wiredtiger.com>2011-09-19 17:01:19 +1000
commit43aee1bb471bd41a63b3443fe8cff0781e129c1b (patch)
tree7c9bec19ec1bc58d3c8ce9f193132b61662cf0f1 /src/include/intpack.i
parent793212fe2f4057af07d0ba5a5b7fd6ffb7501697 (diff)
downloadmongo-43aee1bb471bd41a63b3443fe8cff0781e129c1b.tar.gz
When using GCC's builtin leading-zero counting, we need to special case zero: if x is 0, the result is undefined.
Diffstat (limited to 'src/include/intpack.i')
-rw-r--r--src/include/intpack.i4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/include/intpack.i b/src/include/intpack.i
index cfd4646bccd..ffebf3555e2 100644
--- a/src/include/intpack.i
+++ b/src/include/intpack.i
@@ -50,7 +50,8 @@
/* Count the leading zero bytes. */
#ifdef __GNUC__
-#define WT_LEADING_ZEROS(x, i) (i = __builtin_clzll(x) >> 3)
+#define WT_LEADING_ZEROS(x, i) \
+ (i = (x == 0) ? (int)sizeof (x) : __builtin_clzll(x) >> 3)
#else
#define WT_LEADING_ZEROS(x, i) do { \
uint64_t __x = (x); \
@@ -321,7 +322,6 @@ __wt_vsize_negint(uint64_t x)
int lz;
WT_LEADING_ZEROS(~x, lz);
-
return (size_t)(9 - lz);
}