tsan: add __has_feature(thread_sanitizer)

llvm-svn: 170314
This commit is contained in:
Dmitry Vyukov 2012-12-17 08:52:05 +00:00
parent 41ffe3db59
commit a53767ea22
3 changed files with 26 additions and 0 deletions

View File

@ -68,6 +68,20 @@ Currently, ThreadSanitizer symbolizes its output using an external
#0 pthread_create tsan_interceptors.cc:705 (exe+0x00000000c790)
#1 main tiny_race.c:9 (exe+0x00000000a3a4)
``__has_feature(thread_sanitizer)``
------------------------------------
In some cases one may need to execute different code depending on whether
ThreadSanitizer is enabled.
:ref:`\_\_has\_feature <langext-__has_feature-__has_extension>` can be used for
this purpose.
.. code-block:: c
#if defined(__has_feature) && __has_feature(thread_sanitizer)
// code that builds only under ThreadSanitizer
#endif
Limitations
-----------

View File

@ -780,6 +780,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case("cxx_exceptions", LangOpts.Exceptions)
.Case("cxx_rtti", LangOpts.RTTI)
.Case("enumerator_attributes", true)
.Case("thread_sanitizer", LangOpts.SanitizeThread)
// Objective-C features
.Case("objc_arr", LangOpts.ObjCAutoRefCount) // FIXME: REMOVE?
.Case("objc_arc", LangOpts.ObjCAutoRefCount)

View File

@ -0,0 +1,11 @@
// RUN: %clang_cc1 -E -fsanitize=thread %s -o - | FileCheck --check-prefix=CHECK-TSAN %s
// RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-NO-TSAN %s
#if __has_feature(thread_sanitizer)
int ThreadSanitizerEnabled();
#else
int ThreadSanitizerDisabled();
#endif
// CHECK-TSAN: ThreadSanitizerEnabled
// CHECK-NO-TSAN: ThreadSanitizerDisabled