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/vim9expr.c b/src/vim9expr.c
index c84be87..3e720d9 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -2719,11 +2719,8 @@
else if (type == EXPR_LSHIFT)
tv1->vval.v_number = tv1->vval.v_number << tv2->vval.v_number;
else
- {
- tv1->vval.v_number = tv1->vval.v_number >> tv2->vval.v_number;
- // clear the topmost sign bit
- tv1->vval.v_number &= ~((uvarnumber_T)1 << MAX_LSHIFT_BITS);
- }
+ tv1->vval.v_number =
+ (uvarnumber_T)tv1->vval.v_number >> tv2->vval.v_number;
clear_tv(tv2);
--ppconst->pp_used;
}