diff --git a/libcxxabi/src/cxa_guard_impl.h b/libcxxabi/src/cxa_guard_impl.h --- a/libcxxabi/src/cxa_guard_impl.h +++ b/libcxxabi/src/cxa_guard_impl.h @@ -156,8 +156,6 @@ constexpr uint32_t (*PlatformThreadID)() = nullptr; #endif -constexpr bool PlatformSupportsThreadID() { return +PlatformThreadID != nullptr; } - //===----------------------------------------------------------------------===// // GuardBase //===----------------------------------------------------------------------===// @@ -289,7 +287,7 @@ using BaseT::BaseT; explicit InitByteGlobalMutex(uint32_t* g) : BaseT(g), has_thread_id_support(false) {} - explicit InitByteGlobalMutex(uint64_t* g) : BaseT(g), has_thread_id_support(PlatformSupportsThreadID()) {} + explicit InitByteGlobalMutex(uint64_t* g) : BaseT(g), has_thread_id_support(GetThreadID != nullptr) {} public: AcquireResult acquire_init_byte() { @@ -404,12 +402,14 @@ /// ARM Constructor explicit InitByteFutex(uint32_t* g) - : BaseT(g), init_byte(this->init_byte_address), has_thread_id_support(this->thread_id_address && GetThreadIDArg), + : BaseT(g), init_byte(this->init_byte_address), + has_thread_id_support(this->thread_id_address && GetThreadIDArg != nullptr), thread_id(this->thread_id_address) {} /// Itanium Constructor explicit InitByteFutex(uint64_t* g) - : BaseT(g), init_byte(this->init_byte_address), has_thread_id_support(this->thread_id_address && GetThreadIDArg), + : BaseT(g), init_byte(this->init_byte_address), + has_thread_id_support(this->thread_id_address && GetThreadIDArg != nullptr), thread_id(this->thread_id_address) {} public: diff --git a/libcxxabi/test/guard_test_basic.pass.cpp b/libcxxabi/test/guard_test_basic.pass.cpp --- a/libcxxabi/test/guard_test_basic.pass.cpp +++ b/libcxxabi/test/guard_test_basic.pass.cpp @@ -12,9 +12,10 @@ #include "../src/cxa_guard_impl.h" #include -// Disable GCC warning about tautological comparison of a function's address -#if defined(__GNUC__) && !defined(__clang__) -# pragma GCC diagnostic ignored "-Waddress" +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wtautological-pointer-compare" +#elif defined(__GNUC__) +# pragma GCC diagnostic ignored "-Waddress" #endif using namespace __cxxabiv1; @@ -135,7 +136,7 @@ #if (defined(__APPLE__) || defined(__linux__)) && !defined(_LIBCXXABI_HAS_NO_THREADS) assert(PlatformThreadID); #endif - if (PlatformSupportsThreadID()) { + if (PlatformThreadID != nullptr) { assert(PlatformThreadID() != 0); assert(PlatformThreadID() == PlatformThreadID()); }