py: Fix bug with right-shifting small ints by large amounts.
Undefined behavior in C, needs explicit check.
diff --git a/py/runtime.c b/py/runtime.c
index f6f34be..e225ba8 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -337,6 +337,11 @@
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "negative shift count"));
} else {
// standard precision is enough for right-shift
+ if (rhs_val >= BITS_PER_WORD) {
+ // Shifting to big amounts is underfined behavior
+ // in C and is CPU-dependent; propagate sign bit.
+ rhs_val = BITS_PER_WORD - 1;
+ }
lhs_val >>= rhs_val;
}
break;