Silence tsan false-positives (tsan can't track things which are only safe due to
authorNick Lewycky <nicholas@mxc.ca>
Mon, 5 Dec 2011 23:07:05 +0000 (23:07 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Mon, 5 Dec 2011 23:07:05 +0000 (23:07 +0000)
memory fences) in statistics registration, which works the same way that
ManagedStatic registration does.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145869 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/Statistic.h
lib/Support/Statistic.cpp

index b8a1a2f5c4e8fcd610dacb4a305e5b34a62b8ea3..b54d10b9dd334d0317054f81c82c3504a3517007 100644 (file)
@@ -27,6 +27,7 @@
 #define LLVM_ADT_STATISTIC_H
 
 #include "llvm/Support/Atomic.h"
+#include "llvm/Support/Valgrind.h"
 
 namespace llvm {
 class raw_ostream;
@@ -110,6 +111,7 @@ protected:
     bool tmp = Initialized;
     sys::MemoryFence();
     if (!tmp) RegisterStatistic();
+    TsanHappensAfter(this);
     return *this;
   }
   void RegisterStatistic();
index 04a44a0f7113429d8d36f51b8a3304897e07115f..d8a6ad35ba9cae8805ab9c9f3c1cef2ace2d1ba6 100644 (file)
@@ -73,9 +73,12 @@ void Statistic::RegisterStatistic() {
     if (Enabled)
       StatInfo->addStatistic(this);
 
+    TsanHappensBefore(this);
     sys::MemoryFence();
     // Remember we have been registered.
+    TsanIgnoreWritesBegin();
     Initialized = true;
+    TsanIgnoreWritesEnd();
   }
 }