Problem: Asan warns for undefined behavior.
Solution: Cast the shifted value to unsigned.
rettv->vval.v_number = 0;
else if (type == EXPR_LSHIFT)
rettv->vval.v_number =
- rettv->vval.v_number << var2.vval.v_number;
+ (uvarnumber_T)rettv->vval.v_number << var2.vval.v_number;
else
rettv->vval.v_number =
(uvarnumber_T)rettv->vval.v_number >> var2.vval.v_number;
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 5006,
/**/
5005,
/**/
case EXPR_LSHIFT: if (arg2 > MAX_LSHIFT_BITS)
res = 0;
else
- res = arg1 << arg2;
+ res = (uvarnumber_T)arg1 << arg2;
break;
case EXPR_RSHIFT: if (arg2 > MAX_LSHIFT_BITS)
res = 0;
if (tv2->vval.v_number > MAX_LSHIFT_BITS)
tv1->vval.v_number = 0;
else if (type == EXPR_LSHIFT)
- tv1->vval.v_number = tv1->vval.v_number << tv2->vval.v_number;
+ tv1->vval.v_number =
+ (uvarnumber_T)tv1->vval.v_number << tv2->vval.v_number;
else
tv1->vval.v_number =
(uvarnumber_T)tv1->vval.v_number >> tv2->vval.v_number;