X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FPassSupport.h;h=c6ad44f5f4ec90415030b8d310888e3eeae0ecbf;hb=6e006d3de882784527d4d9cc92b1a91f6773505e;hp=d00d0c0d6daa581cfbabb43b3b47bbdf3a7fd787;hpb=75f6df283f726c289b240fe8c5f2f42cdfff5d5f;p=oota-llvm.git diff --git a/include/llvm/PassSupport.h b/include/llvm/PassSupport.h index d00d0c0d6da..c6ad44f5f4e 100644 --- a/include/llvm/PassSupport.h +++ b/include/llvm/PassSupport.h @@ -24,7 +24,8 @@ #include "Pass.h" #include "llvm/PassRegistry.h" #include "llvm/InitializePasses.h" -#include "llvm/System/Atomic.h" +#include "llvm/Support/Atomic.h" +#include "llvm/Support/Valgrind.h" #include namespace llvm { @@ -125,8 +126,8 @@ public: } private: - void operator=(const PassInfo &); // do not implement - PassInfo(const PassInfo &); // do not implement + void operator=(const PassInfo &) LLVM_DELETED_FUNCTION; + PassInfo(const PassInfo &) LLVM_DELETED_FUNCTION; }; #define CALL_ONCE_INITIALIZATION(function) \ @@ -135,7 +136,10 @@ private: if (old_val == 0) { \ function(Registry); \ sys::MemoryFence(); \ + TsanIgnoreWritesBegin(); \ + TsanHappensBefore(&initialized); \ initialized = 2; \ + TsanIgnoreWritesEnd(); \ } else { \ sys::cas_flag tmp = initialized; \ sys::MemoryFence(); \ @@ -143,7 +147,8 @@ private: tmp = initialized; \ sys::MemoryFence(); \ } \ - } + } \ + TsanHappensAfter(&initialized); #define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \ static void* initialize##passName##PassOnce(PassRegistry &Registry) { \