various: Work around a few of the clang ubsan diagnostics.
These fixes do not make me proud. Signed-off-by: Jeff Epler <jepler@gmail.com>
This commit is contained in:
parent
141f7d0c35
commit
2822d83aff
7 changed files with 30 additions and 25 deletions
2
py/bc.c
2
py/bc.c
|
|
@ -147,7 +147,7 @@ static void mp_setup_code_state_helper(mp_code_state_t *code_state, size_t n_arg
|
||||||
// zero out the local stack to begin with
|
// zero out the local stack to begin with
|
||||||
memset(code_state_state, 0, n_state * sizeof(*code_state->state));
|
memset(code_state_state, 0, n_state * sizeof(*code_state->state));
|
||||||
|
|
||||||
const mp_obj_t *kwargs = args + n_args;
|
const mp_obj_t *kwargs = args ? args + n_args : NULL;
|
||||||
|
|
||||||
// var_pos_kw_args points to the stack where the var-args tuple, and var-kw dict, should go (if they are needed)
|
// var_pos_kw_args points to the stack where the var-args tuple, and var-kw dict, should go (if they are needed)
|
||||||
mp_obj_t *var_pos_kw_args = &code_state_state[n_state - 1 - n_pos_args - n_kwonly_args];
|
mp_obj_t *var_pos_kw_args = &code_state_state[n_state - 1 - n_pos_args - n_kwonly_args];
|
||||||
|
|
|
||||||
|
|
@ -910,7 +910,8 @@ mp_lexer_t *mp_lexer_new_from_fd(qstr filename, int fd, bool close_fd) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void mp_lexer_free(mp_lexer_t *lex) {
|
void mp_lexer_free(void *lex_in) {
|
||||||
|
mp_lexer_t *lex = lex_in;
|
||||||
if (lex) {
|
if (lex) {
|
||||||
lex->reader.close(lex->reader.data);
|
lex->reader.close(lex->reader.data);
|
||||||
vstr_clear(&lex->vstr);
|
vstr_clear(&lex->vstr);
|
||||||
|
|
|
||||||
|
|
@ -198,7 +198,7 @@ mp_lexer_t *mp_lexer_new_from_file(qstr filename);
|
||||||
mp_lexer_t *mp_lexer_new_from_fd(qstr filename, int fd, bool close_fd);
|
mp_lexer_t *mp_lexer_new_from_fd(qstr filename, int fd, bool close_fd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void mp_lexer_free(mp_lexer_t *lex);
|
void mp_lexer_free(void *lex);
|
||||||
void mp_lexer_to_next(mp_lexer_t *lex);
|
void mp_lexer_to_next(mp_lexer_t *lex);
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_PY_LEXER_H
|
#endif // MICROPY_INCLUDED_PY_LEXER_H
|
||||||
|
|
|
||||||
2
py/map.c
2
py/map.c
|
|
@ -190,6 +190,7 @@ mp_map_elem_t *MICROPY_WRAP_MP_MAP_LOOKUP(mp_map_lookup)(mp_map_t * map, mp_obj_
|
||||||
|
|
||||||
// if the map is an ordered array then we must do a brute force linear search
|
// if the map is an ordered array then we must do a brute force linear search
|
||||||
if (map->is_ordered) {
|
if (map->is_ordered) {
|
||||||
|
if (map->used) {
|
||||||
for (mp_map_elem_t *elem = &map->table[0], *top = &map->table[map->used]; elem < top; elem++) {
|
for (mp_map_elem_t *elem = &map->table[0], *top = &map->table[map->used]; elem < top; elem++) {
|
||||||
if (elem->key == index || (!compare_only_ptrs && mp_obj_equal(elem->key, index))) {
|
if (elem->key == index || (!compare_only_ptrs && mp_obj_equal(elem->key, index))) {
|
||||||
#if MICROPY_PY_COLLECTIONS_ORDEREDDICT
|
#if MICROPY_PY_COLLECTIONS_ORDEREDDICT
|
||||||
|
|
@ -209,6 +210,7 @@ mp_map_elem_t *MICROPY_WRAP_MP_MAP_LOOKUP(mp_map_lookup)(mp_map_t * map, mp_obj_
|
||||||
return elem;
|
return elem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#if MICROPY_PY_COLLECTIONS_ORDEREDDICT
|
#if MICROPY_PY_COLLECTIONS_ORDEREDDICT
|
||||||
if (MP_LIKELY(lookup_kind != MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)) {
|
if (MP_LIKELY(lookup_kind != MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,7 @@ char *vstr_null_terminated_str(vstr_t *vstr);
|
||||||
void vstr_add_byte(vstr_t *vstr, byte v);
|
void vstr_add_byte(vstr_t *vstr, byte v);
|
||||||
void vstr_add_char(vstr_t *vstr, unichar chr);
|
void vstr_add_char(vstr_t *vstr, unichar chr);
|
||||||
void vstr_add_str(vstr_t *vstr, const char *str);
|
void vstr_add_str(vstr_t *vstr, const char *str);
|
||||||
void vstr_add_strn(vstr_t *vstr, const char *str, size_t len);
|
void vstr_add_strn(void *vstr, const char *str, size_t len);
|
||||||
void vstr_ins_byte(vstr_t *vstr, size_t byte_pos, byte b);
|
void vstr_ins_byte(vstr_t *vstr, size_t byte_pos, byte b);
|
||||||
void vstr_ins_char(vstr_t *vstr, size_t char_pos, unichar chr);
|
void vstr_ins_char(vstr_t *vstr, size_t char_pos, unichar chr);
|
||||||
void vstr_cut_head_bytes(vstr_t *vstr, size_t bytes_to_cut);
|
void vstr_cut_head_bytes(vstr_t *vstr, size_t bytes_to_cut);
|
||||||
|
|
|
||||||
8
py/vm.c
8
py/vm.c
|
|
@ -75,7 +75,7 @@
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define DECODE_SLABEL \
|
#define DECODE_SLABEL \
|
||||||
size_t slab; \
|
int slab; \
|
||||||
do { \
|
do { \
|
||||||
if (ip[0] & 0x80) { \
|
if (ip[0] & 0x80) { \
|
||||||
slab = ((ip[0] & 0x7f) | (ip[1] << 7)) - 0x4000; \
|
slab = ((ip[0] & 0x7f) | (ip[1] << 7)) - 0x4000; \
|
||||||
|
|
@ -792,7 +792,7 @@ unwind_jump:;
|
||||||
if (*(sp - MP_OBJ_ITER_BUF_NSLOTS + 1) == MP_OBJ_NULL) {
|
if (*(sp - MP_OBJ_ITER_BUF_NSLOTS + 1) == MP_OBJ_NULL) {
|
||||||
obj = *(sp - MP_OBJ_ITER_BUF_NSLOTS + 2);
|
obj = *(sp - MP_OBJ_ITER_BUF_NSLOTS + 2);
|
||||||
} else {
|
} else {
|
||||||
obj = MP_OBJ_FROM_PTR(&sp[-MP_OBJ_ITER_BUF_NSLOTS + 1]);
|
obj = MP_OBJ_FROM_PTR(sp - MP_OBJ_ITER_BUF_NSLOTS + 1);
|
||||||
}
|
}
|
||||||
mp_obj_t value = mp_iternext_allow_raise(obj);
|
mp_obj_t value = mp_iternext_allow_raise(obj);
|
||||||
if (value == MP_OBJ_STOP_ITERATION) {
|
if (value == MP_OBJ_STOP_ITERATION) {
|
||||||
|
|
@ -821,7 +821,7 @@ unwind_jump:;
|
||||||
ENTRY(MP_BC_BUILD_TUPLE): {
|
ENTRY(MP_BC_BUILD_TUPLE): {
|
||||||
MARK_EXC_IP_SELECTIVE();
|
MARK_EXC_IP_SELECTIVE();
|
||||||
DECODE_UINT;
|
DECODE_UINT;
|
||||||
sp -= unum - 1;
|
sp = sp - unum + 1;
|
||||||
SET_TOP(mp_obj_new_tuple(unum, sp));
|
SET_TOP(mp_obj_new_tuple(unum, sp));
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
|
@ -829,7 +829,7 @@ unwind_jump:;
|
||||||
ENTRY(MP_BC_BUILD_LIST): {
|
ENTRY(MP_BC_BUILD_LIST): {
|
||||||
MARK_EXC_IP_SELECTIVE();
|
MARK_EXC_IP_SELECTIVE();
|
||||||
DECODE_UINT;
|
DECODE_UINT;
|
||||||
sp -= unum - 1;
|
sp = sp - unum + 1;
|
||||||
SET_TOP(mp_obj_new_list(unum, sp));
|
SET_TOP(mp_obj_new_list(unum, sp));
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,9 @@ void vstr_add_str(vstr_t *vstr, const char *str) {
|
||||||
vstr_add_strn(vstr, str, strlen(str));
|
vstr_add_strn(vstr, str, strlen(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
void vstr_add_strn(vstr_t *vstr, const char *str, size_t len) {
|
// The first parameter is declared as `void*` so that it can be used as a `print_strn` function.
|
||||||
|
void vstr_add_strn(void *vstr_in, const char *str, size_t len) {
|
||||||
|
vstr_t *vstr = vstr_in;
|
||||||
vstr_ensure_extra(vstr, len);
|
vstr_ensure_extra(vstr, len);
|
||||||
memmove(vstr->buf + vstr->len, str, len);
|
memmove(vstr->buf + vstr->len, str, len);
|
||||||
vstr->len += len;
|
vstr->len += len;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue