Defer enabling std::atomic on GCC until GCC 4.7
The implementation that GCC came with from 4.4 to 4.6 used external locks for most platforms, other than x86. It's unsuitable to be called "atomic" at all. More importantly, it's not behaviour-compatible with Qt's own QBasicAtomic classes. Change-Id: I92a0beab58504e6bd7cd236d358fef905c69821c Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
parent
ea461b7800
commit
7ebf21e004
@ -618,7 +618,6 @@
|
||||
# endif
|
||||
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404
|
||||
/* C++11 features supported in GCC 4.4: */
|
||||
# define Q_COMPILER_ATOMICS
|
||||
# define Q_COMPILER_AUTO_FUNCTION
|
||||
# define Q_COMPILER_AUTO_TYPE
|
||||
# define Q_COMPILER_CLASS_ENUM
|
||||
@ -642,6 +641,11 @@
|
||||
# define Q_COMPILER_RANGE_FOR
|
||||
# endif
|
||||
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407
|
||||
/* GCC 4.4 implemented <atomic> and std::atomic using its old intrinsics.
|
||||
* However, the implementation is incomplete for most platforms until GCC 4.7:
|
||||
* instead, std::atomic would use an external lock. Since we need an std::atomic
|
||||
* that is behavior-compatible with QBasicAtomic, we only enable it here */
|
||||
# define Q_COMPILER_ATOMICS
|
||||
/* GCC 4.6.x has problems dealing with noexcept expressions,
|
||||
* so turn the feature on for 4.7 and above, only */
|
||||
# define Q_COMPILER_NOEXCEPT
|
||||
|
Loading…
Reference in New Issue
Block a user