fix unsafe use of FLINT_ABS for slong -> ulong conversion in arf.h

This commit is contained in:
Fredrik Johansson 2016-10-28 21:44:12 +02:00
parent 5279dab384
commit 2a11da1c15

9
arf.h
View file

@ -433,10 +433,13 @@ arf_init_set_ui(arf_t x, ulong v)
}
}
/* FLINT_ABS is unsafe for x = WORD_MIN */
#define UI_ABS_SI(x) (((slong)(x) < 0) ? (-(ulong)(x)) : ((ulong)(x)))
ARF_INLINE void
arf_init_set_si(arf_t x, slong v)
{
arf_init_set_ui(x, FLINT_ABS(v));
arf_init_set_ui(x, UI_ABS_SI(v));
if (v < 0)
ARF_NEG(x);
}
@ -465,7 +468,7 @@ arf_set_ui(arf_t x, ulong v)
ARF_INLINE void
arf_set_si(arf_t x, slong v)
{
arf_set_ui(x, FLINT_ABS(v));
arf_set_ui(x, UI_ABS_SI(v));
if (v < 0)
ARF_NEG(x);
}
@ -556,7 +559,7 @@ arf_set_round_ui(arf_t x, ulong v, slong prec, arf_rnd_t rnd)
ARF_INLINE int
arf_set_round_si(arf_t x, slong v, slong prec, arf_rnd_t rnd)
{
return _arf_set_round_ui(x, FLINT_ABS(v), v < 0, prec, rnd);
return _arf_set_round_ui(x, UI_ABS_SI(v), v < 0, prec, rnd);
}
ARF_INLINE int