patch 8.2.5004: right shift on negative number does not work as documented
Problem: Right shift on negative number does not work as documented.
Solution: Use a uvarnumber_T type cast.
diff --git a/src/eval.c b/src/eval.c
index 0ac2dfb..7f90954 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3091,12 +3091,8 @@
rettv->vval.v_number =
rettv->vval.v_number << var2.vval.v_number;
else
- {
rettv->vval.v_number =
- rettv->vval.v_number >> var2.vval.v_number;
- // clear the topmost sign bit
- rettv->vval.v_number &= ~((uvarnumber_T)1 << MAX_LSHIFT_BITS);
- }
+ (uvarnumber_T)rettv->vval.v_number >> var2.vval.v_number;
}
clear_tv(&var2);