<div dir="ltr">Thank you very much!! </div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 28, 2016 at 1:14 PM, Dmitry Vyukov via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dvyukov<br>
Date: Fri Oct 28 15:14:18 2016<br>
New Revision: 285443<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=285443&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=285443&view=rev</a><br>
Log:<br>
tsan: always define SANITIZER_GO<br>
<br>
Currently we either define SANITIZER_GO for Go or don't define it at all for C++.<br>
This works fine with preprocessor (ifdef/ifndef/defined), but does not work<br>
for C++ if statements (e.g. if (SANITIZER_GO) {...}). Also this is different<br>
from majority of SANITIZER_FOO macros which are always defined to either 0 or 1.<br>
<br>
Always define SANITIZER_GO to either 0 or 1.<br>
This allows to use SANITIZER_GO in expressions and in flag default values.<br>
<br>
Also remove kGoMode and kCppMode, which were meant to be used in expressions,<br>
but they are not defined in sanitizer_common code, so SANITIZER_GO become prevalent.<br>
<br>
Also convert some preprocessor checks to C++ if's or ternary expressions.<br>
<br>
Majority of this change is done mechanically with:<br>
sed "s#ifdef SANITIZER_GO#if SANITIZER_GO#g"<br>
sed "s#ifndef SANITIZER_GO#if \!SANITIZER_GO#g"<br>
sed "s#defined(SANITIZER_GO)#<wbr>SANITIZER_GO#g"<br>
<br>
<br>
Modified:<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>allocator.cc<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>common.cc<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>internal_defs.h<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>linux.cc<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>mac.cc<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>platform.h<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>posix_libcdep.cc<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>printf.cc<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>thread_registry.cc<br>
compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>win.cc<br>
compiler-rt/trunk/lib/tsan/go/<wbr>build.bat<br>
compiler-rt/trunk/lib/tsan/go/<wbr>buildgo.sh<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_clock.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_defs.h<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.inc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface.h<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface_atomic.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_mutexset.h<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform.h<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_linux.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_mac.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_posix.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_report.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.h<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_mutex.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_proc.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_report.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_thread.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_suppressions.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_sync.cc<br>
compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_trace.h<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>allocator.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>allocator.cc?rev=285443&r1=<wbr>285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>allocator.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>allocator.cc Fri Oct 28 15:14:18 2016<br>
@@ -21,10 +21,10 @@<br>
namespace __sanitizer {<br>
<br>
// ThreadSanitizer for Go uses libc malloc/free.<br>
-#if defined(SANITIZER_GO) || defined(SANITIZER_USE_MALLOC)<br>
+#if SANITIZER_GO || defined(SANITIZER_USE_MALLOC)<br>
# if SANITIZER_LINUX && !SANITIZER_ANDROID<br>
extern "C" void *__libc_malloc(uptr size);<br>
-# ifndef SANITIZER_GO<br>
+# if !SANITIZER_GO<br>
extern "C" void *__libc_memalign(uptr alignment, uptr size);<br>
# endif<br>
extern "C" void *__libc_realloc(void *ptr, uptr size);<br>
@@ -32,7 +32,7 @@ extern "C" void __libc_free(void *ptr);<br>
# else<br>
# include <stdlib.h><br>
# define __libc_malloc malloc<br>
-# ifndef SANITIZER_GO<br>
+# if !SANITIZER_GO<br>
static void *__libc_memalign(uptr alignment, uptr size) {<br>
void *p;<br>
uptr error = posix_memalign(&p, alignment, size);<br>
@@ -47,7 +47,7 @@ static void *__libc_memalign(uptr alignm<br>
static void *RawInternalAlloc(uptr size, InternalAllocatorCache *cache,<br>
uptr alignment) {<br>
(void)cache;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (alignment == 0)<br>
return __libc_malloc(size);<br>
else<br>
@@ -78,7 +78,7 @@ InternalAllocator *internal_allocator()<br>
return 0;<br>
}<br>
<br>
-#else // defined(SANITIZER_GO) || defined(SANITIZER_USE_MALLOC)<br>
+#else // SANITIZER_GO || defined(SANITIZER_USE_MALLOC)<br>
<br>
static ALIGNED(64) char internal_alloc_placeholder[<wbr>sizeof(InternalAllocator)];<br>
static atomic_uint8_t internal_allocator_<wbr>initialized;<br>
@@ -131,7 +131,7 @@ static void RawInternalFree(void *ptr, I<br>
internal_allocator()-><wbr>Deallocate(cache, ptr);<br>
}<br>
<br>
-#endif // defined(SANITIZER_GO) || defined(SANITIZER_USE_MALLOC)<br>
+#endif // SANITIZER_GO || defined(SANITIZER_USE_MALLOC)<br>
<br>
const u64 kBlockMagic = 0x6A6CB03ABCEBC041ull;<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>common.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>common.cc?rev=285443&r1=<wbr>285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>common.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>common.cc Fri Oct 28 15:14:18 2016<br>
@@ -114,7 +114,7 @@ void NORETURN ReportMmapFailureAndDie(up<br>
Report("ERROR: %s failed to "<br>
"%s 0x%zx (%zd) bytes of %s (error code: %d)\n",<br>
SanitizerToolName, mmap_type, size, size, mem_type, err);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
DumpProcessMap();<br>
#endif<br>
UNREACHABLE("unable to mmap");<br>
@@ -207,7 +207,7 @@ void ReportErrorSummary(const char *erro<br>
__sanitizer_report_error_<wbr>summary(buff.data());<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void ReportErrorSummary(const char *error_type, const AddressInfo &info) {<br>
if (!common_flags()->print_<wbr>summary)<br>
return;<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>internal_defs.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>internal_defs.h?rev=285443&r1=<wbr>285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>internal_defs.h (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>internal_defs.h Fri Oct 28 15:14:18 2016<br>
@@ -24,7 +24,7 @@<br>
# define SANITIZER_INTERFACE_ATTRIBUTE __declspec(dllexport)<br>
// FIXME find out what we need on Windows, if anything.<br>
# define SANITIZER_WEAK_ATTRIBUTE<br>
-#elif defined(SANITIZER_GO)<br>
+#elif SANITIZER_GO<br>
# define SANITIZER_INTERFACE_ATTRIBUTE<br>
# define SANITIZER_WEAK_ATTRIBUTE<br>
#else<br>
@@ -32,7 +32,7 @@<br>
# define SANITIZER_WEAK_ATTRIBUTE __attribute__((weak))<br>
#endif<br>
<br>
-#if (SANITIZER_LINUX || SANITIZER_WINDOWS) && !defined(SANITIZER_GO)<br>
+#if (SANITIZER_LINUX || SANITIZER_WINDOWS) && !SANITIZER_GO<br>
# define SANITIZER_SUPPORTS_WEAK_HOOKS 1<br>
#else<br>
# define SANITIZER_SUPPORTS_WEAK_HOOKS 0<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>linux.cc?rev=285443&r1=285442&<wbr>r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>linux.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>linux.cc Fri Oct 28 15:14:18 2016<br>
@@ -1230,7 +1230,7 @@ bool IsHandledDeadlySignal(int signum) {<br>
return (signum == SIGSEGV || signum == SIGBUS) && common_flags()->handle_segv;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void *internal_start_thread(void(*<wbr>func)(void *arg), void *arg) {<br>
// Start the thread with signals blocked, otherwise it can steal user signals.<br>
__sanitizer_sigset_t set, old;<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>mac.cc?rev=285443&r1=285442&<wbr>r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>mac.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>mac.cc Fri Oct 28 15:14:18 2016<br>
@@ -373,7 +373,7 @@ void InitTlsSize() {<br>
<br>
void GetThreadStackAndTls(bool main, uptr *stk_addr, uptr *stk_size,<br>
uptr *tls_addr, uptr *tls_size) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
uptr stack_top, stack_bottom;<br>
GetThreadStackTopAndBottom(<wbr>main, &stack_top, &stack_bottom);<br>
*stk_addr = stack_bottom;<br>
@@ -471,12 +471,12 @@ void *internal_start_thread(void(*<wbr>func)(<br>
<br>
void internal_join_thread(void *th) { pthread_join((pthread_t)th, 0); }<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static BlockingMutex syslog_lock(LINKER_<wbr>INITIALIZED);<br>
#endif<br>
<br>
void WriteOneLineToSyslog(const char *s) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
syslog_lock.CheckLocked();<br>
asl_log(nullptr, nullptr, ASL_LEVEL_ERR, "%s", s);<br>
#endif<br>
@@ -489,7 +489,7 @@ void LogMessageOnPrintf(const char *str)<br>
}<br>
<br>
void LogFullErrorReport(const char *buffer) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Log with os_trace. This will make it into the crash log.<br>
#if SANITIZER_OS_TRACE<br>
if (GetMacosVersion() >= MACOS_VERSION_YOSEMITE) {<br>
@@ -562,7 +562,7 @@ void GetPcSpBp(void *context, uptr *pc,<br>
# endif<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static const char kDyldInsertLibraries[] = "DYLD_INSERT_LIBRARIES";<br>
LowLevelAllocator allocator_for_env;<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>platform.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>platform.h?rev=285443&r1=<wbr>285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>platform.h (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>platform.h Fri Oct 28 15:14:18 2016<br>
@@ -249,4 +249,8 @@<br>
#define SANITIZER_NLDBL_VERSION "GLIBC_2.4"<br>
#endif<br>
<br>
+#if SANITIZER_GO == 0<br>
+# define SANITIZER_GO 0<br>
+#endif<br>
+<br>
#endif // SANITIZER_PLATFORM_H<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>posix_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>posix_libcdep.cc?rev=285443&<wbr>r1=285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>posix_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>posix_libcdep.cc Fri Oct 28 15:14:18 2016<br>
@@ -128,7 +128,7 @@ void SleepForMillis(int millis) {<br>
}<br>
<br>
void Abort() {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// If we are handling SIGABRT, unhandle it first.<br>
if (IsHandledDeadlySignal(<wbr>SIGABRT)) {<br>
struct sigaction sigact;<br>
@@ -142,7 +142,7 @@ void Abort() {<br>
}<br>
<br>
int Atexit(void (*function)(void)) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
return atexit(function);<br>
#else<br>
return 0;<br>
@@ -153,7 +153,7 @@ bool SupportsColoredOutput(fd_t fd) {<br>
return isatty(fd) != 0;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// TODO(glider): different tools may require different altstack size.<br>
static const uptr kAltStackSize = SIGSTKSZ * 4; // SIGSTKSZ is not enough.<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>printf.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>printf.cc?rev=285443&r1=<wbr>285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>printf.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>printf.cc Fri Oct 28 15:14:18 2016<br>
@@ -213,7 +213,7 @@ SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_<br>
void OnPrint(const char *str) {<br>
(void)str;<br>
}<br>
-#elif defined(SANITIZER_GO) && defined(TSAN_EXTERNAL_HOOKS)<br>
+#elif SANITIZER_GO && defined(TSAN_EXTERNAL_HOOKS)<br>
void OnPrint(const char *str);<br>
#else<br>
void OnPrint(const char *str) {<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>thread_registry.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_thread_registry.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>thread_registry.cc?rev=285443&<wbr>r1=285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>thread_registry.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>thread_registry.cc Fri Oct 28 15:14:18 2016<br>
@@ -131,7 +131,7 @@ u32 ThreadRegistry::CreateThread(<wbr>uptr us<br>
tctx = context_factory_(tid);<br>
threads_[tid] = tctx;<br>
} else {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
Report("%s: Thread limit (%u threads) exceeded. Dying.\n",<br>
SanitizerToolName, max_threads_);<br>
#else<br>
<br>
Modified: compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>win.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>win.cc?rev=285443&r1=285442&<wbr>r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>win.cc (original)<br>
+++ compiler-rt/trunk/lib/<wbr>sanitizer_common/sanitizer_<wbr>win.cc Fri Oct 28 15:14:18 2016<br>
@@ -334,7 +334,7 @@ struct ModuleInfo {<br>
uptr end_address;<br>
};<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
int CompareModulesBase(const void *pl, const void *pr) {<br>
const ModuleInfo *l = (ModuleInfo *)pl, *r = (ModuleInfo *)pr;<br>
if (l->base_address < r->base_address)<br>
@@ -344,7 +344,7 @@ int CompareModulesBase(const void *pl, c<br>
#endif<br>
} // namespace<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void DumpProcessMap() {<br>
Report("Dumping process modules:\n");<br>
ListOfModules modules;<br>
@@ -430,7 +430,7 @@ void Abort() {<br>
internal__exit(3);<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Read the file to extract the ImageBase field from the PE header. If ASLR is<br>
// disabled and this virtual address is available, the loader will typically<br>
// load the image at this address. Therefore, we call it the preferred base. Any<br>
@@ -723,7 +723,7 @@ void InitTlsSize() {<br>
<br>
void GetThreadStackAndTls(bool main, uptr *stk_addr, uptr *stk_size,<br>
uptr *tls_addr, uptr *tls_size) {<br>
-#ifdef SANITIZER_GO<br>
+#if SANITIZER_GO<br>
*stk_addr = 0;<br>
*stk_size = 0;<br>
*tls_addr = 0;<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/go/<wbr>build.bat<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/go/build.bat?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/go/build.bat?rev=285443&<wbr>r1=285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/go/<wbr>build.bat (original)<br>
+++ compiler-rt/trunk/lib/tsan/go/<wbr>build.bat Fri Oct 28 15:14:18 2016<br>
@@ -1,4 +1,4 @@<br>
type tsan_go.cc ..\rtl\tsan_interface_atomic.<wbr>cc ..\rtl\tsan_clock.cc ..\rtl\tsan_flags.cc ..\rtl\tsan_md5.cc ..\rtl\tsan_mutex.cc ..\rtl\tsan_report.cc ..\rtl\tsan_rtl.cc ..\rtl\tsan_rtl_mutex.cc ..\rtl\tsan_rtl_report.cc ..\rtl\tsan_rtl_thread.cc ..\rtl\tsan_rtl_proc.cc ..\rtl\tsan_stat.cc ..\rtl\tsan_suppressions.cc ..\rtl\tsan_sync.cc ..\rtl\tsan_stack_trace.cc ..\..\sanitizer_common\<wbr>sanitizer_allocator.cc ..\..\sanitizer_common\<wbr>sanitizer_common.cc ..\..\sanitizer_common\<wbr>sanitizer_flags.cc ..\..\sanitizer_common\<wbr>sanitizer_stacktrace.cc ..\..\sanitizer_common\<wbr>sanitizer_libc.cc ..\..\sanitizer_common\<wbr>sanitizer_printf.cc ..\..\sanitizer_common\<wbr>sanitizer_suppressions.cc ..\..\sanitizer_common\<wbr>sanitizer_thread_registry.cc ..\rtl\tsan_platform_windows.<wbr>cc ..\..\sanitizer_common\<wbr>sanitizer_win.cc ..\..\sanitizer_common\<wbr>sanitizer_deadlock_detector1.<wbr>cc ..\..\sanitizer_common\<wbr>sanitizer_stackdepot.cc ..\..\sanitizer_common\<wbr>sanitizer_persistent_<wbr>allocator.cc ..\..\sanitizer_common\<wbr>sanitizer_fla<br>
g_parser.cc ..\..\sanitizer_common\<wbr>sanitizer_symbolizer.cc ..\..\sanitizer_common\<wbr>sanitizer_termination.cc > gotsan.cc<br>
<br>
-gcc -c -o race_windows_amd64.syso gotsan.cc -I..\rtl -I..\.. -I..\..\sanitizer_common -I..\..\..\include -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -Wno-error=attributes -Wno-attributes -Wno-format -Wno-maybe-uninitialized -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer -std=c++11<br>
+gcc -c -o race_windows_amd64.syso gotsan.cc -I..\rtl -I..\.. -I..\..\sanitizer_common -I..\..\..\include -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO=1 -Wno-error=attributes -Wno-attributes -Wno-format -Wno-maybe-uninitialized -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer -std=c++11<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/go/<wbr>buildgo.sh<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/go/buildgo.sh?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/go/buildgo.sh?rev=285443&<wbr>r1=285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/go/<wbr>buildgo.sh (original)<br>
+++ compiler-rt/trunk/lib/tsan/go/<wbr>buildgo.sh Fri Oct 28 15:14:18 2016<br>
@@ -113,7 +113,7 @@ for F in $SRCS; do<br>
cat $F >> $DIR/gotsan.cc<br>
done<br>
<br>
-FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -std=c++11 -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -DSANITIZER_DEADLOCK_DETECTOR_<wbr>VERSION=2 $OSCFLAGS"<br>
+FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -std=c++11 -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO=1 -DSANITIZER_DEADLOCK_DETECTOR_<wbr>VERSION=2 $OSCFLAGS"<br>
if [ "$DEBUG" = "" ]; then<br>
FLAGS="$FLAGS -DSANITIZER_DEBUG=0 -O3 -msse3 -fomit-frame-pointer"<br>
else<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_clock.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_clock.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_clock.cc?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_clock.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_clock.cc Fri Oct 28 15:14:18 2016<br>
@@ -82,7 +82,7 @@<br>
<br>
// We don't have ThreadState in these methods, so this is an ugly hack that<br>
// works only in C++.<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
# define CPP_STAT_INC(typ) StatInc(cur_thread(), typ)<br>
#else<br>
# define CPP_STAT_INC(typ) (void)0<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_defs.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_defs.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_defs.h?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_defs.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_defs.h Fri Oct 28 15:14:18 2016<br>
@@ -29,7 +29,7 @@<br>
#endif<br>
<br>
#ifndef TSAN_CONTAINS_UBSAN<br>
-# if CAN_SANITIZE_UB && !defined(SANITIZER_GO)<br>
+# if CAN_SANITIZE_UB && !SANITIZER_GO<br>
# define TSAN_CONTAINS_UBSAN 1<br>
# else<br>
# define TSAN_CONTAINS_UBSAN 0<br>
@@ -38,19 +38,9 @@<br>
<br>
namespace __tsan {<br>
<br>
-#ifdef SANITIZER_GO<br>
-const bool kGoMode = true;<br>
-const bool kCppMode = false;<br>
-const char *const kTsanOptionsEnv = "GORACE";<br>
-#else<br>
-const bool kGoMode = false;<br>
-const bool kCppMode = true;<br>
-const char *const kTsanOptionsEnv = "TSAN_OPTIONS";<br>
-#endif<br>
-<br>
const int kTidBits = 13;<br>
const unsigned kMaxTid = 1 << kTidBits;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
const unsigned kMaxTidInClock = kMaxTid * 2; // This includes msb 'freed' bit.<br>
#else<br>
const unsigned kMaxTidInClock = kMaxTid; // Go does not track freed memory.<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_flags.cc?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.cc Fri Oct 28 15:14:18 2016<br>
@@ -61,7 +61,7 @@ void InitializeFlags(Flags *f, const cha<br>
CommonFlags cf;<br>
cf.CopyFrom(*common_flags());<br>
cf.allow_addr2line = true;<br>
- if (kGoMode) {<br>
+ if (SANITIZER_GO) {<br>
// Does not work as expected for Go: runtime handles SIGABRT and crashes.<br>
cf.abort_on_error = false;<br>
// Go does not have mutexes.<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_flags.inc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_flags.inc?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.inc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_flags.inc Fri Oct 28 15:14:18 2016<br>
@@ -61,8 +61,9 @@ TSAN_FLAG(bool, stop_on_start, false,<br>
"Stops on start until __tsan_resume() is called (for debugging).")<br>
TSAN_FLAG(bool, running_on_valgrind, false,<br>
"Controls whether RunningOnValgrind() returns true or false.")<br>
+// There are a lot of goroutines in Go, so we use smaller history.<br>
TSAN_FLAG(<br>
- int, history_size, kGoMode ? 1 : 3, // There are a lot of goroutines in Go.<br>
+ int, history_size, SANITIZER_GO ? 1 : 3,<br>
"Per-thread history size, controls how many previous memory accesses "<br>
"are remembered per thread. Possible values are [0..7]. "<br>
"history_size=0 amounts to 32K memory accesses. Each next value doubles "<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_interface.h?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface.h Fri Oct 28 15:14:18 2016<br>
@@ -26,7 +26,7 @@ using __sanitizer::uptr;<br>
extern "C" {<br>
#endif<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
<br>
// This function should be called at the very beginning of the process,<br>
// before any instrumented code is executed and before any call to malloc.<br>
@@ -146,7 +146,7 @@ typedef unsigned char a8;<br>
typedef unsigned short a16; // NOLINT<br>
typedef unsigned int a32;<br>
typedef unsigned long long a64; // NOLINT<br>
-#if !defined(SANITIZER_GO) && (defined(__SIZEOF_INT128__) \<br>
+#if !SANITIZER_GO && (defined(__SIZEOF_INT128__) \<br>
|| (__clang_major__ * 100 + __clang_minor__ >= 302)) && !defined(__mips64)<br>
__extension__ typedef __int128 a128;<br>
# define __TSAN_HAS_INT128 1<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface_atomic.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface_atomic.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_interface_<wbr>atomic.cc?rev=285443&r1=<wbr>285442&r2=285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface_atomic.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_interface_atomic.cc Fri Oct 28 15:14:18 2016<br>
@@ -28,7 +28,7 @@<br>
<br>
using namespace __tsan; // NOLINT<br>
<br>
-#if !defined(SANITIZER_GO) && __TSAN_HAS_INT128<br>
+#if !SANITIZER_GO && __TSAN_HAS_INT128<br>
// Protects emulation of 128-bit atomic operations.<br>
static StaticSpinMutex mutex128;<br>
#endif<br>
@@ -102,7 +102,7 @@ template<typename T> T func_cas(volatile<br>
// Atomic ops are executed under tsan internal mutex,<br>
// here we assume that the atomic variables are not accessed<br>
// from non-instrumented code.<br>
-#if !defined(__GCC_HAVE_SYNC_<wbr>COMPARE_AND_SWAP_16) && !defined(SANITIZER_GO) \<br>
+#if !defined(__GCC_HAVE_SYNC_<wbr>COMPARE_AND_SWAP_16) && !SANITIZER_GO \<br>
&& __TSAN_HAS_INT128<br>
a128 func_xchg(volatile a128 *v, a128 op) {<br>
SpinMutexLock lock(&mutex128);<br>
@@ -176,7 +176,7 @@ static int SizeLog() {<br>
// this leads to false negatives only in very obscure cases.<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static atomic_uint8_t *to_atomic(const volatile a8 *a) {<br>
return reinterpret_cast<atomic_uint8_<wbr>t *>(const_cast<a8 *>(a));<br>
}<br>
@@ -212,7 +212,7 @@ static T NoTsanAtomicLoad(const volatile<br>
return atomic_load(to_atomic(a), to_mo(mo));<br>
}<br>
<br>
-#if __TSAN_HAS_INT128 && !defined(SANITIZER_GO)<br>
+#if __TSAN_HAS_INT128 && !SANITIZER_GO<br>
static a128 NoTsanAtomicLoad(const volatile a128 *a, morder mo) {<br>
SpinMutexLock lock(&mutex128);<br>
return *a;<br>
@@ -242,7 +242,7 @@ static void NoTsanAtomicStore(volatile T<br>
atomic_store(to_atomic(a), v, to_mo(mo));<br>
}<br>
<br>
-#if __TSAN_HAS_INT128 && !defined(SANITIZER_GO)<br>
+#if __TSAN_HAS_INT128 && !SANITIZER_GO<br>
static void NoTsanAtomicStore(volatile a128 *a, a128 v, morder mo) {<br>
SpinMutexLock lock(&mutex128);<br>
*a = v;<br>
@@ -434,7 +434,7 @@ static T AtomicCAS(ThreadState *thr, upt<br>
return c;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static void NoTsanAtomicFence(morder mo) {<br>
__sync_synchronize();<br>
}<br>
@@ -446,7 +446,7 @@ static void AtomicFence(ThreadState *thr<br>
#endif<br>
<br>
// Interface functions follow.<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
<br>
// C/C++<br>
<br>
@@ -845,7 +845,7 @@ void __tsan_atomic_signal_fence(<wbr>morder m<br>
}<br>
} // extern "C"<br>
<br>
-#else // #ifndef SANITIZER_GO<br>
+#else // #if !SANITIZER_GO<br>
<br>
// Go<br>
<br>
@@ -928,4 +928,4 @@ void __tsan_go_atomic64_compare_<wbr>exchange<br>
*(bool*)(a+24) = (cur == cmp);<br>
}<br>
} // extern "C"<br>
-#endif // #ifndef SANITIZER_GO<br>
+#endif // #if !SANITIZER_GO<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_mutexset.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_mutexset.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_mutexset.h?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_mutexset.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_mutexset.h Fri Oct 28 15:14:18 2016<br>
@@ -43,7 +43,7 @@ class MutexSet {<br>
}<br>
<br>
private:<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
uptr size_;<br>
Desc descs_[kMaxSize];<br>
#endif<br>
@@ -55,7 +55,7 @@ class MutexSet {<br>
// Go does not have mutexes, so do not spend memory and time.<br>
// (Go sync.Mutex is actually a semaphore -- can be unlocked<br>
// in different goroutine).<br>
-#ifdef SANITIZER_GO<br>
+#if SANITIZER_GO<br>
MutexSet::MutexSet() {}<br>
void MutexSet::Add(u64 id, bool write, u64 epoch) {}<br>
void MutexSet::Del(u64 id, bool write) {}<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_platform.h?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform.h Fri Oct 28 15:14:18 2016<br>
@@ -24,7 +24,7 @@<br>
<br>
namespace __tsan {<br>
<br>
-#if !defined(SANITIZER_GO)<br>
+#if !SANITIZER_GO<br>
<br>
#if defined(__x86_64__)<br>
/*<br>
@@ -276,7 +276,7 @@ struct Mapping46 {<br>
#define TSAN_RUNTIME_VMA 1<br>
#endif<br>
<br>
-#elif defined(SANITIZER_GO) && !SANITIZER_WINDOWS<br>
+#elif SANITIZER_GO && !SANITIZER_WINDOWS<br>
<br>
/* Go on linux, darwin and freebsd<br>
0000 0000 1000 - 0000 1000 0000: executable<br>
@@ -302,7 +302,7 @@ struct Mapping {<br>
static const uptr kAppMemEnd = 0x00e000000000ull;<br>
};<br>
<br>
-#elif defined(SANITIZER_GO) && SANITIZER_WINDOWS<br>
+#elif SANITIZER_GO && SANITIZER_WINDOWS<br>
<br>
/* Go on windows<br>
0000 0000 1000 - 0000 1000 0000: executable<br>
@@ -362,7 +362,7 @@ enum MappingType {<br>
template<typename Mapping, int Type><br>
uptr MappingImpl(void) {<br>
switch (Type) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
case MAPPING_LO_APP_BEG: return Mapping::kLoAppMemBeg;<br>
case MAPPING_LO_APP_END: return Mapping::kLoAppMemEnd;<br>
# ifdef TSAN_MID_APP_RANGE<br>
@@ -408,7 +408,7 @@ uptr MappingArchImpl(void) {<br>
#endif<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
ALWAYS_INLINE<br>
uptr LoAppMemBeg(void) {<br>
return MappingArchImpl<MAPPING_LO_<wbr>APP_BEG>();<br>
@@ -470,7 +470,7 @@ bool GetUserRegion(int i, uptr *start, u<br>
switch (i) {<br>
default:<br>
return false;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
case 0:<br>
*start = LoAppMemBeg();<br>
*end = LoAppMemEnd();<br>
@@ -528,7 +528,7 @@ uptr TraceMemEnd(void) {<br>
<br>
template<typename Mapping><br>
bool IsAppMemImpl(uptr mem) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
return (mem >= Mapping::kHeapMemBeg && mem < Mapping::kHeapMemEnd) ||<br>
# ifdef TSAN_MID_APP_RANGE<br>
(mem >= Mapping::kMidAppMemBeg && mem < Mapping::kMidAppMemEnd) ||<br>
@@ -619,7 +619,7 @@ bool IsMetaMem(uptr mem) {<br>
template<typename Mapping><br>
uptr MemToShadowImpl(uptr x) {<br>
DCHECK(IsAppMem(x));<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
return (((x) & ~(Mapping::kAppMemMsk | (kShadowCell - 1)))<br>
^ Mapping::kAppMemXor) * kShadowCnt;<br>
#else<br>
@@ -656,7 +656,7 @@ uptr MemToShadow(uptr x) {<br>
template<typename Mapping><br>
u32 *MemToMetaImpl(uptr x) {<br>
DCHECK(IsAppMem(x));<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
return (u32*)(((((x) & ~(Mapping::kAppMemMsk | (kMetaShadowCell - 1)))) /<br>
kMetaShadowCell * kMetaShadowSize) | Mapping::kMetaShadowBeg);<br>
#else<br>
@@ -695,7 +695,7 @@ u32 *MemToMeta(uptr x) {<br>
template<typename Mapping><br>
uptr ShadowToMemImpl(uptr s) {<br>
DCHECK(IsShadowMem(s));<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// The shadow mapping is non-linear and we've lost some bits, so we don't have<br>
// an easy way to restore the original app address. But the mapping is a<br>
// bijection, so we try to restore the address as belonging to low/mid/high<br>
@@ -713,7 +713,7 @@ uptr ShadowToMemImpl(uptr s) {<br>
return p;<br>
# endif<br>
return ((s / kShadowCnt) ^ Mapping::kAppMemXor) | Mapping::kAppMemMsk;<br>
-#else // #ifndef SANITIZER_GO<br>
+#else // #if !SANITIZER_GO<br>
# ifndef SANITIZER_WINDOWS<br>
return (s & ~Mapping::kShadowBeg) / kShadowCnt;<br>
# else<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_platform_linux.<wbr>cc?rev=285443&r1=285442&r2=<wbr>285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_linux.cc Fri Oct 28 15:14:18 2016<br>
@@ -98,7 +98,7 @@ void FillProfileCallback(uptr p, uptr rs<br>
mem[MemShadow] += rss;<br>
else if (p >= MetaShadowBeg() && p < MetaShadowEnd())<br>
mem[MemMeta] += rss;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
else if (p >= HeapMemBeg() && p < HeapMemEnd())<br>
mem[MemHeap] += rss;<br>
else if (p >= LoAppMemBeg() && p < LoAppMemEnd())<br>
@@ -144,7 +144,7 @@ void FlushShadowMemory() {<br>
#endif<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Mark shadow for .rodata sections with the special kShadowRodata marker.<br>
// Accesses to .rodata can't race, so this saves time, memory and trace space.<br>
static void MapRodata() {<br>
@@ -206,7 +206,7 @@ void InitializeShadowMemoryPlatform<wbr>() {<br>
MapRodata();<br>
}<br>
<br>
-#endif // #ifndef SANITIZER_GO<br>
+#endif // #if !SANITIZER_GO<br>
<br>
void InitializePlatformEarly() {<br>
#ifdef TSAN_RUNTIME_VMA<br>
@@ -234,7 +234,7 @@ void InitializePlatform() {<br>
// Go maps shadow memory lazily and works fine with limited address space.<br>
// Unlimited stack is not a problem as well, because the executable<br>
// is not compiled with -pie.<br>
- if (kCppMode) {<br>
+ if (!SANITIZER_GO) {<br>
bool reexec = false;<br>
// TSan doesn't play well with unlimited stack size (as stack<br>
// overlaps with shadow memory). If we detect unlimited stack size,<br>
@@ -276,13 +276,13 @@ void InitializePlatform() {<br>
ReExec();<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
CheckAndProtect();<br>
InitTlsSize();<br>
#endif<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Extract file descriptors passed to glibc internal __res_iclose function.<br>
// This is required to properly "close" the fds, because we do not see internal<br>
// closes within glibc. The code is a pure hack.<br>
@@ -335,11 +335,11 @@ int call_pthread_cancel_with_<wbr>cleanup(int<br>
}<br>
#endif<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void ReplaceSystemMalloc() { }<br>
#endif<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
#if SANITIZER_ANDROID<br>
<br>
#if defined(__aarch64__)<br>
@@ -400,7 +400,7 @@ void cur_thread_finalize() {<br>
CHECK_EQ(0, internal_sigprocmask(SIG_<wbr>SETMASK, &oldset, nullptr));<br>
}<br>
#endif // SANITIZER_ANDROID<br>
-#endif // ifndef SANITIZER_GO<br>
+#endif // if !SANITIZER_GO<br>
<br>
} // namespace __tsan<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform_mac.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_platform_mac.cc?<wbr>rev=285443&r1=285442&r2=<wbr>285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_mac.cc Fri Oct 28 15:14:18 2016<br>
@@ -42,7 +42,7 @@<br>
<br>
namespace __tsan {<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static void *SignalSafeGetOrAllocate(uptr *dst, uptr size) {<br>
atomic_uintptr_t *a = (atomic_uintptr_t *)dst;<br>
void *val = (void *)atomic_load_relaxed(a);<br>
@@ -110,7 +110,7 @@ void FlushShadowMemory() {<br>
void WriteMemoryProfile(char *buf, uptr buf_size, uptr nthread, uptr nlive) {<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void InitializeShadowMemoryPlatform<wbr>() { }<br>
<br>
// On OS X, GCD worker threads are created without a call to pthread_create. We<br>
@@ -160,7 +160,7 @@ void InitializePlatformEarly() {<br>
<br>
void InitializePlatform() {<br>
DisableCoreDumperIfNecessary()<wbr>;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
CheckAndProtect();<br>
<br>
CHECK_EQ(main_thread_identity, 0);<br>
@@ -171,7 +171,7 @@ void InitializePlatform() {<br>
#endif<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Note: this function runs with async signals enabled,<br>
// so it must not touch any tsan state.<br>
int call_pthread_cancel_with_<wbr>cleanup(int(*fn)(void *c, void *m,<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_posix.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform_posix.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_platform_posix.<wbr>cc?rev=285443&r1=285442&r2=<wbr>285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_posix.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_platform_posix.cc Fri Oct 28 15:14:18 2016<br>
@@ -23,7 +23,7 @@<br>
<br>
namespace __tsan {<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void InitializeShadowMemory() {<br>
// Map memory shadow.<br>
uptr shadow =<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_report.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_report.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_report.cc?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_report.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_report.cc Fri Oct 28 15:14:18 2016<br>
@@ -71,7 +71,7 @@ ReportDesc::~ReportDesc() {<br>
// FIXME(dvyukov): it must be leaking a lot of memory.<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
<br>
const int kThreadBufSize = 32;<br>
const char *thread_name(char *buf, int tid) {<br>
@@ -361,7 +361,7 @@ void PrintReport(const ReportDesc *rep)<br>
Printf("==================\n")<wbr>;<br>
}<br>
<br>
-#else // #ifndef SANITIZER_GO<br>
+#else // #if !SANITIZER_GO<br>
<br>
const int kMainThreadId = 1;<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_rtl.cc?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.cc Fri Oct 28 15:14:18 2016<br>
@@ -44,7 +44,7 @@ extern "C" void __tsan_resume() {<br>
<br>
namespace __tsan {<br>
<br>
-#if !defined(SANITIZER_GO) && !SANITIZER_MAC<br>
+#if !SANITIZER_GO && !SANITIZER_MAC<br>
THREADLOCAL char cur_thread_placeholder[sizeof(<wbr>ThreadState)] ALIGNED(64);<br>
#endif<br>
static char ctx_placeholder[sizeof(<wbr>Context)] ALIGNED(64);<br>
@@ -86,7 +86,7 @@ static ThreadContextBase *CreateThreadCo<br>
return new(mem) ThreadContext(tid);<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static const u32 kThreadQuarantineSize = 16;<br>
#else<br>
static const u32 kThreadQuarantineSize = 64;<br>
@@ -117,7 +117,7 @@ ThreadState::ThreadState(<wbr>Context *ctx, i<br>
// , ignore_reads_and_writes()<br>
// , ignore_interceptors()<br>
, clock(tid, reuse_count)<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
, jmp_bufs(MBlockJmpBuf)<br>
#endif<br>
, tid(tid)<br>
@@ -126,13 +126,13 @@ ThreadState::ThreadState(<wbr>Context *ctx, i<br>
, stk_size(stk_size)<br>
, tls_addr(tls_addr)<br>
, tls_size(tls_size)<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
, last_sleep_clock(tid)<br>
#endif<br>
{<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static void MemoryProfiler(Context *ctx, fd_t fd, int i) {<br>
uptr n_threads;<br>
uptr n_running_threads;<br>
@@ -333,12 +333,12 @@ void Initialize(ThreadState *thr) {<br>
SetCheckFailedCallback(<wbr>TsanCheckFailed);<br>
<br>
ctx = new(ctx_placeholder) Context;<br>
- const char *options = GetEnv(kTsanOptionsEnv);<br>
+ const char *options = GetEnv(SANITIZER_GO ? "GORACE" : "TSAN_OPTIONS");<br>
CacheBinaryName();<br>
InitializeFlags(&ctx->flags, options);<br>
AvoidCVE_2016_2143();<br>
InitializePlatformEarly();<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Re-exec ourselves if we need to set additional env or command line args.<br>
MaybeReexec();<br>
<br>
@@ -354,14 +354,14 @@ void Initialize(ThreadState *thr) {<br>
InitializePlatform();<br>
InitializeMutex();<br>
InitializeDynamicAnnotations()<wbr>;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
InitializeShadowMemory();<br>
InitializeAllocatorLate();<br>
#endif<br>
// Setup correct file descriptor for error reports.<br>
__sanitizer_set_report_path(<wbr>common_flags()->log_path);<br>
InitializeSuppressions();<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
InitializeLibIgnore();<br>
Symbolizer::GetOrInit()-><wbr>AddHooks(EnterSymbolizer, ExitSymbolizer);<br>
// On MIPS, TSan initialization is run before<br>
@@ -385,7 +385,7 @@ void Initialize(ThreadState *thr) {<br>
#endif<br>
ctx->initialized = true;<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
Symbolizer::LateInitialize();<br>
#endif<br>
<br>
@@ -411,7 +411,7 @@ int Finalize(ThreadState *thr) {<br>
CommonSanitizerReportMutex.<wbr>Unlock();<br>
ctx->report_mtx.Unlock();<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (Verbosity()) AllocatorPrintStats();<br>
#endif<br>
<br>
@@ -419,7 +419,7 @@ int Finalize(ThreadState *thr) {<br>
<br>
if (ctx->nreported) {<br>
failed = true;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
Printf("ThreadSanitizer: reported %d warnings\n", ctx->nreported);<br>
#else<br>
Printf("Found %d data race(s)\n", ctx->nreported);<br>
@@ -434,7 +434,7 @@ int Finalize(ThreadState *thr) {<br>
<br>
if (common_flags()->print_<wbr>suppressions)<br>
PrintMatchedSuppressions();<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (flags()->print_benign)<br>
PrintMatchedBenignRaces();<br>
#endif<br>
@@ -449,7 +449,7 @@ int Finalize(ThreadState *thr) {<br>
return failed ? common_flags()->exitcode : 0;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void ForkBefore(ThreadState *thr, uptr pc) {<br>
ctx->thread_registry->Lock();<br>
ctx->report_mtx.Lock();<br>
@@ -482,7 +482,7 @@ void ForkChildAfter(ThreadState *thr, up<br>
}<br>
#endif<br>
<br>
-#ifdef SANITIZER_GO<br>
+#if SANITIZER_GO<br>
NOINLINE<br>
void GrowShadowStack(ThreadState *thr) {<br>
const int sz = thr->shadow_stack_end - thr->shadow_stack;<br>
@@ -501,7 +501,7 @@ u32 CurrentStackId(ThreadState *thr, upt<br>
if (!thr->is_inited) // May happen during bootstrap.<br>
return 0;<br>
if (pc != 0) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
DCHECK_LT(thr->shadow_stack_<wbr>pos, thr->shadow_stack_end);<br>
#else<br>
if (thr->shadow_stack_pos == thr->shadow_stack_end)<br>
@@ -547,7 +547,7 @@ uptr TraceParts() {<br>
return TraceSize() / kTracePartSize;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
extern "C" void __tsan_trace_switch() {<br>
TraceSwitch(cur_thread());<br>
}<br>
@@ -580,7 +580,7 @@ void HandleRace(ThreadState *thr, u64 *s<br>
thr->racy_state[0] = cur.raw();<br>
thr->racy_state[1] = old.raw();<br>
thr->racy_shadow_addr = shadow_mem;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
HACKY_CALL(__tsan_report_race)<wbr>;<br>
#else<br>
ReportRace(thr);<br>
@@ -777,7 +777,7 @@ void MemoryAccess(ThreadState *thr, uptr<br>
}<br>
#endif<br>
<br>
- if (kCppMode && *shadow_mem == kShadowRodata) {<br>
+ if (!SANITIZER_GO && *shadow_mem == kShadowRodata) {<br>
// Access to .rodata section, no races here.<br>
// Measurements show that it can be 10-20% of all memory accesses.<br>
StatInc(thr, StatMop);<br>
@@ -864,7 +864,7 @@ static void MemoryRangeSet(ThreadState *<br>
size = (size + (kShadowCell - 1)) & ~(kShadowCell - 1);<br>
// UnmapOrDie/MmapFixedNoReserve does not work on Windows,<br>
// so we do it only for C/C++.<br>
- if (kGoMode || size < common_flags()->clear_shadow_<wbr>mmap_threshold) {<br>
+ if (SANITIZER_GO || size < common_flags()->clear_shadow_<wbr>mmap_threshold) {<br>
u64 *p = (u64*)MemToShadow(addr);<br>
CHECK(IsShadowMem((uptr)p));<br>
CHECK(IsShadowMem((uptr)(p + size * kShadowCnt / kShadowCell - 1)));<br>
@@ -950,7 +950,7 @@ void FuncEntry(ThreadState *thr, uptr pc<br>
// Shadow stack maintenance can be replaced with<br>
// stack unwinding during trace switch (which presumably must be faster).<br>
DCHECK_GE(thr->shadow_stack_<wbr>pos, thr->shadow_stack);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
DCHECK_LT(thr->shadow_stack_<wbr>pos, thr->shadow_stack_end);<br>
#else<br>
if (thr->shadow_stack_pos == thr->shadow_stack_end)<br>
@@ -970,7 +970,7 @@ void FuncExit(ThreadState *thr) {<br>
}<br>
<br>
DCHECK_GT(thr->shadow_stack_<wbr>pos, thr->shadow_stack);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
DCHECK_LT(thr->shadow_stack_<wbr>pos, thr->shadow_stack_end);<br>
#endif<br>
thr->shadow_stack_pos--;<br>
@@ -981,7 +981,7 @@ void ThreadIgnoreBegin(ThreadState *thr,<br>
thr->ignore_reads_and_writes++<wbr>;<br>
CHECK_GT(thr->ignore_reads_<wbr>and_writes, 0);<br>
thr->fast_state.SetIgnoreBit()<wbr>;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (!ctx->after_multithreaded_<wbr>fork)<br>
thr->mop_ignore_set.Add(<wbr>CurrentStackId(thr, pc));<br>
#endif<br>
@@ -993,7 +993,7 @@ void ThreadIgnoreEnd(ThreadState *thr, u<br>
CHECK_GE(thr->ignore_reads_<wbr>and_writes, 0);<br>
if (thr->ignore_reads_and_writes == 0) {<br>
thr->fast_state.<wbr>ClearIgnoreBit();<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
thr->mop_ignore_set.Reset();<br>
#endif<br>
}<br>
@@ -1003,7 +1003,7 @@ void ThreadIgnoreSyncBegin(<wbr>ThreadState *<br>
DPrintf("#%d: ThreadIgnoreSyncBegin\n", thr->tid);<br>
thr->ignore_sync++;<br>
CHECK_GT(thr->ignore_sync, 0);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (!ctx->after_multithreaded_<wbr>fork)<br>
thr->sync_ignore_set.Add(<wbr>CurrentStackId(thr, pc));<br>
#endif<br>
@@ -1013,7 +1013,7 @@ void ThreadIgnoreSyncEnd(<wbr>ThreadState *th<br>
DPrintf("#%d: ThreadIgnoreSyncEnd\n", thr->tid);<br>
thr->ignore_sync--;<br>
CHECK_GE(thr->ignore_sync, 0);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (thr->ignore_sync == 0)<br>
thr->sync_ignore_set.Reset();<br>
#endif<br>
@@ -1037,7 +1037,7 @@ void build_consistency_nostats() {}<br>
<br>
} // namespace __tsan<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Must be included in this file to make sure everything is inlined.<br>
#include "tsan_interface_inl.h"<br>
#endif<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_rtl.h?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl.h Fri Oct 28 15:14:18 2016<br>
@@ -52,7 +52,7 @@<br>
<br>
namespace __tsan {<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
struct MapUnmapCallback;<br>
#if defined(__mips64) || defined(__aarch64__) || defined(__powerpc__)<br>
static const uptr kAllocatorSpace = 0;<br>
@@ -341,7 +341,7 @@ struct JmpBuf {<br>
// A ThreadState must be wired with a Processor to handle events.<br>
struct Processor {<br>
ThreadState *thr; // currently wired thread, or nullptr<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
AllocatorCache alloc_cache;<br>
InternalAllocatorCache internal_alloc_cache;<br>
#endif<br>
@@ -351,7 +351,7 @@ struct Processor {<br>
DDPhysicalThread *dd_pt;<br>
};<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// ScopedGlobalProcessor temporary setups a global processor for the current<br>
// thread, if it does not have one. Intended for interceptors that can run<br>
// at the very thread end, when we already destroyed the thread processor.<br>
@@ -382,7 +382,7 @@ struct ThreadState {<br>
int ignore_reads_and_writes;<br>
int ignore_sync;<br>
// Go does not support ignores.<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
IgnoreSet mop_ignore_set;<br>
IgnoreSet sync_ignore_set;<br>
#endif<br>
@@ -395,7 +395,7 @@ struct ThreadState {<br>
u64 racy_state[2];<br>
MutexSet mset;<br>
ThreadClock clock;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
Vector<JmpBuf> jmp_bufs;<br>
int ignore_interceptors;<br>
#endif<br>
@@ -423,7 +423,7 @@ struct ThreadState {<br>
<br>
// Current wired Processor, or nullptr. Required to handle any events.<br>
Processor *proc1;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
Processor *proc() { return proc1; }<br>
#else<br>
Processor *proc();<br>
@@ -432,7 +432,7 @@ struct ThreadState {<br>
atomic_uintptr_t in_signal_handler;<br>
ThreadSignalContext *signal_ctx;<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
u32 last_sleep_stack_id;<br>
ThreadClock last_sleep_clock;<br>
#endif<br>
@@ -449,7 +449,7 @@ struct ThreadState {<br>
uptr tls_addr, uptr tls_size);<br>
};<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
#if SANITIZER_MAC || SANITIZER_ANDROID<br>
ThreadState *cur_thread();<br>
void cur_thread_finalize();<br>
@@ -547,13 +547,13 @@ extern Context *ctx; // The one and the<br>
<br>
struct ScopedIgnoreInterceptors {<br>
ScopedIgnoreInterceptors() {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
cur_thread()->ignore_<wbr>interceptors++;<br>
#endif<br>
}<br>
<br>
~ScopedIgnoreInterceptors() {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
cur_thread()->ignore_<wbr>interceptors--;<br>
#endif<br>
}<br>
@@ -793,7 +793,7 @@ void ALWAYS_INLINE TraceAddEvent(ThreadS<br>
StatInc(thr, StatEvents);<br>
u64 pos = fs.GetTracePos();<br>
if (UNLIKELY((pos % kTracePartSize) == 0)) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
HACKY_CALL(__tsan_trace_<wbr>switch);<br>
#else<br>
TraceSwitch(thr);<br>
@@ -805,7 +805,7 @@ void ALWAYS_INLINE TraceAddEvent(ThreadS<br>
*evp = ev;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
uptr ALWAYS_INLINE HeapEnd() {<br>
return HeapMemEnd() + PrimaryAllocator::<wbr>AdditionalSize();<br>
}<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_mutex.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_rtl_mutex.cc?<wbr>rev=285443&r1=285442&r2=<wbr>285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_mutex.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_mutex.cc Fri Oct 28 15:14:18 2016<br>
@@ -50,7 +50,7 @@ static void ReportMutexMisuse(ThreadStat<br>
uptr addr, u64 mid) {<br>
// In Go, these misuses are either impossible, or detected by std lib,<br>
// or false positives (e.g. unlock in a different thread).<br>
- if (kGoMode)<br>
+ if (SANITIZER_GO)<br>
return;<br>
ThreadRegistryLock l(ctx->thread_registry);<br>
ScopedReport rep(typ);<br>
@@ -76,7 +76,7 @@ void MutexCreate(ThreadState *thr, uptr<br>
s->is_rw = rw;<br>
s->is_recursive = recursive;<br>
s->is_linker_init = linker_init;<br>
- if (kCppMode && s->creation_stack_id == 0)<br>
+ if (!SANITIZER_GO && s->creation_stack_id == 0)<br>
s->creation_stack_id = CurrentStackId(thr, pc);<br>
s->mtx.Unlock();<br>
}<br>
@@ -195,7 +195,7 @@ int MutexUnlock(ThreadState *thr, uptr p<br>
TraceAddEvent(thr, thr->fast_state, EventTypeUnlock, s->GetId());<br>
int rec = 0;<br>
bool report_bad_unlock = false;<br>
- if (kCppMode && (s->recursion == 0 || s->owner_tid != thr->tid)) {<br>
+ if (!SANITIZER_GO && (s->recursion == 0 || s->owner_tid != thr->tid)) {<br>
if (flags()->report_mutex_bugs && !s->is_broken) {<br>
s->is_broken = true;<br>
report_bad_unlock = true;<br>
@@ -412,7 +412,7 @@ void ReleaseStore(ThreadState *thr, uptr<br>
s->mtx.Unlock();<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static void UpdateSleepClockCallback(<wbr>ThreadContextBase *tctx_base, void *arg) {<br>
ThreadState *thr = reinterpret_cast<ThreadState*><wbr>(arg);<br>
ThreadContext *tctx = static_cast<ThreadContext*>(<wbr>tctx_base);<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_proc.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_proc.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_rtl_proc.cc?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_proc.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_proc.cc Fri Oct 28 15:14:18 2016<br>
@@ -23,7 +23,7 @@ Processor *ProcCreate() {<br>
internal_memset(mem, 0, sizeof(Processor));<br>
Processor *proc = new(mem) Processor;<br>
proc->thr = nullptr;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
AllocatorProcStart(proc);<br>
#endif<br>
if (common_flags()->detect_<wbr>deadlocks)<br>
@@ -33,7 +33,7 @@ Processor *ProcCreate() {<br>
<br>
void ProcDestroy(Processor *proc) {<br>
CHECK_EQ(proc->thr, nullptr);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
AllocatorProcFinish(proc);<br>
#endif<br>
ctx->clock_alloc.FlushCache(&<wbr>proc->clock_cache);<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_report.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_rtl_report.cc?<wbr>rev=285443&r1=285442&r2=<wbr>285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_report.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_report.cc Fri Oct 28 15:14:18 2016<br>
@@ -38,7 +38,7 @@ void TsanCheckFailed(const char *file, i<br>
// on the other hand there is no sense in processing interceptors<br>
// since we are going to die soon.<br>
ScopedIgnoreInterceptors ignore;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
cur_thread()->ignore_sync++;<br>
cur_thread()->ignore_reads_<wbr>and_writes++;<br>
#endif<br>
@@ -75,7 +75,7 @@ static void StackStripMain(SymbolizedSta<br>
<br>
if (last_frame2 == 0)<br>
return;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
const char *last = last_frame->info.function;<br>
const char *last2 = last_frame2->info.function;<br>
// Strip frame above 'main'<br>
@@ -208,7 +208,7 @@ void ScopedReport::AddThread(const Threa<br>
rt->stack->suppressable = suppressable;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static bool FindThreadByUidLockedCallback(<wbr>ThreadContextBase *tctx, void *arg) {<br>
int unique_id = *(int *)arg;<br>
return tctx->unique_id == (u32)unique_id;<br>
@@ -253,7 +253,7 @@ ThreadContext *IsThreadStackOrTls(uptr a<br>
#endif<br>
<br>
void ScopedReport::AddThread(int unique_tid, bool suppressable) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (const ThreadContext *tctx = FindThreadByUidLocked(unique_<wbr>tid))<br>
AddThread(tctx, suppressable);<br>
#endif<br>
@@ -309,7 +309,7 @@ void ScopedReport::AddDeadMutex(u64 id)<br>
void ScopedReport::AddLocation(uptr addr, uptr size) {<br>
if (addr == 0)<br>
return;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
int fd = -1;<br>
int creat_tid = -1;<br>
u32 creat_stack = 0;<br>
@@ -359,7 +359,7 @@ void ScopedReport::AddLocation(uptr addr<br>
}<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
void ScopedReport::AddSleep(u32 stack_id) {<br>
rep_->sleep = SymbolizeStackId(stack_id);<br>
}<br>
@@ -664,7 +664,7 @@ void ReportRace(ThreadState *thr) {<br>
<br>
rep.AddLocation(addr_min, addr_max - addr_min);<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
{ // NOLINT<br>
Shadow s(thr->racy_state[1]);<br>
if (s.epoch() <= thr->last_sleep_clock.get(s.<wbr>tid()))<br>
@@ -693,7 +693,7 @@ void PrintCurrentStack(ThreadState *thr,<br>
// Also see PR27280 comment 2 and 3 for breaking examples and analysis.<br>
ALWAYS_INLINE<br>
void PrintCurrentStackSlow(uptr pc) {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
BufferedStackTrace *ptrace =<br>
new(internal_alloc(<wbr>MBlockStackTrace, sizeof(BufferedStackTrace)))<br>
BufferedStackTrace();<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_thread.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_rtl_thread.cc?<wbr>rev=285443&r1=285442&r2=<wbr>285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_thread.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_rtl_thread.cc Fri Oct 28 15:14:18 2016<br>
@@ -30,7 +30,7 @@ ThreadContext::ThreadContext(<wbr>int tid)<br>
, epoch1() {<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
ThreadContext::~ThreadContext(<wbr>) {<br>
}<br>
#endif<br>
@@ -94,7 +94,7 @@ void ThreadContext::OnStarted(void *arg)<br>
epoch1 = (u64)-1;<br>
new(thr) ThreadState(ctx, tid, unique_id, epoch0, reuse_count,<br>
args->stk_addr, args->stk_size, args->tls_addr, args->tls_size);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
thr->shadow_stack = &ThreadTrace(thr->tid)-><wbr>shadow_stack[0];<br>
thr->shadow_stack_pos = thr->shadow_stack;<br>
thr->shadow_stack_end = thr->shadow_stack + kShadowStackSize;<br>
@@ -125,7 +125,7 @@ void ThreadContext::OnStarted(void *arg)<br>
}<br>
<br>
void ThreadContext::OnFinished() {<br>
-#ifdef SANITIZER_GO<br>
+#if SANITIZER_GO<br>
internal_free(thr->shadow_<wbr>stack);<br>
thr->shadow_stack = nullptr;<br>
thr->shadow_stack_pos = nullptr;<br>
@@ -148,7 +148,7 @@ void ThreadContext::OnFinished() {<br>
thr = 0;<br>
}<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
struct ThreadLeak {<br>
ThreadContext *tctx;<br>
int count;<br>
@@ -170,7 +170,7 @@ static void MaybeReportThreadLeak(Thread<br>
}<br>
#endif<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
static void ReportIgnoresEnabled(<wbr>ThreadContext *tctx, IgnoreSet *set) {<br>
if (tctx->tid == 0) {<br>
Printf("ThreadSanitizer: main thread finished with ignores enabled\n");<br>
@@ -202,7 +202,7 @@ static void ThreadCheckIgnore(ThreadStat<br>
<br>
void ThreadFinalize(ThreadState *thr) {<br>
ThreadCheckIgnore(thr);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (!flags()->report_thread_<wbr>leaks)<br>
return;<br>
ThreadRegistryLock l(ctx->thread_registry);<br>
@@ -240,7 +240,7 @@ void ThreadStart(ThreadState *thr, int t<br>
uptr stk_size = 0;<br>
uptr tls_addr = 0;<br>
uptr tls_size = 0;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
GetThreadStackAndTls(tid == 0, &stk_addr, &stk_size, &tls_addr, &tls_size);<br>
<br>
if (tid) {<br>
@@ -271,7 +271,7 @@ void ThreadStart(ThreadState *thr, int t<br>
thr->tctx = (ThreadContext*)tr-><wbr>GetThreadLocked(tid);<br>
tr->Unlock();<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
if (ctx->after_multithreaded_<wbr>fork) {<br>
thr->ignore_interceptors++;<br>
ThreadIgnoreBegin(thr, 0);<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_suppressions.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_suppressions.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_suppressions.cc?<wbr>rev=285443&r1=285442&r2=<wbr>285443&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_suppressions.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_suppressions.cc Fri Oct 28 15:14:18 2016<br>
@@ -21,7 +21,7 @@<br>
#include "tsan_mman.h"<br>
#include "tsan_platform.h"<br>
<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Suppressions for true/false positives in standard libraries.<br>
static const char *const std_suppressions =<br>
// Libstdc++ 4.4 has data races in std::string.<br>
@@ -54,7 +54,7 @@ void InitializeSuppressions() {<br>
suppression_ctx = new (suppression_placeholder) // NOLINT<br>
SuppressionContext(<wbr>kSuppressionTypes, ARRAY_SIZE(kSuppressionTypes))<wbr>;<br>
suppression_ctx-><wbr>ParseFromFile(flags()-><wbr>suppressions);<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
suppression_ctx->Parse(__tsan_<wbr>default_suppressions());<br>
suppression_ctx->Parse(std_<wbr>suppressions);<br>
#endif<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_sync.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_sync.cc?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_sync.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_sync.cc Fri Oct 28 15:14:18 2016<br>
@@ -30,7 +30,7 @@ void SyncVar::Init(ThreadState *thr, upt<br>
this->next = 0;<br>
<br>
creation_stack_id = 0;<br>
- if (kCppMode) // Go does not use them<br>
+ if (!SANITIZER_GO) // Go does not use them<br>
creation_stack_id = CurrentStackId(thr, pc);<br>
if (common_flags()->detect_<wbr>deadlocks)<br>
DDMutexInit(thr, pc, this);<br>
@@ -120,7 +120,7 @@ bool MetaMap::FreeRange(Processor *proc,<br>
// without meta objects, at this point it stops freeing meta objects. Because<br>
// thread stacks grow top-down, we do the same starting from end as well.<br>
void MetaMap::ResetRange(Processor *proc, uptr p, uptr sz) {<br>
- if (kGoMode) {<br>
+ if (SANITIZER_GO) {<br>
// UnmapOrDie/MmapFixedNoReserve does not work on Windows,<br>
// so we do the optimization only for C/C++.<br>
FreeRange(proc, p, sz);<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_trace.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_trace.h?rev=285443&r1=285442&r2=285443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>tsan/rtl/tsan_trace.h?rev=<wbr>285443&r1=285442&r2=285443&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_trace.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/<wbr>rtl/tsan_trace.h Fri Oct 28 15:14:18 2016<br>
@@ -42,7 +42,7 @@ enum EventType {<br>
typedef u64 Event;<br>
<br>
struct TraceHeader {<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
BufferedStackTrace stack0; // Start stack for the trace.<br>
#else<br>
VarSizeStackTrace stack0;<br>
@@ -55,7 +55,7 @@ struct TraceHeader {<br>
<br>
struct Trace {<br>
Mutex mtx;<br>
-#ifndef SANITIZER_GO<br>
+#if !SANITIZER_GO<br>
// Must be last to catch overflow as paging fault.<br>
// Go shadow stack is dynamically allocated.<br>
uptr shadow_stack[kShadowStackSize]<wbr>;<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>