From aa21e417f24fe9be4fd8db366766fb262c96703e Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Mon, 5 Dec 2011 23:07:05 +0000 Subject: [PATCH] Silence tsan false-positives (tsan can't track things which are only safe due to 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 | 2 ++ lib/Support/Statistic.cpp | 3 +++ 2 files changed, 5 insertions(+) diff --git a/include/llvm/ADT/Statistic.h b/include/llvm/ADT/Statistic.h index b8a1a2f5c4e..b54d10b9dd3 100644 --- a/include/llvm/ADT/Statistic.h +++ b/include/llvm/ADT/Statistic.h @@ -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(); diff --git a/lib/Support/Statistic.cpp b/lib/Support/Statistic.cpp index 04a44a0f711..d8a6ad35ba9 100644 --- a/lib/Support/Statistic.cpp +++ b/lib/Support/Statistic.cpp @@ -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(); } }