| Author: Manoj Gupta <manojgupta@google.com> |
| |
| Use unsigned 1 for shifting instead of signed 1. |
| |
| This fixed an issue with shift caught by undefined behavior |
| sanitizer in clang. |
| bzip2-1.0.6/blocksort.c:255:7 |
| runtime error: left shift of 1 by 31 places cannot be represented in type 'int' |
| |
| --- a/blocksort.c |
| +++ b/blocksort.c |
| @@ -202,9 +202,9 @@ void fallbackQSort3 ( UInt32* fmap, |
| bhtab [ 0 .. 2+(nblock/32) ] destroyed |
| */ |
| |
| -#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) |
| -#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) |
| -#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) |
| +#define SET_BH(zz) bhtab[(zz) >> 5] |= (1u << ((zz) & 31)) |
| +#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1u << ((zz) & 31)) |
| +#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1u << ((zz) & 31))) |
| #define WORD_BH(zz) bhtab[(zz) >> 5] |
| #define UNALIGNED_BH(zz) ((zz) & 0x01f) |
| |