Commit cac0bcf3 authored by Rahix's avatar Rahix
Browse files

Merge 'faulty unsigned comparisons'

Fix faulty error handling due to always-false unsigned comparisons.
`-Wtype-limits` revealed three errors in the firmware:

    ../pycardium/modules/sys_leds.c: In function 'mp_leds_get_rocket':
    ../pycardium/modules/sys_leds.c:207:10: warning: comparison is
                always false due to limited range of data type [-Wtype-limits]
      207 |  if (ret == -EINVAL) {
          |          ^~


    ../pycardium/mphalport.c: In function 'mp_hal_set_interrupt_char':
    ../pycardium/mphalport.c:115:8: warning: comparison is always true
                due to limited range of data type [-Wtype-limits]
      115 |  if (c != -1) {
          |        ^~

    ../epicardium/modules/bhi.c: In function 'epic_bhi160_enable_sensor':
    ../epicardium/modules/bhi.c:134:12: warning: comparison is always
                false due to limited range of data type [-Wtype-limits]
      134 |  if (vs_id < 0) {
          |            ^
    ../epicardium/modules/bhi.c: In function 'epic_bhi160_disable_sensor':
    ../epicardium/modules/bhi.c:191:12: warning: comparison is always
                false due to limited range of data type [-Wtype-limits]
      191 |  if (vs_id < 0) {
          |            ^

Note that on the target platform `char` and `enum`s are unsigned.  The
compiler has probably removed all of these `if`s so far because the
conditions were determined to always be false.

See merge request card10/firmware!357
parents 87bccda8 d189f48e
......@@ -131,7 +131,7 @@ int epic_bhi160_enable_sensor(
int result = 0;
bhy_virtual_sensor_t vs_id = bhi160_lookup_vs_id(sensor_type);
if (vs_id < 0) {
if (vs_id == (bhy_virtual_sensor_t)-1) {
return -ENODEV;
}
......@@ -188,7 +188,7 @@ int epic_bhi160_disable_sensor(enum bhi160_sensor_type sensor_type)
int result = 0;
bhy_virtual_sensor_t vs_id = bhi160_lookup_vs_id(sensor_type);
if (vs_id < 0) {
if (vs_id == (bhy_virtual_sensor_t)-1) {
return -ENODEV;
}
......
......@@ -202,8 +202,8 @@ static MP_DEFINE_CONST_FUN_OBJ_2(leds_set_rocket_obj, mp_leds_set_rocket);
static mp_obj_t mp_leds_get_rocket(mp_obj_t led_in)
{
int led = mp_obj_get_int(led_in);
uint8_t ret = epic_leds_get_rocket(led);
int led = mp_obj_get_int(led_in);
int ret = epic_leds_get_rocket(led);
if (ret == -EINVAL) {
mp_raise_ValueError(
"invalid value: maybe the led does not exists"
......
......@@ -112,7 +112,7 @@ void epic_isr_ctrl_c(void)
void mp_hal_set_interrupt_char(char c)
{
if (c != -1) {
if (c != '\xFF') {
mp_obj_exception_clear_traceback(
MP_OBJ_FROM_PTR(&MP_STATE_VM(mp_kbd_exception))
);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment