Bug 1390386 - mfbt/ThreadLocal should support pointers-to-const with the pthread impl. - r=froydnj
reinterpret_cast can't convert const T* to void*. Just use c-style casts.
MozReview-Commit-ID: GHtNRRFUsr5
--- a/mfbt/ThreadLocal.h
+++ b/mfbt/ThreadLocal.h
@@ -151,33 +151,32 @@ ThreadLocal<T>::init()
template<typename T>
inline T
ThreadLocal<T>::get() const
{
#ifdef MOZ_HAS_THREAD_LOCAL
return mValue;
#else
MOZ_ASSERT(initialized());
- void* h;
- h = pthread_getspecific(mKey);
- return static_cast<T>(reinterpret_cast<typename Helper<T>::Type>(h));
+ void* h = pthread_getspecific(mKey);
+ return static_cast<T>((typename Helper<T>::Type)h);
#endif
}
template<typename T>
inline void
ThreadLocal<T>::set(const T aValue)
{
#ifdef MOZ_HAS_THREAD_LOCAL
mValue = aValue;
#else
MOZ_ASSERT(initialized());
- void* h = reinterpret_cast<void*>(static_cast<typename Helper<T>::Type>(aValue));
+ void* h = (void*)(static_cast<typename Helper<T>::Type>(aValue));
bool succeeded = !pthread_setspecific(mKey, h);
- if (!succeeded) {
+ if (MOZ_UNLIKELY( !succeeded )) {
MOZ_CRASH();
}
#endif
}
#ifdef MOZ_HAS_THREAD_LOCAL
#if defined(XP_WIN) || defined(MACOSX_HAS_THREAD_LOCAL)
#define MOZ_THREAD_LOCAL(TYPE) thread_local mozilla::detail::ThreadLocal<TYPE>