Splits deque take & steal into 2 test caess
[libcds.git] / cds / compiler / clang / defs.h
index 49723b2b89c92fbd94a1c2125e8c8a25f88f0667..8144de3f02f055a2480bf37238b8f02a5bdfe343 100644 (file)
 #ifndef CDSLIB_COMPILER_CLANG_DEFS_H
 #define CDSLIB_COMPILER_CLANG_DEFS_H
 
-/*
-    Known issues:
-        Error compiling 64bit boost.atomic on clang 3.4 - 3.5, see https://svn.boost.org/trac/boost/ticket/9610
-        Solution: use boost 1.56 +
-*/
-
 // Compiler version
 #define CDS_COMPILER_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
 
@@ -44,8 +38,8 @@
 #define  CDS_COMPILER__NAME    ("clang " __clang_version__)
 #define  CDS_COMPILER__NICK    "clang"
 
-#if CDS_COMPILER_VERSION < 30300
-#   error "Compiler version error. Clang version 3.3.0 and above is supported"
+#if CDS_COMPILER_VERSION < 30600
+#   error "Compiler version error. Clang version 3.6.0 and above is supported"
 #endif
 
 #if defined(_LIBCPP_VERSION) && !defined(CDS_USE_BOOST_ATOMIC) && CDS_COMPILER_VERSION < 30700
 // *************************************************
 // Features
 #if defined(__has_feature) && __has_feature(thread_sanitizer)
-#   define CDS_THREAD_SANITIZER_ENABLED
+#   ifndef CDS_THREAD_SANITIZER_ENABLED
+#       define CDS_THREAD_SANITIZER_ENABLED
+#   endif
 #endif
 
 #if defined(__has_feature) && __has_feature(address_sanitizer)
 
 
 // double-width CAS support - only for libc++
+// You can manually suppress wide-atomic support by defining in compiler command line:
+//  for 64bit platform: -DCDS_DISABLE_128BIT_ATOMIC
+//  for 32bit platform: -DCDS_DISABLE_64BIT_ATOMIC
 #ifdef _LIBCPP_VERSION
 #   if CDS_BUILD_BITS == 64
-#       ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
+#       if !defined( CDS_DISABLE_128BIT_ATOMIC ) && defined( __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 )
 #           define CDS_DCAS_SUPPORT
 #       endif
 #   else
-#       ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
+#       if !defined( CDS_DISABLE_64BIT_ATOMIC ) && defined( __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 )
 #           define CDS_DCAS_SUPPORT
 #       endif
 #   endif