For rem being zero (where rem is the remainder of a division by
BITS_PER_LONG), shifts by "BITS_PER_LONG - rem" degenerate to undefined
constructs.
An alternative would be to remove these implicitly unused functions.
Coverity ID
1192174 (__bitmap_shift_right)
Coverity ID
1192175 (__bitmap_shift_left)
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
lower = src[off + k];
if (left && off + k == lim - 1)
lower &= mask;
- dst[k] = upper << (BITS_PER_LONG - rem) | lower >> rem;
+ dst[k] = rem
+ ? (upper << (BITS_PER_LONG - rem)) | (lower >> rem)
+ : lower;
if (left && k == lim - 1)
dst[k] &= mask;
}
upper = src[k];
if (left && k == lim - 1)
upper &= (1UL << left) - 1;
- dst[k + off] = lower >> (BITS_PER_LONG - rem) | upper << rem;
+ dst[k + off] = rem ? (lower >> (BITS_PER_LONG - rem))
+ | (upper << rem)
+ : upper;
if (left && k + off == lim - 1)
dst[k + off] &= (1UL << left) - 1;
}