Though we will no longer be comparing exactly against INT64_MAX, this is ok
because any value of that magnitude stored in a double will *also* have been
rounded up, so the comparison will work appropriately.
case json_type_int:
return jso->o.c_int64;
case json_type_double:
- if (jso->o.c_double >= INT64_MAX)
+ // INT64_MAX can't be exactly represented as a double
+ // so cast to tell the compiler it's ok to round up.
+ if (jso->o.c_double >= (double)INT64_MAX)
return INT64_MAX;
if (jso->o.c_double <= INT64_MIN)
return INT64_MIN;