[compiler-rt] r208737 - [TSan] Build TSan-instrumented version of libcxx and use it in lit tests.
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Wed May 14 04:22:41 PDT 2014
And cmake logs contain the same errors as on the stage3 of the bootstrap build:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/3387
On Wed, May 14, 2014 at 3:10 PM, Kostya Serebryany <kcc at google.com> wrote:
> If I type "ninja" I get this:
>
> Make Error at
> /usr/local/google/kcc/llvm_cmake/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-stamp/libcxx_tsan-build.cmake:17
> (message):
> Command failed: 1
>
> '/home/kcc/cmake/bin/cmake' '--build'
> '/usr/local/google/kcc/llvm_cmake/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-build'
> '--config' '.'
>
>
>
> On Wed, May 14, 2014 at 2:30 AM, Alexey Samsonov <samsonov at google.com>
> wrote:
>>
>> Author: samsonov
>> Date: Tue May 13 17:30:16 2014
>> New Revision: 208737
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=208737&view=rev
>> Log:
>> [TSan] Build TSan-instrumented version of libcxx and use it in lit tests.
>>
>> TSan can produce false positives in code that uses C++11 threading,
>> as it doesn't see synchronization inside standard library. See
>> http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-February/035408.html
>> for an example of such case.
>>
>> We may build custom TSan-instrumented version libcxx to fight with that.
>> This change adds build rules for libcxx_tsan and integrates it into
>> testing infrastructure.
>>
>> Added:
>> compiler-rt/trunk/test/tsan/libcxx/
>> compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg
>> compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc
>> Modified:
>> compiler-rt/trunk/lib/tsan/CMakeLists.txt
>> compiler-rt/trunk/test/lit.common.configured.in
>> compiler-rt/trunk/test/tsan/CMakeLists.txt
>> compiler-rt/trunk/test/tsan/lit.cfg
>> compiler-rt/trunk/test/tsan/lit.site.cfg.in
>>
>> Modified: compiler-rt/trunk/lib/tsan/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/CMakeLists.txt?rev=208737&r1=208736&r2=208737&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/CMakeLists.txt (original)
>> +++ compiler-rt/trunk/lib/tsan/CMakeLists.txt Tue May 13 17:30:16 2014
>> @@ -75,6 +75,7 @@ set(TSAN_HEADERS
>> rtl/tsan_update_shadow_word_inl.h
>> rtl/tsan_vector.h)
>>
>> +set(TSAN_RUNTIME_LIBRARIES)
>> add_custom_target(tsan)
>> # TSan is currently supported on 64-bit Linux only.
>> if(CAN_TARGET_x86_64 AND UNIX AND NOT APPLE)
>> @@ -90,6 +91,7 @@ if(CAN_TARGET_x86_64 AND UNIX AND NOT AP
>> $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
>> CFLAGS ${TSAN_RTL_CFLAGS}
>> DEFS ${TSAN_COMMON_DEFINITIONS})
>> + list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch})
>> add_sanitizer_rt_symbols(clang_rt.tsan-${arch} rtl/tsan.syms.extra)
>> add_dependencies(tsan clang_rt.tsan-${arch}
>> clang_rt.tsan-${arch}-symbols)
>> @@ -97,6 +99,14 @@ endif()
>>
>> add_dependencies(compiler-rt tsan)
>>
>> +# Build libcxx instrumented with TSan.
>> +if(COMPILER_RT_HAS_LIBCXX_SOURCES)
>> + set(LIBCXX_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/libcxx_tsan)
>> + add_custom_libcxx(libcxx_tsan ${LIBCXX_PREFIX}
>> + DEPS ${TSAN_RUNTIME_LIBRARIES}
>> + CFLAGS -fsanitize=thread)
>> +endif()
>> +
>> if(COMPILER_RT_INCLUDE_TESTS)
>> add_subdirectory(tests)
>> endif()
>>
>> Modified: compiler-rt/trunk/test/lit.common.configured.in
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/lit.common.configured.in?rev=208737&r1=208736&r2=208737&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/lit.common.configured.in (original)
>> +++ compiler-rt/trunk/test/lit.common.configured.in Tue May 13 17:30:16
>> 2014
>> @@ -16,6 +16,7 @@ set_default("llvm_build_mode", "@LLVM_BU
>> set_default("llvm_src_root", "@LLVM_SOURCE_DIR@")
>> set_default("llvm_obj_root", "@LLVM_BINARY_DIR@")
>> set_default("compiler_rt_src_root", "@COMPILER_RT_SOURCE_DIR@")
>> +set_default("compiler_rt_obj_root", "@COMPILER_RT_BINARY_DIR@")
>> set_default("llvm_tools_dir", "@LLVM_TOOLS_DIR@")
>> set_default("clang", "@COMPILER_RT_TEST_COMPILER@")
>> set_default("compiler_id", "@COMPILER_RT_TEST_COMPILER_ID@")
>>
>> Modified: compiler-rt/trunk/test/tsan/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/CMakeLists.txt?rev=208737&r1=208736&r2=208737&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/tsan/CMakeLists.txt (original)
>> +++ compiler-rt/trunk/test/tsan/CMakeLists.txt Tue May 13 17:30:16 2014
>> @@ -1,11 +1,17 @@
>> -configure_lit_site_cfg(
>> - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
>> - ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)
>> -
>> set(TSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
>> if(NOT COMPILER_RT_STANDALONE_BUILD)
>> list(APPEND TSAN_TEST_DEPS tsan)
>> endif()
>> +if(COMPILER_RT_HAS_LIBCXX_SOURCES)
>> + list(APPEND TSAN_TEST_DEPS libcxx_tsan)
>> + set(TSAN_HAS_LIBCXX True)
>> +else()
>> + set(TSAN_HAS_LIBCXX False)
>> +endif()
>> +
>> +configure_lit_site_cfg(
>> + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
>> + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)
>>
>> if(COMPILER_RT_INCLUDE_TESTS)
>> configure_lit_site_cfg(
>>
>> Added: compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg?rev=208737&view=auto
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg (added)
>> +++ compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg Tue May 13 17:30:16
>> 2014
>> @@ -0,0 +1,10 @@
>> +def getRoot(config):
>> + if not config.parent:
>> + return config
>> + return getRoot(config.parent)
>> +
>> +root = getRoot(config)
>> +
>> +if not root.has_libcxx:
>> + config.unsupported = True
>> +
>>
>> Added: compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc?rev=208737&view=auto
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc (added)
>> +++ compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc Tue May 13
>> 17:30:16 2014
>> @@ -0,0 +1,24 @@
>> +// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
>> +#include <stdio.h>
>> +#include <memory>
>> +#include <thread>
>> +
>> +int main() {
>> + int v1 = 0;
>> + int v2 = 0;
>> + std::thread t1;
>> + std::thread t2;
>> +
>> + {
>> + auto thingy = std::make_shared<int>(42);
>> + t1 = std::thread([thingy, &v1] { v1 = *thingy; });
>> + t2 = std::thread([thingy, &v2] { v2 = *thingy; });
>> + }
>> +
>> + t1.join();
>> + t2.join();
>> + printf("%d %d\n", v1, v2);
>> + // CHECK-NOT: ThreadSanitizer: data race
>> + // CHECK: 42 42
>> + return 0;
>> +}
>>
>> Modified: compiler-rt/trunk/test/tsan/lit.cfg
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/lit.cfg?rev=208737&r1=208736&r2=208737&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/tsan/lit.cfg (original)
>> +++ compiler-rt/trunk/test/tsan/lit.cfg Tue May 13 17:30:16 2014
>> @@ -31,6 +31,18 @@ clang_tsan_cflags = ["-fsanitize=thread"
>> "-ldl",
>> "-m64"]
>> clang_tsan_cxxflags = config.cxx_mode_flags + clang_tsan_cflags
>> +# Add additional flags if we're using instrumented libc++.
>> +if config.has_libcxx:
>> + # FIXME: Dehardcode this path somehow.
>> + libcxx_path = os.path.join(config.compiler_rt_obj_root, "lib",
>> + "tsan", "libcxx_tsan")
>> + libcxx_incdir = os.path.join(libcxx_path, "include", "c++", "v1")
>> + libcxx_libdir = os.path.join(libcxx_path, "lib")
>> + libcxx_so = os.path.join(libcxx_libdir, "libc++.so")
>> + clang_tsan_cxxflags += ["-std=c++11",
>> + "-I%s" % libcxx_incdir,
>> + libcxx_so,
>> + "-Wl,-rpath=%s" % libcxx_libdir]
>>
>> def build_invocation(compile_flags):
>> return " " + " ".join([config.clang] + compile_flags) + " "
>>
>> Modified: compiler-rt/trunk/test/tsan/lit.site.cfg.in
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/lit.site.cfg.in?rev=208737&r1=208736&r2=208737&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/tsan/lit.site.cfg.in (original)
>> +++ compiler-rt/trunk/test/tsan/lit.site.cfg.in Tue May 13 17:30:16 2014
>> @@ -1,6 +1,8 @@
>> ## Autogenerated by LLVM/Clang configuration.
>> # Do not edit!
>>
>> +config.has_libcxx = @TSAN_HAS_LIBCXX@
>> +
>> # Load common config for all compiler-rt lit tests.
>> lit_config.load_config(config,
>> "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list