From 8d2a9bcf1d22c3e48ff9dc7d8aaac9d4fcac0c64 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 2 Dec 2013 19:22:57 -0800 Subject: Ensure that the pointer-sized QAtomicInteger specialization exists This is already implemented in qatomic_x86.h, qatomic_ia64.h, qatomic_mips.h, qatomic_armv6.h, and qatomic_cxx11.h. For qatomic_msvc.h, we've just fixed it. For qatomic_gcc.h, we know that the compiler supports it, so just add it. According to the GCC manual, it might print a warning on some platforms, so we only enable that on 64-bit builds. For qatomic_unix.h, the support was missing (along with support for unsigned 32-bit), so this commits adds it. For qatomic_armv5.h, the platform does not always support 64-bit atomics, but ARMv5 cannot compile in 64-bit mode anyway. Change-Id: Ia8b3b5c641f11e5df05937fe7442be0a223174ef Reviewed-by: Lars Knoll --- src/corelib/thread/qatomic.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/corelib/thread') diff --git a/src/corelib/thread/qatomic.cpp b/src/corelib/thread/qatomic.cpp index f70b58d25b..36cdfdb369 100644 --- a/src/corelib/thread/qatomic.cpp +++ b/src/corelib/thread/qatomic.cpp @@ -72,9 +72,10 @@ \li 32-bit: int, unsigned int, qint32, quint32, char32_t (C++11) \li 64-bit: long long, unsigned long long, qint64, quint64 \li platform-specific size: long, unsigned long + \li pointer size: qintptr, quintptr, qptrdiff \endlist - Of the list above, only the 32-bit-sized instantiations are guaranteed to + Of the list above, only the 32-bit- and pointer-sized instantiations are guaranteed to work on all platforms. Support for other sizes depends on the compiler and processor architecture the code is being compiled for. To test whether the other types are supported, check the macro \c Q_ATOMIC_INT\e{nn}_IS_SUPPORTED, @@ -1213,3 +1214,16 @@ #ifndef Q_ATOMIC_INT32_IS_SUPPORTED # error "Q_ATOMIC_INT32_IS_SUPPORTED must be defined" #endif +#if !defined(Q_ATOMIC_INT64_IS_SUPPORTED) && QT_POINTER_SIZE == 8 +// 64-bit platform +# error "Q_ATOMIC_INT64_IS_SUPPORTED must be defined on a 64-bit platform" +#endif + +QT_BEGIN_NAMESPACE + +// The following three specializations must always be defined +Q_STATIC_ASSERT(sizeof(QAtomicInteger)); +Q_STATIC_ASSERT(sizeof(QAtomicInteger)); +Q_STATIC_ASSERT(sizeof(QAtomicInteger)); + +QT_END_NAMESPACE -- cgit v1.2.3