From 96265969ecef962c67d201434cdfb21c2fcf0c25 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 5 Jun 2017 19:21:44 -0700 Subject: itypes: avoid out of range literal. * itypes.c (c_i32): Avoid the troublesome expressions -0x80000000. Instead, cast 0x7FFFFFFF to the cnum type, then invert, and subtract one. (c_i64): Similarly for -0x8000000000000000. --- itypes.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/itypes.c b/itypes.c index 0fbfd351..51982e66 100644 --- a/itypes.c +++ b/itypes.c @@ -81,7 +81,7 @@ u16_t c_u16(val n, val self) i32_t c_i32(val n, val self) { cnum v = c_num(n); - if (v < (cnum) -0x80000000 || v > (cnum) 0x7FFFFFFF) + if (v < (- (cnum) 0x7FFFFFFF - 1) || v > (cnum) 0x7FFFFFFF) uw_throwf(error_s, lit("~a: value ~s is out of signed 32 bit range"), self, n, nao); return v; @@ -102,7 +102,7 @@ u32_t c_u32(val n, val self) i64_t c_i64(val n, val self) { cnum v = c_num(n); - if (v < (cnum) -0x8000000000000000 || v > (cnum) 0x7FFFFFFFFFFFFFFF) + if (v < (- (cnum) 0x7FFFFFFFFFFFFFFF - 1) || v > (cnum) 0x7FFFFFFFFFFFFFFF) uw_throwf(error_s, lit("~a: value ~s is out of signed 64 bit range"), self, n, nao); return v; -- cgit v1.2.3