28 return __builtin_sadd_overflow(a, b, res);
29#elif defined(__GNUC__) && __GNUC__ > 4
30 return __builtin_sadd_overflow(a, b, res);
33 if (a > 0 && INT_MAX - a < b) {
36 if (a < 0 && INT_MIN - a > b) {
52 if (b > 0 && INT_MAX - b < a) {
57 if (b < 0 && INT_MIN - b > a) {
75 return __builtin_add_overflow(a, b, res);
76#elif defined(__GNUC__) && __GNUC__ > 4
77 return __builtin_add_overflow(a, b, res);
99 return __builtin_add_overflow(a, b, res);
100#elif defined(__GNUC__) && __GNUC__ > 4
101 return __builtin_add_overflow(a, b, res);
104 if (UINT64_MAX - a < b) {
122#if defined(__clang__)
123 return __builtin_mul_overflow(a, b, res);
124#elif defined(__GNUC__) && __GNUC__ > 4
125 return __builtin_mul_overflow(a, b, res);
128 if (a > 0 && UINT64_MAX / a < b) {
145 const double r = n / d;
165 const float r = n / d;
static int sadd_saturate(int a, int b)
static bool fdivf_overflow(float n, float d, float *res)
static bool fdiv_overflow(double n, double d, double *res)
static bool size_overflow(size_t a, size_t b, size_t *res)
static bool sadd_overflow(int a, int b, int *res)
static bool u64mul_overflow(uint64_t a, uint64_t b, uint64_t *res)
static bool u64add_overflow(uint64_t a, uint64_t b, uint64_t *res)