mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 13:01:10 +02:00
py: Fix undefined left shift operations.
By ensuring the value to be shifted is an unsigned of the appropriate type. This fixes several runtime diagnostics such as: ../../py/binary.c:199:28: runtime error: left shift of 32768 by 16 places cannot be represented in type 'int' Signed-off-by: Jeff Epler <jepler@gmail.com>
This commit is contained in:
committed by
Damien George
parent
816246836e
commit
2c8ccd3ee8
@@ -196,7 +196,7 @@ static float mp_decode_half_float(uint16_t hf) {
|
||||
++e;
|
||||
}
|
||||
|
||||
fpu.i = ((hf & 0x8000) << 16) | (e << 23) | (m << 13);
|
||||
fpu.i = ((hf & 0x8000u) << 16) | (e << 23) | (m << 13);
|
||||
return fpu.f;
|
||||
}
|
||||
|
||||
|
@@ -759,7 +759,7 @@ static void bit_vector_clear(bit_vector_t *self) {
|
||||
static bool bit_vector_is_set(bit_vector_t *self, size_t index) {
|
||||
const size_t bits_size = sizeof(*self->bits) * MP_BITS_PER_BYTE;
|
||||
return index / bits_size < self->alloc
|
||||
&& (self->bits[index / bits_size] & (1 << (index % bits_size))) != 0;
|
||||
&& (self->bits[index / bits_size] & ((uintptr_t)1 << (index % bits_size))) != 0;
|
||||
}
|
||||
|
||||
static void bit_vector_set(bit_vector_t *self, size_t index) {
|
||||
@@ -770,7 +770,7 @@ static void bit_vector_set(bit_vector_t *self, size_t index) {
|
||||
self->bits = m_renew(uintptr_t, self->bits, self->alloc, new_alloc);
|
||||
self->alloc = new_alloc;
|
||||
}
|
||||
self->bits[index / bits_size] |= 1 << (index % bits_size);
|
||||
self->bits[index / bits_size] |= (uintptr_t)1 << (index % bits_size);
|
||||
}
|
||||
|
||||
typedef struct _mp_opcode_t {
|
||||
|
Reference in New Issue
Block a user