A magic code is found to fix CLang 3.6-3.7 mass test failures for FeldmanHashSet...
authorkhizmax <libcds.dev@gmail.com>
Mon, 15 May 2017 19:53:17 +0000 (22:53 +0300)
committerkhizmax <libcds.dev@gmail.com>
Mon, 15 May 2017 19:53:17 +0000 (22:53 +0300)
cds/urcu/details/gp.h

index 512a0b2b037b6edb13e771d5dab1e774b34fa4dd..fa8cf8a6d95c337dc63f4e9d19fa78c8bc44b752 100644 (file)
@@ -87,6 +87,11 @@ namespace cds { namespace urcu { namespace details {
         uint32_t tmp = pRec->m_nAccessControl.load( atomics::memory_order_relaxed );
         assert( (tmp & rcu_class::c_nNestMask) > 0 );
 
+#if CDS_COMPILER == CDS_COMPILER_CLANG && CDS_COMPILER_VERSION < 30800
+        // CLang 3.6-3.7: some tests of intrusive::FeldmanHashSet based on general-purpose RCU 
+        // are failed even in single-threaded mode (unit tests) without magic compiler barrier below
+        CDS_COMPILER_RW_BARRIER;
+#endif
         pRec->m_nAccessControl.store( tmp - 1, atomics::memory_order_release );
     }