26#if defined(__clang__) && \
27 (__clang_major__ > 3 || \
28 (__clang_major__ == 3 && __clang_minor__ > 7))
29 return __builtin_sadd_overflow(a, b, res);
30#elif defined(__GNUC__) && __GNUC__ > 4
31 return __builtin_sadd_overflow(a, b, res);
34 if (a > 0 && INT_MAX - a < b) {
37 if (a < 0 && INT_MIN - a > b) {
55#if defined(__clang__) && \
56 (__clang_major__ > 3 || \
57 (__clang_major__ == 3 && __clang_minor__ > 7))
58 return __builtin_add_overflow(a, b, res);
59#elif defined(__GNUC__) && __GNUC__ > 4
60 return __builtin_add_overflow(a, b, res);
81#if defined(__clang__) && \
82 (__clang_major__ > 3 || \
83 (__clang_major__ == 3 && __clang_minor__ > 7))
84 return __builtin_add_overflow(a, b, res);
85#elif defined(__GNUC__) && __GNUC__ > 4
86 return __builtin_add_overflow(a, b, res);
89 if (UINT64_MAX - a < b) {
107#if defined(__clang__) && \
108 (__clang_major__ > 3 || \
109 (__clang_major__ == 3 && __clang_minor__ > 7))
110 return __builtin_mul_overflow(a, b, res);
111#elif defined(__GNUC__) && __GNUC__ > 4
112 return __builtin_mul_overflow(a, b, res);
115 if (a > 0 && UINT64_MAX / a < b) {
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)