OSDN Git Service

Don't use macro expressions in another macro
authorCezary Kulakowski <ckulakowski@opera.com>
Thu, 9 Nov 2017 14:37:20 +0000 (15:37 +0100)
committerCezary Kulakowski <ckulakowski@opera.com>
Fri, 10 Nov 2017 09:09:06 +0000 (09:09 +0000)
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>
src/Common/Thread.hpp

index 7b4e0ca..186d1bd 100644 (file)
@@ -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