[compiler-rt] r208737 - [TSan] Build TSan-instrumented version of libcxx and use it in lit tests.

Kostya Serebryany kcc at google.com
Wed May 14 04:10:52 PDT 2014


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140514/899e1ae4/attachment.html>


More information about the llvm-commits mailing list