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);
63 if (UINT64_MAX - a < b) {
81#if defined(__clang__) && \
82 (__clang_major__ > 3 || \
83 (__clang_major__ == 3 && __clang_minor__ > 7))
84 return __builtin_mul_overflow(a, b, res);
85#elif defined(__GNUC__) && __GNUC__ > 4
86 return __builtin_mul_overflow(a, b, res);
89 if (a > 0 && UINT64_MAX / a < b) {