From 7ebf21e004094485aea025f877f077c161c76f1b Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 24 Apr 2013 14:45:36 -0700 Subject: 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 --- src/corelib/global/qcompilerdetection.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/corelib') diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index 9b609f76d0..548eebd3ad 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -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 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 -- cgit v1.2.3