From 2619181c7f4139af56f2fce340d2b0046b12d552 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 20 Jun 2017 22:46:18 -0700 Subject: ffi: fix broken float put. * ffi.c (ffi_float_put): Fix silly range check: FLT_MIN and FLT_MAX are, of course, both positive. Also, fix num being used as an argument in the error diagnostic. It's the address of a C function, not an object. --- ffi.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ffi.c b/ffi.c index 51d938b9..de71d9a8 100644 --- a/ffi.c +++ b/ffi.c @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -684,8 +685,11 @@ static void ffi_float_put(struct txr_ffi_type *tft, val n, mem_t *dst, val self) break; } - if (v > FLT_MAX || v < FLT_MIN) - uw_throwf(error_s, lit("~a: ~s is out of float range"), self, num, nao); + { + double pv = fabs(v); + if (pv > FLT_MAX || (pv != 0.0 && pv < FLT_MIN)) + uw_throwf(error_s, lit("~a: ~s is out of float range"), self, n, nao); + } align_sw_put(double, dst, *coerce(float *, dst) = v); } -- cgit v1.2.3