@@ -58,32 +58,24 @@ GIT_INLINE(bool) git__add_uint64_overflow(uint64_t *out, uint64_t one, uint64_t
5858#if (__has_builtin (__builtin_add_overflow ) || \
5959 (defined(__GNUC__ ) && (__GNUC__ >= 5 )))
6060
61- /*
62- * Even though __builtin_{add,mul}_overflow should be able to handle all
63- * possible cases (since it can accept any type), under some configurations
64- * clang would need a dependency on compiler-rt. In order to avoid that, we
65- * attempt to choose one of the explicit unsigned long long / unsigned long
66- * versions of the intrinsics if possible. Unfortunately, unsigned long long
67- * and unsigned long are still different types to the compiler, so we need to
68- * still do some additional sniffing to prevent MinGW 64 from choosing the
69- * wrong version and triggering compiler warnings.
70- */
71- # if (SIZE_MAX == ULLONG_MAX ) && (ULONG_MAX == ULLONG_MAX ) && defined(_WIN64 )
72- # define git__add_sizet_overflow (out , one , two ) \
73- __builtin_uaddll_overflow(one, two, out)
74- # define git__multiply_sizet_overflow (out , one , two ) \
75- __builtin_umulll_overflow(one, two, out)
76- # elif (SIZE_MAX == ULONG_MAX ) && (ULONG_MAX == ULLONG_MAX )
77- # define git__add_sizet_overflow (out , one , two ) \
78- __builtin_uaddl_overflow(one, two, out)
79- # define git__multiply_sizet_overflow (out , one , two ) \
80- __builtin_umull_overflow(one, two, out)
81- # else
82- # define git__add_sizet_overflow (out , one , two ) \
83- __builtin_add_overflow(one, two, out)
84- # define git__multiply_sizet_overflow (out , one , two ) \
85- __builtin_mul_overflow(one, two, out)
86- # endif
61+ # if (SIZE_MAX == UINT_MAX )
62+ # define git__add_sizet_overflow (out , one , two ) \
63+ __builtin_uadd_overflow(one, two, out)
64+ # define git__multiply_sizet_overflow (out , one , two ) \
65+ __builtin_umul_overflow(one, two, out)
66+ # elif (SIZE_MAX == ULONG_MAX )
67+ # define git__add_sizet_overflow (out , one , two ) \
68+ __builtin_uaddl_overflow(one, two, out)
69+ # define git__multiply_sizet_overflow (out , one , two ) \
70+ __builtin_umull_overflow(one, two, out)
71+ # elif (SIZE_MAX == ULLONG_MAX )
72+ # define git__add_sizet_overflow (out , one , two ) \
73+ __builtin_uaddll_overflow(one, two, out)
74+ # define git__multiply_sizet_overflow (out , one , two ) \
75+ __builtin_umulll_overflow(one, two, out)
76+ # else
77+ # error compiler has add with overflow intrinsics but SIZE_MAX is unknown
78+ # endif
8779
8880#else
8981
0 commit comments