all: Fix implicit casts of float/double, and signed comparison.

These were found by buiding the unix coverage variant on macOS (so clang
compiler).  Mostly, these are fixing implicit cast of float/double to
mp_float_t which is one of those two and one mp_int_t to size_t fix for
good measure.
This commit is contained in:
David Lechner
2020-03-20 00:10:22 -05:00
committed by Damien George
parent 3a0f64fc7a
commit a2110bd3fc
6 changed files with 12 additions and 12 deletions

View File

@@ -176,9 +176,9 @@ mp_obj_t mp_binary_get_val_array(char typecode, void *p, size_t index) {
#endif
#if MICROPY_PY_BUILTINS_FLOAT
case 'f':
return mp_obj_new_float(((float *)p)[index]);
return mp_obj_new_float((mp_float_t)((float *)p)[index]);
case 'd':
return mp_obj_new_float(((double *)p)[index]);
return mp_obj_new_float((mp_float_t)((double *)p)[index]);
#endif
// Extension to CPython: array of objects
case 'O':
@@ -244,12 +244,12 @@ mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte *p_base, byte *
union { uint32_t i;
float f;
} fpu = {val};
return mp_obj_new_float(fpu.f);
return mp_obj_new_float((mp_float_t)fpu.f);
} else if (val_type == 'd') {
union { uint64_t i;
double f;
} fpu = {val};
return mp_obj_new_float(fpu.f);
return mp_obj_new_float((mp_float_t)fpu.f);
#endif
} else if (is_signed(val_type)) {
if ((long long)MP_SMALL_INT_MIN <= val && val <= (long long)MP_SMALL_INT_MAX) {

View File

@@ -445,7 +445,7 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
}
#endif
if (len_adj > 0) {
if (len_adj > o->free) {
if ((size_t)len_adj > o->free) {
// TODO: alloc policy; at the moment we go conservative
o->items = m_renew(byte, o->items, (o->len + o->free) * item_sz, (o->len + len_adj) * item_sz);
o->free = len_adj;

View File

@@ -218,7 +218,7 @@ mp_obj_t mp_parse_num_decimal(const char *str, size_t len, bool allow_imag, bool
if (str + 2 < top && (str[1] | 0x20) == 'n' && (str[2] | 0x20) == 'f') {
// inf
str += 3;
dec_val = INFINITY;
dec_val = (mp_float_t)INFINITY;
if (str + 4 < top && (str[0] | 0x20) == 'i' && (str[1] | 0x20) == 'n' && (str[2] | 0x20) == 'i' && (str[3] | 0x20) == 't' && (str[4] | 0x20) == 'y') {
// infinity
str += 5;