Added TSan annotation
[libcds.git] / cds / compiler / feature_tsan.h
index 926876adc8741ebbe19800ddded0d50487116b47..f870ab584fac02c347a670123261fdaa847991a4 100644 (file)
@@ -6,9 +6,11 @@
 // Thread Sanitizer annotations.
 // From https://groups.google.com/d/msg/thread-sanitizer/SsrHB7FTnTk/mNTGNLQj-9cJ
 
+//@cond
+
 #ifdef CDS_THREAD_SANITIZER_ENABLED
-#   define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr)   AnnotateHappensBefore(__FILE__, __LINE__, (void*)(addr))\r
-#   define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr)    AnnotateHappensAfter(__FILE__, __LINE__, (void*)(addr))\r
+#   define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr)   AnnotateHappensBefore(__FILE__, __LINE__, reinterpret_cast<void*>(addr))\r
+#   define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr)    AnnotateHappensAfter(__FILE__, __LINE__, reinterpret_cast<void*>(addr))\r
 \r
 #   define CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN     AnnotateIgnoreReadsBegin(__FILE__, __LINE__)\r
 #   define CDS_TSAN_ANNOTATE_IGNORE_READS_END       AnnotateIgnoreReadsEnd(__FILE__, __LINE__)\r
@@ -20,6 +22,7 @@
 #   define CDS_TSAN_ANNOTATE_IGNORE_RW_END          \\r
                                                     CDS_TSAN_ANNOTATE_IGNORE_WRITES_END;\\r
                                                     CDS_TSAN_ANNOTATE_IGNORE_READS_END\r
+#   define CDS_TSAN_ANNOTATE_NEW_MEMORY( addr, sz ) AnnotateNewMemory( __FILE__, __LINE__, addr, sz )\r
 \r
     // provided by TSan\r
     extern "C" {\r
         void AnnotateIgnoreReadsEnd(const char *f, int l);\r
         void AnnotateIgnoreWritesBegin(const char *f, int l);\r
         void AnnotateIgnoreWritesEnd(const char *f, int l);\r
+\r
+        void AnnotateNewMemory(char *f, int l, void * mem, size_t size);
+\r
     }\r
-#else\r
-#   define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr)\r
-#   define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr)
+\r
+#else // CDS_THREAD_SANITIZER_ENABLED\r
+\r
+#   define CDS_TSAN_ANNOTATE_HAPPENS_BEFORE(addr)   (void)\r
+#   define CDS_TSAN_ANNOTATE_HAPPENS_AFTER(addr)    (void)
 
-#   define CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN\r
-#   define CDS_TSAN_ANNOTATE_IGNORE_READS_END\r
-#   define CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN\r
-#   define CDS_TSAN_ANNOTATE_IGNORE_WRITES_END\r
-#   define CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN\r
-#   define CDS_TSAN_ANNOTATE_IGNORE_RW_END\r
+#   define CDS_TSAN_ANNOTATE_IGNORE_READS_BEGIN     (void)\r
+#   define CDS_TSAN_ANNOTATE_IGNORE_READS_END       (void)\r
+#   define CDS_TSAN_ANNOTATE_IGNORE_WRITES_BEGIN    (void)\r
+#   define CDS_TSAN_ANNOTATE_IGNORE_WRITES_END      (void)\r
+#   define CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN        (void)\r
+#   define CDS_TSAN_ANNOTATE_IGNORE_RW_END          (void)\r
+\r
+#   define CDS_TSAN_ANNOTATE_NEW_MEMORY( addr, sz ) (void)\r
+\r
 #endif
 
+//@endcond
 #endif  // #ifndef CDSLIB_COMPILER_FEATURE_TSAN_H