summaryrefslogtreecommitdiff
path: root/include/mimalloc-internal.h
diff options
context:
space:
mode:
authordaan <daanl@outlook.com>2020-07-21 18:51:25 -0700
committerdaan <daanl@outlook.com>2020-07-21 18:51:25 -0700
commitc5406f327e3742b24e451da36b651b8400ea19da (patch)
tree4f3903549ba9abbcdca846e2f358ed7a0dd275b6 /include/mimalloc-internal.h
parent532447fb33ab1b2ef942ede0cbcd832fe184b37e (diff)
move include 'limits.h' outside of definition
Diffstat (limited to 'include/mimalloc-internal.h')
-rw-r--r--include/mimalloc-internal.h27
1 files changed, 14 insertions, 13 deletions
diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h
index c0a084c..ba322fe 100644
--- a/include/mimalloc-internal.h
+++ b/include/mimalloc-internal.h
@@ -238,27 +238,28 @@ static inline bool mi_malloc_satisfies_alignment(size_t alignment, size_t size)
}
// Overflow detecting multiply
-static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) {
#if __has_builtin(__builtin_umul_overflow) || __GNUC__ >= 5
-#include <limits.h> // UINT_MAX, ULONG_MAX
-#if defined(_CLOCK_T)
+#include <limits.h> // UINT_MAX, ULONG_MAX
+#if defined(_CLOCK_T) // for Illumos
#undef _CLOCK_T
#endif
-
-#if (SIZE_MAX == UINT_MAX)
- return __builtin_umul_overflow(count, size, total);
-#elif (SIZE_MAX == ULONG_MAX)
- return __builtin_umull_overflow(count, size, total);
-#else
- return __builtin_umulll_overflow(count, size, total);
-#endif
+static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) {
+ #if (SIZE_MAX == UINT_MAX)
+ return __builtin_umul_overflow(count, size, total);
+ #elif (SIZE_MAX == ULONG_MAX)
+ return __builtin_umull_overflow(count, size, total);
+ #else
+ return __builtin_umulll_overflow(count, size, total);
+ #endif
+}
#else /* __builtin_umul_overflow is unavailable */
+static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) {
#define MI_MUL_NO_OVERFLOW ((size_t)1 << (4*sizeof(size_t))) // sqrt(SIZE_MAX)
*total = count * size;
return ((size >= MI_MUL_NO_OVERFLOW || count >= MI_MUL_NO_OVERFLOW)
- && size > 0 && (SIZE_MAX / size) < count);
-#endif
+ && size > 0 && (SIZE_MAX / size) < count);
}
+#endif
// Safe multiply `count*size` into `total`; return `true` on overflow.
static inline bool mi_count_size_overflow(size_t count, size_t size, size_t* total) {