(UBSan occasionally finds something interesting and
often reports whacky non-bugs like this one. "Fixing"
it will make the real UB bugs easier to identify, so...)
According to C's integer promotion rules, `unsigned short` gets
promoted to _signed_ `int`, and shifting into the sign bit of an `int`
is technically UB. Explicit cast to `unsigned` quiets UBSan.
i4le(const void* p_)
{
const char *p = p_;
- return (i2le(p) | (i2le(p + 2) << 16));
+ return (i2le(p) | ((unsigned int)i2le(p + 2) << 16));
}
unsigned long long
i8le(const void* p_)