patch 8.0.0219: ubsan reports errors for overflow
Problem: Ubsan reports errors for integer overflow.
Solution: Define macros for minimum and maximum values. Select an
expression based on the value. (Mike Williams)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index da22354..9ebd2df 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3304,21 +3304,12 @@
if (get_float_arg(argvars, &f) == OK)
{
-# ifdef FEAT_NUM64
- if (f < -0x7fffffffffffffffLL)
- rettv->vval.v_number = -0x7fffffffffffffffLL;
- else if (f > 0x7fffffffffffffffLL)
- rettv->vval.v_number = 0x7fffffffffffffffLL;
+ if (f < -VARNUM_MAX)
+ rettv->vval.v_number = -VARNUM_MAX;
+ else if (f > VARNUM_MAX)
+ rettv->vval.v_number = VARNUM_MAX;
else
rettv->vval.v_number = (varnumber_T)f;
-# else
- if (f < -0x7fffffff)
- rettv->vval.v_number = -0x7fffffff;
- else if (f > 0x7fffffff)
- rettv->vval.v_number = 0x7fffffff;
- else
- rettv->vval.v_number = (varnumber_T)f;
-# endif
}
}