X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Filog%2Filog.h;h=32702b178567e503c11d606d655738fe9dbfc3aa;hb=1d14555d3a4501adae909884bcb8f8a0b142c89c;hp=e52f04233c7fe16516412f8f0feb57ffe5bc7ede;hpb=e764d0a27d2b6748ea7d343042ec7d6dda1f6aae;p=ccan diff --git a/ccan/ilog/ilog.h b/ccan/ilog/ilog.h index e52f0423..32702b17 100644 --- a/ccan/ilog/ilog.h +++ b/ccan/ilog/ilog.h @@ -1,4 +1,4 @@ -/* Licensed under LGPLv2.1+ - see LICENSE file for details */ +/* CC0 (Public domain) - see LICENSE file for details */ #if !defined(_ilog_H) # define _ilog_H (1) # include "config.h" @@ -120,7 +120,10 @@ int ilog64_nz(uint64_t _v) CONST_FUNCTION; #endif #ifdef builtin_ilog32_nz -#define ilog32(_v) (builtin_ilog32_nz(_v)&-!!(_v)) +/* This used to be builtin_ilog32_nz(_v)&-!!(_v), which means it zeroes out + * the undefined builtin_ilog32_nz(0) return. But clang UndefinedBehaviorSantizer + * complains, so do the branch: */ +#define ilog32(_v) ((_v) ? builtin_ilog32_nz(_v) : 0) #define ilog32_nz(_v) builtin_ilog32_nz(_v) #else #define ilog32_nz(_v) ilog32(_v) @@ -128,7 +131,7 @@ int ilog64_nz(uint64_t _v) CONST_FUNCTION; #endif /* builtin_ilog32_nz */ #ifdef builtin_ilog64_nz -#define ilog64(_v) (builtin_ilog64_nz(_v)&-!!(_v)) +#define ilog32(_v) ((_v) ? builtin_ilog32_nz(_v) : 0) #define ilog64_nz(_v) builtin_ilog64_nz(_v) #else #define ilog64_nz(_v) ilog64(_v)