From 6136aae3233b1fb59c7256524daf985d7ca97ca0 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Tue, 8 Jul 2014 13:40:08 +0000 Subject: [PATCH] [tsan] Enable tsan's deadlock detector by default. The tsan's deadlock detector has been used in Chromium for a while; it found a few real bugs and reported no false positives. So, it's time to give it a bit more exposure. llvm-svn: 212533 --- compiler-rt/lib/tsan/rtl/tsan_flags.cc | 1 + compiler-rt/test/tsan/mutex_cycle2.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/compiler-rt/lib/tsan/rtl/tsan_flags.cc b/compiler-rt/lib/tsan/rtl/tsan_flags.cc index 1431200..123df49 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_flags.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_flags.cc @@ -102,6 +102,7 @@ void InitializeFlags(Flags *f, const char *env) { SetCommonFlagsDefaults(f); // Override some common flags defaults. f->allow_addr2line = true; + f->detect_deadlocks = true; // Let a frontend override. ParseFlags(f, __tsan_default_options()); diff --git a/compiler-rt/test/tsan/mutex_cycle2.c b/compiler-rt/test/tsan/mutex_cycle2.c index cd9a467..031830d 100644 --- a/compiler-rt/test/tsan/mutex_cycle2.c +++ b/compiler-rt/test/tsan/mutex_cycle2.c @@ -1,10 +1,13 @@ // RUN: %clangxx_tsan %s -o %t +// RUN: not %run %t 2>&1 | FileCheck %s // RUN: TSAN_OPTIONS=detect_deadlocks=1 not %run %t 2>&1 | FileCheck %s +// RUN: TSAN_OPTIONS=detect_deadlocks=0 %run %t 2>&1 | FileCheck %s --check-prefix=DISABLED // RUN: echo "deadlock:main" > %t.sup -// RUN: TSAN_OPTIONS="detect_deadlocks=1 suppressions=%t.sup" %run %t +// RUN: TSAN_OPTIONS="suppressions=%t.sup" %run %t 2>&1 | FileCheck %s --check-prefix=DISABLED // RUN: echo "deadlock:zzzz" > %t.sup -// RUN: TSAN_OPTIONS="detect_deadlocks=1 suppressions=%t.sup" not %run %t 2>&1 | FileCheck %s +// RUN: TSAN_OPTIONS="suppressions=%t.sup" not %run %t 2>&1 | FileCheck %s #include +#include int main() { pthread_mutex_t mu1, mu2; @@ -21,9 +24,12 @@ int main() { pthread_mutex_lock(&mu2); pthread_mutex_lock(&mu1); // CHECK: ThreadSanitizer: lock-order-inversion (potential deadlock) + // DISABLED-NOT: ThreadSanitizer + // DISABLED: PASS pthread_mutex_unlock(&mu1); pthread_mutex_unlock(&mu2); pthread_mutex_destroy(&mu1); pthread_mutex_destroy(&mu2); + fprintf(stderr, "PASS\n"); } -- 2.7.4