diff options
author | Michael Cahill <michael.cahill@wiredtiger.com> | 2011-09-19 17:01:19 +1000 |
---|---|---|
committer | Michael Cahill <michael.cahill@wiredtiger.com> | 2011-09-19 17:01:19 +1000 |
commit | 43aee1bb471bd41a63b3443fe8cff0781e129c1b (patch) | |
tree | 7c9bec19ec1bc58d3c8ce9f193132b61662cf0f1 /src/include/intpack.i | |
parent | 793212fe2f4057af07d0ba5a5b7fd6ffb7501697 (diff) | |
download | mongo-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.i | 4 |
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); } |