summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaan <daan@effp.org>2022-10-31 16:17:17 -0700
committerdaan <daan@effp.org>2022-10-31 16:17:17 -0700
commit43ce102425e8bc8ef2d33df4d3308e588f89c59d (patch)
treec37cab999756a032835b0571cb547c1b39473103
parent923ef1ba743310b0e147de3ecb404f6009b78476 (diff)
parent65eb5c65ecbf7ddcc14a0a060585a711abaff52e (diff)
Merge branch 'dev' into dev-slice
-rw-r--r--CMakeLists.txt7
-rw-r--r--src/alloc-posix.c17
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;