diff options
author | daan <daan@effp.org> | 2022-10-31 16:17:17 -0700 |
---|---|---|
committer | daan <daan@effp.org> | 2022-10-31 16:17:17 -0700 |
commit | 43ce102425e8bc8ef2d33df4d3308e588f89c59d (patch) | |
tree | c37cab999756a032835b0571cb547c1b39473103 | |
parent | 923ef1ba743310b0e147de3ecb404f6009b78476 (diff) | |
parent | 65eb5c65ecbf7ddcc14a0a060585a711abaff52e (diff) |
Merge branch 'dev' into dev-slice
-rw-r--r-- | CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/alloc-posix.c | 17 |
2 files changed, 15 insertions, 9 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b05afe..2550f0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -262,8 +262,11 @@ else() set(pc_libraries "${pc_libraries} -lrt") endif() find_library(MI_LIBATOMIC atomic) - if (MI_LIBATOMIC OR MI_USE_LIBATOMIC) - list(APPEND mi_libraries atomic) + if (NOT MI_LIBATOMIC AND MI_USE_LIBATOMIC) + set(MI_LIBATOMIC atomic) + endif() + if (MI_LIBATOMIC) + list(APPEND mi_libraries ${MI_LIBATOMIC}) set(pc_libraries "${pc_libraries} -latomic") endif() endif() diff --git a/src/alloc-posix.c b/src/alloc-posix.c index e1b4a28..57e15d0 100644 --- a/src/alloc-posix.c +++ b/src/alloc-posix.c @@ -83,13 +83,16 @@ mi_decl_nodiscard mi_decl_restrict void* mi_pvalloc(size_t size) mi_attr_noexcep } mi_decl_nodiscard mi_decl_restrict void* mi_aligned_alloc(size_t alignment, size_t size) mi_attr_noexcept { - if mi_unlikely((size&(alignment-1)) != 0) { // C11 requires alignment>0 && integral multiple, see <https://en.cppreference.com/w/c/memory/aligned_alloc> - #if MI_DEBUG > 0 - _mi_error_message(EOVERFLOW, "(mi_)aligned_alloc requires the size to be an integral multiple of the alignment (size %zu, alignment %zu)\n", size, alignment); - #endif - return NULL; - } - // C11 also requires alignment to be a power-of-two which is checked in mi_malloc_aligned + // C11 requires the size to be an integral multiple of the alignment, see <https://en.cppreference.com/w/c/memory/aligned_alloc>. + // unfortunately, it turns out quite some programs pass a size that is not an integral multiple so skip this check.. + /* if mi_unlikely((size & (alignment - 1)) != 0) { // C11 requires alignment>0 && integral multiple, see <https://en.cppreference.com/w/c/memory/aligned_alloc> + #if MI_DEBUG > 0 + _mi_error_message(EOVERFLOW, "(mi_)aligned_alloc requires the size to be an integral multiple of the alignment (size %zu, alignment %zu)\n", size, alignment); + #endif + return NULL; + } + */ + // C11 also requires alignment to be a power-of-two (and > 0) which is checked in mi_malloc_aligned void* p = mi_malloc_aligned(size, alignment); mi_assert_internal(((uintptr_t)p % alignment) == 0); return p; |