Don't use macro expressions in another macro We use icecc to speed up compilation in our project. After this change https://swiftshader-review.googlesource.com/12308 chromium doesn't compile via icecc as __has_include(<atomic>) is never expanded to 0 or 1 on icecc host and file <atomic> is not being included. My guess is that icecc host gets partially expanded code and it's not being passed by preprocessor again so condition #if __has_include(<atomic>) (expanded from #if USE_STD_ATOMIC) is never fulfilled. Bug: chromium:783135 Change-Id: I09cf120c399a794a15dec05d6edd74c7848fc53a Reviewed-on: https://swiftshader-review.googlesource.com/13588 Reviewed-by: Nicolas Capens <nicolascapens@google.com> Tested-by: Cezary Kulakowski <ckulakowski@opera.com>
diff --git a/src/Common/Thread.hpp b/src/Common/Thread.hpp index 7b4e0ca..186d1bd 100644 --- a/src/Common/Thread.hpp +++ b/src/Common/Thread.hpp
@@ -31,7 +31,9 @@ #include <stdlib.h> #if defined(__clang__) -#define USE_STD_ATOMIC __has_include(<atomic>) // clang has an explicit check for the availability of atomic +#if __has_include(<atomic>) // clang has an explicit check for the availability of atomic +#define USE_STD_ATOMIC 1 +#endif // atomic is available in C++11 or newer, and in Visual Studio 2012 or newer #elif (defined(_MSC_VER) && (_MSC_VER >= 1700)) || (__cplusplus >= 201103L) #define USE_STD_ATOMIC 1