From d8c119cc4fb1e717261a3f3a875ffeddf5528462 Mon Sep 17 00:00:00 2001 From: Daan Leijen Date: Sun, 9 Feb 2025 08:56:22 -0800 Subject: [PATCH] add mi_decl_maybe_unused; fix compilation with OPT_SIMD (issue #1009) --- ide/vs2022/mimalloc-lib.vcxproj | 8 +++++++ ide/vs2022/mimalloc-override-dll.vcxproj | 8 +++++++ include/mimalloc/internal.h | 27 ++++++++++++++++-------- src/bitmap.c | 19 ++++++----------- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/ide/vs2022/mimalloc-lib.vcxproj b/ide/vs2022/mimalloc-lib.vcxproj index b0547769..035adf8d 100644 --- a/ide/vs2022/mimalloc-lib.vcxproj +++ b/ide/vs2022/mimalloc-lib.vcxproj @@ -178,6 +178,7 @@ CompileAsCpp false stdcpp20 + /Zc:__cplusplus %(AdditionalOptions) @@ -197,6 +198,7 @@ CompileAsCpp false stdcpp20 + /Zc:__cplusplus %(AdditionalOptions) @@ -224,6 +226,7 @@ CompileAsCpp false stdcpp20 + /Zc:__cplusplus %(AdditionalOptions) @@ -251,6 +254,7 @@ CompileAsCpp false stdcpp20 + /Zc:__cplusplus %(AdditionalOptions) @@ -283,6 +287,7 @@ CompileAsCpp true stdcpp20 + /Zc:__cplusplus %(AdditionalOptions) true @@ -312,6 +317,7 @@ true stdcpp20 AdvancedVectorExtensions2 + /Zc:__cplusplus %(AdditionalOptions) true @@ -348,6 +354,7 @@ stdcpp20 CPUExtensionRequirementsARMv81 Sync + /Zc:__cplusplus %(AdditionalOptions) true @@ -384,6 +391,7 @@ stdcpp20 CPUExtensionRequirementsARMv81 Sync + /Zc:__cplusplus %(AdditionalOptions) true diff --git a/ide/vs2022/mimalloc-override-dll.vcxproj b/ide/vs2022/mimalloc-override-dll.vcxproj index be69716f..3c2ef98f 100644 --- a/ide/vs2022/mimalloc-override-dll.vcxproj +++ b/ide/vs2022/mimalloc-override-dll.vcxproj @@ -174,6 +174,7 @@ MultiThreadedDebugDLL false CompileAsCpp + /Zc:__cplusplus %(AdditionalOptions) $(ProjectDir)\..\..\bin\mimalloc-redirect32.lib;%(AdditionalDependencies) @@ -204,6 +205,7 @@ MultiThreadedDebugDLL false CompileAsCpp + /Zc:__cplusplus %(AdditionalOptions) $(ProjectDir)\..\..\bin\mimalloc-redirect.lib;%(AdditionalDependencies) @@ -234,6 +236,7 @@ MultiThreadedDebugDLL false CompileAsCpp + /Zc:__cplusplus %(AdditionalOptions) $(ProjectDir)\..\..\bin\mimalloc-redirect-arm64.lib;%(AdditionalDependencies) @@ -264,6 +267,7 @@ MultiThreadedDebugDLL false CompileAsCpp + /Zc:__cplusplus %(AdditionalOptions) $(ProjectDir)\..\..\bin\mimalloc-redirect-arm64ec.lib;%(AdditionalDependencies) @@ -298,6 +302,7 @@ MultiThreadedDLL CompileAsCpp false + /Zc:__cplusplus %(AdditionalOptions) true @@ -332,6 +337,7 @@ MultiThreadedDLL CompileAsCpp false + /Zc:__cplusplus %(AdditionalOptions) true @@ -367,6 +373,7 @@ CompileAsCpp false CPUExtensionRequirementsARMv81 + /Zc:__cplusplus %(AdditionalOptions) true @@ -402,6 +409,7 @@ CompileAsCpp false CPUExtensionRequirementsARMv81 + /Zc:__cplusplus %(AdditionalOptions) true diff --git a/include/mimalloc/internal.h b/include/mimalloc/internal.h index 151c81a3..a76f7baf 100644 --- a/include/mimalloc/internal.h +++ b/include/mimalloc/internal.h @@ -18,11 +18,7 @@ terms of the MIT license. A copy of the license can be found in the file #include "track.h" #include "bits.h" -#if (MI_DEBUG>0) -#define mi_trace_message(...) _mi_trace_message(__VA_ARGS__) -#else -#define mi_trace_message(...) -#endif +#define mi_decl_cache_align mi_decl_align(64) #if defined(_MSC_VER) #pragma warning(disable:4127) // suppress constant conditional warning (due to MI_SECURE paths) @@ -52,19 +48,32 @@ terms of the MIT license. A copy of the license can be found in the file #define mi_decl_hidden #endif -#define mi_decl_cache_align mi_decl_align(64) +#if (defined(__GNUC__) && (__GNUC__ >= 7)) || defined(__clang__) // includes clang and icc +#define mi_decl_maybe_unused __attribute__((unused)) +#elif __cplusplus >= 201703L // c++17 +#define mi_decl_maybe_unused [[maybe_unused]] +#else +#define mi_decl_maybe_unused +#endif + +#if defined(__cplusplus) +#define mi_decl_externc extern "C" +#else +#define mi_decl_externc +#endif #if defined(__EMSCRIPTEN__) && !defined(__wasi__) #define __wasi__ #endif -#if defined(__cplusplus) -#define mi_decl_externc extern "C" +#if (MI_DEBUG>0) +#define mi_trace_message(...) _mi_trace_message(__VA_ARGS__) #else -#define mi_decl_externc +#define mi_trace_message(...) #endif + // "libc.c" #include int _mi_vsnprintf(char* buf, size_t bufsize, const char* fmt, va_list args); diff --git a/src/bitmap.c b/src/bitmap.c index f3030153..6214980b 100644 --- a/src/bitmap.c +++ b/src/bitmap.c @@ -184,26 +184,23 @@ static inline bool mi_bfield_atomic_try_clear_mask(_Atomic(mi_bfield_t)* b, mi_b return mi_bfield_atomic_try_clear_mask_of(b, mask, expect, all_clear); } -/* // Tries to clear a bit atomically. Returns `true` if the bit transitioned from 1 to 0 // and `false` otherwise leaving the bfield `b` as-is. // `all_clear` is set to true if the new bfield became zero (and false otherwise) -static inline bool mi_bfield_atomic_try_clear(_Atomic(mi_bfield_t)* b, size_t idx, bool* all_clear) { +mi_decl_maybe_unused static inline bool mi_bfield_atomic_try_clear(_Atomic(mi_bfield_t)* b, size_t idx, bool* all_clear) { mi_assert_internal(idx < MI_BFIELD_BITS); const mi_bfield_t mask = mi_bfield_one()<bfields[chunk_idx]); // has_set8 has low bit in each byte set if the byte in x == 0xFF const mi_bfield_t has_set8 = @@ -663,7 +659,6 @@ static inline bool mi_bchunk_try_find_and_clear8_at(mi_bchunk_t* chunk, size_t c } return false; } -#endif // find least aligned byte in a chunk with all bits set, and try unset it atomically // set `*pidx` to its bit index (0 <= *pidx < MI_BCHUNK_BITS) on success.